Park the brute — and name what its next attempt has to change

The agreed single pass did not land: br_w1 installed, br_serve and br_fall were
refused by the palette gate at 12 to 22 away from z_br1, and everything drawn
from them was correctly skipped rather than built on sand.

'br' comes out of ZFAMS. The art stays on disk and the nine batches stay in the
JSON, so re-registering it later is one line — this is parked, not deleted, and
nothing in the game referenced it (no opponent row names it).

THE FINDING WORTH KEEPING, written at the top of _master.py: the brute's PLAY
sheet is a good brute; its serve and fall sheets are each a slightly DIFFERENT
brute. All three restyle from the master independently, so each invents the
character afresh from the words, and "pale grey-green work shirt" lands
somewhere new every time. The gate is not being fussy — it is measuring three
different zombies.

The fix is to hand the later sheets BOTH references: the master frame for the
POSE and the variant's own first sheet for the CHARACTER, instead of the words
for the character. Which is the lesson the wound stages already taught — a
reference beats a description — applied one level up. Until that lands, a
variant is reliable for its play sheet and a gamble for the other two.

The racket zombie is untouched and complete: 33 frames, every gate green, and
it is the opponent the match actually plays.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5 committed 2026-08-12 13:52:33 +02:00
1 parent 0e92c72457
commit 525f017636
8 files changed
+18 -3

No files matched your search

+11
View File
@@ -9,6 +9,17 @@
# Measured, the poses survive it intact (the brute restyle came back at upper 0.148 / legs 0.618
# against the master's own 0.157 / 0.565 — very slightly BETTER than what it copied).
#
# WHAT THE FIRST VARIANT SHOWED, and what the next attempt should change. The brute's PLAY sheet is
# a good brute. Its serve and fall sheets are each a slightly DIFFERENT brute, because all three
# restyle from the master independently — so each one invents the character afresh from the words,
# and "pale grey-green work shirt" lands somewhere new every time. The palette gate now measures the
# gap (15 to 48 against z_br1, where a good frame is under 8.5) and refuses them.
#
# The fix is to give the later sheets BOTH things: the master frame for the POSE and the variant's
# own first sheet for the CHARACTER, instead of the words for the character. That is the same lesson
# as the wound stages — a reference beats a description — applied one level up. Until then a variant
# is reliable for its play sheet and a gamble for the other two.
#
# WHY THREE SHEETS AND NOT ONE. The generator answers at a fixed width, around 1400-1800 px. At four
# figures across each gets 350-440 px, which carries the 90-110 px of figure height the style block
# asks for. All eleven on one strip would be ~130 px each and the detail gate would reject every
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 24 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

+7 -3
View File
@@ -728,9 +728,13 @@ export const BENCH_STAGES = ['HEALTHY', 'ARM OFF', 'HEADLESS'];
// needs the names — the preloader, drawZombie's wound lookup, the sprite bench — derives them from
// this table rather than spelling them out. That is the whole point: 31 hand-written filenames in a
// preload list is 31 chances to typo one and have a body silently vanish for a frame.
// 'br' is THE BRUTE, generated with _master.py --variant off the master sheets — the same creature
// the gore mode's 'g' shambler is, now playing tennis: twice the width, a racket lost in one fist.
export const ZFAMS = ['r', 'br'];
// THE BRUTE ('br') IS PARKED, not deleted. Its healthy play sheet is good and is on disk; its serve
// and fall sheets each RE-INVENT the character, because they restyle from the MASTER — a lean
// red-shirted man — rather than from the brute that was just made. The palette gate now measures
// that (15 to 48 away from z_br1, where a good frame scores under 8.5) and refuses them, which is
// the gate working, not the gate being wrong. Re-registering it is one entry here; see the note at
// the top of _master.py for the fix its next attempt needs.
export const ZFAMS = ['r'];
const POSES = ['bounce', 'toss', 'serve', 'fall1', 'fall2', 'fall3', 'rise'];
export const famFrames = f => [
`z_${f}1`, `z_${f}2`, `z_${f}3`, `z_${f}4`, // stance, shuffle A, shuffle B, forehand