Make the pink weapons throw themselves, and let the big bodies soak

Oliver's playtest of the barrel weapons. Four notes, all four real defects.

"The bigger guys were way too easy to kill at the beginning." A bug, and an old
one. The ball-vs-body chain handled boss, g/m, s, f and a/b, and everything NOT
named in it fell through to "splat-quality kills outright" -- so the STEWARD has
died to one serve since the day he shipped with stewardHp 5 and a comment calling
it a brute's worth of hp, and the three new bodies inherited that the moment they
existed. Pellets and melee always read hp; only the ball skipped it. One generic
hpMax > 1 branch now, and measured after: shambler 2, steward 5, brute 5, ball
boy 3, bouncer 5, roller man 7 -- each exactly its hp.

"I have seen all of them by round 10." The new three move 3/8/15 -> 5/12/20. The
original four keep their gates: that curve was already tuned through game 12.

"The laser fired only when I tapped, that was confusing." The whole tap-per-round
kind is gone. A barrel weapon is now either the normal ball gesture made
spectacular or something that fires itself -- nothing waits for a tap.
 - laser is a serve, and the RAY is the weapon: no ball anywhere in it. The
   preview IS the wedge, it leaves the RACKET rather than lying on the grass, the
   release erases the plane along its own path behind a bright front, and the
   edges are hairlines instead of the heaviest lines on the court.
 - beacon and rocket are LOBBED bursts -- `arc` turns a flat pellet into a thrown
   one, solved onto the nearest body ahead, and landing is itself a hit so a
   rocket that misses still goes off where it lands. The beacon changes colour
   every ball and drags that colour behind it.
 - flamer got "way more pronounced": 30 rounds/s, a ~10 m cone, embers.

"I got the laser almost every time." A flat 1-in-4 over four items does not feel
uniform. BARREL_WEAPONS carries weight and a `from` gate now, never repeats twice
running, and the beacon is what you meet first. Measured: laser 16-28%, rocket
unlocked at game 12 so it is genuinely a late find.

And the barrel keeps its pink halo -- that was always procedural, painted by
drawBarrel, and never went near the chroma key. Three rings and a pool on the
lawn now, because one flat disc read as a smudge.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5 committed 2026-08-03 14:13:05 +02:00
1 parent 25f915f236
commit 282f5145a9
8 files changed
+363 -98

No files matched your search

+56
View File
@@ -460,6 +460,62 @@ Known generator quirks, all still true:
- **Colour-match any regenerated frame** of an existing pair before shipping: fit a per-channel
linear map onto the original's mean and sd, then verify with a mean-difference number.
## Session log: Oliver's playtest of the barrel weapons (2026-08-03, same day)
Everything below is a fix to what shipped that morning. All four notes were real defects, which is
now seven playtests in a row where "this feels odd" was a bug and not taste.
**"The bigger guys were way too easy to kill at the beginning."** It was a bug, and an old one. The
ball-vs-body chain handled boss, `g`/`m`, `s`, `f`, `a`/`b` — and **everything not named in it fell
through to "splat-quality kills outright"**. So the STEWARD has been dying to one serve since the day
he shipped with `stewardHp: 5` and a comment calling it "a brute's worth of hp", and the ball boy,
bouncer and roller man inherited that the moment they existed. Pellets and melee always read `hp`;
only the BALL skipped it. It is one generic `hpMax > 1` branch now — hp is the only thing that says
how many hits a body takes — and measured after: shambler 2, steward 5, brute 5, ball boy 3,
bouncer 5, roller man 7, each exactly its hp. **Anything that adds a body type must NOT need a new
branch here; if you find yourself writing one, that is the bug coming back.**
**"I have seen all of them by round 10."** The new three moved 3/8/15 -> **5/12/20**. The original
four keep their gates exactly: the curve through ~game 12 was already tuned and the calibration rule
says not to touch it. Their hp came down with the fix landing (9 was a fine number while nobody
felt it and a long grind once they did).
**"The laser fired only when I tapped, that was confusing."** The whole `kind: 'shot'` idea is gone.
A barrel weapon is now exactly one of two things, and this is the rule to hold: **either it is the
normal ball gesture made spectacular, or it fires itself for a while.** Nothing waits for a tap.
- **laser** is a `serve` now: pull, aim, release. **The RAY is the weapon**, so there is no ball
anywhere in it — the preview is the WEDGE itself (`drawBeamWedge` at low alpha, not a ballistic
band with a target ring), the tap path has its own `tryLaser` so it never tosses a ball it is not
going to hit, and `fireBeam` kills everything inside the cone (`beamW0` 0.35 m at the racket to
`beamW1` 4.2 m at the far end). Measured: 8 of 11 bodies in one release.
Three things Oliver corrected on the second look, all of them "it must read as light he fired":
**it leaves the RACKET** (`dragContact()`, y 2.2, settling onto the court as it goes out — drawn
flat from his feet it read as a shape lying on the grass); **the release ERASES it along the path**
(the plane is whole at the flash and is wiped away from the racket outward behind a bright front,
so the shot reads as energy travelling down the lane rather than a decal fading where it lay); and
**the edges are hairlines** — at 2.5 px they were heavier than anything else on the court and read
as a drawn outline instead of as light.
*Gotcha for testing:* `TUNE.pullMin` is 18 **PIXELS**, and `aim.fy` is NEGATIVE for the down-pull.
A synthetic `{fx, fy, mag: 0.8}` is silently below the threshold and `previewServe` returns null,
which looks exactly like the preview being broken.
- **beacon** and **rocket** are `burst` and **LOBBED** — `arc` on the WEAPONS row turns a flat pellet
into a thrown one (solved onto the nearest body ahead), and landing is itself a hit, so a rocket
that misses still goes off where it lands. The beacon changes colour every ball and drags that
colour behind it.
- **flamer** got "way more pronounced": 30 rounds/s, a ~10 m cone, fat glowing rounds with embers.
**The pale blue washed out to grey over the lawn** — a beam colour has to be saturated (`#3f74ff`),
which is the same lesson as the barrel's halo, from the opposite direction.
**"I got the laser almost every time."** A flat 1-in-4 over four items does not feel uniform. It is
weighted and gated now (`BARREL_WEAPONS` carries `weight` and `from`), never repeats twice running,
and the beacon is what you meet first. Measured: laser 16-28% depending on the game, rocket unlocked
at game 12 so it is genuinely a late find.
**The barrel's pink is procedural and can be as pink as it likes** — Oliver asked whether it could
still have a pink halo given the key eats magenta out of PNGs, and yes: `drawBarrel` paints it at
draw time and never goes near the keyer. Three rings plus a pool on the lawn now, because one flat
disc read as a smudge.
## Session log: a rack you fill yourself, and barrels that fill it (2026-08-03)
The second half of the same ask. **The rack no longer has fixed slots.** It used to be five hardcoded