The friend across the net wears your kit, drawn from the front

His colour landed on the shirt while yours lands on the shorts, because he was
drawn on the roster opponent's red sheets and dyed on an arc of his own. Red is
the one hue that art cannot hang a kit on: the men's shorts are neutral grey at
saturation 0.05, so no rotation ever reached them, and the women's red top sits
at her skin's and her hair's hue — a dark pick was painting her arms and her
ponytail, live, on the shipped build.

So he gets his own sheets. `assets/_frontroll.py` is `_famroll`'s trick pointed
at the tennis poses — image 1 is the ten `o_*` frames composed from disk, image 2
is the player from behind — and two calls drew all twenty. He rides the PLAYER's
arcs and the tour's own mode now: his shorts dye, her whites wash. `TINT.oKit` is
gone. The roster CPU keeps the red art; it is not a person.

The setup screen shows that front too — picking a face off the back of a head was
only ever what the art allowed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5 committed 2026-08-20 16:04:10 +02:00
1 parent 4052ab1404
commit 5f9170b7d7
27 files changed
+324 -31

No files matched your search

+50 -1
View File
@@ -20,7 +20,9 @@ anything, so if you add a `return` for an awkward deal, check the body still run
the state-machine contracts that have historically produced the show-stoppers. The Dockerfile runs
it as a build stage, so a red suite cannot deploy — but finding out from Coolify is the slow way.
Last updated 2026-08-18 (the store model in LATER revised: free download + €2.99 unlock-everything
Last updated 2026-08-20 (the friend across the net gets his OWN sheets — the player's kit, drawn
from the front, so his pick dyes the same garment yours does; the setup screen shows that front too.
See "THE FRIEND ACROSS THE NET WEARS YOUR KIT". Before that 2026-08-18: the store model in LATER revised: free download + €2.99 unlock-everything
IAP with the free-tier gates, superseding paid-upfront; before that 2026-08-15, two sessions: the
finetuning pass — gore opens in the gore, the menu theme
comes back, one world board per mode, and the barrel economy cut — over the batch below: six new
@@ -2291,6 +2293,7 @@ it is the WRONG tool, superseded by the reference-sheet flow. Route by job:
| Rebuild the pose reference | `_famref.py` — composed from disk, no API call, gated. |
| A PLAYER RUN CYCLE | `_vidroll.py` — a video model, not a still one. See "THE RUN CYCLES CAME OUT OF A VIDEO" below. `_runroll.py` still rolls the single frame you film FROM, and still serves the opponents' pairs; it cannot produce a gait. |
| A stride twin (legs frozen) | `_stride.py`. |
| THE SAME CHARACTER IN SOMEONE ELSE'S CLOTHES, every pose at once | `_frontroll.py` — famroll's trick pointed at the tennis poses: image 1 is the ten `o_*` frames composed from disk, image 2 is the body to dress them in. Two calls made the whole netplay family. Ten `_regen` batches would have been ten chances for the man to drift. |
| Single-sheet remaster, boss roster, any non-family sprite | `_regen.py` + `_regen_batches.json` — the only jobs it is still for. |
| Standalone art (logo, panels) | `_key.py`; coarse legacy sheets, `_slice.py`. |
@@ -2533,6 +2536,52 @@ The gates, and the numbers they were calibrated on:
**SUPERSEDED 2026-08-12 — see the next section.** Those 31 frames were not art: `--verify` found
27 of them dead. The brute is now live (`ZFAMS` has `'br'`, the KEEPER wears it) off ONE sheet.
## THE FRIEND ACROSS THE NET WEARS YOUR KIT, FROM THE FRONT (2026-08-20)
Oliver, on a netplay match: *"the opponent color is displayed correctly, but the shirt is colored not
the trousers (men) and for women it is not the whole dress"* — and his own diagnosis was the right
one: **we did not have the player character from the front.** The friend was drawn on the ROSTER
opponent's sheets (`o_*`: red polo, dark grey shorts) and dyed on a third hue arc, `TINT.oKit`.
**Red is the one hue a kit cannot own on this art, and no arc could have fixed it.** Both halves
were measured before anything was generated:
- On the men's sheet the only saturated red is the SHIRT — the shorts are neutral grey at
saturation 0.05, so a hue rotation can never reach them. Your own pick dyes your SHORTS. Two
people in one match, wearing their colour on different garments.
- On the women's sheet the red top sits at the same hue as her SKIN and her HAIR (top h≈0 and 336-355,
shaded skin h 13-24, and the arc's own floor is satKit 0.15). Rendering the shipped tint with the
ACID pick put green blotches down her arms, her legs and her ponytail. That was live, and nobody
had looked at it.
**The repaint was tried first and it fails, which is worth knowing.** Mapping the red kit to white
and the grey shorts to blue offline — no API, no new art — gives a genuinely good MAN (white polo,
blue shorts, right shoes) and a ruined WOMAN: the same hue overlap eats her hair, her face and her
leg shading. `_famref`'s `bed_magenta` is also a trap on this art — it repaints the largest PALE
blob, which is the racket bed on the z_r* master but a SHOE here, so `_frontroll.open_bed()` asks
whether the bed is already keyed out before touching a frame.
So the friend got his own sheets: `n_*`, the player's kit drawn from the FRONT, tinted through the
PLAYER's arcs and the tour's own mode — his shorts dye, her whites wash, exactly as yours do.
`TINT.oKit` is deleted. The roster CPU keeps `o_*` and stays as drawn; it is not a person.
**Two rolls made all twenty sprites, and the method is the reason.** `_frontroll.py` is `_famroll`'s
trick applied to tennis: IMAGE 1 is the POSES (the ten installed `o_*` frames composed from disk at
one scale, 4/4/2, gated for band and figure count before a call is made), IMAGE 2 is the CHARACTER
(`p_idle1`, from behind — the model is told outright that it is inventing the face). `_zsheet.cut()`
takes a `want`/`level` pair now so a non-zombie family can reuse the cutter; `level` names the frame
groups that must come back the same height (the idle pair, the bounce pair, the stride pair — the
serve toss and the smash are meant to be taller and are left alone). Heights came back within 1 px
of the `o_*` originals they were composed from.
The one thing the first roll got wrong: it drew a TENNIS BALL into both bouncing frames. The game
draws the ball; a drawn one is a blob stuck to his hand. The prompt says so now.
**And the SETUP SCREEN uses the front too** (Oliver, same session: *"das heisst aber auch, dass wir
in der farb- und charakterauswahl den frontfacing nehmen können"*). Picking a face off the back of a
head was the best the art allowed; `drawLook` draws `n_idle1` now — same kit, same palette, same
tint pass, so it still cannot drift from what walks on.
## THE RUN CYCLES CAME OUT OF A VIDEO — the still models cannot draw a gait (2026-08-15)
**A ROW OF POSES IS NOT A WALK CYCLE, and six sessions of prompting could not make it one.** Asked