Burn them to ashes, and give the burst back its bar

A burnt body does not burst. Fire kills by cooking, so there is nothing left to
spray: a body that dies alight -- flamethrower or flame ball -- leaves dark grey
ash instead of blood. Same decal, mound and particles, recoloured and smaller,
with a puff of smoke and a dull thud instead of the wet splat and the headshot
crack. The flame BALL has to mark itself, because that kill lands before the body
ever catches.

The flamethrower is a lighter, not a gun: no impact damage at all, it pierces,
and it only IGNITES -- the burn does the killing, so a lit crowd walks a few
steps and goes down together. 26 m of reach against a 22.8 m court, so it
crosses to the far baseline. The guard matters: hp -= 0 fell straight through to
killZombie, which made the cone delete the crowd on contact.

Every burst weapon had no progress bar and the cause was the spend. Arming spent
the tin at once, so the rack entry vanished -- and the bar draws on the slot
holding G.gunId, which no longer existed. The tin is spent when the burst ENDS
now, so icon, count and bar are all there while it runs, and every path that
ends a burst routes through endBurst or it would hand out free ammo.

Auto-fire movement again: the previous fix read moving as mx||mz||assist, and
finger-steering zeroes mx/mz, so sliding left and right still counted as standing
still. And the oval on his back was the mg racket -- its head projected almost
exactly onto the sprite; offset by facing it reads as held out beside him.

The laser's far edge is pinned in SCREEN space to the middle of the ad strip
rather than running out to beamLen on the ground, which landed on their top line.
beamLen goes back to being the kill range instead of a number tuned to one camera.

Beacon thumps, rocket swooshes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5 committed 2026-08-03 15:05:56 +02:00
1 parent 91053b4c35
commit 6e88fd5bb9
6 files changed
+128 -30

No files matched your search

+39
View File
@@ -358,6 +358,45 @@ trail only says where it has been.
`jet`/`trailR` were added to the WEAPONS rows without being added to that list — so the rocket flew
with no plume at all and nothing errored. **Any new pellet field has to be added in both places.**
## Session log: fire, ash, and the third laser pass (2026-08-03)
**A BURNT BODY DOES NOT BURST.** Fire kills by cooking, so there is nothing left to spray: a body
that dies while alight — flamethrower or flame ball — leaves **dark grey ash** instead of blood. Same
decal, same mound, same particles, all recoloured and a little smaller, plus a puff of smoke and a
dull thud instead of the wet splat and the headshot crack. `killZombie` reads `zb.burnT > 0 ||
zb.ashes`; **the flame BALL has to set `zb.ashes` itself**, because that kill happens before the body
ever catches. `gore`/`piles`/`parts` all carry an `ash` flag and render off `ASH_COLS`.
**The flamethrower is a lighter, not a gun.** `dmg: 0, hp: 0, pierce: true` — it does NO impact
damage at all and only IGNITES; the burn does the killing, so a lit crowd walks a few steps and goes
down together. Reach `life` 1.15 s x `speed` 23 = **26 m against a 22.8 m court**, so it crosses to
the far baseline. Watch the guard in the pellet loop: `hp -= 0` fell straight through to
`killZombie`, which made the flame cone delete the crowd on contact — a machine gun that happens to
be orange.
**Every burst weapon had no progress bar, and the cause was the spend.** Arming spent the tin
immediately, so the rack entry vanished — and the countdown bar draws on the slot holding `G.gunId`,
which no longer existed. The tin is spent when the burst ENDS now (`endBurst`), so the icon, the
count and the bar are all there while it runs. **Every path that ends a burst must route through
`endBurst`** — the duel, the boss fight and death all force `G.mgT = 0` on their own, and any one of
them missed would hand out free ammo. The soak asserts `gunId` is never set with `mgT` at zero.
**Auto-fire movement, again.** The previous fix set the pose from `moving`, but `moving` was
`mx || mz || assist`, and finger-steering zeroes `mx`/`mz` — so a player sliding left and right under
auto-fire still counted as standing still and never ran. `mgMoving` is in that expression now.
**The oval on his back was the mg racket.** `drawMgRacket` put its head at `(P.x, 0.95, P.z - 1.35)`,
which at this camera projects almost exactly onto the player sprite. Offset by `P.facing` it reads as
a racket held out beside him.
**The laser's far edge is pinned in SCREEN space.** Running out to `beamLen` on the ground landed it
on the ads' TOP line; it should die at their middle. `c3.y = c4.y = proj(0,0,-6).y - AD_H / 2` — the
x's keep their perspective, the y is pinned. That holds in both orientations and leaves `beamLen`
free to be the KILL range instead of a number tuned to one camera.
**Weapon sounds** are a `sfx` field on the WEAPONS row: `thump` (beacon, `boom`), `swoosh` (rocket,
`whoosh`), otherwise the gun's every-other-round tick.
## TEST MODE — triple-tap the scoreboard
A sandbox for trying new content without playing twenty games to reach it. Three taps on the