- keeper:时空双线(风暴/老唱片签名+锚句)、回忆插叙固定时序、trust×truth 双标量、148 句 - bridge:四象限系统状态音(2.0s±50ms 逐毫秒可断言)、告警仲裁 R1-R8+双危机 7 场景穷举、危机事件卡、忠诚账本、154 句 - 13 号文档 §23 六款断言指针;README new8 索引补齐;章程进度账 8 款设计 ☑(批次 2 资产/开发 ▶ 进行中)
53 KiB
22 · 《星环舰长》完整设计(bridge / Star Ring Captain)
给开发者的实现要点摘要
- 舰桥指挥 RPG:核心动词=听声辨型后下令。四象限系统(引擎=舰尾低频/护盾=舰首中高/扫描=左舷 pan L/武器=右舷 pan R)各有专属 SYN 状态音(正常/受损/离线);危机事件(陨石群/海盗/求救/辐射云)以预 pan 签名音+固定模板方位句从四象限之一来袭,玩家在时限窗内左右滑听选项+单击下令(规避/迎战/硬闯/驰援/忽略 五个通用动词,选项句自带系统需求)。一局=4 巡航段(段=航线选择→巡航→危机→靠港整备),15-22 分钟。
- 常态静默/按需巡检的黄金折中(本作最大认知负荷风险):常态不播正常系统底噪(BGM 承担氛围),只有受损系统按仲裁规则发告警脉冲;正常系统状态由上滑巡检链按需播(四系统 2.0s 状态音固定顺序+固定间隔——SYN 合成,节奏逐毫秒可断言);离线=死寂+共用平线签名。
- 告警优先级仲裁+叠爆抑制(space 警报叠爆/R1 P4 被轰炸一分钟劝退教训):显式规则表 R1-R8——一次只响一条系统告警、轮转公平、600ms 叠爆去重、语音让路、危机窗静默无关告警、双危机 FIFO 排队、修复即止、菜单/结算全静默;§3.5 穷举 7 种并发场景(含双危机)。
- 手势宪法三件套全状态保留(上滑巡检/下滑菜单/双击重听);唯一豁免 E1=CRUISE 单击=重播最近告警(escape「检查」先例)。下令绑单击(非即时,12-20s 窗口无碍);无 immediateTap;长按非玩法输入,不开 E3 快进豁免(登记)。
- 账目真实三本账:忠诚(事件-忠诚影响表逐行差分,档位句=ledger band)、经济(每段采集/修理/奖励逐笔,档位句跨档才播)、评级(score 公式+一条完整巡逻剧本逐事件验算 §8.4-8.6)。REPORT 结算链 800ms 手势死窗+链锁(dungeon H1/detective VERDICT/teahouse CLOSE 同款)。
- 随机性全走 seed PRNG(mulberry32,
opts.seed注入):危机类型序(首局固定升难度序,之后洗牌+约束 S1≠辐射)、每场方位(方位还决定受殃系统)、求救陷阱 25%(首局恒无)、磨损系统、S4 双危机余波 40%(首局无)。同 seed 深相等。- 台词表 22-bridge-voice-ids.md:旁白 142 ×2 性别 + 船员 NPC 平铺 12(3 音色,与两侧旁白零重叠)= 154 句 ≤160 上限;操作提示句键盘变体
_k集中登记(V 组 10,gesture.inputMode()选播)。全句 ≤40 字(实测 ≤38)。- 规模对标 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。
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. 存档设计(跨局舰船成长)
{
"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 手势):
- 启动→TITLE(无档)→单击→DRILL:D0..D4 逐步 voice 序与 drillStep 递进;D0 巡检全链+tut_all_ok;D2 求救驰援成功链(pa_chime→warp→res_reward→loy_aid→doc_aid);首局 S1 超时路径零损失(学期零惩罚);下滑跳过+meta.drillDone 二周目不再进。
- seed 复现:seed=42 两次构造 → run.plan 深相等(类型序/方位/陷阱/磨损/余波);首局约束(固定序/无陷阱/无余波/S1 无磨损);非首局 S1≠辐射。
- 巡检链节奏断言(SYN 硬要求):全链 4 音按 引擎→护盾→扫描→武器 顺序播出、每音时长 2.0s±50ms、间隔 0.4s±50ms;scan 音资产左声道能量占比>90%(pan 断言);全 ok → tut_all_ok、无异常语音;每系统 dmg/off 各注入 → 对应 sys_* 句恰在对应 tone 后播出。
- 危机全类型路径:四类型各自完整走 检测链(签名 pan/尾音与方位一致:左舷=左声道、舰首=dir_bow)→类型句→方位句→决策窗→逐选项×逐系统态(ok/dmg/off 矩阵 §4.2 全组合注入)→结果句+账目差分(hull/RP/忠诚);超时=默认结局真话(陨石超时含工程师−1)。
- 仲裁规则断言(R1-R8 + §3.5 七场景逐一注入):双受损 3:1 轮转时序;同 id 600ms 去重;voice 播出期间告警零调度、结束后 +0.5s 恢复;决策窗内无关告警挂起;双危机:B 检测落在 A 窗内 → A 结算句+2s 前零 B 声、B 窗从 B 检测链起算;REPORT 进入告警清空;菜单冻结期零调度零倒计时。红线:任意时刻系统告警 ≤1 条(tick 除外)、两套签名零重叠。
- 忠诚账本:§5.1 表逐行注入 → crew 差分断言;clamp −3..+3;band 句=ledger(9 句全覆盖含边界 −2/+2);支援触发三成员(大副=海盗下令瞬间 band 判定、工程师/医师=段末条件)与缺席 sup_none 每局一次;大副离心战果降级。
- 评级验算:§8.4 剧本 A 逐事件注入 → score=19→rate_s、功勋 15、每个跨档播报点实值在区间(含 RP 回落双向);§8.5 剧本 B → score=12→B、医师离心档+支援缺席;§8.6 失败注入 → 死亡链序+die_cause=lastHit+die_adv 选择与 timeouts/offlineFails 一致+功勋折算。
- 经济:采集(稳妥/矿富×2/采集协议改装)、修理两级(离线→受损→ok 两笔 2 资源)、rep_poor、REPORT 折算 floor(RP/3);upg 六项价格/条件(armor2 依赖、port_poor、upg_done 不重复购买)与效果(armor 上限→st_hull 档按新比例、vet 开局+1、aegis 首伤−1 减至 0 无伤播报)。
- 看门狗:CRUISE 10s/25s、ROUTE 12s/30s+45s 自动稳妥、DOCK 15s/35s、第 2 级纯 nudge;DOCK 无进展 45/90/150 三级(L3 不替玩家花资源);DRILL 30/60/90 自动演示。
- 中断复述:存档重进 → sys_continue_ask→单击→落在当前段 ROUTE→复述链序(st_hull→最紧要异常→st_seg→recap_go);无异常时跳过异常句;上滑全链可重放。
- REPORT 死窗+链锁:进 REPORT 同拍与 +300ms 各补一记在途 tap → 均被吞;结算链完整有序(rep_open→rate_X→merit→settle_hook);链完单击=返航 TITLE;死亡链同款。
- 菜单:模态循环-确认-关闭;危机中开菜单 → 倒计时冻结(快进虚拟时钟断言零超时触发)→ 关闭重播当前选项句续走;「保存并回大厅」PUT data.summary 命中生成规则;「放弃本次巡逻」run 清空 meta 保留。
- 键盘变体:
settings.input='key'后播 sys_help_k/tut_d0_k/cr_decide_k/dock_open_k 等 V 组(inputMode 联动);'touch' 回基础句。 - 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)✓ |