Resolves conflicts from the merged replay/command-chokepoint work:
- src/test/CMakeLists.txt: keep both new test sets (artifact + replay).
- GameWorldView::onFrame: keep the replay gate (if (!m_replayPlayer)) and
place the artifact-count / win / game-over polls inside it, de-duplicating
the game-over check.
- ArtifactWinConditionTest.cpp: route applySchematicChoice through
SimulationTestAccess (the mutator is now private post-lockdown).
- Simulation::computeStateChecksum: fold in m_isWon and m_artifactCount so the
new artifact state is covered by determinism/replay desync detection.
Simulation.h/.cpp auto-merged cleanly (applySchematicChoice landed private;
artifact accessors public; reset() clears artifact state; the artifact roll
draws from m_rng so it stays deterministic under replay).
All targets build; 365 cases / 3469 assertions pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DUsFgd2Ga6pmLz8giS8WUn
Add deterministic record/playback for a run.
Recording captures `(seed, config hash, ordered tick-tagged commands)` and re-simulates on playback — no state snapshots. `DotaFactory.exe --replay <file>` re-plays a recorded run view-only with manual speed/pause.
Reviewed-on: #4
Co-authored-by: Malte Langkabel <malte.langkabel@gmail.com>
Co-committed-by: Malte Langkabel <malte.langkabel@gmail.com>
- Add [artifacts] config section to world.toml with artifact_chance_formula (x = station level) and artifact_win_count
- Roll artifact chance before each schematic drop; on success show 2 schematics + Artifact option instead of 3
- Selecting Artifact increments artifact count; reaching artifact_win_count triggers win screen
- Display "Artifacts: x/y" in header bar via ArtifactCountChangedEvent
- Win screen mirrors game-over screen with "Won!" caption and same Restart/Quit buttons
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DUsFgd2Ga6pmLz8giS8WUn
Fixes a bug where the selected construction site was not drawn with a border.
Reviewed-on: #2
Co-authored-by: Malte Langkabel <malte.langkabel@gmail.com>
Co-committed-by: Malte Langkabel <malte.langkabel@gmail.com>