Files
SoundGame/docs/design/22-bridge.md
T
xsl cd4c5ec65a docs(new8): 批次 4 策划落地(21-keeper/22-bridge)——8 款设计文档全部齐备
- keeper:时空双线(风暴/老唱片签名+锚句)、回忆插叙固定时序、trust×truth 双标量、148 句
- bridge:四象限系统状态音(2.0s±50ms 逐毫秒可断言)、告警仲裁 R1-R8+双危机 7 场景穷举、危机事件卡、忠诚账本、154 句
- 13 号文档 §23 六款断言指针;README new8 索引补齐;章程进度账 8 款设计 ☑(批次 2 资产/开发 ▶ 进行中)
2026-09-10 01:02:49 +08:00

601 lines
53 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 22 · 《星环舰长》完整设计(bridge / Star Ring Captain)
> **给开发者的实现要点摘要**
> 1. 舰桥指挥 RPG:核心动词=**听声辨型后下令**。四象限系统(引擎=舰尾低频/护盾=舰首中高/扫描=左舷 pan L/武器=右舷 pan R)各有专属 SYN 状态音(正常/受损/离线);危机事件(陨石群/海盗/求救/辐射云)以**预 pan 签名音+固定模板方位句**从四象限之一来袭,玩家在时限窗内**左右滑听选项+单击下令**(规避/迎战/硬闯/驰援/忽略 五个通用动词,选项句自带系统需求)。一局=4 巡航段(段=航线选择→巡航→危机→靠港整备),15-22 分钟。
> 2. **常态静默/按需巡检的黄金折中**(本作最大认知负荷风险):常态**不播**正常系统底噪(BGM 承担氛围),只有受损系统按仲裁规则发告警脉冲;正常系统状态由**上滑巡检链**按需播(四系统 2.0s 状态音固定顺序+固定间隔——SYN 合成,节奏逐毫秒可断言);离线=死寂+共用平线签名。
> 3. **告警优先级仲裁+叠爆抑制**(space 警报叠爆/R1 P4 被轰炸一分钟劝退教训):显式规则表 R1-R8——一次只响一条系统告警、轮转公平、600ms 叠爆去重、语音让路、危机窗静默无关告警、双危机 FIFO 排队、修复即止、菜单/结算全静默;§3.5 穷举 7 种并发场景(含双危机)。
> 4. 手势宪法三件套全状态保留(上滑巡检/下滑菜单/双击重听);唯一豁免 E1=CRUISE 单击=重播最近告警(escape「检查」先例)。下令绑单击(非即时,12-20s 窗口无碍);无 immediateTap;长按非玩法输入,**不开 E3 快进豁免**(登记)。
> 5. 账目真实三本账:忠诚(事件-忠诚影响表逐行差分,档位句=ledger band)、经济(每段采集/修理/奖励逐笔,档位句跨档才播)、评级(score 公式+一条完整巡逻剧本逐事件验算 §8.4-8.6)。REPORT 结算链 800ms 手势死窗+链锁(dungeon H1/detective VERDICT/teahouse CLOSE 同款)。
> 6. 随机性全走 seed PRNG(mulberry32,`opts.seed` 注入):危机类型序(首局固定升难度序,之后洗牌+约束 S1≠辐射)、每场方位(方位还决定受殃系统)、求救陷阱 25%(首局恒无)、磨损系统、S4 双危机余波 40%(首局无)。同 seed 深相等。
> 7. 台词表 [22-bridge-voice-ids.md](22-bridge-voice-ids.md):旁白 142 ×2 性别 + 船员 NPC 平铺 12(3 音色,与两侧旁白零重叠)= **154 句 ≤160 上限**;操作提示句键盘变体 `_k` 集中登记(V 组 10,`gesture.inputMode()` 选播)。全句 ≤40 字(实测 ≤38)。
> 8. 规模对标 detective/teahouse:单文件 game.js 预计 1000-1200 行;bgm 3 + sfx 30(SA3 任务 4 个,pan 派生 8 文件)+ voice 296 条(×2 格式=592 文件)。断言清单住本文档 §12(13 号文档 §20-22 先例登记)。
---
## 1. 概述
- **一句话**:你是巡逻舰星环号的舰长,坐在舰桥里用耳朵指挥全舰——四个系统各守一方,危机从哪个方位来、是什么东西,全凭声音判断,然后下令。
- **题材**:舰桥指挥。核心命题「危机是从哪个方向、以什么声音来的」——纯音频天然适合:方位=预 pan 立体声+固定模板句,系统状态=可断言的状态音,指挥=听选项后下令;视觉游戏的仪表盘在这里是一套「异常才出声+按需巡检」的听觉状态层。
- **玩法定位**(方法论 §4.1 无现成行,状态层重点自定):**状态即音色**(四系统三态音+仲裁纪律,A1/A3 的本作落地)+ **方位降维 ≤4**(左舷/右舷/舰首/舰尾,文献结论恰为上限)+ **抉择窗口标记**(检测链→决策窗→下令)+ **账目真实**(忠诚/经济/评级三本账播报值=运行值)。
- **单局=一次巡逻**:4 个巡航段,每段=航线选择→巡航(采集+磨损+告警管理)→危机→靠港整备,约 15-22 分钟(首局含教学 17-22);章程 15-25 分钟达标。巡逻结束结算评级(S-D),功勋入**跨局舰船成长**(星港改装 6 项,roguelite 轻元进度)。
- **失败态**:舰体归零=弃舰撤离(死亡归因链 ≤15s 必答三问,dungeon 先例);功勋按已完成段数折算,meta 不清档。
- **与现有 12 游戏的关系**:方位声学承接 space(pan+频率双轴,本作进阶为系统/危机统一方位语言);状态档位链承接 dungeon(上滑多段链);双轨看门狗承接 dungeon E0-1/E0-2;结算死窗承接 dungeon H1/detective VERDICT;NPC 群像+签名 earcon 承接 detective/teahouse;元进度承接 dungeon 遗产;「异常才出声」承接 rpg 血量档降档才播裁定。
- **本作三大特有风险**(均在 §3 显式预防):① 多系统并发告警听觉过载;② 状态音常驻的认知负荷;③ 忠诚度账目失真。
## 2. 手势映射与豁免登记
### 2.1 标题(TITLE)与星港(PORT,TITLE 子相位)
| 手势 | TITLE | PORT(右滑进入) |
|---|---|---|
| 单击 | 继续(有档,播 sys_continue_ask 后)/ 新巡逻(无档) | 执行当前项(购买/返回) |
| 双击 | 重听 continue_ask | 重听当前项句 |
| 左滑 | error | 上一项(循环) |
| 右滑 | 进星港(功勋兑换) | 下一项(循环) |
| 上滑 | 舰船概况链(功勋档→已改装项逐项播其 upg_* 效果句→未改装则仅功勋档) | 同 TITLE |
| 下滑 | 菜单(§2.6) | 菜单 |
| 长按/松开 | error | error |
有档单击继续 → 恢复 run + 中断复述链(§11)。PORT 列表=未购改装项(armor2 仅 armor1 已购后出现)+返回(port_back);购买 → upg_buy / port_poor(真话)。
### 2.2 巡航(CRUISE;含 ROUTE 航线选择子相位)
| 手势 | ROUTE(选航线) | CRUISE 空闲 | CRUISE 巡检链播中 |
|---|---|---|---|
| 左滑/右滑 | 切换航线选项(播 opt_route_*) | error 震+`gd_invalid`(onceKey) | 静默忽略(保护链播) |
| 单击 | 选定航线 → 进巡航主体 | **重播最近告警**(60s 内的告警脉冲/事件签名;无 → cruise_ping 柔和问询音,E1) | **跳段**(跳过当前巡检段进下一段,rpg 探索跳句先例) |
| 双击 | 重听当前选项句 | 重听最近一句语音(宪法) | 重听当前巡检段 |
| 上滑 | 巡检链 | 巡检链(§3.3) | 重播全链 |
| 下滑 | 菜单 | 菜单 | 菜单(打开即停链) |
| 长按/松开 | error | 快进(语音在播时,引擎默认)/error | 快进/恢复常速 |
ROUTE 无倒计时:45s 无选择自动走稳妥线(不卡巡航);看门狗 12s/30s(gd_decide/null)。
### 2.3 危机(CRISIS:DETECT 检测 → DECIDE 决策两子相位)
| 手势 | DETECT(签名+类型句+方位句,~8s) | DECIDE(决策窗,倒计时) |
|---|---|---|
| 左滑/右滑 | 静默忽略(纯聆听保护,simon/teahouse 先例) | 切换选项(播 opt_*;循环) |
| 单击 | 静默忽略 | **下令**(选定当前预览选项;窗内非即时,300ms tap 延迟无碍) |
| 双击 | 静默忽略 | 重听当前选项句(宪法语义保留) |
| 上滑 | 静默忽略 | **巡检简链**(tones→舰体档→最紧要异常,§3.3;决策窗不宜全链) |
| 下滑 | 菜单(**冻结检测链与全部计时**) | 菜单(**冻结倒计时+告警**;关闭→重播当前选项句后继续走表) |
| 长按/松开 | 快进(引擎默认) | error 震(选择语境不作输入,detective CONFRONT 先例) |
- 检测链:签名音(2.5s,预 pan/尾音)→ evt_*(类型句)→ dir_*(方位句)→ cr_decide → 自动预览第一选项 → 倒计时**从 cr_decide 落声起算**(信息先于计时,公平)。检测链顶断在播的巡检链(R4)。
- 倒计时尾段 3s:tick_fast 每 0.5s + warning 震每 1s;到点 → cr_timeout + 该类型默认结局(§4.2 矩阵,超时=真话归因)。
- 下令演出:pa_chime(全舰广播音)→ 选项执行音(eva_ok/wpn_fire/shield_bear/warp)→ 判定链(系统态不满足先播 sys_*_off 真话)→ 结果句+账目句 → 自动回 CRUISE 或段末。
### 2.4 靠港整备(DOCK)
非模态列表(rhythm 选曲范式:左右滑+单击确认):
| 手势 | DOCK |
|---|---|
| 左滑/右滑 | 上一项/下一项(循环):修理项(仅受损/离线系统,各一项)→ 启航(dock_go 恒为末项) |
| 单击 | 执行:修理(升一级,扣 2 资源→rep_ok/rep_poor)/ 启航(evt_resume→下段 ROUTE) |
| 双击 | 重听当前项句 |
| 上滑 | 巡检链 |
| 下滑 | 菜单 |
| 长按 | error |
全系统无异常 → 仅「启航」+dock_empty。修理两级:受损→完好一步(2 资源);离线→受损→完好两步(每步 2 资源)——rep_* 句「升一级,两资源」恒真。
### 2.5 结算(REPORT)
| 手势 | 链内(死窗+链锁 §6.4) | 链完 |
|---|---|---|
| 单击 | **吞掉** | 返航 → TITLE(settle_hook「单击,返航」言行一致) |
| 双击 | 吞掉 | 重听结算链 |
| 上滑 | 吞掉 | 重听评级段(rate_X→merit_档) |
| 下滑 | 吞掉 | 菜单 |
| 左滑/右滑/长按 | 吞掉 | error |
死亡链(die_intro→die_cause→die_adv→rep_open→rate_d→merit→settle_hook)同死窗+链锁。
### 2.6 模态菜单(遵守 00 §5.2 全球约定,无豁免)
下滑呼出(冻结全部计时:危机倒计时/告警调度/巡航段计时)→ 单击循环 → 双击确认 → 上滑帮助 → 下滑关闭(关闭=回原状态+危机时重播当前选项句)。选项 4 项:回到舰桥 / 保存并回大厅 / 重新听帮助 / 放弃本次巡逻(run 清空保 meta,二次确认不设——菜单即模态)。
### 2.7 每状态手势映射总表(6 手势+长按松开,全状态覆盖)
| 手势 | TITLE | DRILL | ROUTE | CRUISE | CRISIS-检测 | CRISIS-决策 | DOCK | PORT | REPORT链内 | REPORT链完 | MENU |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 单击 | 继续/新巡逻 | 步骤作答 | 选定航线 | 重播告警/跳段 | 忽略 | **下令** | 执行项 | 执行项 | 吞 | 返航 | 循环切项 |
| 双击 | 重听 | 重听教学句 | 重听选项 | 重听最近句 | 忽略 | 重听选项句 | 重听项句 | 重听项句 | 吞 | 重听链 | 确认执行 |
| 左滑 | error | 教学指定/err | 上一选项 | err+纠错 | 忽略 | 上一选项 | 上一项 | 上一项 | 吞 | err | 上一项 |
| 右滑 | 进星港 | 同上 | 下一选项 | 同上 | 忽略 | 下一选项 | 下一项 | 下一项 | 吞 | err | 下一项 |
| 上滑 | 概况链 | 巡检链(教后) | 巡检链 | 巡检链 | 忽略 | 巡检简链 | 巡检链 | 概况链 | 吞 | 评级段 | 帮助 |
| 下滑 | 菜单 | 菜单/跳教学 | 菜单 | 菜单 | 菜单(冻结) | 菜单(冻结) | 菜单 | 菜单 | 吞 | 菜单 | 关闭 |
| 长按 | error | error | error | 快进/err | 快进 | error | error | error | 吞 | error | error |
| 长按松开 | — | — | — | 恢复常速 | 恢复 | — | — | — | — | — | — |
无效手势一律 error 震;full 档 `gd_invalid`(onceKey 同局 1 次);idle-only(引擎 guide 已实现)。
### 2.8 豁免登记(必须显式)
| # | 豁免条目 | 理由(先例) |
|---|---|---|
| E1 | CRUISE 空闲单击=重播最近告警(非「确认」) | 「检查」类非即时操作(escape 单击=检查、dungeon 单击=脉冲同款);60s 内无告警播 cruise_ping(空态反馈,绝不静默);巡检链播中单击=跳段(12 号 rpg 探索跳句口径) |
| E2 | CRISIS 决策窗长按=error(快进天然失效) | 选择语境不作输入(detective CONFRONT 同款);决策窗内通常无语音在播,引擎快进无对象,无冲突 |
**不设 E3**:长按不是本作玩法输入,`setRateBoostEnabled` 全状态保持默认开启(登记,与 dungeon E3 相反的裁定依据)。无 immediateTap;下令绑单击(12-20s 窗口,非即时判定)。
## 3. 四象限系统信息设计(核心)
### 3.1 方位语言与预 pan 方位表(≤4 铁律)
全作统一一套方位语言,系统与危机共用(教一次通吃;04-space「pan+频率双轴」进阶):
| 方位 | 声学编码 | 资产工艺 |
|---|---|---|
| 左舷 port | 能量只在左声道 | 预 pan 派生 `_l`(ffmpeg stereotools,dungeon mob_step 工艺) |
| 右舷 starboard | 能量只在右声道 | 预 pan 派生 `_r` |
| 舰首 bow | 中央+**上行尾音** dir_bow(0.3s,600→1200Hz) | center+SYN 尾音 |
| 舰尾 stern | 中央+**下行尾音** dir_stern(0.3s,1200→500Hz) | center+SYN 尾音 |
- 系统常驻方位(固定舰桥布局,intro_3..5 教学):引擎=舰尾(低频族)、护盾=舰首(中高频族)、扫描=左舷(pan L)、武器=右舷(pan R)。
- 危机方位:seed 四方位均匀;**方位有机制意义**——未化解危机的「受殃系统」副作用落在方位对应系统(该系统已离线则顺时针下一系统:左舷扫描→右舷武器→舰首护盾→舰尾引擎)。intro_5「危机从哪边来,哪边先遭殃」承诺必兑现(playtest 锁定)。
- 危机方位播报=固定模板句 dir_port/star/bow/stern(方位,X舷/舰首/舰尾),无连续角度、无数字。
### 3.2 系统状态音规格(全 SYN,节奏精确可断言)
三态:`ok` 正常 / `dmg` 受损 / `off` 离线。巡检链按固定顺序 引擎→护盾→扫描→武器 播放:每音 **2.0s±50ms**、间隔 **0.4s**;SYN 程序合成(参数写死在 gen 脚本,playtest 虚拟时钟逐毫秒断言)。
| 系统(方位/频带) | ok(2.0s) | dmg(2.0s 巡检用) | off | 告警脉冲(常态用) |
|---|---|---|---|---|
| 引擎(舰尾/60-110Hz) | 两记低鸣脉冲各 0.45s,t=0.0/1.05 | 三记断奏闷咳 0.25s,t=0.0/0.7/1.4,第三记加失真 | **死寂+平线签名** sys_offline(180Hz×3 慢平音各 0.15s,t=0.0/0.7/1.4,全系统共用) | alm_engine 0.45s 单声闷咳,周期 **8s** |
| 护盾(舰首/1.2-2.8kHz) | 均匀薄雾嗡垫 2.0s 无起伏 | 同垫+8Hz 抖颤,两次熄灭(t=0.5-0.7/1.3-1.6) | 同上 | alm_shield 0.4s 闪烁哔,周期 **6s** |
| 扫描(左舷/800-1600Hz pan L) | 两声匀速扫掠各 0.6s,t=0.2/1.2 | 单声扫掠+尾部杂斑 0.3s(t=1.4) | 同上 | alm_scan 0.5s 失锁双哔,周期 **10s** |
| 武器(右舷/400-900Hz pan R) | 单音渐强充能 1.6s 满充收尾 | 两次短充中断各 0.5s,t=0.2/1.1,各带中断嘶 | 同上 | alm_weapon 0.5s 欠充降调,周期 **12s** |
- 音量:巡检音 0.7 / 告警脉冲 0.8 / 平线 0.7 / 危机签名 0.9;四系统频带+节奏型零重叠(偶发瞬时叠听不糊,Brewster 指南)。
- 四系统告警周期互质(6/8/10/12s)——双受损时脉冲落点天然错开,再叠加 R1 串行化,双保险防融合成噪音墙。
### 3.3 巡检链(上滑)——「常态静默/按需巡检」黄金折中
**常态只播异常系统**(rpg「降档才播」裁定的系统版):正常系统在巡航中**零发声**(氛围由 bgm/cruise 承担),受损系统按 §3.4 仲裁发告警脉冲;全部状态可随时上滑巡检。
```
全链(CRUISE/DOCK/ROUTE,~15-40s):
4×状态音(固定序) →(全 ok → tut_all_ok;否则逐个 sys_*_dmg/off 异常句)
→ st_hull_档 → st_seg_段 → st_rp_档 → st_xo/st_eng/st_doc 三档 → 完
简链(CRISIS 决策窗,≤10s):4×状态音 → st_hull_档 → 最紧要异常句(仲裁榜首)
中断复述链(恢复存档,§11):st_hull_档 → 最紧要异常句(无则跳过) → st_seg_段 → recap_go
```
- 巡检链可被危机检测链顶断(R4)、可被单击跳段(E1)、可被菜单停止——按需查询永远让位于游戏事件。
- 最紧要异常=§3.4 仲裁榜首系统(与耳朵里正在响的告警同源——听到的与查到的永不矛盾,单源)。
### 3.4 告警优先级仲裁与叠爆抑制(显式规则表,R1-R8)
**总优先级**(高→低):`voice 通道(下令/结算/归因)` > `A1 危机签名+方位链` > `A2 决策窗尾段 tick` > `A3 受损系统告警(轮转)` > `静默`。声流预算恒 ≤2(BGM+1 条内容声流;voice 播出时 BGM duck→voice+≤1 sfx)。
| # | 规则 | 内容 | 先例/教训 |
|---|---|---|---|
| R1 | **单告警纪律** | 同一时刻至多 1 条系统告警在响。多系统受损时按序取 1:① 危机关联系统优先(陨石→引擎/护盾/武器;海盗→武器/引擎;求救→扫描;辐射→引擎/护盾)② 无危机时威胁序 引擎>护盾>武器>扫描 | 「一次只报最要紧的」队列纪律;space R1 P4 被警报轰炸一分钟劝退 |
| R2 | **轮转公平** | 落选告警排队不丢弃:榜首连响 15s 让位次位 5s(双受损 3:1 轮转;三受损 10/5/5s);周期到点恰逢他人时段 → 顺延一拍 | 低位告警不被饿死,也不抢话 |
| R3 | **叠爆去重** | 同一告警 id 600ms 窗口内重复调度只响一次;不同 id 由 R1 天然串行 | space F6 裁定原样移植 |
| R4 | **语音让路** | voice 播出期间(isVoicePlaying)A3 告警**暂停调度(延迟不丢弃)**,voice 结束+0.5s 恢复;A1 检测链顶断在播巡检链(游戏事件>主动查询);A2 tick 不让路(voice+tick=2 声流) | A3 信息分层;rpg「指令名礼让」同思路 |
| R5 | **危机窗静默无关告警** | 决策窗内仅危机关联受损系统告警参与 R1;无关系统告警挂起至危机结算 | 决策窗认知带宽保护(P4) |
| R6 | **双危机排队** | 同一时刻至多 1 场危机占决策窗。第二场检测到点落在第一场决策窗/结算链内 → FIFO 顺延至第一场结算句落声+2s 再播检测链;其决策窗从自身检测链起算。**绝不叠加两套签名音** | 结算死窗 H1 同源纪律 |
| R7 | **修复即止** | 修理/支援修复使系统恢复 → 该系统告警立即截断、排队项移除,播 rep_ok/sup_eng | 修复的听觉回报要干净 |
| R8 | **菜单/结算全静默** | MENU 打开 → 告警调度+危机倒计时+段计时全部冻结(恢复按当前榜首续响,不回放积压);REPORT/死亡链 → 全部告警清空(链独占) | 00 §5.2 暂停语义;dungeon H1 |
### 3.5 双危机并发穷举(仲裁完备性自证)
S4 有 40%(seed)第二波危机(陨石余波,固定型)。全部并发场景 × 适用规则:
| # | 场景 | 适用规则 | 行为 |
|---|---|---|---|
| S1 | 危机 A 决策窗内,危机 B 检测到点 | R6 | B 检测链顺延至 A 结算句+2s;窗内零 B 声 |
| S2 | 危机 A 结算链(voice)播中,B 检测到点 | R6+R4 | B 等 A 链完+2s;期间 A3 全让路(R4) |
| S3 | B 已排队,A 玩家下令前菜单打开 | R8+R6 | 菜单冻结一切;关闭后 A 倒计时续走,B 仍排队 |
| S4 | 双受损告警轮转中,危机 A 检测 | R1①+R6 | 签名抢占 2.5s;窗内仅关联系统告警(R5),轮转按 3:1 在关联集内继续 |
| S5 | 语音(结果句)在播,告警周期到点 | R4 | 告警延迟至 voice+0.5s |
| S6 | 决策窗尾段 3s(tick)撞告警周期 | 优先级 A2>A3 | tick 先响,告警顺延一拍 |
| S7 | REPORT 进入时仍有受损系统 | R8 | 告警清空,结算链独占 |
七场景全部有确定性行为与 playtest 断言(§12.5);不存在「两套签名重叠」「双告警齐鸣」「B 计时偷跑」三条红线(§12 失败即不通过)。
## 4. 危机事件卡系统
### 4.1 事件类型表
| 类型 | 音频签名(SA3 2.5s) | 方位 | 时限 | 选项(通用动词句) | 超时默认 |
|---|---|---|---|---|---|
| 陨石群 | 碎石呼啸雨(多次掠空+碎击) | seed 四方位 | **12s** | 规避/迎战/硬闯 | ≡硬闯 |
| 海盗 | 敌船引擎轰鸣+充能啸音 | seed | **15s** | 迎战/规避/忽略 | 先挨打 hull−2 |
| 求救信号 | 断续三短求救码(背景杂讯) | seed | **20s** | 驰援/忽略 | 信号消失(无伤) |
| 辐射云 | 盖革计数急响渐密 | seed | **10s** | 规避/硬闯 | 受照 hull−1+受殃系统受损 |
- 每局=四类型各一场(§4.3 生成规则)——「危机全类型路径」每局自然全覆盖。
- 陷阱变体:求救 25%(首局恒无)——签名尾部混入微弱引擎声,检测链播 trap_hint 提示(+doc_trap NPC 接播;「求救码后面,有引擎声,多留心」——先给线索再做决定,公平)。
### 4.2 选项-系统态结果矩阵(判定与账目单源;系统不满足先播 sys_*_off 真话再计结局)
**陨石群**:
| 选项 | 引擎/武器/护盾 ok | 相关系统受损 | 相关系统离线 |
|---|---|---|---|
| 规避(引擎) | res_clean 无伤 | 擦伤 hull−1(res_hurt) | sys_engine_off→hull−2(res_bad) |
| 迎战轰开(武器) | res_mine +1 资源,大副+1 | hull−1(res_hurt) | sys_weapon_off→hull−2 |
| 硬闯(护盾) | 无伤但护盾受损(sys_shield_dmg+工程师−1) | hull−2(res_bad) | sys_shield_off→hull−2 |
| 超时 | ≡硬闯(含护盾 ok 时的工程师−1——被动硬闯同为真话账) | | |
**海盗**:
| 选项 | ok | 受损 | 离线 | 附注 |
|---|---|---|---|---|
| 迎战(武器) | 胜:战利+2 资源(res_plunder)、大副+1、**基础 hull−1**;大副信赖(≥2)→sup_xo 战果升一级 hull−0;大副离心(≤−2)→hull−2 | 胜但 hull−2、战利+2 | sys_weapon_off→惨败 hull−3(res_bad) | sup_xo 在下令瞬间按 band 判定 |
| 规避(引擎) | 甩脱无伤、大副−1(loy_evade_pirate) | hull−1 擦脱 | 没跑掉 hull−2 | |
| 忽略/超时 | 先挨打 hull−2、医师−1 | 同左 | 同左 | |
**求救信号**:
| 选项 | 扫描 ok | 扫描受损 | 扫描离线 | 陷阱变体 |
|---|---|---|---|---|
| 驰援(扫描) | res_reward +2 资源、医师+1 大副+1(loy_aid) | 成功但残骸刮蹭 hull−1 | sys_scan_off→找不到,无事发生(无惩罚无忠诚变化) | 武器 ok→伏击反杀 res_plunder +2、大副+1;武器受损/离线→res_ambush hull−2、医师−1 |
| 忽略/超时 | loy_ignore 医师−1,无其他惩罚 | 同左 | 同左 | 忽略=明智避开,零损益 |
**辐射云**:
| 选项 | ok | 受损 | 离线 |
|---|---|---|---|
| 规避(引擎) | res_clean | hull−1(res_hurt) | 规避不动→受照结局 |
| 硬闯(护盾) | 无伤但护盾受损一级、工程师−1 | hull−2(res_bad) | 同受照 |
| 超时 | res_rad:hull−1+**方位对应系统受损一级**(已受损则离线;已离线则顺时针下一系统) | | |
受创一律 hit_hull 音+hit 震;资源入账 res_pick+pickup 震;舰体跌档跨档播 st_hull(双向)。
### 4.3 seed 用法与生成规则
```
rng = mulberry32(seed) // dungeon/detective 同族
正式局 seed = Math.floor(Math.random()*1e9),开局掷一次存入 run
生成期一次性洗牌/抽取(存 run.plan,读档复用不重洗):
① 危机类型序:首局固定 [求救,陨石,海盗,辐射](难度递增+教学耦合);
非首局 = Fisher-Yates 洗牌 + 约束 S1≠辐射(10s 窗不宜开局)
② 每场方位:uniform{左舷,右舷,舰首,舰尾}(决定签名 pan/尾音与受殃系统)
③ 求救陷阱:25% Bernoulli(首局恒 false)
④ 磨损:每段 1 次(S1 无;矿富航线 2 次),目标=当前 ok 系统 uniform
⑤ S4 双危机余波:40%(首局恒 false;第二波固定陨石余波+seed 方位)
复现断言:同 seed 两次构造 → run.plan 深相等(类型序/方位/陷阱/磨损/余波逐项)
```
巡航段长(固定,不随机):S1 90s / S2 100s / S3 110s / S4 120s(节奏曲线 §13)。
## 5. 船员忠诚系统
船员固定 3 人(大副/工程师/医师,开局全员 0,clamp −3..+3)。忠诚=抉择的长期回声:每一次危机抉择按表入账,档位句从同一 ledger 读出(播报值=运行值)。
### 5.1 事件-忠诚影响表(全量;与 §4.2 矩阵同源)
| 事件·抉择 | 大副 | 工程师 | 医师 | 即时句 |
|---|---|---|---|---|
| 求救·驰援成功(含陷阱反杀) | +1 | 0 | +1 | loy_aid;NPC 接播:普通驰援→doc_aid、陷阱反杀→xo_aid |
| 求救·驰援但扫描离线未遂 | 0 | 0 | 0 | sys_scan_off(无忠诚账) |
| 求救·陷阱受伏(武器不可用) | 0 | 0 | −1 | res_ambush+loy_rad?——用 loy_rad(医师处理伤员) |
| 求救·忽略/超时 | 0 | 0 | −1 | loy_ignore / doc_ignore(NPC) |
| 陨石·迎战轰开 | +1 | 0 | 0 | res_mine+loy_fight_win |
| 陨石·硬闯/超时(护盾扛) | 0 | −1 | 0 | loy_breach / eng_gripe(NPC,≤−2 时) |
| 陨石·规避 | 0 | 0 | 0 | — |
| 海盗·迎战(胜) | +1 | 0 | 0 | loy_fight_win / xo_win(NPC) |
| 海盗·规避 | −1 | 0 | 0 | loy_evade_pirate |
| 海盗·忽略/超时(受创) | 0 | 0 | −1 | res_bad+loy_rad |
| 辐射·硬穿(护盾) | 0 | −1 | 0 | loy_breach |
| 辐射·超时受照 | 0 | 0 | −1 | res_rad+loy_rad |
| 辐射·规避 | 0 | 0 | 0 | — |
### 5.2 档位与措辞(逐值为真)
| 档 | 区间 | 句(每成员一句) | 措辞↔账目 |
|---|---|---|---|
| 离心 | ≤−2 | st_xo_1「大副,离心。」等 ×3 成员 | 「离心」=band≤−2(支援缺席+NPC 撂话:xo_uneasy/eng_gripe/doc_ignore 首次各一句,每局 1 次) |
| 平常 | −1..+1 | st_*_2 ×3 | 「平常」=band∈[−1,1] |
| 信赖 | ≥2 | st_*_3 ×3 | 「信赖」=band≥2(关键支援激活) |
档位只在巡检链播(跨档即时句由 5.1 的 loy_* 承担,二者并存不矛盾:loy 句说事件、band 句说状态)。
### 5.3 关键支援触发条件(档位的机制回报)
| 成员 | 触发点 | 条件 | 效果 | 播报 |
|---|---|---|---|---|
| 大副 | 海盗·迎战 下令瞬间 | band≥2 | 战果升一级(hull−1→0;基础本就含 −1) | sup_xo+xo_fight(NPC) |
| 工程师 | 段末(DOCK 进入前) | band≥2 且有受损/离线系统 | 自动修 1 级(受损最重者;R7 即止) | sup_eng+eng_sup(NPC) |
| 医师 | 段末(DOCK 进入前) | band≥2 且本段 hull 净减 ≥1 | 舰体+1(不超上限) | sup_doc+doc_care(NPC) |
| 任一 | 支援条件不满足(本该触发) | band<2 | 支援缺席 | sup_none(每局限 1 次,之后静默) |
大副离心(≤−2)附加:海盗迎战战果降一级(hull−1→−2)——与信赖对称,不引入新句子(数值账 playtest 锁定)。工程师/医师离心=支援缺席(无额外惩罚,avoid rep_* 句价目失真)。
## 6. 状态机
### 6.1 状态列表
`TITLE / DRILL(首局教学态,寄生于 S1) / CRUISE(ROUTE+主体) / CRISIS(DETECT+DECIDE) / DOCK / REPORT` + `MENU`(挂起 overlay,记录返回态);PORT=TITLE 子相位。
### 6.2 转移图
```
start ──> TITLE ──tap(有档)──> 恢复 run+中断复述链 → CRUISE/当前段
│tap(无档) ├──────> DRILL(仅首局, meta.drillDone) ──完成/下滑跳过──> CRUISE(S1)
│右滑=PORT(功勋改装) │
v v
CRUISE(段n) ──段计时到──> CRISIS(类型=plan[n]) ──下令/超时结算──> (n<4) DOCK(evt_dock) ──启航(evt_resume)──> CRUISE(n+1)
│S4 余波:结算后 2s 若有余波 → 再入 CRISIS(余波) → 结算 │n=4
└──任意时刻 hull≤0──> REPORT(死亡链) v
REPORT(巡逻结算链) ──tap──> TITLE
任意正交态 ──下滑──> MENU(冻结计时) ──关闭──> 原状态(危机时重播当前选项句)
```
### 6.3 语音链推进契约
- 检测链/结果链/结算链=onComplete 串行(句间 0.8s);单句 8s 无 onComplete(资产缺失)→ 告警续链(「屏蔽任意 voice 流程不卡死」契约;危机兜底=超时默认结局自动推进)。
- 教学链 `_speakGuarded` 串行(radio/dungeon D0-1 引擎保险丝先例,杜绝同 tick 双调度抢占)。
- REPORT/死亡链为**独占链**:链首停看门狗与全部告警(R8)。
### 6.4 REPORT 死窗与链锁(dungeon H1 内化)
进 REPORT 即盖 `REPORT_GRACE_MS=800` 戳(touchstart+450ms 长按+300ms 双击窗 ≈750ms,800 全盖);死窗内一切手势吞掉(ghost 手势不算输入、不碰看门狗)。链锁:链尾 settle_hook 落声前单击/右滑/长按一律吞掉;链完成后单击=返航(settle_hook「单击,返航」言行一致,simon round1-live 教训)。双击=重听链仅链完成后受理。
## 7. 教学编排(DRILL,首局寄生于 S1 求救)
每步=一句短旁白→等待实操→反馈;做错重教同一步(**新短句 ≤2 次**)后自动演示通过;下滑=跳过(tut_skip),`meta.drillDone` 持久化。首局 S1 求救**恒无陷阱**(tut_aid「我们的扫描,稳得很」承诺必兑现——S1 无磨损保证扫描 ok)。
| 步 | 旁白 | 等待动作 | 通过条件/反馈 |
|---|---|---|---|
| D0 | intro_1..5 → tut_d0 | 上滑 | 巡检全链(全 ok)+tut_all_ok。**首输入 ≈t+25s(<60s ✓)** |
| D1 | tut_crisis | (检测链自动)听签名+类型句+方位句 | 求救检测链播完(纯聆听) |
| D2 | tut_decide → tut_aid | 左右滑预览 → 单击下令「驰援」 | pa_chime→执行→res_reward+loy_aid+doc_aid→tut_after。**首正反馈 ≈t+2.5-3min(≤3min ✓)** |
| D3 | tut_loyal | 上滑 | 巡检链(听到三档船员句) |
| D4 | tut_done | — | 进自由巡航(S1 主体) |
- 学期零惩罚:S1 无磨损、求救超时=信号消失(无伤无资源损失,cr_timeout 真话);DRILL 内乱按不可能掉血掉资源。
- 教学无进展轨(E0-2 先例):30s earcon→60s 短句→90s 自动演示通过(自动驰援)。
## 8. 数值与经济
### 8.1 资源经济(每局两本账:舰体 hull / 资源点 RP)
```
hull:初始/上限 6(armor1→7、armor2→8)。伤害单位 1-3/次。≤0 → 死亡链。
RP:段首采集入账(稳妥线 2 / 矿富线 4;采集协议改装后 3/5)+ 奖励(矿材 1/战利 2/报酬 2)
− 修理(每级 2)。REPORT 时 剩余 RP ÷3 向下取整 → 折算功勋(资源不白攒)。
磨损:每段 1 次(矿富 2 次)随机 ok 系统受损一级(受损→离线)。
st_rp 档:0-2 紧张 / 3-6 够用 / ≥7 充足(跨档才播、双向播,播报值=运行值)
st_hull 档(按比例,兼容上限升级):≥75% 稳固 / 40-74% 带伤 / <40% 危急
```
### 8.2 评级公式(措辞↔账目一一对应)
```
score = 完成段数×2(满 8) + 舰体剩余(绝对值) + 驰援成功×2 + 击退海盗×2(含伏击反杀)
+ 全程无系统离线×1
S ≥18 / A ≥14 / B ≥10 / C ≥6(完成巡逻保底 8+0=8 → C 封底)
D = 巡逻失败(hull≤0 弃舰撤离)
功勋 = 完成段数 + 评级加成(S+8/A+5/B+3/C+1/D+0) + floor(剩余RP/3)
```
### 8.3 升级树(星港·功勋,跨局保留;dungeon 遗产模式)
| 改装 | 功勋 | 效果 |
|---|---|---|
| upg_spare 备用零件 | 20 | 开局自带物资(RP +2) |
| upg_harvest 采集协议 | 30 | 每段采集 +1(路线句无数字,恒真) |
| upg_armor1 加装装甲 | 40 | 舰体上限 6→7 |
| upg_vet 老兵船组 | 50 | 开局全员忠诚 +1 |
| upg_armor2 重型装甲(需 armor1) | 60 | 舰体上限 7→8 |
| upg_aegis 应急护盾 | 70 | 每段首次舰体伤害 −1(减至 0 则无伤播报) |
经济核算:S 局功勋 14-15 / B 局 7-8 / 失败局 3-4 → 早期改装 2-3 局一件、全套 18-25 局(dungeon 遗产 2-5 局一件同量级)。
### 8.4 剧本 A「教科书巡逻」逐事件验算(评级账目直证)
首局,全稳妥线,危机序 求救→陨石→海盗→辐射;开局 hull 6 / RP 0 / 忠诚 0/0/0:
| # | 阶段/事件 | 抉择与系统态 | 结算 | 账目(hull/RP/大副/工程师/医师) |
|---|---|---|---|---|
| 1 | S1 巡航 90s | 采集 +2 | res_pick | 6 / 2 / 0 / 0 / 0 |
| 2 | S1 求救(左舷,无陷阱) | 驰援(扫描 ok,D2 教学) | res_reward +2;loy_aid | 6 / 4 / **1** / 0 / **1**(RP 2→4 跨档播 st_rp_2 ✓) |
| 3 | DOCK1 | 全好 | dock_empty+dock_go | 6 / 4 / 1 / 0 / 1 |
| 4 | S2 巡航 100s | 采集 +2;磨损:扫描受损 | alm+sys_scan_dmg+eng_wear | 6 / 6 / 1 / 0 / 1 |
| 5 | S2 陨石群(舰尾) | 迎战轰开(武器 ok) | res_mine +1;大副+1 | 6 / 7 / **2** / 0 / 1(RP 6→7 跨档播 st_rp_3 ✓;大副跨档→下次巡检 st_xo_3 信赖) |
| 6 | DOCK2 | 修扫描 −2 | rep_ok(RP 7→5 跨档回 st_rp_2 ✓) | 6 / 5 / 2 / 0 / 1 |
| 7 | S3 巡航 110s | 采集 +2;磨损:引擎受损 | alm+sys_engine_dmg | 6 / 7 / 2 / 0 / 1 |
| 8 | S3 海盗(右舷) | 迎战(武器 ok;**大副 band 2 → sup_xo**:战果升一级 hull−1→0) | res_plunder +2;sup_xo;loy_fight_win | 6 / 9 / **3** / 0 / 1(RP 7→9 跨档 st_rp_3 ✓) |
| 9 | DOCK3 | 修引擎 −2 | rep_ok | 6 / 7 / 3 / 0 / 1 |
| 10 | S4 巡航 120s | 采集 +2;磨损:护盾受损 | alm+sys_shield_dmg | 6 / 9 / 3 / 0 / 1 |
| 11 | S4 辐射云(舰首) | 规避(引擎 ok,已修) | eva_ok+res_clean | 6 / 9 / 3 / 0 / 1 |
| 12 | REPORT | score=4×2+6+1×2+1×2+1=**19 → S**;功勋=4+8+floor(9/3)=**15** | rate_s+merit_3 | 全档位句=ledger ✓ |
验算结论:每个跨档播报点的实值都在区间内;三次忠诚变动全落 loy 句;支援触发(大副)与 band 一致;S 级在含两次磨损的现实局内可达。
### 8.5 剧本 B「挂机超时」验算(受创路径+缺席差分)
全超时、全稳妥线:S1 求救超时(cr_timeout+loy_ignore,医师−1)RP 2 → S2 陨石超时≡硬闯(护盾 ok→护盾受损+工程师−1)→ DOCK2 修扫描 −2(护盾修不起,rep_poor 可达)→ S3 海盗超时 hull−2+医师−1(→−2 离心)→ DOCK3 修引擎? (S3 磨损=引擎受损)−2 → S4 辐射超时 hull−1+受殃系统受损(扫描再次)。
REPORT:hull 3、驰援 0、击退 0、无离线 +1 → score=8+3+0+0+1=**12 → B**;功勋=4+3+floor(4/3)=**8**。医师 band −2=离心(st_doc_1 真话;段末 hull 净减但 sup 缺席——与剧本 A 的支援在场形成差分断言对)。
### 8.6 失败路径(注入验算)
注入 hull=3、sys.weapon=off,S3 海盗选迎战 → sys_weapon_off→hull−3→0 → 死亡链:die_intro→die_pirate(最后伤害源=海盗炮火)→die_adv_sys(本局存在因离线失败的抉择)→rep_open→rate_d→merit_1→settle_hook;功勋=3 段+0+floor(RP/3)。die_cause 按 lastHit 真实来源、die_adv 按行为记录(超时≥2→die_adv_to;存在离线失败→die_adv_sys;否则 die_adv_to 泛化建议句)——三问归因真话律锁定。
## 9. 音频三层
### 9.1 BGM(3 首,Mureka instrumental,-20 LUFS,ogg+m4a,无缝循环)
| id | 状态映射 | Mureka prompt(英文) |
|---|---|---|
| bgm/menu | TITLE / MENU / DOCK / PORT / REPORT(结算 volume 0.5) | "Quiet spaceport ambient, warm slow synth pads, soft beacon pings, dignified and calm, no drums, no vocals, seamless loop" |
| bgm/cruise | DRILL / CRUISE(含 ROUTE) | "Space patrol cruise theme, steady pulsing synth bass at 80 bpm, sparse bell melody, wide starfield ambience, watchful and hopeful, no vocals, seamless loop" |
| bgm/crisis | CRISIS(检测链起,交叉淡入) | "Tense starship bridge cue, pulsing low ostinato at 100 bpm, sparse alarm-like stabs, rising dread but restrained mix, no vocals, seamless loop" |
切换全走引擎 crossfade;voice duck 20% 引擎自动。crisis 曲**特意 restrained**——给签名音/告警/语音让频带(§3.4 声流预算)。danger 不换曲(guide danger earcon+st_hull_3 承担)。预算:3 曲 ×2 候选=6 任务 $0.18(上限内)。
### 9.2 SFX(30 个基 id;SA3=Stable Audio 3,SYN=程序合成;双格式、真峰值 ≤-3dBFS)
| 类别 | id | 方式 | 说明 |
|---|---|---|---|
| 系统状态音 | `sys_engine_ok/dmg` `sys_shield_ok/dmg` `sys_scan_ok/dmg` `sys_weapon_ok/dmg` | **SYN** | §3.2 规格(2.0s/间隔 0.4s/频带/节奏全部写死——playtest 逐毫秒断言) |
| 离线签名 | `sys_offline` | SYN | 180Hz×3 慢平音,全系统共用(死寂=统一语言) |
| 告警脉冲 | `alm_engine` `alm_shield` `alm_scan` `alm_weapon` | SYN | 0.4-0.5s 受损签名压缩单响,周期 8/6/10/12s(互质) |
| 方位尾音 | `dir_bow` `dir_stern` | SYN | 上行/下行双音 0.3s |
| 危机签名 | `sig_meteor` `sig_pirate` `sig_distress` `sig_radiation`(center)+ ffmpeg pan 派生 `_l/_r` ×4 | **SA3×4** | "dense meteor swarm passing close, multiple rock whooshes and rubble impacts, dry, tight" / "hostile spacecraft engine roar with weapon charging whine, menacing" / "repeating three-short radio distress beeps through static, deep space" / "geiger counter clicking rapidly intensifying, eerie space ambience";派生工艺同 dungeon mob_step(stereotools sbal ±0.8) |
| 下令/演出 | `pa_chime` | SYN | 全舰广播双音 0.5s(下令前缀仪式) |
| | `eva_ok` `wpn_fire` `shield_bear` `warp` | SYN | 侧推掠风/炮击低频+高吱尾/承击闷鸣/驰援跃迁滑音(各 0.7-1.2s) |
| | `hit_hull` | SYN | 船体受创闷击 0.5s(120Hz+金属残响) |
| | `res_pick` | SYN | 资源入账清脆双击 0.3s |
| | `wrench` | SYN | 扳手两响 0.5s(修理) |
| | `seg_warp` | SYN | 段间跃迁上行滑音 1.2s |
| 计时/看门狗 | `tick_fast` | SYN | 决策窗尾段 tick(1kHz,0.1s/0.5s 拍) |
| | `turn_tick` | SYN | 880Hz 木鱼族(无进展轨 L1,dungeon 配方自存) |
| 巡航问询 | `cruise_ping` | SYN | 柔和 ping 0.4s(CRUISE 空闲单击无近期告警时) |
SA3 任务 4 个(全部签名);其余 SYN 兜底——**状态音必须 SYN**(节奏可断言是硬要求,§3.2)。
### 9.3 voice(154 句:旁白 142 ×2 性别 + NPC 平铺 12)
- **旁白=舰载系统音**(系统/教学/状态/账目/结算宣读):female=`Serena`「清晰沉稳的女声,舰载系统音,冷静克制,句读干净」/ male=`Uncle_Fu`「低沉沉稳的男声,舰载系统音,冷静克制」——两常量全表统一,禁句级变体、禁语速词。数字全分档整句(hull 3 档/段 4 档/rp 3 档/忠诚 9 句/功勋 3 档),句内量词写死(「两资源」「资源加一」)。
- **船员 NPC 平铺单音色**(≤3,落 `voice/` 根目录,引擎平铺回退命中;不做双性别):
| 角色 | speaker | instruct 常量 | 区分度风险 |
|---|---|---|---|
| 大副(XO 34) | `Dylan` | 干脆利落的年轻男声,星舰大副,令出必行,敬重舰长 | **低:与两侧旁白均不同 speaker** |
| 工程师(ENG 52) | `Eric` | 沙哑厚重的中年男声,轮机工程师,惜船如命,慢条斯理 | 低:同上 |
| 医师(DOC 38) | `Vivian` | 温和坚定的女声,舰载医师,轻声但不容置疑 | 低:同上(female 旁白=Serena,不重叠) |
- 本作 NPC 与旁白**零 speaker 重叠**(detective/teahouse 各有 2 处「中」风险,本作 0)——仍保留 loy_*/sup_* 句前 NPC 语境锚点(第一人称船员 vs 系统音第三人称)。情绪写在句内文本(省略号引导),instruct 恒定。
- 全表、触发、键盘变体、多音字自查见 [22-bridge-voice-ids.md](22-bridge-voice-ids.md)。
## 10. 向导层接入(engine/guide.js,不新增 earcon 词表)
### 10.1 状态签名(进入状态时播)
| 状态 | guide.state() | 时点 |
|---|---|---|
| TITLE / MENU / REPORT | `menu` | 进标题、开菜单、进结算 |
| DRILL / CRUISE | `explore` | 进教学、每段巡航 |
| CRISIS | `battle` | 检测链起(检测+决策整段) |
| ROUTE / DOCK / PORT | `choice` | 进选择列表 |
| danger | `danger` | 舰体跌至「危急」档当刻(每段 1 次) |
### 10.2 turn cue 与看门狗(双轨——批次 1 教训固化)
| 等待点 | 机制 | at | say(full 档;第 2 级一律纯 nudge) |
|---|---|---|---|
| ROUTE/DOCK/PORT 入口、CRISIS 决策窗开 | guide.turn | — | turn earcon + confirm 震 |
| CRUISE 无操作 | 无操作轨 | [10s, 25s] | gd_cruise / null |
| ROUTE 无操作 | 无操作轨 | [12s, 30s] | gd_decide / null(45s 自动稳妥线兜底) |
| CRISIS 决策窗 | 无操作轨 | [min(窗长×0.5,12s)] 单级 | gd_decide(窗 <10s 不挂——tick 自承时机) |
| DOCK 无操作 | 无操作轨 | [15s, 35s] | gd_dock / null |
| DOCK 无进展 | 无进展轨 | [45/90/150s] | earcon→gd_dock→hint_dock3+自动预览启航项(**不替玩家花资源**) |
| DRILL 每步 | 无进展轨 | [30/60/90s] | earcon→短句→自动演示通过(§7) |
- CRUISE/ROUTE/CRISIS 均有硬计时兜底(段计时/45s 自动线/超时默认结局)——结构上不存在无限静默;无进展轨仅 DOCK/DRILL 需要(结构性密度,dungeon D0-3 教训的前置化)。
- 纠错/提示 idle-only、过期丢弃;向导语音 queue:true 绝不顶句(引擎已实现)。
## 11. 存档设计(跨局舰船成长)
```json
{
"schema": 1, "game": "bridge", "updatedAt": 0,
"summary": "第2巡航段 · 舰体带伤 · 引擎受损 · 资源5",
"meta": { "drillDone": true, "merit": 26, "unlocks": ["spare", "harvest"],
"patrols": 3, "bestRate": "A", "aids": 2, "kills": 1 },
"run": {
"seed": 42, "seg": 2, "plan": { "types": ["distress","meteor","pirate","radiation"],
"dirs": ["port","stern","star","bow"], "trap": false, "wears": ["scan","engine","shield"],
"echo": false },
"hull": 4, "rp": 5,
"sys": { "engine": "dmg", "shield": "ok", "scan": "ok", "weapon": "ok" },
"crew": { "xo": 2, "eng": 0, "doc": 1 },
"aidOk": 1, "kills": 1, "offlineEver": false,
"hullLostSeg": 1, "timeouts": 0, "offlineFails": 0, "firstRun": false
}
}
```
- summary 规则:`第{seg}巡航段 · {hull 档名} · {最紧要异常系统名|无异常} · 资源{rp}`;巡逻终局 run=null → `功勋{merit} · 最佳{bestRate} · 改装{n}/6`。
- 保存时机:危机结算后 / DOCK 项执行后 / 段末 / 菜单「保存并回大厅」/ REPORT 入 meta。localStorage + PUT 服务器。
- 读取:有 run → TITLE 播 sys_continue_ask,单击继续 → 恢复到**当前段 ROUTE**(该段危机未结算则整段重走——存档粒度=危机结算点/段边界,登记)→ **中断复述链**(§3.3:舰体档→最紧要异常→巡航段→recap_go,≤8s 回到可操作)。右滑=星港(meta 消费)。
- 归因真话依据:`timeouts`/`offlineFails`/lastHit 持久化,死亡链选句从同源读取。
## 12. playtest 断言清单(登记 13 号文档新增 §bridge;mock 对齐 web/rpg/test/playtest.mjs;一律 guide:'off')
**关键路径**(seed=42 首局,≤200 手势):
1. 启动→TITLE(无档)→单击→DRILL:D0..D4 逐步 voice 序与 drillStep 递进;D0 巡检全链+tut_all_ok;D2 求救驰援成功链(pa_chime→warp→res_reward→loy_aid→doc_aid);首局 S1 超时路径零损失(学期零惩罚);下滑跳过+meta.drillDone 二周目不再进。
2. **seed 复现**:seed=42 两次构造 → run.plan 深相等(类型序/方位/陷阱/磨损/余波);首局约束(固定序/无陷阱/无余波/S1 无磨损);非首局 S1≠辐射。
3. **巡检链节奏断言**(SYN 硬要求):全链 4 音按 引擎→护盾→扫描→武器 顺序播出、每音时长 2.0s±50ms、间隔 0.4s±50ms;scan 音资产左声道能量占比>90%(pan 断言);全 ok → tut_all_ok、无异常语音;每系统 dmg/off 各注入 → 对应 sys_* 句恰在对应 tone 后播出。
4. **危机全类型路径**:四类型各自完整走 检测链(签名 pan/尾音与方位一致:左舷=左声道、舰首=dir_bow)→类型句→方位句→决策窗→逐选项×逐系统态(ok/dmg/off 矩阵 §4.2 全组合注入)→结果句+账目差分(hull/RP/忠诚);超时=默认结局真话(陨石超时含工程师−1)。
5. **仲裁规则断言**(R1-R8 + §3.5 七场景逐一注入):双受损 3:1 轮转时序;同 id 600ms 去重;voice 播出期间告警零调度、结束后 +0.5s 恢复;决策窗内无关告警挂起;**双危机**:B 检测落在 A 窗内 → A 结算句+2s 前零 B 声、B 窗从 B 检测链起算;REPORT 进入告警清空;菜单冻结期零调度零倒计时。红线:任意时刻系统告警 ≤1 条(tick 除外)、两套签名零重叠。
6. **忠诚账本**:§5.1 表逐行注入 → crew 差分断言;clamp −3..+3;band 句=ledger(9 句全覆盖含边界 −2/+2);支援触发三成员(大副=海盗下令瞬间 band 判定、工程师/医师=段末条件)与缺席 sup_none 每局一次;大副离心战果降级。
7. **评级验算**:§8.4 剧本 A 逐事件注入 → score=19→rate_s、功勋 15、每个跨档播报点实值在区间(含 RP 回落双向);§8.5 剧本 B → score=12→B、医师离心档+支援缺席;§8.6 失败注入 → 死亡链序+die_cause=lastHit+die_adv 选择与 timeouts/offlineFails 一致+功勋折算。
8. **经济**:采集(稳妥/矿富×2/采集协议改装)、修理两级(离线→受损→ok 两笔 2 资源)、rep_poor、REPORT 折算 floor(RP/3);upg 六项价格/条件(armor2 依赖、port_poor、upg_done 不重复购买)与效果(armor 上限→st_hull 档按新比例、vet 开局+1、aegis 首伤−1 减至 0 无伤播报)。
9. **看门狗**:CRUISE 10s/25s、ROUTE 12s/30s+45s 自动稳妥、DOCK 15s/35s、第 2 级纯 nudge;DOCK 无进展 45/90/150 三级(L3 不替玩家花资源);DRILL 30/60/90 自动演示。
10. **中断复述**:存档重进 → sys_continue_ask→单击→落在当前段 ROUTE→复述链序(st_hull→最紧要异常→st_seg→recap_go);无异常时跳过异常句;上滑全链可重放。
11. **REPORT 死窗+链锁**:进 REPORT 同拍与 +300ms 各补一记在途 tap → 均被吞;结算链完整有序(rep_open→rate_X→merit→settle_hook);链完单击=返航 TITLE;死亡链同款。
12. **菜单**:模态循环-确认-关闭;危机中开菜单 → 倒计时冻结(快进虚拟时钟断言零超时触发)→ 关闭重播当前选项句续走;「保存并回大厅」PUT data.summary 命中生成规则;「放弃本次巡逻」run 清空 meta 保留。
13. **键盘变体**:`settings.input='key'` 后播 sys_help_k/tut_d0_k/cr_decide_k/dock_open_k 等 V 组(inputMode 联动);'touch' 回基础句。
14. **E1/E2 断言**:CRUISE 空闲单击=重播最近告警(60s 窗)、无近期→cruise_ping;巡检链播中单击=跳段;CRISIS 决策窗长按=error;无 E3(全状态快进可用,rateLog 无豁免记录)。
**边界断言**:
- 首局 FTUE:首输入 <60s(D0 ≈t+25s);首正反馈 ≤3min(D2 驰援 ≈t+2.5min)。
- 学期零惩罚:DRILL+S1 乱按 → hull/RP/忠诚零变化(求救超时除外——其本身零损失)。
- 求救陷阱公平性:陷阱局检测链必播 trap_hint(先线索后抉择);非陷阱局零 trap_hint。
- 方位机制:辐射/余波受殃系统=方位系统(含已离线顺时针转移);陨石硬闯损护盾自身。
- 上滑巡检随时可用(决策窗=简链);双击重听在声明处全状态生效。
- 屏蔽任意 voice 资产:链 8s 兜底推进;危机超时默认结局自动落(永不卡死)。
- guide=off:全静、零定时器(游戏层计时器:段计时/倒计时属内容层照走)。
- 资产齐套:voice 双性别 142 id 集合一致+NPC 平铺 12+sfx/bgm 双格式(assetExists 口径)。
**失败即不通过**:归因假话(评级句/忠诚档句/超时句/死因句/支援句与 ledger 不符);同 seed 两次构造不一致;巡检链节奏断言失败;双危机并发出现两套签名重叠或双告警齐鸣;危机签名 pan/尾音与方位句矛盾;教学期产生任何损失;受殃系统与方位规则不符。
## 13. 节奏曲线
### 单局(一次巡逻 15-22 分钟;首局 17-22)
| 阶段 | 时长 | 内容 | 奖励点(≤60s 一个) |
|---|---|---|---|
| 开场+教学 | 0:00-3:00 | intro 五句+D0..D4(S1 求救=教学危机) | D2 驰援成功(t+2.5min) |
| S1 收尾+DOCK1 | 3:00-4:30 | 巡航余段+整备 | 段结算/采集入账 |
| S2 | 4:30-7:30 | 航线选择+磨损告警+陨石(12s 窗) | res_mine 采矿/大副跨档 |
| S3 | 7:30-10:30 | 巡航+海盗(15s 窗,支援演出高潮) | sup_xo/res_plunder |
| S4 | 10:30-13:30 | 巡航+辐射(10s 窗,最紧)+(40% 余波双危机) | 干净规避/余波胜 |
| REPORT | 13:30-15:00 | 评级链+功勋+星港钩子 | rate_s+改装 |
- 紧张度曲线:求救(20s 窗,教学温)→陨石(12s)→海盗(15s 但有战斗演出)→辐射(10s,最紧)+余波——窗长递减、S4 双危机为峰;DOCK 是每 3 分钟一个的「呼吸谷」(修理+听船员)。
- 峰谷结构:巡航(低唤起·听+管理)⇄ 危机(高唤起·决策窗)⇄ 靠港(低唤起·养成)——P4 不疲劳;P2 追求 S 评级与矿富线风险决策。
- 开环钩子:settle_hook「星港期待你的下一次巡逻」+功勋差一点够下一件改装(经济曲线设计使然);死亡局功勋照入(下一局更强的 dungeon 式拉重开)。
### 跨局(元进度)
首局教学→3-5 局解锁备用零件/采集协议→中期装甲/老兵船组改变 build(vet 开局信赖=支援更早到位)→重型装甲+应急护盾支撑 S 评级冲分;bestRate 与 patrols 记录长期目标。
## 14. 自检清单
| # | 硬约束/教训 | 自检 |
|---|---|---|
| 1 | FTUE 首输入 <60s | D0 巡检 ≈t+25s ✓(§7) |
| 2 | 首正反馈 ≤3min | D2 驰援成功 ≈t+2.5min ✓ |
| 3 | 学习期零惩罚 | S1 无磨损、求救超时零损失、DRILL 乱按零账 ✓ |
| 4 | 失败三问归因+真话律 | die_cause=lastHit、die_adv 按 timeouts/offlineFails、超时=真话默认结局、系统不满足先播 sys_*_off——§12 失败项锁定 ✓ |
| 5 | 手势宪法三件套不豁免 | 上滑巡检/下滑菜单/双击重听全状态保留;仅 E1/E2 登记且教学讲清;无 E3(登记)✓ |
| 6 | 教学承诺兑现 | tut_aid「扫描稳得很」(S1 无磨损保证);intro_5「哪边先遭殃」(受殃规则锁定);settle_hook「单击返航」死窗+链锁后言行一致 ✓ |
| 7 | 结算链完整 | REPORT 800ms 死窗+链锁(dungeon H1 内化)✓(§6.4) |
| 8 | 档位措辞真实 | hull/rp/忠诚/功勋/评级五本账播报值=运行值、跨档双向播;§8.4-8.6 剧本逐事件验算 ✓ |
| 9 | **告警仲裁表完备性** | R1-R8 显式规则表+§3.5 双危机并发 7 场景穷举(检测排队/结算链撞车/菜单冻结/轮转抢占/语音让路/tick 优先/结算清场),每场景确定性行为+断言;红线三条(签名重叠/双告警齐鸣/B 计时偷跑)入失败项 ✓ |
| 10 | **状态音认知负荷**(本作特有风险) | 常态静默+异常才响(rpg 降档才播裁定系统版)+上滑巡检按需全查+四告警周期互质+R1 串行——常态并发声流 ≤2 恒成立;SYN 节奏逐毫秒断言 ✓(§3.2-3.4) |
| 11 | 方位降维 ≤4 | 左舷/右舷/舰首/舰尾四象限(系统+危机统一语言);方位句固定模板 4 句;无连续角度 ✓(§3.1) |
| 12 | 信息密度 | 选项逐项预览(≤3 选项/次);巡检简链 ≤10s(决策窗);检测链 ~8s 短窗;单次播报 ≤3 选项 ✓ |
| 13 | 向导层 | 签名 5 态(choice 用于三列表态);双轨看门狗+结构性硬计时兜底;纠错 idle-only/queue/onceKey ✓(§10) |
| 14 | seed 可复现 | mulberry32+opts.seed+plan 生成期一次性+深相等断言;首局约束集 ✓(§4.3) |
| 15 | P1 视障 | 巡检链=status key 全状态可用(决策窗简链);双击重听/回车即时键;账目真实;NPC 零 speaker 重叠;2.2× 语速引擎既有 ✓ |
| 16 | P3 通勤 | 中断复述(舰体/最紧要异常/巡航段 ≤8s);菜单冻结随时退出存档;段=3 分钟颗粒 ✓ |
| 17 | P4 工人 | 零新手势;超时有保底默认结局(不卡死不挨骂);DOCK 不替花资源;命令式短句 ✓ |
| 18 | P2 大学生 | S 评级追求+矿富线风险决策+支援演出+星港 build;死亡局功勋照入拉重开 ✓ |
| 19 | 台词规范 | 154 句 ≤160;全句 ≤40 字(实测 ≤35);数字全分档/句内写死;「重新听」写法;同角色 speaker+instruct 恒定 ✓(台词表) |
| 20 | 键盘通道 | V 组 10 变体集中登记,inputMode() 选播;方向键/空格/回车全手势可达(00 §5.5 平行通道,游戏层零改动)✓ |
| 21 | 引擎能力边界 | 无实时节点(告警/倒计时=SYN one-shot+setTimeout 调度);sfx 无 loop 需求;预 pan=派生资产;tap 只用于非即时下令;资产缺失 8s 兜底;30MB 预算内 ✓ |
| 22 | 密度下限(dungeon D0-3 教训) | 段计时/45s 自动线/超时默认结局三层硬推进——结构性无真空;每段 ≥1 危机+1 采集+(1-2)磨损事件 ✓ |
| 23 | **评级账目验算** | §8.4 剧本 A 十二行逐事件(score 19→S、功勋 15、三次跨档播报点实值核对)+§8.5 B 档+§8.6 失败路径——一条完整巡逻剧本验算入文档 ✓ |
| 24 | 台词 ≤40 字 | 台词表逐句实测 ≤38 字(最长 sys_help / sys_help_k 各 38)✓ |