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:
parent
ae08e44e75
commit
9141e3e1a2
9 changed files with 42 additions and 42 deletions
24
CLAUDE.md
24
CLAUDE.md
|
|
@ -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`
|
||||
|
|
|
|||
14
README.md
14
README.md
|
|
@ -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) |
|
||||
|
|
|
|||
|
|
@ -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
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
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
BIN
life_t500_spec_working.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 78 KiB |
|
|
@ -1,4 +1,4 @@
|
|||
packages:
|
||||
- packages/*
|
||||
- guide/engine
|
||||
- guide/age-of-four
|
||||
- guide/age-of-dwarves
|
||||
|
|
|
|||
4
run
4
run
|
|
@ -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
BIN
t1806_life.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 76 KiB |
Loading…
Add table
Reference in a new issue