The Life of the Blessed Hand

Back Matter · The Keepsakes

How Every Pixel Is Made

Thirty-two colours, a rigged model, a recipe, and nothing painted

Hic iacet in tenebris.

Lore chaserStreamerNo spoilersas of 2026-10-06 · condensed from the full art book

Every pixel in Væ Victis is one of 32 colours, and every one of them has a known source: a recipe in code, or a 3D figure rendered and quantised by code. There is no photograph, no painting and no generated image in the game; since 5 October 2026 a guard script fails the build if a generated image returns. This chapter is the short tour. The long one, with every sheet and the recipe in full, is the art book: How Every Pixel Is Made.

1. The palette

The palette is fixed in src/core.js (PAL_LIST): 32 entries in nine families, a game of blacks, stone, bone, blood, rust, verdigris and one cold blue, with a single violet kept for spells. A picture is a grid of numbers from 1 to 32 (0 is clear). The screen is 320 by 240, and nothing in the game draws a colour that is not on this list: the debug overlay counts what reaches the screen. This book keeps the same rule in its own stylesheet.

  1. 1 k#050407
  2. 2 n0#0d0b12
  3. 3 d1#1a1520
  4. 4 gr0#2a2630
  5. 5 gr1#48434f
  6. 6 gr2#77707d
  7. 7 gr3#a8a0a6
  8. 8 bn0#8c7d68
  9. 9 bn1#c4b392
  10. 10 w#eee4cc
  11. 11 r0#240408
  12. 12 r1#520a11
  13. 13 r2#8e1318
  14. 14 r3#c8231f
  15. 15 r4#ff4f3a
  16. 16 br0#2b1810
  17. 17 br1#553221
  18. 18 br2#875634
  19. 19 gd#c39535
  20. 20 y#f3d37a
  21. 21 v0#0b1c1d
  22. 22 v1#15332f
  23. 23 v2#275651
  24. 24 v3#468a7f
  25. 25 v4#8cc6b3
  26. 26 b0#0a1030
  27. 27 b1#1b2d6c
  28. 28 b2#3658bd
  29. 29 b3#86a8ff
  30. 30 sk0#6a5a63
  31. 31 sk1#b9a6a6
  32. 32 p1#8a4fc0

2. Figures: a model, eight directions, thirty-two colours

A figure starts as a rigged 3D model. The hero and the people are Clint Bellanger’s Flare models (CC-BY 3.0); the props are KayKit packs (CC0). They are composed on one rig, then recoloured and costumed at render time (tools/render/jobs-*.mjs: the Tower’s soldiers, the gutter’s watch, the orphanage’s sisters, the Wheel’s circus).

tools/render/render.mjs poses the model bone by bone, lights it, renders it from 8 directions at 56 pixels in a headless browser, and quantises every pixel to the 32-colour palette by material. The output is src/sprites-<name>.js: one string of palette indices per frame. The sheets below are that data drawn back out, nothing else. The character cards in The Gallery are single frames of the same sprites.

Wick walking
SCREEN 2-1Wick walkingEight directions (rows: S, SE, E, NE, N, NW, W, SW) and eight frames of the walk, each pixel quantised to the palette. 54 by 50 pixels a frame, 20 of the 32 colours.The art book: src/sprites-hero.js, drawn back out of its data
The Earl of the Tower walking
SCREEN 2-2The Earl of the Tower walkingThe same model recoloured and costumed at render time (a cape, plate, a greatsword) by the Tower’s job. 64 by 58 pixels a frame.The art book: src/sprites-tw_earl.js, drawn back out of its data

3. Pictures: a recipe, a field, a dither

A picture that is not a figure (a texture, a map, a stained-glass window) is a recipe: a short script in tools/art/paint/ that sets a pixel field (a material, a ramp of palette keys and a value per pixel) with seeded noise, signed-distance shapes and a Bayer dither, then resolves it to palette indices. tools/art/paint.mjs runs it inside the game and writes the picture as a run-length string.

A recipe is deterministic: run it twice and you get the same picture. That is the provenance. No generated image is a source, a reference or an input of any kind.

The haven's floor
SCREEN 2-3The haven’s floorA texture, tiled 2 by 2 (192 by 192 pixels, 10 colours): slabs of stone with blood dried into the joints, from periodic noise and Voronoi cells, resolved through a ramp with a Bayer dither.The art book: tools/art/paint/tex-haven.js
The world map
SCREEN 2-4The world mapThe world map: six houses on the hill, and where to go next. See it in play in The Open World.The art book: the world map, drawn by recipe

4. The dither, close up

Zoom into any picture and the dither shows. The game never blends two colours: it places them in a Bayer pattern, so a ramp of four steps reads as a smooth shade at the game’s size and as a lattice when you look closely.

A corner of the floor, at 8x
SCREEN 2-5A corner of the floor, at 8xTwo palette colours placed in a pattern. At 320 by 240 the eye blends them; here nothing is blended.The art book: tools/art/paint/tex-haven.js, a 60 by 40 pixel corner

5. A recipe, in one line

The haven’s floor begins with a single call: const F = T.cobbles(96, 96, { n: 3, m: 3, seed: 81, joint: 1, lo: .32, hi: .78, dome: .3, jit: .75 });. That sets stone cobbles on a 96 by 96 field with a seed. Everything after it (the dried blood in the joints, the rust spreading out in a ragged tide-line, the cracks) is a material, a value and a seed per pixel. No image is read. The full recipe is in the art book.

6. Where the pieces come from

SourceWhat it makesLicence
Clint Bellanger, Flare hero and heroineThe hero and every person, recoloured and costumed at render timeCC-BY 3.0
Kay Lousberg, KayKitThe props of the graveyard, the dungeon and the furnitureCC0 1.0
Mathers and Crowley, Goetia (1904)The sealsPublic domain
Serifeus Studio, tools/art/paint/Textures, stills, windows, the map, the title letteringOurs: code and recipes

Full credits are in CREDITS.md in the repository and on the game’s credits screen. What is still synthetic in the game is the voices (open-source speech models), which the project’s own inventory records as placeholders until the owner and his wife re-voice them.