R.E.P.O.
You are viewing a potentially older version of this package. View Latest Version
Install with App

Details

Date Uploaded
yesterday
Downloads
790
Size
48KB

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 RevealAllRoomsWhenHostHasNoMod to 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's RoomVolumeCheck; nothing is networked. A mid-level join is detected on the client as the first RunManager.UpdateLevel in a Photon room being a real level within 10 s of OnJoinedRoom, acted on at LevelGenerator.GenerateDone. The host, on a remote PlayerAvatar.Start during a running level, sends the positions of explored RoomVolumes (raise-event 163, tagged). The joiner matches them by position and only marks a room explored once its MapModule cover exists.
  • Level pieces: Module.ModuleConnectionSetRPC goes to RpcTarget.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 own ModulePropSwitch.Setup(). A guard makes the RPC ignore pieces that are already set up, because running Setup() 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.

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.