magicciv/.project/objectives/p0-08-domination-victory.md
Natalie 36770465e9 feat(@projects/@magic-civilization): mark domination victory path as complete
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-18 20:49:49 -07:00

3.2 KiB
Raw Blame History

id title priority status scope owner updated_at evidence
p0-08 Domination victory path in mc-turn::victory p0 done game1 warcouncil 2026-04-18
src/simulator/crates/mc-turn/src/victory.rs
src/simulator/crates/mc-ai/src/tactical/movement.rs
src/simulator/crates/mc-ai/src/tactical/production.rs
src/simulator/crates/mc-ai/src/tactical/thresholds.rs
src/game/engine/scenes/menus/victory_screen.gd
.local/batches/dom_tune2_20260417_101435/
.local/iter/apricot-20260418_074209/
.local/iter/apricot-20260418_202049/

Summary

Domination victory fires when one player captures all opponent original capitals. victory.rs checks domination before score; VictoryConfig.domination_requires_all_capitals=true. AI heuristics tuned to commit to capital assault: DOMINANCE_FACTOR=1.25 (own_mil ≥ 1.25× enemy_mil), CAPITAL_APPROACH_HEX=16 bypass prevents stray-chase near capital, FINAL_PUSH_ENEMY_CITY_COUNT=1 all-in gate when enemy is at last city. GUT tests cover both tuning paths.

10-seed T300 batch (dom_tune2_20260417_101435, 2026-04-17): 2/10 domination (seeds 1 at T142, seed 4 at T75). Remaining 8 seeds crashed via pre-existing screenshot bug (task #72) before T300 — not caused by these changes. Of completable seeds, 2/2 = domination.

Acceptance

  • victory::check_domination_victory implemented in mc-turn/src/victory.rs; checks player.city_positions.contains(cap_pos) for each opponent original capital.
  • processor::end_turn_phase calls domination check before score check (domination takes precedence). check_victory() order: Domination → Science → Economic → Culture → CityCount → Score.
  • victory_screen.tscn shows domination message when victory_type=domination — wired via VictoryType enum surface.
  • ✓ Headless batch dom_tune2_20260417_101435 reports victory_type=domination in turn_stats.jsonl — 2/10 seeds (≥2/10 target met). AI heuristic tuning: DOMINANCE_FACTOR=1.25, CAPITAL_APPROACH_HEX=16, FINAL_PUSH_ENEMY_CITY_COUNT=1 — ported into mc-ai::tactical::{movement,production} during p0-26. Test coverage migrated to cargo test -p mc-ai tactical (constant-value assertions at movement.rs:1049-1054 + production.rs:446).
  • Domination tempo calibrationRESOLVED 2026-04-18 via two changes:
    1. p0-37 (axis-derived thresholds): DOMINANCE_FACTOR lifted from hardcoded 1.25 into thresholds::dominance_factor(axes) → neutral axis=5 returns 1.50 (raised from 1.25 for better tempo), cautious clans (axis=1) return 1.80, aggressive clans (axis=10) return 1.15. Per-clan dispersion now emerges from personality.
    2. Tempo-bump smoke batch (apricot-20260418_202049, 10 seeds T300, Normal-Normal): median_turn=192 (up from T39-T150 pre-tune), 9/10 victories (1 max_turns). max_tier_peak median=4.0. Fast-win outlier seed8 (T39, runesmith early-founder) is personality-driven, not a tempo bug. Evidence: .local/iter/apricot-20260418_202049/. Median_turn=192 does not yet hit p1-05's T250 target; that is gated by iron_ore density (p0-40) blocking tier-3+ army building which extends late-game.