Draw the tutorial properly, and put the logo and gore on the menu

The tutorial was borrowing a court tile, the in-game how-to icon and a weapon
icon, none of which were drawn to be looked at. Four purpose-made 2:1 panels
now: the serve with a tapping hand, the slingshot pull with chevrons into a
zombie, the weapon rack, and the floodlit duel. They get the full card width
above Marvin instead of being squeezed into the text column beside him.

The menu wears the title logo instead of a Silkscreen headline, and the two
buttons wear generated plates — START GAME bloodied, TUTORIAL nearly clean.
The lettering stays Silkscreen on top: generated type is a lottery and would
not match the rest of the HUD.

Two things the art needed. Quantise the panels at 128 colours, not 64 — big
flat fields with saturated accents is where a small palette shows, and 64
turned the tennis ball beige. And find a plate by its BRIGHT BORDER, never by
the corner colour: one plate came back on a near-black margin, the other on a
transparency checkerboard that differs from itself everywhere and matched the
whole canvas.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5 committed 2026-08-01 13:43:43 +02:00
1 parent 9a65a50cc4
commit 4a034773aa
9 files changed
+46 -13

No files matched your search

+18
View File
@@ -460,6 +460,24 @@ screen that unmounts the overlay flashes the live court through between menus. C
only; `START GAME` and `BACK` are their own buttons. The tutorial is a data table (`TUT` in main.js)
of Marvin poses, an optional picture already in `assets/`, and his lines — adding a page is a row.
**Menu and tutorial art is generated DIRECTLY, not through `_regen.py`.** That pipeline keys magenta
and slices figures out of a sheet; these are whole illustrated panels with backgrounds, so they go
through `generate_image.py` and a downscale/quantise pass, the same route the court tiles took. Two
things learned making them:
- **Quantise these at 128 colours, not 64.** The panels are big flat fields with a few saturated
accents (the ball, fire, blood), which is exactly where a small palette shows — 64 turned the
tennis ball beige.
- **Find a generated plate by its BRIGHT BORDER, never by the corner colour.** One button plate came
back on a near-black margin and the other on a transparency CHECKERBOARD, which differs from
itself everywhere and matched the entire canvas. The threshold has to adapt per image too: the
checkerboard's own greys are brighter than the darker plate's border.
The button plates are blank on purpose — **the lettering stays Silkscreen on top of the art**.
Generated type is a lottery and would not match the rest of the HUD. `btn_start` is a BOTTOM band of
a taller plate: by there the drips have run out to the ends and the centre is clear enough to print
over, and the plate's own bottom border comes with it.
**The menu theme starts on the FIRST TAP, never at boot** (`go()` calls `menuMusic`). A title screen
that plays at you before you touch it is rude, and on a phone the autoplay policy would have held it
silent until that tap regardless.