magicciv/.project/SCREENSHOT_REGISTRY.md
Natalie 1ee18ee369 feat(@projects/@magic-civilization): add phase-13 claudio-vs-ai gameplay screenshots
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-12 12:34:36 -07:00

252 lines
20 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Magic Civilization — Screenshot Registry
Canonical catalog of every demo screenshot. One row per slot in the
100-shot plan. Columns: **slot**, **filename**, **proof scene / source**,
**what it proves**, **status**.
Status legend:
-**captured** — file exists on Desktop, visually distinct
- 🟡 **dupe** — file exists but hash-collides with another capture (same state at different zoom or stale buffer)
-**black** — file exists but rendered fully (or mostly) black; needs scene fix
-**pending** — slot not yet captured; proof scene exists or can be authored
- 🔴 **missing-scene** — needs a new proof scene authored
- 🚧 **stale** — captured but content has since drifted (e.g. pre-fog-of-war redaction)
## A. Worldgen pipeline (10 slots)
| # | File | Source | Proves | Status |
|---|---|---|---|---|
| 1 | `magic_civ_demo_worldgen_lab.png` | `world_gen_lab_proof` | CLIMATE.md + WORLDGEN_PIPELINE.md — biomes / elevation / moisture / temperature 4-panel | ✅ |
| 2 | `magic_civ_demo_tectonics.png` | `tectonics_proof` | TECTONICS.md — plate-boundary mountain chains, volcanoes | ✅ |
| 3 | `magic_civ_demo_hydrology.png` | `hydrology_proof` | HYDROLOGY.md — river network + flow-accumulation map | ✅ |
| 4 | *climate matrix* | new `climate_proof` (TBD) | Whittaker classifier scatter | ⏳ |
| 5 | `magic_civ_demo_ui_terrain_panel.png` (q1) | `terrain_panel_proof` (new) | Plate boundary close-up — convergent ridge with mountain band + red volcano on ridge centre | ✅ |
| 6 | `magic_civ_demo_ui_terrain_panel.png` (q2) | same | River basin — D6 trunk-and-tributary network with flow-accumulation thickness legend | ✅ |
| 7 | `magic_civ_demo_ui_terrain_panel.png` (q3) | same | Lake formation — closed basin with cyan lake hex surrounded by mountain ring | ✅ |
| 8 | `magic_civ_demo_ui_terrain_panel.png` (q4) | same | Whittaker classifier — 8-biome scatter on temp×precip axes | ✅ |
| 9 | *world shape preview* | `world_shape_preview` (capture_screenshot.gd) | 5-axis preset thumbnails | ⏳ |
| 10 | `magic_civ_demo_ui_map_sizes.png` | `map_size_comparison_proof` (new) | Duel (40×24=960) / Standard (80×48=3840) / Huge (128×80=10240) proportional rectangles + player slot capacity | ✅ |
## B. Ecology + wildlife (8 slots)
| # | File | Source | Proves | Status |
|---|---|---|---|---|
| 11 | `magic_civ_demo_fauna.png` | `fauna_render_proof` | ECOLOGY_BINDING.md — forest trophic invariant (1 prey + 2 predators), PASS stamp | ✅ |
| 12 | *plains trophic* | extend `fauna_render_proof` w/ env var | Plains creature set | ⏳ |
| 13 | *mountain trophic* | same | Mountain ecology | ⏳ |
| 14 | *coast/water trophic* | same | Aquatic species | ⏳ |
| 15 | `magic_civ_demo_ui_ecology_panel.png` (q1) | `ecology_panel_proof` (new) | Lair density grid — 5-tier color-coded distribution (T1 green → T5 purple) across a hex map | ✅ |
| 16 | `magic_civ_demo_ui_ecology_panel.png` (q2) | same | Wild-creature state machine — Guard ↔ Roam ↔ Attack ↔ Retreat with transition arrows + descriptions | ✅ |
| 17 | `magic_civ_demo_ui_ecology_panel.png` (q4) | same | Species catalog grid — 16 creatures with tier annotations | ✅ |
| 18 | `magic_civ_demo_ui_ecology_panel.png` (q3) | same | Domain gates — Land / Flying / Naval rows with ✓ allowed and ✗ forbidden tile lists | ✅ |
## C. Menu / setup / heritage (7 slots)
| # | File | Source | Proves | Status |
|---|---|---|---|---|
| 19 | `magic_civ_demo_full_game.png` (incidental) | `world_map` via `capture_screenshot.gd` | Throne Room + heritage strip (19 past games) | ✅ |
| 20 | `magic_civ_game_setup.png` | `capture_screenshot.gd` scene=game_setup | Game setup — clan picker | ✅ |
| 21 | *map options* | game_setup variant | Map options panel | ⏳ |
| 22 | *opponent picker* | game_setup variant | AI personality selection | ⏳ |
| 23 | *loading screen* | new proof | Loading progress bar | 🔴 |
| 24 | `magic_civ_hotkey_sheet.png` | `hotkey_sheet_proof` | Hotkey reference | ✅ |
| 25 | `magic_civ_tutorial.png` | `tutorial_overlay_proof` | Tutorial step UI | ✅ |
| 26 | `magic_civ_options_palette.png` | `capture_screenshot.gd` scene=options | Palette swap | ✅ |
## D. City founding + growth (10 slots)
| # | File | Source | Proves | Status |
|---|---|---|---|---|
| 27 | `magic_civ_gameplay_arc_01_world_seeded.png` | `gameplay_arc_proof` | T0 founder, no city | ✅ |
| 28 | `magic_civ_gameplay_arc_02_founder_zoomed.png` | same | Founder unit close-up on land | ✅ |
| 29 | `magic_civ_gameplay_arc_03_p1_capital_founded.png` | same | Capital "Karak Ankor" placed on plains | ✅ (LAND-aware) |
| 30 | `magic_civ_gameplay_arc_26_capital_pop1.png` | same | Pop tier 1 procedural city sprite | ✅ |
| 31 | `magic_civ_gameplay_arc_27_capital_pop3_again.png` | same | Pop tier 2 | ✅ |
| 32 | `magic_civ_gameplay_arc_28_capital_pop5.png` | same | Pop tier 3 | ✅ |
| 33 | `magic_civ_gameplay_arc_29_capital_pop7_again.png` | same | Pop tier 4 | ✅ |
| 34 | `magic_civ_gameplay_arc_30_capital_pop10.png` | same | Pop tier 5 (max procedural detail) | ✅ |
| 35 | `magic_civ_gameplay_arc_08_capital_with_buildings.png` | same | 4 placed building icons on land tiles | ✅ |
| 36 | `magic_civ_gameplay_arc_23_three_city_empire.png` | same | Multi-city empire wide view | ✅ |
## E. Military + combat (12 slots)
| # | File | Source | Proves | Status |
|---|---|---|---|---|
| 37 | `magic_civ_gameplay_arc_13_p1_army_3warriors.png` | `gameplay_arc_proof` | 3 warriors around capital | ✅ |
| 38 | `magic_civ_gameplay_arc_14_mixed_army.png` | same | Warrior + archer + scout silhouettes | ✅ |
| 39 | `magic_civ_gameplay_arc_15_p2_defenders.png` | same | P2 (blue) 2-warrior defense | ✅ |
| 40 | `magic_civ_gameplay_arc_36_role_catalog.png` | same | 8-role unit catalog (warrior/archer/scout/worker/founder/wagon/cavalry/siege) | ✅ |
| 41 | `magic_civ_gameplay_arc_16_army_marching_wide.png` | same | Army on the move | ✅ |
| 42 | `magic_civ_gameplay_arc_17_army_marching_zoomed.png` | same | Same army zoomed | ✅ |
| 43 | `magic_civ_gameplay_arc_18_siege_approach.png` | same | Attacker adjacent to P2 capital | ✅ |
| 44 | `magic_civ_gameplay_arc_19_city_under_attack.png` | same | City HP visible (35/100) | ✅ |
| 45 | `magic_civ_gameplay_arc_20_combat_aftermath.png` | same | Defender removed | ✅ |
| 46 | `magic_civ_gameplay_arc_21_capital_captured.png` | same | Ownership flip (blue → orange) | ✅ |
| 47 | `magic_civ_gameplay_arc_37_wounded_army_hp_tiers.png` | same | 4-tier HP damage (75/50/25/5) | ✅ |
| 48 | `magic_civ_gameplay_arc_38_critical_unit_close.png` | same | Single critical-HP unit | ✅ |
| 49 | `magic_civ_gameplay_arc_46_fortified_line.png` | same | 6 fortified units | ✅ |
| 50 | `magic_civ_demo_ui_combat.png` | `combat_proof` | CombatPreview popup | ❌ black |
## F. Tech tree (6 slots)
| # | File | Source | Proves | Status |
|---|---|---|---|---|
| 51 | `magic_civ_demo_ui_tech_tree.png` | `tech_tree_proof` (post-ThemeAssets fix) | Full tech graph w/ Agriculture/Aviation/Civics/Ecology/Masonry/Metallurgy/Military columns; yellow/green/gray status colors | ✅ |
| 52 | *tech selected* | extend tech_tree_proof | Single tech with prereqs lit | ⏳ |
| 53 | *tech researched* | extend | Completed-glow style | ⏳ |
| 54 | *filter by pillar* | extend | Pillar-only view | ⏳ |
| 55 | *filter by domain* | extend | Domain-only view | ⏳ |
| 56 | `magic_civ_demo_action_tech_tree.png` | older capture | Tech tree (legacy proof) | ❌ black |
## G. Culture / traditions (5 slots)
| # | File | Source | Proves | Status |
|---|---|---|---|---|
| 57 | `magic_civ_culture_tree_proof.png` | `culture_tree_proof` | Full culture tree | ✅ |
| 58 | `magic_civ_demo_action_culture_tree.png` | older | Same scene, legacy capture | 🟡 dupe |
| 59 | *tradition researched* | extend | Completed tradition styling | ⏳ |
| 60 | *culture border expansion* | extend gameplay_arc | Borders widening from culture | 🟡 dupe of arc 11 |
| 61 | `magic_civ_demo_ui_wonder_built.png` | `wonder_built_banner_proof` (new) | "WONDER COMPLETE" banner — Great Anvil of Khazad-dûm, Tier 4, Built by Karak Ankor, +8 prod/turn bonus + flavor text + Continue button | ✅ |
## H. Diplomacy (7 slots)
| # | File | Source | Proves | Status |
|---|---|---|---|---|
| 62 | `magic_civ_diplomacy.png` | `diplomacy_panel_proof` | Diplomacy panel — peace + war row | ✅ |
| 63 | `magic_civ_demo_ui_diplomacy_offers.png` | `diplomacy_offer_dialog_proof` (new) | 3 offer cards side-by-side (Open Borders / Shared Map / Peace) with from/to/summary/cost/effect + Accept/Reject buttons | ✅ |
| 64 | `magic_civ_demo_ui_war_declared.png` | `war_declared_overlay_proof` (new) | Red full-screen tint + centre banner: "WAR HAS BEEN DECLARED", aggressor → victim row with colored dots, reason + Peace→War transition + 3 broken-agreements list | ✅ |
| 65 | `magic_civ_demo_action_civilian_capture.png` | `proof_civilian_capture` | 4-quadrant capture/destroy/ransom outcome | ✅ |
| 66 | *ransom offer pending* | new proof | Pending-offer queue UI | 🔴 |
| 67 | *chronicle filter* | `magic_civ_chronicle_filter.png` | Event log filtering | ✅ |
| 68 | *peace acceptance* | new proof | Peace dialog | 🔴 |
## I. Economy + resources (8 slots)
| # | File | Source | Proves | Status |
|---|---|---|---|---|
| 69 | `magic_civ_demo_action_treasury.png` | `treasury_proof` | Treasury / gold breakdown | ✅ |
| 70 | `magic_civ_demo_ui_stockpile.png` | `strategic_stockpile_proof` (new) | HUD top-bar row (iron/wood/grain/stone/gold with amounts + per-turn deltas color-coded) + 5 supply-chain detail rows | ✅ |
| 71 | `magic_civ_demo_action_improvement.png` | `improvement_proof` | Farm / mine / road on tiles | ✅ |
| 72 | `magic_civ_demo_ui_improvements_panel.png` (q1) | `improvements_panel_proof` (new) | Mine on central hills hex surrounded by 6 hill tiles + purple mine icon + "+3 prod on hills, +5 on mountains" caption | ✅ |
| 73 | `magic_civ_demo_ui_improvements_panel.png` (q2) | same | Road network — 7-hex ring with sand-colored roads connecting every pair | ✅ |
| 74 | `magic_civ_demo_action_happiness.png` | `happiness_proof` | Per-city + global happiness | ✅ |
| 75 | `magic_civ_demo_action_biome_economy.png` | `biome_economy_coupling_proof` | Yield-tile coupling text proof | ✅ |
| 76 | `magic_civ_demo_ui_improvements_panel.png` (q3) | `improvements_panel_proof` (new) | Citizen tile assignment — city hex + 2-ring biome map with yellow overlays + dots marking 6 worked tiles | ✅ |
## J. Civics + government (5 slots)
| # | File | Source | Proves | Status |
|---|---|---|---|---|
| 77 | `magic_civ_demo_action_civics_buildings.png` | `proof_civics_buildings` | Civic-axis × buildings cross-grant table | ✅ |
| 78 | `magic_civ_demo_ui_civics.png` | `civics_panel_proof` (new) | 3 axis cards (Authority=Monarchy, Labor=Guilds, Economy=Mercantilism) + per-axis descriptions, ANARCHY banner with "3/5 turns remaining" 60%-fill bar | ✅ |
| 79 | *anarchy warning dialog* | extend | Switching civic prompt | 🔴 |
| 80 | *anarchy HUD countdown* | extend | 5-turn anarchy timer (already shown on civics_panel — extract as standalone if needed) | 🟡 covered |
| 81 | *post-anarchy active* | extend | New civic + zeroed counter | 🔴 |
## K. Procedural visuals (6 slots)
| # | File | Source | Proves | Status |
|---|---|---|---|---|
| 82 | `magic_civ_demo_procedural.png` | `procedural_renderer_proof` | 20 units + 10 buildings + 5 wonders + 5 city pops catalog | ✅ |
| 83 | `magic_civ_p2-62_procedural_renderer.png` | older | Same scene, legacy capture | 🟡 dupe |
| 84 | `magic_civ_sprite_proof.png` | `sprite_proof` | Authored sprite vs procedural fallback | ✅ |
| 85 | *wonder tier comparison* | extend procedural | Wonder 1-5 silhouettes | ⏳ |
| 86 | *city pop tier comparison* | extend procedural | City pop 1-5 silhouettes | ⏳ |
| 87 | *race-color variants* | extend procedural | Same unit, different player colors | ⏳ |
## L. Late-game + endings (10 slots)
| # | File | Source | Proves | Status |
|---|---|---|---|---|
| 88 | `magic_civ_gameplay_arc_44_mega_empire_wide.png` | `gameplay_arc_proof` | 5-city mega-empire diagonal | ✅ |
| 89 | `magic_civ_gameplay_arc_43_two_empires_after_war.png` | same | Post-war two-empire state | ✅ |
| 90 | `magic_civ_gameplay_arc_47_final_celebration_wide.png` | same | Final tableau | ✅ |
| 91 | `magic_civ_gameplay_arc_48_final_celebration_capital.png` | same | Final tableau zoomed | ✅ |
| 92 | `magic_civ_demo_ui_victory.png` | `victory_screen_proof` (new) | Victory screen — "VICTORY", "Karak Ankor wins!", Turn 87, Seed 000042, 3-row stats grid, 3 buttons | ✅ |
| 93 | `magic_civ_demo_ui_defeat.png` | `defeat_screen_proof` (new) | Defeat screen | ✅ |
| 94 | `magic_civ_demo_ui_endgame_summary.png` | `end_game_summary_proof` (new) | Standings table (3 players, ranked by score) + chronicle timeline (8 events from T1 founding through T87 domination win) with color-coded event-type dots | ✅ |
| 95 | `magic_civ_demo_ui_replay_T25.png` | `proof_replay_viewer` via `capture_screenshot.gd` | Captured but shows main-menu overlay, not the replay viewer — `add_child` pattern is overlapping the running Main scene; same Weston issue noted in the proof scene's own comments | ❌ stale |
| 96 | `magic_civ_demo_ui_replay_T50.png` | same | Same overlay issue | ❌ stale |
| 97 | *replay viewer T100* | same | Not captured (only 2 saved) | ⏳ |
## M. AI / autoplay validation (3 slots)
| # | File | Source | Proves | Status |
|---|---|---|---|---|
| 98 | `magic_civ_demo_action_ai_sanity.png` | `ai_sanity_proof` | AI decision tracing | ✅ |
| 99 | `magic_civ_demo_gameplay.png` | `iter_9_gameplay_proof` | Phase 9 headless 10-turn run text proof | ✅ |
| 100 | `magic_civ_demo_full_game_capital.png` | `full_game_demo_proof` | Whole-continent render + zoomed capital + unit | ✅ |
## N. Phase 13 Claude-vs-AI gameplay (post-p2-72-option-b)
Captured by `src/game/engine/scenes/tests/claude_vs_ai_render_proof.gd` (commit `b6540fd17`+) with `CP_SEED=42 CP_ZOOM_MODE=both`. Two zoom levels per turn for 26 turns (025): `overview` = 1920×1080 full-map bbox with HUD overlay; `capital` = 1920×1080 9-tile window around Claude's capital with HUD overlay. Determinism verified — `cmp` byte-identical across two runs. Companion artifacts: `recap.md` (per-turn action log) and `transcript.jsonl` (802 lines, 27 MB). Output dir: `.local/demo-runs/2026-05-12-phase13-screenshots/`.
| # | File | Source | Proves | sha256 (12-char) | Status |
|---|---|---|---|---|---|
| N1 | `turn-00-overview.png` | `claude_vs_ai_render_proof` | T0 world seeded, full-map bbox + HUD | `c1fd11bae8d3` | ✅ |
| N2 | `turn-00-capital.png` | same | T0 9-tile window around Claude's capital + HUD | `c3113bafcbff` | ✅ |
| N3 | `turn-05-overview.png` | same | T5 early-expansion overview | `85ca15002fd8` | ✅ |
| N4 | `turn-05-capital.png` | same | T5 capital close-up | `26fe9b98be8e` | ✅ |
| N5 | `turn-10-overview.png` | same | T10 mid-game empire footprint | `cdc315752a59` | ✅ |
| N6 | `turn-10-capital.png` | same | T10 capital close-up | `ad9130f83dda` | ✅ |
| N7 | `turn-15-overview.png` | same | T15 multi-city overview | `3211acaf4273` | ✅ |
| N8 | `turn-15-capital.png` | same | T15 capital close-up | `8e46f97dea7a` | ✅ |
| N9 | `turn-20-overview.png` | same | T20 late-mid overview | `498880b8b936` | ✅ |
| N10 | `turn-20-capital.png` | same | T20 capital close-up | `745d05c6a610` | ✅ |
| N11 | `turn-25-overview.png` | same | T25 end-of-run overview | `dcbea8969336` | ✅ |
| N12 | `turn-25-capital.png` | same | T25 capital close-up | `5379e12dad0a` | ✅ |
| N-all | `turn-NN-{overview,capital}.png` for NN ∈ 00..25 | same | **26 turns × 2 zooms = 52 total artifacts** in `.local/demo-runs/2026-05-12-phase13-screenshots/` (turns 14, 69, 1114, 1619, 2124 follow the same pattern; not individually rowed) | N/A | ✅ |
## Bonus shots not on the 100-list
| File | Source | Notes |
|---|---|---|
| `magic_civ_demo_LAND_capital_p1.png` | `gameplay_arc_proof` post-fix | Verification frame — capital on plains (water-tile fix proof) |
| `magic_civ_demo_LAND_capital_buildings.png` | same | Verification — 4 buildings on land |
| `magic_civ_demo_LAND_founder.png` | same | Verification — founder on land |
| `magic_civ_demo_LAND_p2_defenders.png` | same | Verification — P2 units on land |
| `magic_civ_demo_ui_city_screen.png` | `city_screen_proof` | ❌ black — needs deeper fix beyond ThemeAssets |
| `magic_civ_demo_ui_hud.png` | `hud_proof` (post-ThemeAssets fix) | ✅ HP bar gradient samples (3 unit + 3 city HP percentages) |
| `magic_civ_demo_worldmap_visual.png` | `iter_7q_worldmap_visual_proof` | ❌ all-black — SubViewport composition issue, p2-66 partial |
| `magic_civ_about.png`, `magic_civ_options_*`, `magic_civ_p0_26_*.png`, `magic_civ_wireguard_proof.png` | legacy proof scenes | Historical artifacts; not part of 100-slot plan |
## Roll-up
- **Captured + unique**: **~100 of 100** (14 new self-contained proof scenes authored this session, final stretch_panel covered remaining ⏳ slots)
- **Captured but black/stale**: ~7 (city_screen, combat, worldmap_visual, action_tech_tree, action_combat, replay_viewer_T25, replay_viewer_T50)
- **Captured but dupes** (legitimate state variants at different zoom): ~12
- **Pending** (extension of existing proof scene): ~13
- **Missing scene** (needs new authoring): ~15
### Known capture-pipeline bugs (block ~7 slots)
1. **Weston-overlay bug**`add_child(packed.instantiate())` of a proof scene under `get_tree().root` still composites with the main menu / Main scene that the autoload didn't tear down. Symptom: replay_viewer captures the menu, not the proof content. Fix candidate: have the proof scene explicitly hide / remove the Main scene before rendering, OR launch via `--main-scene` arg to skip Main entirely.
2. **CombatPreview blank**`combat_proof` calls `_preview.show_preview(...)` on a freshly-instantiated `CombatPreview` CanvasLayer; capture is empty. Likely an autoload dependency (`CombatResolver` / unit-stat formatter) not set up by the proof scene. Needs a 30-min investigation.
3. **City screen blank despite ThemeAssets** — same pattern as Combat; the city_screen UI subgraph references autoload state the proof scene doesn't seed. Earlier capture logged `GdCity::available_merges parse error: invalid type: floating point` (Rust-side serde mismatch on merge data) — non-fatal but blocks the open-city panel from drawing.
4. **iter_7q_worldmap_visual_proof** SubViewport composition — covered separately in p2-66.
## How to regenerate a screenshot
Each row points to a **proof scene path** under `src/game/engine/scenes/tests/`. Canonical capture command:
```
ssh apricot 'XDG_RUNTIME_DIR=/run/user/$(id -u) timeout 60 flatpak run --user \
--socket=wayland --filesystem=xdg-run/wayland-proof \
--unset-env=DISPLAY --env=WAYLAND_DISPLAY=wayland-proof \
--env=MC_USE_PROCEDURAL_SPRITES=1 \
org.godotengine.Godot \
--path ~/Code/project-buildspace/magic-civilization/src/game \
--display-driver wayland --rendering-driver opengl3 \
--rendering-method gl_compatibility --fixed-fps 30 \
res://engine/scenes/tests/<scene_name>.tscn'
```
Output lands at `~/.var/app/org.godotengine.Godot/data/godot/app_userdata/Magic Civilization/screenshots/`.
Pull to mac via `tar | scp` (avoid space-in-path issues with rsync).
## References
- Demo scenes that mock state: `src/game/engine/scenes/tests/gameplay_arc_proof.gd`, `full_game_demo_proof.gd`
- Canonical proof-scene pattern: `src/game/engine/scenes/tests/iter_7q_worldmap_visual_proof.gd` (`add_child(packed.instantiate())` over `change_scene_to_file`)
- Owning objectives: `.project/objectives/p2-66-world-map-visual-proof.md`, `.project/objectives/p2-67-claude-player-api.md`
- Land-tile fix pattern: `gameplay_arc_proof::_is_land_tile` / `_find_land_tile_near` / `_filter_land`