
REPO Fixes Antispam Latency Fix
Fixes for R.E.P.O multiplayer: late-join enemy tracking errors, grab-beam log spam, instant grab-beam response, a stuck revive item, and LateJoinNow destroying equipped gear on level change.R.E.P.O Fixes+
Five small, independent fixes for problems that show up in modded R.E.P.O lobbies. Each one has its own on/off switch, so you only need whichever ones apply to you.
What it fixes, in plain terms
- Enemy tracker fix (late joiners) - Fixes lag or a stuck loading screen when someone joins your game after it's already started. Without this, every enemy that doesn't "know" about the late joiner throws an error every time it tries to see or track them - it can add up to serious stutter the longer the match runs.
- Grab beam antispam - Stops your log file (and sometimes your framerate) from getting flooded with errors when something you're holding with the grab beam gets destroyed mid-grab (thrown in a fire, extracted, killed, etc). Purely a cleanup fix - grabbing itself doesn't change.
- Instant grab beam - Makes your own grab beam turn on and off the instant you click, instead of visibly lagging behind your input in multiplayer. Other players are unaffected either way.
- Revive item fix - If you use the revive item on a downed teammate and they leave the game before getting revived, the item used to get permanently stuck "looking" for them and spam errors nonstop until the level ended, which could tank your host's performance. This notices and clears it automatically.
- LateJoinNow equipped-item fix - Only does anything if you also use LateJoinNow. Without this, LateJoinNow deletes everything currently equipped in your 3 belt slots (weapons, tools, purchased gear) every time the level changes - buy something and equip it, and it's gone the moment you load into the next level. This protects your equipped gear so it survives.
Turn any of these off individually in the config if you don't need them (BepInEx/config/ricketywrecked.repo.fixesplus.cfg, or through REPOConfig in-game).
For the technically curious
Enemy tracker fix (late joiners)
The base game registers each player with every enemy's vision tracking once, when the level's first enemy wave finishes spawning. Anyone who joins after that, or any enemy that spawns after they joined, is never registered. The missing entry throws a KeyNotFoundException every time that enemy checks vision or on-screen state for that player. It can repeat tens of thousands of times in a session and cause heavy stutter or a stuck load.
This registers joining players with every enemy tracker in the scene, registers all current players with each new enemy tracker, and adds a self-healing guard at the exact spot the game was crashing. It only calls the game's own one-shot registration method. Nothing polls and there is no per-frame cost.
Grab beam antispam
When something you are grabbing is destroyed (killed, extracted, despawned), the beam and player eye-tracking keep reading a transform that no longer exists for a frame. That throws NullReferenceException in PhysGrabBeam.DrawCurve and PlayerEyes.LookAtTransform, thousands of times over a long session.
DrawCurve gets the missing null checks. LookAtTransform has several unguarded branches, so it is wrapped in a catch-all instead. Suppression messages in the log are rate limited, so the mod doesn't create spam of its own.
Instant grab beam
In multiplayer the game sends "beam on" and "beam off" to everyone including yourself, so your own beam only appears after a round trip to the network. This runs your own beam locally straight away and tells the other players as usual. It also removes the beam's sound and camera-shake delay.
Other players' beams are unchanged, and other players don't need the mod: it sends the same messages the game already sends.
Revive item fix
The revive item locks onto a dead player's head. If that player leaves the lobby while dead, the item keeps targeting a head that no longer exists and throws a NullReferenceException every frame (about 40 a second) until the level ends, which costs the host frame rate. The game can't clear it on its own either.
This notices when the target is gone, clears it, and tells the other players the same way the game normally does, so the item goes back to looking for other dead players.
LateJoinNow equipped-item fix
LateJoinNow destroys every non-persistent networked object in the scene on every level change, to keep late-joiners from seeing stale objects from the previous level. Its own "what to keep" list only protects player avatars - nothing about whatever gear they currently have equipped. The result: purchased items sitting in a belt slot are destroyed the moment the level changes, for every player, host included - buy something in the shop and it's gone when the next level loads.
ItemEquippable already tracks a network-synced isEquipped flag for exactly this. This adds every currently-equipped item to LateJoinNow's own keep list, the same mechanism it already uses to protect players. Only equipped gear is protected - anything merely being carried/grabbed at that instant (valuables, junk) still resets, same as vanilla.
Requires LateJoinNow to do anything; finds it by name at runtime, so this mod doesn't need LateJoinNow's DLL to build against and simply does nothing if it isn't installed.
Settings
Each fix can be turned off in the config file (BepInEx/config/ricketywrecked.repo.fixesplus.cfg, or through REPOConfig). Restart the game after changing them.
| Setting | Default | What it controls |
|---|---|---|
EnemyTrackerFix |
on | Late-joiner enemy tracker fix |
GrabBeamAntispam |
on | Null guards and log-spam suppression |
InstantGrabBeam |
on | Instant local grab beam |
ReviveItemFix |
on | Revive item stuck on a player who left |
LateJoinNowEquippedItemFix |
on | Equipped gear survives level changes (needs LateJoinNow) |
If anything about grabbing feels off in your lobby, turn off InstantGrabBeam first.
Good to know
- Grabbed objects can still feel delayed when you are not the host. The game runs physics on the host and streams the result to you, and this mod does not change that.
- A patch that can't apply (for example after a game update) is logged and skipped, and the other fixes still load.
- Only needs BepInEx. Works alongside LateJoinNow, MorePlayers and similar mods, and was built and tested in a heavily modded profile on R.E.P.O v0.4.4.3.
- Every fix runs on your own game. Other players in your lobby don't need this mod, and having it or not doesn't affect who can join.
Credits
Made by RicketyWrecked. Not affiliated with the R.E.P.O developers or any of the mods mentioned above.