diff --git a/PROJECT.md b/PROJECT.md index 0df7cff..72b3179 100644 --- a/PROJECT.md +++ b/PROJECT.md @@ -1625,6 +1625,14 @@ suspect is the CUT, not the roll** — the sheets on disk are the evidence, and "Only ink votes" below). Seven families shipped pixelated for two days because every fresh look started from "the generator drew it badly" instead of diffing sheet against sprite. +**NEVER SAY "TRANSPARENT" TO THE MODEL — name the flat hex (re-learned the hard way 2026-08-14).** +The model has no concept of transparency: the word summons a PAINTED CHECKERBOARD background, and +"cuts out later" invites grey improvisations. Every background/bed instruction names ONE concrete +flat colour ("ONE FLAT solid #FF00FF across the entire canvas") and never mentions cutting, +keying or transparency. This rule already lived in `_regen.py`'s CANVAS block; a freehand one-off +prompt bypassed it and cost three rolls — REUSE THE CANVAS BLOCK (import it from `_regen.py`) +instead of re-writing background prose in scratch scripts. + **STRING BEDS ARE MAGENTA ON PURPOSE, and the cutter must be told (2026-08-14).** Prompts ask for #FF00FF racket beds so they cut to transparency (the famroll rule). But `_fine.key` REPAINTS enclosed magenta pale grey — protection from the era when magenta beds were an accident — which is diff --git a/assets/__pycache__/_regen.cpython-314.pyc b/assets/__pycache__/_regen.cpython-314.pyc index ec3f066..83c1226 100644 Binary files a/assets/__pycache__/_regen.cpython-314.pyc and b/assets/__pycache__/_regen.cpython-314.pyc differ diff --git a/assets/o_run1.png b/assets/o_run1.png index 76918f0..9e08c47 100644 Binary files a/assets/o_run1.png and b/assets/o_run1.png differ diff --git a/assets/o_run1_f.png b/assets/o_run1_f.png index 62b6de8..ff12c73 100644 Binary files a/assets/o_run1_f.png and b/assets/o_run1_f.png differ diff --git a/assets/o_run2.png b/assets/o_run2.png index 76d877f..accfcd1 100644 Binary files a/assets/o_run2.png and b/assets/o_run2.png differ diff --git a/assets/o_run2_f.png b/assets/o_run2_f.png index bd2bccf..68176b9 100644 Binary files a/assets/o_run2_f.png and b/assets/o_run2_f.png differ diff --git a/assets/o_run3.png b/assets/o_run3.png index c2468da..cb421e2 100644 Binary files a/assets/o_run3.png and b/assets/o_run3.png differ diff --git a/assets/o_run3_f.png b/assets/o_run3_f.png index a79a08e..8e461b8 100644 Binary files a/assets/o_run3_f.png and b/assets/o_run3_f.png differ diff --git a/assets/o_run4.png b/assets/o_run4.png index 0bf8339..b4dbea6 100644 Binary files a/assets/o_run4.png and b/assets/o_run4.png differ diff --git a/assets/o_run4_f.png b/assets/o_run4_f.png index 5799112..a7d1dad 100644 Binary files a/assets/o_run4_f.png and b/assets/o_run4_f.png differ diff --git a/assets/o_run5.png b/assets/o_run5.png index 9e08c47..2e6803a 100644 Binary files a/assets/o_run5.png and b/assets/o_run5.png differ diff --git a/assets/o_run5_f.png b/assets/o_run5_f.png index 1e48848..239ac12 100644 Binary files a/assets/o_run5_f.png and b/assets/o_run5_f.png differ diff --git a/assets/o_run6.png b/assets/o_run6.png index accfcd1..8da1ef6 100644 Binary files a/assets/o_run6.png and b/assets/o_run6.png differ diff --git a/assets/o_run6_f.png b/assets/o_run6_f.png index 1ebfbc3..08168fd 100644 Binary files a/assets/o_run6_f.png and b/assets/o_run6_f.png differ diff --git a/assets/o_run7.png b/assets/o_run7.png deleted file mode 100644 index b4dbea6..0000000 Binary files a/assets/o_run7.png and /dev/null differ diff --git a/assets/o_run7_f.png b/assets/o_run7_f.png index 90cba7e..f785af1 100644 Binary files a/assets/o_run7_f.png and b/assets/o_run7_f.png differ diff --git a/assets/o_run8.png b/assets/o_run8.png deleted file mode 100644 index 8da1ef6..0000000 Binary files a/assets/o_run8.png and /dev/null differ diff --git a/assets/o_run8_f.png b/assets/o_run8_f.png index 9b03611..bb19f99 100644 Binary files a/assets/o_run8_f.png and b/assets/o_run8_f.png differ diff --git a/index.html b/index.html index e5cc4e3..963e156 100644 --- a/index.html +++ b/index.html @@ -494,6 +494,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one') { - + diff --git a/src/render.js b/src/render.js index cc0364d..8648c04 100644 --- a/src/render.js +++ b/src/render.js @@ -221,7 +221,7 @@ function farB(z) { // Asset cache-buster — bump with main.js?v=N (see the img.src note below). EXPORTED because the // menu screens hang tags on the same files, and two copies of this number is one copy too // many: the one that does not get bumped is the one that serves a cached 404. -export const SPRV = 122; +export const SPRV = 123; // The boot bar in main.js watches this. Nothing here CHANGES when things load — every sprite was // already requested at import — it just makes the wait visible and holds the menu back until the // last sheet has landed. See the onerror note below for the other half of "sometimes missing". @@ -230,7 +230,7 @@ const SPR = {}; for (const n of ['p_idle1','p_idle2','p_bounce','p_bounce2','p_toss','p_smash','p_run1','p_run2','p_run3','p_run4','p_run5','p_run6','p_swing1','p_swing2','p_die1','p_die2','p_die3','p_die4','p_die5', 'p_pull', // the serve wind-up: the racket dropping behind him while the pull is drawn 'o_idle1','o_idle2','o_bounce','o_bounce2','o_toss','o_smash','o_swing1','o_swing2', - 'o_run1','o_run2','o_run3','o_run4','o_run5','o_run6','o_run7','o_run8', // the rolled 8-frame cycle (_runroll.py; the friendly refresh landed a full 8 again) + 'o_run1','o_run2','o_run3','o_run4','o_run5','o_run6', // the rolled 6-frame cycle (a 2x6 grid roll is TWO cycles — one row IS the cycle, never stitch the halves) 'x_ump','x_boyrun1','x_boyrun2','x_boyrun3','x_boyrun4', 'x_crowd','x_crowd2','x_ads', // CENTRE COURT (grass) — also the fallback set 'x_crowd_c','x_crowd_c2','x_ads_c', // TERRE ROUGE (clay)