
LatejoinMapSyncFix
Fixes for joining R.E.P.O mid-level: uncovers the map rooms explored before you arrived, and sets up level pieces whose setup never reached you (invisible holes, phantom walls). Works with LateJoinNow.Latejoin Map Sync Fix
Fixes two things that go wrong when you join a R.E.P.O lobby in the middle of a level (with a late-join mod such as LateJoinNow):
- A covered map. The map uncovers a room when the game sees a player walk into it, and every player's game does that on its own - nothing about it is shared. Join mid-level and every room explored before you arrived stays covered until the next level. This mod uncovers them.
- Invisible holes and phantom walls. When the host builds a level, each level piece is told which of its sides connect to a neighbour, which decides its floor bridges, walls and pit covers. That message is only sent to players already in the game, so a mid-level joiner can end up with holes they fall straight through and walls that aren't really there. This mod sets those pieces up on your side the same way the host did.
How the map part works
- Host and joiner both have this mod: when someone joins mid-level, the host sends them the rooms explored so far, and their map uncovers exactly those.
- Only the joiner has it: nothing can be sent, so by default nothing changes. Turn on
RevealAllRoomsWhenHostHasNoModto uncover the whole map instead when the host doesn't have the mod (note: that also shows rooms nobody has explored yet). - Players without the mod are never affected.
The level-piece repair only needs the mod on the joiner's side. It waits a few seconds after you arrive so that anything the host's late-join mod resends lands first, and it only touches pieces that are still not set up.
Settings
BepInEx/config/ricketywrecked.repo.mapsyncfix.cfg, or REPOConfig in-game. Restart the game after changing.
| Setting | Default | What it does |
|---|---|---|
MapSync |
on | Host: send explored rooms to mid-level joiners. Joiner: uncover the rooms the host sends. |
RevealAllRoomsWhenHostHasNoMod |
off | Joiner: uncover every room if the host can't send its list. |
LevelRepair |
on | Joiner: set up level pieces whose setup message never arrived. |
For the technically curious
- Map:
RoomVolume.SetExplored()is called locally from each player'sRoomVolumeCheck; nothing is networked. A mid-level join is detected on the client as the firstRunManager.UpdateLevelin a Photon room being a real level within 10 s ofOnJoinedRoom, acted on atLevelGenerator.GenerateDone. The host, on a remotePlayerAvatar.Startduring a running level, sends the positions of exploredRoomVolumes (raise-event 163, tagged). The joiner matches them by position and only marks a room explored once itsMapModulecover exists. - Level pieces:
Module.ModuleConnectionSetRPCgoes toRpcTarget.All(not buffered). The joiner rebuilds each unset piece's sides from neighbouring pieces 15 units away (plus the first piece's connection to the start room) and runs the game's ownModulePropSwitch.Setup(). A guard makes the RPC ignore pieces that are already set up, because runningSetup()twice rotates the switches onto the wrong side.
Good to know
- The BepInEx name is "Map Sync Fix" (GUID
ricketywrecked.repo.mapsyncfix) on purpose: LateJoinNow warns about any other plugin whose name contains "late" or "join". - Only needs BepInEx. Doesn't affect who can join.
License
Copyright (c) 2026 RicketyWrecked. All rights reserved. You may download and play with this mod, and list it as a dependency in your own Thunderstore modpack. You may not copy, modify, decompile, reuse or re-upload any of it without written permission - see the included LICENSE file. Permission requests: Discord.
Credits
Made by RicketyWrecked. Not affiliated with the R.E.P.O developers or any of the mods mentioned above.
Questions, bug reports, or suggestions: Discord.