No description
Find a file
Natalie a3b2a2324f test(@projects/@magic-civilization): 🧪 p3-17 deterministic self-play first-contact gate
Closes p3-17's "measurable improvement in self-play: earlier first-contact" as a
reproducible cargo test (the sim is deterministic, so this needs no apricot smoke
batch). Two AI militarists start fogged-apart on a 12x12 map; the frontier-seek
exploration must bring one into view of another within 40 turns. Asserts no
contact at game start (fog intact) and contact by the budget. This is the
discovery feed p3-16's decide_diplomacy (declares only on a *discovered* rival)
depends on — it never fired reliably before exploration landed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 00:46:34 -04:00
.ai-arena-test
.forgejo feat(@projects/@magic-civilization): 🎬 declarative start-script system (p3-14) 2026-06-19 17:56:50 -05:00
.out-of-scope
.project docs(@projects/@magic-civilization): 📝 regenerate objectives dashboard (verify step 2) 2026-06-24 19:51:32 -04:00
docs docs(military): 📝 Update Phase 3 military communications documentation and add AI fairness testing objective for fog-of-war mechanics 2026-05-26 02:21:13 -07:00
drafts ui(site-c): 💄 Redesign layout, styling, and interactivity for Site C with updated HTML structure, JavaScript behavior, and CSS styling 2026-05-26 02:21:12 -07:00
engine/addons/magic_civ_physics
public docs(@projects/@magic-civilization): 📝 regenerate objectives dashboard (verify step 2) 2026-06-24 19:51:32 -04:00
screenshots
scripts test(@projects/@magic-civilization): 🚦 Rail-1 verify gate — no game-data transform logic in GDScript 2026-06-24 23:55:39 -04:00
src test(@projects/@magic-civilization): 🧪 p3-17 deterministic self-play first-contact gate 2026-06-25 00:46:34 -04:00
tooling fix(simulator): 🐛 AI/suggest production city_id round-trip + restore gdext build 2026-06-23 18:48:37 -04:00
tools test(@projects/@magic-civilization): 🚦 Rail-1 verify gate — no game-data transform logic in GDScript 2026-06-24 23:55:39 -04:00
.claude
.env chore(@projects/@magic-civilization): 🔧 .local→.lan mesh hosts + objectives dashboard sync 2026-06-19 05:30:29 -05:00
.env.example fix(@projects): 🐛 update deployment and guide workflows 2026-06-10 03:38:03 -07:00
.gdlintrc
.gitignore feat(@projects/@magic-civilization): mark sprite pipeline as complete 2026-06-10 04:09:08 -07:00
.gutconfig.json
.mcp.json
.pnpmfile.cjs
aod_bears_retiered.png
aod_canines.png
aod_canines_retiered.png
aod_evolution_map_default.png
aod_felids_retiered.png
aod_freefolk_dwarves.png
aod_lens_canines.png
aod_lens_canines_2.png
aod_lens_canines_scrolled.png
aod_lens_canines_t8.png
aod_lens_default.png
aod_raptors_retiered.png
calc-mountain-king-vs-apex.png
CLAUDE.md
climate-fix-check.png
climate-sim-1.png
climate-sim-2.png
climate-sim-3.png
climate-sim-4.png
climate-sim-check.png
climate-sim-final.png
climate-sim-fixed.png
early-access-bottom.png
early-access-current.png
early-access-updated.png
earth-42vh.png
earth-charts-visible.png
earth-fixed.png
earth-normal-mode.png
earth-scrolled-down.png
earth-scrolled-stats.png
earth-scrolled.png
earth-with-stats.png
enc-arctic-fox-modal.png
enc-arctic-fox.png
enc-audit-home.png
enc-combat-filter.png
enc-concept-modal.png
enc-first-forge.png
enc-fox-stats.png
encyclopedia-302-clean.png
encyclopedia-after-reload.png
encyclopedia-alias-glob.png
encyclopedia-detail-bottom.png
encyclopedia-detail-combat.png
encyclopedia-embedded.png
encyclopedia-full-page.png
encyclopedia-populated.png
encyclopedia-registry-working.png
encyclopedia-registry.png
encyclopedia-restarted.png
encyclopedia-search-warrior.png
encyclopedia-warrior-modal.png
evolution-aquatic-insects.png
evolution-arachnids.png
evolution-canines.png
evolution-frogs-toads.png
export_presets.cfg
full-game-final.png
full-game-page-bottom.png
full-game-page-bottom2.png
full-game-page-updated.png
gdformatrc
gdlintrc
lairs-filter-bar.png
lairs-page-tierrange.png
nogui-final.png
permutations-default.png
permutations-light-melee-filter.png
personality-axes-page-v2.png
personality-axes-page.png
pnpm-lock.yaml fix(@projects): 🐛 update deployment and guide workflows 2026-06-10 03:38:03 -07:00
pnpm-workspace.yaml
README.md docs(objectives): 📝 Clarify fog-of-war testing methodology in objectives and add setup instructions to README 2026-05-26 02:21:13 -07:00
run fix(@projects): 🐛 update deployment and guide workflows 2026-06-10 03:38:03 -07:00
sheets-page.png
sheets-skeleton.png
sim-30s.png
sim-after-10s.png
sim-after-90s.png
sim-after-fix.png
sim-after-wait.png
sim-check.png
sim-check2.png
sim-complete.png
sim-debug.png
sim-done.png
sim-earth-check.png
sim-equal-split.png
sim-final-layout.png
sim-final.png
sim-initial.png
sim-layout-check.png
sim-layout-check2.png
sim-layout-check3.png
sim-layout-final.png
sim-layout-verify.png
sim-loading.png
sim-nostart.png
sim-now.png
sim-playback.png
sim-playing.png
sim-progress-2.png
sim-streaming.png
spritegen.db
ss

