Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Relay
Carries the stats R.E.P.O. simulates on the host, so Grab Strength, Tumble Launch, Throw and Tumble Wings can finally apply while you are a co-op client.
| Last updated | 3 days ago |
| Total downloads | 778 |
| Total rating | 0 |
| Categories | Mods Upgrades Client-side Server-side AI Generated Quality Of Life |
| Dependency string | headclef-Relay-1.0.0 |
| Dependants | 2 other packages depend on this package |
This mod requires the following mods to function
BepInEx-BepInExPack
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2100README
Relay
A BepInEx library mod for R.E.P.O. that carries the stats the game simulates on the host, so they finally work while you are a co-op client.
What This Mod Does
Some upgrades in R.E.P.O. are not read on your own machine. Grab Strength, Tumble Launch, Throw and Tumble Wings are computed by the host, from the host's own copy of your character — and that copy only ever knows the upgrades you actually bought. It never learns about levels a mod gave you, and the game's stat-writing network messages are host-only by design, so a client cannot send them either.
The result: as a co-op client, those four stats do nothing, no matter which mod grants them. Your Improve points, your trained Train levels, your Berserk boost — the numbers show up, and nothing happens.
Relay is the one piece that closes that gap. Mods tell Relay what they want you to have; Relay reports it to the host, and Relay on the host applies it to the host's copy of you — the copy the game actually reads.
- You do not install Relay for its own sake. It has no features. Improve and Berserk depend on it; if you use them, you have it.
- Off by default. Nothing is bridged until you turn the switch on — see below.
- One writer, on purpose. Relay sums every mod's contribution and applies the total once. Two mods writing the same stat independently would fight: these fields are additive, and each writer has to work out "your value without my bonus" from what it last wrote — so one mod removing its boost looks, to the other, exactly like the game resetting the stat, and it re-applies on top. That doubles. Relay makes the whole class of bug impossible.
- It never touches your save. Only live values and a Character Stats overlay are written, never the game's upgrade dictionaries — which are the only thing R.E.P.O. saves. Your bonus dies with the level and can never be baked into the host's save file.
Configuration
Settings are in BepInEx/config/headclef.Relay.cfg or in the in-game mod config menu:
| Key | Default | Description |
|---|---|---|
| Enabled | false |
Turn the bridge on. Needed on both machines — yours and the host's. |
Both you and the host must run Relay with this on. This is the single most common reason it "doesn't work": the bridge is a conversation, and it takes two. Against a host without it, nothing happens and nothing breaks — you simply keep the vanilla behaviour for those four stats.
The switch takes effect immediately, but turn it on before you connect if you want to be sure it is not the cause of a connection problem — that is the path worth testing (see below).
Coming from Improve 1.1.9?
Improve 1.1.9 carried this bridge itself, with its own switch. That setting is gone and is not migrated. If you had it on, turn Relay's on instead:
| Improve 1.1.9 | Relay 1.0.0 | |
|---|---|---|
| File | headclef.Improve.cfg |
headclef.Relay.cfg |
| Key | Host-Simulated Stat Bridge |
Enabled |
Nothing warns you — a bridge you had switched on simply stops working until you switch this one on.
If it is not working
| Symptom | Cause |
|---|---|
| Nothing changes as a client | Switch off on your side, or the host's — check both |
| Berserk refuses to activate | Same thing; the log line says which half is missing |
| The force works, the damage does not scale | Character Stats is not installed — see Requirements |
| Nothing at all, no log lines | Host is not running Relay; nothing is listening |
Why it is off by default
An earlier version of this bridge, which lived inside Improve, broke multiplayer connect: the public server list would not populate, and picking a region hung the game on a loading screen forever — with no error anywhere in the log. That version subscribed to network events when the game loaded the mod and polled the network every frame, so it was live through connecting, region select and the lobby.
Relay only touches the network from inside a running level, twice a second, and stops the instant the level ends. That change is what brought the connect flow back, and it is the only evidence there is about the cause. Since the root cause was never proven outright, the switch stays off until you choose otherwise. With it off, not one line of the bridge runs, and every mod behaves exactly as it does without Relay installed.
Requirements
- BepInEx 5.x installed for R.E.P.O.
- Character Stats — optional. If present, Relay also updates the bridged level there, so mods that read levels rather than forces (like Increase Tumble Damage, which scales enemy damage by your Tumble Launch level) see the right number for a bridged player. Without it, Relay bridges the raw force only.
Installation
- Install via Thunderstore (recommended) — it comes with Improve and Berserk automatically.
- Or manually: place
Relay.dllinto yourBepInEx/pluginsfolder. - Launch the game — the config file is generated on first run.
- Turn it on if you want it:
[Multiplayer]→Enabled = true, on your machine and the host's. It does nothing until you do.
Improve 1.2.0+ and Berserk 1.1.0+ will not load without Relay — it is a hard dependency for both. Installing them through Thunderstore pulls it in for you.
Note for the host: you need Relay too, with the switch on, even if you personally do not care about the feature. The whole point is that clients cannot reach these stats without you — you are the one who applies them.
Multiplayer
This mod is only about multiplayer.
- As the host or in single player, Relay does nothing to your own character: your writes already are the simulation.
- As a co-op client, with the switch on and a host who also runs Relay, the four host-simulated stats apply to you for the first time.
- A payload can never speak for another player. The receiver identifies you by the network identity of the sender, mirroring the game's own ownership checks, so a client can only ever affect its own character.
For Mod Authors
Report what you want the local player to have, and Relay handles the rest:
// Add levels on top of what the host already knows about (your purchased upgrades).
Relay.Relay.Report("your.plugin.guid", Relay.Relay.StatTumbleLaunch, 5);
// Withdraw when your effect ends.
Relay.Relay.Clear("your.plugin.guid");
// True when the bridge can actually deliver: as the host, in single player, or as a client
// once the switch is on AND the host has answered. Gate any effect whose COST is local but
// whose BENEFIT is bridged on this — otherwise a client pays and gets nothing.
if (Relay.Relay.CanDeliver) { /* ... */ }
Sources are summed, so two mods granting the same stat both land. Use your plugin GUID as the source id. Calling Report on a timer is fine — Relay only sends when a total actually changes.
Development
Project Structure
├── Relay.cs # Plugin entry point, config & the public API
├── RelayBridge.cs # The bridge: sender, receiver, reconcile, Character Stats overlay
├── Patches/
│ └── RelayPatch.cs # The in-level coroutine that is the bridge's only clock
└── README.md
Building
This project references Character Stats (compile-only, soft dependency at runtime) and is part of the Repo.slnx solution:
dotnet build ../Repo.slnx
License
MIT — see LICENSE.
These mods (all) generated by using AI tools. If there's anything wrong use NexusMods to give a feedback, I use there more than ThunderStore.