5.8 KiB
| id | title | priority | status | scope | owner | updated_at | evidence | |
|---|---|---|---|---|---|---|---|---|
| p2-25 | Building sprites — base game coverage (non-wonder) | p1 | superseded | game1 | asset-sprite | 2026-06-23 |
|
Summary
Every standard (non-wonder) building Game 1 subscribes to — manifest.json subscribes.buildings, resolved against public/resources/buildings/<id>.json, taking the entries WITHOUT a wonder_type field (wonders → p2-26) — needs a sprite at public/games/age-of-dwarves/assets/sprites/buildings/<building_id>.png. (The objective originally said data/buildings/*.json; building data has since moved to the shared resources/ library with a per-game manifest subscription.) city_renderer.gd:223 loads this flat, id-keyed path; the city-screen UI consumes the same files.
Current base roster (2026-04-17 snapshot, 10 buildings): ale_hall, barracks, bathhouse, colosseum, forge, library, marketplace, monument, temple, walls.
Stand-in coverage (2026-06-04). The live building roster has grown well past the
10-building snapshot: manifest.json subscribes.buildings lists 166 entries, of
which 103 are non-wonder base buildings (the other 62 are wonders → p2-26). All 103
are filled with OSS stand-ins (game-icons.net CC-BY-3.0) on a stone plate at 64px,
written to sprites/buildings/<id>.png — the flat, id-keyed path the renderer
actually loads (city_renderer.gd:223 "sprites/buildings/%s.png" % bid; no
wonders/ subdir, no resource-sprite-field read). Built via
tools/standin-sprites/build_standins.py. PLACEHOLDER art; final-art bullets below
stay ✗, status partial. (One subscribed id, market, has no resource file — a
data gap logged in STANDINS.md, not a sprite gap.)
Acceptance
- ✓ (stand-in coverage) For each non-wonder building id
<b>in the subscribed roster,<b>.pngexists inpublic/games/age-of-dwarves/assets/sprites/buildings/. Verified 0 missing across all 103 base buildings (tools/sprite-license-audit.py;STANDINS.md). Stand-in art, not final. - ✗ Each PNG is 256×256 or 512×512 (matching the resolution chosen for
p2-23/p2-24), PNG with alpha channel, transparent background. - ✗ Silhouette is legible at city-screen thumbnail scale (128×128 or the current city-screen icon size — whichever
city_screen.tscnconsumes). - ✗ Style coherence: palette + lighting direction consistent across the 10 buildings. Pipeline-generated via the same prompt library as
p2-23(tools/sprite-generation/engine/prompts/— building branch). - ✗ Each sprite passed the ranker threshold configured in
p2-22or was approved via Theater GUI with rating ≥ 4 inspritegen.db. - ✗ Each sprite has a row in
LICENSES.md(contract satisfied viap2-28). - ✗ Proof screenshot: city-screen or world-map capture on plum Godot showing at least 4 distinct building sprites rendering on top of the procedural baseline, per
phase-gate-protocol.md.
Depends on
p2-22(pipeline runnable end-to-end).p0-23(sprite rendering capability — done).p2-28(LICENSES.md ledger).
Non-goals
- Mundane-wonder sprites (
p2-26) — separate fidelity bar, separate objective. - City population-tier sprites (
p2-27) — different key format (city_q<N>.png). - Building upgrade-stage visuals (post-EA if ever).
- Improvement / tile-yield icons — those are UI icons, not building sprites.
Demo sprite layer — 2026-06-04
Demo art now overwrites the game-icons stand-ins for 101 base building ids so
the city/build view reads like a game. Sources are Battle-for-Wesnoth
terrain/village/ (dwarven.png/2/3/4, human-city, camp) and scenery/
(dwarven-doors-closed, lighthouse, well, windmill-derelict, tent-shop-weapons,
mine-abandoned, castle-ruins, rock-cairn, keep-overlay-high), processed to 96×96
transparent PNG (the renderer rescales by max-dimension). Thematic best-fit with
heavy reuse: forges→dwarven-doors, halls→dwarven villages, mines→mine,
walls/citadels→keep/castle-ruins, monuments→rock-cairn, mills→windmill,
harbors/observatories→lighthouse, barracks→camp.
Gap: wonders (p2-26), city-tier scenes (p2-27), and the remaining ~64 niche building ids stay on game-icons stand-ins.
Ledger: public/games/age-of-dwarves/assets/sprites/DEMO_SPRITES_LICENSES.md (per-id rows + source sha256). DEMO-ONLY: all demo art is Battle for Wesnoth, dual GPL-2.0+ OR CC-BY-SA 4.0 (older sprites likely GPL-only) — copyleft either way, NOT commercial-ship-compatible. Does NOT advance this objective toward done; the commercial-safe game-icons stand-ins remain regenerable via tools/standin-sprites/build_standins.py. Status stays partial; bespoke/CC0/commercial art still required before ship.
True state — 2026-06-04 gap analysis
Verified: partial. Slot coverage via placeholders (game-icons commercial-safe baseline + Wesnoth demo layer where a fit existed). Only open bullet: FINAL paid/bespoke base building art. Path forward: commission artist / run generation pipeline; swap placeholders → final base building art. Blockers: none technical — gated on PAID ARTIST (operator-accepted deferral). Demo gate: DEFERRED — placeholders ship the demo; final art is an explicit operator-accepted open item. Effort: external (artist commission).