release(docs): 🔖 Update documentation, configuration, and assets for "life mode" demo release

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
Claude Code 2026-03-26 11:38:24 -07:00
parent ae08e44e75
commit 9141e3e1a2
9 changed files with 42 additions and 42 deletions

View file

@ -6,18 +6,18 @@ Fantasy 4X turn-based strategy game (Civ5 + Master of Magic + Magic: The Gatheri
## Scope
**Early access demo** ("Age of Four") — 4 races (High Elf, Human, Dwarf, Orc), all 5 magic schools, full 4X + magic loop. See `.project/ROADMAP.md` for scope and build sequence.
**Early access demo** ("Age of Dwarves") — 4 races (High Elf, Human, Dwarf, Orc), all 5 magic schools, full 4X + magic loop. See `.project/ROADMAP.md` for scope and build sequence.
## Tech Stack
- **Engine:** Godot 4.x
- **Language:** GDScript only (no C#, no GDExtension)
- **Data:** JSON game packs (`games/age-of-four/data/*.json`)
- **Data:** JSON game packs (`games/age-of-dwarves/data/*.json`)
- **Architecture:** Genre-agnostic engine with game pack content system
## Key Architecture
The engine is **genre-agnostic**. All game content and display text comes from game packs. The fantasy game "Age of Four" is the default. See `docs/engine/ABSTRACTION.md` (to be written).
The engine is **genre-agnostic**. All game content and display text comes from game packs. The fantasy game "Age of Dwarves" is the default. See `docs/engine/ABSTRACTION.md` (to be written).
- UI labels resolve through `ThemeVocabulary.lookup(engine_key)` — never hardcode theme strings
- Sprites resolve through `ThemeAssets.resolve(path)` — never hardcode asset paths
@ -30,7 +30,7 @@ The engine is **genre-agnostic**. All game content and display text comes from g
See `README.md` for the full doc index. Docs live in two places:
- **`engine/docs/`** — genre-agnostic engine architecture (written as engine systems are built)
- **`games/age-of-four/docs/`** — fantasy game design (races, combat, spells, economy, etc.)
- **`games/age-of-dwarves/docs/`** — fantasy game design (races, combat, spells, economy, etc.)
Build process docs (roadmap, feature gap, task lists) stay in `.project/`.
@ -43,7 +43,7 @@ The climate simulation runs in two runtimes: GDScript (Godot game engine) and Ty
### Architecture
```
games/age-of-four/data/climate_spec.json ← Canonical thresholds, events, ley rules
games/age-of-dwarves/data/climate_spec.json ← Canonical thresholds, events, ley rules
↓ read at runtime by both engines
engine/src/modules/climate/climate.gd ← SOURCE OF TRUTH (physics steps)
engine/src/modules/climate/ecological_events.gd ← SOURCE OF TRUTH (stochastic events)
@ -52,7 +52,7 @@ engine/src/modules/climate/climate_spec_eval.gd ← SOURCE OF TRUTH (spec c
↓ transpiled by tools/transpile-engine/transpile.py
packages/engine-ts/src/ClimatePhysics.generated.ts ← AUTO-GENERATED, never edit
packages/engine-ts/src/index.ts ← Re-exports for @magic-civ/engine-ts
guide/age-of-four/ ← Consumes @magic-civ/engine-ts (workspace:*)
guide/age-of-dwarves/ ← Consumes @magic-civ/engine-ts (workspace:*)
```
### Transpiler Package
@ -109,7 +109,7 @@ uv run tools/transpile-engine/transpile.py --check # CI: exit 1 if stale
| `*.json` data files, `vocabulary.json`, `game.json` | `game-data` |
| `*.tscn` UI scenes, HUD panels, overlays, menus | `godot-ui` |
| TileMap, sprites, camera, fog, selection highlight, animation | `godot-renderer` |
| `guide/age-of-four/`, `guide/engine/`, React, Vite, climate sim | `guide-web` |
| `guide/age-of-dwarves/`, `guide/engine/`, React, Vite, climate sim | `guide-web` |
## Conventions
@ -207,14 +207,14 @@ engine/
integration/ — end-to-end integration tests
games/
age-of-four/
age-of-dwarves/
data/ — all JSON content (units/, spells/, techs/, terrain/, ...)
assets/ — sprites/, icons/
game.json — game manifest
guide/
engine/ — @magic-civ/guide-engine (shared UI components, types, utils)
age-of-four/ — @magic-civilization/guide-age-of-four (all pages, app shell)
age-of-dwarves/ — @magic-civilization/guide-age-of-dwarves (all pages, app shell)
```
## DX Tooling
@ -259,8 +259,8 @@ Self-capturing test scenes. Each phase should have a proof scene that sets up mi
### DataLoader — File vs Directory Pattern
`DataLoader` supports two layouts per data category:
- **Single file:** `games/age-of-four/data/races.json`
- **Split directory:** `games/age-of-four/data/units/` — reads all `.json` files, merges by `id`
- **Single file:** `games/age-of-dwarves/data/races.json`
- **Split directory:** `games/age-of-dwarves/data/units/` — reads all `.json` files, merges by `id`
**Never create a monolithic file that exceeds 500 lines.**
@ -303,5 +303,5 @@ This project is rebuilt milestone-by-milestone from a reference implementation.
- `GameState` must support multiple map layers (future Ethereal Plane)
- All system state changes emit signals via `EventBus`
- Building/unit effects are data-driven from JSON — don't hardcode behavior
- Always call `DataLoader.load_game("age-of-four")` when running scenes directly
- Always call `DataLoader.load_game("age-of-dwarves")` when running scenes directly
- **NEVER use anime models for game art** — use `juggernaut-xl-v9`, `epicrealism-xl`, `illustrious-xl-v2`

View file

@ -11,14 +11,14 @@ engine/ — genre-agnostic game engine (GDScript)
docs/ — engine architecture docs
games/
age-of-four/ — fantasy game pack (the default theme)
age-of-dwarves/ — fantasy game pack (the default theme)
data/ — all JSON game content
assets/ — sprites, icons
docs/ — game design docs (races, combat, spells, economy)
guide/ — player guide web app (React/TypeScript)
engine/ — @magic-civ/guide-engine (shared components)
age-of-four/ — guide pages for Age of Four
age-of-dwarves/ — guide pages for Age of Dwarves
packages/
engine-ts/ — @magic-civ/engine-ts (auto-generated climate simulation)
@ -36,14 +36,14 @@ tools/ — sprite generation, transpiler, screenshot capture
| ABSTRACTION.md | Genre-agnostic vocabulary, theme pack system |
| DATA_FORMAT.md | JSON data schemas, DataLoader patterns |
### Game Design (`games/age-of-four/docs/`)
### Game Design (`games/age-of-dwarves/docs/`)
| Doc | Covers |
|-----|--------|
| [RACES.md](games/age-of-four/docs/RACES.md) | 4 demo races, gendering, fusions, release schedule |
| [ECONOMIC_SYSTEMS.md](games/age-of-four/docs/ECONOMIC_SYSTEMS.md) | Economy, civic axis, capitalism cascade |
| [GOVERNMENTS.md](games/age-of-four/docs/GOVERNMENTS.md) | Government types and mechanics |
| [GLOSSARY.md](games/age-of-four/docs/GLOSSARY.md) | Term definitions |
| [RACES.md](games/age-of-dwarves/docs/RACES.md) | 4 demo races, gendering, fusions, release schedule |
| [ECONOMIC_SYSTEMS.md](games/age-of-dwarves/docs/ECONOMIC_SYSTEMS.md) | Economy, civic axis, capitalism cascade |
| [GOVERNMENTS.md](games/age-of-dwarves/docs/GOVERNMENTS.md) | Government types and mechanics |
| [GLOSSARY.md](games/age-of-dwarves/docs/GLOSSARY.md) | Term definitions |
| COMBAT_SYSTEM.md | Combat mechanics (written when M8 is built) |
| SPELL_SYSTEM.md | Spell/mana system (written when M9 is built) |
| ERA_SYSTEM.md | Era progression (written when needed) |

View file

@ -210,31 +210,31 @@ user_data/accessible_from_files_app=false
privacy/camera=false
privacy/microphone=false
privacy/photolibrary=false
icons/iphone_120x120="res://games/age-of-four/icons/icon_120x120.png"
icons/iphone_180x180="res://games/age-of-four/icons/icon_180x180.png"
icons/ipad_76x76="res://games/age-of-four/icons/icon_76x76.png"
icons/ipad_152x152="res://games/age-of-four/icons/icon_152x152.png"
icons/ipad_167x167="res://games/age-of-four/icons/icon_167x167.png"
icons/app_store_1024x1024="res://games/age-of-four/icons/icon_1024x1024.png"
icons/spotlight_40x40="res://games/age-of-four/icons/icon_40x40.png"
icons/spotlight_80x80="res://games/age-of-four/icons/icon_80x80.png"
icons/spotlight_120x120="res://games/age-of-four/icons/icon_120x120.png"
icons/settings_29x29="res://games/age-of-four/icons/icon_29x29.png"
icons/settings_58x58="res://games/age-of-four/icons/icon_58x58.png"
icons/settings_87x87="res://games/age-of-four/icons/icon_87x87.png"
icons/notification_20x20="res://games/age-of-four/icons/icon_20x20.png"
icons/notification_40x40="res://games/age-of-four/icons/icon_40x40.png"
icons/notification_60x60="res://games/age-of-four/icons/icon_60x60.png"
icons/notification_76x76="res://games/age-of-four/icons/icon_76x76.png"
icons/notification_114x114="res://games/age-of-four/icons/icon_114x114.png"
icons/iphone_120x120="res://games/age-of-dwarves/icons/icon_120x120.png"
icons/iphone_180x180="res://games/age-of-dwarves/icons/icon_180x180.png"
icons/ipad_76x76="res://games/age-of-dwarves/icons/icon_76x76.png"
icons/ipad_152x152="res://games/age-of-dwarves/icons/icon_152x152.png"
icons/ipad_167x167="res://games/age-of-dwarves/icons/icon_167x167.png"
icons/app_store_1024x1024="res://games/age-of-dwarves/icons/icon_1024x1024.png"
icons/spotlight_40x40="res://games/age-of-dwarves/icons/icon_40x40.png"
icons/spotlight_80x80="res://games/age-of-dwarves/icons/icon_80x80.png"
icons/spotlight_120x120="res://games/age-of-dwarves/icons/icon_120x120.png"
icons/settings_29x29="res://games/age-of-dwarves/icons/icon_29x29.png"
icons/settings_58x58="res://games/age-of-dwarves/icons/icon_58x58.png"
icons/settings_87x87="res://games/age-of-dwarves/icons/icon_87x87.png"
icons/notification_20x20="res://games/age-of-dwarves/icons/icon_20x20.png"
icons/notification_40x40="res://games/age-of-dwarves/icons/icon_40x40.png"
icons/notification_60x60="res://games/age-of-dwarves/icons/icon_60x60.png"
icons/notification_76x76="res://games/age-of-dwarves/icons/icon_76x76.png"
icons/notification_114x114="res://games/age-of-dwarves/icons/icon_114x114.png"
storyboard/use_custom_storyboard=false
storyboard/custom_storyboard=""
storyboard/image_scale_mode=0
storyboard/use_custom_bg_color=false
storyboard/custom_bg_color=Color(0, 0, 0, 1)
icons/ios_128x128="res://games/age-of-four/icons/icon_128x128.png"
icons/ios_136x136="res://games/age-of-four/icons/icon_136x136.png"
icons/ios_192x192="res://games/age-of-four/icons/icon_192x192.png"
icons/ios_128x128="res://games/age-of-dwarves/icons/icon_128x128.png"
icons/ios_136x136="res://games/age-of-dwarves/icons/icon_136x136.png"
icons/ios_192x192="res://games/age-of-dwarves/icons/icon_192x192.png"
texture_format/s3tc=false
texture_format/etc=false
texture_format/etc2=true

BIN
life_mode_t200.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

BIN
life_mode_t500_fixed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
life_t500_spec_working.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

View file

@ -1,4 +1,4 @@
packages:
- packages/*
- guide/engine
- guide/age-of-four
- guide/age-of-dwarves

4
run
View file

@ -93,7 +93,7 @@ cmd_verify() {
echo ""
echo -e "${BLUE}[2/4] Guide typecheck...${NC}"
pnpm --prefix guide/age-of-four typecheck || exit_code=$?
pnpm --prefix guide/age-of-dwarves typecheck || exit_code=$?
echo ""
echo -e "${BLUE}[3/4] Transpiler check (GDScript → TS sync)...${NC}"
@ -133,7 +133,7 @@ cmd_test() {
echo ""
echo -e "${BLUE}Running vitest (guide)...${NC}"
pnpm --prefix guide/age-of-four test || exit_code=$?
pnpm --prefix guide/age-of-dwarves test || exit_code=$?
return $exit_code
}

BIN
t1806_life.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB