Character gallery — completeness & sync audit
Requested alongside the kitchen art fix (#141). Diagnosis only — nothing changed here.
Headline
The gallery itself is nearly complete: 51 cells, 45 designed, 6 placeholders.
The problem is not the gallery — it is that almost nothing in the gallery reaches the game.
1. The shared source of truth contains two characters
art/galleries/art-source.js is the declared shared source — the file the game imports so that
gallery and gameplay cannot drift. It contains:
That is 2 of 44 gallery character draws. The other 42 are gallery-only. Every other
character in the game — Henrik, Babcia, Dziadek, the Janitor, Leida, Iris, Johannes, Tirta,
Muhittin, the Pocong, Boitatá, all of them — is drawn by a separate function living in
game/index.html that was authored independently of its gallery cell.
The Ch1 source-of-truth rule says the galleries are authoritative for how anything looks. In
practice that rule is enforced for Pip and Pätu and for nobody else.
2. That is exactly what produced the kitchen bug
Henrik alone has five local draw functions in the game:
drawHenrikStanding · drawHenrikSitting · drawHenrikFrozen · drawHenrikSitsDownCinematic
· drawHenriksOfferCinematic
drawHenrikStanding happens to be faithful to the gallery (same rect construction, same
palette). drawHenrikFrozen was not — 98px vs 72px, cream chef jacket #dcd8c8 vs near-black
shirt + cream apron, skin #b8805c vs C.hSkin #d0b898. Two Henriks in one kitchen. Fixed
in #141 by rebuilding it on the gallery construction, but nothing prevents the next one.
A third Henrik is still out there: drawMemory6bScene (the first-taste memory, "an older
Henrik teaching a young boy") draws its own figure with the #b8805c skin tone. Not touched in
#141 — it is a memory scene with its own warm palette, and it needs Julia's eye rather than a
mechanical port.
Other characters with multiple local variants, each a place the same drift can happen:
| Character |
local variants |
| Henrik |
5 |
| Dziadek |
3 (incl. drawDziadekRadio) |
| Babcia |
2 |
| Doctor |
2 |
| Erik |
2 |
| Iris |
2 |
| Janitor |
2 |
| Passenger |
2 |
| Boitatá |
2 |
3. The six undesigned cells
| Chapter |
Section |
Cell |
| Ch 7 |
chefs |
Generational Moqueca Figures |
| Ch 2 |
echoes |
Echo-mice |
| Ch 8 |
echoes |
Urban vermin |
| Ch 7, 8 |
echoes |
Echo-mosquitoes |
| Ch 3 |
echoes |
Echo-fish (haddock) |
| Ch 3 |
echoes |
Echo-fish (plaice) |
⚠️ "Echo-mice" is now stale — the echo-mouse was removed from the game on Julia's call
(#136). The cell should be retired rather than designed, unless echo-mice appear in Ch2
independently of the Ch1 corridor creature.
So the real outstanding art is 5 cells, all of them minor echo-creatures plus one Ch7
chef group.
4. What needs to be created — recommendation
Not more gallery cells. A migration. The gallery is 88% designed; the gap is that it is not
wired to anything.
- Extend
art-source.js from 2 characters to the full canonical set, starting with the
ones that already have multiple divergent in-game variants — Henrik, Dziadek, Babcia,
Janitor, Doctor, Passenger, Erik, Iris. That is where drift has actually happened.
- Rewrite the game's local draws as thin wrappers that translate/scale and call the shared
function, the way renderPip and renderPatu already do. Pose variants (sitting, frozen,
cinematic close-up) become parameters, not separate characters.
- Design the 5 remaining cells, retire the Echo-mice cell.
- Add a guard — a check that no character has more than one construction, so a sixth
Henrik cannot appear silently.
Steps 1–2 are the substance and should be their own sprint, per chapter or per character
cluster. This issue is the diagnosis; it does not do the work.
Character gallery — completeness & sync audit
Requested alongside the kitchen art fix (#141). Diagnosis only — nothing changed here.
Headline
The gallery itself is nearly complete: 51 cells, 45 designed, 6 placeholders.
The problem is not the gallery — it is that almost nothing in the gallery reaches the game.
1. The shared source of truth contains two characters
art/galleries/art-source.jsis the declared shared source — the file the game imports so thatgallery and gameplay cannot drift. It contains:
That is 2 of 44 gallery character draws. The other 42 are gallery-only. Every other
character in the game — Henrik, Babcia, Dziadek, the Janitor, Leida, Iris, Johannes, Tirta,
Muhittin, the Pocong, Boitatá, all of them — is drawn by a separate function living in
game/index.htmlthat was authored independently of its gallery cell.The Ch1 source-of-truth rule says the galleries are authoritative for how anything looks. In
practice that rule is enforced for Pip and Pätu and for nobody else.
2. That is exactly what produced the kitchen bug
Henrik alone has five local draw functions in the game:
drawHenrikStanding·drawHenrikSitting·drawHenrikFrozen·drawHenrikSitsDownCinematic·
drawHenriksOfferCinematicdrawHenrikStandinghappens to be faithful to the gallery (same rect construction, samepalette).
drawHenrikFrozenwas not — 98px vs 72px, cream chef jacket#dcd8c8vs near-blackshirt + cream apron, skin
#b8805cvsC.hSkin#d0b898. Two Henriks in one kitchen. Fixedin #141 by rebuilding it on the gallery construction, but nothing prevents the next one.
A third Henrik is still out there:
drawMemory6bScene(the first-taste memory, "an olderHenrik teaching a young boy") draws its own figure with the
#b8805cskin tone. Not touched in#141 — it is a memory scene with its own warm palette, and it needs Julia's eye rather than a
mechanical port.
Other characters with multiple local variants, each a place the same drift can happen:
drawDziadekRadio)3. The six undesigned cells
(#136). The cell should be retired rather than designed, unless echo-mice appear in Ch2
independently of the Ch1 corridor creature.
So the real outstanding art is 5 cells, all of them minor echo-creatures plus one Ch7
chef group.
4. What needs to be created — recommendation
Not more gallery cells. A migration. The gallery is 88% designed; the gap is that it is not
wired to anything.
art-source.jsfrom 2 characters to the full canonical set, starting with theones that already have multiple divergent in-game variants — Henrik, Dziadek, Babcia,
Janitor, Doctor, Passenger, Erik, Iris. That is where drift has actually happened.
function, the way
renderPipandrenderPatualready do. Pose variants (sitting, frozen,cinematic close-up) become parameters, not separate characters.
Henrik cannot appear silently.
Steps 1–2 are the substance and should be their own sprint, per chapter or per character
cluster. This issue is the diagnosis; it does not do the work.