diff --git a/.project/tasks/m2-flora-fauna/README.md b/.project/tasks/m2-flora-fauna/README.md index b9ef5634..745eb131 100644 --- a/.project/tasks/m2-flora-fauna/README.md +++ b/.project/tasks/m2-flora-fauna/README.md @@ -6,7 +6,7 @@ Decomposes the world into proper layers (geological substrate, computed biomes, **No events. No magic. No gameplay.** Just the living mundane world engine on top of M1's geology. -**Design doc**: `games/age-of-four/docs/CREATURE_ECOSYSTEM.md` +**Design doc**: `games/age-of-dwarves/docs/CREATURE_ECOSYSTEM.md` **Quality tiers**: Prolific (Q1, grey) → Common (Q2, white) → Rare (Q3, blue) → Legendary (Q4, purple) → Epic (Q5, orange). Q4-Q5 tiles ARE natural wonders — they emerge from ecology, not map gen placement. @@ -134,7 +134,7 @@ New directory: `engine/src/models/world/` | 3.8 | Flora params | Create 3 files in `data/world/flora/`: `vegetation.json` (growth_rate: 0.02, decay_rate: 0.03, shade_cap: 0.7, fungi_undergrowth_threshold: 0.3, fungi_regrowth_bonus_cap: 2.0), `succession.json` (stability_turns: 50, canopy_threshold: 0.8, per-biome succession targets), `desertification.json` (moisture_threshold: 0.2, turns_required: 30, decay_multiplier: 2.0) | | 3.9 | Fauna params | Create 3 files in `data/world/fauna/`: `marine.json` (fish reproduction, reef rates, whale rules, lake rules as defined in MarineFaunaModel), `land.json` (habitat weights/thresholds as in LandFaunaModel, plus creature lifecycle: maturity_age_base, max_age_base, quality_up_turns_base, loot tables per quality tier), `air.json` (schema only: nesting_terrains, migration_range) | | 3.10 | Ecosystem params | Create 3 files in `data/world/ecosystem/`: `health.json` (weights: flora=0.30, fauna=0.25, stability=0.25, balance=0.20, plus tile quality thresholds: Q1<0.2, Q2<0.4, Q3<0.6, Q4<0.8, Q5≥0.8), `food_yield.json` (quality→yield curves: Q1=0.5x, Q2=1.0x baseline, Q3=1.5x, Q4=2.0x, Q5=2.5x), `stability.json` (reclassification thresholds: canopy_delta=0.05, temp_delta=0.02, moisture_delta=0.03) | -| 3.11 | Game pack rename | Copy `games/age-of-four/` → `games/age-of-dwarves/`. Strip mana fields from terrain JSON. Remove magical lair types from wilds.json (keep beast_den, wyvern_nest, ancient_construct_site). Remove spell entries that reference magic. Update game.json name + version. Update vocabulary.json | +| 3.11 | Game pack rename | Copy `games/age-of-dwarves/` → `games/age-of-dwarves/`. Strip mana fields from terrain JSON. Remove magical lair types from wilds.json (keep beast_den, wyvern_nest, ancient_construct_site). Remove spell entries that reference magic. Update game.json name + version. Update vocabulary.json | ### Block 4: SQLite + Water Bodies @@ -227,7 +227,7 @@ New directory: `engine/src/models/world/` | # | Task | Description | |---|------|-------------| -| 10.1 | Update cli.py paths | Change `LOCAL_DATA` (line 29) from `games/age-of-four/data` → `games/age-of-dwarves/data`. Add `WORLD_DATA = PROJECT / "games" / "age-of-dwarves" / "data" / "world"`. Add `ASSETS_DIR` update to age-of-dwarves | +| 10.1 | Update cli.py paths | Change `LOCAL_DATA` (line 29) from `games/age-of-dwarves/data` → `games/age-of-dwarves/data`. Add `WORLD_DATA = PROJECT / "games" / "age-of-dwarves" / "data" / "world"`. Add `ASSETS_DIR` update to age-of-dwarves | | 10.2 | scan_trait_species() | New method in scanner.py: reads `data/world/traits/proof_species.json` (emitted by Block 4.6). For each entry: register sprite with id=`species/{trait_hash}`, category="species". Each species × its quality_range = one sprite per quality level. Scanner reads trait data + flavor data from JSON, NOT from GDScript | | 10.3 | DOTA prompt composition | Add to prompts.py: `compose_creature_prompt(species_data, quality)` function. Reads trait combo + flavor data (name, motifs, palette, quality_descriptors). Outputs: "DOTA-style dark fantasy creature game sprite, {name}, {quality_desc} {size_desc} {surface} {body_plan}, {diet_features}, visual motifs: {motifs}, color palette: {palette}, weathered ancient bearing, strong silhouette, top-down isometric, painted style, game asset". Quality transforms the description (Q1="scrappy runt" vs Q5="massive ancient scarred legend") | | 10.4 | Update scan_biome_grid | Change from temp×moisture×elevation coordinate IDs to named biome IDs from biomes.json. Read proof biomes, generate sprites per biome × quality_range (not all Q1-Q5 — respect biome.quality_range). ID format: `biome_grid/{biome_id}_q{quality}` | @@ -246,7 +246,7 @@ New directory: `engine/src/models/world/` |---|------|-------------| | 11.1 | Transpiler ecology sources | Add flora.gd, fauna.gd, ecosystem.gd to transpiler source list. May need new target (`--target ecology`) or extend existing. Generate `packages/engine-ts/src/EcologyPhysics.generated.ts`. Methods: stepCanopy, stepUndergrowth, stepFungi, stepSuccession, stepDesertification, computeTileQuality | | 11.2 | TypeScript TileState | Add ecology fields to `packages/engine-ts/src/types.ts` TileState interface: canopy_cover, undergrowth, fungi_network, drought_counter, succession_progress, regrowth_stage, substrate_id, biome_id, water_body_id, depth_from_coast, habitat_suitability, landmark_name | -| 11.3 | Game pack references | Update all guide code: age-of-four → age-of-dwarves. Data paths, page titles, vocabulary references | +| 11.3 | Game pack references | Update all guide code: age-of-dwarves → age-of-dwarves. Data paths, page titles, vocabulary references | | 11.4 | Ecology lenses | New guide visualization overlays: canopy cover (green gradient), undergrowth (yellow-green), fungi network (purple-brown), fish creatures (blue dots on coast), reef health (coral gradient), wildlife populations (creature icons by trait, colored by quality: grey/white/blue/purple/orange) | | 11.5 | Ecosystem dashboard | New guide panel: global ecosystem health per turn, per-tile quality heatmap (Q1-Q5 colors), species diversity chart, food web graph (nodes=species, edges=predation), landmark list (Q4-Q5 tile names) |