feedback5: merge R19C — GitHub #235: the official 「作战结束」 result box (全员无伤! / 生命值减少 −N) and the three battle-over sounds at settlement, PR #112 by @Convey123 ported onto the 0.2.0 layout (test/ui/gameLogic.test.js: both streams' tests kept); golden unchanged

This commit is contained in:
sganggs committed 2026-10-07 11:31:55 +08:00
commit 93a45f733f
21 files changed
+705 -14

No files matched your search

+33
View File
@@ -1902,3 +1902,36 @@ are.
- Golden: unchanged (client only). Tests: `test/ui/feedback5-loadout-data-missing.test.js` (4, all fail on the parent:
the tab's files, the refusals, the screen's guard order, the message in Chinese and English); loadout, loadout-stats,
module-trait, moduleIcons, diy-ui and standin-ui tests pass unchanged.
#### 25.22.4 「提问:联防结算播报没了」 (GitHub #235; PR #112 by @Convey123, approved, never merged): the official 「作战结束」 box and the three BATTLEOVER sounds at settlement — `match/settle.js`, `match/views.js`, `ui/gameLogic/phases.js`, `ui/components.js ResultDialog`, `screens/game.js`
- **Seen**: 0.1.4 and 0.2.0 have no result box and never play the battle-over sounds. A co-op 联防 round run to SETTLE
through the match harness: the SETTLE m.public carries nothing about the 联防; `public/js` names none of the three
sounds, though `data/assets.json` `audio.sfx.ui` lists all three and they are on disk (so the full zip, which packs
every file the manifest lists, already carries them). PR #112 targeted 0.1.4's layout; the owner approved it on
2026-10-05 once the remake's own 「联防成功 / 联防失败:还有 N 只突破防线」 line went (the author removed it, then made
「全员无伤!」 true-only).
- **Official**: research 09 §3.1 "Round result dialog": 「作战结束」 + 「全员无伤!」, or 「生命值减少」 and the LP lost; the
client's audio data names `ON_ACT1AUTOCHESS_BATTLEOVER_REDUCE / _NOREDUCE / _NORMAL`, not when each plays. No EN client
text for the three lines in `data/i18n/en.json`: plain translations (Battle over — the existing msgid —, All unharmed!,
LP reduced by {n}).
- **Now** (ported by hand onto the 0.2.0 modules, every line reviewed): `settle()` keeps `uniteResultView` — `through`
(the leakers' enemies that still got through), helpers, leakers and `losses` (every alive player's own charge, the very
`loss` deducted) — which the SETTLE m.public carries as `uniteResult` (cleared at the round start; design/network.md
§8.2). At SETTLE (the moment is [ASSUMED] — the sources do not time the dialog, and a leaker's number exists only
after the 联防) the screen pops `ResultDialog` for 2.8 s (inside SETTLE's 3 s; click-through, under the phase banner):
「作战结束」 and the viewer's own line — after a 联防 from `losses`: charged → 「生命值减少 −N」 (red); nothing got through
→ 「全员无伤!」 (mint, true for everyone); the 联防 leaked but the viewer paid nothing (a helper, a spared leaker) → the
title alone (orange); without a 联防, the own battle's `min(cap, leaks)` as kept while it ran (`roundLossRef`, the
live LP's own inputs). Sound: Reduce when charged, NoReduce when a 联防 ran and the viewer paid 0, Normal otherwise
[ASSUMED mapping, PR #112's; the owner called the three right]. No ticker line for the outcome.
- **Who sees it**: solo — every normal round (no 联防 there) [ASSUMED: the same dialog]; bots — nothing to show, listed
in `losses`; a spectator seat or a player eliminated earlier — no box and no sound in any round, where PR #112's last
commit gave them the title alone after a 联防 although its own rule gave them nothing in an ordinary round (and no sound
either) [ASSUMED]; 最终攻势 / 隐秘核心 — no SETTLE phase (`_finishFinal` → the result screen or the Hidden Core round)
and the merged team LP has no per-player loss, so no box [ASSUMED]; a reconnect landing on SETTLE — the 联防 box (the
server's figure) without sound, nothing in an ordinary round.
- Left out of the PR: ResultDialog's unused `icon` prop and gold / ice tones. Golden: unchanged (283 scenarios). Tests:
`test/ui/gameLogic.test.js` (5 new: sounds, loss, words in zh and en, 联防 cases, no-联防 box; the file does not load on
the parent), `test/match/playtest6-matchflow.test.js` #235 (2; the 联防 one fails on the parent: losses = the LP
settled, no result ticker, gone in the next phase), SP_E2E `test/ui/resultbox.e2e.test.js` (3, mock variants
`unite[,through][,helper|,dead]`). Docs: PLAYING.md §1 / §5, design/network.md, design/client.md, design/match.md.