Multivoid adds co-op multiplayer to Voices of the Void, a single-player Unreal Engine 4.27 game, without modifying a single original game file. These pages describe what the mod is, what it syncs, how it works, and how to work on it. Pick a lane; nobody reads this tree top to bottom. The maintainer's working notes live outside the repository; what is here is the current state of the mod and the rules for changing it.
| install.md | Install, update, uninstall. The single owner of that text; the README and every release only link here |
| ../SECURITY.md | What the mod does and does not protect, and how to report a vulnerability. Read the "what does not hold" part before hosting for strangers |
| ../README.md | The front page: what works today, where to get builds, who contributed |
| credits.md | Every outside code contribution, report and review that changed the mod, and what shipped from it |
Start here, in this order:
| architecture.md | The one read: the layers, who owns which state, how bytes move, how peers and entities are named, and how a join works |
| scope.md | What is and is not replicated. This one is law: anything not listed is deliberately not synced |
| devs-gauntlet.md | The game developers' public statement on why multiplayer mods fail, and the answer to each claim. It is the bar this project builds to |
| feasibility.md | Whether this is possible at all, answered with measurements |
| roadmap.md | Where it is going: the phases and where we are in them |
| ../CONTRIBUTING.md | The rules a change must respect, and the shape a commit and a doc must have |
Then, if you are going to touch code:
| re-workflow.md | How this project reverse-engineers the game: reflection first, then a disassembler, then UE4SS as a probe. The probes do not ship; UE4SS ships only as the loader |
| testing.md | The test rig, the launcher and its scenarios, the in-game harness, and the gates a push runs |
| release.md | How a build becomes a release, and the gates it must pass |
| versioning.md | The version pair two peers must match, the files a game update touches, how a broken build says so, and the port runbook |
| bytecode-fingerprint.md | How the mod tells that a game function it depends on changed its logic: the canonical text of Blueprint bytecode and its fingerprints |
| votv-ui-style.md | The game's own widget style, measured; binding for anything drawn inside the game's UI |
Before writing any entity-sync, hook or spawn-catch code, read these three:
| coop-sync-doctrine.md | How a system gets synced here: foundation first, the authority table, the dispatch-seam ladder, brain parking, identity, the mandatory late-join answer, and the forbidden-crutch list |
| coop-dispatch-visibility.md | Will my hook even fire? Visible versus invisible Blueprint dispatch, and the trap that init() is Blueprint-internal |
| coop-entity-expression-map.md | How each entity gets identity, expression and destruction, plus the duplication matrix |
One page per subsystem, all on the same skeleton: purpose, how it works, who owns what, the wire messages, the late-join answer, the known limits with their evidence, and the code map.
| join.md | Joining a game: admission, the save transfer, the connect replay, the join window, and the late-join rule every lane answers |
| players.md | The remote player: the puppet, the pose stream, names, skins, damage, death, sleep, inventory, moderation |
| props.md | Props: identity, the birth and death seams, holding and throwing, containers, the props that change on their own |
| deployables.md | The tools that leave an actor behind: the grappling hook and rope, the owner's stream, the anchor handoff, the tie that lives on the host |
| piles.md | Trash piles: the host's id across pile and clump, the client's grab as an intent, the dispenser piles |
| npcs-and-kerfur.md | Host-owned characters, the creatures each peer owns, the killer wisp, the roaches, and the kerfur robot across its two forms |
| events-and-weather.md | The clock, the weather, who rolls, the story events and how a client sees one fire, the event actors, the pyramid, the alarm, emails and the task |
| signals.md | The signal workstation: occupancy, the desk, the download simulation, the catch and the dishes, the deck, drives and racks, the laptop, the database, and the upgrades |
| devices.md | Doors, keypads, lights, the power panel, the turbine, windows and grime, the drone, the signal servers |
| base-computer.md | The base laptop and the economy: the balance, upgrades, the laptop's tab and inbox, shop orders, the coin gun, the floppy slot |
| vehicles.md | The ATV: a mirror that runs the vehicle's physics natively and is corrected, the two authority predicates, the condition that travels |
| ui.md | The native screens, the F1 overlay, the HUD, and the game's notifications |
| send-path.md | How fast each connection is paced, measured rather than configured; who may fill a send buffer, and where a held-back send waits |
| master-server.md | The lobby list, the join brokering, the signaling relay and TURN, self-hosting |
| voice-and-chat.md | Host-authored chat and its history, proximity voice over the same connection |
And the two maps:
| code-map.md | Where every concept lives: one folder each, and the files in it |
| status.md | What is synced, system by system, who owns it, and how far each one is |
Status and evidence are tagged, and the tags are load-bearing:
| Tag | Means |
|---|---|
[V] |
measured, with a citation: a log line, a disassembly, a file and line |
[RD] |
derived from reverse engineering, not directly observed running |
[?] |
unverified: a hypothesis wearing a claim's clothes |
| DESIGN vs AS-BUILT | what was planned vs what shipped. These drift, and the docs say when they did |
A doc that says something works without naming its evidence is a bug in the doc.