Full notes
Full Airline Ops update
Read the full published notes in a cleaner layout. The original post stays linked below.
What changed
- Store
- Fixes
- Gameplay
- Events
- Performance
Airline Ops changes
CREW DEADHEAD MECHANIC (NEW SYSTEM) Files: CrewDeadheadMechanic.js, CrewPositionBoard.jsx Crew members are now physical. When they fly to Fort Lauderdale, they are IN Fort Lauderdale. No teleporting home. If there's no return flight, they stay stranded at $225/day (hotel + per diem) until the player sends a plane to get them. 6 wire points integrated:
Flight arrival updates crew currentLocation to destination
Daily tick charges $225/day per stranded crew member
Crew picker only shows crew physically at departure airport
Diversions move crew to the diversion airport
Route cancellation warns about stranded crew
Crew Position Board UI added to OpsCenter
The Position Board shows all crew with location, status, days stranded, and daily bleed cost. Deadheaded crew highlighted in red at top. No automation, no solutions. The player figures it out. WebLogic automates it later as a $22M purchase.
- CLOCK SPEED — STALE CLOSURE FIX FileGameLoopEngine.jsx 7 references to worldState inside the setInterval were using the stale closure value instead of currentState from worldStateRef.current. This caused Simulation mode to run at 128x (Simple mode speed) instead of 12x on game start. Player had to click 1x or 2x to normalize. Fixed: all worldState references inside setInterval replaced with currentState.
GAMEMODE BOOT SEQUENCE FIX File: WorldStateContext.jsx Two boot paths now properly separated:
NEW GAME: localStorage wins (player just selected it)
CONTINUE: Save file wins (that's what they saved)
Previously the save file could override the player's mode selection due to async race condition in loadFromFile. The isNewGame flag now gates which authority sets gameMode.
- SILENT CREW WIPE FIX FileGameLoopEngine.jsx dailyDeadheadTick returns { updatedCrew, newsMessages } but the wiring was reading .crew and .alerts (wrong property names). This set crew = undefined every end-of-day, silently wiping the entire crew array. The try/catch swallowed the error. Fixed property names.
- ROUTE CANCEL CRASH FIX FileWorldStateContext.jsx onRouteCancelled_strandCrew is a void function that pushes messages into a newsFeed array. The wiring was destructuring its return value as { crew, alerts }, crashing on every route cancellation in simulation mode. Fixed to pass newsFeed array directly.
- RENDERER CRASH FIX (from earlier session) FileGameLoopEngine.jsx Milestone useEffect had [worldState, setWorldState] as deps. Main loop calls setWorldState every 100ms, effect fired every 100ms creating/destroying 5-second intervals 10x/sec. Over 2 minutes: ~1,200 effect cycles with stale closures accumulating, pushing renderer past limits. Fixed: useEffect uses worldStateRef, deps reduced.
PRE-SAVE SANITIZER (from earlier session) File: GameLoopEngine.jsx 7 checks with auto-fix run at top of every save: duplicate flight IDs, duplicate auto-returns, orphaned flights, double-assigned crew, NaN cash, self-routes, null array entries.
CLOCK-DRIVEN FLIGHT PHASES (from earlier session) File: GameLoopEngine.jsx Game clock is now single source of truth for flight timing. buildPhaseSchedule() pre-calculates timestamps, getPhaseFromClock() replaces distance-fraction logic. FIDS shows DEP and ETA columns.
GROUND HANDLING TURNAROUND (from earlier session) Return flights wait for actual turnaround time:
No contract: 45 min
Regional Handler ($1,800/mo): 35 min
Premium Handler ($4,500/mo): 25 min
- DUPLICATE CREW MODEL CLEANUP FileCrewModel.js / crew.js Removed 4 duplicate deadheadDays: 0 lines. Added currentLocation and deadheadDays fields to generateCrewMember with currentLocation defaulting to homeBase.
Source
Changelog.gg summarizes and formats this update. How we read updates.