Magic Civilization

Fantasy 4X turn-based strategy game in Godot 4 + Rust, hex grid.

Game 1 — "Age of Dwarves" (current Early Access): single race (Dwarves), 5 AI-only clan personalities the player can face as opponents (Ironhold, Goldvein, Blackhammer, Deepforge, Runesmith), no magic mechanics, mundane tech only. Full 4X loop (cities, tech tree, wonders T1-T10, combat, wild creatures, domination victory). High-tier items and late-game wonders carry ancient/inexplicable flavor as Game 2 teasers — effects remain strictly mundane numeric bonuses.

Game 2 — "Age of Kzzykt" (future): adds magic, ley lines, Archons, spells, Ascension victory, more races. Eventual vision includes 16 races and 5 magic schools (Civ5 + Master of Magic + Magic: The Gathering color pie).

Structure

engine/          — genre-agnostic game engine (GDScript)
  src/           — autoloads, entities, map, generation, modules, rendering
  scenes/        — Godot scenes (.tscn + .gd)
  docs/          — engine architecture docs

games/
  age-of-dwarves/   — fantasy game pack (the default theme)
    data/        — all JSON game content
    assets/      — sprites, icons
    docs/        — game design docs (combat, economy — spells/races are Game 2 scope)

guide/           — player guide web app (React/TypeScript)
  engine/        — @magic-civ/guide-engine (shared components)
  age-of-dwarves/   — guide pages for Age of Dwarves

packages/
  engine-ts/     — @magic-civ/engine-ts (auto-generated climate simulation)

tools/           — sprite generation, transpiler, screenshot capture

Docs

Engine (engine/docs/)

Doc Covers
ARCHITECTURE.md Project structure, autoloads, scene lifecycle
ABSTRACTION.md Genre-agnostic vocabulary, theme pack system
DATA_FORMAT.md JSON data schemas, DataLoader patterns

Game Design (public/games/age-of-dwarves/docs/)

Doc Covers
RACES.md 4 demo races, gendering, fusions, release schedule
ECONOMIC_SYSTEMS.md Economy, civic axis, capitalism cascade
GOVERNMENTS.md Government types and mechanics
GLOSSARY.md Term definitions
COMBAT_SYSTEM.md Combat mechanics (written when M8 is built)
military/COMMUNICATIONS.md Comms tiers, first-contact, courier envelopes, perceived state, war-dec semantics
SPELL_SYSTEM.md Spell/mana system (written when M9 is built)
ERA_SYSTEM.md Era progression (written when needed)

Build Process (.project/)

Doc Covers
ROADMAP.md Demo scope + 12-phase build sequence
FEATURE_GAP.md New systems beyond the reference implementation
tasks/m0-m4/ Milestone task lists with porting checklists

Quick Start

./run play          # Launch the game
./run editor        # Open Godot editor
./run lint          # gdlint engine/src/
./run test          # GUT tests headless
pnpm dev            # Serve the player guide