Skip to content
Yharnam Together

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
One UDP link per game, with its own resends and ordering. No game talks to another.
Every game keeps one link to the co-op server on the host's PC.

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.