How it works
The parts of Yharnam Together: the native PC port, the co-op code built into it, the patched map events and the server one player runs.
Overview
Hunter 1
- Bloodborne PC, the 1.09 game code
- co-op hooks at the packet choke point
Hunter 2
- Bloodborne PC, the 1.09 game code
- co-op hooks at the packet choke point
Co-op server
- accounts, presence, the team lobby
- the session: members, places, one enemy owner per map
- the world log: ordered, saved to disk, snapshots for joiners
- the relay: game packets to the right members
Hunter 3
- Bloodborne PC, the 1.09 game code
- co-op hooks at the packet choke point
Hunter 4
- Bloodborne PC, the 1.09 game code
- co-op hooks at the packet choke point
Two programs: the game, which everyone runs, and the server, which the host runs next to their game.
The port
Bloodborne PC loads the PS4 game's own x86-64 code and runs it on a small runtime, with shadPS4's renderer drawing through Vulkan. There is no emulator in between, so hooks, memory, threads, files and networking are direct. It keeps what the port offers (high frame rates, 4K, DLSS, FSR, XeSS, frame generation, HDR, ReShade, mouse and keyboard) and builds the co-op code in.
The co-op code
The co-op code changes the 1.09 game at about 125 known places, each listed in one table (emulator/src/core/bloodborne_patch_sites.h) with the bytes it expects. The launcher warns when another game patch writes over one of them.
It opens the game's session from the team instead of a summoning bell, removes the things that would end a normal visit (boss kills, lamp trips, deaths, map changes, area limits), shares enemies and world state, and adds party death, giving items and the harder enemies option.
Map events
Some of the game's event scripts stop early for a summoned player: boss rewards, boss fog, the first visit to the Hunter's Dream. Setup patches copies of your own event files (tools/re/party_boss_events.py checks that only the intended instructions changed). The release carries only their expected hashes, never game files.
The server
server/ is a shadNet server with the co-op server added (server/coop: the protobuf messages, the world log, the team lobby, trading). shadNet also answers the game's own online requests, so the game goes online without PlayStation Network or any public server. How the server and the games talk is on the server netcode page.
Repository
- bbport/
- Bloodborne PC, the native port, with the launcher and the Windows packaging
- emulator/
- shadPS4 with networking;
src/core/bloodborne_*is the co-op code the port builds in - server/
- shadNet and the co-op server
- backend/
- a stand-in for the game's online services
- tools/
- build scripts, local checks, releases, the test rig, reverse-engineering helpers
- docs/
- design notes
- website/
- this site
Each upstream project is imported with its history, so git log shows its authors. The design notes go deeper: BBPORT.md, WORLD_SYNC.md and FLAGS.md.