The dead club doubles its staff, and the draw is made where you can see it

Six new opponent families (head coach, stringer, strawberry seller, chair
umpire, spectator, roller man) through the famroll/zsheet route, placed by
hierarchy into an 18-rung ladder; the champion steps up behind them.

THE DRAW: picking the tournament now rolls its own bracket in front of you —
only the final was ever settled — and what lands is what walks on.

Netplay, off Oliver's cellular report: the mid-flight early-decide was missing
its !G.net gate, so the striker judged its own outbound flight and the two
scoreboards drifted a point apart into a court nobody could serve on. The
host's court now rides the room, its scoreboard rides the pretoss stream, and
a called ball rolls to its own halt instead of freezing where the call caught it.

Plus the night court, and somebody in the stand is taking pictures.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5 committed 2026-08-15 11:49:19 +02:00
1 parent 4c47295a73
commit 9cc3ac54b3
207 files changed
+632 -81

No files matched your search

+17 -3
View File
@@ -24,9 +24,12 @@ SCRATCH = os.path.join(HERE, '_refcheck')
# fam -> the gore-mode body it anchors on. KEEP IN SYNC with _famroll.FAMS (not imported: that
# module wants `requests` at import time, which the pillow/numpy env running this does not carry).
SRC = {'br': 'z_g1', 'sh': 'z_a1', 'bb': 'z_e1', 'st': 'z_d1', 'ru': 'z_f1',
SRC = {'r': 'z_c1', # the club pro: the turned opponent IS him, and it is his goriest print
'br': 'z_g1', 'sh': 'z_a1', 'bb': 'z_e1', 'st': 'z_d1', 'ru': 'z_f1',
'gk': 'z_boss1', 'lj': 'z_judge1', 'dr': 'z_dir1', 'ch': 'z_champ1',
'ph': 'z_physio1', 'ma': 'z_mascot1'}
'ph': 'z_physio1', 'ma': 'z_mascot1',
'hc': 'z_coach1', 'sg': 'z_string1', 'sb': 'z_berry1', 'cu': 'z_chair1',
'sp': 'z_s1', 'rm': 'z_k1'}
# head depth as a fraction of the standing figure, where the shoulder-widening rule fails:
# the mascot's head IS partly the ball, and the ball is his identity — the wide crop is right.
DEPTH = {'ma': 0.37}
@@ -39,7 +42,18 @@ DEPTH = {'ma': 0.37}
BOX = {'gk': (0.45, 0.14, 0.70, 0.44), 'dr': (0.20, 0.00, 0.55, 0.30),
'ph': (0.41, 0.02, 0.75, 0.33), 'ru': (0.25, 0.00, 0.80, 0.24),
'lj': (0.30, 0.00, 0.65, 0.32), 'br': (0.28, 0.00, 0.66, 0.30),
'ch': (0.32, 0.00, 0.66, 0.30)}
'ch': (0.32, 0.00, 0.66, 0.30),
# the 2026-08-15 six. EVERY ONE of them needed a hand box, and for the same reason each
# needed its prop talked out of the family roll: the thing they carry rides at head height.
# The stringer's coil, the seller's cap-and-tray, the umpire's chair, the spectator's ladder
# and the roller man's shoulder all fired the shoulder-widening rule inside the first few
# rows, and the automatic crop came back 88x18 / 36x17 / 35x16 — a letterbox of scalp.
'r': (0.40, 0.00, 0.82, 0.31),
'hc': (0.36, 0.00, 0.74, 0.26), 'sg': (0.42, 0.00, 0.72, 0.28),
'sb': (0.36, 0.00, 0.72, 0.30), 'cu': (0.36, 0.12, 0.92, 0.44),
# the spectator KEEPS his ladder in frame — it is behind and around his head in the only
# drawing of him there is, and a crop tight enough to lose it loses half his face too
'sp': (0.50, 0.21, 0.77, 0.47), 'rm': (0.10, 0.00, 0.40, 0.26)}
def head_box(a):