0.2.6-dev: PR #416 by Cromemadnd — every landing of a round start is heard: prep landing sounds take a voice of their own pool (LAND_VOICES 3, the oldest fading out over 30 ms) instead of being dropped by the battle limiter, which let only the first two of a chain sound since 192 of 210 operators share the 1.41 s b_char_set (Grok's review); per-piece cooldown, SFX volume and mute kept, the battle sounds' limiting unchanged, the generic files fetched ahead when a match view comes up; DESIGN §31.8; golden: unchanged
This commit is contained in:
1 parent
a3da5c2775
commit
0ceb6641ec
7 files changed
+379
-64
No files matched your search
+20
-8
@@ -137,8 +137,16 @@ has loaded) was fixed in 0.2.3 (§28.22: the late model continues Start at the e
|
||||
|
||||
- `UnitView.land()` (render/units.js) plays the piece's Start clip again through `onDeploy` (its fade-in and the late-model
|
||||
continuation) and asks `audio.deployCue` for the landing sound: the piece's battle deploy sound (`deploySfxUrl`: its own
|
||||
ON_UNIT_BORN file at its bank gain, else b_char_set / b_char_tokenset at 0.5) through the SFX channel's volume and mute
|
||||
and the battle limiter (≤ 2 copies of one sound, a 160 ms cooldown per piece). One landing makes one sound: a piece
|
||||
ON_UNIT_BORN file at its bank gain, else b_char_set / b_char_tokenset at 0.5) through the SFX channel's volume and mute,
|
||||
in landing voices of their own (`AudioManager._playLanding`: `LAND_VOICES` 3 at once, a 160 ms cooldown per piece; the
|
||||
battle limiter is not used). A landing over the cap takes the oldest landing's voice, whose copy fades out over 30 ms,
|
||||
instead of being dropped: 192 of the 210 operators land with the same 1.41 s b_char_set and the round start lands one
|
||||
every 50 ms, so the battle rule (≤ 2 copies of a file, the rest dropped) left all but the first two landings of a chain
|
||||
silent (Grok's review of this port). With 3 voices every copy rings 150 ms before it is taken over — b_char_set's
|
||||
attack, its loudest part, lies in its first 100 ms, and b_char_tokenset has 95 % of its energy in 150 ms — while the
|
||||
summed level stays one copy above the battle's two. The field view asks for the two generic files when a match screen
|
||||
comes up (`warmLandings`; kept until the first gesture or until the SFX are audible), so a round start's first landings
|
||||
never wait for a download. One landing makes one sound: a piece
|
||||
whose Start still plays keeps it and sounds nothing more, whether the clip runs on its model, is owed to a model still
|
||||
loading, or was cued less than a clip length ago. That covers a purchase followed by a move, and the round start's replay
|
||||
reaching a piece just put down. Only an idle prep piece lands. A battle unit never does: the sim's `deploy` events keep
|
||||
@@ -167,16 +175,20 @@ has loaded) was fixed in 0.2.3 (§28.22: the late model continues Start at the e
|
||||
which fired on every confirm, a turn in place included. The deploy flash (`fx.deploy`) is unchanged.
|
||||
|
||||
**[ASSUMED]** The purchase and board triggers (the PR author's account). The 50 ms gap (`DEPLOY_REPLAY_MS`, the PR's
|
||||
value; no source gives the official one). Summon pieces taking part in the replay after the operators, as in the battle's
|
||||
value; no source gives the official one). The 3 landing voices taken over oldest first (the official born bank allows any
|
||||
number of copies; three keep every landing's attack within a bounded level). Summon pieces taking part in the replay after the operators, as in the battle's
|
||||
deployment. The clip length a landing counts as playing when the model's own is unknown (`START_CLIP_FALLBACK` 1 s; the
|
||||
operators' Start clips run 0.77–1.2 s). A page reloaded during 回合开始 replays once in the new page.
|
||||
|
||||
**Tests.** `test/render/deploy-replay.test.js` (the clip, one sound, a second trigger, a late model, the refusals, a hidden
|
||||
tab; the app.js wiring), `test/ui/deploy-replay.test.js` (`deployOrder`, `roundStartReplay`, the screen wiring; `deployCue`:
|
||||
the files, the limiter keys, volume and mute), `test/render/playtest6-promote.test.js` (the elite's cue), and the browser
|
||||
check `test/ui/deploy-replay.e2e.test.js` (`SP_E2E=1`, mock harness: SETTLE → 回合开始 replays the board in deployment order
|
||||
about 50 ms apart with one sound each, once per round and again the next round; in the 休整期 a purchase lands, a move
|
||||
within its Start sounds nothing more, a later move lands, a turn in place does not). Golden: unchanged (client only).
|
||||
tab; the app.js wiring), `test/ui/deploy-replay.test.js` (`deployOrder`, `roundStartReplay`, the screen wiring; `deployCue`
|
||||
on the real AudioManager, SfxLimiter and buffer cache with a fake Web Audio context: 8 b_char_set landings 50 ms apart start
|
||||
8 times, at most 3 at once, the oldest taken over each time; a 36-piece board within the cap; the per-piece cooldown; a
|
||||
landing taken over while it downloads never starts; the warm-up; volume and mute), `test/render/playtest6-promote.test.js`
|
||||
(the elite's cue), and the browser check `test/ui/deploy-replay.e2e.test.js` (`SP_E2E=1`, mock harness: SETTLE → 回合开始
|
||||
replays the board in deployment order about 50 ms apart with one sound each that really starts in the page's audio, at
|
||||
most 3 landing voices at once, once per round and again the next round; in the 休整期 a purchase lands, a move within its
|
||||
Start sounds nothing more, a later move lands, a turn in place does not). Golden: unchanged (client only).
|
||||
|
||||
### 31.9 Optional ammo count (PR #552)
|
||||
|
||||
|
||||
Reference in new issue
Block a user