ONE palette gate replaces four feature-picked ones
Oliver, on the brute's fall frames: "now the fall zombie has a different skin tone.. man this is all so tiresome." Both halves were right. The skin IS twenty points lighter across that sheet, and the tiresome part is mine: I had been adding one hand-picked gate per drift I discovered — redness, then hue, then `changed`, then no-grids — which is a loop with no end, because naming features is not the same as comparing pictures. `kit` names four: shirt redness, shorts brightness, shorts hue, near-white fraction. Every character breaks a different one. The brute's shirt has no red in it at all, so its reference redness was 0 and blood scored 70-100 against a tolerance meant for a garment. A body face down shows a fraction of the shirt it shows standing, so two of the four move with POSE. And nothing in that list ever measured SKIN, which is exactly how a brute's flesh drifted across a whole sheet with six gates green. The palette gate asks the only question that generalises: are the big colour areas of this frame the same colours as the anchor's? Top SIX by area — the garments and the skin. Proportions ignored, so a pose change is invisible; blood is never in the top six, so a fresh wound cannot look like drift. CALIBRATED BEFORE IT WAS WIRED IN, which is the discipline I skipped all day. Frames known to be right score 0.0-8.5; the drifts we could actually see score 12.0-15.9. The threshold is 10, in the gap. Three formulations were measured and the two that overlapped were thrown away. And every sheet of a variant is now anchored to that variant's FIRST sheet, not to the stage above it. Chaining let a legal hop compound into a drift nobody authorised — the shorts walking -9 to -19 down the wound ladder was that, and so was this. Its first verdict on the existing brute: br_play is the character, and every other sheet sits 15 to 48 away from it. It would have caught all of this on the first roll. Also in: the GRID guard from the same session — the valley-cut rescue would slice a 2x2 sheet into four frames of a torso above someone else's boots, turning a loud failure into a silent one. Asked per cut PIECE, because a body is vertically continuous and a piece with a gap in it caught two of them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
df454c5d92
commit
0e92c72457
33 files changed
+312
-19
No files matched your search
+13
-9
@@ -107,18 +107,22 @@ def variant(key, who):
|
||||
made = []
|
||||
|
||||
def batch(name, sprites, refs, subject, stride=None, changed=None, newart=False):
|
||||
for src, dst in zip(refs, sprites): # placeholders: the density bar needs a baseline to beat
|
||||
seed(src, dst)
|
||||
# Only the sheets drawn off the MASTER are seeded here. A chained wound stage is seeded by
|
||||
# _regen at run time, from whatever its reference has become by then — seeding it now would
|
||||
# score it against a copy of the master, two steps better than the stage it follows.
|
||||
if newart:
|
||||
for src, dst in zip(refs, sprites):
|
||||
seed(src, dst)
|
||||
spec = dict(sprites=sprites, ref_only=list(refs), check='loose', anchor=0, subject=subject)
|
||||
spec['newart' if newart else 'state'] = True
|
||||
if stride: spec['stride'] = stride
|
||||
if changed:
|
||||
spec['changed'] = changed
|
||||
# pose-varied sheets move redness and shorts BRIGHTNESS on their own (a body face down
|
||||
# shows a fraction of the shirt it shows standing); the shorts HUE is the measure that
|
||||
# survives a pose change, so it stays the tight one. See the note in _regen.kit.
|
||||
spec['palette_ref'] = refs[0]
|
||||
spec['palette_tol'] = [26, 14, 99, 5]
|
||||
if changed: spec['changed'] = changed
|
||||
# EVERY SHEET OF A VARIANT IS PAINTED IN THE FIRST SHEET'S COLOURS. Anchoring each stage to
|
||||
# the one before it let a legal hop compound into a drift nobody authorised; anchoring all of
|
||||
# them to the healthy body means the whole variant, wounds and all, stays one character.
|
||||
# The first sheet is what DEFINES the palette, so it is the only one not measured against it.
|
||||
if sprites[0] != K + '1':
|
||||
spec['palette_anchor'] = K + '1'
|
||||
B[name] = spec
|
||||
made.append(name)
|
||||
print(f'{name:16s} <- {refs[0]}… {", ".join(sprites)}')
|
||||
|
||||
Reference in new issue
Block a user