SimulationManager.Run():RunPhases(), which executes phases in order and checks phase.gameFinished after each one. If any phase sets it, RunPhases returns immediately (skipping the rest of Run() skips straight to outro instead of continuing the while-loop.Player type anywhere in the codebase yet. SimulationManager.playerCount is a plain int defaulting to 1 - nothing currently sets it automatically. An intro phase is expected to set it (e.g. from a GameState variable) before the turn loop needs it, but that phase doesn't exist yet either.Execute( GameStateManager, SimulationRenderer ) does the work; set gameFinished = true from inside it to end the game early. No concrete example phases exist yet (ShowTurnStartConditions / SimulateWorld were only described narratively in the outline, no code contract given).SimulationRenderer.Enqueue( command ) currently just returns Task.CompletedTask immediately - there's no rendering/animation pipeline behind it. SimulationCommand is an empty abstract base with no concrete commands defined. A GamePhase can call Enqueue today and it will compile and "work" (complete instantly), but nothing will actually happen on screen.DialogManager.instance.StartDialog( start ) - all real logic stays in Dialog/.