CabinGameManager drives the scripted sequence (HikerSequence, HostAtDoor, Eating, BoardGame, Ouija…). CabinHouseManager owns the persistent room/door/story booleans. Together they're the source of truth for almost everything in the cabin.
Sync: CabinAmbientSync.cs, CabinBoardGameSync.cs
Mike (Cabin variants)
deep
Mike is split into stage-specific behaviour scripts: MikeCabin, MikeFishing, MikeCabinCookController, MikePostEating, MikeAfterHiding. Each runs its own NavMesh + dialogue cues; the mod treats them as one logical actor and the host's chosen variant wins.
Sync: CabinNpcRegistry.cs via NpcBrainState
CabinHiker and HikerCabinController stage the "hiker at the window" sequence: walk-up, knock, force entry, and the player's host response (HostFixingSink, hide etc.). Most jumpscare-style horror beats hang off these two.
Sync: hiker state enums + go/moving/reachedPos/followingHost flags; lock window gated on CurrentSequence to prevent client clumping.
Board games — Jenga + Ouija
done
JengaController tracks pieces, drag/place state, and the dining-table collider mask. OuijaController runs the planchette target / timer / input fields and the audio bed. Both used to drift between peers; now both are host-authoritative with transform correction on the planchette + table.
Sync: CabinBoardGameSync.cs
PizzeriaGameManager owns the player mode, conversation timers, pizza/burp gates, phone UI state, and the soda-can seating flow. The scene starts with MikeDrivingInPizzeriaScene handling the cinematic drive-in.
Sync: PizzeriaSceneStateSync.cs
MikePizzeria handles in-restaurant Mike (table, dialogue, pizza handoff). Joined by PizzeriaHiker and the generic PizzeriaNPC patrons through a registry that mirrors the Cabin recipe.
Sync: GenericNpcRegistry (Pizzeria) — see SceneSyncRegistries.cs
RoadTripGameManager drives the long highway sequence — auto-conversation timing, road-bump events, phone moments, the deer encounter, and the school-bus cinematic. Most of the camera FOV / zoom drama lives here.
Sync: RoadTripSceneStateSync.cs
MikeInCar for passenger-seat Mike. MikeTruckInLoopScene, MikeTruckGoingToNora, and MikeTruckInParking for the truck-mounted variants used through the highway loop + handoffs.
Sync: PathVehicleState (typed) since wire proto 4.
OfficeLayoutGameManager + YellowIntroManager stage the office intro and end-scene yellow text. Subcontrollers cover every desk surface (Table / Computer / Coffee / Phone / TypeMaster / TypingShooter), appliances (radio, fridge, microwave), and restrooms.
Sync: OfficeSceneStateSync.cs
The cubicle monitor sequence that plays scripted clips behind the worker. Used to pick clips locally on each peer; now the host's clip identity and playback time win, with local monitor brain suppressed.
Sync key: SceneState.WorkerMonitor.*
ParkingLotGameManager sequences the parking-lot beats — call timing, intro, phone ringing, talk/hug mode, elevator travel. The setting drops you between scripted vehicle and elevator beats.
Sync: ParkingLotSceneStateSync.cs
Scripted walking-cop NPC who paces the parking lot. Used to run his NavMesh and animator locally on every peer, drifting hard; now host-authored with NavMesh brain suppressed on client.
Sync key: SceneState.WalkingCop.*
ParkingLotElevatorManager
done
The freight elevator — travel state, door open/close, audio cues, and the anti-throw zones that prevent items from being thrown out of bounds. Door + tailgate transforms are corrected directly.
Sync key: SceneState.Elevator.* · SceneState.AntiThrow.*
VendingMachineManager
done
Shared between Office and Pizzeria. Owns the vending dialogue camera, machine triggers, slot/sliding colliders, current soda-can visibility + kinematic state, vending audio, and player-camera FOV during the interaction.
Sync: VendingMachineSceneSync.cs