Graphics tiers — simple and detailed, and the three-part body
repo: land-of-lor
· depends on: character-composition-poc
Where this stands (2026-10-23)
The people are a first-run download, the same way everywhere, and the title waits for them.
The web fetch had failed every time on a Godot 4.7.1 bug (the engine deletes a download_file
it cannot size — docs/handoff/characters.md, 2026-10-23); the pack is now taken into memory
and written by the game. Start, Account and the character step wait on the title screen behind
a hairline of gold along its bottom edge; a failed fetch says so and tries again rather than
letting anyone in with the simple bodies. The native builds carry the bodies and pass the gate
at once. A release is pinned to its pack: export-web.sh checks the pack this tree makes
is on the server and stamps it into the build, so the set of people is fixed per release.
Decided (Kris, 2026-10-23), for later — zone packs. The same loader, more entries: a base
set (anything a player can carry through a portal — the player bodies, the faces, Rah, the
village folk) bundled in the store apps, always; zone sets (a zone’s creatures, NPCs, props)
bundled while the app fits the store limits and fetched on entering the zone once it does not;
each Area declaring the sets it needs (derivable from its kinds and placed things); and, once
there are more zones than a browser should keep, an eviction rule for user:// — Godot has
no unmount, but a mounted pack is only an index; the GLBs load per entity and go with the area.
Not started; nothing to build until zones exist.
Where this stands (2026-10-20)
Phase 3, the starter set, is in — as the characters (art-direction rounds 1–2, Kris with Rah
and Izzy; docs/handoff/characters.md): ten rigged bodies a player picks from on the account
screen’s detailed tier (a seventh appearance group, faces.js characters, saved on the
account), the witch as Esmeralda, and the bodies shipped as a separate 13 MB pack a device
downloads when it turns the tier on (client/character_pack.gd, game/export-characters-pack.sh)
— no body rides in any build any more, the adventurer included. The tier is still a device
setting behind dev mode (Kris, 2026-10-20: keep the secret mode for now). A character change
rebuilds the body in place; the tier switch itself still takes effect at the next place (#16).
Verified on the emulator with game/test-device/characters-driver.mjs. #18 closed.
Where this stands (2026-10-06)
Phase 0 signed off (Kris, on his phone, the evening of 2026-10-06: “that’s fixed it… I’d like
to keep this good graphics version continuing”). Deliverable 032 holds the build: the first body
set, adventurer, through Meshy in four minutes for 53 credits, cut into head, torso and legs at
load, in the player’s colours, with a Graphics setting on the account screen and spellgrove-v41.apk
locked as the record. Three phone-found bugs fixed the same evening (an opaque shader writing
ALPHA, the account box at design resolution, the cameras’ depth ranges) — docs/handoff/graphics-tiers.md.
Next: Phase 1 (#16) — the tier setting rebuilding bodies in place, the shared body base. Then the
parts on the wire (#17) and the starter set (#18), which waits on the vibe:
workshop/epics/art-direction/.
Decided (2026-10-06): the simple tier is today’s primitives, untouched · a device setting picks the tier, default simple · every creature has a head, a torso and legs, each typed (humanoid first) with its own simple drawing and detailed model · Rah’s faces are the simple tier’s · shirt and pants colours carry across both tiers · Meshy Pro is the generator, driven by API · the adventurer stays as the most normal body in the set.
Decided (2026-10-20): the adventurer is a pipeline proof only — not the default body and not a starting point; the starter set (#18) follows the art-direction style sheet (workshop/brand/style.md), Kiki-like kids, not him. Supersedes “stays as the most normal body” above.
Open: the hands — the rig’s open A-pose palms ride into every clip; relaxed hands in the prompt or different clips, tried on the next body.
Open issues: epic:graphics-tiers — #16 Phase 1 the tier setting, #17 Phase 2 the parts on the wire, #18 Phase 3 the starter set.
What this is
Two renderings of the same creature. The simple tier is what the game draws today: a body
of capsules and a ball head, Rah’s drawn faces on the ball, procedural walking, a few kilobytes
each, fast on any phone and in any browser. The detailed tier is a real character: a rigged,
skinned mesh with hand-painted textures and a library of animation clips, Final Fantasy-ish and
a touch more cartoony, generated through Meshy from a prompt and imported into Godot. One layer in
the client (graphics_tier.gd) answers which tier is in play, and nothing else knows.
Under both sits one idea Kris added when he read the first plan: a creature is a head, a torso
and legs. Each part option has a type (humanoid for all the first ones; equine one day), an
identifier, a simple drawing and a detailed model. The parts live in a table (game/shell/parts.js),
ride the wire as three appearance keys, and are picked on the account screen. This is also where
clothing and armour will bind: a shirt goes on a humanoid torso, a saddle on equine legs.
Why it exists
The reel’s lesson was that the gap between a prototype’s look and a shipped game’s look is the thing players see first. Hand-made models and Claude-Design renders have failed here twice (deliverable 030). A generative 3D service with auto-rigging and preset motions is the first path that can produce real character quality at this project’s size — and it has to arrive without breaking the simple build, which must keep running on old phones and may be the free store build.
Scope
- The tier layer, the device setting and its toggle on the account screen, and rebuilding the bodies in place when it flips.
- The parts table, the three appearance keys end to end (director, Area, client), the arrows on
the account screen, and
head/torso/legson the humanoid kinds. - The pipeline (
tools/bodies/): prompt → preview → refine → rig → six clips → one GLB → the colour mask → the three-piece split → import → review renders. Resumable, credits recorded. - The rigged body node: the same interface the primitive one has, clips for idle/walk/run/jump/ strike/fall, the hat and staff riding the bones, shirt and pants colour through a mask shader.
- The starter set of player bodies and the witch’s and wizard’s, after the proof.
Non-goals
- Changing the simple tier’s look. It is signed off and stays pixel-identical.
- Clothing and armour themselves — only the foundation they bind to.
- Mixing parts across different generated bodies before they share a rig (the honest limit: Meshy rigs each body to its own skeleton; the first set’s rig becomes the canonical one, and the second set decides retarget-or-retexture).
- Items, scenery and creatures with their own models (frog, golem) on the detailed tier — later, through the same tool.
Relevant docs
docs/handoff/graphics-tiers.md— the build handoff (written as the phases land).docs/handoff/bodies/<set>/— each body set’s thumbnails, contact sheet and numbers.tools/bodies/README.md— how a body is made and what it costs.workshop/epics/character-composition-poc/overview.md— the faces and colours this builds on.workshop/deliverables/030-attempts-at-styling-by-ai.md— why not by hand again.
Deliverables (1)
Work on this epic
The granular work is GitHub Issues, one label per epic:
epic:graphics-tiers
(private repository — sign-in required).
The dated Where this stands section above names the open ones.
Ask an agent about this epic
Paste your AI Task Runner API key once. It stays in this browser and is sent only to kris.ai-task-runner.com.
Also available as raw markdown.