diff --git a/PROJECT.md b/PROJECT.md
index e602674..598f350 100644
--- a/PROJECT.md
+++ b/PROJECT.md
@@ -1832,6 +1832,25 @@ pipeline's knowledge:
faces RIGHT by convention — the gameplay.js note at the swing aim). The new rows are all drawn
facing right, which quietly fixed it.
+## THE TWELVE-RUNG LADDER — four new families, and the pair-reference lesson (2026-08-13)
+
+Oliver: at least 12 opponents. His picks: **DIRECTOR, CHAMPION, PHYSIO, MASCOT** — all four already
+existed as chapter bosses, so each family anchors on its own settled boss frame (`z_dir1`,
+`z_champ1`, `z_physio1`, `z_mascot1`): the rung and the boss are the same person, which is the
+roster's narrative. Rolled through `_famroll.py` (rows added), cut with `_zsheet.py`, HEAD_CROP
+measured for the four. The ladder is now 12 rungs (mascot at 5, physio at 8, director 11,
+champion 12) and **`matchFoe` is DECOUPLED from `bossArt`'s cycling** — his call, champion caps
+rung 12 while chapters keep their 10-rotation. The lists share characters, not arithmetic.
+
+**THE PAIR REFERENCE, and when words lose.** The champion came back club-pro-slim through FOUR
+rolls — two prompt escalations ("shoulders TWICE as wide", "if he is as slim as image 1 it is
+WRONG") and a general build-override clause in `_famroll.prompt()` all lost to the pose sheet's
+figures. `char_ref` now takes a `pair`: the character pasted NEXT TO a club-pro frame on one
+ground line, so the size difference is shown, not described. Even that only half-worked, so the
+champion's mass is STATURE instead: `OPPONENTS` rows carry an optional `h` (world height, read by
+`zombieH` so the serve aims at the body actually drawn) — champion 2.1 m, the Bulk 2.0 m. When a
+build matters, budget rolls for it, and remember the fallback is a data row, not a fifth roll.
+
## THE ZOMBIE FAMILY PIPELINE — one sheet, one character, 31 sprites (2026-08-12)
**This replaces the nine-batch flow above for a whole opponent family.** `_regen.py` still exists and
diff --git a/assets/_famroll.py b/assets/_famroll.py
index 9ec14f7..f8207ee 100644
--- a/assets/_famroll.py
+++ b/assets/_famroll.py
@@ -37,6 +37,23 @@ FAMS = {
'ru': ('z_f1', 'a wiry FAST ZOMBIE RUNNER in a sleeveless tennis top, lean and forward-leaning'),
'gk': ('z_boss1', 'a heavy ZOMBIE GROUNDSKEEPER in stained work overalls and a shapeless hat'),
'lj': ('z_judge1', 'a ZOMBIE LINE JUDGE in a dark blazer and pale trousers, upright and severe'),
+ # the 2026-08-13 four (Oliver picked them): each anchors on its own settled BOSS frame, so the
+ # match opponent and the chapter boss are the same person — which is the roster's whole narrative
+ 'dr': ('z_dir1', 'a ZOMBIE TOURNAMENT DIRECTOR in a navy club blazer with a gold crest, a striped '
+ 'tie, glasses, a laminated ID badge on a lanyard, and tan trousers — stiff and officious'),
+ 'ch': ('z_champ1', 'an ENORMOUS HULKING ZOMBIE CHAMPION, a mountain of muscle: shoulders TWICE as '
+ 'wide as the figures in image 1, arms thicker than their legs, a massive barrel '
+ 'chest straining a stained vintage white tennis kit with a gold-trimmed collar, '
+ 'a bandage wrapped around his head, sweatbands. Image 2 shows him STANDING NEXT '
+ 'TO one of image 1\'s men at true scale: THAT is the size difference every '
+ 'figure keeps, in every pose. If he is as slim as his neighbour, it is WRONG',
+ 'z_r1'),
+ 'ph': ('z_physio1', 'a ZOMBIE PHYSIO in a white polo shirt with a red cross on the chest, glasses, '
+ 'bright blue medical gloves, and dark green trousers'),
+ 'ma': ('z_mascot1', 'a ZOMBIE MASCOT wearing a GIANT FUZZY YELLOW TENNIS BALL costume: his gaunt '
+ 'grey-green head pokes out of a hole in the ball, thin ragged green arms and '
+ 'legs stick out of it, one white glove, worn sneakers. The huge yellow ball IS '
+ 'his torso in every pose'),
}
@@ -48,14 +65,28 @@ def key():
sys.exit('no OPENROUTER_API_KEY')
-def char_ref(k, spr):
+def char_ref(k, spr, pair=None):
"""IMAGE 2: the character, at 4x NEAREST on magenta. Raw sprite pixels, no round trip — the same
- rule the pose sheet now follows, and for the same reason."""
+ rule the pose sheet now follows, and for the same reason.
+
+ `pair` puts a SECOND sprite beside it at true relative scale. A picture beats a paragraph (the
+ project's own lesson, both ways): three rolls of prompt language could not make the champion
+ keep his bulk against the pose sheet's slim figures — showing him STANDING NEXT TO the club pro
+ is the claim the words kept failing to make."""
im = Image.open(os.path.join(HERE, spr + '.png')).convert('RGBA')
big = im.resize((im.width * 4, im.height * 4), Image.NEAREST)
pad = round(big.height * 0.08)
- out = Image.new('RGB', (big.width + 2 * pad, big.height + 2 * pad), (255, 0, 255))
- out.paste(big, (pad, pad), big)
+ tiles = [big]
+ if pair:
+ pim = Image.open(os.path.join(HERE, pair + '.png')).convert('RGBA')
+ tiles.append(pim.resize((pim.width * 4, pim.height * 4), Image.NEAREST))
+ w = sum(t.width for t in tiles) + pad * (len(tiles) + 1)
+ h = max(t.height for t in tiles) + 2 * pad
+ out = Image.new('RGB', (w, h), (255, 0, 255))
+ x = pad
+ for t in tiles:
+ out.paste(t, (x, h - pad - t.height), t) # shared ground line: the size difference IS the message
+ x += t.width + pad
p = os.path.join(SCRATCH, f'char_{k}.png')
os.makedirs(SCRATCH, exist_ok=True)
out.save(p)
@@ -74,6 +105,11 @@ def prompt(who):
'damage states in the same places. A figure with no head keeps no head; a figure missing an arm '
'keeps that arm missing with the same stump and blood. Only the body wearing the poses changes. '
'Do not carry over the previous character\'s shirt, shorts, shoes, hair or headband.\n\n'
+ # "the same sizes" above is about LAYOUT, and the model reads it as licence to keep image 1's
+ # slim build — the champion came back club-pro-thin twice. The build belongs to the CHARACTER.
+ 'THE CHARACTER\'S OWN BUILD OVERRIDES IMAGE 1\'S: if image 2 shows a wider, heavier or fatter '
+ 'body than the figures of image 1, every redrawn figure keeps that wider, heavier body in '
+ 'every pose. Only the POSE comes from image 1 — never the physique.\n\n'
# EVERY UNDAMAGED FIGURE HAS A HEAD, said out loud. The clause above ("a figure with no head
# keeps no head") is there for the wound rows and the old normalisation pass took it as licence
# to remove one from the play row — which is how six families came back with a decapitated
@@ -96,8 +132,9 @@ def u(p):
def roll(k):
- spr, who = FAMS[k]
- ch = char_ref(k, spr)
+ spr, who = FAMS[k][:2]
+ pair = FAMS[k][2] if len(FAMS[k]) > 2 else None
+ ch = char_ref(k, spr, pair)
r = requests.post('https://openrouter.ai/api/v1/images',
headers={'Authorization': f'Bearer {key()}', 'Content-Type': 'application/json'},
# 4K and 9:16: the endpoint DEFAULTS to 1K and snaps the aspect to an enum, so both are
diff --git a/assets/z_ch1.png b/assets/z_ch1.png
new file mode 100644
index 0000000..cfa9577
Binary files /dev/null and b/assets/z_ch1.png differ
diff --git a/assets/z_ch2.png b/assets/z_ch2.png
new file mode 100644
index 0000000..b1b75d4
Binary files /dev/null and b/assets/z_ch2.png differ
diff --git a/assets/z_ch3.png b/assets/z_ch3.png
new file mode 100644
index 0000000..b1c82fc
Binary files /dev/null and b/assets/z_ch3.png differ
diff --git a/assets/z_ch4.png b/assets/z_ch4.png
new file mode 100644
index 0000000..3b013af
Binary files /dev/null and b/assets/z_ch4.png differ
diff --git a/assets/z_chbounce.png b/assets/z_chbounce.png
new file mode 100644
index 0000000..1076760
Binary files /dev/null and b/assets/z_chbounce.png differ
diff --git a/assets/z_chfall1.png b/assets/z_chfall1.png
new file mode 100644
index 0000000..9617a0e
Binary files /dev/null and b/assets/z_chfall1.png differ
diff --git a/assets/z_chfall2.png b/assets/z_chfall2.png
new file mode 100644
index 0000000..f5eefc5
Binary files /dev/null and b/assets/z_chfall2.png differ
diff --git a/assets/z_chfall3.png b/assets/z_chfall3.png
new file mode 100644
index 0000000..1380571
Binary files /dev/null and b/assets/z_chfall3.png differ
diff --git a/assets/z_chrise.png b/assets/z_chrise.png
new file mode 100644
index 0000000..a069544
Binary files /dev/null and b/assets/z_chrise.png differ
diff --git a/assets/z_chserve.png b/assets/z_chserve.png
new file mode 100644
index 0000000..ac38bbe
Binary files /dev/null and b/assets/z_chserve.png differ
diff --git a/assets/z_chtoss.png b/assets/z_chtoss.png
new file mode 100644
index 0000000..e3a3d44
Binary files /dev/null and b/assets/z_chtoss.png differ
diff --git a/assets/z_chw1.png b/assets/z_chw1.png
new file mode 100644
index 0000000..62195e9
Binary files /dev/null and b/assets/z_chw1.png differ
diff --git a/assets/z_chw1b.png b/assets/z_chw1b.png
new file mode 100644
index 0000000..dcdd41e
Binary files /dev/null and b/assets/z_chw1b.png differ
diff --git a/assets/z_chw1bounce.png b/assets/z_chw1bounce.png
new file mode 100644
index 0000000..f31eddc
Binary files /dev/null and b/assets/z_chw1bounce.png differ
diff --git a/assets/z_chw1fall1.png b/assets/z_chw1fall1.png
new file mode 100644
index 0000000..d88d97e
Binary files /dev/null and b/assets/z_chw1fall1.png differ
diff --git a/assets/z_chw1fall2.png b/assets/z_chw1fall2.png
new file mode 100644
index 0000000..78a1ea4
Binary files /dev/null and b/assets/z_chw1fall2.png differ
diff --git a/assets/z_chw1fall3.png b/assets/z_chw1fall3.png
new file mode 100644
index 0000000..b321d91
Binary files /dev/null and b/assets/z_chw1fall3.png differ
diff --git a/assets/z_chw1rise.png b/assets/z_chw1rise.png
new file mode 100644
index 0000000..d6d5215
Binary files /dev/null and b/assets/z_chw1rise.png differ
diff --git a/assets/z_chw1s.png b/assets/z_chw1s.png
new file mode 100644
index 0000000..5683c1a
Binary files /dev/null and b/assets/z_chw1s.png differ
diff --git a/assets/z_chw1serve.png b/assets/z_chw1serve.png
new file mode 100644
index 0000000..1df2e3c
Binary files /dev/null and b/assets/z_chw1serve.png differ
diff --git a/assets/z_chw1toss.png b/assets/z_chw1toss.png
new file mode 100644
index 0000000..23386ea
Binary files /dev/null and b/assets/z_chw1toss.png differ
diff --git a/assets/z_chw2.png b/assets/z_chw2.png
new file mode 100644
index 0000000..aa1549d
Binary files /dev/null and b/assets/z_chw2.png differ
diff --git a/assets/z_chw2b.png b/assets/z_chw2b.png
new file mode 100644
index 0000000..6c721ec
Binary files /dev/null and b/assets/z_chw2b.png differ
diff --git a/assets/z_chw2bounce.png b/assets/z_chw2bounce.png
new file mode 100644
index 0000000..97de331
Binary files /dev/null and b/assets/z_chw2bounce.png differ
diff --git a/assets/z_chw2fall1.png b/assets/z_chw2fall1.png
new file mode 100644
index 0000000..7ca65d5
Binary files /dev/null and b/assets/z_chw2fall1.png differ
diff --git a/assets/z_chw2fall2.png b/assets/z_chw2fall2.png
new file mode 100644
index 0000000..3a728fc
Binary files /dev/null and b/assets/z_chw2fall2.png differ
diff --git a/assets/z_chw2fall3.png b/assets/z_chw2fall3.png
new file mode 100644
index 0000000..cd85208
Binary files /dev/null and b/assets/z_chw2fall3.png differ
diff --git a/assets/z_chw2rise.png b/assets/z_chw2rise.png
new file mode 100644
index 0000000..6f02ac5
Binary files /dev/null and b/assets/z_chw2rise.png differ
diff --git a/assets/z_chw2s.png b/assets/z_chw2s.png
new file mode 100644
index 0000000..355866c
Binary files /dev/null and b/assets/z_chw2s.png differ
diff --git a/assets/z_chw2serve.png b/assets/z_chw2serve.png
new file mode 100644
index 0000000..5b8ce04
Binary files /dev/null and b/assets/z_chw2serve.png differ
diff --git a/assets/z_chw2toss.png b/assets/z_chw2toss.png
new file mode 100644
index 0000000..f15f354
Binary files /dev/null and b/assets/z_chw2toss.png differ
diff --git a/assets/z_dr1.png b/assets/z_dr1.png
new file mode 100644
index 0000000..7d139df
Binary files /dev/null and b/assets/z_dr1.png differ
diff --git a/assets/z_dr2.png b/assets/z_dr2.png
new file mode 100644
index 0000000..12f9671
Binary files /dev/null and b/assets/z_dr2.png differ
diff --git a/assets/z_dr3.png b/assets/z_dr3.png
new file mode 100644
index 0000000..66a599b
Binary files /dev/null and b/assets/z_dr3.png differ
diff --git a/assets/z_dr4.png b/assets/z_dr4.png
new file mode 100644
index 0000000..4b06b58
Binary files /dev/null and b/assets/z_dr4.png differ
diff --git a/assets/z_drbounce.png b/assets/z_drbounce.png
new file mode 100644
index 0000000..4b02f7e
Binary files /dev/null and b/assets/z_drbounce.png differ
diff --git a/assets/z_drfall1.png b/assets/z_drfall1.png
new file mode 100644
index 0000000..82e8310
Binary files /dev/null and b/assets/z_drfall1.png differ
diff --git a/assets/z_drfall2.png b/assets/z_drfall2.png
new file mode 100644
index 0000000..00f80b6
Binary files /dev/null and b/assets/z_drfall2.png differ
diff --git a/assets/z_drfall3.png b/assets/z_drfall3.png
new file mode 100644
index 0000000..f8df6dd
Binary files /dev/null and b/assets/z_drfall3.png differ
diff --git a/assets/z_drrise.png b/assets/z_drrise.png
new file mode 100644
index 0000000..23ad1f5
Binary files /dev/null and b/assets/z_drrise.png differ
diff --git a/assets/z_drserve.png b/assets/z_drserve.png
new file mode 100644
index 0000000..90ac7a1
Binary files /dev/null and b/assets/z_drserve.png differ
diff --git a/assets/z_drtoss.png b/assets/z_drtoss.png
new file mode 100644
index 0000000..607a8a2
Binary files /dev/null and b/assets/z_drtoss.png differ
diff --git a/assets/z_drw1.png b/assets/z_drw1.png
new file mode 100644
index 0000000..5f6d0fd
Binary files /dev/null and b/assets/z_drw1.png differ
diff --git a/assets/z_drw1b.png b/assets/z_drw1b.png
new file mode 100644
index 0000000..994ec2f
Binary files /dev/null and b/assets/z_drw1b.png differ
diff --git a/assets/z_drw1bounce.png b/assets/z_drw1bounce.png
new file mode 100644
index 0000000..f31afac
Binary files /dev/null and b/assets/z_drw1bounce.png differ
diff --git a/assets/z_drw1fall1.png b/assets/z_drw1fall1.png
new file mode 100644
index 0000000..1f92241
Binary files /dev/null and b/assets/z_drw1fall1.png differ
diff --git a/assets/z_drw1fall2.png b/assets/z_drw1fall2.png
new file mode 100644
index 0000000..d973af2
Binary files /dev/null and b/assets/z_drw1fall2.png differ
diff --git a/assets/z_drw1fall3.png b/assets/z_drw1fall3.png
new file mode 100644
index 0000000..42f6ffe
Binary files /dev/null and b/assets/z_drw1fall3.png differ
diff --git a/assets/z_drw1rise.png b/assets/z_drw1rise.png
new file mode 100644
index 0000000..622589e
Binary files /dev/null and b/assets/z_drw1rise.png differ
diff --git a/assets/z_drw1s.png b/assets/z_drw1s.png
new file mode 100644
index 0000000..2be10ce
Binary files /dev/null and b/assets/z_drw1s.png differ
diff --git a/assets/z_drw1serve.png b/assets/z_drw1serve.png
new file mode 100644
index 0000000..4befcd9
Binary files /dev/null and b/assets/z_drw1serve.png differ
diff --git a/assets/z_drw1toss.png b/assets/z_drw1toss.png
new file mode 100644
index 0000000..a2e945c
Binary files /dev/null and b/assets/z_drw1toss.png differ
diff --git a/assets/z_drw2.png b/assets/z_drw2.png
new file mode 100644
index 0000000..e732f44
Binary files /dev/null and b/assets/z_drw2.png differ
diff --git a/assets/z_drw2b.png b/assets/z_drw2b.png
new file mode 100644
index 0000000..799ed44
Binary files /dev/null and b/assets/z_drw2b.png differ
diff --git a/assets/z_drw2bounce.png b/assets/z_drw2bounce.png
new file mode 100644
index 0000000..2f252f4
Binary files /dev/null and b/assets/z_drw2bounce.png differ
diff --git a/assets/z_drw2fall1.png b/assets/z_drw2fall1.png
new file mode 100644
index 0000000..ebceff3
Binary files /dev/null and b/assets/z_drw2fall1.png differ
diff --git a/assets/z_drw2fall2.png b/assets/z_drw2fall2.png
new file mode 100644
index 0000000..aff5933
Binary files /dev/null and b/assets/z_drw2fall2.png differ
diff --git a/assets/z_drw2fall3.png b/assets/z_drw2fall3.png
new file mode 100644
index 0000000..0c2ae73
Binary files /dev/null and b/assets/z_drw2fall3.png differ
diff --git a/assets/z_drw2rise.png b/assets/z_drw2rise.png
new file mode 100644
index 0000000..bd239aa
Binary files /dev/null and b/assets/z_drw2rise.png differ
diff --git a/assets/z_drw2s.png b/assets/z_drw2s.png
new file mode 100644
index 0000000..d44d9b6
Binary files /dev/null and b/assets/z_drw2s.png differ
diff --git a/assets/z_drw2serve.png b/assets/z_drw2serve.png
new file mode 100644
index 0000000..344b37b
Binary files /dev/null and b/assets/z_drw2serve.png differ
diff --git a/assets/z_drw2toss.png b/assets/z_drw2toss.png
new file mode 100644
index 0000000..580bc76
Binary files /dev/null and b/assets/z_drw2toss.png differ
diff --git a/assets/z_ma1.png b/assets/z_ma1.png
new file mode 100644
index 0000000..07ec7bf
Binary files /dev/null and b/assets/z_ma1.png differ
diff --git a/assets/z_ma2.png b/assets/z_ma2.png
new file mode 100644
index 0000000..1161094
Binary files /dev/null and b/assets/z_ma2.png differ
diff --git a/assets/z_ma3.png b/assets/z_ma3.png
new file mode 100644
index 0000000..cf6783b
Binary files /dev/null and b/assets/z_ma3.png differ
diff --git a/assets/z_ma4.png b/assets/z_ma4.png
new file mode 100644
index 0000000..424555c
Binary files /dev/null and b/assets/z_ma4.png differ
diff --git a/assets/z_mabounce.png b/assets/z_mabounce.png
new file mode 100644
index 0000000..3f5edba
Binary files /dev/null and b/assets/z_mabounce.png differ
diff --git a/assets/z_mafall1.png b/assets/z_mafall1.png
new file mode 100644
index 0000000..1a9d353
Binary files /dev/null and b/assets/z_mafall1.png differ
diff --git a/assets/z_mafall2.png b/assets/z_mafall2.png
new file mode 100644
index 0000000..ff361f1
Binary files /dev/null and b/assets/z_mafall2.png differ
diff --git a/assets/z_mafall3.png b/assets/z_mafall3.png
new file mode 100644
index 0000000..4271a61
Binary files /dev/null and b/assets/z_mafall3.png differ
diff --git a/assets/z_marise.png b/assets/z_marise.png
new file mode 100644
index 0000000..c123c20
Binary files /dev/null and b/assets/z_marise.png differ
diff --git a/assets/z_maserve.png b/assets/z_maserve.png
new file mode 100644
index 0000000..fc547ee
Binary files /dev/null and b/assets/z_maserve.png differ
diff --git a/assets/z_matoss.png b/assets/z_matoss.png
new file mode 100644
index 0000000..700ef48
Binary files /dev/null and b/assets/z_matoss.png differ
diff --git a/assets/z_maw1.png b/assets/z_maw1.png
new file mode 100644
index 0000000..bbb08a0
Binary files /dev/null and b/assets/z_maw1.png differ
diff --git a/assets/z_maw1b.png b/assets/z_maw1b.png
new file mode 100644
index 0000000..d2015d3
Binary files /dev/null and b/assets/z_maw1b.png differ
diff --git a/assets/z_maw1bounce.png b/assets/z_maw1bounce.png
new file mode 100644
index 0000000..8a31cf6
Binary files /dev/null and b/assets/z_maw1bounce.png differ
diff --git a/assets/z_maw1fall1.png b/assets/z_maw1fall1.png
new file mode 100644
index 0000000..9f0c0cf
Binary files /dev/null and b/assets/z_maw1fall1.png differ
diff --git a/assets/z_maw1fall2.png b/assets/z_maw1fall2.png
new file mode 100644
index 0000000..0f4ed0a
Binary files /dev/null and b/assets/z_maw1fall2.png differ
diff --git a/assets/z_maw1fall3.png b/assets/z_maw1fall3.png
new file mode 100644
index 0000000..a0e27af
Binary files /dev/null and b/assets/z_maw1fall3.png differ
diff --git a/assets/z_maw1rise.png b/assets/z_maw1rise.png
new file mode 100644
index 0000000..648de51
Binary files /dev/null and b/assets/z_maw1rise.png differ
diff --git a/assets/z_maw1s.png b/assets/z_maw1s.png
new file mode 100644
index 0000000..0fa47bc
Binary files /dev/null and b/assets/z_maw1s.png differ
diff --git a/assets/z_maw1serve.png b/assets/z_maw1serve.png
new file mode 100644
index 0000000..8aa3c42
Binary files /dev/null and b/assets/z_maw1serve.png differ
diff --git a/assets/z_maw1toss.png b/assets/z_maw1toss.png
new file mode 100644
index 0000000..095bf21
Binary files /dev/null and b/assets/z_maw1toss.png differ
diff --git a/assets/z_maw2.png b/assets/z_maw2.png
new file mode 100644
index 0000000..dbc2c4a
Binary files /dev/null and b/assets/z_maw2.png differ
diff --git a/assets/z_maw2b.png b/assets/z_maw2b.png
new file mode 100644
index 0000000..9f742a2
Binary files /dev/null and b/assets/z_maw2b.png differ
diff --git a/assets/z_maw2bounce.png b/assets/z_maw2bounce.png
new file mode 100644
index 0000000..fb22549
Binary files /dev/null and b/assets/z_maw2bounce.png differ
diff --git a/assets/z_maw2fall1.png b/assets/z_maw2fall1.png
new file mode 100644
index 0000000..3052c9d
Binary files /dev/null and b/assets/z_maw2fall1.png differ
diff --git a/assets/z_maw2fall2.png b/assets/z_maw2fall2.png
new file mode 100644
index 0000000..09c476c
Binary files /dev/null and b/assets/z_maw2fall2.png differ
diff --git a/assets/z_maw2fall3.png b/assets/z_maw2fall3.png
new file mode 100644
index 0000000..c9eecb2
Binary files /dev/null and b/assets/z_maw2fall3.png differ
diff --git a/assets/z_maw2rise.png b/assets/z_maw2rise.png
new file mode 100644
index 0000000..6446fdb
Binary files /dev/null and b/assets/z_maw2rise.png differ
diff --git a/assets/z_maw2s.png b/assets/z_maw2s.png
new file mode 100644
index 0000000..1d1884c
Binary files /dev/null and b/assets/z_maw2s.png differ
diff --git a/assets/z_maw2serve.png b/assets/z_maw2serve.png
new file mode 100644
index 0000000..e6563c7
Binary files /dev/null and b/assets/z_maw2serve.png differ
diff --git a/assets/z_maw2toss.png b/assets/z_maw2toss.png
new file mode 100644
index 0000000..bc887f8
Binary files /dev/null and b/assets/z_maw2toss.png differ
diff --git a/assets/z_ph1.png b/assets/z_ph1.png
new file mode 100644
index 0000000..fbcf54c
Binary files /dev/null and b/assets/z_ph1.png differ
diff --git a/assets/z_ph2.png b/assets/z_ph2.png
new file mode 100644
index 0000000..eeb2d1f
Binary files /dev/null and b/assets/z_ph2.png differ
diff --git a/assets/z_ph3.png b/assets/z_ph3.png
new file mode 100644
index 0000000..d4ec436
Binary files /dev/null and b/assets/z_ph3.png differ
diff --git a/assets/z_ph4.png b/assets/z_ph4.png
new file mode 100644
index 0000000..34a2b9a
Binary files /dev/null and b/assets/z_ph4.png differ
diff --git a/assets/z_phbounce.png b/assets/z_phbounce.png
new file mode 100644
index 0000000..fd5a500
Binary files /dev/null and b/assets/z_phbounce.png differ
diff --git a/assets/z_phfall1.png b/assets/z_phfall1.png
new file mode 100644
index 0000000..cbb7b1c
Binary files /dev/null and b/assets/z_phfall1.png differ
diff --git a/assets/z_phfall2.png b/assets/z_phfall2.png
new file mode 100644
index 0000000..d183f08
Binary files /dev/null and b/assets/z_phfall2.png differ
diff --git a/assets/z_phfall3.png b/assets/z_phfall3.png
new file mode 100644
index 0000000..39d3b9b
Binary files /dev/null and b/assets/z_phfall3.png differ
diff --git a/assets/z_phrise.png b/assets/z_phrise.png
new file mode 100644
index 0000000..8f06637
Binary files /dev/null and b/assets/z_phrise.png differ
diff --git a/assets/z_phserve.png b/assets/z_phserve.png
new file mode 100644
index 0000000..264086f
Binary files /dev/null and b/assets/z_phserve.png differ
diff --git a/assets/z_phtoss.png b/assets/z_phtoss.png
new file mode 100644
index 0000000..527e19a
Binary files /dev/null and b/assets/z_phtoss.png differ
diff --git a/assets/z_phw1.png b/assets/z_phw1.png
new file mode 100644
index 0000000..bea244b
Binary files /dev/null and b/assets/z_phw1.png differ
diff --git a/assets/z_phw1b.png b/assets/z_phw1b.png
new file mode 100644
index 0000000..078446c
Binary files /dev/null and b/assets/z_phw1b.png differ
diff --git a/assets/z_phw1bounce.png b/assets/z_phw1bounce.png
new file mode 100644
index 0000000..98a355d
Binary files /dev/null and b/assets/z_phw1bounce.png differ
diff --git a/assets/z_phw1fall1.png b/assets/z_phw1fall1.png
new file mode 100644
index 0000000..ec4d1a2
Binary files /dev/null and b/assets/z_phw1fall1.png differ
diff --git a/assets/z_phw1fall2.png b/assets/z_phw1fall2.png
new file mode 100644
index 0000000..037278d
Binary files /dev/null and b/assets/z_phw1fall2.png differ
diff --git a/assets/z_phw1fall3.png b/assets/z_phw1fall3.png
new file mode 100644
index 0000000..62483c9
Binary files /dev/null and b/assets/z_phw1fall3.png differ
diff --git a/assets/z_phw1rise.png b/assets/z_phw1rise.png
new file mode 100644
index 0000000..7af9b1d
Binary files /dev/null and b/assets/z_phw1rise.png differ
diff --git a/assets/z_phw1s.png b/assets/z_phw1s.png
new file mode 100644
index 0000000..bf92e52
Binary files /dev/null and b/assets/z_phw1s.png differ
diff --git a/assets/z_phw1serve.png b/assets/z_phw1serve.png
new file mode 100644
index 0000000..df91aa5
Binary files /dev/null and b/assets/z_phw1serve.png differ
diff --git a/assets/z_phw1toss.png b/assets/z_phw1toss.png
new file mode 100644
index 0000000..bf38079
Binary files /dev/null and b/assets/z_phw1toss.png differ
diff --git a/assets/z_phw2.png b/assets/z_phw2.png
new file mode 100644
index 0000000..2ad300b
Binary files /dev/null and b/assets/z_phw2.png differ
diff --git a/assets/z_phw2b.png b/assets/z_phw2b.png
new file mode 100644
index 0000000..eb05297
Binary files /dev/null and b/assets/z_phw2b.png differ
diff --git a/assets/z_phw2bounce.png b/assets/z_phw2bounce.png
new file mode 100644
index 0000000..c50196b
Binary files /dev/null and b/assets/z_phw2bounce.png differ
diff --git a/assets/z_phw2fall1.png b/assets/z_phw2fall1.png
new file mode 100644
index 0000000..5f5d73f
Binary files /dev/null and b/assets/z_phw2fall1.png differ
diff --git a/assets/z_phw2fall2.png b/assets/z_phw2fall2.png
new file mode 100644
index 0000000..1d1b5a1
Binary files /dev/null and b/assets/z_phw2fall2.png differ
diff --git a/assets/z_phw2fall3.png b/assets/z_phw2fall3.png
new file mode 100644
index 0000000..f46e8e3
Binary files /dev/null and b/assets/z_phw2fall3.png differ
diff --git a/assets/z_phw2rise.png b/assets/z_phw2rise.png
new file mode 100644
index 0000000..e88f318
Binary files /dev/null and b/assets/z_phw2rise.png differ
diff --git a/assets/z_phw2s.png b/assets/z_phw2s.png
new file mode 100644
index 0000000..7cd3a14
Binary files /dev/null and b/assets/z_phw2s.png differ
diff --git a/assets/z_phw2serve.png b/assets/z_phw2serve.png
new file mode 100644
index 0000000..aee58d9
Binary files /dev/null and b/assets/z_phw2serve.png differ
diff --git a/assets/z_phw2toss.png b/assets/z_phw2toss.png
new file mode 100644
index 0000000..dd64411
Binary files /dev/null and b/assets/z_phw2toss.png differ
diff --git a/index.html b/index.html
index fa62d0b..ca3aae1 100644
--- a/index.html
+++ b/index.html
@@ -431,6 +431,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one') {
-
+