# Graphics tiers — simple and detailed, and the three-part body

## overview.md
```yaml
id: graphics-tiers
title: Graphics tiers — simple and detailed, and the three-part body
area: client
summary: Two ways of drawing every creature — today's primitives as the simple tier, real rigged and animated bodies as the detailed tier — switched by one layer in the client, over a head, a torso and legs that are swappable from the start.
repo: land-of-lor
depends_on: ["character-composition-poc"]
parked: false
standing: Phase 3 is in as the characters (2026-10-20): ten bodies picked on the detailed tier, a 13 MB downloadable pack, Esmeralda; the tier stays a device setting behind dev mode. #18 closed; #16 (the switch rebuilding in place) and #17 open.
```

## 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`](https://github.com/krisrandall/land-of-lor/issues?q=is%3Aissue+is%3Aopen+label%3Aepic%3Agraphics-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`/`legs` on 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)

- #32 — The first detailed body — one adventurer through Meshy, into Godot, onto a phone (2026-10-06) — /deliverables/32