diff --git a/assets/_master.py b/assets/_master.py index d499f92..9570443 100644 --- a/assets/_master.py +++ b/assets/_master.py @@ -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 diff --git a/assets/z_brw1.png b/assets/z_brw1.png index 4e856b6..440b4f3 100644 Binary files a/assets/z_brw1.png and b/assets/z_brw1.png differ diff --git a/assets/z_brw1b.png b/assets/z_brw1b.png index c5dfa9a..1f2fb9a 100644 Binary files a/assets/z_brw1b.png and b/assets/z_brw1b.png differ diff --git a/assets/z_brw1s.png b/assets/z_brw1s.png index e94f09e..63a6041 100644 Binary files a/assets/z_brw1s.png and b/assets/z_brw1s.png differ diff --git a/assets/z_brw2.png b/assets/z_brw2.png new file mode 100644 index 0000000..440b4f3 Binary files /dev/null and b/assets/z_brw2.png differ diff --git a/assets/z_brw2b.png b/assets/z_brw2b.png new file mode 100644 index 0000000..1f2fb9a Binary files /dev/null and b/assets/z_brw2b.png differ diff --git a/assets/z_brw2s.png b/assets/z_brw2s.png new file mode 100644 index 0000000..63a6041 Binary files /dev/null and b/assets/z_brw2s.png differ diff --git a/src/config.js b/src/config.js index aa1f5de..367aecd 100644 --- a/src/config.js +++ b/src/config.js @@ -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