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.
LateJoinFixed
Polished & bug-free LateJoin for REPO (fix by Scorpio). Fixes covered maps, resting frozen enemies, phantom walls/holes, item disappearance, black screens, and inventory sync.
CHANGELOG
Changelog
[1.3.0] - 2026-10-03
Added / Fixed (EN)
- Map Exploration Sync (Integrated from MapSyncFix):
- Host automatically synchronizes all explored
RoomVolumepositions to mid-level joiners via Photon event code 163 (RW.MapSync). - Late joiners uncover matching rooms as soon as their map modules are ready, completely fixing covered/black maps for newcomers.
- Fully cross-compatible with standalone
MapSyncFixusers. - Added fallback option (
RevealAllRoomsWhenHostHasNoMod) to reveal the entire map if the host does not have the mod.
- Host automatically synchronizes all explored
- Resting / Frozen Enemies Fix (
EnemySync):- Host informs mid-level joiners of all resting/dormant enemies using vanilla
DespawnRPC. - Fixes the classic bug where mid-level joiners saw enemies standing completely frozen and unresponsive in their spawn rooms. Works even for vanilla clients joining a host with this mod.
- Host informs mid-level joiners of all resting/dormant enemies using vanilla
- Invisible Holes & Phantom Walls Fix (
LevelRepair):- Guarded
Module.ModuleConnectionSetRPCwith a prefix to prevent runningSetup()on already initialized pieces (which flipped wall and floor switches to the wrong side). - Client automatically repairs and connects any unset level modules based on the 15-meter grid layout, rebuilding missing floor bridges, pit covers, and walls.
- Guarded
- Configuration & Optimization:
- Added full bilingual configuration options for
MapSync,RevealAllRoomsWhenHostHasNoMod,LevelRepair, andEnemySync.
- Added full bilingual configuration options for
Добавлено / Исправлено (RU)
- Синхронизация исследованной карты (интеграция MapSyncFix):
- Хост автоматически передаёт координаты всех исследованных комнат зашедшему посреди раунда игроку (Photon event 163,
RW.MapSync). - У новичка корректно открываются все исследованные командой зоны, устраняя проблему полностью закрытой чёрной карты.
- Полная совместимость с игроками с отдельным модом
MapSyncFix. - Добавлена опция
RevealAllRoomsWhenHostHasNoModдля открытия всей карты, если у хоста нет мода.
- Хост автоматически передаёт координаты всех исследованных комнат зашедшему посреди раунда игроку (Photon event 163,
- Исправление застывших монстров (
EnemySync):- Хост отправляет новичку стандартный
DespawnRPCдля спящих/отсутствующих на карте врагов. - Полностью исправлен баг, когда зашедший игрок видел спящих монстров неподвижно застывшими в комнате спавна. Работает даже для игроков без модов, подключающихся к хосту.
- Хост отправляет новичку стандартный
- Исправление невидимых дыр и фантомных стен (
LevelRepair):- Добавлен хук на
Module.ModuleConnectionSetRPC, защищающий от повторной настройки блоков (из-за чего мосты и стены выворачивались не в ту сторону). - Клиент спустя 6 секунд после генерации проверяет и автоматически восстанавливает соединения непривязанных модулей уровня по 15-метровой сетке, устраняя провалы в пустоту и невидимые преграды.
- Добавлен хук на
- Настройки и оптимизация:
- Добавлены переключатели в конфиг для всех новых функций с поддержкой русского и английского языков.
[1.2.9] - 2026-10-02
Fixed (EN)
- Item Disappearing When Equipped By Late Joiner: Complete fix for items vanishing into the void when late-joining players put an item into an inventory slot (1, 2, 3).
- Fixed
EnsureInventoryReadyout-of-bounds error that prevented inventory spot initialization. - Eliminated the RPC drop and retry coroutine stall, ensuring seamless client-host synchronization.
- Added robust slot state sanitization and fallback recovery to guarantee items are placed into the UI slot and never destroyed.
- Fixed unequip security check (
SemiFuncOwnerOnlyRPC) for late joiners.
- Fixed
Исправления (RU)
- Исчезновение предметов при экипировке новичком: Полное исправление бага с исчезновением вещей при взятии в слот инвентаря (1, 2, 3) зашедшим игроком.
- Исправлен вылет
IndexOutOfRangeExceptionвEnsureInventoryReady, блокировавший привязку слотов. - Убрана задержка сетевого RPC, вызывавшая рассинхронизацию с хостом и деактивацию вещи.
- Добавлена очистка слота и гарантированное восстановление предмета в UI инвентаря.
- Исправлена проверка прав на вытаскивание предметов из слотов (
RPC_CompleteUnequip).
- Исправлен вылет
[1.2.8] - 2026-10-02
Fixed (EN)
- Item Disappearing When Putting Into Inventory Slot: Fixed the critical bug where items completely disappeared into thin air when a late-joining newcomer attempted to put them into an inventory slot (1, 2, or 3).
- Proactive Inventory Initialization: Resolved the issue where
Inventory.instance.inventorySpotswas left uninitialized ([null, null, null]) withspotsFeched = falsebecauseInventorySpot.LateStart()ran during menu scenes. ImplementedEnsureInventoryReady()which actively scans the scene and linksInventorySpotelements toInventory.instanceimmediately on join, level transition, and input attempt. - Eliminated RPC Drop / Deadlock: Fixed
ItemEquippableUpdateItemStatePrefixso it immediately ensures inventory readiness instead of interceptingRPC_UpdateItemStateinto a fragile coroutine that timed out and dropped the equip event while the host teleported the item to the void. - Postfix Safety Net: Added
ItemEquippableUpdateItemStatePostfixto ensure that ifequippedSpotfails to bind during vanilla execution, it is immediately recovered, assigned, and registered with the HUD slot, releasing any lingering physics grabs. - Late Join Inventory State Sync: Added state synchronization for equipped items in
SendStateSyncStreamed, ensuring late joiners receive exact equipped item states for all players. - PhysGrabber Remote & Level Guards: Fixed
PhysGrabberUpdatePrefixwhich previously disabledPhysGrabber.Update()for remote players and during scene transitions. Remote players now update grab physics, beams, and visuals seamlessly. - InventoryUI NullReferenceException Fix: Patched
InventoryUI.Update()to prevent NRE crashes whenLevelGenerator.Instanceis not yet available or generated.
- Proactive Inventory Initialization: Resolved the issue where
Исправления (RU)
- Исчезновение вещей при помещении в слот инвентаря: Полностью устранён критический баг, из-за которого взятый предмет бесследно пропадал при попытке положить его в слот инвентаря (клавиши 1, 2 или 3) у зашедшего посреди игры игрока.
- Гарантированная инициализация слотов инвентаря: Исправлена ошибка, из-за которой массив
Inventory.instance.inventorySpotsоставался пустым ([null, null, null]), так как методInventorySpot.LateStart()выполнялся ещё в главном меню. Создан методEnsureInventoryReady(), который активно находит объекты слотов в сцене и мгновенно регистрирует их в инвентаре при входе, смене фаз и нажатии клавиш. - Устранение блокировки и дропа сетевых RPC: Исправлен префикс
ItemEquippableUpdateItemStatePrefix, который ранее перехватывал сетевой RPCRPC_UpdateItemStateв 2-секундную корутину. Из-за отсутствия слотов корутина завершалась без выполнения, пока хост уже сжимал предмет и телепортировал его в небо. - Страховочный Postfix для экипировки: Добавлен постфикс
ItemEquippableUpdateItemStatePostfix, который страхует вызов: если слот не привязался в стандартном коде игры, он мгновенно восстанавливаетequippedSpot, отображает иконку в интерфейсе и корректно освобождает захват руки. - Синхронизация экипированных предметов хостом: Добавлена передача состояний всех надетых предметов в
SendStateSyncStreamedпри позднем подключении, чтобы у новичка и хоста состояния инвентаря были на 100% согласованы. - Исправление работы PhysGrabber у тиммейтов: Исправлен
PhysGrabberUpdatePrefix, который ошибочно блокировалPhysGrabber.Update()для всех других игроков и в фазах без генератора уровня. - Защита интерфейса InventoryUI от NRE: Добавлен патч на
InventoryUI.Update(), предотвращающий падение интерфейса из-за отсутствияLevelGenerator.Instance.
- Гарантированная инициализация слотов инвентаря: Исправлена ошибка, из-за которой массив
[1.2.7] - 2026-10-02
Fixed (EN)
- Missing Closed Doors & Empty Doorways: Fixed the bug where closed doors were missing for late-joining players, leaving empty doorways opening into the dark/void.
- Eliminated the destructive
Object.Destroycall inTryForceSpawnSingle(PhysGrabObject)on objects with hinges (PhysGrabHinge). Previously, doors were mistakenly destroyed when forced to spawn on client join. - Fixed map screen door icons: preserving the door GameObject ensures
DirtFinderMapDoorremains active, restoring door markers on the map screen. - Preserved door kinematics: doors on non-master clients rely on PhotonTransformView kinematic synchronization (since non-master clients destroy the joint in
PhysGrabHinge.Awake). PreventedisKinematicfrom being forced tofalse, preventing door panels from falling through floors or de-syncing.
- Eliminated the destructive
- English Mod Logs: Translated all BepInEx log messages (
LogInfo,LogWarning,LogError,Verbose) across all source files to English for better diagnostics and readability.
Исправления (RU)
- Исчезновение закрытых дверей и пустые проёмы в темноту: Устранён баг, из-за которого у зашедшего игрока отсутствовали закрытые двери, оставляя пустые дверные проёмы в темноту.
- Полностью удалён деструктивный вызов
Object.DestroyвTryForceSpawnSingleдля объектов с петлями (PhysGrabHinge). Ранее мод ошибочно уничтожал двери при попытке форсированного спавна на клиенте. - Восстановлены значки дверей на карте: сохранение объекта двери предотвращает удаление компонента
DirtFinderMapDoor, благодаря чему двери снова отображаются на экране карты/радара. - Сохранение кинематики дверей: у клиентов без прав хоста физический сустав удаляется самой игрой в
PhysGrabHinge.Awake, и двери синхронизируются через PhotonTransformView как кинематические. Убран сбросisKinematic = false, из-за которого двери падали сквозь пол или рассинхронизировались.
- Полностью удалён деструктивный вызов
- Логи мода переведены на английский язык: Все сообщения в консоли BepInEx (
LogInfo,LogWarning,LogError,Verbose) во всех файлах мода переведены на чистый английский язык для удобства отладки.
[1.2.6] - 2026-10-01
Fixed (EN)
- Shop & Level Missing Walls / Voids / Floor Holes: Fixed the critical bug where late-joining players in the Shop or level experienced missing walls, gaping holes into the void, or half of the shop/rooms blocked off.
- Idempotent Wall Rotation Hook: Patched
ModulePropSwitch.Setupwith a deterministic Harmony prefix that preserves the pristine prefab side. This eliminates the fatal in-place rotation accumulation bug where repeated synchronization calls shifted door/wall switches by +90° each time. - Shop Mode Fully Supported: Extended all module validation, repair routines (
SweepAndRepairModulesClient), and object spawning to support the Shop (SemiFunc.RunIsShop()). - Grid Alignment Fix: Corrected geometric module step detection to 30m grid spacing matching REPO's internal layout.
- Generator Unlock: Ensured
LevelGeneratorcompletion signals unlock client-side lighting, fog, and room volume setups reliably in both levels and shop.
- Idempotent Wall Rotation Hook: Patched
Исправления (RU)
- Исчезновение стен, дыры в пустоту и пропадающий пол в Магазине и на уровнях: Полностью устранён баг, из-за которого при позднем входе в магазин или на уровень пропадали стены, пол или отрезалась половина локации.
- Защита от скручивания стен (Идемпотентный
ModulePropSwitch): Добавлен Harmony-патч, фиксирующий исходную сторону света стены. Устранён критический баг игры, при котором каждый повторный сетевой вызов синхронизации проворачивал стены модуля ещё на 90°, меняя дверные проёмы и глухие стены местами. - Полная поддержка Магазина: Все алгоритмы проверки и авто-починки модулей (
SweepAndRepairModulesClient) и спавна предметов теперь полноценно работают в фазе магазина (SemiFunc.RunIsShop()). - Коррекция шага сетки: Исправлен базовый шаг поиска соседних комнат с 15м на 30м в соответствии с разметкой сетки REPO.
- Стабильная прогрузка освещения: Гарантирован корректный выход клиента из ожидания спавна модулей для бесперебойного запуска освещения (
EnvironmentDirector), тумана и объемов комнат.
- Защита от скручивания стен (Идемпотентный
[1.2.5] - 2026-10-01
Fixed (EN)
- Living Players Mistakenly Marked Dead: Fixed a severe bug where living players were falsely detected as dead and had their avatars hidden due to flawed periodic background checks (
pgo.centerPoint.y < 2000fandsqrMagnitude < 0.25f). Death detection is now strictly verified viadeadSet,health <= 0, andplayerDeathHead.triggered. - Preserved Network RPC Delivery (
ReviveRPC): RootPlayerAvatarGameObject is no longer deactivated when hiding dead player dummies, ensuring PUN 2 delivers incoming RPCs so players can always be successfully revived. - Physical Doors No Longer Deleted: Removed destructive legacy code that deleted hinge doors (
Object.Destroy(val.gameObject)), restoring normal room doors and interactions. - Teammate Skin/Color Clones Fixed: Removed logic that clobbered remote players' cosmetics with local player cosmetics, restoring authentic player appearance.
- Physics Stability: Removed global
isKinematic = falseoverride on physics objects, preventing held items, shop displays, and truck items from falling through floors or exploding.
Исправления (RU)
- Устранено ложное признание живых игроков мёртвыми: Исправлен критический баг, из-за которого живые игроки внезапно признавались погибшими и исчезали из-за некорректных эвристик в фоновом цикле (
y < 2000иsqrMagnitude < 0.25). Теперь смерть проверяется строго поdeadSet,health <= 0и триггеру головы смерти. - Сохранение приёма сетевых RPC (Воскрешение): Объект аватара больше не выключается целиком, скрывается только визуальная модель. Благодаря этому Photon продолжает доставлять сетевые вызовы (
ReviveRPC), и погибших игроков всегда можно воскресить. - Двери комнат больше не удаляются: Полностью вырезан деструктивный код, удалявший двери на петлях (
Object.Destroy) при спавне на клиенте. - Исправлено клонирование скинов: Убран код, затиравший скины и цвета тиммейтов скинами локального игрока.
- Стабильность физики предметов: Убран сброс
isKinematicу физ-объектов, из-за которого предметы выпадали из рук, витрин и грузовика или проваливались сквозь пол.
[1.2.4] - 2026-10-01
Fixed (EN)
- Missing Rooms / Blocked Walls on Late Join: Fixed a critical network bug where late joiners experienced missing rooms or doorways blocked by solid walls (
ModulePropSwitch).- Implemented Photon Event 173 (
ModuleSyncEventCode): Host delivers complete reliable room connection snapshots (ConnectingTop/Bottom/Right/Left/First) directly to late joiners, bypassing dropped unbuffered RPCs. - Added Client Autonomous Self-Healing (
SweepAndRepairModulesClient): Client continuously audits room modules; if unconfigured, it utilizes reliable host snapshot data or geometric 15m grid neighbor detection to automatically configure room connections, remove blocking walls, and open doorways. - Fixed client coroutine hang in
LevelGenerator.Generate()(ModulesSpawned < ModuleAmount), ensuring environment lighting, fog, and farClipPlane initialize cleanly.
- Implemented Photon Event 173 (
Исправления (RU)
- Исправление пропавших комнат и заблокированных проходов (стен): Устранён баг, из-за которого при заходе посреди игры у игрока пропадали комнаты или проходы оказывались замурованы сплошными стенами (
ModulePropSwitch).- Реализован Photon Event 173: Хост надёжно отправляет полный слепок соединений всех комнат (
ConnectingTop/Bottom/Right/Left/First) новому игроку в обход сбрасываемых сетевых RPC. - Добавлено Клиентское авто-восстановление комнат (
SweepAndRepairModulesClient): Клиент автоматически проверяет все модули карты. Если комната не настроена, мод применяет полученные данные или вычисляет соседние комнаты по 15-метровой сетке карты, моментально убирает глухие стены и открывает проходы в комнаты. - Устранено зависание клиента в цикле генерации уровня
LevelGenerator.Generate(), благодаря чему корректно запускаются освещение комнат, туман и дальность прорисовки.
- Реализован Photon Event 173: Хост надёжно отправляет полный слепок соединений всех комнат (
[1.2.3] - 2026-10-01
Fixed (EN)
- Dead Player Ghost / Dummy Cleanup at (0, 0, 0): Fixed a game bug where connecting late while teammates were dead caused their frozen character models to spawn at (0, 0, 0) or spawn point. The mod now automatically synchronizes death states and cleans up inactive dummy bodies on late join while fully preserving their revival head mechanics (
ReviveRPC).
Исправления (RU)
- Устранение фантомных стоячих моделек мёртвых игроков на (0, 0, 0): Исправлен баг игры, когда при заходе посреди матча модельки уже погибших тиммейтов зависали в виде стоячих манекенов на координатах (0, 0, 0) или на спавне. Мод теперь синхронизирует состояние смерти и скрывает неактивные тела, полностью сохраняя возможность их воскрешения через голову (
ReviveRPC).
[1.2.2] - 2026-10-01
Fixed (EN)
- Critical Host Black Screen Resolved: Reverted level generation and animation completion hooks strictly to author's proven baseline to prevent permanent black screen when hosting.
- Native Spawning Restored: Original host and level spawn logic preserved with zero interference on normal match start.
Исправления (RU)
- Критический фикс чёрного экрана у хоста: Полностью восстановлена исходная механика анимаций загрузки и завершения генерации уровня, исключающая зависание на чёрном экране при хостинге.
- Нативный спавн: Исходная логика спавна хоста и игроков сохранена в исходном виде при обычном старте матча.
[1.2.1] - 2026-10-01
Fixed (EN)
- Critical Host Black Screen Fix: Fixed an issue where the host would get stuck on a permanent black loading screen when starting or loading into a level.
- Native Spawning Restored: Fixed
PlayerSpawnhook so local players and host avatars spawn properly with all components. - Menu Indicator: Added active version watermark in the main menu
★ LateJoinFixed v1.2.1 (fix by Scorpio) [Active]. - Loading Watchdog: Improved anti-hang watchdog to ensure loading UI dismisses cleanly once the level is ready.
Исправления (RU)
- Критический фикс чёрного экрана у хоста: устранён баг с зависанием на вечном чёрном экране при создании лобби и загрузке на карту.
- Штатный спавн: восстановлен нативный спавн хоста и всех компонентов игрока без вмешательства мода при обычном старте.
- Индикатор в меню: отображение статуса мода в главном меню игры.
- Watchdog таймер: доработан механизм аварийного сброса зависшего экрана загрузки.
[1.2.0] - 2026-10-01
Fixed (EN)
- Fixed infinite black screen when joining mid-game.
- Implemented raycast-based safe spawn positioning to prevent spawning in walls or falling into the void.
- Fixed broken arms, missing PhysGrabber item holding, and facial expressions for remote players.
- Changed default public lobby prefix to
[Late Join (fix by Scorpio)].
Исправления (RU)
- Исправлен вечный чёрный экран при подключении посреди игры.
- Исправлен спавн в стенах и падение в бездну (добавлен умный поиск безопасной точки и проверка пола рейкастом).
- Исправлены сломанные руки, PhysGrabber и мимика у подключающихся игроков.
- Префикс открытых лобби обновлён на
[Late Join (fix by Scorpio)].