All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.1.2_22beta alongside stable 0.1.2.GameVersionSupport.cs) to correctly interface with different SteamManager.UnlockLobby() signatures (parameterless for stable, UnlockLobby(bool open) for beta). This ensures proper Steam lobby visibility control across game versions.Module) Support:
Module components (LateJoinManager.SyncModuleConnectionStatesForPlayer).ModuleConnectionSetRPC to the joining player.Module fields (SetupDone, ConnectingTop, etc.) in Utilities.cs.TruckScreenText.PlayerChatBoxStateLockedDestroySlackers and TruckScreenText.PlayerChatBoxStateLockedStartingTruck.EarlyLobbyLockHelper.TryLockLobby) prevents players from joining during potentially unstable mid-transition phases, before RunManager.ChangeLevel fully manages the lobby state.Patches.LobbyUnlockFailsafeCoroutine) to ensure the game lobby unlocks if the intended mechanism (via GameDirector.SetStart) is prevented from running (e.g., due to another mod's interference).RunManager_ChangeLevelHook_Postfix and disarmed by GameDirector_SetStart_Postfix.Lock Lobby On Level Generation Failure (Default: true) under the "Late Join Behavior" section.true (default), if a level reports a generation failure (and doesn't transition to the Arena), the lobby will be locked, preventing late joins.false, if a modded level reports a generation failure but the game continues (i.e., doesn't crash to Arena), L.A.T.E. will still evaluate normal scene-based join rules (Shop, Truck, Level) as if the failure didn't occur. This can be useful for modded levels that might incorrectly flag a failure but still load. This setting does not affect true failures that lead to the Arena scene.PhysGrabHinge objects (e.g., doors, lockers, cabinets).broken state sync (HingeBreakRPC), the mod now also syncs the open/closed state for late joiners using the PhysGrabHinge.closed field and OpenImpulseRPC. (Ref: DestructionManager.SyncHingeStatesForPlayer)Patches.ShouldAllowLobbyJoin logic now uses direct RunManager level instance comparisons (e.g., runManager.levelCurrent == runManager.levelArena) instead of relying solely on SemiFunc helper methods. This offers more precise control over lobby joinability based on the current scene, especially during level transitions.GameDirector.SetStart (postfix patch) is now the definitive point for unlocking the lobby after level generation and loading, if conditions permit. It also handles disarming the new lobby unlock failsafe.README.md to reflect successful testing and support for R.E.P.O. 0.1.2_22beta.README.md:
FastStartupImperium_Repo (due to patching LevelAnimationCompleted)BerserkerEnemies Incompatibility: Addressed a previous incompatibility with BerserkerEnemies that could cause issues with level generation completion hooks (e.g., preventing L.A.T.E.'s GameDirector.SetStart postfix from running).
[HarmonyPriority(Priority.Last)] to L.A.T.E.'s GameDirector_SetStart_Postfix and PlayerAvatar_LoadingLevelAnimationCompletedRPC_Prefix patches.Initial Release
BepInEx/config/LATE.cfg):
Kill If Previously Dead).Spawn At Last Position).Force Level Reload on Late Join).Log Level).RunManager: level name, completion status, game over).LevelGenerator).ExtractionPoint: state, goal fetched, current goal value, surplus value, shop status, active/inactive status).ValuableObject: current dollar value).ItemAttributes: current value).PlayerStateManager, PlayerAvatar.PlayerDeathRPC).TruckScreenText: initialization, current page).ValuableDirector).PhysGrabObject.DestroyPhysGrabObjectRPC).PhysGrabObjectImpactDetector.DestroyObjectRPC).PhysGrabHinge.DestroyHingeRPC, HingeBreakRPC).ItemToggle: ToggleItemRPC (On/Off), ToggleDisableRPC (Interactable).ItemBattery: BatteryFullPercentChangeRPC.ItemMine: StateSetRPC.ItemMelee: MeleeBreakRPC, MeleeFixRPC.ItemDrone: ButtonToggleRPC.ItemHealthPack: UsedRPC.ItemGrenade: TickStartRPC.ItemTracker: SetTargetRPC.EnemyParent (SpawnRPC, DespawnRPC).Enemy.TargetPlayerViewID, UpdatePlayerTargetRPC, etc.).Enemy.FreezeRPC).PlayerAdded) or leave (PlayerRemoved).Arena): DestroyCrownCageRPC, CrownGrabRPC (Winner), PlayerKilledRPC (Pedestal Count).VoiceManager, PlayerAvatar.UpdateMyPlayerVoiceChat).PlayerPositionManager) for Spawn At Last Position feature.NetworkManager, RunManager, PlayerAvatar, PhysGrabObject, PhysGrabObjectImpactDetector, PhysGrabHinge, EnemyVision, EnemyTriggerAttack, NetworkConnect, GameDirector.Utilities) for caching reflected members and helper functions.EnemyVision dictionary errors when late joiners trigger vision/attacks.PhotonNetwork.AutomaticallySyncScene = true early for joining clients via NetworkConnect patch.