Give the machine, fire, gun and boss their missing sounds

All four synthesized in audio.js like every other weapon: a squeaking
castor, a court-wide crackle clock plus a throttled catch, a real gun
crack, and one shared boss voice (stomp per stride, wind-up breath,
bark, pain, death roar) pitched by body size. Closes OPEN 13 pending
the phone verdict. v355.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5.5 committed 2026-09-23 09:16:27 +02:00
1 parent d05b49909e
commit 74aa209753
5 files changed
+248 -14

No files matched your search

+28 -1
View File
@@ -5066,6 +5066,31 @@ Release cache version: `main.js?v=353`. Pre-release validation: 142 game tests a
menu browser checks pass. Deploy staging first, verify the served release, then promote the same
commit to production. Staging URL: `https://splatter-tennis-staging.wuwi.one`.
## Session log: THE FOUR MISSING SOUNDS (2026-09-23, v355)
Oliver: *"mach die sounds, schlag mir quellen vor"* (OPEN 13). Source decision: **synthesize all four
in `audio.js`**, the way every weapon already is — no sample, no licence, no download, and each one
pitches off the existing `size` = bodySize convention. Samples stay the fallback per sound if one
reads flat on the phone (candidates offered: Kenney.nl CC0 packs, Freesound filtered to CC0, the
Sonniss GDC bundle, or recording a real trolley castor on the iPhone for the squeak).
- **Machine castor** `squeak()` — stick-slip: two or three FM-wobbled triangle chirps, 60% of the
existing 0.4 s grind ticks while it rolls. The approach cue; the click stays its fire tell.
- **Fire** — `crackle()` (tiny highpassed pops over a hiss) on ONE court clock in `updateZombies`,
rate and level ~sqrt(bodies burning), so a lit wave is denser, never N loops summed. `whump()` is
the body catching, fired from `ignite()` and throttled to once per 0.25 s for an epidemic.
- **Gun** `gunshot()` — crack + punch + action, every part < 60 ms, every other round as before (it
replaced the racket pock). The dead `w.ignite ? 300` branch went with it (the flamer has its own case).
- **Boss** — ONE shared voice for all ten designs, pitched by body (the splat() rule). `stomp()` per
drawn stride (off `zb.dist`/`bruteStride`, so it lands with the foot; crunch carries it on phone
speakers, the sub is for headphones); `growl()` rising over the whole wind-up (the boss's tell,
replacing the click it shared with the machine), a bark on release, a throttled (0.9 s) pain growl
from `wound()`, and a long falling roar in `bossDeath`.
All seven log to `sfxTest`; one test pins every event, one whump per epidemic, and the crackle
clock staying court-wide. Offline-rendered peaks sit between pock and splat (nothing clips).
147 tests, default seed plus 1, 42, 1234, 20260907. **Needs Oliver's ear on the phone.**
## Session log: VS A FRIEND — the friend's racket makes a noise, and the duel has a rematch (2026-09-11, v354)
Oliver, two finds off a two-phone session: *"im vs. a friend mode wird der ballsound des gegners
@@ -5157,7 +5182,9 @@ Nothing here is broken; these are known gaps and unverified risks.
that catches your shots. Recorded so the ideas are not lost, not as a to-do.
12. **`ump_no_deal` does not exist.** Oliver asked for its removal; `ump_no_appeal` was removed as the
closest match. Worth one confirmation that no other line is still unwanted.
13. **Four sounds are missing and need RESEARCH first** (find/choose the source before implementing —
13. **~~Four sounds are missing~~ BUILT 2026-09-23, SYNTHESIZED (v355) — see the session log; the ear
verdict is Oliver's phone.** Original note kept for the reasoning:
**Four sounds are missing and need RESEARCH first** (find/choose the source before implementing —
every existing sfx is either synthesised in `audio.js` or a wav in `assets/audio/`):
- the **ball machine** while it moves — a squeaking wheel/castor, so the furniture announces
itself. It already telegraphs its shot (`machWind` 0.9 s); this is the *approach* cue.