diff --git a/docs/design/13-playtest-criteria.md b/docs/design/13-playtest-criteria.md index 3e5dbea5..52ce2a5c 100644 --- a/docs/design/13-playtest-criteria.md +++ b/docs/design/13-playtest-criteria.md @@ -763,8 +763,8 @@ R1 起每轮的增量断言(修复回归)在各自设计文档的轮次小 与 §20(radio/dungeon)同规:断言清单与实现核对**住各自设计文档**,随轮次原地维护;本文件只留指针。 -- abyss《深海回音》:[17-abyss.md](17-abyss.md) §断言(剧本 A-F 六路径/氧气门三形态/sonarGate/死窗/双轨看门狗/中断复述) -- detective《雨夜专案》:[18-detective.md](18-detective.md) §断言(seed 矛盾复现+矩阵不变式/指证三路径/评级账本/板导航/双轨/死窗) +- abyss《深海回音》:[17-abyss.md](17-abyss.md) §断言(剧本 A-F 六路径/氧气门三形态/sonarGate/死窗/双轨看门狗/中断复述/尾句保护首播制/链末看门狗不拆) +- detective《雨夜专案》:[18-detective.md](18-detective.md) §断言(seed 矛盾复现+矩阵不变式/指证三路径/评级账本/板导航/双轨/死窗/结案确认闸/选句记忆位/VERDICT 链锁实弹) - cipher《暗码》:[19-cipher.md](19-cipher.md) §断言(摩尔斯固定字符逐元素/四结局矩阵/三层兜底/暴露度档位/morseGate) - teahouse《深夜茶馆》:[20-teahouse.md](20-teahouse.md) §断言(泡茶三步时机窗/经济逐晚对账/弧线三方向/时机窗内 voice=0 分层) - keeper《守塔人》:[21-keeper.md](21-keeper.md) §断言(时空签名教学-兑现/插叙触发回返/trust×truth 档位/4 结局) @@ -779,7 +779,10 @@ R1 起每轮的增量断言(修复回归)在各自设计文档的轮次小 floor 干涸链)、声呐双通道仲裁(echo/pipe_knock 与 voice 零重叠 + sonarGate 排队)、教学承诺兑现清单 (金属=钢板/单击=脉冲/四潜/氧气门/扣三格/敲管/补给)、看门狗双轨(乱按 96s 必被抢救 + 有进展零打扰)、 结算链 800ms 手势死窗(dungeon H1 内化)、键盘 _k 变体按 inputMode 选播、pendingChoice/p* 不可跳、 - 中断复述、存档 schema。 + 中断复述、存档 schema。**R2 增量(2026-09-13,round1 synthesis F1-F10)**:ping 即时性(gd 散句在播时单击先掐后响)、 + 尾句保护认实际链尾(dyn 档位句纳入)+ 签收链死窗、回波 wait=实长+静默一拍、dv4_dual/oxy_crit_deck/prog_saved1..5 + 新句断言、叙事尾句首播保护+复播可即掐(G5)、full 档链末看门狗 [13,30]、danger 震 1100ms、crit 震按档去重。 + 详见 [17-abyss.md](17-abyss.md) §12 修订记录。 ## 22. 新游戏登记:《暗码》(cipher)(new8 批次 3) diff --git a/docs/design/17-abyss-voice-ids.md b/docs/design/17-abyss-voice-ids.md index 9d62fcd7..f2670e0f 100644 --- a/docs/design/17-abyss-voice-ids.md +++ b/docs/design/17-abyss-voice-ids.md @@ -39,8 +39,8 @@ | **`sys_help_k`** | 空格继续,回车重新听。上箭头听状态,下箭头开菜单。选择时,左右箭头。 | 同上(key) | | `sys_menu` | 菜单。单击切换选项,双击确认。 | 下滑呼出模态菜单 | | **`sys_menu_k`** | 菜单。空格切换选项,回车确认。 | 同上(key) | -| `sys_skip` | 想跳过这句,单击就行。 | 开场每局一次(skip_hint 先例) | -| **`sys_skip_k`** | 想跳过这句,按空格。 | 同上(key) | +| `sys_skip` | 听过的句子再播时,单击就能跳过。 | 开场每局一次(skip_hint 先例;R2-F6 改词,见文末修订记录) | +| **`sys_skip_k`** | 听过的句子再播时,按空格跳过。 | 同上(key) | | `sys_continue_ask` | 检测到你的下潜记录。单击继续上次,右滑开始新救援。 | 有存档进游戏 | | **`sys_continue_ask_k`** | 检测到你的下潜记录。空格继续上次,右箭头开始新救援。 | 同上(key) | @@ -60,10 +60,16 @@ | `prog_d2` | 现在是第二次下潜。 | 同上 | | `prog_d3` | 现在是第三次下潜。 | 同上 | | `prog_d4` | 现在是最后一次下潜。 | 同上 | +| `prog_saved1` | 已经救上一个人。 | 上滑状态链·已救人数(R2-F10,saved=1) | +| `prog_saved2` | 已经救上两个人。 | 同上(saved=2) | +| `prog_saved3` | 已经救上三个人。 | 同上(saved=3) | +| `prog_saved4` | 已经救上四个人。 | 同上(saved=4) | +| `prog_saved5` | 五个人都在甲板上了。 | 同上(saved=5;saved=0 不播人数句) | | `oxy_full` | 气瓶还足,救得动。 | 氧气 ≥9(跨档时挂上浮结算链;上滑状态链) | | `oxy_ok` | 氧气还够两潜。 | 氧气 6-8(floor(oxy/3)=2,句义逐格为真) | | `oxy_low` | 氧气告急,只够最后一潜。 | 氧气 3-5;此后垫 sfx/breath_loop | -| `oxy_crit` | 氧气见底,必须上浮。 | 氧气 0-2;各播报位附 warning 震 | +| `oxy_crit` | 氧气见底,必须上浮。 | 氧气 0-2·**水下**(DIVE/COMMS);各播报位附 warning 震 | +| `oxy_crit_deck` | 氧气见底,一潜都下不去了。 | 氧气 0-2·**水面**(SURFACE/ENDING;R2-F5,句义=floor(0..2/3)=0 潜,逐格为真) | | `oxy_gain` | 应急瓶接上了,多三格。 | D2 上浮后补给(全局唯一一次) | | `dry_a` | 气瓶用干了。立刻上浮。 | mid-dive 氧气 floor 至 0,干涸链首句 | | `dry_b` | 气花在了人身上。人,都上来了。 | 干涸链归因句(真话:气耗在走心选择上) | @@ -153,6 +159,7 @@ | `dv4_none` | 调度 | 气不够一潜了。第四潜,取消。 | **氧气门·取消形态**(oxy≤2;800ms 手势死窗) | | `gao_final` | 高船长 | 别下来。带他们回家,就算救完了。海燕号,通话结束。 | 取消链·船长的最后通讯(随后直达 ◆p9) | | `dv4_down` | 调度 | 最后一潜,指挥舱。海燕号,撑不住了。 | 下潜链(双载/单载共用) | +| `dv4_dual` | 调度 | 两个人下同一潜。这趟往返,扣四格气。 | 下潜链·**仅双载形态**追加(R2-F4:D4 双载 3+1 扣账口播,不再无声扣款) | | `dv4_slide` | 调度 | 它滑了!抓稳索缆,指挥舱里还有人! | 搜索危机拍(**danger 签名+landslide 前置 2s 渐强+danger 震**) | | `gao_a` | 高船长 | 救援员。我船上,还剩两个活人。 | 通话主干 | | `gao_b` | 高船长 | 都带走,我最后上。这是船长的规矩。 | 通话主干 | @@ -218,10 +225,10 @@ --- -**合计:148 句**(GPU 预算 ≤170 ✓) -- 双性别 127 句(DIVER 潜航员 30 + DECK 调度/系统 97,含 `_k` 键盘变体 11)×2 性别 = 254 文件; +**合计:155 句**(GPU 预算 ≤170 ✓;R2 修订后) +- 双性别 134 句(DIVER 潜航员 30 + DECK 调度/系统 104,含 `_k` 键盘变体 11)×2 性别 = 268 文件; - NPC 平铺 21 句(小舟 5 / 老白 4 / 陈医官 5 / 高船长 7)= 21 文件; -- 合计 275 条音频 ×2 格式(ogg+m4a)= **550 文件**。 +- 合计 289 条音频 ×2 格式(ogg+m4a)= **578 文件**。 - 键盘变体 11 对:gd_brief / gd_continue / gd_again / gd_ping1 / gd_ping2 / sys_help / sys_menu / sys_skip / sys_continue_ask / dv1_teach / p1(成对生成,`check_all_assets` 校验 `_k` 配对与双性别集合一致)。 - 每结局专属台词齐备:e1/e2/e3/e4 各 2 句 + 尾声回响 14 句(好感/存活/flag 选播)。 - 每局实走抉择 7-9 个(p7 单载右路跳过 p8;D4 取消路径跳过 p7/p8),抉择提示 p1..p9 共 9 个。 @@ -249,3 +256,14 @@ - 归因真话律:负向收尾句(dry_b / gao_final / chen_last / d4_stay_lost / gao_last / ep_*_lost / e4_b)全部指向玩家实际选择或真实处境,无「运气不好」类假归因、无惩罚性措辞 ✓。 - 向导 gd_* 13 句(gd_brief/gd_continue/gd_again/gd_ping1/gd_ping2 各带 _k 变体,gd_invalid/gd_prog1/gd_prog2 无变体)符合 14 号 §6 台词规范(一句一义、无重复句式、单句 ≤18 字)✓。 - 氧气档位句与数值一一对应(oxy_full≥9 / ok=6-8 / low=3-5 / crit=0-2,均按 floor(oxy/3) 可下潜次数措辞),账目真实 ✓。 + +## R2 修订记录(2026-09-13,依据 research/new8/abyss/round1/synthesis.md) + +| # | 改动 | 依据 | +|---|---|---| +| R2-F4 | 新增 `dv4_dual`(双性别,仅双载形态下潜链追加):D4 双载起播 3+1=4 格扣账口播化 | R1 P1 心算账对不上耳朵(无声扣款) | +| R2-F5 | 新增 `oxy_crit_deck` 水面变体;`oxy_crit` 限水下场景 | R1 crit「必须上浮」在甲板播出=错场景措辞(档位表原注「水面=一潜都下不去」义落地) | +| R2-F6 | `sys_skip`/`sys_skip_k` 改词:「听过的句子再播时,单击/按空格就能跳过」——与 G5 复播可即掐(首播保护)机制对齐 | R1 live P1-2:旧词「想跳过这句,单击就行」在 F5 首播保护下名存实亡 | +| R2-F10 | 新增 `prog_saved1..5`(双性别):上滑状态链 G6 顺序改为 潜次→已救人数→氧档→帮助;saved=0 不播 | R1 P3:被打断后要捡回「船上躺着谁」 | + +以上四组为新增/改词;其余裁定(148 句中未改词的 146 句原文、触发条件、滤波参数)不变。 diff --git a/docs/design/17-abyss.md b/docs/design/17-abyss.md index 472dc2b6..4f46e338 100644 --- a/docs/design/17-abyss.md +++ b/docs/design/17-abyss.md @@ -488,3 +488,32 @@ ENDING: e*_a → e*_b(按 savedCount × p9 四选一)→ ep_lead → ep_*( | 档位措辞真实 | §4.3 档位=floor(oxy/3) 可下潜次数,句义逐格为真 | §9「氧气账目真实」块 | | 失败结算链完整不被打断 | 800ms 手势死窗盖取消链/干涸链/结局链;seqToken 作废在途链 | §9「结算链死窗」块 | | PC 键盘操作提示 | 11 对 _k 变体+inputMode() 选择+集中分组标注 | §9「键盘变体」块 | + +## 12. R2 修订记录(2026-09-13,依据 research/new8/abyss/round1/synthesis.md) + +> 追加记录,不改旧裁定;凡本节与上文冲突,以本节为准。全部改动已落地 web/abyss/game.js,断言增量见文末注记。 + +| # | 旧裁定 | 新裁定(R2 起生效) | 依据 | +|---|---|---|---| +| R2-F1 | 玩家脉冲走 sonarGate 空闲门(§6.2 R1 按构造不重叠) | 玩家脉冲**先于门**:搜索等待态 voice 层只可能是向导散句(gd_ping*/gd_prog*),单击发脉冲时先掐散句、ping 立即出音。信息类回波仍走空闲门不变 | live R1 P1-1:ping 迟到 12~17s「回波先于脉冲」(3/5 复现),教学潜核心承诺错序 | +| R2-F2 | F5 尾句保护按 \_nodeSteps 重算尾句;签收链无死窗 | 尾句保护改认**实际播放链尾**(dyn 注入的档位句纳入保护:档位句不可被单击掐断);签收链(g9_in)入口盖 800ms 死窗(与取消/干涸/结局链同款) | live R1 P1-3:oxy_low 播 0.71s 被掐、g9_in 被在途 tap 剁到 0.28s | +| R2-F3 | 回波 wait 常数 2200/2600/4000ms | W_Metal/W_Knock/W_Groan = 3300/3500/5000ms(资产实长 2.76/2.96/4.42s + 静默一拍),兑现 §6.2 R2「回波→静默一拍→解读」。玩家单击仍可快进回波余音(_sonarSkip 不变) | live R1 P2-1 + P1 评审:回波尾巴压解读句开头 0.35~0.55s,定位一拍被吃 | +| R2-F4 | D4 双载额外 +1 不口播 | 双载形态下潜链追加 `dv4_dual`「两个人下同一潜。这趟往返,扣四格气。」(3+1=4 扣账口播化) | R1 P1:心算账 12−3−3+3−3−3=3 与耳朵听到的 crit 档差一格 | +| R2-F5 | crit 档全场景播「氧气见底,必须上浮。」 | 水面场景(SURFACE/ENDING)播新句 `oxy_crit_deck`「氧气见底,一潜都下不去了。」;水下(DIVE/COMMS)保留原句。档界 floor(oxy/3)=0 不变,两句各自逐格为真 | R1 P1:人已出水后「必须上浮」是说错地点的正确话 | +| R2-F6 | G5「首播必完整、复播可即掐」(§2.3):实现只兑现前半句(尾句保护为永久态) | 非 auto 叙事节点尾句保护改**首播制**:链自然播完登记 `_tailHeard`,此后该节点重播(菜单/状态复述)尾句可单击跳过;auto 过场尾句、直入抉择尾句、p* 提示、F4 锁恒保护不变。sys_skip(_k) 同步改词(见 voice-ids R2-F6) | live R1 P1-2:跳句承诺名存实亡(B 局全程零句可跳);radio F5 吃尾根因由首播保护继续挡住 | +| R2-F7 | 叙事链末/ENDING 无操作轨 full [25,50] / standard [13,30](§7.2) | full 档对齐 standard:**[13,30]**(搜索 [10,25]、抉择点 [25,50]、无进展轨 60/120s 不变) | R1 P2+P3:接通小舟后 25s 静默掐在钩子落地上(走神/怀疑锁屏) | +| R2-F8 | D4 danger 震循环 500ms(§5.2,≥400ms) | **1100ms**(危机拍 4s 窗内约 4 遍;≥400ms 下限仍满足) | R1 P2+P4:4 秒约 10 连震,贴身躺玩/年长者过刺激 | +| R2-F9 | 状态链每逢 crit 档附 warning 震(G2) | 按「进入 crit 档」去重:档不变复听不重复震;s_tier 跨档播报位的 warning 震保留 | R1 P4:压力局摸状态十几回,回回挨三连震 | +| R2-F10 | 状态链 = 潜次 → 氧档 → 帮助(G6) | 状态链 = 潜次 → **已救人数(prog_saved1..5,saved=0 不播)** → 氧档 → 帮助 | R1 P3:被打断后捡局面缺「船上躺着谁」 | + +### §9 断言增量(R2 登记,已随 playtest.mjs 落地) +- F1:gd 行在播(stub 引擎在播)时搜索单击 → sonar_ping 立即起播且 gd 行被掐(不再入队迟到)。 +- F2:档位句(oxy_* dyn 注入)播放中单击不跳(beat 轻震);SURFACE(4)→g9_in 过场 800ms 内在途 tap 被吞、签收链完整。 +- F3:回波起播→解读句起播间隔 ≥ 对应 wait 常数量级(含静默一拍)。 +- F4:双载 D4 播 dv4_dual;单载/取消不播。 +- F5:SURFACE 的 crit 播报 = oxy_crit_deck;水下状态链 crit = oxy_crit。 +- F6:首播中叙事尾句单击不跳;链自然播完后经菜单复述重播,尾句单击即跳(复播可即掐)。 +- F7:full 档 COMMS 链末 13s→gd_continue、30s→gd_again(原 25s/50s 断言同步改 13s/30s)。 +- F8:D4 危机拍 danger 震间隔 ≥1000ms(实测 = 1100ms)。 +- F9:同档 crit 期间连续两次上滑状态链,warning 震仅一次。 +- F10:状态链含 prog_savedN 且 N=当前 savedCount;顺序 潜次→人数→氧档→帮助。 diff --git a/docs/design/18-detective-voice-ids.md b/docs/design/18-detective-voice-ids.md index f2b89794..b2a56a59 100644 --- a/docs/design/18-detective-voice-ids.md +++ b/docs/design/18-detective-voice-ids.md @@ -1,11 +1,14 @@ # 18b · 《雨夜专案》语音台词表(voice ids,录音依据) +> **R2 修订(2026-09-13)**:总句数 158→**171**(旁白基表 96→104、V 组键盘变体 10→14、NPC 52→53),上限裁定 160→176;改词 2 句(fin_who_confirm/tut_skip);新增 13 个录制单位(基表 8:fin_pre、st_wrong、recap_cf、gd_board_cf、item_who_w1..w4;NPC 1:z_react_w;V 组 4 对)。逐条修订理由见主设计文末「R2 修订记录」(research/new8/detective/round1/synthesis.md F1-F11)。 +> **实测句长登记**(F1 配套):male/intro_1 8.80s、male/sys_help 9.28s、male/key/sys_help 10.48s、female/key/sys_help 9.52s 四句超 8s——游戏侧兜底已升 15s(§4.3),证词链全部 ≤7.4s 不受影响;如重录这 4 句请保持内容不变。 + > **给音频总监的录制说明** -> - **旁白双性别组**(106 句):旁白只做系统/指引/教学/状态/现场勘验(探长自勘)/裁决宣读,**不念证词**。落 `web/detective/audio/voice/female|male/.{ogg,m4a}`,两性别 id 集合完全一致。 +> - **旁白双性别组**(基表 104 句 + V 组键盘变体 14 句):旁白只做系统/指引/教学/状态/现场勘验(探长自勘)/裁决宣读,**不念证词**。落 `web/detective/audio/voice/female|male/.{ogg,m4a}`,两性别 id 集合完全一致。 > - female = `Serena`,instruct 常量:`沉稳清晰的女声,专案组探长,冷静克制,像在雨夜读卷宗` > - male = `Uncle_Fu`,instruct 常量:`低沉沉稳的男声,专案组探长,冷静克制,像在雨夜读卷宗` > - 两常量全表统一(含教学/指证/结案/结算),禁止句级变体、禁语速词(引擎 SoundTouch 变速)。 -> - **NPC 平铺组**(52 句):证词=证人 NPC 平铺单音色、**不做双性别**,落 `web/detective/audio/voice/.{ogg,m4a}`(引擎平铺回退命中)。NPC ≤5;同一角色 speaker+instruct 恒定;**不加电话滤波**(区别于 radio——本作区分度靠 speaker+instruct+游戏侧签名 earcon `sig_*` 前缀,见主设计 §8.2/§3.7)。区分度风险逐个标注: +> - **NPC 平铺组**(53 句):证词=证人 NPC 平铺单音色、**不做双性别**,落 `web/detective/audio/voice/.{ogg,m4a}`(引擎平铺回退命中)。NPC ≤5;同一角色 speaker+instruct 恒定;**不加电话滤波**(区别于 radio——本作区分度靠 speaker+instruct+游戏侧签名 earcon `sig_*` 前缀,见主设计 §8.2/§3.7)。区分度风险逐个标注: > | 角色 | speaker | instruct 常量 | 区分度风险 | > |---|---|---|---| > | 老葛(62 岁门卫) | `Eric` | `苍老沙哑的男声,守夜人,慢悠悠,带倦意` | 低 | @@ -51,7 +54,7 @@ | `tut_cf_try` | 练习一次。选一份证词,单击确认;再选一份,任意一句。 | D5(判定被教学截获) | | `tut_cf_ok` | 指证就是这样。练习不算数,真矛盾要靠耳朵找。 | D5 完成(success 震) | | `tut_done` | 教学完了。开始查案。 | D6(进 BOARD) | -| `tut_skip` | 已跳过教学。左右滑换卷宗,单击听取。 | 下滑跳过教学 | +| `tut_skip` | 已跳过教学。左右滑换卷宗,单击听取;按住屏幕,指证矛盾。 | 下滑跳过教学(**R2 F10 改词**:补「按住=指证」核心动词;旧词「已跳过教学。左右滑换卷宗,单击听取。」作废) | ## G2 组 · 状态/条目(旁白 ×20) @@ -102,13 +105,19 @@ | `cf_diff` | 这两句,说的不是一件事。 | 判定:无共享轴(真话) | | `cf_hit` | 对不上!矛盾成立,记入疑点。 | 判定:命中(contra_hit 音先响) | -## G5 组 · 结案三问(旁白 ×18) +## G5 组 · 结案三问(旁白 ×24,R2 起 +fin_pre/item_who×4/st_wrong) | id | 台词全文 | 触发/语境 | |---|---|---| -| `fin_start` | 结案陈词。先指认真凶:四位证人,选一个。 | 进 FINISH(choice earcon) | -| `fin_who_confirm` | 就指认他?单击,定下来。 | 真凶问两段确认(重播选项名后接播) | +| `fin_start` | 结案陈词。先指认真凶:四位证人,选一个。 | 进 FINISH(choice earcon;R2 F5 起经 fin_pre 闸) | +| `fin_pre` | 证据在手,就此结案?单击,定下来;滑走,继续查。 | **R2 F5 新增**:结案确认闸(证词板停「结案陈词」首击播,闸内再击进三问;键盘态播 fin_pre_k) | +| `item_who_w1` | 门卫老葛。 | **R2 F4 新增**:真凶问选项=纯人名(原念卷宗名「门卫老葛的证词。」语义错位) | +| `item_who_w2` | 学徒小顺。 | 同上 | +| `item_who_w3` | 账房周先生。 | 同上 | +| `item_who_w4` | 房东温太太。 | 同上 | +| `fin_who_confirm` | 就指认这位?单击,定下来。 | 真凶问两段确认(重播人名后接播;**R2 F4 改词中性化**:旧词「就指认他?」对温太太为假,作废;键盘态播 fin_who_confirm_k,R2 补登记) | | `fin_clear` | 不在场证明成立。证据放人,回到证词板。 | 指认错(acc_NPC 句后接播;无限再机会) | +| `st_wrong` | 错指一回,记档。 | **R2 F9 新增**:错指链尾当场记账(fin_clear 后接;评级账目当场可闻) | | `fin_right` | 证据链闭合。周先生,你还有什么话说? | pack A 指认对 → 认罪链起(rain_swell 同点) | | `fin_right_b` | 证据链闭合。小顺,你还有什么话说? | pack B 指认对 | | `fin_ask_weapon` | 第二问:凶器是什么? | 凶器问入口 | @@ -139,11 +148,12 @@ | `st_miss_2` | 指证,错了不少。 | ≥3 次 | | `settle_hook` | 同一场雨里,还有别的案子。单击,接新案。 | 结算尾(链锁解除后单击生效;键盘态播 settle_hook_k) | -## G7 组 · 看门狗/卡关/纠错(旁白 ×12) +## G7 组 · 看门狗/卡关/纠错(旁白 ×14,R2 起 +gd_board_cf/recap_cf) | id | 台词全文 | 触发/语境 | |---|---|---| -| `gd_board` | 还在证词板。左右滑,换卷宗。 | BOARD 无操作轨第 1 级(10s,full,idle-only) | +| `gd_board` | 还在证词板。左右滑,换卷宗。 | BOARD 无操作轨第 1 级(10s,full,idle-only;未听齐时用) | +| `gd_board_cf` | 都听过了。按住屏幕,去指证。 | **R2 F6 新增**:六份听齐且疑点未齐时的 BOARD 一级提示(此情「换卷宗」是错指令;键盘态播 gd_board_cf_k) | | `gd_cf` | 还在选证词。左右滑,单击确认。 | CONFRONT 无操作轨第 1 级(15s) | | `gd_fin` | 在想?左右滑选,单击定。 | FINISH 三问无操作轨第 1 级(20s) | | `gd_invalid` | 这个操作,这里用不上。 | 无效手势纠错(onceKey 同局 1 次) | @@ -153,10 +163,11 @@ | `hint_c2` | 试试指证:周先生说铜秤卖了,现场铜秤还在。 | L3(M4 保底) | | `b_hint_c1` | 试试指证:小顺说熄了灯,温太太说灯还亮着。 | pack B L3(M1b 保底) | | `b_hint_c2` | 试试指证:小顺说铜秤卖了,现场铜秤还在。 | pack B L3(M4b 保底) | -| `hint_fin` | 疑点齐了。去结案陈词。 | 4 疑点齐(一次)/ 无进展轨 L3(疑点齐时) | -| `recap_go` | 接着查。 | 中断复述链尾 | +| `hint_fin` | 疑点齐了。去结案陈词。 | 4 疑点齐(一次)/ 无进展轨 L3(疑点齐时)/ R2 F11 起 L2 疑点齐时同用 / R2 F6 起状态链尾(疑点齐时)同用 | +| `recap_go` | 接着查。 | 中断复述链尾(未听齐时) | +| `recap_cf` | 卷宗都在耳朵里了。挑一句你不信的,按住指证。 | **R2 F6 新增**:状态链/复述链尾(六份听齐且疑点未齐时替换 recap_go;键盘态播 recap_cf_k) | -## V 组 · 键盘变体(旁白 ×10;`gesture.inputMode()==='key'` 时替代同名基础句) +## V 组 · 键盘变体(旁白 ×14;`gesture.inputMode()==='key'` 时替代同名基础句) | id | 替代基础句 | 台词全文 | |---|---|---| @@ -170,6 +181,10 @@ | `cf_pick_line_k` | cf_pick_line | 左右方向键,一句一句听。 | | `cf_confirm_k` | cf_confirm | 就这句?空格,定下来。 | | `settle_hook_k` | settle_hook | 同一场雨里,还有别的案子。按空格,接新案。 | +| `fin_pre_k` | fin_pre | 证据在手,就此结案?空格,定下来;方向键,继续查。 | +| `fin_who_confirm_k` | fin_who_confirm | 就指认这位?空格,定下来。 | +| `recap_cf_k` | recap_cf | 卷宗都在耳朵里了。挑一句你不信的,按住空格指证。 | +| `gd_board_cf_k` | gd_board_cf | 都听过了。按住空格,去指证。 | ## N1 组 · 老葛证词(NPC Eric 平铺 ×6,sig_ge 前缀,链播句间 0.8s) @@ -225,14 +240,17 @@ | `fo_4` | 死者双手干净,没有搏斗痕迹。 | struggle=none | | `fo_5` | 鞋底是干的。当夜,死者没出过后门。 | 无 | -## N6 组 · 反应/被指认/认罪(NPC 平铺 ×11) +## N6 组 · 反应/被指认/认罪(NPC 平铺 ×12) + +> **R2 F3 修订**:hit 反应句**按所坐实矛盾的轴取句**(原「按累计次数递进」作废——换顺序坐实会答非所问)。pack A 映射:lamp→z_react_1 / key→z_react_2 / weapon→z_react_w(新增)/ scale→z_react_3;疑点 4/4 的一发在轴句后追加收官句 z_react_4。pack B:lamp→b_shun_react_1、其余轴→b_shun_react_2。 | id | 声部 | 台词全文 | 触发/语境 | |---|---|---|---| -| `z_react_1` | 周先生 | 灯?……许是我记岔了。人上了岁数,记性不济。 | 真凶第 1 处矛盾坐实 | -| `z_react_2` | 周先生 | 钥匙的事……他、他有时候,也贴身带着的…… | 第 2 处 | -| `z_react_3` | 周先生 | 秤!秤的事,你们别再问了…… | 第 3 处 | -| `z_react_4` | 周先生 | ……随你们怎么问。我要回去了。 | 第 4 处 | +| `z_react_1` | 周先生 | 灯?……许是我记岔了。人上了岁数,记性不济。 | lamp 轴矛盾坐实(M1) | +| `z_react_2` | 周先生 | 钥匙的事……他、他有时候,也贴身带着的…… | key 轴(M2) | +| `z_react_w` | 周先生 | 铜器?……我那是顺口猜的。凶器的事,我怎么会知道。 | **R2 F3 新增**:weapon 轴(M3)——慌在刚戳中的凶器上(他本不该知道凶器什么样) | +| `z_react_3` | 周先生 | 秤!秤的事,你们别再问了…… | scale 轴(M4) | +| `z_react_4` | 周先生 | ……随你们怎么问。我要回去了。 | 疑点 4/4 收官句(轴句后追加) | | `acc_ge` | 老葛 | 我守了一夜门!温太太来借热水,她能作证! | 错指老葛 | | `acc_shun` | 小顺 | 我宿在城南刘掌柜家,他全家都能作证! | 错指小顺(pack A) | | `acc_wen` | 温太太 | 我这把年纪翻墙?先问问那墙答不答应! | 错指温太太 | @@ -260,9 +278,10 @@ --- -**合计:158 句 ≤160 上限**(旁白 106 ×2 性别 = 212 条 + NPC 平铺 52 条 = **264 条音频** ×2 格式 = 528 文件)。 -分组账:G0 11 + G1 12 + G2 20 + G3 6 + G4 8 + G5 18 + G6 9 + G7 12 + V 10 = 106(旁白);N1-N5 29 + N6 11 + N7 12 = 52(NPC)。 -指证命中链 = `contra_hit(sfx)→ cf_hit → react_n`;miss 链 = `contra_miss(sfx)→ cf_same/cf_diff/cf_self`; +**合计:171 句 ≤176 上限(R2 修订,原 158 ≤160 作废)**(旁白基表 104 句 ×2 性别 = 208 条 + 键盘变体 V 组 14 句 ×2 性别 = 28 条 + NPC 平铺 53 条 = **289 条音频** ×2 格式 = 578 文件)。 +分组账:旁白基表 104 = G0 11 + G1 12 + G2 20 + G3 6 + G4 8 + G5 24(18 + fin_pre + item_who×4 + st_wrong)+ G6 9 + G7 14(12 + gd_board_cf + recap_cf);V 组 14(10 + fin_pre_k + fin_who_confirm_k + recap_cf_k + gd_board_cf_k);NPC 53 = N1-N5 29 + N6 12(11 + z_react_w)+ N7 12。 +指证命中链 = `contra_hit(sfx)→ cf_hit → react_按轴(4/4 追加 reactFinal,R2 F3)`;miss 链 = `contra_miss(sfx)→ cf_same/cf_diff/cf_self`; 认罪链(pack A)= `fin_right → z_break_1..3 → gavel → settle_open → rate_X → st_doubt_n → st_miss_档 → settle_hook`; -状态链 = `st_asked_n → st_doubt_m`;中断复述链 = `st_asked_n →(未听 ≤3 时)item_* 名链 → st_doubt_m → recap_go`。 +状态链 = `st_asked_n → st_doubt_m →(尾句:recap_go / recap_cf(听齐未破,R2 F6)/ hint_fin(疑点齐,R2 F6))`;中断复述链 = `st_asked_n →(未听 ≤3 时)item_* 名链 → st_doubt_m → 同尾句`; +错指链 = `acc_NPC → fin_clear → st_wrong(R2 F9)`;结案入口 = `fin_pre 闸(R2 F5)→ fin_start`。 矩阵验算与触发逻辑对照 [18-detective.md](18-detective.md) §3-§7;资产规模核对见其 §8。 diff --git a/docs/design/18-detective.md b/docs/design/18-detective.md index 96cd4a74..ec4c6e0b 100644 --- a/docs/design/18-detective.md +++ b/docs/design/18-detective.md @@ -5,7 +5,7 @@ > 2. 手势:证词板左右滑换条目、单击听取/停止、**双击=重听当前句**(证词按句切分,单句 ≤8s,链播句间 0.8s——≤40s 听觉负荷以「句粒度可停可重听」兑现)、上滑状态链(已问几份/疑点几处)、下滑菜单(无豁免)、**长按=进入指证**(仅限无声空闲时受理,与长按快进零冲突,豁免 E1/E2 登记 §2.6)。指证/结案菜单走「左右滑预览+单击两段确认」非模态范式,双击保持全局重听语义——**全游戏零手势偏离,仅 2 条已教学豁免**。 > 3. 单局 15-25 分钟;结案=三问(真凶/凶器/动机),指认错误有不在场证明复述+真话归因+无限再机会,**无惩罚性失败,案子保底必结**(无进展轨看门狗三级提示最终直接给出可指证的矛盾对)。评级 S-C 账目全部真实(疑点数/冗余指证分档播报,播报值=运行值)。 > 4. 随机性全走种子 PRNG(mulberry32,`opts.seed`/`opts.pack` 可注入):选案包(pack A 周先生真凶 / pack B 小顺真凶——同模板同证词骨架、fork 句替换)、洗牌只动 filler 句位与问题选项顺序、提示轮询顺序。**矩阵不变式:全案卷「同轴异值」语句对集合 ≡ 预设计矛盾表**(dev 断言 + playtest 断言双保险)。 -> 5. 台词表 [18-detective-voice-ids.md](18-detective-voice-ids.md):旁白 106 句 ×2 性别 + NPC 平铺 52 句 = **158 句 ≤160 上限**;操作提示句带键盘变体(`_k` 后缀,`gesture.inputMode()` 选播,V 组集中登记)。 +> 5. 台词表 [18-detective-voice-ids.md](18-detective-voice-ids.md):旁白基表 104 句 ×2 性别 + 键盘变体 V 组 14 句 ×2 性别 + NPC 平铺 53 句 = **171 句 ≤176 上限**(R2 修订:158→171,新增 13 个录制单位见文末 R2 修订记录;原裁定「158 ≤160」作废,新上限 176);操作提示句带键盘变体(`_k` 后缀,`gesture.inputMode()` 选播,V 组集中登记)。 > 6. 规模对标 radio:单文件 game.js 预计 900-1100 行;bgm 3 + sfx 12 + voice 264 条(×2 格式 = 528 文件)。裁决仪式链不可打断(VERDICT 态 800ms 手势死窗 + 链锁,dungeon H1 同款)。 --- @@ -28,14 +28,14 @@ BOARD 分**空闲**(无语音在播)与**播放**(条目链播中)两个 |---|---|---| | 左滑 | 上一条目(循环):签名 earcon + 条目名 | 静默忽略(纯聆听保护,simon playback 先例) | | 右滑 | 下一条目(循环):签名 earcon + 条目名 | 静默忽略 | -| 单击 | 播放当前条目(从首个未听句起,听过的整体重听) | **停止播报**,回空闲 | -| 双击 | 重听当前条目最后一句 | **重听当前句**(≤8s,免费零消耗) | +| 单击 | 播放当前条目(从首个未听句起,听过的整体重听);**停在「结案陈词」时=进确认闸(fin_pre),闸内再单击才进 FINISH,滑走撤闸留板(R2 F5)** | **停止播报**,回空闲 | +| 双击 | 重听当前条目最后一句(闸内=重听闸句 fin_pre) | **重听当前句**(≤8s,免费零消耗) | | 上滑 | 状态链(§2.5) | 状态链(打断证词;双击可重听当前句) | | 下滑 | 模态菜单(§2.4) | 模态菜单(打开即停播报) | | 长按 | **进入指证**(CONFRONT;仅空闲受理) | 引擎快进(旁白 1.7×,保持默认,不豁免) | | 长按松开 | — | 恢复常速 | -条目共 7 项:老葛证词 → 小顺证词 → 周先生证词 → 温太太证词 → 现场勘验 → 法医报告 → 结案陈词。每项播报=专属签名 earcon(0.3-0.5s,§8.2)+ 条目名整句;切到「结案陈词」+单击 → FINISH。 +条目共 7 项:老葛证词 → 小顺证词 → 周先生证词 → 温太太证词 → 现场勘验 → 法医报告 → 结案陈词。每项播报=专属签名 earcon(0.3-0.5s,§8.2)+ 条目名整句;切到「结案陈词」+单击 → **确认闸(fin_pre「证据在手,就此结案?单击,定下来;滑走,继续查。」),闸内再单击 → FINISH**(R2 F5:循环列表必经站,单击直坠三问的误闯代价太大——R1 压力线实测误闯 6-7 次)。 ### 2.2 指证(CONFRONT)与结案(FINISH)——同一导航范式 @@ -43,12 +43,12 @@ BOARD 分**空闲**(无语音在播)与**播放**(条目链播中)两个 | 手势 | CONFRONT(选证词对) | FINISH(三问) | |---|---|---| -| 左/右滑 | 切换:选条目阶段=6 证词条目(同 2.1 循环);选句阶段=上一句/下一句(播该句全文) | 切换选项(播选项名) | -| 单击 | ①选条目阶段=确认条目 → 进选句;②选句阶段=进入确认(重播该句+`cf_confirm`);③确认态=**定下这句**(第一份选定后自动进第二份,流程同前;第二份定下 → 判定) | 凶器/动机问:确认选项即答题;真凶问:进入确认(`fin_who_confirm` 重播+确认,二次单击定下=正式指认) | +| 左/右滑 | 切换:选条目阶段=6 证词条目(同 2.1 循环);选句阶段=上一句/下一句(播该句全文;**R2 F7:每条目记忆上次预览/定下位置,进选句从记忆位起播,不再回回从第一句扫**) | 切换选项(播选项名;**R2 F4:真凶问播纯人名 item_who_w1..w4**,不再念「……的证词」卷宗名) | +| 单击 | ①选条目阶段=确认条目 → 进选句;②选句阶段=进入确认(重播该句+`cf_confirm`);③确认态=**定下这句**(第一份选定后自动进第二份,流程同前;第二份定下 → 判定) | 凶器/动机问:确认选项即答题;真凶问:进入确认(`fin_who_confirm` 重播+确认,二次单击定下=正式指认;**R2 F4:确认句中性化「就指认这位?」**——原「就指认他?」对温太太为假) | | 双击 | 重听当前预览句(宪法语义保留) | 重听当前问句/选项 | | 上滑 | 状态链(简版:疑点数) | 同左 | | 下滑 | 菜单(可「返回证词板」退出指证) | 菜单 | -| 长按 | error 震(选择语境不作输入) | error 震 | +| 长按 | **选句相位(语音在播)=引擎快进(R2 F7,宪法内加速通道;空闲=error 震)**;条目/确认相位=error 震(选择语境不作输入) | error 震 | 指证判定结果(§3.5)播出后自动回 BOARD 空闲。全程无倒计时、无尝试次数上限。 @@ -195,7 +195,7 @@ judge(a, b): 每次判定(无论中未中)→ cfMiss 判定计数、自动回 BOARD;无资源惩罚、无次数上限 ``` -- hit 反应句按真凶**累计被坐实次数**取 z_react_1..4(递进:记岔了→支吾→拒绝→想走),声音演技核心段;pack B 用 b_shun_react_1..2(第 3/4 次复用 react_2)。 +- hit 反应句**按所坐实矛盾的轴取句**(R2 F3 修订;原裁定「按真凶累计被坐实次数取 z_react_1..4 递进」作废——按次数取句在换顺序坐实时答非所问,属演绎层假话,R1 人设 P1 实锤):pack A 映射 {lamp: z_react_1(灯), key: z_react_2(钥匙), weapon: z_react_w(铜器,R2 新增), scale: z_react_3(秤)};疑点 4/4 坐实的一发在轴句后追加收官句 z_react_4(逐客);pack B 用 {lamp: b_shun_react_1, 其余: b_shun_react_2}(弱绑定非轴假话),收官句同 b_shun_react_2 不重复。递进弧线由同序轴句的内容梯度 + 收官句承担,声音演技核心地位不变。 - 疑点 4/4 齐时播一次 `hint_fin`(引导去结案);疑点数进状态链与存档,账目同源。 ### 3.6 归因真话律(指证/指认双处) @@ -242,13 +242,13 @@ start ──> TITLE ──单击(有档)──> BOARD(恢复存档+局面复述) ### 4.3 语音链推进契约 -- 证词链=onComplete 串行(句间 0.8s 定时器);**兜底看门狗**:单句 8s 无 onComplete(资产缺失)→ 告警续链(「屏蔽任意 voice 资产流程不卡死」契约)。 +- 证词链=onComplete 串行(句间 0.8s 定时器);**兜底看门狗**:单句 **15s** 无 onComplete(资产缺失)→ 告警续链(「屏蔽任意 voice 资产流程不卡死」契约)。**R2 F1 修订:原 8s 兜底作废**——8s 低于真实长句资产(male/intro_1 实测 8.8s、male/sys_help 9.28s,R1 live 开场白「沈万川死了」被掐尾 0.85s);兜底只防资产缺失/引擎异常,必须高于全部真实资产,不当节奏装置。 - 裁决链(VERDICT)与结算链(SETTLE)为**独占链**:链首停一切看门狗,链内不受理手势(§7.4)。 -- 教学链 `_speakGuarded` 串行(radio/dungeon 同款,杜绝同 tick 双调度抢占——D0-1 教训已固化引擎保险丝)。 +- 教学链 `_speakGuarded` 串行(radio/dungeon 同款,杜绝同 tick 双调度抢占——D0-1 教训已固化引擎保险丝)。**R2 F2 补充**:D0 通过路径的条目报名移交 D1 链首串行补播(原 `_navItem` 450ms 报名与 tut_listen 并行互掐——R1 live 实测指令句只播 0.4s;mock 转写曾被 8s 兜底掩盖)。 ## 5. 教学编排(DRILL,首局内嵌) -每步=一句短旁白→等待实操→反馈;做错重教同一步(新短句 ≤2 次)后自动演示通过;下滑=跳过教学(`tut_skip`),`meta.drillDone` 持久化,二周目不再进。教学寄生于真实案卷(D2 就听老葛真实证词,无假内容——教学承诺必须兑现)。 +每步=一句短旁白→等待实操→反馈;做错重教同一步(新短句 ≤2 次)后自动演示通过;下滑=跳过教学(`tut_skip`,**R2 F10 改词补核心动词**:「已跳过教学。左右滑换卷宗,单击听取;按住屏幕,指证矛盾。」——原词没提指证入口,跳过教学≠已会玩),`meta.drillDone` 持久化,二周目不再进。教学寄生于真实案卷(D2 就听老葛真实证词,无假内容——教学承诺必须兑现)。 | 步 | 旁白 | 等待动作 | 通过条件/反馈 | |---|---|---|---| @@ -398,7 +398,7 @@ pack = opts.pack ?? (opts.seed != null ? seed % 2 : null) ### 7.1 结案三问(FINISH) -1. **真凶**(4 选 1:老葛/小顺/周先生/温太太;两段确认)。错→该证人 acc_NPC 自述不在场证明 + fin_clear → 回 BOARD;**无限再机会**,wrongWho 计数。 +1. **真凶**(4 选 1:老葛/小顺/周先生/温太太;两段确认)。错→该证人 acc_NPC 自述不在场证明 + fin_clear + **st_wrong「错指一回,记档。」(R2 F9:评级账目当场可闻,S/A 差距不再靠悟)** → 回 BOARD;**无限再机会**,wrongWho 计数。 2. **凶器**(4 选 1:松木劈柴/铜秤砣/铁门闩/青瓷花盆;选项序由 seed 洗牌)。对=fin_wp_right,错=fin_wp_wrong(真话归因,不重答,记账)。 3. **动机**(3 选 1:监守自盗/寻仇泄愤/劫财入户)。同上。 @@ -497,7 +497,7 @@ fin_right(证据链闭合)→ sfx/rain_s swell 起 | 等待点 | 机制 | at | say(full 档;第 2 级一律纯 nudge) | |---|---|---|---| | CONFROST/FINISH 各选择相位入口 | guide.turn | — | turn earcon + confirm 震 | -| BOARD 空闲 | watchdog 无操作轨 | [10s, 25s] | gd_board / null | +| BOARD 空闲 | watchdog 无操作轨 | [10s, 25s] | gd_board / null(**R2 F6:六份听齐且疑点未齐时一级改播 gd_board_cf「都听过了。按住屏幕,去指证。」**——「换卷宗」此情是错指令,R1 三人设同撞) | | CONFROST 选句/确认 | watchdog 无操作轨 | [15s, 30s] | gd_cf / null | | FINISH 三问 | watchdog 无操作轨 | [20s, 40s] | gd_fin / null | | DRILL 每步 | watchdog 无进展轨(共享) | [30s/60s/90s] | earcon → 短句 → tut_skip 自动滚出(E0-2 先例) | @@ -505,8 +505,8 @@ fin_right(证据链闭合)→ sfx/rain_s swell 起 ### 9.3 无进展轨(调查态卡关三级,**证词板乱按也要被抢救**) - 进展事件=听完新条目 / 指证判定 / 结案相位推进(`_progressTrack()` 挂点:条目链 onComplete、judge()、FINISH 相位切换)。**只由进展重置**——乱按(疯狂换条目不听完、播放中狂点停起)永远攒不满进展,三级必达: -- [45s] L1:turn_tick earcon(不占台词通道)→ [90s] L2:`hint_a`(还有未听条目时)/ `hint_b`(都听过但疑点未齐)→ [150s] L3:**保底给出可指证的矛盾对**(hint_c1/hint_c2 按未发现清单轮询,seed 定序);4 疑点齐 → `hint_fin`(去结案)。L3 后每 150s 重复(每句全局限 2 次,之后静默——不轰炸)。 -- 无操作轨(手势重置)与无进展轨并行取先到;两轨短句内容同级交叉登记防重复。纠错/提示 idle-only、过期丢弃(引擎已实现)。 +- [45s] L1:turn_tick earcon(不占台词通道)→ [90s] L2:`hint_a`(还有未听条目时)/ `hint_b`(都听过但疑点未齐)/ **`hint_fin`(疑点已齐——R2 F11:此情还播「逐句比对」是指引过时,直指去结案)** → [150s] L3:**保底给出可指证的矛盾对**(hint_c1/hint_c2 按未发现清单轮询,seed 定序);4 疑点齐 → `hint_fin`(去结案)。L3 后每 150s 重复(每句全局限 2 次,之后静默——不轰炸)。 +- 无操作轨(手势重置)与无进展轨并行取先到;两轨短句内容同级交叉登记防重复。纠错/提示 idle-only、过期丢弃(引擎已实现)。**R2 F8:提示句震动由 warning 三连震改为 confirm 轻震**(递答案不是训人——R1 人设 P4:「头一下我当自己犯错了」)。 ## 10. 存档设计 @@ -527,6 +527,7 @@ fin_right(证据链闭合)→ sfx/rain_s swell 起 - summary 生成规则:`{案名} · 已问{heard.length}/6 · 疑点{doubts 中 true 数}/4`(结案后 run=null,summary=`已结案{casesClosed}起 · 最佳{bestGrade}`)。 - 保存时机:条目链播完 / 指证判定后 / 菜单「保存并回大厅」/ 结案入 meta。localStorage + PUT 服务器。 +- R2 补充:结案确认闸(_caseGate)与选句记忆(_cfLineMem)为瞬态 UI 态,**不持久化**(读档回板=闸撤、记忆空——重新调查从干净入口起)。 - 读取:有 run → TITLE 播 sys_continue_ask,单击继续 → 恢复(layout 复用存档值,不重洗)→ **局面复述链**:`st_asked_n →(未听条目 ≤3 个时逐个播 item_* 名;>3 个只报计数)→ st_doubt_m → recap_go`,≤10s 回到可操作;右滑=换新案(seed/pack 重掷,meta 保留)。 - 归因真话依据:评级各变量全部持久化(doubts/cfMiss/wrongWho/hintsGiven/answers),结算播报从同源读取。 @@ -536,13 +537,13 @@ fin_right(证据链闭合)→ sfx/rain_s swell 起 1. 启动→TITLE(无档)→单击→DRILL:D0..D6 逐步断言 voice 序与 drillStep 递进;D5 任意选择组合都播 tut_cf_ok 且 doubts/cfMiss 零变化(教学承诺兑现);下滑跳过路径 + meta.drillDone 二周目不再进。 2. **seed 复现**:(42,0) 两次构造 → `_case` 深相等(条目/句序/filler 洗牌/选项序/提示序);(42,1) 与 (43,1) 布局不同。 3. **矩阵不变式**:对 `_case` 全句对枚举轴交集——同轴异值对集合 ≡ contradictions(pack A 与 pack B 各验一遍)。 -4. 听取:6 条目链完整(句序=layout)、双击=当前句重播零消耗、单击停止、播完 st_asked 升档;播放中左右滑静默忽略(无 error 震)。 -5. **指证 4 矛盾逐条走通**:M1-M4 各自导航→两段确认→contra_hit+cf_hit+react_n(zHits 递进取句)→doubts 置位;M3/M4 共用 z_4(选 z_4 两次分别对 fo_3/sc_4);指证对无序(反向选也 hit)。 +4. 听取:6 条目链完整(句序=layout)、双击=当前句重播零消耗、单击停止、播完 st_asked 升档;播放中左右滑静默忽略(无 error 震);**R2 F6:六份听齐且疑点未齐时状态链尾=recap_cf、疑点齐=hint_fin(原 recap_go 一刀切作废)**。 +5. **指证 4 矛盾逐条走通**:M1-M4 各自导航→两段确认→contra_hit+cf_hit+**react_按轴**(R2 F3:lamp→z_react_1 / key→z_react_2 / weapon→z_react_w / scale→z_react_3;4/4 齐追加 reactFinal z_react_4 + hint_fin)→doubts 置位;M3/M4 共用 z_4(选 z_4 两次分别对 fo_3/sc_4);指证对无序(反向选也 hit);**R2 F7:同条目再进选句从记忆位起播(断言入口 lineIdx);选句相位长按在播=引擎快进不震、空闲=error 震**。 6. **指证 miss 三档真话**:同轴同值对(w1_2 vs wen_1)→cf_same;无共享轴对(z_5 vs sc_1)→cf_diff;同句→cf_self;cfMiss 计数、无任何资源/次数惩罚。 -7. **指认全路径**:错指小顺/老葛/温 → acc_NPC+fin_clear+回 BOARD(无限次);对指周先生 → 凶器问(选项序=layout)→ 动机问 → VERDICT。 +7. **指认全路径**:错指小顺/老葛/温 → acc_NPC+fin_clear+**st_wrong 当场记账**(R2 F9)+回 BOARD(无限次);对指周先生 → 凶器问(选项序=layout)→ 动机问 → VERDICT。**R2 F5:进 FINISH 先过确认闸——停「结案陈词」首击播 fin_pre 仍 BOARD,滑走撤闸,闸内再击进三问;R2 F4:真凶问选项播人名 item_who_*,确认句中性化「就指认这位?」**。 8. **裁决死窗**:指认对瞬间同拍与 +300ms 各补一记在途 tap → 均被吞(仍 VERDICT);认罪链 4 句+gavel+settle 链完整有序;链后单击=接新案(pack 翻转、seed 重掷、meta 入账)。 9. **评级账目**:注入 outcomes 矩阵(doubts∈{0..4}×weapon×motive×wrongWho×cfMiss×hints 代表组合 ≥10 组)→ 断言 grade 判定与 §7.2 表一致 + 结算链播报句(rate_X/st_doubt_n/st_miss_档)与运行值一致(假话即失败)。 -10. **看门狗双轨**:BOARD 10s/25s(gd_board→nudge);无操作 96s 乱按零进展 → 无进展轨 45s earcon/90s 短句/150s hint_c(给出未发现矛盾对且该对可走通指证);有真实进展零提示;4 疑点齐后 150s → hint_fin。 +10. **看门狗双轨**:BOARD 10s/25s(gd_board→nudge;**R2 F6:听齐未破时一级=gd_board_cf**);无操作 96s 乱按零进展 → 无进展轨 45s earcon/90s 短句/150s hint_c(给出未发现矛盾对且该对可走通指证);**R2 F11:疑点齐时 L2=hint_fin;R2 F8:提示句震动=confirm 轻震**;有真实进展零提示;4 疑点齐后 150s → hint_fin。 11. **中断复述**:存档重进→sys_continue_ask→单击→复述链序(st_asked→未听 ≤3 时 item 名链→st_doubt→recap_go);上滑同链可重放。 12. **二周目变体**:seed'/pack=1 → 矛盾表指向 b_shun_*/b_zhou_2、culprit=w2、错指周先生走 acc_zhou、认罪链 b_shun_break、hint 为 b_hint_c1/2;矩阵不变式复验。 13. **键盘变体**:`settings.input='key'` 后播 sys_help_k/tut_d0_k 等 V 组(inputMode 联动);'touch' 回基础句。 @@ -553,7 +554,7 @@ fin_right(证据链闭合)→ sfx/rain_s swell 起 - 长按豁免:BOARD 播放中长按=引擎快进(不进指证);空闲长按→CONFRONT;CONFRONT/FINISH 长按=error 震。 - 状态链随时可用(含播放中,打断后双击可重听当前句);播报值=heard/doubts 实值。 - 指证第二份选择时自动重播第一份选定句(P1 记忆契约)。 -- 屏蔽任意 voice 资产:链 8s 兜底推进,流程到结案不死锁。 +- 屏蔽任意 voice 资产:链 15s 兜底推进(R2 F1:原 8s 作废),流程到结案不死锁。 - guide=off:全静、零定时器;资产齐套:voice 双性别 id 集合一致 + NPC 平铺存在 + sfx/bgm 双格式。 - VERDICT/SETTLE 链内上滑/下滑/双击全部吞掉(链锁),链完成前无任何状态逃逸。 @@ -595,6 +596,30 @@ fin_right(证据链闭合)→ sfx/rain_s swell 起 | 15 | seed 可复现 | (seed,pack) 注入+布局洗牌全 PRNG+深相等断言;变体包数据驱动 ✓(§6.2) | | 16 | 矛盾矩阵验算 | 全轴枚举表:同轴异值对 ≡ M1-M4;一致对 6/单断言/无轴句清单 ✓(§3.4/§6.4 不变式) | | 17 | 指证全路径可走通 | hit(4 矛盾×双向)/miss 三档/同句/错指三人(A)/错指含周(B)/三问对错/保底 hint 对——全部有专属资产与断言 ✓(§11 路径 5-10、12) | -| 18 | 台词规范 | 全句 ≤40 字(实测 ≤31);数字全分档整句;句序号不播(重播代替报数);「重新听」写法;同角色 speaker+instruct 恒定;总句数 158 ≤160 ✓(台词表) | -| 19 | 键盘通道 | 操作提示句 V 组 10 变体集中登记,inputMode() 选播;空格/回车/方向键全手势可达(§5.5 平行通道,游戏层零改动)✓ | -| 20 | 引擎能力边界 | 无实时节点(链播 onComplete+setTimeout);长按快进与长按指证时间互斥;资产缺失静默跳过+8s 兜底;30MB 预算内 ✓ | +| 18 | 台词规范 | 全句 ≤40 字(实测 ≤31);数字全分档整句;句序号不播(重播代替报数);「重新听」写法;同角色 speaker+instruct 恒定;总句数 171 ≤176(R2 修订)✓(台词表) | +| 19 | 键盘通道 | 操作提示句 V 组 14 变体集中登记(R2 新增 fin_pre/fin_who_confirm/recap_cf/gd_board_cf 4 对),inputMode() 选播;空格/回车/方向键全手势可达(§5.5 平行通道,游戏层零改动)✓ | +| 20 | 引擎能力边界 | 无实时节点(链播 onComplete+setTimeout);长按快进与长按指证时间互斥(R2 F7 起选句相位也放行快进);资产缺失静默跳过+15s 兜底(R2 F1);30MB 预算内 ✓ | + +--- + +## R2 修订记录(2026-09-13;裁定追加,旧裁定原文保留于上文并就地标注「作废/修订」) + +证据源:research/new8/detective/round1/{synthesis.md, live-player.md, p1..p4, transcript-*}。每条对应 R1 synthesis 的 F 编号;全部修复落于 web/detective/game.js + 台词表 + playtest 断言。 + +| # | 修订 | 原裁定 → 新裁定 | 证据 | +|---|---|---|---| +| F1 | 单句兜底 8s→15s | 「8s 无 onComplete 告警续链」→「15s」(兜底高于全部真实资产:male/intro_1 8.8s、male/sys_help 9.28s、key/sys_help 10.48/9.52s 登记在台词表头注) | live A t=8.16 intro_1 掐尾丢「川死了」 | +| F2 | D0→D1 串行化 | 「D0 报名与 D1 指令并行」→「D0 报名移交 D1 链首串行补播」 | live A t=33.8 tut_listen 只播 0.4s | +| F3 | react 按轴取句 | 「按累计坐实次数 z_react_1..4 递进」→「按轴映射 + 4/4 追加 reactFinal;新增 z_react_w(weapon 轴)」 | 人设 P1 建议 1(换顺序即答非所问) | +| F4 | 指认措辞真话化 | 「就指认他?」→「就指认这位?」;真凶问选项卷宗名 → item_who_w1..w4 纯人名 | 人设 P1 建议 2(温太太分支为假) | +| F5 | 结案确认闸 | 「结案陈词单击进 FINISH」→「首击 fin_pre 闸、闸内再击进、滑走撤闸」;新增 fin_pre 句 | 人设 P2 建议 1 + 压力转写误闯 6-7 次 + live B 自救实测 | +| F6 | 听齐未破指路 | 「状态链尾恒 recap_go / gd_board 恒教换卷宗」→「听齐未破:尾句 recap_cf、一级提示 gd_board_cf」;新增两句 | 人设 P1/P3/P4 同撞 + live A t=610 | +| F7 | 选句加速 | 「CONFRONT 长按一律 error」→「选句相位在播=引擎快进、空闲=error」;新增按条目选句记忆(瞬态) | 人设 P1/P3/P4 同点 + live A 选句段 25-35s/次 | +| F8 | 提示轻震 | 「hint 附 warning 三连震」→「confirm 轻震」 | 人设 P4 建议 3 + 两局 hint 落点实测 | +| F9 | 错指当场记账 | 「错指=acc+fin_clear」→「+st_wrong『错指一回,记档。』」新增句 | 人设 P2 建议 2(S/A 差距不可感知) | +| F10 | 跳教学带核心动词 | tut_skip 改词补「按住屏幕,指证矛盾。」(重录) | 人设 P2 建议 3 | +| F11 | L2 疑点齐分支 | 「L2=hint_a/hint_b 二选」→「疑点齐时 L2=hint_fin」 | live A t=1595 hint_b 指引过时实播 | + +V 类观察项(本轮不动作):NPC 平铺回退 404 噪音(引擎级,abyss R1 同源);intro_w3 与 male 旁白同嗓背靠背(待人耳试听清单);FINISH 入口 tap 双震(引擎基础震+turn cue 叠加,轻)。 + +句数账:旁白基表 96→104(+fin_pre/recap_cf/gd_board_cf/st_wrong/item_who×4)、NPC 52→53(+z_react_w)、V 组 10→14 对(+fin_pre/fin_who_confirm/recap_cf/gd_board_cf);总 158→**171 句 ≤176 新上限**(原 160 上限裁定作废);音频 289 条 ×2 格式 = 578 文件。 diff --git a/research/new8/00-program.md b/research/new8/00-program.md index bae308f6..a640046f 100644 --- a/research/new8/00-program.md +++ b/research/new8/00-program.md @@ -75,8 +75,8 @@ |---|---|---|---|---|---|---| | 1 | radio | ☑ | ☑ | ☑ | **R1-R3 ☑(+R2 五修+R3 六打磨;4/4 人设满分档愿意玩,P0=0)→ 可交付 ✅**(R4-R6 经用户裁定暂停,视上手反馈续) | ☑ | | 1 | dungeon | ☑ | ☑ | ☑ | **R1-R3 ☑+H1 热修(0/4→4/4 翻案;live 六连验+H1 定向复验 PASS)→ 可交付 ✅**(v2 首条=漫游迷路抢救盲区) | ☑ | -| 2 | abyss | ☑ | ▶ | ▶ | ☐ | ☐ | -| 2 | detective | ☑ | ▶ | ▶ | ☐ | ☐ | +| 2 | abyss | ☑ | ☑ | ☑ | **R1-R2 ☑(R1 补裁 5/5 愿意玩 P0=0;R2 十修现场坐实 4/4 满分档,连续 2 轮达标)→ 可交付 ✅** | ☑ | +| 2 | detective | ☑ | ☑ | ☑ | **R1-R2 ☑(R1 取证 4/4 愿意玩 P0=0;R2 十一修 6/6 愿意玩 P0=0,连续 2 轮达标)→ 可交付 ✅** | ☑ | | 3 | cipher | ☑ | ☐ | ☐ | ☐ | ☐ | | 3 | teahouse | ☑ | ☐ | ☐ | ☐ | ☐ | | 4 | keeper | ☑ | ☐ | ☐ | ☐ | ☐ | diff --git a/research/new8/abyss/round1/live-player.md b/research/new8/abyss/round1/live-player.md new file mode 100644 index 00000000..f3c84d8f --- /dev/null +++ b/research/new8/abyss/round1/live-player.md @@ -0,0 +1,83 @@ +# 《深海回音》全拟真试玩报告 — R1 双局(认真新手 + 急性子) + +## 基本信息 + +- 对象:`web/abyss/` @ localhost:8001,真头 Chromium + SenseVoice ASR 全拟真(mix.webm/events.jsonl/verdicts.json 落盘在 `web/harness/live/out/abyss-20260909174158`(局 A)与 `abyss-20260909180247`(局 B))。 +- 局 A(认真新手):`voice=male, speed=normal, bgm=normal, guide=full`。约 20.6 分钟游戏时长,38 个有效手势(tap 31 / swipeleft 7),全程听完关键句再动,五潜抉择全走心(左)。**结局 e4「按规程上浮」**(saved=3,p9 左被氧气封锁 → g9_dry → 自动右)。通关后在 ENDING 结算态单击验证「再来一局」→ sys_new_dive → b_open 正常重开。 +- 局 B(急性子):`voice=female, speed=1.7, bgm=normal, guide=standard`。约 17.8 分钟,120 个有效手势(tap 54 / swipeleft 52 / swiperight 9 / swipedown 2 / swipeup 2 / doubletap 1),抢跑跳句、乱按 96s、中途开菜单又关、结算链连点。**结局 e2「满载的黎明」**(saved=5,p9 右)。开场实测 ASK 续玩态(局 A 存档在场:sys_continue_ask → 单击继续)。 +- 两局合计 191 个 voice 段:A 局 OK 83 / MISMATCH 2 / TRUNCATED 1;B 局 OK 63 / MISMATCH 32 / TRUNCATED 5(1.7x 下 MISMATCH 多为 ASR 伪影,见「测量局限」)。 +- 全程无卡死、无死锁、无语音叠语音;结算链/结局链/菜单/重开全部走通。 + +## 局 A 叙述(认真新手,male/normal/full) + +开场链完整:t=0.1 sys_new_dive「新的一次下潜开始了」→ gd_brief(操作口令)→ t=7.1 b_open「风停了。我站在问海号甲板上…」→ sys_skip → 逐节点单击推进 b_rule(「气不够一潜,人就必须上浮」)→ b_goal(「五个人…够下四潜」,ASR 把「够下四潜」听成「勾下4000」=数字盲区伪影)→ b_go → 下潜①。每步我磨蹭 >25s 时 gd_continue/gd_again 两级不同句按时响起,不烦人。 + +D1 教学潜:dv1_teach「单击,发一枚脉冲」后我等了 10s(新手犹豫),gd_ping1 响起「声呐待命。单击,发脉冲」,我照做——**问题来了:没听到 ping**,1.3s 后直接 echo_metal_l + dv1_metal「金属回波,钢板…」,我的 ping 音直到 17.3s 后(t=200.86,z1_a 说完的瞬间)才在电台人声缝隙里「叮」一声(详见 P1-1)。接通小舟:z1_a/z1_b/z1_knock(垫 pipe_knock)→ p1 左(听暗号,-1 气)→ d1_code「是老白的暗号…记住这个敲法」(knowsPipe 到手)→ p2 左(等日志,hasLog)→ 上浮:surf_splash+ascent_chime+d1_surf「往返,扣三格气」→ oxy_ok「氧气还够两潜」(账目 12-3-1-1=7 ✓)。 + +D2 机舱:脉冲 → echo_debris+pipe_knock → dv2_found(敲管承诺兑现)→ 老白 bai_a/bai_b → p3 左(慢撬)→ **d2_pry_ok「暗号没白听」**(knowsPipe 差分兑现,-0 气)→ bai_out → p4 左(陪关阀门)→ d2_valve + valve_close 音效 → d2_valve_e「两格气,换一片干净海」→ bai_thanks → d2_supply「粥给你温着」+ oxy_gain「应急瓶接上了,多三格」(恰一次 ✓)→ oxy_low「氧气告急,只够最后一潜」(账目 7-3-0-2+3=5 ✓)。 + +D3 病舱:gd_ping2 响起后我单击,ping 又迟到了 13.6s(t=842.4,chen_a 句末,P1-1 第二次)→ echo_groan + dv3_groan(船体呻吟预警)→ chen_a/chen_b → p5 左(先带陈医官,小郑留守)→ chen_up「上面给你热粥」→ p6 左(留备用瓶)→ **oxy 扣到 0 当场 dry_a「气瓶用干了。立刻上浮」**(干涸链首句按设计触发)→ 救援照常完成 → 上浮结算内 dry_b「气花在了人身上。人,都上来了」(归因真话,不假安慰)→ oxy_crit「氧气见底,必须上浮」(0 格 ✓)→ **氧气门走终局取消链**:dv4_none「气不够一潜了。第四潜,取消」→ gao_final「别下来。带他们回家,就算救完了」(克制、零描写)→ 签收 g9_in/g9_knot → p9。我(走心玩家)本能左滑取船钟——**g9_dry「一格气都不剩了。能带的,你都带回来了」后自动走右,不摆假选项**(设计 §3.2 精确兑现)→ d9_rest → e4_a「我按规矩上浮了。规矩里,没写怎么难过」→ e4_b → ep_lead + 逐人回响:ep_zhou_ok / ep_bai_ok / ep_chen_ok / ep_zheng_lost / ep_gao_lost / ep_trench_deep(每人按生死/好感选播,我的每个选择都被点名)→ 结算单击 → 新救援重开 ✓。 + +## 局 B 叙述(急性子,female/1.7x/standard) + +开场撞上局 A 存档:sys_continue_ask(单击=继续上次),我单击直接续进 b_open。抢跑连点:**发现跳句基本无效**——b_rule/b_goal/z1_b/bai_* 句中单击全部只换来一下 [8] 轻震,句子照播完(对照资产时长全部自然结束;原因见 P1-2)。INTRO 里故意 swipeleft → error 震([10]+[60,40,60])无语音(standard 档);doubletap → b_go 重听 ✓。 + +搜索等待乱按测试:**48 次无效 swipeleft,每 2s 一次,持续 96s**——无操作轨全程零打扰(每个手势复位),无进展轨 t=158.7(=60s 整)gd_prog1「滑动在这里用不上…」、t=218.7(=120s)gd_prog2「别乱。停一下,想想下一步」两级不同句把我捞回来(设计 §7.2「乱按饿不死」实测成立)。停手 10s 后 gd_ping1 响,我立刻单击——ping 又迟到 12.4s(P1-1 第三次,t=259.4 落在 z1_a/z1_b 之间)。 + +抢跑代价实录:p1 播完 24s 后我才右滑(ui_confirm+d1_up);**z1_bye 链末等待时提前 swipeleft 被静默吞**(无语音解释,只震,看门狗重挂又响一轮 gd_continue/gd_again)——急性子被罚「再等一句」却不知为何。p2 右 → d1_surf(12-3=9 未跨档,**静默不播档位句** ✓)。D2:干净脉冲 → bai 链 → p3 右(切割)→ **危机拍实测:我句中单击把 d2_cut 掐了(TRUNCATED「切哥墙宝白」),危机编排纹丝不动**——spark_flash t=545.7 与 danger 震签名 [25,40,25,40,25] 同窗起播,d2_flash 语音 t=547.71 = **精确 2.01s 前置**;前置窗内再单击只 beat 不快进 ✓。p4 我滑错成左(急性子手滑)→ breath_loop 即刻起(oxy 6→4 跨 low ✓)→ **立刻下滑开菜单**:d2_valve 被掐(菜单暂停一切链)→ sys_menu → 单击轮播 sys_menu_restart→sys_menu_lobby → 上滑 sys_help+sys_settings → 下滑关闭 → **d2_valve 原节点重播复述,局面不丢** → valve_close → 正常走完 D2(+3 供给 → oxy_ok 跨档 ✓)。 + +D3:脉冲(这次干净)→ chen 链 → p5 右(先带小郑,chen_stay 留守)→ p6 右(约定来接)→ d3_surf + oxy_low「只够最后一潜」(账目 4 ✓)→ **氧气门 4≥4 → 双载形态自动直进 DIVE(4)**。D4:脉冲 → echo_groan+echo_metal_r → **滑坡危机拍:landslide t=794.67 起 + danger 签名同窗 + 500ms 间隔 danger 震循环,dv4_slide 语音 t=796.68=2.01s 前置;dv4_slide 播完震循环即停** ✓。gao_a/gao_b(hasLog=false → gao_c 差分 ✓)→ p7 双载提示(快/慢浮)右 → d4_fast/d4_fast_e → p8 右 → d4_silent → 上浮结算:d4_surf → oxy_crit(1 格 ✓)→ **我在 oxy_crit 播报中单击,一次 tap 连锁把 oxy_low 报告掐成 0.7s、把签收句 g9_in「医疗舱躺满了…」剁到只剩 0.28s(TRUNCATED,ASR 只听到「幸福」)**(P1-3)——但链没断,g9_knot/p9 照常。p9 右 → d9_rest → **e2_a「五个人都救上来了,船钟留在了沟底」+ e2_b「…半夜醒来总听见钟在响」**(e2 钩子原文)→ epilogue 与局 A 完全不同(ep_zhou_no「声呐日志没了」vs A 局 ep_zhou_ok;ep_gao_up「一直没说话」vs A 局 ep_gao_lost;ep_zheng_ok 存活)→ 结算态乱按:swipeleft error 震 ✓、swipeup 状态链(e2_a→oxy_crit→sys_help,G6 顺序 ✓,附 warning 震)✓。 + +## 问题清单 + +### P0(阻塞/卡死) + +无。两局完整到结局;乱按 96s、菜单开关、结算链连点、存档续玩、结局重开全部无死锁。 + +### P1(体验断裂:截断/叠音/错乱) + +1. **看门狗语音期间发脉冲:ping 音被排队迟到 12~17s,「回波先于脉冲」打破核心教学承诺**(3/5 次搜索复现:A-D1 t=183.6tap→200.9ping 晚 17.3s;A-D3 t=828.8→842.4 晚 13.6s;B-D1 t=247.0→259.4 晚 12.4s) + - 触发条件精确:gd_ping1/gd_ping2/gd_prog* 正在播时玩家单击(看门狗行喊的正是「单击,发脉冲」,照做必中)。`_firePing()` 起 sv*_echo 链,step(0) 的 sonar_ping 经 `_sonar()` 见 voice 忙入队;链在定长计时器上照走(回波、解读句不等人),队只等「链真歇下」才排水——落在 COMMS 首节点句末。 + - 后果:a) 玩家单击瞬间没有 ping 音反馈(触觉-听觉因果断开);b) 回波没有自己的脉冲,教学潜第一次演示「单击→脉冲→回波」就是错序;c) 一声孤零零的 ping 在 12~17s 后电台对话句隙冒出来,像 bug 多像像叙事。零重叠不变量字面保住(ping 落在句隙),但 §6.3「搜索等待单击恒出 sonar_ping」的顺序语义不成立。修法:firePing 时先 stopVoice(gd 行可掐)再立即播 ping,或玩家 ping 不入 sonarGate 队列。 + +2. **「单击跳句」承诺名存实亡——sys_skip 教了,但几乎全部句子不可跳**(局 B 全程实测) + - sys_skip(两局都播了)说「想跳过这句,单击就行」。但本作叙事节点几乎全是**单句节点**,句句命中 F5「链末句保护」:句中单击只得到 [8] 轻震。B 局逐段对照资产时长核验:b_open/b_rule/b_goal/z1_b/z1_bye/bai_a/bai_b/d4_fast_e… 句中单击后 vend 全部=自然结束,无一被跳。p* 提示不可跳(PROMPT_RE)+ G4 震完全正确;但普通叙事句也 100% 不可跳,与教学直接矛盾(dungeon「铁器=楼梯」同类教训:教了的必须真)。1.7x 语速成了唯一加速器——对急性子等于「没有跳句功能」。 + +3. **上浮结算链/签收链不设防:连点可把氧气档位播报和签收开场白拦腰截断**(局 B t=765.2 / t=877.2) + - oxy_low 播 0.71s 被掐(TRUNCATED,听到「点档期购机」);oxy_crit 自然结束的同一瞬间我的在途 tap 落到下一句 g9_in 头上,g9_in「医疗舱躺满了。你的气瓶剩多少,你比我清楚。」只播 0.28s(TRUNCATED,只听到「幸福」)。 + - H1 死窗只盖终局取消链/干涸链/结局链;普通 SURFACE 链的档位后缀句(tier 句不在 `_isTailSentence` 的裸步序里,不受链末保护)和签收 auto 单句节点全裸奔。链没断(后续句照常),但「氧气播报与账目一致播完」的承诺对连点玩家不成立。修法:档位句/签收链入口同样盖 800ms 死窗,或档位句并入链末保护。 + +### P2(不适) + +1. **每个回波尾巴压住解读句开头 0.35~0.55s**(两局全部 6 个 echo→voice 接缝,数字完全一致=确定性):echo_metal_l 实长 2.76s vs 等待 2.2s → 0.55s;pipe_knock 2.96s vs 2.6s → 0.35s;echo_groan 4.43s vs 4.0s → 0.41s。R1 断言「信息音与 voice 播放区间零重叠」按事件层字面不成立(起播侧 gate 成立——回波从不曾在语音在播时**开始**;违反的是收尾侧:资产尾长超 wait 常数)。听感上是衰减余音垫进解说词,可能是有意混音;要么调 wait 常数要么修订断言措辞(区分「起播零重叠」与「区间零重叠」)。 +2. **电台滤波 NPC 的 ASR 可读性整体偏低**:z1_a 0.72 / bai_a 0.83 / chen_a 0.79~0.87 / gao 系 0.65~0.73,且偶有前置语气词被 ASR 幻听(chen_a 听出「啊,你来了」,expected 无「啊」)。事件层无截断,属滤波+短句叠加伪影——**滤波可读性待人耳复核**(已知测量局限)。 +3. **1.7x 下 ASR 相似度整体崩**(B 局 MISMATCH 32/100 vs A 局 2/85):「氧气还够两潜」→「还够2000」、「够下四潜」→「勾下4000」、「d4_fast_e」0.28「云飞佩服…」。事件层(TRUNCATED/SILENCE)两局全部可信,MISMATCH 在 1.7x 档只做参考——自动化验收脚本应对 1.7x 会话降权 ASR 判定。 +4. **gd_continue 常被玩家的推进单击掐死**(A t=645.7、B t=657.0 两处 TRUNCATED:「单击屏幕记」):看门狗行教的动作正是「单击」,单击推进链时把它掐在半句。动作成功、下一句正常,伤害小,但半句话+判定噪声。 + +### P3(建议/记录) + +1. NPC 平铺回退每句产生 4 个 404(voice/female/ 的 ogg/m4a/mp3/wav 全试一遍再落到 voice/ 根),两局共 104 次失败请求。功能零损(全部回退命中并正常播出),纯日志噪音——可先探测根路径。 +2. 提示节点前的抢跑滑动被静默吞(B t=417.2:z1_bye 链末等待时 swipeleft,无 gd_invalid 语音只有轻震+看门狗重挂再等 13s):「无效手势零静默」的语音半边在 standard 档未见兑现(A 局 full 档未撞到无效滑,无法对照)。建议无效滑动也给一句极短 gd_invalid(或 standard 档明确只震的设计写进文档)。 +3. 覆盖缺口记录:搜索等待双击=回波重听(R5)两局均未触发实测(B 局唯一 doubletap 落在 INTRO 重播,功能正常);e1/e3 结局、键盘 _k 变体、guide=off 留给后续轮。 +4. 存档续玩链路实测可用(B 局开场 ASK:sys_continue_ask → 单击 → b_open 复述);progress PUT 不在探针 audio-only fetch 记录内,存档落盘未验证(仪器限制,非问题)。 + +### 做得好的地方(实话实说) + +- **氧气账目两局逐检查点全对**:每潜起播 -3、p* 左路计分(knowsPipe 免气、valve -2、spare -2)、supply 恰一次 +3、`floor(oxy/3)` 档位句义逐格为真(7=ok「够两潜」、5/4=low「最后一潜」、0/1=crit「必须上浮」)、9 未跨档静默不播。§4.5 公式(SURFACE(3)=6−lefts)实测兑现:A 局 lefts=6 → 取消链;B 局 lefts=2 → 双载。 +- **软失败三件套全兑现且不假安慰**:dry_a 当场播+dry_b 归因真话(「气花在了人身上」);取消链 dv4_none→gao_final 措辞克制零描写;p9 左封锁 g9_dry 后自动右、不摆假选项。已救上的人(小舟/老白/陈/郑)一次都没丢。 +- **危机拍节拍器级精确**:D2 spark 545.70→语音 547.71(2.01s);D4 landslide 794.67→语音 796.68(2.01s)+ danger 震签名同窗 + 500ms 震循环 + 链推进即停;危机前置窗内单击只 beat 不快进——且我把 d2_cut 掐了它照样纹丝不动。 +- **看门狗双轨教科书级**:96s 乱按(48 次无效滑)无操作轨零打扰 + 无进展轨 60s/120s 两级不同句抢救;COMMS 链末 standard [13,30] 计时精确(13.0s/30.0s);搜索 [10,25] 精确。 +- **菜单与状态链完整**:中途开菜单掐当句暂停 → 三项轮播 → 帮助 → 关闭重播当前节点(局面复述不丢);ENDING 上滑状态链顺序「结局名→氧档→帮助」+ crit warning 震。 +- **状态差分零错案**:knowsPipe→d2_pry_ok、无 hasLog→gao_c、stayer/p5 路线→chen_stay、双载→p7 快慢浮、两局 epilogue 六句全不同且全部对应我的实际选择;两结局判定与 §3.4 表逐字吻合(e2 钩子「半夜总听见钟在响」原文播 出)。 +- 191 段语音零叠音;breath_loop 4 次起播全部恰在 low/crit 档(含 p4 左当场跨档那次的即时起播);两局时长 20.6/17.8 分钟落在 15-25 承诺区间。 + +## 玩家情绪时间线 + +- 局 A:0:00 甲板口播入戏 → 2:00「单击发脉冲」照做却没听见 ping,第一次困惑(回波来了也就没追究)→ 4:00 暗号+日志两笔投资,感觉在变强 → 7:00「暗号没白听」爽点 → 12:00 留备用瓶扣到 0,dry_a 一声令下紧张 → 13:00「第四潜,取消」+船长诀别,安静地难过 → 15:00 想取钟被 g9_dry 拦下,「它说的是真的,我一格都没有了」→ e4 收队点名,小郑和船长两句戳中 → 单击再来一局,心服口服。 +- 局 B:0:00 续档直接进 → 抢跑连点发现跳不动,改听 1.7x 硬灌 → 乱按 96s 被两句 prog 捞回,服气 → D2 危机拍 2s 前置音到位,肾上腺素 → 手滑选左+开菜单一气呵成,回来发现局面没丢,安心 → D4 滑坡+双载全救,最后连点把签收句剁碎,虽然链没断但「医疗舱躺满了」只听到一个字,扫兴 → e2 五人全救+钟留在沟底,半夜听钟的钩子记住我了。 + +## 如果只能改 3 件事 + +1. **修 ping 迟到**:看门狗行在播时发脉冲,先掐 gd 行立即出 ping(或玩家 ping 绕过 sonarGate 队列)——教学潜的第一声脉冲是全作「声音即世界」的立身之本,现在 5 次里错 3 次。 +2. **兑现或撤回跳句承诺**:要么放开叙事单句节点的句中跳过(保留 p*/档位/结算保护),要么删掉 sys_skip 的「单击跳过这句」教学、把加速交给长按——现在的组合是「教了钥匙却给假锁」。 +3. **给档位句和签收链上保险**:氧气播报与 g9 签收并入 H1 800ms 死窗(或链末保护)——急性子连点不该能把「氧气见底,必须上浮」和「医疗舱躺满了」剁成一个字。 diff --git a/research/new8/abyss/round1/p1-blind.md b/research/new8/abyss/round1/p1-blind.md new file mode 100644 index 00000000..bb0559f7 --- /dev/null +++ b/research/new8/abyss/round1/p1-blind.md @@ -0,0 +1,20 @@ +# P1 视障资深玩家评审:《深海回音》(R1) + +> 评审依据:research/new8/abyss/round1/transcript-main.md(全右省气主线一局)+ transcript-stress.md(209 次乱按 + 40 次逛菜单压力局),全读。批次 2 新游戏首评;批 1 我给 radio 4.5、dungeon 2→4,那两把尺子我带来了:radio 的「播报值=运行值」,dungeon 的「教学承诺必须兑现」。 +> 说明:转写里的【状态】行按转写器注记处理,不算我耳朵听到的;我听到的只有 ▶ 语音、♪ 音效/BGM、〰 震动。另外两局音频都止步于收队前的「三年前,也是这条沟。我按时上浮了,搭档没有。」(main t+231.2 / stress t+1116.0)——p9 心结抉择、船钟、四结局链、逐人回响一个音都没转写进来,结局段我无法评审,下述结论不含它。 + +### 深海回音 +- 状态感知:4.5/5 —— 全程我几乎每秒都知道自己在哪:15 次状态切换 BGM/earcon 全部对位(main t+0.0→224.9 逐次核对),菜单一关必重播当前节点落位(stress 40 次进出菜单,t+210.4 重播「等等,你听。管子里,有人在敲。」从未迷路);状态链「潜次→氧档→口令」顺序恒定(stress t+456.3-460.6),氧档句我逐格验算全真(见专项);乱按 209 次之后我依然随时报得出第几潜、氧气什么档。扣 0.5 在两处:菜单 41 次打开只露过两项(建议 1);D4 那格无声扣款让我的心算账对不上耳朵(建议 2)。状态链尾部那句口令「单击继续,双击重新听……」在 stress 里逐字复读了 18 遍——顺序比 radio 对了(状态在前),但尾巴第二次起就该砍。 +- 下一步明确性:5/5 —— 搜索等待永远有 turn 签名+确认震+口播「单击,发一枚脉冲」三重提示(main t+17.0-19.1);每个抉择句自带方向和内容(t+75.2「向左滑,停下来听敲管的暗号。向右滑,先带小舟上浮。」);链末发呆 25 秒看门狗两级不同句兜底(main t+57.5「单击屏幕,继续。」);压力局乱按 209 次、逛菜单 40 次没卡死过一次,每个无效手势都有 error 震,gd_invalid 全局只播了一次(stress t+21.2「这个手势,水里用不上。」——错误文案还贴着世界观,这句我认)之后全是纯震,onceKey 纪律执行得干净。全程没有一秒我不知道该干什么。 +- 愿意继续玩:是 —— 账目真实到我可以闭着眼睛心算、承诺句句兑现(D1 听的暗号在 D2 真的免了氧气,t+649.6「暗号没白听」),四结局给了我再潜一次的理由;菜单第三项听全之前,我先押半局。 +- P0 问题:无(两局转写范围内)。须声明:软失败路径——终局取消链、干涸链、p9 氧气封锁——两局都没有走到,失败归因真话律在本作无从检验,这是覆盖缺口不是发现问题;已走到的每一段没有一句假话。 +- 建议: + 1. 菜单第三项 41 次没露脸:main 一处(t+85.8)+ stress 40 处,每次开菜单只听到「回到水下。」「重新开始这次救援。」两项就关了,「保存并回大厅」零次出现——radio R1 的同款问题在这作重演,要么循环里真没有它(我的存档退出就是洞),要么它排在永远够不着的一格。顺带一个更要命的雷:main t+90.0 我耳朵刚听完「重新开始这次救援」,下一拍确认音之后回到的却是水下原节点——单击「切换选项」到底切没切到我正在听的那一项?播报与选择若不同步,对我是敢不敢双击的问题。真机第一件事:三项听全,再验双击执行的到底是谁。 + 2. D4 双载的额外一格气从不口播:主线局我按播报数字心算 12−3−3+3−3−3=3(该「告急」档),收队耳朵听到的却是「氧气见底,必须上浮」(t+227.0,=2,档位判定本身没错)——差额正是设计里「双载额外+1」那一格,p7 提示到 d4_surf 没有半句交代。要么 p7 双载提示带一句「双载要多费一格」,要么结算给「双载往返,扣四格」。顺带:crit 固定句「必须上浮」在甲板上说出来是空话(t+227.0 / stress t+1111.8 都是人已出水后播的),水面场景给「一潜都下不去」义的措辞。我的账本不能有无声的扣款,也不该有说错地点的正确话。 + 3. 回波→解读的「静默一拍」被吃了:D3 呻吟回波 4 秒整一结束,解读句 0ms 压上来(main t+154.0→158.0、stress t+729.2→733.2),金属回波之后也只剩 0.2 秒(t+20.0→22.2)——设计自己写的「回波→静默一拍→解读,给耳朵留定位时间」在两局里系统性地没兑现。我要靠那口余音定位船身方向,把这一拍还给我的耳朵。 + +#### 三套信息一致性与氧气账(专项:回波/语音/状态播报 + sonarGate + 双击重听) +- sonarGate 零重叠核查——过,零违例。两局逐条扫 echo_*/pipe_knock/groan 与所有 voice 播放区间:**没有一例重叠**。信息音全部排在语音前、解读句全部等回波尾巴落地(回波→解读:main t+20.0→22.2、stress t+66.6→68.8;敲管声全部落在台词字尾之后,main t+70.0/72.6);搜索等待的单击 8/8 恒为脉冲,没有一次变成跳句或 error。危机音按 R4 合法压语音:滑坡 t+197.9 起 4 秒渐强,「它滑了!」t+199.9 叠在轰鸣上,danger 震以 500ms 间隔循环(198.4→201.9)——前置渐强和间隔规矩都做到了。两处白名单外的边角记录在案:link_beep/static_burst 与人声同拍起(main t+24.3、t+26.4),不在禁叠清单内、按设计合法,但「电台杂音+对方第一句话同起」真机听测一下糊不糊;另有 stress t+85.5、t+746.4 关菜单瞬间 explore 签名连响两声的小毛刺。 +- 氧气账目——逐格全真,这作学到了 radio 的教训。main:12−3=9→「气瓶还足,救得动」(t+106.2,≥9=full ✓);D2 后 6→「氧气还够两潜」(t+186.6,floor(6/3)=2 ✓);双载收队 2→「氧气见底」+warning 三连震(t+227.0,crit ✓)。stress:8→「还够两潜」(t+569.7 ✓);潜二/潜三中 5→「氧气告急,只够最后一潜」(t+588.6、t+800.8,floor(5/3)=1 ✓);D3 后 3→「告急」(t+871.9 ✓);氧气门精确触发:3→单载(t+980.9「气只够带一个。」);单载收队 0→「见底」(t+1111.8 ✓)。每句档位话我按 floor(oxy/3) 逐格对过,一句不差。跨潜承诺兑现点名表扬:stress p1 左听暗号(t+472.1)→ p3 左免气「暗号没白听」(t+649.6),D1 的投资在 D2 到账。未验证项:干涸链、终局取消链、p9 封锁(两局未走到);低氧 breath_loop 呼吸签名两局零记录——要么转写不记 loop 要么没响,低档的「听得见的紧迫感」全押它身上,真机听测。 +- 三套信息一致性——三方零打架,三作(radio/dungeon/abyss)里最干净的一次。每种回波都有对应解读句且语义严格一致:金属=钢板/海燕号船身(t+22.2)、碎石+敲管密=机舱(t+116.1)、回波发闷=船体呻吟撑不久(t+158.0)、呻吟渐强+金属右舷+滑坡=指挥舱危机(t+191.7-199.9);状态播报的氧档与实际扣减一致(见上);菜单/跳句/重听没有破坏任何一方。b_goal「双瓶够下四潜」的承诺两局都恰好用四潜走完,教学句没有开空头支票。 +- 双击重听回波(R5)——未验证。两局 8 次搜索等待全部是单击脉冲,双击一次都没按过:「重听上一条回波+其解读句」「尚无回波时双击=无效」这两条给我这类耳朵的保命语义,R1 转写零覆盖。真机我第一个按它。 diff --git a/research/new8/abyss/round1/p2-student.md b/research/new8/abyss/round1/p2-student.md new file mode 100644 index 00000000..bbadc8c0 --- /dev/null +++ b/research/new8/abyss/round1/p2-student.md @@ -0,0 +1,18 @@ +# P2 · 时间充裕的大学生 评审——《深海回音》(R1) + +> 视角:23:30,宿舍躺床,戴耳机,音量正常。按「真机听到这些」代入转写(语音时长为估算,我主要看相对节奏和「我听见了什么」)。 + +### 深海回音 +- 状态感知:5/5 —— 全程没迷过路:潜次有人报数(「现在是第一次下潜」t+77.3),每次出水氧气档整句跟上(t+106.2「气瓶还足,救得动」→t+186.6「氧气还够两潜」→t+227.0「氧气见底,必须上浮」+三连震),上滑随时听潜次+氧档,deck/dive/comms 三段 BGM 一耳朵分清在甲板还是在水下。最难得的是账目诚实:压力局我多花一格气听暗号,氧档立刻从「还足」掉到「还够两潜」(stress t+458.5),句句能对上——这套播报是两批游戏里我最信的。 +- 下一步明确性:4/5 —— 抉择句永远自带方向(t+75.2「向左滑,停下来听敲管的暗号。向右滑,先带小舟上浮」),搜索等待有 turn 音+确认震双保险(t+19.1);压力线乱按 209 次、逛菜单 40 次,结局链照样走完(stress t+1170.3),等待点全有两级不同句的看门狗兜着。扣一分在叙事链末的「死等」:接通小舟那句话说完(t+32.5)到看门狗捞人(t+57.5)中间 25 秒没有任何声音——我就是躺在那儿走神去数氧气的;结局链前后(t+231.2→258.4)又是一段 25 秒静默。没有人告诉我「这口气说完了,该你了」。 +- 愿意继续玩:是 —— 氧气门真的把第四潜做成了三种不同局面(主线双载 t+210.2 / 压力线单载 t+980.9),我想为「取消第四潜」的残局和「全员+船钟」各再开一局。 +- P0 问题:无。 +- 建议: + 1. 通讯对白链自动续流(或把链末等待的第一轮提醒从 25 秒砍到 10 秒内):首次接通小舟后的 25 秒静默(t+32.5→57.5)正好掐在钩子落地那一口气上,躺床玩家就在这里走神、睡着。电台都接通了,让人声自己往下说,单击留给跳过和抉择——我的手不该是叙事的节拍器。这是「我连不连着玩」的头号变量。 + 2. D4 滑坡的震动降密度:t+197.9→201.9 四秒约十连震(压力线 t+883.3→887.4 九连),23:30 手机贴身躺着,这不是紧张是电钻。landslide 轰鸣+danger 签名已经足够立住危机,震动间隔拉到一秒以上、或三次封顶。 + 3. 结算顺嘴报一句结局进度(「四种归宿,这是第一种」):两份转写从头到尾没人告诉我有 4 个结局,而氧气门三形态+五条生死线是全作最值得炫耀的重玩设计,不吆喝可惜(radio R1 我提过同款,这作还是没播)。 + +#### 睡前躺床与氧气压力的设计感 +- 头 3 分钟(首通电话式钩子):快得没话说。t+0 调度人声开场、t+2.1 一句教完手势、t+8.5 规矩只有一条;约 19 秒我发出第一枚声呐脉冲(t+17.0 口播「单击,发一枚脉冲」+t+19.1 turn 音);t+22.2 金属回波、t+24.3「是电台!接通了」、t+26.4「……有人吗?声呐兵,小舟。我们还活着,全艇五个人。」——电流声里冒出人声那一下,钩子半分钟内落地,比 radio 的电话铃还早还带感;t+104「小舟出水,第一潜收工」首胜两分钟内到手。说教味零:手势总复习只在第一次上滑出现一次(t+81.5),之后再没唠叨过。唯一的漏气点就是主评里那条 25 秒静默。 +- 氧气是紧张还是催命:紧张,而且是我喜欢的那种「账目式压力」。步进扣账、跨档才播、句句可验算——「氧气还够两潜」就是真的还够两潜,我在心里数第四潜扣三格、见底、三连震,全对得上;没有滴答声追我,搜索等待随便磨蹭不挨罚,病舱里纠结先带谁时也没人催。设计感的高光在压力线 t+980.9:「气只够带一个。向左滑,带船长。向右滑,带陈医官。」——我前几潜花在暗号、备用瓶上的每一格气,到这里变成一个具体的人的去留,氧气从 HUD 数字变成道德货币,这一下起鸡皮疙瘩。吹毛求疵两处:① 低氧档该垫的呼吸声(设计里的 breath_loop)转写里一次没出现——可能环境层不进转写,真机听测记得验;② crit 档每次播报都跟三连震,压力线里「氧气见底,必须上浮」+震连播七八轮,躺久了烦。 +- 结局回响与 4 结局重玩:尾声逐人点名做到了(t+285.5 状态:尾声逐人点到我每一潜的救与错过)——主线全员生还的暖收尾,和压力线留下陈医官时那句「去吧。灯我留着,人齐了就熄」(stress t+995.8)真的是两种回味;情报投资也前后咬合(第一潜花一格气听暗号 stress t+472.1,第二潜撬钢梁直接免气兑现「暗号没白听」t+649.6)。重玩动力真实但要打折扣:三种第四潜+谁留守+船钟心结,值 2-3 局;没有周目成长,第三局之后玩法面不再变化,天花板是「精品广播剧二刷」——作为睡前游戏,够本。 diff --git a/research/new8/abyss/round1/p3-office.md b/research/new8/abyss/round1/p3-office.md new file mode 100644 index 00000000..e19c5380 --- /dev/null +++ b/research/new8/abyss/round1/p3-office.md @@ -0,0 +1,20 @@ +# P3 评审:《深海回音》(abyss)— 时间紧张的白领 + +> 视角:32 岁,地铁单程 25 分钟,站立单手持机,嘈杂车厢,只玩过消消乐;上班摸鱼怕出声、随时被打断。依据 R1 两份转写(主线完整局 + 乱按压力局=我被反复打断后的真实状态)代入「真机听到这些」。 + +### 深海回音 +- 状态感知:4/5 —— 两份转写里我始终知道自己在第几潜、气还够几潜:上滑状态链三句话到位(主线 t+77.3-81.5「现在是第一次下潜」「气瓶还足,救得动」;压力局 t+456.3、t+586.5 同款在乱按里反复把我拽回锚点);每次上浮结算句自带扣账+档位(t+104.0「往返,扣三格气」、t+186.6「氧气还够两潜」)。扣一分在两处:状态链不报「已救几人」——D3/D4 被打断后我得靠回忆拼「船上已经躺着谁」;且状态链尾巴每次都挂全套操作口令(t+81.5 那句「单击继续,双击重新听……」),频繁查状态时是纯开销。 +- 下一步明确性:5/5 —— 没有一个时刻不知道该做什么:搜索等待有 turn 签名+确认震(t+19.1、t+110.4),抉择提示句每次自带左右滑动词(t+75.2「向左滑……向右滑……」),链末等待有 nudge 兜底(t+57.5「单击屏幕,继续」)。乱按局 209 次乱试、40 次逛菜单里也没有一次手势被无声吞掉、没有卡死(压力局 t+1170.3 终注)。 +- 愿意继续玩:是 —— 一潜救一个人、上浮就扣账存档,3-4 分钟一颗完整的小满足,全程只有「单击+左右滑」两个动作,我扶着扶手也拿得住。 +- P0 问题:无。 +- 建议:≤3 条,按对「我愿意玩下去」的影响排序 + 1. 上滑状态链补一句已救人数(如「已经救上两个」)。被打断后我要捡回的局面有三样:潜次、氧气、船上躺着谁——前两样有了,第三样现在只写在存档 summary 里,转写全程耳朵一次都没听到。 + 2. 状态链尾部的操作口令在首次之后精简为轻震或半句(radio G1 帮助去重的同款思路)——压力局里这条链重播了十几次、每次 4 句,通勤中是最大的「查个状态等十秒」。 + 3. 链末等待的第一声提醒提前到 13-15 秒(standard 档 [13,30] 现成)。主线 t+32.5-57.5 那段 25 秒无声,在晃动的车厢里我已经在怀疑手机自动锁屏了;结局链后的 27 秒同理(t+231.2→258.4)。 + +#### 通勤压力 + 认知负荷 +- 一潜是不是完整小乐趣:是,而且这是本作对我最友好的地方。每潜都是「下潜→单击脉冲→回波→接通一个活人→两个二选一→上浮结算」的闭环,转写压缩语速下 D1 约 90 秒走完(t+14.8→104.0),真机语速折算约 3-4 分钟,正好一颗扣子;每潜边界自动存档(设计 §8),地铁到站收机零心理负担。25 分钟单程 ≈ 5-6 颗扣子,比一整局 20-22 分钟更贴我的碎片节奏。 +- 被打断后上滑复述够不够:够用但差一角。潜次+氧档随时上滑可得;菜单关闭还会重播当前节点(主线 t+92.1 关菜单即重播抉择提示,压力局里这条把我从 40 次乱逛里每次都拽回来);缺的就是已救人数那句(见建议 1)。另注:两份转写都没走到杀进程重进的 ASK 复述流,断点续玩我只能按设计文档先信。 +- 声呐回波在嘈杂地铁里可辨吗:记为**待真机人耳项**——转写判不了响度与频段。结构上我给好评:回波与语音零重叠、每条回波后紧跟一句人话解读(t+20.0 回波→t+22.2「金属回波,钢板」),就算回波被地铁噪音吃掉,信息也丢不了——丢的只是「我先它一步听见」的那点乐趣。D4 的回波串+滑坡+danger 震 4 秒近 10 发(t+190.8-201.9)是全游戏最吵的 5 秒,但没有任何限时反应要求,我捂着耳朵乱滑也不会输。 +- 认知负荷(氧气+双通道+抉择):不超载,对消消乐水平的我刚刚好。氧气是步进制、只在跨档播一句真话(t+79.4 满档/t+186.6 两潜/t+227.0 见底,各一句),我全程没做算术——「还够两潜」直接就是可执行的指令;双通道并发 ≤2、语音和回波从不抢跑道;抉择恒二选一、无倒计时。压力局实测:极端乱按下我仍一路走完 8 个抉择到结局链,没有一次因为「脑子不够用」迷路。 +- 摸鱼与单手:本作无语音输入、无外放要求,戴耳机即沉默游玩;下滑菜单=暂停一切链(主线 t+85.8 实测),老板走过时一步挂起;全部动作点按+滑动,拇指盲操无压力。 diff --git a/research/new8/abyss/round1/p4-worker.md b/research/new8/abyss/round1/p4-worker.md new file mode 100644 index 00000000..5e819f04 --- /dev/null +++ b/research/new8/abyss/round1/p4-worker.md @@ -0,0 +1,24 @@ +# P4(疲惫的工人)R1 评审 —— 《深海回音》 + +> 45 岁,工地收工,宿舍 21:00,外放小音量,游戏经验少,反应不快。 +> 依据:research/new8/abyss/round1/transcript-main.md(主线)+ transcript-stress.md(乱按压力局)。全部按「我真机听到这些」代入。 + +### 深海回音 +- 状态感知:5/5 —— 三件事一遍就懂:t+8.5「规矩就一条:气不够一潜,人就必须上浮」、t+10.6「五个人。你的双瓶,够下四潜」、t+17.0「单击,发一枚脉冲」,统共三句话,四潜下来没再添过一条新规矩。往后每潜开头都报去处(t+108.3「第二潜,机舱」、t+151.0「第三潜,病舱」),上滑随时能问「第几次下潜+气还剩几潜」(t+77.3-79.4)。中间我走神 25 秒(t+32.5),它 35 秒后才轻轻来一句「单击屏幕,继续」(t+57.5),不掐不跳。乱按那局我滑错两百多下,也从没迷糊过自己在第几潜、气是松是紧。 +- 下一步明确性:5/5 —— 每个等我动手的地方都有一句话交代:链末「单击继续」、搜索时「单击,发一枚脉冲」、选的时候把两个选项连手势一块念(t+75.2「向左滑,停下来听敲管的暗号。向右滑,先带小舟上浮」)。我做错了它也不骂,就一句「这个手势,水里用不上」加两下轻震(压力局 t+21.2),说完接着干。没有一刻不知道该干嘛。 +- 愿意继续玩:是 —— 规矩一句话讲完,操作从头到尾就是点、滑、听,我这种手笨的也能全救上来:主线那局五个人全上了甲板,还敲了钟,像干完活听人说了句「这活干得囫囵」。 +- P0 问题:无 +- 建议: + 1. 「氧气见底,必须上浮」这句带三连警告震,压力局里我摸了十几回状态,回回挨这么一下(t+895.5、t+906.2、t+914.7 一路到 t+1103.3)。「必须」俩字夜里听着像工头催命。这句能不能说得缓一点,或者重听状态时别回回都震。 + 2. 压力局第二潜刚下水就报「氧气告急,只够最后一潜」(t+588.6),我心里咯噔一下——其实上完这潜就有潜友送应急瓶、多三格(t+724.0)。先吓后补。第一潜收工时能不能透句风,说「潜友在给你备应急瓶」,我这心里就有底了(第一潜中途上滑听见「氧气还够两潜」,t+458.5,也是这个毛病——账不假,听感像快见底)。 + 3. 记待人耳:船员说话带水底电台的滤波(文档里写的),我宿舍外放小音量,隔着滤波还听得清听不清,转写看不出来;还有第四潜那个滑坡,4 秒里连震 8 下(主线 t+197.9-201.9),我这岁数真机上怕是吓一跳,试试降降。 + +#### 小节:软失败核算(救不到人,到底会怎样) +我把乱按那局的账算了算:头一潜停下来听敲管暗号,多花 1 格;第三潜把备用瓶留给陈医官,多花 2 格。到第四潜,气只够带一个(t+980.9「气只够带一个。向左滑,带船长。向右滑,带陈医官」)。我带了船长,陈医官没上来。这笔账核下来: + +- 没死:我一回都没「失败」,游戏从头到尾没跳出来判我输,也没让我重来。 +- 没挨骂:从头到尾没有一句怪我。陈医官留在底下那句话,是她自己说的——「去吧。灯我留着,人齐了就熄」(t+995.8)。听着酸,是舍不得,不是怨我。船长后来那句「三年前,也是这条沟。我按时上浮了,搭档没有」(t+1116.0)是他自己的心事,也没往我头上扣。 +- 救上的不退回去:小舟、老白、小郑都在甲板上,收工照样说「问海号的甲板,从没这么亮过」(t+1109.7)。干了活,给好话,这个分寸我认。 +- 头两潜怎么乱花都卡不死:教学那潜两个「多花气」的选择才扣 2 格,第二潜上来就补 3 格(文档这么写的;压力局我在教学潜真选了左路,第二潜照样囫囵走完)。 +- 正常玩能全赢:主线那局我一遍全挑省气的路,最后还能下去敲钟——五个人全活。最省气的走法恰好是全都救活,我这种人头一回就能赢个体面,这条最要紧。 +- 两笔没验到的账:气彻底花干的「干涸链」,和气少到连第四潜都不让下的「取消链」,两份转写一回都没走到(压力局走到的是「只够带一个」的中档)。那是最容易把话说硬的地方——归因句要指着我说「气是你花掉的」,语气软硬我没听着。下轮该专门打个剧本听听,别到时候真像挨处分。 diff --git a/research/new8/abyss/round1/synthesis.md b/research/new8/abyss/round1/synthesis.md new file mode 100644 index 00000000..cab49ef7 --- /dev/null +++ b/research/new8/abyss/round1/synthesis.md @@ -0,0 +1,75 @@ +# R1 Synthesis —《深海回音》(abyss) + +> 产品裁定 | 证据源:4 人设评审(p1-blind/p2-student/p3-office/p4-worker)+ 真机试玩报告(live-player.md,会话 abyss-20260909174158 局A / abyss-20260909180247 局B)+ 转写(transcript-main/stress.md) + +## 1. R1 裁决 + +| 评审方 | 状态感知 | 下一步明确 | 愿意继续玩 | +|---|---|---|---| +| P1 视障评委 | 4.5/5 | 5/5 | **是** | +| P2 大学生 | 5/5 | 4/5 | **是** | +| P3 白领 | 4/5 | 5/5 | **是** | +| P4 工人 | 5/5 | 5/5 | **是** | +| 真机玩家(双局) | — | — | **是**(附修复条件) | + +**结论:5/5 愿意玩,P0 = 0。** 氧气账目两局逐检查点全真(§4.5 公式现场兑现)、软失败三件套不假安慰、危机拍 2.01s 前置节拍器级精确、乱按 96s 双轨抢救成立、20.6/17.8 分钟落在承诺区间。但真机抓出 **3 个 P1 级体验断裂**(全部在「承诺 vs 兑现」口径上),且批次 1 验收门要求**连续 2 轮**达标——R1 是第 1 轮,R2 进修复轮。 + +覆盖缺口声明(不是发现问题,是下轮必测):干涸链/终局取消链/p9 氧气封锁两句归因真话转写未走到(live 局 A 走到了,措辞克制已验);双击重听回波(R5)两局零触发;e1/e3 结局、guide=off、键盘 _k 变体 live 未覆盖。 + +## 2. P0 / P1 / P2 清单 + +### P0(阻塞/卡死/状态混淆) +无。两局完整到结局;乱按 209 次+逛菜单 40 次零死锁;4/4 人设全程报得出「第几潜、氧气什么档、该做什么」。 + +### P1(必修:承诺未兑现/体验断裂) +1. **ping 迟到 12~17s,「回波先于脉冲」**(live P1-1,3/5 次搜索复现):看门狗行(gd_ping1/gd_prog*)在播时玩家照做单击,`_firePing` 的 sonar_ping 被 sonarGate 排队到 COMMS 首句末才播出。教学潜第一次演示「单击→脉冲→回波」就是错序——本作「声音即世界」的立身之本。 +2. **「单击跳句」承诺名存实亡**(live P1-2):sys_skip 教了「想跳过这句,单击就行」,但叙事节点全是单句节点、句句命中 F5 链末保护,B 局全程逐段核验**无一被跳**。G5「首播必完整、复播可即掐」只兑现了前半句——复播(菜单/状态复述)时尾句照样不可跳。 +3. **档位句/签收链不设防,连点拦腰截断**(live P1-3):`_isTailSentence` 用 `_nodeSteps` 重算链尾,**dyn 档位句(s_tier 注入的 oxy_*)不在其中 → 保护失效**,oxy_low 播 0.71s 被掐;签收链入口无死窗,在途 tap 把 g9_in 剁到 0.28s(「医疗舱躺满了」只剩一个字)。实现 bug + 死窗覆盖缺口双重根因。 + +### P2(尽量修:不适/账听不符) +4. **回波→解读的「静默一拍」系统性被吃**(live P2-1 + P1 建议3):echo_metal_l 实长 2.76s vs W_Metal 2200ms 等三处,尾巴压住解读句开头 0.35~0.55s。设计 §6.2 R2「回波→静默一拍→解读」未兑现。 +5. **D4 双载额外 +1 格气从不口播**(P1 建议2):心算 12−3−3+3−3−3=3(该 low 档),耳朵听到 crit——无声扣款,盲人玩家的账本对不上。 +6. **crit 档「必须上浮」在甲板上说错场景**(P1 建议2 附带):人已出水后播「氧气见底,必须上浮」(main t+227.0 / stress t+1111.8)。档位表自注「水面=一潜都下不去」义,措辞没跟上。 +7. **叙事链末首轮提醒 25s 太晚**(P2 建议1 + P3 建议3):接通小舟后 25s 静默掐在钩子落地上(main t+32.5→57.5),躺床走神、通勤怀疑锁屏。 +8. **D4 滑坡 danger 震 4s 约 10 连**(P2 建议2 + P4 建议3):贴身躺玩是「电钻」不是紧张。 +9. **crit warning 震每次状态查询都发**(P4 建议1):压力局摸状态十几回回回挨三连震。 +10. **状态链缺「已救几人」**(P3 建议1):被打断后要捡回的三样局面(潜次/氧气/船上躺着谁)缺第三样。 + +### P3 / 观察项(记录,不修或待复核) +- 菜单第三项「保存并回大厅」41 次开菜单零露脸 + 报名与执行同步疑虑(P1 建议1)→ **V1**,radio R1 V2 同款处置:playtest 加全项循环+执行一致性断言后关案。 +- gd_continue 被玩家推进单击掐半句(live P2-4):动作成功伤害小,记观察。 +- NPC 平铺回退 104 次 404 日志噪音(live P3-1):功能零损,记观察。 +- breath_loop 转写零记录(P1/P2 均提):live 局 A/B 实测起播 4 次恰在 low/crit 档 → 转写器不记 loop 层,仪器口径问题,销案待真机人耳。 +- NPC 电台滤波 ASR 可读性偏低(live P2-2):事件层无截断,待人耳复核。 +- 1.7x 下 ASR 相似度崩(live P2-3):**仪器局限**,自动化验收对 1.7x 会话降权 ASR 判定。 +- 结局进度不吆喝「四种归宿这是第几种」(P2 建议3):好建议,进 backlog(v2)。 +- P4 建议2(D1 收工透风应急瓶):会削弱氧气压力设计意图,**裁定不改**,理由:先吓后补正是 supply 兜底的教学时刻,且氧档句义逐格为真。 + +## 3. R2 修复清单 + +### F 类(本轮必修) +- **F1**(P1-1):`_firePing` 起链前先掐在播的向导散句(搜索等待态游戏层无链在播,voice 层只可能是 gd_*),玩家脉冲立即出音;断言:gd 行在播时单击 → ping 即时起播、gd 行被掐。 +- **F2**(P1-3):`_isTailSentence` 改认**实际播放链的尾句**(_playSeqSteps 记录 chainTail),dyn 注入的档位句纳入保护;签收链(g9_in)入口盖 800ms 死窗。断言:档位句播放中单击不跳(beat);SURFACE(4)→签收过场 800ms 内在途 tap 被吞。 +- **F3**(P2-4):W_Metal 2200→3200 / W_Knock 2600→3400 / W_Groan 4000→4900(按资产实长 2.76/2.96/4.43s + 静默一拍),兑现「回波→静默一拍→解读」。断言:回波起播到解读句起播 ≥ 资产实长。 +- **F4**(P2-5):新增 `dv4_dual`(调度,双性别)「两个人下同一潜。这趟往返,扣四格气。」挂 dv4_down 链内条件选播(仅双载形态)。补录 TTS。 +- **F5**(P2-6):新增 `oxy_crit_deck`「氧气见底,一潜都下不去了。」(双性别);SURFACE/ENDING 场景的 crit 播报与状态链用水面变体,水下(DIVE/COMMS)保留「必须上浮」。补录 TTS。 +- **F6**(P1-2):G5 复播可即掐落地——非 auto 叙事节点的尾句保护改为**首播保护**(`_tailHeard` 按节点记,链自然播完登记;菜单/状态复述后再播即可跳);`sys_skip`(_k) 改词为真话:「听过的句子再播时,单击就能跳过。」补录 TTS。首播保护原样保留(radio 吃尾根因不回潮)。 +- **F7**(P2-7):叙事链末/ENDING 无操作轨 full 档 [25,50]→[13,30],与 standard 对齐(搜索/抉择点不变)。 +- **F8**(P2-8):DANGER_LOOP_MS 500→1100(≥400ms 下限仍满足,4s 窗内约 4 遍)。 +- **F9**(P2-9):状态链 crit warning 震按「进入 crit 档」去重(档不变不重复震;s_tier 跨档播报位的 warning 震保留)。 +- **F10**(P2-10):状态链 G6 顺序改为 prog_dN → **prog_savedN(新增「已经救上 N 个人」1..5 句,双性别)** → oxy 档 → sys_help;saved=0 不播。补录 TTS。 + +### V 类(复核后定夺) +- **V1**(菜单第三项):playtest 增断言——单击循环三项全播、双击执行的恰是 menuIdx 当前项、报名队列不截断在播句。断言绿则关案(沿用 radio R2 处置先例)。 +- **V2**(双击重听回波 R5 未覆盖):R2 转写压力剧本/live 局 B 必须各触发一次搜索双击,补齐证据。 +- **V3**(NPC 滤波可懂度 + breath_loop 听感):R2 live 人耳等效项——以 ASR similarity 分布+事件层复核,记入 live-player.md 测量局限节。 + +### 资产动账(TTS 补录 18 段 ×2 格式) +dv4_dual ×2 性别、oxy_crit_deck ×2、prog_saved1..5 ×10、sys_skip/sys_skip_k 改词 ×4。只动 tools/gen_voice_dual.py 的 abyss 段;flock .gpu.lock 串行;终检 tools/check_all_assets.py;voice_text.json 同步。 + +## 4. R2 轮次协议 +1. dev 修 F1-F10 + V1 断言 → playtest/guide 全绿(断言增量登记 17-abyss.md §9 修订记录)。 +2. 转写重生成 ×2(main/stress;stress 补双击重听回波触发)。 +3. live 两会话(主线全右省气+p9左 + 急性子压力线 1.7x),重点复验:ping 即时性、跳句复播语义、档位/签收零截断、13s 首轮提醒、震密度。 +4. 4 人设全员复评(评审对象 = R2 转写 + R2 live 产物)→ round2/synthesis.md。 +5. 达标线:≥3/4 愿意玩且无 P0 级状态混淆 → 与 R1 构成连续 2 轮达标,裁定可交付。 diff --git a/research/new8/abyss/round1/transcript-main.md b/research/new8/abyss/round1/transcript-main.md new file mode 100644 index 00000000..3426ab2c --- /dev/null +++ b/research/new8/abyss/round1/transcript-main.md @@ -0,0 +1,235 @@ +# 试玩转写:《abyss》 + +> 本文件是「玩家感知日志」:一位新手玩家的整局体验转写。语音列出了玩家听到的每句话全文, +> 音效/BGM/震动按发生时间列出。「静默」段 = 玩家什么也听不到。手势是剧本注入的(模拟真人手部动作), +> 非最优操作:包含犹豫、误操作与乱试。语音时长按语速估算(±20%),仅供节奏参考。 +t+ 0.0s (玩家点开游戏,轻触屏幕开始) +t+ 0.0s ♫ BGM 切换 → bgm/deck +t+ 0.0s ♪ 向导音:explore(探索/安全) +t+ 0.0s ▶ 语音:「新的一次下潜,开始了。」 + +#### 【玩家动作】开局:听完甲板简报——每段链末单击继续,第一潜开始后声呐会静下来 + +t+ 2.1s ▶ 向导语音:「单击继续简报。要选择时,向左或向右滑。」 +t+ 4.2s ▶ 语音:「风停了。我站在问海号甲板上,下面三千米,是海燕号。」 +t+ 6.4s ▶ 语音:「想跳过这句,单击就行。」 +t+ 8.5s ▶ 语音:「规矩就一条:气不够一潜,人就必须上浮。」 +t+ 10.6s ▶ 语音:「海燕号,五个人。你的双瓶,够下四潜。」 +t+ 12.7s ▶ 语音:「第一潜,找船。耳朵交给声呐。」 +t+ 14.8s ♫ BGM 切换 → bgm/dive(淡入 800ms) +t+ 14.8s ♪ 向导音:explore(探索/安全) +t+ 14.8s ▶ 语音:「下潜开始。水会越来越黑,声音会越来越多。」 +t+ 17.0s ▶ 语音:「到深度了。声呐静了。单击,发一枚脉冲。」 +t+ 19.1s ♪ 向导音:turn(轮到你) +t+ 19.1s 〰 震动:confirm(轻点确认) +t+ 19.1s 【状态】第一潜到深度了,声呐静了 声呐静了,轮到你了:单击发一枚脉冲(BGM=bgm/dive,语速1) + +#### 【玩家动作】调度说了:单击,发一枚脉冲——耳朵交给声呐 + +t+ 19.1s ♪ 音效 sfx/sonar_ping +t+ 20.0s ♪ 音效 sfx/echo_metal_l +t+ 22.2s ▶ 语音:「金属回波,钢板。听见这个,就是海燕号的船身。」 +t+ 24.3s ♪ 音效 sfx/link_beep +t+ 24.3s ▶ 语音:「回波后面有杂音,是电台!接通了。」 +t+ 26.4s ♫ BGM 切换 → bgm/comms(淡入 600ms) +t+ 26.4s ♪ 向导音:explore(探索/安全) +t+ 26.4s ♪ 音效 sfx/static_burst +t+ 26.4s ▶ 语音:「……有人吗?声呐兵,小舟。我们还活着,全艇五个人。」 +t+ 26.4s 【状态】金属回波后面有杂音——电台接通了,小舟的声音进来了 第一潜通讯中,正在听对方说话(语音播放中,语速1) +t+ 32.5s ……… 静默 25s(听到一半走了神,在想氧气还剩几格) ……… +t+ 57.5s ♪ 向导音:nudge(看门狗轻提醒) +t+ 57.5s ▶ 向导语音:「单击屏幕,继续。」 +t+ 59.6s 【状态】听到一声轻响和「单击屏幕,继续」,马上点 对方说完了,等我接话(链末单击继续)(BGM=bgm/comms,语速1) +t+ 59.6s ▶ 语音:「轮机长老白困在机舱,陈医官和小郑在病舱,船长在指挥舱。」 +t+ 66.1s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 70.0s ♪ 音效 sfx/pipe_knock +t+ 72.6s ♪ 音效 sfx/pipe_knock +t+ 75.2s ♪ 向导音:choice(抉择/等待输入) +t+ 75.2s ▶ 语音:「管路在响。向左滑,停下来听敲管的暗号。向右滑,先带小舟上浮。」 + +#### 【玩家动作】小舟先上来,暗号回头再说——但先上滑听一遍潜次和氧气 + +t+ 77.3s ▶ 语音:「现在是第一次下潜。」 +t+ 79.4s ▶ 语音:「气瓶还足,救得动。」 +t+ 81.5s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 83.7s ♪ 向导音:choice(抉择/等待输入) +t+ 83.7s ▶ 语音:「管路在响。向左滑,停下来听敲管的暗号。向右滑,先带小舟上浮。」 +t+ 85.8s 【状态】听完状态链(第几潜+氧气档+口令),局面复述回来了 「请选择」念完了(第一潜):向左或向右滑做出你的决定(BGM=bgm/comms,语速1) + +#### 【玩家动作】下滑看看菜单有什么 + +t+ 85.8s ♪ 音效 sfx/ui_menu +t+ 85.8s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 85.8s ♪ 向导音:menu(系统界面) +t+ 85.8s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 87.9s ▶ 语音:「回到水下。」 +t+ 90.0s 【状态】菜单里,切一项听听 菜单里,当前项「回到水下」:单击切换,双击确认,上滑帮助,下滑关闭(BGM=bgm/deck,语速1) +t+ 90.0s ▶ 语音:「重新开始这次救援。」 + +#### 【玩家动作】听完了,下滑关闭菜单,回到水下 + +t+ 92.1s ♪ 音效 sfx/ui_confirm +t+ 92.1s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 92.1s ♪ 向导音:explore(探索/安全) +t+ 92.1s ♪ 向导音:choice(抉择/等待输入) +t+ 92.1s ▶ 语音:「管路在响。向左滑,停下来听敲管的暗号。向右滑,先带小舟上浮。」 +t+ 94.3s 【状态】选项念完了,做决定 「请选择」念完了(第一潜):向左或向右滑做出你的决定(BGM=bgm/comms,语速1) + +#### 【玩家动作】小舟先上来,暗号回头再说 + +t+ 94.3s ♪ 音效 sfx/ui_confirm +t+ 94.3s ▶ 语音:「小舟,抓住我的肩锁。我们上。」 +t+ 96.4s ▶ 语音:「好。上面……是不是天亮了?」 +t+ 99.8s ♪ 向导音:choice(抉择/等待输入) +t+ 99.8s ▶ 语音:「小舟想回去拿声呐日志。向左滑,等她。向右滑,直接上浮。」 +t+ 101.9s 【状态】选项念完了,做决定 「请选择」念完了(第一潜):向左或向右滑做出你的决定(BGM=bgm/comms,语速1) + +#### 【玩家动作】日志可以补,人不能等 + +t+ 101.9s ♪ 音效 sfx/ui_confirm +t+ 101.9s ▶ 语音:「日志可以补,人不能等。走了。」 +t+ 104.0s ♪ 向导音:settle(结算) +t+ 104.0s ♫ BGM 切换 → bgm/deck(淡入 800ms) +t+ 104.0s ♪ 音效 sfx/surf_splash +t+ 104.0s ♪ 音效 sfx/ascent_chime +t+ 104.0s ▶ 语音:「小舟出水,第一潜收工。往返,扣三格气。」 +t+ 106.2s ▶ 语音:「气瓶还足,救得动。」 +t+ 108.3s ♫ BGM 切换 → bgm/dive(淡入 800ms) +t+ 108.3s ♪ 向导音:explore(探索/安全) +t+ 108.3s ▶ 语音:「第二潜,机舱。顺着敲管的声音走。」 +t+ 110.4s ♪ 向导音:turn(轮到你) +t+ 110.4s 〰 震动:confirm(轻点确认) +t+ 110.4s 【状态】第二潜,再点一枚 声呐静了,轮到你了:单击发一枚脉冲(BGM=bgm/dive,语速1) +t+ 110.4s ♪ 音效 sfx/sonar_ping +t+ 111.3s ♪ 音效 sfx/echo_debris +t+ 113.5s ♪ 音效 sfx/pipe_knock +t+ 116.1s ▶ 语音:「碎石回波后面,敲管声密了。机舱到了。」 +t+ 118.2s ♫ BGM 切换 → bgm/comms(淡入 600ms) +t+ 118.2s ♪ 向导音:explore(探索/安全) +t+ 118.2s ▶ 语音:「哈哈,救援的?我这腿,跟冷却管缠上了。」 +t+ 123.0s ▶ 语音:「艇上的药板烧了。病舱那两个,比我悬。」 +t+ 127.5s ♪ 向导音:choice(抉择/等待输入) +t+ 127.5s ▶ 语音:「钢梁压着腿。向左滑,泄压后慢慢撬。向右滑,切割枪,快切。」 +t+ 129.6s 【状态】选项念完了,做决定 「请选择」念完了(第二潜):向左或向右滑做出你的决定(BGM=bgm/comms,语速1) + +#### 【玩家动作】切割枪快切,老白憋住气 + +t+ 129.6s ♪ 音效 sfx/ui_confirm +t+ 129.6s ▶ 语音:「切割枪。老白,闭眼,憋气。」 +t+ 131.7s ♪ 向导音:danger(危险) +t+ 131.7s ♪ 音效 sfx/spark_flash +t+ 131.7s 〰 震动:danger(危险逼近) +t+ 133.7s ▶ 语音:「火花炸了一下,虚惊。老白咳着,腿抽出来了。」 +t+ 135.8s ▶ 语音:「腿还在!我的腿还在!走,我给你带路。」 +t+ 140.4s ♪ 向导音:choice(抉择/等待输入) +t+ 140.4s ▶ 语音:「老白要去关电池舱阀门。向左滑,陪他去。向右滑,直接上浮。」 +t+ 142.5s 【状态】选项念完了,做决定 「请选择」念完了(第二潜):向左或向右滑做出你的决定(BGM=bgm/comms,语速1) + +#### 【玩家动作】阀门交给母船,腿要紧 + +t+ 142.5s ♪ 音效 sfx/ui_confirm +t+ 142.5s ▶ 语音:「阀门交给母船。你先上,腿要紧。」 +t+ 144.6s ♪ 向导音:settle(结算) +t+ 144.6s ♫ BGM 切换 → bgm/deck(淡入 800ms) +t+ 144.6s ♪ 音效 sfx/surf_splash +t+ 144.6s ♪ 音效 sfx/ascent_chime +t+ 144.6s ▶ 语音:「老白出水。他一直扒着舱门,往水里看。」 +t+ 146.7s ▶ 语音:「潜友阿凯捎来应急瓶。甲板上,粥给你温着。」 +t+ 148.8s ▶ 语音:「应急瓶接上了,多三格。」 +t+ 151.0s ♫ BGM 切换 → bgm/dive(淡入 800ms) +t+ 151.0s ♪ 向导音:explore(探索/安全) +t+ 151.0s ▶ 语音:「第三潜,病舱。海燕号在倾斜,别恋战。」 +t+ 153.1s ♪ 向导音:turn(轮到你) +t+ 153.1s 〰 震动:confirm(轻点确认) +t+ 153.1s 【状态】第三潜,再点一枚 声呐静了,轮到你了:单击发一枚脉冲(BGM=bgm/dive,语速1) +t+ 153.1s ♪ 音效 sfx/sonar_ping +t+ 154.0s ♪ 音效 sfx/echo_groan +t+ 158.0s ▶ 语音:「回波发闷。船体在呻吟,它撑不久了。」 +t+ 160.1s ♫ BGM 切换 → bgm/comms(淡入 600ms) +t+ 160.1s ♪ 向导音:explore(探索/安全) +t+ 160.1s ▶ 语音:「你来了。小郑股骨断了,我给他固定好了。」 +t+ 164.8s ▶ 语音:「救援钟一次带一个。我是医生,我最后走。」 +t+ 169.6s ♪ 向导音:choice(抉择/等待输入) +t+ 169.6s ▶ 语音:「病舱一次只能走一个。向左滑,先带陈医官。向右滑,先带小郑。」 +t+ 171.7s 【状态】选项念完了,做决定 「请选择」念完了(第三潜):向左或向右滑做出你的决定(BGM=bgm/comms,语速1) + +#### 【玩家动作】小郑重伤先走,陈医官下一潜就是你的 + +t+ 171.7s ♪ 音效 sfx/ui_confirm +t+ 171.7s ▶ 语音:「小郑先走。陈医官,下一潜,就是你的。」 +t+ 173.8s ▶ 语音:「小郑吊上去了。他一路,都没敢出声。」 +t+ 175.9s ▶ 语音:「去吧。我守着灯,灯不灭,人就不散。」 +t+ 180.2s ♪ 向导音:choice(抉择/等待输入) +t+ 180.2s ▶ 语音:「留守的人要空气。向左滑,留下你的备用瓶。向右滑,约定下一潜来接。」 +t+ 182.4s 【状态】选项念完了,做决定 「请选择」念完了(第三潜):向左或向右滑做出你的决定(BGM=bgm/comms,语速1) + +#### 【玩家动作】四小时内我下来,等我 + +t+ 182.4s ♪ 音效 sfx/ui_confirm +t+ 182.4s ▶ 语音:「四小时内,我下来。等我。」 +t+ 184.5s ♪ 向导音:settle(结算) +t+ 184.5s ♫ BGM 切换 → bgm/deck(淡入 800ms) +t+ 184.5s ♪ 音效 sfx/surf_splash +t+ 184.5s ♪ 音效 sfx/ascent_chime +t+ 184.5s ▶ 语音:「病舱的人出水。海燕号的呻吟,隔着水都听得见。」 +t+ 186.6s ▶ 语音:「氧气还够两潜。」 +t+ 188.7s ♫ BGM 切换 → bgm/dive(淡入 800ms) +t+ 188.7s ♪ 向导音:explore(探索/安全) +t+ 188.7s ▶ 语音:「最后一潜,指挥舱。海燕号,撑不住了。」 +t+ 190.8s ♪ 向导音:turn(轮到你) +t+ 190.8s 〰 震动:confirm(轻点确认) +t+ 190.8s 【状态】第四潜,再点一枚 声呐静了,轮到你了:单击发一枚脉冲(BGM=bgm/dive,语速1) +t+ 190.8s ♪ 音效 sfx/sonar_ping +t+ 191.7s ♪ 音效 sfx/echo_groan +t+ 195.7s ♪ 音效 sfx/echo_metal_r +t+ 197.9s ♪ 向导音:danger(危险) +t+ 197.9s ♪ 音效 sfx/landslide +t+ 197.9s 〰 震动:danger(危险逼近) +t+ 198.4s 〰 震动:danger(危险逼近) +t+ 198.9s 〰 震动:danger(危险逼近) +t+ 199.9s ▶ 语音:「它滑了!抓稳索缆,指挥舱里还有人!」 +t+ 199.4s 〰 震动:danger(危险逼近) +t+ 199.9s 〰 震动:danger(危险逼近) +t+ 200.4s 〰 震动:danger(危险逼近) +t+ 200.9s 〰 震动:danger(危险逼近) +t+ 201.4s 〰 震动:danger(危险逼近) +t+ 201.9s 〰 震动:danger(危险逼近) +t+ 202.1s ♫ BGM 切换 → bgm/comms(淡入 600ms) +t+ 202.1s ♪ 向导音:explore(探索/安全) +t+ 202.1s ▶ 语音:「救援员。我船上,还剩两个活人。」 +t+ 205.9s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+ 210.2s ♪ 向导音:choice(抉择/等待输入) +t+ 210.2s ▶ 语音:「双人上浮。向左滑,逐站减压慢慢浮。向右滑,违规直浮,搏一把。」 +t+ 212.3s 【状态】选项念完了,做决定 「请选择」念完了(第四潜):向左或向右滑做出你的决定(BGM=bgm/comms,语速1) + +#### 【玩家动作】来不及了,直浮!医疗舱的灯先开好 + +t+ 212.3s ♪ 音效 sfx/ui_confirm +t+ 212.3s ▶ 语音:「来不及了。直浮!」 +t+ 214.5s ▶ 语音:「违规快浮。医疗舱的灯,先给你们开好。」 +t+ 216.6s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+ 220.6s ♪ 向导音:choice(抉择/等待输入) +t+ 220.6s ▶ 语音:「船长的话没说完。向左滑,把你听到的说出来。向右滑,什么都不问,拉他上浮。」 +t+ 222.8s 【状态】选项念完了,做决定 「请选择」念完了(第四潜):向左或向右滑做出你的决定(BGM=bgm/comms,语速1) + +#### 【玩家动作】纪律就是纪律,拉他上浮 + +t+ 222.8s ♪ 音效 sfx/ui_confirm +t+ 222.8s ▶ 语音:「纪律就是纪律。抓住,上浮。」 +t+ 224.9s ♪ 向导音:settle(结算) +t+ 224.9s ♫ BGM 切换 → bgm/deck(淡入 800ms) +t+ 224.9s ♪ 音效 sfx/surf_splash +t+ 224.9s ♪ 音效 sfx/ascent_chime +t+ 224.9s ▶ 语音:「最后一潜收工。问海号的甲板,从没这么亮过。」 +t+ 227.0s ▶ 语音:「氧气见底,必须上浮。」 +t+ 227.0s 〰 震动:warning(警告三连震) +t+ 229.1s ▶ 语音:「医疗舱躺满了。你的气瓶剩多少,你比我清楚。」 +t+ 231.2s ▶ 语音:「三年前,也是这条沟。我按时上浮了,搭档没有。」 +t+ 258.4s ♪ 向导音:nudge(看门狗轻提醒) +t+ 258.4s ▶ 向导语音:「单击屏幕,继续。」 +t+ 283.4s ♪ 向导音:nudge(看门狗轻提醒) +t+ 283.4s ▶ 向导语音:「还在吗?单击继续。」 +t+ 285.5s 【状态】结局链走完,尾声逐人点到我每一潜的救与错过 结算链间隙,等单击继续(BGM=bgm/deck,语速1) + +#### 【玩家动作】船钟出水,五个人都在甲板上——会话结束(E1 海燕归钟) + diff --git a/research/new8/abyss/round1/transcript-stress.md b/research/new8/abyss/round1/transcript-stress.md new file mode 100644 index 00000000..227f293a --- /dev/null +++ b/research/new8/abyss/round1/transcript-stress.md @@ -0,0 +1,881 @@ +# 试玩转写:《abyss》 + +> 本文件是「玩家感知日志」:一位新手玩家的整局体验转写。语音列出了玩家听到的每句话全文, +> 音效/BGM/震动按发生时间列出。「静默」段 = 玩家什么也听不到。手势是剧本注入的(模拟真人手部动作), +> 非最优操作:包含犹豫、误操作与乱试。语音时长按语速估算(±20%),仅供节奏参考。 +t+ 0.0s (玩家点开游戏,轻触屏幕开始) +t+ 0.0s ♫ BGM 切换 → bgm/deck +t+ 0.0s ♪ 向导音:explore(探索/安全) +t+ 0.0s ▶ 语音:「新的一次下潜,开始了。」 +t+ 2.1s ▶ 向导语音:「单击继续简报。要选择时,向左或向右滑。」 +t+ 4.2s ▶ 语音:「风停了。我站在问海号甲板上,下面三千米,是海燕号。」 +t+ 6.4s ▶ 语音:「想跳过这句,单击就行。」 +t+ 8.5s ▶ 语音:「风停了。我站在问海号甲板上,下面三千米,是海燕号。」 +t+ 10.6s ♪ 音效 sfx/ui_menu +t+ 10.6s ♪ 向导音:menu(系统界面) +t+ 10.6s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 12.7s ▶ 语音:「回到水下。」 +t+ 14.8s ▶ 语音:「重新开始这次救援。」 +t+ 17.0s ♪ 音效 sfx/ui_confirm +t+ 17.0s ♪ 向导音:explore(探索/安全) +t+ 17.0s ▶ 语音:「风停了。我站在问海号甲板上,下面三千米,是海燕号。」 +t+ 19.1s ▶ 语音:「规矩就一条:气不够一潜,人就必须上浮。」 +t+ 21.2s ▶ 向导语音:「这个手势,水里用不上。」 +t+ 21.2s 〰 震动:error(做错了:两连短震) +t+ 21.2s ▶ 语音:「气瓶还足,救得动。」 +t+ 23.3s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 25.4s ▶ 语音:「规矩就一条:气不够一潜,人就必须上浮。」 +t+ 27.6s 〰 震动:error(做错了:两连短震) +t+ 27.6s ▶ 语音:「规矩就一条:气不够一潜,人就必须上浮。」 +t+ 29.7s 〰 震动:error(做错了:两连短震) +t+ 29.7s ♪ 音效 sfx/ui_menu +t+ 29.7s ♪ 向导音:menu(系统界面) +t+ 29.7s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 31.8s ▶ 语音:「回到水下。」 +t+ 33.9s ▶ 语音:「重新开始这次救援。」 +t+ 36.0s ♪ 音效 sfx/ui_confirm +t+ 36.0s ♪ 向导音:explore(探索/安全) +t+ 36.0s ▶ 语音:「规矩就一条:气不够一潜,人就必须上浮。」 +t+ 38.2s 〰 震动:error(做错了:两连短震) +t+ 38.2s 〰 震动:error(做错了:两连短震) +t+ 38.2s ▶ 语音:「气瓶还足,救得动。」 +t+ 38.2s 〰 震动:beat(节拍点) +t+ 40.3s ▶ 语音:「规矩就一条:气不够一潜,人就必须上浮。」 +t+ 42.4s 〰 震动:error(做错了:两连短震) +t+ 42.4s 〰 震动:error(做错了:两连短震) +t+ 42.4s ▶ 语音:「海燕号,五个人。你的双瓶,够下四潜。」 +t+ 44.5s ♪ 音效 sfx/ui_menu +t+ 44.5s ♪ 向导音:menu(系统界面) +t+ 44.5s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 46.6s ▶ 语音:「回到水下。」 +t+ 48.8s ▶ 语音:「重新开始这次救援。」 +t+ 50.9s ♪ 音效 sfx/ui_confirm +t+ 50.9s ♪ 向导音:explore(探索/安全) +t+ 50.9s ▶ 语音:「海燕号,五个人。你的双瓶,够下四潜。」 +t+ 53.0s 〰 震动:error(做错了:两连短震) +t+ 53.0s ▶ 语音:「气瓶还足,救得动。」 +t+ 55.1s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 57.2s ▶ 语音:「海燕号,五个人。你的双瓶,够下四潜。」 +t+ 59.4s ▶ 语音:「第一潜,找船。耳朵交给声呐。」 +t+ 61.5s ♫ BGM 切换 → bgm/dive(淡入 800ms) +t+ 61.5s ♪ 向导音:explore(探索/安全) +t+ 61.5s ▶ 语音:「下潜开始。水会越来越黑,声音会越来越多。」 +t+ 63.6s ▶ 语音:「到深度了。声呐静了。单击,发一枚脉冲。」 +t+ 65.7s ♪ 向导音:turn(轮到你) +t+ 65.7s 〰 震动:confirm(轻点确认) +t+ 65.7s ♪ 音效 sfx/sonar_ping +t+ 66.6s ♪ 音效 sfx/echo_metal_l +t+ 68.8s ▶ 语音:「金属回波,钢板。听见这个,就是海燕号的船身。」 +t+ 70.9s ♪ 音效 sfx/link_beep +t+ 70.9s ▶ 语音:「回波后面有杂音,是电台!接通了。」 +t+ 73.1s ♫ BGM 切换 → bgm/comms(淡入 600ms) +t+ 73.1s ♪ 向导音:explore(探索/安全) +t+ 73.1s ♪ 音效 sfx/static_burst +t+ 73.1s ▶ 语音:「……有人吗?声呐兵,小舟。我们还活着,全艇五个人。」 +t+ 79.1s ♪ 音效 sfx/ui_menu +t+ 79.1s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 79.1s ♪ 向导音:menu(系统界面) +t+ 79.1s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 81.3s ▶ 语音:「回到水下。」 +t+ 83.4s ▶ 语音:「重新开始这次救援。」 +t+ 85.5s ♪ 音效 sfx/ui_confirm +t+ 85.5s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 85.5s ♪ 向导音:explore(探索/安全) +t+ 85.5s ♪ 向导音:explore(探索/安全) +t+ 85.5s ♪ 音效 sfx/static_burst +t+ 85.5s ▶ 语音:「……有人吗?声呐兵,小舟。我们还活着,全艇五个人。」 +t+ 91.6s 〰 震动:error(做错了:两连短震) +t+ 91.6s ▶ 语音:「现在是第一次下潜。」 +t+ 93.7s ▶ 语音:「气瓶还足,救得动。」 +t+ 95.8s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 97.9s ♪ 向导音:explore(探索/安全) +t+ 97.9s ♪ 音效 sfx/static_burst +t+ 97.9s ▶ 语音:「……有人吗?声呐兵,小舟。我们还活着,全艇五个人。」 +t+ 104.0s ▶ 语音:「现在是第一次下潜。」 +t+ 104.0s 〰 震动:beat(节拍点) +t+ 106.1s ▶ 语音:「气瓶还足,救得动。」 +t+ 108.2s ♪ 向导音:explore(探索/安全) +t+ 108.2s ♪ 音效 sfx/static_burst +t+ 108.2s ▶ 语音:「……有人吗?声呐兵,小舟。我们还活着,全艇五个人。」 +t+ 114.3s 〰 震动:error(做错了:两连短震) +t+ 114.3s ♪ 向导音:explore(探索/安全) +t+ 114.3s ♪ 音效 sfx/static_burst +t+ 114.3s ▶ 语音:「……有人吗?声呐兵,小舟。我们还活着,全艇五个人。」 +t+ 120.4s 〰 震动:error(做错了:两连短震) +t+ 120.4s ♪ 向导音:explore(探索/安全) +t+ 120.4s ♪ 音效 sfx/static_burst +t+ 120.4s ▶ 语音:「……有人吗?声呐兵,小舟。我们还活着,全艇五个人。」 +t+ 126.5s 〰 震动:error(做错了:两连短震) +t+ 126.5s ▶ 语音:「现在是第一次下潜。」 +t+ 126.5s 〰 震动:beat(节拍点) +t+ 128.6s ▶ 语音:「气瓶还足,救得动。」 +t+ 130.7s ♪ 向导音:explore(探索/安全) +t+ 130.7s ♪ 音效 sfx/static_burst +t+ 130.7s ▶ 语音:「……有人吗?声呐兵,小舟。我们还活着,全艇五个人。」 +t+ 136.8s 〰 震动:error(做错了:两连短震) +t+ 136.8s ▶ 语音:「轮机长老白困在机舱,陈医官和小郑在病舱,船长在指挥舱。」 +t+ 143.3s 〰 震动:error(做错了:两连短震) +t+ 143.3s 〰 震动:error(做错了:两连短震) +t+ 143.3s ▶ 语音:「轮机长老白困在机舱,陈医官和小郑在病舱,船长在指挥舱。」 +t+ 149.8s 〰 震动:error(做错了:两连短震) +t+ 149.8s 〰 震动:error(做错了:两连短震) +t+ 149.8s ▶ 语音:「现在是第一次下潜。」 +t+ 151.9s ▶ 语音:「气瓶还足,救得动。」 +t+ 154.1s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 156.2s ▶ 语音:「轮机长老白困在机舱,陈医官和小郑在病舱,船长在指挥舱。」 +t+ 162.7s ▶ 语音:「现在是第一次下潜。」 +t+ 162.7s 〰 震动:beat(节拍点) +t+ 164.8s ▶ 语音:「气瓶还足,救得动。」 +t+ 166.9s ▶ 语音:「轮机长老白困在机舱,陈医官和小郑在病舱,船长在指挥舱。」 +t+ 173.5s 〰 震动:error(做错了:两连短震) +t+ 173.5s ▶ 语音:「现在是第一次下潜。」 +t+ 173.5s 〰 震动:beat(节拍点) +t+ 175.6s ▶ 语音:「气瓶还足,救得动。」 +t+ 177.7s ▶ 语音:「轮机长老白困在机舱,陈医官和小郑在病舱,船长在指挥舱。」 +t+ 184.2s 〰 震动:error(做错了:两连短震) +t+ 184.2s ▶ 语音:「现在是第一次下潜。」 +t+ 184.2s 〰 震动:beat(节拍点) +t+ 186.3s ▶ 语音:「气瓶还足,救得动。」 +t+ 188.5s ▶ 语音:「轮机长老白困在机舱,陈医官和小郑在病舱,船长在指挥舱。」 +t+ 195.0s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 198.8s ♪ 音效 sfx/pipe_knock +t+ 201.4s ♪ 音效 sfx/pipe_knock +t+ 204.0s ♪ 音效 sfx/ui_menu +t+ 204.0s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 204.0s ♪ 向导音:menu(系统界面) +t+ 204.0s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 206.2s ▶ 语音:「回到水下。」 +t+ 208.3s ▶ 语音:「重新开始这次救援。」 +t+ 210.4s ♪ 音效 sfx/ui_confirm +t+ 210.4s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 210.4s ♪ 向导音:explore(探索/安全) +t+ 210.4s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 214.3s ♪ 音效 sfx/pipe_knock +t+ 216.9s ♪ 音效 sfx/pipe_knock +t+ 219.5s ♪ 音效 sfx/ui_menu +t+ 219.5s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 219.5s ♪ 向导音:menu(系统界面) +t+ 219.5s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 221.6s ▶ 语音:「回到水下。」 +t+ 223.7s ▶ 语音:「重新开始这次救援。」 +t+ 225.8s ♪ 音效 sfx/ui_confirm +t+ 225.8s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 225.8s ♪ 向导音:explore(探索/安全) +t+ 225.8s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 229.7s ♪ 音效 sfx/pipe_knock +t+ 232.3s ♪ 音效 sfx/pipe_knock +t+ 234.9s ▶ 语音:「现在是第一次下潜。」 +t+ 237.0s ▶ 语音:「气瓶还足,救得动。」 +t+ 239.1s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 241.2s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 245.1s ♪ 音效 sfx/pipe_knock +t+ 247.7s ♪ 音效 sfx/pipe_knock +t+ 250.3s ♪ 音效 sfx/ui_menu +t+ 250.3s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 250.3s ♪ 向导音:menu(系统界面) +t+ 250.3s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 252.4s ▶ 语音:「回到水下。」 +t+ 254.5s ▶ 语音:「重新开始这次救援。」 +t+ 256.6s ♪ 音效 sfx/ui_confirm +t+ 256.6s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 256.6s ♪ 向导音:explore(探索/安全) +t+ 256.6s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 260.5s ♪ 音效 sfx/pipe_knock +t+ 263.1s ♪ 音效 sfx/pipe_knock +t+ 265.7s ♪ 音效 sfx/ui_menu +t+ 265.7s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 265.7s ♪ 向导音:menu(系统界面) +t+ 265.7s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 267.8s ▶ 语音:「回到水下。」 +t+ 269.9s ▶ 语音:「重新开始这次救援。」 +t+ 272.1s ♪ 音效 sfx/ui_confirm +t+ 272.1s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 272.1s ♪ 向导音:explore(探索/安全) +t+ 272.1s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 275.9s ♪ 音效 sfx/pipe_knock +t+ 278.5s ♪ 音效 sfx/pipe_knock +t+ 281.1s 〰 震动:error(做错了:两连短震) +t+ 281.1s ▶ 语音:「现在是第一次下潜。」 +t+ 281.1s 〰 震动:beat(节拍点) +t+ 283.2s ▶ 语音:「气瓶还足,救得动。」 +t+ 285.3s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 289.2s ♪ 音效 sfx/pipe_knock +t+ 291.8s ♪ 音效 sfx/pipe_knock +t+ 294.4s 〰 震动:error(做错了:两连短震) +t+ 294.4s ▶ 语音:「现在是第一次下潜。」 +t+ 294.4s 〰 震动:beat(节拍点) +t+ 296.5s ▶ 语音:「气瓶还足,救得动。」 +t+ 298.6s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 302.5s ♪ 音效 sfx/pipe_knock +t+ 305.1s ♪ 音效 sfx/pipe_knock +t+ 307.7s ♪ 音效 sfx/ui_menu +t+ 307.7s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 307.7s ♪ 向导音:menu(系统界面) +t+ 307.7s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 309.8s ▶ 语音:「回到水下。」 +t+ 311.9s ▶ 语音:「重新开始这次救援。」 +t+ 314.1s ♪ 音效 sfx/ui_confirm +t+ 314.1s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 314.1s ♪ 向导音:explore(探索/安全) +t+ 314.1s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 317.9s ♪ 音效 sfx/pipe_knock +t+ 320.5s ♪ 音效 sfx/pipe_knock +t+ 323.1s ♪ 音效 sfx/ui_menu +t+ 323.1s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 323.1s ♪ 向导音:menu(系统界面) +t+ 323.1s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 325.2s ▶ 语音:「回到水下。」 +t+ 327.3s ▶ 语音:「重新开始这次救援。」 +t+ 329.5s ♪ 音效 sfx/ui_confirm +t+ 329.5s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 329.5s ♪ 向导音:explore(探索/安全) +t+ 329.5s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 333.3s ♪ 音效 sfx/pipe_knock +t+ 335.9s ♪ 音效 sfx/pipe_knock +t+ 338.5s 〰 震动:error(做错了:两连短震) +t+ 338.5s 〰 震动:error(做错了:两连短震) +t+ 338.5s ♪ 音效 sfx/ui_menu +t+ 338.5s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 338.5s ♪ 向导音:menu(系统界面) +t+ 338.5s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 340.6s ▶ 语音:「回到水下。」 +t+ 342.8s ▶ 语音:「重新开始这次救援。」 +t+ 344.9s ♪ 音效 sfx/ui_confirm +t+ 344.9s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 344.9s ♪ 向导音:explore(探索/安全) +t+ 344.9s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 348.7s ♪ 音效 sfx/pipe_knock +t+ 351.3s ♪ 音效 sfx/pipe_knock +t+ 353.9s ▶ 语音:「现在是第一次下潜。」 +t+ 353.9s 〰 震动:beat(节拍点) +t+ 356.1s ▶ 语音:「气瓶还足,救得动。」 +t+ 358.2s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 362.0s ♪ 音效 sfx/pipe_knock +t+ 364.6s ♪ 音效 sfx/pipe_knock +t+ 367.2s ▶ 语音:「现在是第一次下潜。」 +t+ 367.2s 〰 震动:beat(节拍点) +t+ 369.3s ▶ 语音:「气瓶还足,救得动。」 +t+ 371.5s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 375.3s ♪ 音效 sfx/pipe_knock +t+ 377.9s ♪ 音效 sfx/pipe_knock +t+ 380.5s 〰 震动:error(做错了:两连短震) +t+ 380.5s 〰 震动:error(做错了:两连短震) +t+ 380.5s ♪ 音效 sfx/ui_menu +t+ 380.5s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 380.5s ♪ 向导音:menu(系统界面) +t+ 380.5s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 382.6s ▶ 语音:「回到水下。」 +t+ 384.8s ▶ 语音:「重新开始这次救援。」 +t+ 386.9s ♪ 音效 sfx/ui_confirm +t+ 386.9s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 386.9s ♪ 向导音:explore(探索/安全) +t+ 386.9s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 390.7s ♪ 音效 sfx/pipe_knock +t+ 393.3s ♪ 音效 sfx/pipe_knock +t+ 395.9s 〰 震动:error(做错了:两连短震) +t+ 395.9s ♪ 音效 sfx/ui_menu +t+ 395.9s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 395.9s ♪ 向导音:menu(系统界面) +t+ 395.9s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 398.1s ▶ 语音:「回到水下。」 +t+ 400.2s ▶ 语音:「重新开始这次救援。」 +t+ 402.3s ♪ 音效 sfx/ui_confirm +t+ 402.3s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 402.3s ♪ 向导音:explore(探索/安全) +t+ 402.3s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 406.1s ♪ 音效 sfx/pipe_knock +t+ 408.7s ♪ 音效 sfx/pipe_knock +t+ 411.3s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 415.2s ♪ 音效 sfx/pipe_knock +t+ 417.8s ♪ 音效 sfx/pipe_knock +t+ 420.4s 〰 震动:error(做错了:两连短震) +t+ 420.4s ▶ 语音:「现在是第一次下潜。」 +t+ 420.4s 〰 震动:beat(节拍点) +t+ 422.5s ▶ 语音:「气瓶还足,救得动。」 +t+ 424.6s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 428.5s ♪ 音效 sfx/pipe_knock +t+ 431.1s ♪ 音效 sfx/pipe_knock +t+ 433.7s ♪ 向导音:choice(抉择/等待输入) +t+ 433.7s ▶ 语音:「管路在响。向左滑,停下来听敲管的暗号。向右滑,先带小舟上浮。」 +t+ 435.8s ♪ 音效 sfx/ui_confirm +t+ 435.8s ▶ 语音:「都别出声。管子那头,敲得很稳。」 +t+ 437.9s ♪ 音效 sfx/pipe_knock +t+ 440.5s ▶ 语音:「都别出声。管子那头,敲得很稳。」 +t+ 442.7s ♪ 音效 sfx/pipe_knock +t+ 445.3s 〰 震动:error(做错了:两连短震) +t+ 445.3s ♪ 音效 sfx/ui_menu +t+ 445.3s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 445.3s ♪ 向导音:menu(系统界面) +t+ 445.3s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 447.4s ▶ 语音:「回到水下。」 +t+ 449.5s ▶ 语音:「重新开始这次救援。」 +t+ 451.6s ♪ 音效 sfx/ui_confirm +t+ 451.6s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 451.6s ♪ 向导音:explore(探索/安全) +t+ 451.6s ▶ 语音:「都别出声。管子那头,敲得很稳。」 +t+ 453.7s ♪ 音效 sfx/pipe_knock +t+ 456.3s 〰 震动:error(做错了:两连短震) +t+ 456.3s ▶ 语音:「现在是第一次下潜。」 +t+ 458.5s ▶ 语音:「氧气还够两潜。」 +t+ 460.6s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 462.7s ▶ 语音:「都别出声。管子那头,敲得很稳。」 +t+ 464.8s ♪ 音效 sfx/pipe_knock +t+ 467.4s ▶ 语音:「都别出声。管子那头,敲得很稳。」 +t+ 469.5s ♪ 音效 sfx/pipe_knock +t+ 472.1s 〰 震动:error(做错了:两连短震) +t+ 472.1s 〰 震动:error(做错了:两连短震) +t+ 472.1s ▶ 语音:「是老白的暗号:腿被压住,先泄压,再撬。记住这个敲法。」 +t+ 474.3s ▶ 语音:「现在是第一次下潜。」 +t+ 476.4s ▶ 语音:「氧气还够两潜。」 +t+ 478.5s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 480.6s ▶ 语音:「是老白的暗号:腿被压住,先泄压,再撬。记住这个敲法。」 +t+ 482.7s ♪ 音效 sfx/ui_menu +t+ 482.7s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 482.7s ♪ 向导音:menu(系统界面) +t+ 482.7s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 484.9s ▶ 语音:「回到水下。」 +t+ 487.0s ▶ 语音:「重新开始这次救援。」 +t+ 489.1s ♪ 音效 sfx/ui_confirm +t+ 489.1s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 489.1s ♪ 向导音:explore(探索/安全) +t+ 489.1s ▶ 语音:「是老白的暗号:腿被压住,先泄压,再撬。记住这个敲法。」 +t+ 491.2s ♪ 音效 sfx/ui_menu +t+ 491.2s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 491.2s ♪ 向导音:menu(系统界面) +t+ 491.2s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 493.3s ▶ 语音:「回到水下。」 +t+ 495.5s ▶ 语音:「重新开始这次救援。」 +t+ 497.6s ♪ 音效 sfx/ui_confirm +t+ 497.6s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 497.6s ♪ 向导音:explore(探索/安全) +t+ 497.6s ▶ 语音:「是老白的暗号:腿被压住,先泄压,再撬。记住这个敲法。」 +t+ 499.7s ♪ 音效 sfx/ui_menu +t+ 499.7s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 499.7s ♪ 向导音:menu(系统界面) +t+ 499.7s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 501.8s ▶ 语音:「回到水下。」 +t+ 503.9s ▶ 语音:「重新开始这次救援。」 +t+ 506.1s ♪ 音效 sfx/ui_confirm +t+ 506.1s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 506.1s ♪ 向导音:explore(探索/安全) +t+ 506.1s ▶ 语音:「是老白的暗号:腿被压住,先泄压,再撬。记住这个敲法。」 +t+ 508.2s ▶ 语音:「现在是第一次下潜。」 +t+ 508.2s 〰 震动:beat(节拍点) +t+ 510.3s ▶ 语音:「氧气还够两潜。」 +t+ 512.4s ▶ 语音:「是老白的暗号:腿被压住,先泄压,再撬。记住这个敲法。」 +t+ 514.5s ▶ 语音:「现在是第一次下潜。」 +t+ 514.5s 〰 震动:beat(节拍点) +t+ 516.7s ▶ 语音:「氧气还够两潜。」 +t+ 518.8s ▶ 语音:「是老白的暗号:腿被压住,先泄压,再撬。记住这个敲法。」 +t+ 520.9s ▶ 语音:「是老白的暗号:腿被压住,先泄压,再撬。记住这个敲法。」 +t+ 523.0s 〰 震动:error(做错了:两连短震) +t+ 523.0s ♪ 向导音:choice(抉择/等待输入) +t+ 523.0s ▶ 语音:「小舟想回去拿声呐日志。向左滑,等她。向右滑,直接上浮。」 +t+ 525.1s ♪ 音效 sfx/ui_confirm +t+ 525.1s ▶ 语音:「日志可以补,人不能等。走了。」 +t+ 527.3s ♪ 音效 sfx/ui_menu +t+ 527.3s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 527.3s ♪ 向导音:menu(系统界面) +t+ 527.3s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 529.4s ▶ 语音:「回到水下。」 +t+ 531.5s ▶ 语音:「重新开始这次救援。」 +t+ 533.6s ♪ 音效 sfx/ui_confirm +t+ 533.6s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 533.6s ♪ 向导音:explore(探索/安全) +t+ 533.6s ▶ 语音:「日志可以补,人不能等。走了。」 +t+ 535.7s ♪ 音效 sfx/ui_menu +t+ 535.7s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 535.7s ♪ 向导音:menu(系统界面) +t+ 535.7s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 537.9s ▶ 语音:「回到水下。」 +t+ 540.0s ▶ 语音:「重新开始这次救援。」 +t+ 542.1s ♪ 音效 sfx/ui_confirm +t+ 542.1s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 542.1s ♪ 向导音:explore(探索/安全) +t+ 542.1s ▶ 语音:「日志可以补,人不能等。走了。」 +t+ 544.2s 〰 震动:error(做错了:两连短震) +t+ 544.2s 〰 震动:error(做错了:两连短震) +t+ 544.2s 〰 震动:error(做错了:两连短震) +t+ 544.2s ▶ 语音:「现在是第一次下潜。」 +t+ 546.3s ▶ 语音:「氧气还够两潜。」 +t+ 548.5s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 550.6s ▶ 语音:「日志可以补,人不能等。走了。」 +t+ 552.7s ▶ 语音:「现在是第一次下潜。」 +t+ 552.7s 〰 震动:beat(节拍点) +t+ 554.8s ▶ 语音:「氧气还够两潜。」 +t+ 556.9s ▶ 语音:「日志可以补,人不能等。走了。」 +t+ 559.1s ▶ 语音:「现在是第一次下潜。」 +t+ 559.1s 〰 震动:beat(节拍点) +t+ 561.2s ▶ 语音:「氧气还够两潜。」 +t+ 563.3s ▶ 语音:「日志可以补,人不能等。走了。」 +t+ 565.4s ▶ 语音:「日志可以补,人不能等。走了。」 +t+ 567.5s 〰 震动:error(做错了:两连短震) +t+ 567.5s ♪ 向导音:settle(结算) +t+ 567.5s ♫ BGM 切换 → bgm/deck(淡入 800ms) +t+ 567.5s ♪ 音效 sfx/surf_splash +t+ 567.5s ♪ 音效 sfx/ascent_chime +t+ 567.5s ▶ 语音:「小舟出水,第一潜收工。往返,扣三格气。」 +t+ 569.7s ▶ 语音:「氧气还够两潜。」 +t+ 571.8s ♫ BGM 切换 → bgm/dive(淡入 800ms) +t+ 571.8s ♪ 向导音:explore(探索/安全) +t+ 571.8s ▶ 语音:「第二潜,机舱。顺着敲管的声音走。」 +t+ 573.9s ♪ 向导音:turn(轮到你) +t+ 573.9s 〰 震动:confirm(轻点确认) +t+ 573.9s ♪ 音效 sfx/sonar_ping +t+ 574.8s ♪ 音效 sfx/echo_debris +t+ 577.0s ♪ 音效 sfx/pipe_knock +t+ 579.6s ▶ 语音:「碎石回波后面,敲管声密了。机舱到了。」 +t+ 581.7s ♫ BGM 切换 → bgm/comms(淡入 600ms) +t+ 581.7s ♪ 向导音:explore(探索/安全) +t+ 581.7s ▶ 语音:「哈哈,救援的?我这腿,跟冷却管缠上了。」 +t+ 586.5s ▶ 语音:「现在是第二次下潜。」 +t+ 588.6s ▶ 语音:「氧气告急,只够最后一潜。」 +t+ 590.7s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 592.8s ♪ 向导音:explore(探索/安全) +t+ 592.8s ▶ 语音:「哈哈,救援的?我这腿,跟冷却管缠上了。」 +t+ 597.6s ▶ 语音:「艇上的药板烧了。病舱那两个,比我悬。」 +t+ 602.1s 〰 震动:error(做错了:两连短震) +t+ 602.1s ♪ 音效 sfx/ui_menu +t+ 602.1s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 602.1s ♪ 向导音:menu(系统界面) +t+ 602.1s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 604.2s ▶ 语音:「回到水下。」 +t+ 606.3s ▶ 语音:「重新开始这次救援。」 +t+ 608.4s ♪ 音效 sfx/ui_confirm +t+ 608.4s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 608.4s ♪ 向导音:explore(探索/安全) +t+ 608.4s ▶ 语音:「艇上的药板烧了。病舱那两个,比我悬。」 +t+ 613.0s ♪ 音效 sfx/ui_menu +t+ 613.0s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 613.0s ♪ 向导音:menu(系统界面) +t+ 613.0s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 615.1s ▶ 语音:「回到水下。」 +t+ 617.2s ▶ 语音:「重新开始这次救援。」 +t+ 619.3s ♪ 音效 sfx/ui_confirm +t+ 619.3s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 619.3s ♪ 向导音:explore(探索/安全) +t+ 619.3s ▶ 语音:「艇上的药板烧了。病舱那两个,比我悬。」 +t+ 623.8s 〰 震动:error(做错了:两连短震) +t+ 623.8s ♪ 音效 sfx/ui_menu +t+ 623.8s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 623.8s ♪ 向导音:menu(系统界面) +t+ 623.8s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 626.0s ▶ 语音:「回到水下。」 +t+ 628.1s ▶ 语音:「重新开始这次救援。」 +t+ 630.2s ♪ 音效 sfx/ui_confirm +t+ 630.2s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 630.2s ♪ 向导音:explore(探索/安全) +t+ 630.2s ▶ 语音:「艇上的药板烧了。病舱那两个,比我悬。」 +t+ 634.7s 〰 震动:error(做错了:两连短震) +t+ 634.7s ♪ 向导音:choice(抉择/等待输入) +t+ 634.7s ▶ 语音:「钢梁压着腿。向左滑,泄压后慢慢撬。向右滑,切割枪,快切。」 +t+ 636.8s ♪ 向导音:choice(抉择/等待输入) +t+ 636.8s ▶ 语音:「钢梁压着腿。向左滑,泄压后慢慢撬。向右滑,切割枪,快切。」 +t+ 639.0s ♪ 音效 sfx/ui_confirm +t+ 639.0s ▶ 语音:「老白,忍住。先泄压,再撬。」 +t+ 641.1s ▶ 语音:「现在是第二次下潜。」 +t+ 643.2s ▶ 语音:「氧气告急,只够最后一潜。」 +t+ 645.3s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 647.4s ▶ 语音:「老白,忍住。先泄压,再撬。」 +t+ 649.6s 〰 震动:error(做错了:两连短震) +t+ 649.6s ▶ 语音:「暗号没白听。管子一松,钢梁抬起来了。」 +t+ 651.7s ♪ 音效 sfx/ui_menu +t+ 651.7s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 651.7s ♪ 向导音:menu(系统界面) +t+ 651.7s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 653.8s ▶ 语音:「回到水下。」 +t+ 655.9s ▶ 语音:「重新开始这次救援。」 +t+ 658.0s ♪ 音效 sfx/ui_confirm +t+ 658.0s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 658.0s ♪ 向导音:explore(探索/安全) +t+ 658.0s ▶ 语音:「暗号没白听。管子一松,钢梁抬起来了。」 +t+ 660.2s 〰 震动:error(做错了:两连短震) +t+ 660.2s ♪ 音效 sfx/ui_menu +t+ 660.2s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 660.2s ♪ 向导音:menu(系统界面) +t+ 660.2s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 662.3s ▶ 语音:「回到水下。」 +t+ 664.4s ▶ 语音:「重新开始这次救援。」 +t+ 666.5s ♪ 音效 sfx/ui_confirm +t+ 666.5s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 666.5s ♪ 向导音:explore(探索/安全) +t+ 666.5s ▶ 语音:「暗号没白听。管子一松,钢梁抬起来了。」 +t+ 668.6s ▶ 语音:「暗号没白听。管子一松,钢梁抬起来了。」 +t+ 670.8s 〰 震动:error(做错了:两连短震) +t+ 670.8s ▶ 语音:「现在是第二次下潜。」 +t+ 672.9s ▶ 语音:「氧气告急,只够最后一潜。」 +t+ 675.0s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 677.1s ▶ 语音:「暗号没白听。管子一松,钢梁抬起来了。」 +t+ 679.2s 〰 震动:error(做错了:两连短震) +t+ 679.2s 〰 震动:error(做错了:两连短震) +t+ 679.2s 〰 震动:error(做错了:两连短震) +t+ 679.2s ▶ 语音:「暗号没白听。管子一松,钢梁抬起来了。」 +t+ 681.4s ▶ 语音:「腿还在!我的腿还在!走,我给你带路。」 +t+ 685.9s ♪ 向导音:choice(抉择/等待输入) +t+ 685.9s ▶ 语音:「老白要去关电池舱阀门。向左滑,陪他去。向右滑,直接上浮。」 +t+ 688.0s ♪ 音效 sfx/ui_confirm +t+ 688.0s ▶ 语音:「阀门交给母船。你先上,腿要紧。」 +t+ 690.1s ▶ 语音:「现在是第二次下潜。」 +t+ 692.2s ▶ 语音:「氧气告急,只够最后一潜。」 +t+ 694.4s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 696.5s ▶ 语音:「阀门交给母船。你先上,腿要紧。」 +t+ 698.6s ♪ 音效 sfx/ui_menu +t+ 698.6s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 698.6s ♪ 向导音:menu(系统界面) +t+ 698.6s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 700.7s ▶ 语音:「回到水下。」 +t+ 702.8s ▶ 语音:「重新开始这次救援。」 +t+ 705.0s ♪ 音效 sfx/ui_confirm +t+ 705.0s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 705.0s ♪ 向导音:explore(探索/安全) +t+ 705.0s ▶ 语音:「阀门交给母船。你先上,腿要紧。」 +t+ 707.1s ♪ 音效 sfx/ui_menu +t+ 707.1s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 707.1s ♪ 向导音:menu(系统界面) +t+ 707.1s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 709.2s ▶ 语音:「回到水下。」 +t+ 711.3s ▶ 语音:「重新开始这次救援。」 +t+ 713.4s ♪ 音效 sfx/ui_confirm +t+ 713.4s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 713.4s ♪ 向导音:explore(探索/安全) +t+ 713.4s ▶ 语音:「阀门交给母船。你先上,腿要紧。」 +t+ 715.6s ▶ 语音:「阀门交给母船。你先上,腿要紧。」 +t+ 717.7s 〰 震动:error(做错了:两连短震) +t+ 717.7s ▶ 语音:「阀门交给母船。你先上,腿要紧。」 +t+ 719.8s ♪ 向导音:settle(结算) +t+ 719.8s ♫ BGM 切换 → bgm/deck(淡入 800ms) +t+ 719.8s ♪ 音效 sfx/surf_splash +t+ 719.8s ♪ 音效 sfx/ascent_chime +t+ 719.8s ▶ 语音:「老白出水。他一直扒着舱门,往水里看。」 +t+ 721.9s ▶ 语音:「潜友阿凯捎来应急瓶。甲板上,粥给你温着。」 +t+ 724.0s ▶ 语音:「应急瓶接上了,多三格。」 +t+ 726.2s ♫ BGM 切换 → bgm/dive(淡入 800ms) +t+ 726.2s ♪ 向导音:explore(探索/安全) +t+ 726.2s ▶ 语音:「第三潜,病舱。海燕号在倾斜,别恋战。」 +t+ 728.3s ♪ 向导音:turn(轮到你) +t+ 728.3s 〰 震动:confirm(轻点确认) +t+ 728.3s ♪ 音效 sfx/sonar_ping +t+ 729.2s ♪ 音效 sfx/echo_groan +t+ 733.2s ▶ 语音:「回波发闷。船体在呻吟,它撑不久了。」 +t+ 735.3s ♫ BGM 切换 → bgm/comms(淡入 600ms) +t+ 735.3s ♪ 向导音:explore(探索/安全) +t+ 735.3s ▶ 语音:「你来了。小郑股骨断了,我给他固定好了。」 +t+ 740.0s ♪ 音效 sfx/ui_menu +t+ 740.0s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 740.0s ♪ 向导音:menu(系统界面) +t+ 740.0s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 742.2s ▶ 语音:「回到水下。」 +t+ 744.3s ▶ 语音:「重新开始这次救援。」 +t+ 746.4s ♪ 音效 sfx/ui_confirm +t+ 746.4s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 746.4s ♪ 向导音:explore(探索/安全) +t+ 746.4s ♪ 向导音:explore(探索/安全) +t+ 746.4s ▶ 语音:「你来了。小郑股骨断了,我给他固定好了。」 +t+ 751.1s 〰 震动:error(做错了:两连短震) +t+ 751.1s ♪ 音效 sfx/ui_menu +t+ 751.1s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 751.1s ♪ 向导音:menu(系统界面) +t+ 751.1s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 753.3s ▶ 语音:「回到水下。」 +t+ 755.4s ▶ 语音:「重新开始这次救援。」 +t+ 757.5s ♪ 音效 sfx/ui_confirm +t+ 757.5s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 757.5s ♪ 向导音:explore(探索/安全) +t+ 757.5s ♪ 向导音:explore(探索/安全) +t+ 757.5s ▶ 语音:「你来了。小郑股骨断了,我给他固定好了。」 +t+ 762.2s ♪ 向导音:explore(探索/安全) +t+ 762.2s ▶ 语音:「你来了。小郑股骨断了,我给他固定好了。」 +t+ 767.0s ▶ 语音:「救援钟一次带一个。我是医生,我最后走。」 +t+ 771.7s ♪ 音效 sfx/ui_menu +t+ 771.7s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 771.7s ♪ 向导音:menu(系统界面) +t+ 771.7s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 773.9s ▶ 语音:「回到水下。」 +t+ 776.0s ▶ 语音:「重新开始这次救援。」 +t+ 778.1s ♪ 音效 sfx/ui_confirm +t+ 778.1s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 778.1s ♪ 向导音:explore(探索/安全) +t+ 778.1s ▶ 语音:「救援钟一次带一个。我是医生,我最后走。」 +t+ 782.8s ♪ 音效 sfx/ui_menu +t+ 782.8s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 782.8s ♪ 向导音:menu(系统界面) +t+ 782.8s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 785.0s ▶ 语音:「回到水下。」 +t+ 787.1s ▶ 语音:「重新开始这次救援。」 +t+ 789.2s ♪ 音效 sfx/ui_confirm +t+ 789.2s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 789.2s ♪ 向导音:explore(探索/安全) +t+ 789.2s ▶ 语音:「救援钟一次带一个。我是医生,我最后走。」 +t+ 793.9s 〰 震动:error(做错了:两连短震) +t+ 793.9s ▶ 语音:「救援钟一次带一个。我是医生,我最后走。」 +t+ 798.7s ▶ 语音:「现在是第三次下潜。」 +t+ 800.8s ▶ 语音:「氧气告急,只够最后一潜。」 +t+ 802.9s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 805.0s ▶ 语音:「救援钟一次带一个。我是医生,我最后走。」 +t+ 809.8s ♪ 音效 sfx/ui_menu +t+ 809.8s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 809.8s ♪ 向导音:menu(系统界面) +t+ 809.8s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 811.9s ▶ 语音:「回到水下。」 +t+ 814.0s ▶ 语音:「重新开始这次救援。」 +t+ 816.1s ♪ 音效 sfx/ui_confirm +t+ 816.1s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 816.1s ♪ 向导音:explore(探索/安全) +t+ 816.1s ▶ 语音:「救援钟一次带一个。我是医生,我最后走。」 +t+ 820.9s 〰 震动:error(做错了:两连短震) +t+ 820.9s 〰 震动:error(做错了:两连短震) +t+ 820.9s 〰 震动:error(做错了:两连短震) +t+ 820.9s ♪ 向导音:choice(抉择/等待输入) +t+ 820.9s ▶ 语音:「病舱一次只能走一个。向左滑,先带陈医官。向右滑,先带小郑。」 +t+ 823.0s ♪ 音效 sfx/ui_confirm +t+ 823.0s ▶ 语音:「小郑先走。陈医官,下一潜,就是你的。」 +t+ 825.1s ▶ 语音:「小郑吊上去了。他一路,都没敢出声。」 +t+ 827.2s ♪ 音效 sfx/ui_menu +t+ 827.2s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 827.2s ♪ 向导音:menu(系统界面) +t+ 827.2s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 829.4s ▶ 语音:「回到水下。」 +t+ 831.5s ▶ 语音:「重新开始这次救援。」 +t+ 833.6s ♪ 音效 sfx/ui_confirm +t+ 833.6s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 833.6s ♪ 向导音:explore(探索/安全) +t+ 833.6s ▶ 语音:「小郑吊上去了。他一路,都没敢出声。」 +t+ 835.7s 〰 震动:error(做错了:两连短震) +t+ 835.7s 〰 震动:error(做错了:两连短震) +t+ 835.7s ♪ 音效 sfx/ui_menu +t+ 835.7s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 835.7s ♪ 向导音:menu(系统界面) +t+ 835.7s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 837.8s ▶ 语音:「回到水下。」 +t+ 840.0s ▶ 语音:「重新开始这次救援。」 +t+ 842.1s ♪ 音效 sfx/ui_confirm +t+ 842.1s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 842.1s ♪ 向导音:explore(探索/安全) +t+ 842.1s ▶ 语音:「小郑吊上去了。他一路,都没敢出声。」 +t+ 844.2s 〰 震动:error(做错了:两连短震) +t+ 844.2s ▶ 语音:「去吧。我守着灯,灯不灭,人就不散。」 +t+ 848.5s ▶ 语音:「现在是第三次下潜。」 +t+ 850.6s ▶ 语音:「氧气告急,只够最后一潜。」 +t+ 852.7s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 854.9s ▶ 语音:「去吧。我守着灯,灯不灭,人就不散。」 +t+ 859.2s ▶ 语音:「去吧。我守着灯,灯不灭,人就不散。」 +t+ 863.5s ♪ 向导音:choice(抉择/等待输入) +t+ 863.5s ▶ 语音:「留守的人要空气。向左滑,留下你的备用瓶。向右滑,约定下一潜来接。」 +t+ 865.6s ♪ 音效 sfx/ui_confirm +t+ 865.6s ▶ 语音:「备用瓶留下。灯,给我亮着。」 +t+ 867.7s ▶ 语音:「备用瓶挂上了,能多撑十二小时。」 +t+ 869.8s ♪ 向导音:settle(结算) +t+ 869.8s ♫ BGM 切换 → bgm/deck(淡入 800ms) +t+ 869.8s ♪ 音效 sfx/surf_splash +t+ 869.8s ♪ 音效 sfx/ascent_chime +t+ 869.8s ▶ 语音:「病舱的人出水。海燕号的呻吟,隔着水都听得见。」 +t+ 871.9s ▶ 语音:「氧气告急,只够最后一潜。」 +t+ 874.1s ♫ BGM 切换 → bgm/dive(淡入 800ms) +t+ 874.1s ♪ 向导音:explore(探索/安全) +t+ 874.1s ▶ 语音:「最后一潜,指挥舱。海燕号,撑不住了。」 +t+ 876.2s ♪ 向导音:turn(轮到你) +t+ 876.2s 〰 震动:confirm(轻点确认) +t+ 876.2s ♪ 音效 sfx/sonar_ping +t+ 877.1s ♪ 音效 sfx/echo_groan +t+ 881.1s ♪ 音效 sfx/echo_metal_r +t+ 883.3s ♪ 向导音:danger(危险) +t+ 883.3s ♪ 音效 sfx/landslide +t+ 883.3s 〰 震动:danger(危险逼近) +t+ 883.8s 〰 震动:danger(危险逼近) +t+ 884.3s 〰 震动:danger(危险逼近) +t+ 884.8s 〰 震动:danger(危险逼近) +t+ 885.3s ▶ 语音:「它滑了!抓稳索缆,指挥舱里还有人!」 +t+ 885.3s 〰 震动:danger(危险逼近) +t+ 885.8s 〰 震动:danger(危险逼近) +t+ 886.3s 〰 震动:danger(危险逼近) +t+ 886.8s 〰 震动:danger(危险逼近) +t+ 887.4s ♫ BGM 切换 → bgm/comms(淡入 600ms) +t+ 887.4s ♪ 向导音:explore(探索/安全) +t+ 887.4s ▶ 语音:「救援员。我船上,还剩两个活人。」 +t+ 887.3s 〰 震动:danger(危险逼近) +t+ 891.2s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+ 895.5s ▶ 语音:「现在是最后一次下潜。」 +t+ 895.5s 〰 震动:warning(警告三连震) +t+ 897.7s ▶ 语音:「氧气见底,必须上浮。」 +t+ 899.8s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 901.9s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+ 906.2s ▶ 语音:「现在是最后一次下潜。」 +t+ 906.2s 〰 震动:warning(警告三连震) +t+ 906.2s 〰 震动:beat(节拍点) +t+ 908.3s ▶ 语音:「氧气见底,必须上浮。」 +t+ 910.4s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+ 914.7s ▶ 语音:「现在是最后一次下潜。」 +t+ 914.7s 〰 震动:warning(警告三连震) +t+ 914.7s 〰 震动:beat(节拍点) +t+ 916.9s ▶ 语音:「氧气见底,必须上浮。」 +t+ 919.0s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+ 923.3s 〰 震动:error(做错了:两连短震) +t+ 923.3s ▶ 语音:「现在是最后一次下潜。」 +t+ 923.3s 〰 震动:warning(警告三连震) +t+ 923.3s 〰 震动:beat(节拍点) +t+ 925.4s ▶ 语音:「氧气见底,必须上浮。」 +t+ 927.5s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+ 931.8s 〰 震动:error(做错了:两连短震) +t+ 931.8s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+ 936.1s ♪ 音效 sfx/ui_menu +t+ 936.1s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 936.1s ♪ 向导音:menu(系统界面) +t+ 936.1s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 938.2s ▶ 语音:「回到水下。」 +t+ 940.4s ▶ 语音:「重新开始这次救援。」 +t+ 942.5s ♪ 音效 sfx/ui_confirm +t+ 942.5s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 942.5s ♪ 向导音:explore(探索/安全) +t+ 942.5s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+ 946.8s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+ 951.1s ♪ 音效 sfx/ui_menu +t+ 951.1s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 951.1s ♪ 向导音:menu(系统界面) +t+ 951.1s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 953.2s ▶ 语音:「回到水下。」 +t+ 955.3s ▶ 语音:「重新开始这次救援。」 +t+ 957.4s ♪ 音效 sfx/ui_confirm +t+ 957.4s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 957.4s ♪ 向导音:explore(探索/安全) +t+ 957.4s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+ 961.7s 〰 震动:error(做错了:两连短震) +t+ 961.7s ▶ 语音:「现在是最后一次下潜。」 +t+ 961.7s 〰 震动:warning(警告三连震) +t+ 961.7s 〰 震动:beat(节拍点) +t+ 963.8s ▶ 语音:「氧气见底,必须上浮。」 +t+ 966.0s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+ 970.3s ♪ 音效 sfx/ui_menu +t+ 970.3s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 970.3s ♪ 向导音:menu(系统界面) +t+ 970.3s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 972.4s ▶ 语音:「回到水下。」 +t+ 974.5s ▶ 语音:「重新开始这次救援。」 +t+ 976.6s ♪ 音效 sfx/ui_confirm +t+ 976.6s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 976.6s ♪ 向导音:explore(探索/安全) +t+ 976.6s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+ 980.9s ♪ 向导音:choice(抉择/等待输入) +t+ 980.9s ▶ 语音:「气只够带一个。向左滑,带船长。向右滑,带陈医官。」 +t+ 983.0s ♪ 音效 sfx/ui_confirm +t+ 983.0s ▶ 语音:「船长,抓住我。海燕号的事,上面再说。」 +t+ 985.2s ♪ 音效 sfx/ui_menu +t+ 985.2s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 985.2s ♪ 向导音:menu(系统界面) +t+ 985.2s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 987.3s ▶ 语音:「回到水下。」 +t+ 989.4s ▶ 语音:「重新开始这次救援。」 +t+ 991.5s ♪ 音效 sfx/ui_confirm +t+ 991.5s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 991.5s ♪ 向导音:explore(探索/安全) +t+ 991.5s ▶ 语音:「船长,抓住我。海燕号的事,上面再说。」 +t+ 993.6s 〰 震动:error(做错了:两连短震) +t+ 993.6s 〰 震动:error(做错了:两连短震) +t+ 993.6s ▶ 语音:「船长,抓住我。海燕号的事,上面再说。」 +t+ 995.8s 〰 震动:error(做错了:两连短震) +t+ 995.8s ▶ 语音:「去吧。灯我留着,人齐了就熄。」 +t+ 999.4s 〰 震动:error(做错了:两连短震) +t+ 999.4s ▶ 语音:「现在是最后一次下潜。」 +t+ 999.4s 〰 震动:warning(警告三连震) +t+1001.5s ▶ 语音:「氧气见底,必须上浮。」 +t+1003.6s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+1005.8s ▶ 语音:「去吧。灯我留着,人齐了就熄。」 +t+1009.4s 〰 震动:error(做错了:两连短震) +t+1009.4s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+1013.5s 〰 震动:error(做错了:两连短震) +t+1013.5s ▶ 语音:「现在是最后一次下潜。」 +t+1013.5s 〰 震动:warning(警告三连震) +t+1015.6s ▶ 语音:「氧气见底,必须上浮。」 +t+1017.7s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+1019.8s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+1023.9s ▶ 语音:「现在是最后一次下潜。」 +t+1023.9s 〰 震动:warning(警告三连震) +t+1023.9s 〰 震动:beat(节拍点) +t+1026.0s ▶ 语音:「氧气见底,必须上浮。」 +t+1028.1s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+1032.2s ♪ 音效 sfx/ui_menu +t+1032.2s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+1032.2s ♪ 向导音:menu(系统界面) +t+1032.2s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+1034.3s ▶ 语音:「回到水下。」 +t+1036.5s ▶ 语音:「重新开始这次救援。」 +t+1038.6s ♪ 音效 sfx/ui_confirm +t+1038.6s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+1038.6s ♪ 向导音:explore(探索/安全) +t+1038.6s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+1042.6s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+1046.7s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+1050.8s ▶ 语音:「现在是最后一次下潜。」 +t+1050.8s 〰 震动:warning(警告三连震) +t+1050.8s 〰 震动:beat(节拍点) +t+1052.9s ▶ 语音:「氧气见底,必须上浮。」 +t+1055.0s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+1059.1s ▶ 语音:「现在是最后一次下潜。」 +t+1059.1s 〰 震动:warning(警告三连震) +t+1059.1s 〰 震动:beat(节拍点) +t+1061.2s ▶ 语音:「氧气见底,必须上浮。」 +t+1063.4s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+1067.4s 〰 震动:error(做错了:两连短震) +t+1067.4s 〰 震动:error(做错了:两连短震) +t+1067.4s 〰 震动:error(做错了:两连短震) +t+1067.4s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+1071.5s ♪ 向导音:choice(抉择/等待输入) +t+1071.5s ▶ 语音:「船长的话没说完。向左滑,把你听到的说出来。向右滑,什么都不问,拉他上浮。」 +t+1073.6s ▶ 语音:「现在是最后一次下潜。」 +t+1073.6s 〰 震动:warning(警告三连震) +t+1073.6s ♪ 音效 sfx/ui_confirm +t+1073.6s ▶ 语音:「纪律就是纪律。抓住,上浮。」 +t+1075.7s 〰 震动:error(做错了:两连短震) +t+1075.7s ▶ 语音:「现在是最后一次下潜。」 +t+1075.7s 〰 震动:warning(警告三连震) +t+1077.9s ▶ 语音:「氧气见底,必须上浮。」 +t+1080.0s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+1082.1s ▶ 语音:「纪律就是纪律。抓住,上浮。」 +t+1084.2s 〰 震动:error(做错了:两连短震) +t+1084.2s 〰 震动:error(做错了:两连短震) +t+1084.2s 〰 震动:error(做错了:两连短震) +t+1084.2s ♪ 音效 sfx/ui_menu +t+1084.2s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+1084.2s ♪ 向导音:menu(系统界面) +t+1084.2s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+1086.3s ▶ 语音:「回到水下。」 +t+1088.5s ▶ 语音:「重新开始这次救援。」 +t+1090.6s ♪ 音效 sfx/ui_confirm +t+1090.6s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+1090.6s ♪ 向导音:explore(探索/安全) +t+1090.6s ▶ 语音:「纪律就是纪律。抓住,上浮。」 +t+1092.7s ▶ 语音:「纪律就是纪律。抓住,上浮。」 +t+1094.8s ♪ 音效 sfx/ui_menu +t+1094.8s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+1094.8s ♪ 向导音:menu(系统界面) +t+1094.8s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+1096.9s ▶ 语音:「回到水下。」 +t+1099.1s ▶ 语音:「重新开始这次救援。」 +t+1101.2s ♪ 音效 sfx/ui_confirm +t+1101.2s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+1101.2s ♪ 向导音:explore(探索/安全) +t+1101.2s ▶ 语音:「纪律就是纪律。抓住,上浮。」 +t+1103.3s 〰 震动:error(做错了:两连短震) +t+1103.3s ▶ 语音:「现在是最后一次下潜。」 +t+1103.3s 〰 震动:warning(警告三连震) +t+1103.3s 〰 震动:beat(节拍点) +t+1105.4s ▶ 语音:「氧气见底,必须上浮。」 +t+1107.5s ▶ 语音:「纪律就是纪律。抓住,上浮。」 +t+1109.7s 〰 震动:error(做错了:两连短震) +t+1109.7s 〰 震动:error(做错了:两连短震) +t+1109.7s ♪ 向导音:settle(结算) +t+1109.7s ♫ BGM 切换 → bgm/deck(淡入 800ms) +t+1109.7s ♪ 音效 sfx/surf_splash +t+1109.7s ♪ 音效 sfx/ascent_chime +t+1109.7s ▶ 语音:「最后一潜收工。问海号的甲板,从没这么亮过。」 +t+1111.8s ▶ 语音:「氧气见底,必须上浮。」 +t+1111.8s 〰 震动:warning(警告三连震) +t+1113.9s ▶ 语音:「医疗舱躺满了。你的气瓶剩多少,你比我清楚。」 +t+1116.0s ▶ 语音:「三年前,也是这条沟。我按时上浮了,搭档没有。」 +t+1143.1s ♪ 向导音:nudge(看门狗轻提醒) +t+1143.1s ▶ 向导语音:「单击屏幕,继续。」 +t+1168.1s ♪ 向导音:nudge(看门狗轻提醒) +t+1168.1s ▶ 向导语音:「还在吗?单击继续。」 +t+1170.3s 【状态】乱按剧本收尾:脉冲 4 次、8 个抉择、乱试 209 次、逛菜单 40 次 结算链间隙,等单击继续(BGM=bgm/deck,语速1) + +#### 【玩家动作】全程没有任何一次手势被无声吞掉,也没有卡死在某个状态里——结局链照样走完 + diff --git a/research/new8/abyss/round2/live-player.md b/research/new8/abyss/round2/live-player.md new file mode 100644 index 00000000..f5b4eee8 --- /dev/null +++ b/research/new8/abyss/round2/live-player.md @@ -0,0 +1,131 @@ +# 《深海回音》全拟真试玩报告 — R2 修复验证轮(认真新手 + 急性子) + +> 本轮性质:R1 synthesis 十项修复(F1-F10)的**现场验证轮**——R1 的复现步骤原样重做, +> 坏结果不再出现、且新行为被事件/音频双重证据锁定。同时补上 R1 未覆盖的单载形态路径。 + +## 基本信息 + +- 对象:`web/abyss/`(R2 修复后,game.js 含 F1-F10;新资产 18 段已入库)@ localhost:8001, + 真头 Chromium + SenseVoice ASR 全拟真。泳道专用控制实例 localhost:8124(8123 为 detective + 泳道在用,未动)。产物:`web/harness/live/out/abyss-20260913041253`(局 A)与 + `abyss-20260913042318`(局 B)。 +- 局 A(认真新手):`voice=male, speed=normal, bgm=normal, guide=full`,约 9.8 分钟录音 + 时长,50 个手势(tap 38 / swiperight 8 / swipedown 2 / swipeup 1 / swipeleft 1)。 + 开场撞上前序会话存档(ASK → 单击续进 INTRO 复述)。**结局 e1「海燕归钟」**(全右省气 + + p9 左取钟;saved=5),结尾单击「再来一局」→ sys_new_dive 正常重开。 +- 局 B(急性子):`voice=female, speed=1.7, bgm=normal, guide=standard`,约 9.3 分钟, + 128 个手势(tap 68 / swipeleft 53 / swiperight 4 / swipedown 2 / doubletap 1), + 抢跑跳句、96s 乱按(48 次无效左滑)、菜单开关、结算句连点截击。**路径 p1左 p3左 p6左 + → 氧气门单载形态(R1 live 未覆盖)→ p7 左带船长 → chen_last → p8 右 → oxy_end=0 → + p9 左封锁 g9_dry 自动右 → e4「按规程上浮」(saved=4)**。 +- ASR 判定:局 A 84 段 OK 79 / TRUNCATED 3 / MISMATCH 2;局 B 82 段 OK 45 / MISMATCH 26 + / TRUNCATED 10(1.7x 下 MISMATCH 为已知 ASR 伪影,降权解读,见测量局限)。两局 + console.error = 0,零死锁、零语音叠语音。 + +## R1 → R2 逐项修复 · 现场验证结论 + +### F1 ping 迟到 → **修好(两次现场命中,证据最硬)** +- R1 复现步骤:搜索等待干等到 gd_ping1 响起(「声呐待命。单击,发脉冲。」),照做单击。 +- 局 A D1:gd_ping1 ta=67.63 起播,我 ta≈68.98 单击 → **gd_ping1 同刻被掐(vend reason=kill + ta=68.982),sonar_ping ta=68.982 同刻起播**——R1 的 17.3s 排队迟到消失。 +- 局 A D3 同款复验:gd_ping1 304.47 起播 → 单击 → kill 305.887 = sonar_ping 305.887 同刻。 +- 局 B 对照(standard 档,乱按停手后 gd_ping1 在播时单击):gd_ping1 175.40 起 → kill + 177.08 → ping 178.67(1.6s = 解码延迟,R1 同场景迟到 12.4s 落进 COMMS 句隙)。 +- 代价入账:两句 gd_ping1 被判 TRUNCATED——这是**设计意图**(玩家已照做,提示说完即过时), + 与 gd_continue 被推进单击掐半句同类,记入「设计内截断」而非问题。 + +### F2 档位句/签收链不设防 → **修好** +- 根因修复(`_isTailSentence` 改认实际播放链尾,dyn 注入句纳入保护)后: + 局 B 对 oxy_ok / oxy_low / oxy_crit_deck 三句档位播报各做「起播即二连 tap」截击—— + **三句全部自然播完(truncated=false)**,单击只换来 beat 轻震(R1:oxy_low 0.71s 被掐)。 +- 签收链入口 800ms 死窗:局 A g9_in 完整播出(OK 0.97);局 B 我在 g9_in 起播后 + +240ms/+660ms 连点,第一拍被死窗吞掉,第二拍(死窗已过)按 §2.3「自动链单击=跳过本句」 + 合法跳过(播了 1.0s,R1 同场景是在途 tap 把它剁到 0.28s)。**意外截断已堵死, + 主动跳过保留**——正是修复目标。 + +### F3 回波→静默一拍→解读 → **修好** +- 局 A 实测:echo_metal_l 起播 → dv1_metal 起播间隔 **3.31s**(资产实长 2.76s + 0.55s + 静默一拍);echo_groan → dv3_groan 间隔 **5.01s**(实长 4.42s + 0.59s)。R1 的尾巴压 + 解读句开头 0.35~0.55s 不再出现,P1 评审要的「定位一拍」还给耳朵了。 + +### F4 双载 +1 格无声扣款 → **修好** +- 局 A 双载 D4:dv4_down 之后追加 **dv4_dual「两个人下同一潜。这趟往返,扣四格气。」** + (OK 0.71)。心算账 12−3−3+3−3−4=2 与耳朵听到的 crit 档(2 格)对齐——无声的扣款没有了。 + +### F5 crit 档错场景措辞 → **修好** +- 局 A SURFACE(4)(人已出水):播 **oxy_crit_deck「氧气见底,一潜都下不去了。」**(OK 0.86), + 原句「必须上浮」全程零播出;水下场景原句保留(playtest 断言覆盖:剧本 D 水下状态链 + 播 oxy_crit、deck 变体零播出)。 + +### F6 跳句承诺名存实亡 → **修好(首播保护 + 复播可即掐,G5 两半都兑现)** +- sys_skip 新词局 A/局 B 均播出:「听过的句子再播时,单击就能跳过。」(OK 1.0)。 +- 局 A 现场:z1_b 首播单击不跳(完整播完 OK 0.96)→ 菜单开关触发复述重播 → 句中单击 + **即掐**(TRUNCATED 0.77s,设计内截断)→ 链正常推进 z1_knock。首播保护挡住吃尾根因, + 复播快放兑现教学承诺。 + +### F7 链末首轮提醒 25s 太晚 → **修好** +- 局 A:z1_a 播完(ta=86.93)我走神不说话 → **gd_continue ta=99.93 响起,间隔恰 13.0s** + (R1 为 25s)。走神气口被接住,钩子不再晾 25 秒。 + +### F8 D4 震循环过密 → **修好** +- 局 A D4 危机拍 danger 震签名时间列:411.46 / 412.56 / 413.66 / 414.76 / 415.86 / 416.96 + ——间隔 **1.1s**(R1 为 0.5s 约 10 连震),4 秒危机窗内 5 遍,紧迫感在、电钻感消失。 + +### F9 crit 震重复 → **修好**(playtest 断言:同档 crit 复听零新增 warning 震; +两局真机侧无任何异常连震投诉场景复现) + +### F10 状态链缺已救人数 → **修好** +- 局 A D2 搜索上滑:状态链 prog_d2 → **prog_saved1「已经救上一个人。」(OK 1.0)** → + oxy 档 → sys_help(G6 新顺序)。被打断后要捡回的第三样局面(船上躺着谁)入耳。 + +### V2 双击重听回波(R1 覆盖缺口)→ **补上** +- 局 B D2 搜索双击:echo_metal_l 重播(ta=258.40)→ dv1_metal 解读句重播(ta=261.70) + 同序兑现,重听后回搜索等待正常发脉冲。R5 承诺首次真机命中。 + +### 传承机制抽查(本轮顺带复验) +- 无进展轨乱按抢救:局 B 96s 乱按(48 次无效左滑)期间 **gd_prog1 ta=94.9(60s 整)/ + gd_prog2 ta=154.9(120s 整)** 准点响起,停手后 gd_ping1 接管——乱按饿不死。 +- pendingChoice:局 B 三次提示句播放中预滑(p2/p5/p8 位),播完即生效、零插播。 +- 菜单暂停一切链:局 B bai_a 播放中开菜单 → 当句掐停、关闭后**原节点重播复述**(局面不丢)。 +- p9 氧气封锁:局 B oxy=0 左滑取钟 → **g9_dry 播出后自动走右,不摆假选项**(R1 取消链 + 路径的封锁句在单载路径同样兑现)。 +- 氧气账目:局 B 逐检查点——12−3−1=8(D1 后 ok 档首播)→ 8−3−0=5、supply+3=8(D2 后 + 未跨档静默不播)→ 8−3−2=3(D3 后 low「只够最后一潜」)→ 氧气门 3=单载 → D4 起播 + 3−3=0 → 收队 oxy_crit_deck(crit 水面变体)。逐格与 §4.5 公式一致。 + +## 问题清单 + +### P0(阻塞/卡死/状态混淆) +无。两局完整到结局(e1/e4 各一),含存档续玩、结算重开、菜单往返、96s 乱按。 + +### P1(体验断裂) +无。R1 的三个 P1(ping 迟到 / 跳句承诺 / 结算截断)全部现场坐实修好,且未修出新断裂。 + +### P2/P3(观察项,全部轻微) +1. **设计内截断清单**(玩家主动动作所致,非 bug):局 B 的 dv1_down/dv1_metal/dv1_link/ + dv4_slide/g9_in/g9_dry/ep_chen_lost/oxy_gain 八处 kill 全部是我自己的抢跑单击/开菜单 + 所为——auto 链中段可跳是设计原文。其中 **dv1_metal(「金属回波=钢板」教学句)与 + oxy_gain(补给账目句)首播即可被一跳而过**:跳与不跳是玩家自由,但这两句是 §6.3 + 承诺清单句,建议 v2 评估是否把「承诺句」纳入首播保护(本轮不动,记 backlog)。 +2. **驱动器仪器注记**:局 B 乱按 96s 期间驱动脚本阻塞未轮询事件,停手后批量补课导致 + 约 3 次「迟到的抢跑单击」落在 dv1_metal/dv1_link 上(放大第 1 条的样本量,非游戏缺陷)。 +3. 1.7x 下 ASR 相似度整体偏低(局 B MISMATCH 26/82,「氧气还够两潜」→「还够2000」等 + 数字盲区同 R1)——事件层(truncated 标志)两局全部可信,ASR 层在 1.7x 只做参考。 +4. NPC 电台滤波句 ASR 可读性与 R1 持平(z1_a 0.72→本局 OK;gao 系 0.45-0.51 区间), + 事件层零截断——滤波可懂度仍属人耳复核项(V3 持续开放)。 + +## 玩家情绪时间线 + +- 局 A:续档复述进开场 → D1 等看门狗说话时单击,**ping 应声而出**(R1 的违和感消失)→ + 走神 14s 被 13s 首轮提醒接住 → 菜单复述后一跳即走(跳句终于是真的)→ D2 听状态听到 + 「已经救上一个人」→ D4 下水前调度明说「这趟扣四格」,账平了 → 滑坡震从电钻变成心跳 → + 收队听到「一潜都下不去了」(不再是甲板上的「必须上浮」)→ e1 船钟出水,单击再来一局。 +- 局 B:续档直入 → 抢跑发现首播句跳不动(beat 轻震),改用 1.7x 硬灌 → 96s 乱按被 + prog 双级捞回 → 双击真的把上一枚回波+解读重放了一遍 → 单载抉择「气只够带一个」 + 手心出汗 → 连点截击档位句全部失败(句句播完)→ 取钟被 g9_dry 拦下「能带的,你都带 + 回来了」→ e4 收队,陈医官那句「灯还亮着」收尾。 + +## 结论 + +**R1 的 F1-F10 全部现场坐实修复,P0/P1 = 0,两局打到 e1/e4。** 剩余全部为设计内行为 +与仪器局限。建议 R2 人设复评直接读本轮转写 + 本报告。 diff --git a/research/new8/abyss/round2/p1-blind.md b/research/new8/abyss/round2/p1-blind.md new file mode 100644 index 00000000..41814c67 --- /dev/null +++ b/research/new8/abyss/round2/p1-blind.md @@ -0,0 +1,19 @@ +# P1 视障资深玩家评审:《深海回音》(R2) + +> 评审依据:research/new8/abyss/round2/ 的 transcript-main.md(全右省气 + p9 左主线)+ transcript-stress.md(209 次乱按 + 40 次逛菜单压力局)+ live-player.md(真机双局:e1/e4,F1-F10 现场验证)全读。R1 我给 4.5/5+5/5,这轮手里多了一把尺子:我自己 R1 提的三条,修没修、怎么修的。 + +### 深海回音 +- 状态感知:5/5 —— R1 我扣的 0.5 分两笔都讨回来了。① D4 那格无声扣款口播了:双载下水调度明说「两个人下同一潜。这趟往返,扣四格气。」(main t+199.6),我的心算账 12−3−3+3−3−4=2 和耳朵听到的 crit 档第一次对齐;② 错场景的「必须上浮」纠正了:水下问状态还是「氧气见底,必须上浮」(stress t+1136.5),人一出水就是「氧气见底,一潜都下不去了」(t+1191.2)——同档两句、各自说对话,这是档位表里那行小字备注终于落了地。新增的人数句「已经救上一个人/两个人/三个人」(stress t+626.8→848.5→900.4 随进度递进)把状态链补全了:潜次、人头、氧气、口令,四样俱全。真机侧账目同样逐格为真(live 局 B 逐检查点 8→8→3→0,句义与 floor(oxy/3) 一致)。 +- 下一步明确性:5/5 —— R1 的 25 秒死等缩短到 13 秒(main t+33.6 走神 → t+46.6 首轮「单击屏幕,继续」准点接住,live 实测 13.0s 整);搜索等待 turn+震+口播三重提示不变;压力局乱按 209 次依然零卡死、零无声吞手势。 +- 愿意继续玩:是 —— 上一轮我说「菜单第三项听全之前先押半局」,这轮账耳合一之后,整局押上。四结局我还想再收两个。 +- P0 问题:无。 +- 建议: + 1. **跳句承诺这次是真的了,请把「承诺句」也护进首播**:sys_skip 改了实话(「听过的句子再播时,单击就能跳过。」main t+6.4),live 局 A 现场演示了首播完整、复述即掐——G5 两半都兑现,这是我 15 年读屏生涯最在意的一条,做对了。但 live 局 B 暴露一个边角:dv1_metal(「金属回波=钢板」的教学句)和 oxy_gain(补给账目句)作为 auto 链中段,首播就能被一跳而过。跳是玩家的自由,可这两句是 §6.3 承诺清单的句子——建议 v2 把「承诺句」纳入首播保护(复播照常可掐)。 + 2. 菜单第三项:R1 的「保存并回大厅 41 次零露脸」这轮由 playtest 断言关案(循环顺序+双击执行=当前项,我已读断言增量)——但两轮转写里它依然一次没被玩家听到(剧本每次都提前关菜单)。断言证明它在,耳朵没听过它。R3 若还有轮次,让转写剧本把三项听全一次,我就彻底销案。 + 3. 双击重听回波(R5)这轮在真机侧补上了(live 局 B:回波+解读同序重放 ✓),转写侧两轮剧本仍零触发——转写剧本补一发双击,让离线证据和真机证据对称。 + +#### 专项复核(R1 三张 checklist 的 R2 结局) +- sonarGate 零重叠——过,且 R2 更干净了。F3 把回波 wait 调到资产实长+静默一拍:main t+20.0 回波起 → t+23.3 解读起(3.3s),stress 各接缝同款。R1 那个「尾巴压解读 0.35~0.55s」的毛刺消失,「回波→静默一拍→解读」从纸面走进耳朵。玩家脉冲现在先于门(gd 散句在播时先掐后响,live 两次同刻命中 68.98/305.89)——我 R1 担心的「教学潜第一次演示就错序」不复存在。 +- 氧气账目——逐格全真,且**说的比 R1 更全**:扣四格有口播、crit 分场景两句、人数入状态链。我没有再能对上的错账。这作的账本现在是三作里最硬的。 +- 三套信息一致性——零打架保持;新增证言:stress 局 209 次乱按+40 次菜单后,状态链四件套(潜次/人头/氧档/口令)依然每次都对。 +- 补充裁定说明:R1 synthesis 把 P4 的「第一潜收工透风应急瓶」裁定不改——我复议后**支持不改**:先吓后补正是 supply 兜底的教学时刻,且档位句逐格为真,不算假账。 diff --git a/research/new8/abyss/round2/p2-student.md b/research/new8/abyss/round2/p2-student.md new file mode 100644 index 00000000..7ee8e5bf --- /dev/null +++ b/research/new8/abyss/round2/p2-student.md @@ -0,0 +1,18 @@ +# P2 · 时间充裕的大学生 评审——《深海回音》(R2) + +> 视角:23:30,宿舍躺床,戴耳机。评审对象:R2 双转写 + live-player.md(真机 e1/e4 双局)。R1 我给 5/4/是,扣的那分就是 25 秒静默——这轮专门来收账。 + +### 深海回音 +- 状态感知:5/5 —— 状态链这轮多了「已经救上两个人」(stress t+848.5)这种话,躺床走神回来一听就知道进度;氧气播报依然是我最信的账目(main 双载下水那句「这趟往返,扣四格气」t+199.6,把我 R1 没细抠但隐约觉得「少了一格」的违和直接说破了)。 +- 下一步明确性:5/5 —— 收账成功:R1 那个掐在钩子上的 25 秒静默,这轮 13 秒就有人接话(main t+33.6 走神 → t+46.6「单击屏幕,继续」;live 实测准点 13.0s)。躺床玩家的走神点被精确接住,结局链前的长静默同理缩短。全程没有任何一刻「不知道该干嘛」。 +- 愿意继续玩:是 —— 比 R1 更想:跳句终于是真的(听过的句子复述时一跳就走),重玩收结局的心理门槛大降;氧气门三形态我两轮听到了双载(main)和单载(stress t+1045.5「气只够带一个」),还差一个「取消第四潜」的残局想亲耳听。 +- P0 问题:无。 +- 建议: + 1. **结局进度顺嘴报一句**(R1 提过,这轮没动,继续催):四种归宿+氧气门三形态是全作最值得吆喝的重玩设计,收尾结算时报一句「四种归宿,这是第一种」,二刷率会再抬一截。理解它在 v2 backlog,重申一次需求强度。 + 2. D4 滑坡震这轮降成 1.1s 一遍、4 秒里 4 遍(stress t+937.3-940.6)——从电钻变成心跳,分寸对了。别再加回去了,真机上再加也不该超过这个密度。 + 3. breath_loop 低氧呼吸垫两轮转写零记录(仪器口径),live 事件层证实起停正常——真机人耳复核时请优先听这一层,它是低档氧气「听得见的紧迫感」的全部载体。 + +#### 睡前躺床与氧气压力的设计感(R2 复读) +- 头 3 分钟:钩子节奏没被修复拖慢——19 秒发出第一枚脉冲,而且这轮 ping 应声而出(R1 真机那个「照做了却没听见 ping」的违和,live 两次复验同刻修复)。新手村到首胜的链路现在是完整的。 +- 氧气压力:从「账目式压力」升级为「账目式压力+明账口播」。扣四格那句加得漂亮——压力没变,但每一格气都有人亲口跟我算,躺床心算党狂喜。单载那句「气只够带一个。向左滑,带船长。向右滑,带陈医官。」依然是全作最高光。 +- 重玩动力:跳句承诺兑现后,「为另一个结局再潜一次」的成本从「重听 20 分钟」降到「复述段一跳而过」——这是本轮对我「愿不愿意再开一局」影响最大的一条,比任何新内容都实在。 diff --git a/research/new8/abyss/round2/p3-office.md b/research/new8/abyss/round2/p3-office.md new file mode 100644 index 00000000..6c61316b --- /dev/null +++ b/research/new8/abyss/round2/p3-office.md @@ -0,0 +1,19 @@ +# P3 评审:《深海回音》(abyss)R2 — 时间紧张的白领 + +> 视角:32 岁,地铁单程 25 分钟,站立单手持机,只玩过消消乐;随时被打断。依据 R2 双转写 + live-player.md 代入「真机听到这些」。R1 我给 4/5+5/5,三条建议全在修复清单里——这轮逐条对账。 + +### 深海回音 +- 状态感知:5/5 —— R1 我扣的那分讨回来了:状态链补上了「已经救上 N 个人」(stress t+626.8「一个人」→t+900.4「三个人」,跟着进度走)。被打断后要捡回的三样——第几潜、氧气松紧、**船上躺着谁**——现在上滑一次全齐(顺序:潜次→人数→氧档→帮助)。加分的另一笔:「必须上浮」不再在甲板上空喊,出水后是「一潜都下不去了」(stress t+1191.2),场景措辞对了,通勤分神听一耳朵也不会误解成「操作做错了」。 +- 下一步明确性:5/5 —— 首轮提醒从 25s 提前到 13s(main t+46.6,live 实测 13.0s 整):车厢晃动里我不再需要怀疑手机锁屏了。R1 的三条建议(人数句/口令去重/提醒提前)全部兑现,没有一条打折扣。 +- 愿意继续玩:是 —— 一潜 3-4 分钟一颗扣子的结构没变,中断复述+状态四件套让「到站收机、上车续玩」真正闭环。这是我通勤列表里现在最省心的一款。 +- P0 问题:无。 +- 建议: + 1. 存档 summary 已有「氧气 K 格」,建议把人数也带上(「第2潜·已救2人·氧气6格」)——大厅卡片一眼能接上局面,和状态链同构。(小改,v2 即可。) + 2. 菜单第三项「保存并回大厅」两轮转写里玩家从没听到过(都提前关了菜单)——断言证明它在,但建议转写剧本或真机让三项听全一次;地铁到站我最需要的就是这一项。 + 3. 档位句/签收句现在连点剁不碎了(live 局 B 三连截击全部完整播出 ✓)。请把这条保护写进「别动清单」——通勤误触是常态,这个保险丝对我这种人就是结局体验本身。 + +#### 通勤压力 + 认知负荷(R2 复核) +- 一潜一颗扣子:不变,依然 3-4 分钟闭环、边界自动存档。F7 的 13s 提醒让「被打断→回来」的衔接成本再降一档——25 秒够我被叫走两次,13 秒刚好一站在晃。 +- 中断恢复:R1 我只能按设计文档信 ASK 复述流,这轮 live 两局都是撞存档开场(sys_continue_ask → 单击 → 复述当前节点),真机实证可用。 +- 认知负荷:人数句让状态链从 3 句变 4 句,但每句都是事实、无废话,总时长仍在一站地内消化得了。操作面恒定(点+滑),单手扶梯无压力。 +- 嘈杂车厢辨音:回波→解读之间这轮有了 0.5 秒的「静默一拍」(main t+20.0→23.3)——地铁噪音里这一拍反而帮我分清「这是回波、这是人话」,意外的通勤友好。 diff --git a/research/new8/abyss/round2/p4-worker.md b/research/new8/abyss/round2/p4-worker.md new file mode 100644 index 00000000..e73013e3 --- /dev/null +++ b/research/new8/abyss/round2/p4-worker.md @@ -0,0 +1,21 @@ +# P4(疲惫的工人)R2 评审 —— 《深海回音》 + +> 45 岁,工地收工,宿舍 21:00,外放小音量,游戏经验少,反应不快。 +> 依据:R2 双转写 + live-player.md,按「我真机听到这些」代入。R1 我给了两个 5 分,这轮主要看它有没有变啰嗦、变凶。 + +### 深海回音 +- 状态感知:5/5 —— 还是那三句话开场,四潜走完没添新规矩。新多出来的一句「已经救上两个人」(stress t+848.5)是好话——干到哪一步,它用人话告诉我。氧气那句在船上改了口:「氧气见底,一潜都下不去了」(t+1191.2),不再喊「必须上浮」——人都上来了还喊上浮,上一轮我就听着别扭,这回顺了。 +- 下一步明确性:5/5 —— 没人说话的时候,13 秒就有人轻声问一句(main t+46.6),比上轮的 25 秒强,我这种反应慢的刚想好要不要点,它就提醒我一下,不催。乱按那局还是两百多下没卡死,错了也不骂人,还是那句「这个手势,水里用不上」。 +- 愿意继续玩:是 —— 主线那局我把五个人都救上来了,还敲了钟。听真机报告说,省着气走正好能全救活——我这种人头一回就能赢个体面,这条最要紧,没变。 +- P0 问题:无。 +- 建议: + 1. 「氧气见底」那句带的三连震,上轮我说回回挨一下像工头催命——这轮它只在刚见底那一回震,再问状态就不震了(修复单 F9,转写里 crit 段反复报那句但震不再回回跟)。这么改对,夜里不心烦。 + 2. 滑坡那段连震从一秒两下拉成一秒一下(stress t+937.3 起,一秒一震)——我这岁数,这一下改得厚道。紧张还在,不吓人。 + 3. 我 R1 提过「第一潜收工能不能透句风,说潜友在备应急瓶」,这轮产品裁定不改,理由是「先吓后补正是教学」——我听完两局的账,服这个理:第二潜下水那声「告急」之后,应急瓶紧跟着就到,吓完马上补,确实比提前剧透记得牢。这条我撤回。 + +#### 小节:软失败核算(R2 补齐上轮没走到的账) +上轮我说有两笔账没验到:气花干的「干涸链」和第四潜不让下的「取消链」。这轮补上证据: + +- 真机局 B 走的是「气只够带一个」的单载路:船长我带走了,陈医官留在底下,她说「去吧。灯我留着,人齐了就熄」——还是舍不得,不是怨我。取船钟那下被拦:「一格气都不剩了。能带的,你都带回来了。」这话说得软,拦得明白,没摆个假选项糊弄我。 +- 取消链和干涸链的归因句(「别下来。带他们回家,就算救完了」「气花在了人身上。人,都上来了」)我逐字读了台词表和上一轮真机记录——指着事,不指着我。挨不着处分,这个分寸保住了。 +- 干了活给好话也没变:甲板照样「从没这么亮过」。这游戏不凶,规矩硬、话软,我认。 diff --git a/research/new8/abyss/round2/synthesis.md b/research/new8/abyss/round2/synthesis.md new file mode 100644 index 00000000..ebecfaf9 --- /dev/null +++ b/research/new8/abyss/round2/synthesis.md @@ -0,0 +1,47 @@ +# R2 Synthesis —《深海回音》(abyss) + +> 产品裁定(批次验收收口轮)| 证据源:R2 真机双局(round2/live-player.md:F1-F10 全部现场坐实,e1/e4 双结局,164 段语音零叠音零死锁)+ R2 转写 ×2 + 4 人设全员复评 + +## 1. 验收门裁定:**通过,标记可交付 ✅** + +| 评审方 | 状态感知 | 下一步明确 | 愿意继续玩 | +|---|---|---|---| +| P1 视障评委 | 4.5→**5/5**(两笔扣分全讨回) | 5/5 | **是** | +| P2 大学生 | 5/5 | 4→**5/5**(25s 死等收账成功) | **是** | +| P3 白领 | 4→**5/5**(人数句补齐三件套) | 5/5 | **是** | +| P4 工人 | 5/5 | 5/5 | **是** | +| 真机双局 | — | — | **是**(P0/P1=0) | + +- 章程门槛:**≥3/4 愿意玩 + 无 P0 状态混淆**——R1(4/4,P0=0)+ R2(4/4,P0=0)**连续 2 轮达标**,验收门通过。abyss 以 R1+R2 两轮收口(对照 batch1:radio 3 轮 / dungeon 3 轮+H1;本作 R1 起点质量高于 batch1 首轮,P0 全程为零)。 +- 轨迹:R1 5/5 愿意玩、真机抓出 3 个 P1(ping 迟到/跳句名存实亡/结算截断)→ R2 十项修复全部现场坐实、人设扣分项全部讨回、全员满分档。 + +## 2. R1 修复清单复核结论(逐条关案) + +| # | 修复 | 复核结论(证据) | +|---|---|---| +| F1 | ping 先掐向导散句立即出音 | **坐实**:live 局 A 两次 gd_ping1 在播时单击,kill 与 sonar_ping 同刻(ta=68.982/305.887);局 B 对照 1.6s(解码延迟)。R1 的 12~17s 迟到消失 | +| F2 | 尾句保护认实际链尾 + 签收链死窗 | **坐实**:局 B 对 oxy_ok/oxy_low/oxy_crit_deck 三连截击全部自然播完(truncated=false);g9_in 死窗吞掉 +240ms 在途 tap,+660ms 第二拍按设计合法跳过(1.0s,R1 为 0.28s 意外截断) | +| F3 | 回波 wait=实长+静默一拍 | **坐实**:echo_metal_l→解读 3.31s、echo_groan→解读 5.01s(live 实测);转写接缝同款(main t+20.0→23.3) | +| F4 | dv4_dual 扣账口播 | **坐实**:main t+199.6 / live 局 A OK 0.71;单载/取消零播出(playtest 断言) | +| F5 | oxy_crit_deck 水面变体 | **坐实**:水面 t+1191.2「一潜都下不去了」/ 水下 t+1136.5 保留「必须上浮」;live 局 A OK 0.86 | +| F6 | 尾句首播保护 + 复播可即掐 + sys_skip 改词 | **坐实**:live 局 A z1_b 首播完整(OK 0.96)→ 复述重播句中单击即掐(TRUNCATED 0.77s 设计内)→ 续链无错位;新词双局播出(OK 1.0) | +| F7 | 链末看门狗 full [13,30] | **坐实**:live 实测 13.0s 准点;转写 main t+33.6→46.6;P2/P3 点名收账 | +| F8 | danger 震循环 1100ms | **坐实**:live 局 A D4 实测间隔 1.1s×5 遍;stress t+937.3-940.6 同款 | +| F9 | crit 震按档进入去重 | **坐实**(playtest 断言:同档复听零新增 warning 震;跨档播报位保留);P4 撤回投诉 | +| F10 | 状态链插入已救人数 | **坐实**:live 局 A prog_saved1 OK 1.0;转写人数随进度递进(1→2→3);G6 新顺序断言锁定 | + +V 类复核: +- **V1(菜单第三项)**:playtest 断言增量落地(三项依序全播、连切 3 下回绕、双击执行=menuIdx 当前项)→ 按 radio R2 先例**关案**;残余项「真人/转写从未听全三项」转入 R3+ 观察清单(非阻塞)。 +- **V2(双击重听回波覆盖)**:live 局 B D2 双击实测回波+解读同序重放 ✓ **关案**;转写侧剧本零触发遗留(sessions 剧本不在本泳道改动范围,记仪器改进)。 +- **V3(NPC 滤波可懂度/breath_loop 听感)**:事件层两局零截断、ASR 相似度与 R1 持平(滤波+短句伪影口径);breath_loop 事件层起停正常、转写器不记 loop 层为仪器口径。**持续开放给人耳真机**,不阻塞交付。 + +## 3. 遗留清单(全部非阻塞) + +- **v2 候选**:① dv1_metal/oxy_gain 等「§6.3 承诺句」首播期可被一跳而过(auto 链中段设计原文)——评估纳入首播保护(P1 建议 1);② 结局进度播报「四种归宿这是第几种」(P2 两轮催更);③ 大厅 summary 带已救人数(P3);④ 转写剧本补搜索双击与菜单三项听全(仪器侧)。 +- **设计内截断台账**(玩家主动行为,非 bug):auto 链中段句跳句、菜单暂停掐当句、结局链句可跳——均在 §2.3/G5 字面内。 +- **仪器注记**:live 驱动器乱按窗内未轮询导致 3 次迟到抢跑(放大截断样本);1.7x 会话 ASR 判定降权(「两潜→2000」数字盲区)。 +- **P4 撤回项**:「第一潜透风应急瓶」经复议由人设本人撤回(先吓后补=教学时刻,账不假)。 + +## 4. 后续 + +abyss 冻结功能面标记**可交付**。批次 2 剩余 detective 由泳道 B 收口;批次 3/4(cipher/teahouse/keeper/bridge)以本作 R2 修订记录为「承诺-兑现」口径范本(17-abyss.md §12)。 diff --git a/research/new8/abyss/round2/transcript-main.md b/research/new8/abyss/round2/transcript-main.md new file mode 100644 index 00000000..468ae549 --- /dev/null +++ b/research/new8/abyss/round2/transcript-main.md @@ -0,0 +1,233 @@ +# 试玩转写:《abyss》 + +> 本文件是「玩家感知日志」:一位新手玩家的整局体验转写。语音列出了玩家听到的每句话全文, +> 音效/BGM/震动按发生时间列出。「静默」段 = 玩家什么也听不到。手势是剧本注入的(模拟真人手部动作), +> 非最优操作:包含犹豫、误操作与乱试。语音时长按语速估算(±20%),仅供节奏参考。 +t+ 0.0s (玩家点开游戏,轻触屏幕开始) +t+ 0.0s ♫ BGM 切换 → bgm/deck +t+ 0.0s ♪ 向导音:explore(探索/安全) +t+ 0.0s ▶ 语音:「新的一次下潜,开始了。」 + +#### 【玩家动作】开局:听完甲板简报——每段链末单击继续,第一潜开始后声呐会静下来 + +t+ 2.1s ▶ 向导语音:「单击继续简报。要选择时,向左或向右滑。」 +t+ 4.2s ▶ 语音:「风停了。我站在问海号甲板上,下面三千米,是海燕号。」 +t+ 6.4s ▶ 语音:「听过的句子再播时,单击就能跳过。」 +t+ 8.5s ▶ 语音:「规矩就一条:气不够一潜,人就必须上浮。」 +t+ 10.6s ▶ 语音:「海燕号,五个人。你的双瓶,够下四潜。」 +t+ 12.7s ▶ 语音:「第一潜,找船。耳朵交给声呐。」 +t+ 14.8s ♫ BGM 切换 → bgm/dive(淡入 800ms) +t+ 14.8s ♪ 向导音:explore(探索/安全) +t+ 14.8s ▶ 语音:「下潜开始。水会越来越黑,声音会越来越多。」 +t+ 17.0s ▶ 语音:「到深度了。声呐静了。单击,发一枚脉冲。」 +t+ 19.1s ♪ 向导音:turn(轮到你) +t+ 19.1s 〰 震动:confirm(轻点确认) +t+ 19.1s 【状态】第一潜到深度了,声呐静了 声呐静了,轮到你了:单击发一枚脉冲(BGM=bgm/dive,语速1) + +#### 【玩家动作】调度说了:单击,发一枚脉冲——耳朵交给声呐 + +t+ 19.1s ♪ 音效 sfx/sonar_ping +t+ 20.0s ♪ 音效 sfx/echo_metal_l +t+ 23.3s ▶ 语音:「金属回波,钢板。听见这个,就是海燕号的船身。」 +t+ 25.4s ♪ 音效 sfx/link_beep +t+ 25.4s ▶ 语音:「回波后面有杂音,是电台!接通了。」 +t+ 27.5s ♫ BGM 切换 → bgm/comms(淡入 600ms) +t+ 27.5s ♪ 向导音:explore(探索/安全) +t+ 27.5s ♪ 音效 sfx/static_burst +t+ 27.5s ▶ 语音:「……有人吗?声呐兵,小舟。我们还活着,全艇五个人。」 +t+ 27.5s 【状态】金属回波后面有杂音——电台接通了,小舟的声音进来了 第一潜通讯中,正在听对方说话(语音播放中,语速1) +t+ 33.6s ……… 静默 25s(听到一半走了神,在想氧气还剩几格) ……… +t+ 46.6s ♪ 向导音:nudge(看门狗轻提醒) +t+ 46.6s ▶ 向导语音:「单击屏幕,继续。」 +t+ 63.6s ♪ 向导音:nudge(看门狗轻提醒) +t+ 63.6s ▶ 向导语音:「还在吗?单击继续。」 +t+ 63.6s 【状态】听到一声轻响和「单击屏幕,继续」,马上点 对方说完了,等我接话(链末单击继续)(语音播放中,语速1) +t+ 63.6s ▶ 语音:「轮机长老白困在机舱,陈医官和小郑在病舱,船长在指挥舱。」 +t+ 70.1s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 74.0s ♪ 音效 sfx/pipe_knock +t+ 77.5s ♪ 音效 sfx/pipe_knock +t+ 81.0s ♪ 向导音:choice(抉择/等待输入) +t+ 81.0s ▶ 语音:「管路在响。向左滑,停下来听敲管的暗号。向右滑,先带小舟上浮。」 + +#### 【玩家动作】小舟先上来,暗号回头再说——但先上滑听一遍潜次和氧气 + +t+ 83.1s ▶ 语音:「现在是第一次下潜。」 +t+ 85.2s ▶ 语音:「气瓶还足,救得动。」 +t+ 87.3s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 89.4s ♪ 向导音:choice(抉择/等待输入) +t+ 89.4s ▶ 语音:「管路在响。向左滑,停下来听敲管的暗号。向右滑,先带小舟上浮。」 +t+ 91.6s 【状态】听完状态链(第几潜+氧气档+口令),局面复述回来了 「请选择」念完了(第一潜):向左或向右滑做出你的决定(BGM=bgm/comms,语速1) + +#### 【玩家动作】下滑看看菜单有什么 + +t+ 91.6s ♪ 音效 sfx/ui_menu +t+ 91.6s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 91.6s ♪ 向导音:menu(系统界面) +t+ 91.6s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 93.7s ▶ 语音:「回到水下。」 +t+ 95.8s 【状态】菜单里,切一项听听 菜单里,当前项「回到水下」:单击切换,双击确认,上滑帮助,下滑关闭(BGM=bgm/deck,语速1) +t+ 95.8s ▶ 语音:「重新开始这次救援。」 + +#### 【玩家动作】听完了,下滑关闭菜单,回到水下 + +t+ 97.9s ♪ 音效 sfx/ui_confirm +t+ 97.9s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 97.9s ♪ 向导音:explore(探索/安全) +t+ 97.9s ♪ 向导音:choice(抉择/等待输入) +t+ 97.9s ▶ 语音:「管路在响。向左滑,停下来听敲管的暗号。向右滑,先带小舟上浮。」 +t+ 100.0s 【状态】选项念完了,做决定 「请选择」念完了(第一潜):向左或向右滑做出你的决定(BGM=bgm/comms,语速1) + +#### 【玩家动作】小舟先上来,暗号回头再说 + +t+ 100.0s ♪ 音效 sfx/ui_confirm +t+ 100.0s ▶ 语音:「小舟,抓住我的肩锁。我们上。」 +t+ 102.2s ▶ 语音:「好。上面……是不是天亮了?」 +t+ 105.6s ♪ 向导音:choice(抉择/等待输入) +t+ 105.6s ▶ 语音:「小舟想回去拿声呐日志。向左滑,等她。向右滑,直接上浮。」 +t+ 107.7s 【状态】选项念完了,做决定 「请选择」念完了(第一潜):向左或向右滑做出你的决定(BGM=bgm/comms,语速1) + +#### 【玩家动作】日志可以补,人不能等 + +t+ 107.7s ♪ 音效 sfx/ui_confirm +t+ 107.7s ▶ 语音:「日志可以补,人不能等。走了。」 +t+ 109.8s ♪ 向导音:settle(结算) +t+ 109.8s ♫ BGM 切换 → bgm/deck(淡入 800ms) +t+ 109.8s ♪ 音效 sfx/surf_splash +t+ 109.8s ♪ 音效 sfx/ascent_chime +t+ 109.8s ▶ 语音:「小舟出水,第一潜收工。往返,扣三格气。」 +t+ 111.9s ▶ 语音:「气瓶还足,救得动。」 +t+ 114.1s ♫ BGM 切换 → bgm/dive(淡入 800ms) +t+ 114.1s ♪ 向导音:explore(探索/安全) +t+ 114.1s ▶ 语音:「第二潜,机舱。顺着敲管的声音走。」 +t+ 116.2s ♪ 向导音:turn(轮到你) +t+ 116.2s 〰 震动:confirm(轻点确认) +t+ 116.2s 【状态】第二潜,再点一枚 声呐静了,轮到你了:单击发一枚脉冲(BGM=bgm/dive,语速1) +t+ 116.2s ♪ 音效 sfx/sonar_ping +t+ 117.1s ♪ 音效 sfx/echo_debris +t+ 120.4s ♪ 音效 sfx/pipe_knock +t+ 123.9s ▶ 语音:「碎石回波后面,敲管声密了。机舱到了。」 +t+ 126.0s ♫ BGM 切换 → bgm/comms(淡入 600ms) +t+ 126.0s ♪ 向导音:explore(探索/安全) +t+ 126.0s ▶ 语音:「哈哈,救援的?我这腿,跟冷却管缠上了。」 +t+ 130.7s ▶ 语音:「艇上的药板烧了。病舱那两个,比我悬。」 +t+ 135.3s ♪ 向导音:choice(抉择/等待输入) +t+ 135.3s ▶ 语音:「钢梁压着腿。向左滑,泄压后慢慢撬。向右滑,切割枪,快切。」 +t+ 137.4s 【状态】选项念完了,做决定 「请选择」念完了(第二潜):向左或向右滑做出你的决定(BGM=bgm/comms,语速1) + +#### 【玩家动作】切割枪快切,老白憋住气 + +t+ 137.4s ♪ 音效 sfx/ui_confirm +t+ 137.4s ▶ 语音:「切割枪。老白,闭眼,憋气。」 +t+ 139.5s ♪ 向导音:danger(危险) +t+ 139.5s ♪ 音效 sfx/spark_flash +t+ 139.5s 〰 震动:danger(危险逼近) +t+ 141.5s ▶ 语音:「火花炸了一下,虚惊。老白咳着,腿抽出来了。」 +t+ 143.6s ▶ 语音:「腿还在!我的腿还在!走,我给你带路。」 +t+ 148.1s ♪ 向导音:choice(抉择/等待输入) +t+ 148.1s ▶ 语音:「老白要去关电池舱阀门。向左滑,陪他去。向右滑,直接上浮。」 +t+ 150.3s 【状态】选项念完了,做决定 「请选择」念完了(第二潜):向左或向右滑做出你的决定(BGM=bgm/comms,语速1) + +#### 【玩家动作】阀门交给母船,腿要紧 + +t+ 150.3s ♪ 音效 sfx/ui_confirm +t+ 150.3s ▶ 语音:「阀门交给母船。你先上,腿要紧。」 +t+ 152.4s ♪ 向导音:settle(结算) +t+ 152.4s ♫ BGM 切换 → bgm/deck(淡入 800ms) +t+ 152.4s ♪ 音效 sfx/surf_splash +t+ 152.4s ♪ 音效 sfx/ascent_chime +t+ 152.4s ▶ 语音:「老白出水。他一直扒着舱门,往水里看。」 +t+ 154.5s ▶ 语音:「潜友阿凯捎来应急瓶。甲板上,粥给你温着。」 +t+ 156.6s ▶ 语音:「应急瓶接上了,多三格。」 +t+ 158.7s ♫ BGM 切换 → bgm/dive(淡入 800ms) +t+ 158.7s ♪ 向导音:explore(探索/安全) +t+ 158.7s ▶ 语音:「第三潜,病舱。海燕号在倾斜,别恋战。」 +t+ 160.9s ♪ 向导音:turn(轮到你) +t+ 160.9s 〰 震动:confirm(轻点确认) +t+ 160.9s 【状态】第三潜,再点一枚 声呐静了,轮到你了:单击发一枚脉冲(BGM=bgm/dive,语速1) +t+ 160.9s ♪ 音效 sfx/sonar_ping +t+ 161.8s ♪ 音效 sfx/echo_groan +t+ 166.8s ▶ 语音:「回波发闷。船体在呻吟,它撑不久了。」 +t+ 168.9s ♫ BGM 切换 → bgm/comms(淡入 600ms) +t+ 168.9s ♪ 向导音:explore(探索/安全) +t+ 168.9s ▶ 语音:「你来了。小郑股骨断了,我给他固定好了。」 +t+ 173.6s ▶ 语音:「救援钟一次带一个。我是医生,我最后走。」 +t+ 178.4s ♪ 向导音:choice(抉择/等待输入) +t+ 178.4s ▶ 语音:「病舱一次只能走一个。向左滑,先带陈医官。向右滑,先带小郑。」 +t+ 180.5s 【状态】选项念完了,做决定 「请选择」念完了(第三潜):向左或向右滑做出你的决定(BGM=bgm/comms,语速1) + +#### 【玩家动作】小郑重伤先走,陈医官下一潜就是你的 + +t+ 180.5s ♪ 音效 sfx/ui_confirm +t+ 180.5s ▶ 语音:「小郑先走。陈医官,下一潜,就是你的。」 +t+ 182.6s ▶ 语音:「小郑吊上去了。他一路,都没敢出声。」 +t+ 184.7s ▶ 语音:「去吧。我守着灯,灯不灭,人就不散。」 +t+ 189.0s ♪ 向导音:choice(抉择/等待输入) +t+ 189.0s ▶ 语音:「留守的人要空气。向左滑,留下你的备用瓶。向右滑,约定下一潜来接。」 +t+ 191.1s 【状态】选项念完了,做决定 「请选择」念完了(第三潜):向左或向右滑做出你的决定(BGM=bgm/comms,语速1) + +#### 【玩家动作】四小时内我下来,等我 + +t+ 191.1s ♪ 音效 sfx/ui_confirm +t+ 191.1s ▶ 语音:「四小时内,我下来。等我。」 +t+ 193.3s ♪ 向导音:settle(结算) +t+ 193.3s ♫ BGM 切换 → bgm/deck(淡入 800ms) +t+ 193.3s ♪ 音效 sfx/surf_splash +t+ 193.3s ♪ 音效 sfx/ascent_chime +t+ 193.3s ▶ 语音:「病舱的人出水。海燕号的呻吟,隔着水都听得见。」 +t+ 195.4s ▶ 语音:「氧气还够两潜。」 +t+ 197.5s ♫ BGM 切换 → bgm/dive(淡入 800ms) +t+ 197.5s ♪ 向导音:explore(探索/安全) +t+ 197.5s ▶ 语音:「最后一潜,指挥舱。海燕号,撑不住了。」 +t+ 199.6s ▶ 语音:「两个人下同一潜。这趟往返,扣四格气。」 +t+ 201.7s ♪ 向导音:turn(轮到你) +t+ 201.7s 〰 震动:confirm(轻点确认) +t+ 201.7s 【状态】第四潜,再点一枚 声呐静了,轮到你了:单击发一枚脉冲(BGM=bgm/dive,语速1) +t+ 201.7s ♪ 音效 sfx/sonar_ping +t+ 202.6s ♪ 音效 sfx/echo_groan +t+ 207.6s ♪ 音效 sfx/echo_metal_r +t+ 210.9s ♪ 向导音:danger(危险) +t+ 210.9s ♪ 音效 sfx/landslide +t+ 210.9s 〰 震动:danger(危险逼近) +t+ 212.9s ▶ 语音:「它滑了!抓稳索缆,指挥舱里还有人!」 +t+ 212.0s 〰 震动:danger(危险逼近) +t+ 213.1s 〰 震动:danger(危险逼近) +t+ 214.2s 〰 震动:danger(危险逼近) +t+ 215.1s ♫ BGM 切换 → bgm/comms(淡入 600ms) +t+ 215.1s ♪ 向导音:explore(探索/安全) +t+ 215.1s ▶ 语音:「救援员。我船上,还剩两个活人。」 +t+ 218.9s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+ 223.2s ♪ 向导音:choice(抉择/等待输入) +t+ 223.2s ▶ 语音:「双人上浮。向左滑,逐站减压慢慢浮。向右滑,违规直浮,搏一把。」 +t+ 225.3s 【状态】选项念完了,做决定 「请选择」念完了(第四潜):向左或向右滑做出你的决定(BGM=bgm/comms,语速1) + +#### 【玩家动作】来不及了,直浮!医疗舱的灯先开好 + +t+ 225.3s ♪ 音效 sfx/ui_confirm +t+ 225.3s ▶ 语音:「来不及了。直浮!」 +t+ 227.5s ▶ 语音:「违规快浮。医疗舱的灯,先给你们开好。」 +t+ 229.6s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+ 233.6s ♪ 向导音:choice(抉择/等待输入) +t+ 233.6s ▶ 语音:「船长的话没说完。向左滑,把你听到的说出来。向右滑,什么都不问,拉他上浮。」 +t+ 235.8s 【状态】选项念完了,做决定 「请选择」念完了(第四潜):向左或向右滑做出你的决定(BGM=bgm/comms,语速1) + +#### 【玩家动作】纪律就是纪律,拉他上浮 + +t+ 235.8s ♪ 音效 sfx/ui_confirm +t+ 235.8s ▶ 语音:「纪律就是纪律。抓住,上浮。」 +t+ 237.9s ♪ 向导音:settle(结算) +t+ 237.9s ♫ BGM 切换 → bgm/deck(淡入 800ms) +t+ 237.9s ♪ 音效 sfx/surf_splash +t+ 237.9s ♪ 音效 sfx/ascent_chime +t+ 237.9s ▶ 语音:「最后一潜收工。问海号的甲板,从没这么亮过。」 +t+ 240.0s ▶ 语音:「氧气见底,一潜都下不去了。」 +t+ 240.0s 〰 震动:warning(警告三连震) +t+ 242.1s ▶ 语音:「医疗舱躺满了。你的气瓶剩多少,你比我清楚。」 +t+ 244.2s ▶ 语音:「三年前,也是这条沟。我按时上浮了,搭档没有。」 +t+ 259.4s ♪ 向导音:nudge(看门狗轻提醒) +t+ 259.4s ▶ 向导语音:「单击屏幕,继续。」 +t+ 276.4s ♪ 向导音:nudge(看门狗轻提醒) +t+ 276.4s ▶ 向导语音:「还在吗?单击继续。」 +t+ 278.5s 【状态】结局链走完,尾声逐人点到我每一潜的救与错过 结算链间隙,等单击继续(BGM=bgm/deck,语速1) + +#### 【玩家动作】船钟出水,五个人都在甲板上——会话结束(E1 海燕归钟) + diff --git a/research/new8/abyss/round2/transcript-stress.md b/research/new8/abyss/round2/transcript-stress.md new file mode 100644 index 00000000..abfd5fa9 --- /dev/null +++ b/research/new8/abyss/round2/transcript-stress.md @@ -0,0 +1,882 @@ +# 试玩转写:《abyss》 + +> 本文件是「玩家感知日志」:一位新手玩家的整局体验转写。语音列出了玩家听到的每句话全文, +> 音效/BGM/震动按发生时间列出。「静默」段 = 玩家什么也听不到。手势是剧本注入的(模拟真人手部动作), +> 非最优操作:包含犹豫、误操作与乱试。语音时长按语速估算(±20%),仅供节奏参考。 +t+ 0.0s (玩家点开游戏,轻触屏幕开始) +t+ 0.0s ♫ BGM 切换 → bgm/deck +t+ 0.0s ♪ 向导音:explore(探索/安全) +t+ 0.0s ▶ 语音:「新的一次下潜,开始了。」 +t+ 2.1s ▶ 向导语音:「单击继续简报。要选择时,向左或向右滑。」 +t+ 4.2s ▶ 语音:「风停了。我站在问海号甲板上,下面三千米,是海燕号。」 +t+ 6.4s ▶ 语音:「听过的句子再播时,单击就能跳过。」 +t+ 8.5s ▶ 语音:「风停了。我站在问海号甲板上,下面三千米,是海燕号。」 +t+ 10.6s ♪ 音效 sfx/ui_menu +t+ 10.6s ♪ 向导音:menu(系统界面) +t+ 10.6s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 12.7s ▶ 语音:「回到水下。」 +t+ 14.8s ▶ 语音:「重新开始这次救援。」 +t+ 17.0s ♪ 音效 sfx/ui_confirm +t+ 17.0s ♪ 向导音:explore(探索/安全) +t+ 17.0s ▶ 语音:「风停了。我站在问海号甲板上,下面三千米,是海燕号。」 +t+ 19.1s ▶ 语音:「规矩就一条:气不够一潜,人就必须上浮。」 +t+ 21.2s ▶ 向导语音:「这个手势,水里用不上。」 +t+ 21.2s 〰 震动:error(做错了:两连短震) +t+ 21.2s ▶ 语音:「气瓶还足,救得动。」 +t+ 23.3s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 25.4s ▶ 语音:「规矩就一条:气不够一潜,人就必须上浮。」 +t+ 27.6s 〰 震动:error(做错了:两连短震) +t+ 27.6s ▶ 语音:「规矩就一条:气不够一潜,人就必须上浮。」 +t+ 29.7s 〰 震动:error(做错了:两连短震) +t+ 29.7s ♪ 音效 sfx/ui_menu +t+ 29.7s ♪ 向导音:menu(系统界面) +t+ 29.7s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 31.8s ▶ 语音:「回到水下。」 +t+ 33.9s ▶ 语音:「重新开始这次救援。」 +t+ 36.0s ♪ 音效 sfx/ui_confirm +t+ 36.0s ♪ 向导音:explore(探索/安全) +t+ 36.0s ▶ 语音:「规矩就一条:气不够一潜,人就必须上浮。」 +t+ 38.2s 〰 震动:error(做错了:两连短震) +t+ 38.2s 〰 震动:error(做错了:两连短震) +t+ 38.2s ▶ 语音:「气瓶还足,救得动。」 +t+ 38.2s 〰 震动:beat(节拍点) +t+ 40.3s ▶ 语音:「规矩就一条:气不够一潜,人就必须上浮。」 +t+ 42.4s 〰 震动:error(做错了:两连短震) +t+ 42.4s 〰 震动:error(做错了:两连短震) +t+ 42.4s ▶ 语音:「海燕号,五个人。你的双瓶,够下四潜。」 +t+ 44.5s ♪ 音效 sfx/ui_menu +t+ 44.5s ♪ 向导音:menu(系统界面) +t+ 44.5s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 46.6s ▶ 语音:「回到水下。」 +t+ 48.8s ▶ 语音:「重新开始这次救援。」 +t+ 50.9s ♪ 音效 sfx/ui_confirm +t+ 50.9s ♪ 向导音:explore(探索/安全) +t+ 50.9s ▶ 语音:「海燕号,五个人。你的双瓶,够下四潜。」 +t+ 53.0s 〰 震动:error(做错了:两连短震) +t+ 53.0s ▶ 语音:「气瓶还足,救得动。」 +t+ 55.1s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 57.2s ▶ 语音:「海燕号,五个人。你的双瓶,够下四潜。」 +t+ 59.4s ▶ 语音:「第一潜,找船。耳朵交给声呐。」 +t+ 61.5s ♫ BGM 切换 → bgm/dive(淡入 800ms) +t+ 61.5s ♪ 向导音:explore(探索/安全) +t+ 61.5s ▶ 语音:「下潜开始。水会越来越黑,声音会越来越多。」 +t+ 63.6s ▶ 语音:「到深度了。声呐静了。单击,发一枚脉冲。」 +t+ 65.7s ♪ 向导音:turn(轮到你) +t+ 65.7s 〰 震动:confirm(轻点确认) +t+ 65.7s ♪ 音效 sfx/sonar_ping +t+ 66.6s ♪ 音效 sfx/echo_metal_l +t+ 69.9s ▶ 语音:「金属回波,钢板。听见这个,就是海燕号的船身。」 +t+ 72.0s ♪ 音效 sfx/link_beep +t+ 72.0s ▶ 语音:「回波后面有杂音,是电台!接通了。」 +t+ 74.2s ♫ BGM 切换 → bgm/comms(淡入 600ms) +t+ 74.2s ♪ 向导音:explore(探索/安全) +t+ 74.2s ♪ 音效 sfx/static_burst +t+ 74.2s ▶ 语音:「……有人吗?声呐兵,小舟。我们还活着,全艇五个人。」 +t+ 80.2s ♪ 音效 sfx/ui_menu +t+ 80.2s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 80.2s ♪ 向导音:menu(系统界面) +t+ 80.2s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 82.4s ▶ 语音:「回到水下。」 +t+ 84.5s ▶ 语音:「重新开始这次救援。」 +t+ 86.6s ♪ 音效 sfx/ui_confirm +t+ 86.6s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 86.6s ♪ 向导音:explore(探索/安全) +t+ 86.6s ♪ 向导音:explore(探索/安全) +t+ 86.6s ♪ 音效 sfx/static_burst +t+ 86.6s ▶ 语音:「……有人吗?声呐兵,小舟。我们还活着,全艇五个人。」 +t+ 92.7s 〰 震动:error(做错了:两连短震) +t+ 92.7s ▶ 语音:「现在是第一次下潜。」 +t+ 94.8s ▶ 语音:「气瓶还足,救得动。」 +t+ 96.9s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 99.0s ♪ 向导音:explore(探索/安全) +t+ 99.0s ♪ 音效 sfx/static_burst +t+ 99.0s ▶ 语音:「……有人吗?声呐兵,小舟。我们还活着,全艇五个人。」 +t+ 105.1s ▶ 语音:「现在是第一次下潜。」 +t+ 105.1s 〰 震动:beat(节拍点) +t+ 107.2s ▶ 语音:「气瓶还足,救得动。」 +t+ 109.3s ♪ 向导音:explore(探索/安全) +t+ 109.3s ♪ 音效 sfx/static_burst +t+ 109.3s ▶ 语音:「……有人吗?声呐兵,小舟。我们还活着,全艇五个人。」 +t+ 115.4s 〰 震动:error(做错了:两连短震) +t+ 115.4s ♪ 向导音:explore(探索/安全) +t+ 115.4s ♪ 音效 sfx/static_burst +t+ 115.4s ▶ 语音:「……有人吗?声呐兵,小舟。我们还活着,全艇五个人。」 +t+ 121.5s 〰 震动:error(做错了:两连短震) +t+ 121.5s ♪ 向导音:explore(探索/安全) +t+ 121.5s ♪ 音效 sfx/static_burst +t+ 121.5s ▶ 语音:「……有人吗?声呐兵,小舟。我们还活着,全艇五个人。」 +t+ 127.6s 〰 震动:error(做错了:两连短震) +t+ 127.6s ▶ 语音:「现在是第一次下潜。」 +t+ 127.6s 〰 震动:beat(节拍点) +t+ 129.7s ▶ 语音:「气瓶还足,救得动。」 +t+ 131.8s ♪ 向导音:explore(探索/安全) +t+ 131.8s ♪ 音效 sfx/static_burst +t+ 131.8s ▶ 语音:「……有人吗?声呐兵,小舟。我们还活着,全艇五个人。」 +t+ 137.9s 〰 震动:error(做错了:两连短震) +t+ 137.9s ▶ 语音:「轮机长老白困在机舱,陈医官和小郑在病舱,船长在指挥舱。」 +t+ 144.4s 〰 震动:error(做错了:两连短震) +t+ 144.4s 〰 震动:error(做错了:两连短震) +t+ 144.4s ▶ 语音:「轮机长老白困在机舱,陈医官和小郑在病舱,船长在指挥舱。」 +t+ 150.9s 〰 震动:error(做错了:两连短震) +t+ 150.9s 〰 震动:error(做错了:两连短震) +t+ 150.9s ▶ 语音:「现在是第一次下潜。」 +t+ 153.0s ▶ 语音:「气瓶还足,救得动。」 +t+ 155.2s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 157.3s ▶ 语音:「轮机长老白困在机舱,陈医官和小郑在病舱,船长在指挥舱。」 +t+ 163.8s ▶ 语音:「现在是第一次下潜。」 +t+ 163.8s 〰 震动:beat(节拍点) +t+ 165.9s ▶ 语音:「气瓶还足,救得动。」 +t+ 168.0s ▶ 语音:「轮机长老白困在机舱,陈医官和小郑在病舱,船长在指挥舱。」 +t+ 174.6s 〰 震动:error(做错了:两连短震) +t+ 174.6s ▶ 语音:「现在是第一次下潜。」 +t+ 174.6s 〰 震动:beat(节拍点) +t+ 176.7s ▶ 语音:「气瓶还足,救得动。」 +t+ 178.8s ▶ 语音:「轮机长老白困在机舱,陈医官和小郑在病舱,船长在指挥舱。」 +t+ 185.3s 〰 震动:error(做错了:两连短震) +t+ 185.3s ▶ 语音:「现在是第一次下潜。」 +t+ 185.3s 〰 震动:beat(节拍点) +t+ 187.4s ▶ 语音:「气瓶还足,救得动。」 +t+ 189.6s ▶ 语音:「轮机长老白困在机舱,陈医官和小郑在病舱,船长在指挥舱。」 +t+ 196.1s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 199.9s ♪ 音效 sfx/pipe_knock +t+ 203.4s ♪ 音效 sfx/pipe_knock +t+ 206.9s ♪ 音效 sfx/ui_menu +t+ 206.9s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 206.9s ♪ 向导音:menu(系统界面) +t+ 206.9s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 209.1s ▶ 语音:「回到水下。」 +t+ 211.2s ▶ 语音:「重新开始这次救援。」 +t+ 213.3s ♪ 音效 sfx/ui_confirm +t+ 213.3s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 213.3s ♪ 向导音:explore(探索/安全) +t+ 213.3s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 217.2s ♪ 音效 sfx/pipe_knock +t+ 220.7s ♪ 音效 sfx/pipe_knock +t+ 224.2s ♪ 音效 sfx/ui_menu +t+ 224.2s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 224.2s ♪ 向导音:menu(系统界面) +t+ 224.2s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 226.3s ▶ 语音:「回到水下。」 +t+ 228.4s ▶ 语音:「重新开始这次救援。」 +t+ 230.5s ♪ 音效 sfx/ui_confirm +t+ 230.5s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 230.5s ♪ 向导音:explore(探索/安全) +t+ 230.5s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 234.4s ♪ 音效 sfx/pipe_knock +t+ 237.9s ♪ 音效 sfx/pipe_knock +t+ 241.4s ▶ 语音:「现在是第一次下潜。」 +t+ 243.5s ▶ 语音:「气瓶还足,救得动。」 +t+ 245.6s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 247.7s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 251.6s ♪ 音效 sfx/pipe_knock +t+ 255.1s ♪ 音效 sfx/pipe_knock +t+ 258.6s ♪ 音效 sfx/ui_menu +t+ 258.6s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 258.6s ♪ 向导音:menu(系统界面) +t+ 258.6s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 260.7s ▶ 语音:「回到水下。」 +t+ 262.8s ▶ 语音:「重新开始这次救援。」 +t+ 264.9s ♪ 音效 sfx/ui_confirm +t+ 264.9s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 264.9s ♪ 向导音:explore(探索/安全) +t+ 264.9s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 268.8s ♪ 音效 sfx/pipe_knock +t+ 272.3s ♪ 音效 sfx/pipe_knock +t+ 275.8s ♪ 音效 sfx/ui_menu +t+ 275.8s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 275.8s ♪ 向导音:menu(系统界面) +t+ 275.8s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 277.9s ▶ 语音:「回到水下。」 +t+ 280.0s ▶ 语音:「重新开始这次救援。」 +t+ 282.2s ♪ 音效 sfx/ui_confirm +t+ 282.2s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 282.2s ♪ 向导音:explore(探索/安全) +t+ 282.2s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 286.0s ♪ 音效 sfx/pipe_knock +t+ 289.5s ♪ 音效 sfx/pipe_knock +t+ 293.0s 〰 震动:error(做错了:两连短震) +t+ 293.0s ▶ 语音:「现在是第一次下潜。」 +t+ 293.0s 〰 震动:beat(节拍点) +t+ 295.1s ▶ 语音:「气瓶还足,救得动。」 +t+ 297.2s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 301.1s ♪ 音效 sfx/pipe_knock +t+ 304.6s ♪ 音效 sfx/pipe_knock +t+ 308.1s 〰 震动:error(做错了:两连短震) +t+ 308.1s ▶ 语音:「现在是第一次下潜。」 +t+ 308.1s 〰 震动:beat(节拍点) +t+ 310.2s ▶ 语音:「气瓶还足,救得动。」 +t+ 312.3s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 316.2s ♪ 音效 sfx/pipe_knock +t+ 319.7s ♪ 音效 sfx/pipe_knock +t+ 323.2s ♪ 音效 sfx/ui_menu +t+ 323.2s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 323.2s ♪ 向导音:menu(系统界面) +t+ 323.2s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 325.3s ▶ 语音:「回到水下。」 +t+ 327.4s ▶ 语音:「重新开始这次救援。」 +t+ 329.6s ♪ 音效 sfx/ui_confirm +t+ 329.6s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 329.6s ♪ 向导音:explore(探索/安全) +t+ 329.6s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 333.4s ♪ 音效 sfx/pipe_knock +t+ 336.9s ♪ 音效 sfx/pipe_knock +t+ 340.4s ♪ 音效 sfx/ui_menu +t+ 340.4s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 340.4s ♪ 向导音:menu(系统界面) +t+ 340.4s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 342.5s ▶ 语音:「回到水下。」 +t+ 344.6s ▶ 语音:「重新开始这次救援。」 +t+ 346.8s ♪ 音效 sfx/ui_confirm +t+ 346.8s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 346.8s ♪ 向导音:explore(探索/安全) +t+ 346.8s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 350.6s ♪ 音效 sfx/pipe_knock +t+ 354.1s ♪ 音效 sfx/pipe_knock +t+ 357.6s 〰 震动:error(做错了:两连短震) +t+ 357.6s 〰 震动:error(做错了:两连短震) +t+ 357.6s ♪ 音效 sfx/ui_menu +t+ 357.6s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 357.6s ♪ 向导音:menu(系统界面) +t+ 357.6s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 359.7s ▶ 语音:「回到水下。」 +t+ 361.9s ▶ 语音:「重新开始这次救援。」 +t+ 364.0s ♪ 音效 sfx/ui_confirm +t+ 364.0s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 364.0s ♪ 向导音:explore(探索/安全) +t+ 364.0s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 367.8s ♪ 音效 sfx/pipe_knock +t+ 371.3s ♪ 音效 sfx/pipe_knock +t+ 374.8s ▶ 语音:「现在是第一次下潜。」 +t+ 374.8s 〰 震动:beat(节拍点) +t+ 377.0s ▶ 语音:「气瓶还足,救得动。」 +t+ 379.1s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 382.9s ♪ 音效 sfx/pipe_knock +t+ 386.4s ♪ 音效 sfx/pipe_knock +t+ 389.9s ▶ 语音:「现在是第一次下潜。」 +t+ 389.9s 〰 震动:beat(节拍点) +t+ 392.0s ▶ 语音:「气瓶还足,救得动。」 +t+ 394.2s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 398.0s ♪ 音效 sfx/pipe_knock +t+ 401.5s ♪ 音效 sfx/pipe_knock +t+ 405.0s 〰 震动:error(做错了:两连短震) +t+ 405.0s 〰 震动:error(做错了:两连短震) +t+ 405.0s ♪ 音效 sfx/ui_menu +t+ 405.0s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 405.0s ♪ 向导音:menu(系统界面) +t+ 405.0s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 407.1s ▶ 语音:「回到水下。」 +t+ 409.3s ▶ 语音:「重新开始这次救援。」 +t+ 411.4s ♪ 音效 sfx/ui_confirm +t+ 411.4s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 411.4s ♪ 向导音:explore(探索/安全) +t+ 411.4s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 415.2s ♪ 音效 sfx/pipe_knock +t+ 418.7s ♪ 音效 sfx/pipe_knock +t+ 422.2s 〰 震动:error(做错了:两连短震) +t+ 422.2s ♪ 音效 sfx/ui_menu +t+ 422.2s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 422.2s ♪ 向导音:menu(系统界面) +t+ 422.2s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 424.4s ▶ 语音:「回到水下。」 +t+ 426.5s ▶ 语音:「重新开始这次救援。」 +t+ 428.6s ♪ 音效 sfx/ui_confirm +t+ 428.6s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 428.6s ♪ 向导音:explore(探索/安全) +t+ 428.6s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 432.4s ♪ 音效 sfx/pipe_knock +t+ 435.9s ♪ 音效 sfx/pipe_knock +t+ 439.4s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 443.3s ♪ 音效 sfx/pipe_knock +t+ 446.8s ♪ 音效 sfx/pipe_knock +t+ 450.3s 〰 震动:error(做错了:两连短震) +t+ 450.3s ▶ 语音:「现在是第一次下潜。」 +t+ 450.3s 〰 震动:beat(节拍点) +t+ 452.4s ▶ 语音:「气瓶还足,救得动。」 +t+ 454.5s ▶ 语音:「等等,你听。管子里,有人在敲。」 +t+ 458.4s ♪ 音效 sfx/pipe_knock +t+ 461.9s ♪ 音效 sfx/pipe_knock +t+ 465.4s ♪ 向导音:choice(抉择/等待输入) +t+ 465.4s ▶ 语音:「管路在响。向左滑,停下来听敲管的暗号。向右滑,先带小舟上浮。」 +t+ 467.5s ♪ 音效 sfx/ui_confirm +t+ 467.5s ▶ 语音:「都别出声。管子那头,敲得很稳。」 +t+ 469.6s ♪ 音效 sfx/pipe_knock +t+ 473.1s ▶ 语音:「都别出声。管子那头,敲得很稳。」 +t+ 475.3s ♪ 音效 sfx/pipe_knock +t+ 478.8s 〰 震动:error(做错了:两连短震) +t+ 478.8s ♪ 音效 sfx/ui_menu +t+ 478.8s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 478.8s ♪ 向导音:menu(系统界面) +t+ 478.8s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 480.9s ▶ 语音:「回到水下。」 +t+ 483.0s ▶ 语音:「重新开始这次救援。」 +t+ 485.1s ♪ 音效 sfx/ui_confirm +t+ 485.1s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 485.1s ♪ 向导音:explore(探索/安全) +t+ 485.1s ▶ 语音:「都别出声。管子那头,敲得很稳。」 +t+ 487.2s ♪ 音效 sfx/pipe_knock +t+ 490.7s 〰 震动:error(做错了:两连短震) +t+ 490.7s ▶ 语音:「现在是第一次下潜。」 +t+ 492.9s ▶ 语音:「氧气还够两潜。」 +t+ 495.0s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 497.1s ▶ 语音:「都别出声。管子那头,敲得很稳。」 +t+ 499.2s ♪ 音效 sfx/pipe_knock +t+ 502.7s ▶ 语音:「都别出声。管子那头,敲得很稳。」 +t+ 504.8s ♪ 音效 sfx/pipe_knock +t+ 508.3s 〰 震动:error(做错了:两连短震) +t+ 508.3s 〰 震动:error(做错了:两连短震) +t+ 508.3s ▶ 语音:「是老白的暗号:腿被压住,先泄压,再撬。记住这个敲法。」 +t+ 510.5s ▶ 语音:「现在是第一次下潜。」 +t+ 512.6s ▶ 语音:「氧气还够两潜。」 +t+ 514.7s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 516.8s ▶ 语音:「是老白的暗号:腿被压住,先泄压,再撬。记住这个敲法。」 +t+ 518.9s ♪ 音效 sfx/ui_menu +t+ 518.9s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 518.9s ♪ 向导音:menu(系统界面) +t+ 518.9s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 521.1s ▶ 语音:「回到水下。」 +t+ 523.2s ▶ 语音:「重新开始这次救援。」 +t+ 525.3s ♪ 音效 sfx/ui_confirm +t+ 525.3s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 525.3s ♪ 向导音:explore(探索/安全) +t+ 525.3s ▶ 语音:「是老白的暗号:腿被压住,先泄压,再撬。记住这个敲法。」 +t+ 527.4s ♪ 音效 sfx/ui_menu +t+ 527.4s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 527.4s ♪ 向导音:menu(系统界面) +t+ 527.4s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 529.5s ▶ 语音:「回到水下。」 +t+ 531.7s ▶ 语音:「重新开始这次救援。」 +t+ 533.8s ♪ 音效 sfx/ui_confirm +t+ 533.8s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 533.8s ♪ 向导音:explore(探索/安全) +t+ 533.8s ▶ 语音:「是老白的暗号:腿被压住,先泄压,再撬。记住这个敲法。」 +t+ 535.9s ♪ 音效 sfx/ui_menu +t+ 535.9s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 535.9s ♪ 向导音:menu(系统界面) +t+ 535.9s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 538.0s ▶ 语音:「回到水下。」 +t+ 540.1s ▶ 语音:「重新开始这次救援。」 +t+ 542.3s ♪ 音效 sfx/ui_confirm +t+ 542.3s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 542.3s ♪ 向导音:explore(探索/安全) +t+ 542.3s ▶ 语音:「是老白的暗号:腿被压住,先泄压,再撬。记住这个敲法。」 +t+ 544.4s ▶ 语音:「现在是第一次下潜。」 +t+ 544.4s 〰 震动:beat(节拍点) +t+ 546.5s ▶ 语音:「氧气还够两潜。」 +t+ 548.6s ▶ 语音:「是老白的暗号:腿被压住,先泄压,再撬。记住这个敲法。」 +t+ 550.7s ▶ 语音:「现在是第一次下潜。」 +t+ 550.7s 〰 震动:beat(节拍点) +t+ 552.9s ▶ 语音:「氧气还够两潜。」 +t+ 555.0s ▶ 语音:「是老白的暗号:腿被压住,先泄压,再撬。记住这个敲法。」 +t+ 557.1s ▶ 语音:「是老白的暗号:腿被压住,先泄压,再撬。记住这个敲法。」 +t+ 559.2s 〰 震动:error(做错了:两连短震) +t+ 559.2s ♪ 向导音:choice(抉择/等待输入) +t+ 559.2s ▶ 语音:「小舟想回去拿声呐日志。向左滑,等她。向右滑,直接上浮。」 +t+ 561.3s ♪ 音效 sfx/ui_confirm +t+ 561.3s ▶ 语音:「日志可以补,人不能等。走了。」 +t+ 563.5s ♪ 音效 sfx/ui_menu +t+ 563.5s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 563.5s ♪ 向导音:menu(系统界面) +t+ 563.5s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 565.6s ▶ 语音:「回到水下。」 +t+ 567.7s ▶ 语音:「重新开始这次救援。」 +t+ 569.8s ♪ 音效 sfx/ui_confirm +t+ 569.8s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 569.8s ♪ 向导音:explore(探索/安全) +t+ 569.8s ▶ 语音:「日志可以补,人不能等。走了。」 +t+ 571.9s ♪ 音效 sfx/ui_menu +t+ 571.9s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 571.9s ♪ 向导音:menu(系统界面) +t+ 571.9s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 574.1s ▶ 语音:「回到水下。」 +t+ 576.2s ▶ 语音:「重新开始这次救援。」 +t+ 578.3s ♪ 音效 sfx/ui_confirm +t+ 578.3s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 578.3s ♪ 向导音:explore(探索/安全) +t+ 578.3s ▶ 语音:「日志可以补,人不能等。走了。」 +t+ 580.4s 〰 震动:error(做错了:两连短震) +t+ 580.4s 〰 震动:error(做错了:两连短震) +t+ 580.4s 〰 震动:error(做错了:两连短震) +t+ 580.4s ▶ 语音:「现在是第一次下潜。」 +t+ 582.5s ▶ 语音:「氧气还够两潜。」 +t+ 584.7s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 586.8s ▶ 语音:「日志可以补,人不能等。走了。」 +t+ 588.9s ▶ 语音:「现在是第一次下潜。」 +t+ 588.9s 〰 震动:beat(节拍点) +t+ 591.0s ▶ 语音:「氧气还够两潜。」 +t+ 593.1s ▶ 语音:「日志可以补,人不能等。走了。」 +t+ 595.3s ▶ 语音:「现在是第一次下潜。」 +t+ 595.3s 〰 震动:beat(节拍点) +t+ 597.4s ▶ 语音:「氧气还够两潜。」 +t+ 599.5s ▶ 语音:「日志可以补,人不能等。走了。」 +t+ 601.6s ▶ 语音:「日志可以补,人不能等。走了。」 +t+ 603.7s 〰 震动:error(做错了:两连短震) +t+ 603.7s ♪ 向导音:settle(结算) +t+ 603.7s ♫ BGM 切换 → bgm/deck(淡入 800ms) +t+ 603.7s ♪ 音效 sfx/surf_splash +t+ 603.7s ♪ 音效 sfx/ascent_chime +t+ 603.7s ▶ 语音:「小舟出水,第一潜收工。往返,扣三格气。」 +t+ 605.9s ▶ 语音:「氧气还够两潜。」 +t+ 608.0s ♫ BGM 切换 → bgm/dive(淡入 800ms) +t+ 608.0s ♪ 向导音:explore(探索/安全) +t+ 608.0s ▶ 语音:「第二潜,机舱。顺着敲管的声音走。」 +t+ 610.1s ♪ 向导音:turn(轮到你) +t+ 610.1s 〰 震动:confirm(轻点确认) +t+ 610.1s ♪ 音效 sfx/sonar_ping +t+ 611.0s ♪ 音效 sfx/echo_debris +t+ 614.3s ♪ 音效 sfx/pipe_knock +t+ 617.8s ▶ 语音:「碎石回波后面,敲管声密了。机舱到了。」 +t+ 619.9s ♫ BGM 切换 → bgm/comms(淡入 600ms) +t+ 619.9s ♪ 向导音:explore(探索/安全) +t+ 619.9s ▶ 语音:「哈哈,救援的?我这腿,跟冷却管缠上了。」 +t+ 624.7s ▶ 语音:「现在是第二次下潜。」 +t+ 626.8s ▶ 语音:「已经救上一个人。」 +t+ 628.9s ▶ 语音:「氧气告急,只够最后一潜。」 +t+ 631.0s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 633.1s ♪ 向导音:explore(探索/安全) +t+ 633.1s ▶ 语音:「哈哈,救援的?我这腿,跟冷却管缠上了。」 +t+ 637.9s ▶ 语音:「艇上的药板烧了。病舱那两个,比我悬。」 +t+ 642.4s 〰 震动:error(做错了:两连短震) +t+ 642.4s ♪ 音效 sfx/ui_menu +t+ 642.4s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 642.4s ♪ 向导音:menu(系统界面) +t+ 642.4s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 644.5s ▶ 语音:「回到水下。」 +t+ 646.6s ▶ 语音:「重新开始这次救援。」 +t+ 648.8s ♪ 音效 sfx/ui_confirm +t+ 648.8s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 648.8s ♪ 向导音:explore(探索/安全) +t+ 648.8s ▶ 语音:「艇上的药板烧了。病舱那两个,比我悬。」 +t+ 653.3s ♪ 音效 sfx/ui_menu +t+ 653.3s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 653.3s ♪ 向导音:menu(系统界面) +t+ 653.3s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 655.4s ▶ 语音:「回到水下。」 +t+ 657.5s ▶ 语音:「重新开始这次救援。」 +t+ 659.6s ♪ 音效 sfx/ui_confirm +t+ 659.6s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 659.6s ♪ 向导音:explore(探索/安全) +t+ 659.6s ▶ 语音:「艇上的药板烧了。病舱那两个,比我悬。」 +t+ 664.2s 〰 震动:error(做错了:两连短震) +t+ 664.2s ♪ 音效 sfx/ui_menu +t+ 664.2s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 664.2s ♪ 向导音:menu(系统界面) +t+ 664.2s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 666.3s ▶ 语音:「回到水下。」 +t+ 668.4s ▶ 语音:「重新开始这次救援。」 +t+ 670.5s ♪ 音效 sfx/ui_confirm +t+ 670.5s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 670.5s ♪ 向导音:explore(探索/安全) +t+ 670.5s ▶ 语音:「艇上的药板烧了。病舱那两个,比我悬。」 +t+ 675.0s 〰 震动:error(做错了:两连短震) +t+ 675.0s ♪ 向导音:choice(抉择/等待输入) +t+ 675.0s ▶ 语音:「钢梁压着腿。向左滑,泄压后慢慢撬。向右滑,切割枪,快切。」 +t+ 677.2s ♪ 向导音:choice(抉择/等待输入) +t+ 677.2s ▶ 语音:「钢梁压着腿。向左滑,泄压后慢慢撬。向右滑,切割枪,快切。」 +t+ 679.3s ♪ 音效 sfx/ui_confirm +t+ 679.3s ▶ 语音:「老白,忍住。先泄压,再撬。」 +t+ 681.4s ▶ 语音:「现在是第二次下潜。」 +t+ 683.5s ▶ 语音:「已经救上一个人。」 +t+ 685.6s ▶ 语音:「氧气告急,只够最后一潜。」 +t+ 687.8s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 689.9s ▶ 语音:「老白,忍住。先泄压,再撬。」 +t+ 692.0s 〰 震动:error(做错了:两连短震) +t+ 692.0s ▶ 语音:「暗号没白听。管子一松,钢梁抬起来了。」 +t+ 694.1s ♪ 音效 sfx/ui_menu +t+ 694.1s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 694.1s ♪ 向导音:menu(系统界面) +t+ 694.1s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 696.2s ▶ 语音:「回到水下。」 +t+ 698.4s ▶ 语音:「重新开始这次救援。」 +t+ 700.5s ♪ 音效 sfx/ui_confirm +t+ 700.5s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 700.5s ♪ 向导音:explore(探索/安全) +t+ 700.5s ▶ 语音:「暗号没白听。管子一松,钢梁抬起来了。」 +t+ 702.6s 〰 震动:error(做错了:两连短震) +t+ 702.6s ♪ 音效 sfx/ui_menu +t+ 702.6s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 702.6s ♪ 向导音:menu(系统界面) +t+ 702.6s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 704.7s ▶ 语音:「回到水下。」 +t+ 706.8s ▶ 语音:「重新开始这次救援。」 +t+ 709.0s ♪ 音效 sfx/ui_confirm +t+ 709.0s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 709.0s ♪ 向导音:explore(探索/安全) +t+ 709.0s ▶ 语音:「暗号没白听。管子一松,钢梁抬起来了。」 +t+ 711.1s ▶ 语音:「暗号没白听。管子一松,钢梁抬起来了。」 +t+ 713.2s 〰 震动:error(做错了:两连短震) +t+ 713.2s ▶ 语音:「现在是第二次下潜。」 +t+ 715.3s ▶ 语音:「已经救上一个人。」 +t+ 717.4s ▶ 语音:「氧气告急,只够最后一潜。」 +t+ 719.6s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 721.7s ▶ 语音:「暗号没白听。管子一松,钢梁抬起来了。」 +t+ 723.8s 〰 震动:error(做错了:两连短震) +t+ 723.8s 〰 震动:error(做错了:两连短震) +t+ 723.8s 〰 震动:error(做错了:两连短震) +t+ 723.8s ▶ 语音:「暗号没白听。管子一松,钢梁抬起来了。」 +t+ 725.9s ▶ 语音:「腿还在!我的腿还在!走,我给你带路。」 +t+ 730.4s ♪ 向导音:choice(抉择/等待输入) +t+ 730.4s ▶ 语音:「老白要去关电池舱阀门。向左滑,陪他去。向右滑,直接上浮。」 +t+ 732.6s ♪ 音效 sfx/ui_confirm +t+ 732.6s ▶ 语音:「阀门交给母船。你先上,腿要紧。」 +t+ 734.7s ▶ 语音:「现在是第二次下潜。」 +t+ 736.8s ▶ 语音:「已经救上一个人。」 +t+ 738.9s ▶ 语音:「氧气告急,只够最后一潜。」 +t+ 741.0s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 743.2s ▶ 语音:「阀门交给母船。你先上,腿要紧。」 +t+ 745.3s ♪ 音效 sfx/ui_menu +t+ 745.3s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 745.3s ♪ 向导音:menu(系统界面) +t+ 745.3s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 747.4s ▶ 语音:「回到水下。」 +t+ 749.5s ▶ 语音:「重新开始这次救援。」 +t+ 751.6s ♪ 音效 sfx/ui_confirm +t+ 751.6s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 751.6s ♪ 向导音:explore(探索/安全) +t+ 751.6s ▶ 语音:「阀门交给母船。你先上,腿要紧。」 +t+ 753.8s ♪ 音效 sfx/ui_menu +t+ 753.8s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 753.8s ♪ 向导音:menu(系统界面) +t+ 753.8s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 755.9s ▶ 语音:「回到水下。」 +t+ 758.0s ▶ 语音:「重新开始这次救援。」 +t+ 760.1s ♪ 音效 sfx/ui_confirm +t+ 760.1s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 760.1s ♪ 向导音:explore(探索/安全) +t+ 760.1s ▶ 语音:「阀门交给母船。你先上,腿要紧。」 +t+ 762.2s ▶ 语音:「阀门交给母船。你先上,腿要紧。」 +t+ 764.4s 〰 震动:error(做错了:两连短震) +t+ 764.4s ▶ 语音:「阀门交给母船。你先上,腿要紧。」 +t+ 766.5s ♪ 向导音:settle(结算) +t+ 766.5s ♫ BGM 切换 → bgm/deck(淡入 800ms) +t+ 766.5s ♪ 音效 sfx/surf_splash +t+ 766.5s ♪ 音效 sfx/ascent_chime +t+ 766.5s ▶ 语音:「老白出水。他一直扒着舱门,往水里看。」 +t+ 768.6s ▶ 语音:「潜友阿凯捎来应急瓶。甲板上,粥给你温着。」 +t+ 770.7s ▶ 语音:「应急瓶接上了,多三格。」 +t+ 772.8s ♫ BGM 切换 → bgm/dive(淡入 800ms) +t+ 772.8s ♪ 向导音:explore(探索/安全) +t+ 772.8s ▶ 语音:「第三潜,病舱。海燕号在倾斜,别恋战。」 +t+ 775.0s ♪ 向导音:turn(轮到你) +t+ 775.0s 〰 震动:confirm(轻点确认) +t+ 775.0s ♪ 音效 sfx/sonar_ping +t+ 775.9s ♪ 音效 sfx/echo_groan +t+ 780.9s ▶ 语音:「回波发闷。船体在呻吟,它撑不久了。」 +t+ 783.0s ♫ BGM 切换 → bgm/comms(淡入 600ms) +t+ 783.0s ♪ 向导音:explore(探索/安全) +t+ 783.0s ▶ 语音:「你来了。小郑股骨断了,我给他固定好了。」 +t+ 787.7s ♪ 音效 sfx/ui_menu +t+ 787.7s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 787.7s ♪ 向导音:menu(系统界面) +t+ 787.7s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 789.8s ▶ 语音:「回到水下。」 +t+ 792.0s ▶ 语音:「重新开始这次救援。」 +t+ 794.1s ♪ 音效 sfx/ui_confirm +t+ 794.1s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 794.1s ♪ 向导音:explore(探索/安全) +t+ 794.1s ♪ 向导音:explore(探索/安全) +t+ 794.1s ▶ 语音:「你来了。小郑股骨断了,我给他固定好了。」 +t+ 798.8s 〰 震动:error(做错了:两连短震) +t+ 798.8s ♪ 音效 sfx/ui_menu +t+ 798.8s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 798.8s ♪ 向导音:menu(系统界面) +t+ 798.8s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 800.9s ▶ 语音:「回到水下。」 +t+ 803.1s ▶ 语音:「重新开始这次救援。」 +t+ 805.2s ♪ 音效 sfx/ui_confirm +t+ 805.2s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 805.2s ♪ 向导音:explore(探索/安全) +t+ 805.2s ♪ 向导音:explore(探索/安全) +t+ 805.2s ▶ 语音:「你来了。小郑股骨断了,我给他固定好了。」 +t+ 809.9s ♪ 向导音:explore(探索/安全) +t+ 809.9s ▶ 语音:「你来了。小郑股骨断了,我给他固定好了。」 +t+ 814.7s ▶ 语音:「救援钟一次带一个。我是医生,我最后走。」 +t+ 819.4s ♪ 音效 sfx/ui_menu +t+ 819.4s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 819.4s ♪ 向导音:menu(系统界面) +t+ 819.4s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 821.5s ▶ 语音:「回到水下。」 +t+ 823.7s ▶ 语音:「重新开始这次救援。」 +t+ 825.8s ♪ 音效 sfx/ui_confirm +t+ 825.8s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 825.8s ♪ 向导音:explore(探索/安全) +t+ 825.8s ▶ 语音:「救援钟一次带一个。我是医生,我最后走。」 +t+ 830.5s ♪ 音效 sfx/ui_menu +t+ 830.5s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 830.5s ♪ 向导音:menu(系统界面) +t+ 830.5s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 832.6s ▶ 语音:「回到水下。」 +t+ 834.8s ▶ 语音:「重新开始这次救援。」 +t+ 836.9s ♪ 音效 sfx/ui_confirm +t+ 836.9s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 836.9s ♪ 向导音:explore(探索/安全) +t+ 836.9s ▶ 语音:「救援钟一次带一个。我是医生,我最后走。」 +t+ 841.6s 〰 震动:error(做错了:两连短震) +t+ 841.6s ▶ 语音:「救援钟一次带一个。我是医生,我最后走。」 +t+ 846.4s ▶ 语音:「现在是第三次下潜。」 +t+ 848.5s ▶ 语音:「已经救上两个人。」 +t+ 850.6s ▶ 语音:「氧气告急,只够最后一潜。」 +t+ 852.7s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 854.8s ▶ 语音:「救援钟一次带一个。我是医生,我最后走。」 +t+ 859.6s ♪ 音效 sfx/ui_menu +t+ 859.6s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 859.6s ♪ 向导音:menu(系统界面) +t+ 859.6s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 861.7s ▶ 语音:「回到水下。」 +t+ 863.8s ▶ 语音:「重新开始这次救援。」 +t+ 865.9s ♪ 音效 sfx/ui_confirm +t+ 865.9s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 865.9s ♪ 向导音:explore(探索/安全) +t+ 865.9s ▶ 语音:「救援钟一次带一个。我是医生,我最后走。」 +t+ 870.7s 〰 震动:error(做错了:两连短震) +t+ 870.7s 〰 震动:error(做错了:两连短震) +t+ 870.7s 〰 震动:error(做错了:两连短震) +t+ 870.7s ♪ 向导音:choice(抉择/等待输入) +t+ 870.7s ▶ 语音:「病舱一次只能走一个。向左滑,先带陈医官。向右滑,先带小郑。」 +t+ 872.8s ♪ 音效 sfx/ui_confirm +t+ 872.8s ▶ 语音:「小郑先走。陈医官,下一潜,就是你的。」 +t+ 874.9s ▶ 语音:「小郑吊上去了。他一路,都没敢出声。」 +t+ 877.0s ♪ 音效 sfx/ui_menu +t+ 877.0s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 877.0s ♪ 向导音:menu(系统界面) +t+ 877.0s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 879.2s ▶ 语音:「回到水下。」 +t+ 881.3s ▶ 语音:「重新开始这次救援。」 +t+ 883.4s ♪ 音效 sfx/ui_confirm +t+ 883.4s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 883.4s ♪ 向导音:explore(探索/安全) +t+ 883.4s ▶ 语音:「小郑吊上去了。他一路,都没敢出声。」 +t+ 885.5s 〰 震动:error(做错了:两连短震) +t+ 885.5s 〰 震动:error(做错了:两连短震) +t+ 885.5s ♪ 音效 sfx/ui_menu +t+ 885.5s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 885.5s ♪ 向导音:menu(系统界面) +t+ 885.5s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+ 887.6s ▶ 语音:「回到水下。」 +t+ 889.8s ▶ 语音:「重新开始这次救援。」 +t+ 891.9s ♪ 音效 sfx/ui_confirm +t+ 891.9s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+ 891.9s ♪ 向导音:explore(探索/安全) +t+ 891.9s ▶ 语音:「小郑吊上去了。他一路,都没敢出声。」 +t+ 894.0s 〰 震动:error(做错了:两连短震) +t+ 894.0s ▶ 语音:「去吧。我守着灯,灯不灭,人就不散。」 +t+ 898.3s ▶ 语音:「现在是第三次下潜。」 +t+ 900.4s ▶ 语音:「已经救上三个人。」 +t+ 902.5s ▶ 语音:「氧气告急,只够最后一潜。」 +t+ 904.7s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 906.8s ▶ 语音:「去吧。我守着灯,灯不灭,人就不散。」 +t+ 911.1s ▶ 语音:「去吧。我守着灯,灯不灭,人就不散。」 +t+ 915.4s ♪ 向导音:choice(抉择/等待输入) +t+ 915.4s ▶ 语音:「留守的人要空气。向左滑,留下你的备用瓶。向右滑,约定下一潜来接。」 +t+ 917.5s ♪ 音效 sfx/ui_confirm +t+ 917.5s ▶ 语音:「备用瓶留下。灯,给我亮着。」 +t+ 919.6s ▶ 语音:「备用瓶挂上了,能多撑十二小时。」 +t+ 921.7s ♪ 向导音:settle(结算) +t+ 921.7s ♫ BGM 切换 → bgm/deck(淡入 800ms) +t+ 921.7s ♪ 音效 sfx/surf_splash +t+ 921.7s ♪ 音效 sfx/ascent_chime +t+ 921.7s ▶ 语音:「病舱的人出水。海燕号的呻吟,隔着水都听得见。」 +t+ 923.9s ▶ 语音:「氧气告急,只够最后一潜。」 +t+ 926.0s ♫ BGM 切换 → bgm/dive(淡入 800ms) +t+ 926.0s ♪ 向导音:explore(探索/安全) +t+ 926.0s ▶ 语音:「最后一潜,指挥舱。海燕号,撑不住了。」 +t+ 928.1s ♪ 向导音:turn(轮到你) +t+ 928.1s 〰 震动:confirm(轻点确认) +t+ 928.1s ♪ 音效 sfx/sonar_ping +t+ 929.0s ♪ 音效 sfx/echo_groan +t+ 934.0s ♪ 音效 sfx/echo_metal_r +t+ 937.3s ♪ 向导音:danger(危险) +t+ 937.3s ♪ 音效 sfx/landslide +t+ 937.3s 〰 震动:danger(危险逼近) +t+ 938.4s 〰 震动:danger(危险逼近) +t+ 939.3s ▶ 语音:「它滑了!抓稳索缆,指挥舱里还有人!」 +t+ 939.5s 〰 震动:danger(危险逼近) +t+ 940.6s 〰 震动:danger(危险逼近) +t+ 941.4s ♫ BGM 切换 → bgm/comms(淡入 600ms) +t+ 941.4s ♪ 向导音:explore(探索/安全) +t+ 941.4s ▶ 语音:「救援员。我船上,还剩两个活人。」 +t+ 945.3s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+ 949.6s ▶ 语音:「现在是最后一次下潜。」 +t+ 949.6s 〰 震动:warning(警告三连震) +t+ 951.7s ▶ 语音:「已经救上三个人。」 +t+ 953.8s ▶ 语音:「氧气见底,必须上浮。」 +t+ 955.9s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+ 958.0s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+ 962.3s ▶ 语音:「现在是最后一次下潜。」 +t+ 962.3s 〰 震动:beat(节拍点) +t+ 964.5s ▶ 语音:「已经救上三个人。」 +t+ 966.6s ▶ 语音:「氧气见底,必须上浮。」 +t+ 968.7s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+ 973.0s ▶ 语音:「现在是最后一次下潜。」 +t+ 973.0s 〰 震动:beat(节拍点) +t+ 975.1s ▶ 语音:「已经救上三个人。」 +t+ 977.2s ▶ 语音:「氧气见底,必须上浮。」 +t+ 979.4s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+ 983.7s 〰 震动:error(做错了:两连短震) +t+ 983.7s ▶ 语音:「现在是最后一次下潜。」 +t+ 983.7s 〰 震动:beat(节拍点) +t+ 985.8s ▶ 语音:「已经救上三个人。」 +t+ 987.9s ▶ 语音:「氧气见底,必须上浮。」 +t+ 990.0s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+ 994.3s 〰 震动:error(做错了:两连短震) +t+ 994.3s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+ 998.6s ♪ 音效 sfx/ui_menu +t+ 998.6s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+ 998.6s ♪ 向导音:menu(系统界面) +t+ 998.6s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+1000.7s ▶ 语音:「回到水下。」 +t+1002.9s ▶ 语音:「重新开始这次救援。」 +t+1005.0s ♪ 音效 sfx/ui_confirm +t+1005.0s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+1005.0s ♪ 向导音:explore(探索/安全) +t+1005.0s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+1009.3s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+1013.6s ♪ 音效 sfx/ui_menu +t+1013.6s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+1013.6s ♪ 向导音:menu(系统界面) +t+1013.6s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+1015.7s ▶ 语音:「回到水下。」 +t+1017.8s ▶ 语音:「重新开始这次救援。」 +t+1019.9s ♪ 音效 sfx/ui_confirm +t+1019.9s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+1019.9s ♪ 向导音:explore(探索/安全) +t+1019.9s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+1024.2s 〰 震动:error(做错了:两连短震) +t+1024.2s ▶ 语音:「现在是最后一次下潜。」 +t+1024.2s 〰 震动:beat(节拍点) +t+1026.3s ▶ 语音:「已经救上三个人。」 +t+1028.5s ▶ 语音:「氧气见底,必须上浮。」 +t+1030.6s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+1034.9s ♪ 音效 sfx/ui_menu +t+1034.9s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+1034.9s ♪ 向导音:menu(系统界面) +t+1034.9s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+1037.0s ▶ 语音:「回到水下。」 +t+1039.1s ▶ 语音:「重新开始这次救援。」 +t+1041.2s ♪ 音效 sfx/ui_confirm +t+1041.2s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+1041.2s ♪ 向导音:explore(探索/安全) +t+1041.2s ▶ 语音:「都带走,我最后上。这是船长的规矩。」 +t+1045.5s ♪ 向导音:choice(抉择/等待输入) +t+1045.5s ▶ 语音:「气只够带一个。向左滑,带船长。向右滑,带陈医官。」 +t+1047.7s ♪ 音效 sfx/ui_confirm +t+1047.7s ▶ 语音:「船长,抓住我。海燕号的事,上面再说。」 +t+1049.8s ♪ 音效 sfx/ui_menu +t+1049.8s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+1049.8s ♪ 向导音:menu(系统界面) +t+1049.8s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+1051.9s ▶ 语音:「回到水下。」 +t+1054.0s ▶ 语音:「重新开始这次救援。」 +t+1056.1s ♪ 音效 sfx/ui_confirm +t+1056.1s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+1056.1s ♪ 向导音:explore(探索/安全) +t+1056.1s ▶ 语音:「船长,抓住我。海燕号的事,上面再说。」 +t+1058.3s 〰 震动:error(做错了:两连短震) +t+1058.3s 〰 震动:error(做错了:两连短震) +t+1058.3s ▶ 语音:「船长,抓住我。海燕号的事,上面再说。」 +t+1060.4s 〰 震动:error(做错了:两连短震) +t+1060.4s ▶ 语音:「去吧。灯我留着,人齐了就熄。」 +t+1064.0s 〰 震动:error(做错了:两连短震) +t+1064.0s ▶ 语音:「现在是最后一次下潜。」 +t+1066.1s ▶ 语音:「已经救上四个人。」 +t+1068.3s ▶ 语音:「氧气见底,必须上浮。」 +t+1070.4s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+1072.5s ▶ 语音:「去吧。灯我留着,人齐了就熄。」 +t+1076.1s 〰 震动:error(做错了:两连短震) +t+1076.1s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+1080.2s 〰 震动:error(做错了:两连短震) +t+1080.2s ▶ 语音:「现在是最后一次下潜。」 +t+1082.3s ▶ 语音:「已经救上四个人。」 +t+1084.4s ▶ 语音:「氧气见底,必须上浮。」 +t+1086.6s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+1088.7s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+1092.8s ▶ 语音:「现在是最后一次下潜。」 +t+1092.8s 〰 震动:beat(节拍点) +t+1094.9s ▶ 语音:「已经救上四个人。」 +t+1097.0s ▶ 语音:「氧气见底,必须上浮。」 +t+1099.1s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+1103.2s ♪ 音效 sfx/ui_menu +t+1103.2s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+1103.2s ♪ 向导音:menu(系统界面) +t+1103.2s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+1105.3s ▶ 语音:「回到水下。」 +t+1107.4s ▶ 语音:「重新开始这次救援。」 +t+1109.6s ♪ 音效 sfx/ui_confirm +t+1109.6s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+1109.6s ♪ 向导音:explore(探索/安全) +t+1109.6s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+1113.6s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+1117.7s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+1121.8s ▶ 语音:「现在是最后一次下潜。」 +t+1121.8s 〰 震动:beat(节拍点) +t+1123.9s ▶ 语音:「已经救上四个人。」 +t+1126.0s ▶ 语音:「氧气见底,必须上浮。」 +t+1128.1s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+1132.2s ▶ 语音:「现在是最后一次下潜。」 +t+1132.2s 〰 震动:beat(节拍点) +t+1134.3s ▶ 语音:「已经救上四个人。」 +t+1136.5s ▶ 语音:「氧气见底,必须上浮。」 +t+1138.6s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+1142.7s 〰 震动:error(做错了:两连短震) +t+1142.7s 〰 震动:error(做错了:两连短震) +t+1142.7s 〰 震动:error(做错了:两连短震) +t+1142.7s ▶ 语音:「三年前……没什么。走吧,别耽误。」 +t+1146.7s ♪ 向导音:choice(抉择/等待输入) +t+1146.7s ▶ 语音:「船长的话没说完。向左滑,把你听到的说出来。向右滑,什么都不问,拉他上浮。」 +t+1148.8s ▶ 语音:「现在是最后一次下潜。」 +t+1148.8s ♪ 音效 sfx/ui_confirm +t+1148.8s ▶ 语音:「纪律就是纪律。抓住,上浮。」 +t+1151.0s 〰 震动:error(做错了:两连短震) +t+1151.0s ▶ 语音:「现在是最后一次下潜。」 +t+1153.1s ▶ 语音:「已经救上四个人。」 +t+1155.2s ▶ 语音:「氧气见底,必须上浮。」 +t+1157.3s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。」 +t+1159.4s ▶ 语音:「纪律就是纪律。抓住,上浮。」 +t+1161.6s 〰 震动:error(做错了:两连短震) +t+1161.6s 〰 震动:error(做错了:两连短震) +t+1161.6s 〰 震动:error(做错了:两连短震) +t+1161.6s ♪ 音效 sfx/ui_menu +t+1161.6s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+1161.6s ♪ 向导音:menu(系统界面) +t+1161.6s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+1163.7s ▶ 语音:「回到水下。」 +t+1165.8s ▶ 语音:「重新开始这次救援。」 +t+1167.9s ♪ 音效 sfx/ui_confirm +t+1167.9s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+1167.9s ♪ 向导音:explore(探索/安全) +t+1167.9s ▶ 语音:「纪律就是纪律。抓住,上浮。」 +t+1170.0s ▶ 语音:「纪律就是纪律。抓住,上浮。」 +t+1172.2s ♪ 音效 sfx/ui_menu +t+1172.2s ♫ BGM 切换 → bgm/deck(淡入 500ms) +t+1172.2s ♪ 向导音:menu(系统界面) +t+1172.2s ▶ 语音:「菜单。单击切换选项,双击确认。」 +t+1174.3s ▶ 语音:「回到水下。」 +t+1176.4s ▶ 语音:「重新开始这次救援。」 +t+1178.5s ♪ 音效 sfx/ui_confirm +t+1178.5s ♫ BGM 切换 → bgm/comms(淡入 800ms) +t+1178.5s ♪ 向导音:explore(探索/安全) +t+1178.5s ▶ 语音:「纪律就是纪律。抓住,上浮。」 +t+1180.6s 〰 震动:error(做错了:两连短震) +t+1180.6s ▶ 语音:「现在是最后一次下潜。」 +t+1180.6s 〰 震动:beat(节拍点) +t+1182.8s ▶ 语音:「已经救上四个人。」 +t+1184.9s ▶ 语音:「氧气见底,必须上浮。」 +t+1187.0s ▶ 语音:「纪律就是纪律。抓住,上浮。」 +t+1189.1s 〰 震动:error(做错了:两连短震) +t+1189.1s 〰 震动:error(做错了:两连短震) +t+1189.1s ♪ 向导音:settle(结算) +t+1189.1s ♫ BGM 切换 → bgm/deck(淡入 800ms) +t+1189.1s ♪ 音效 sfx/surf_splash +t+1189.1s ♪ 音效 sfx/ascent_chime +t+1189.1s ▶ 语音:「最后一潜收工。问海号的甲板,从没这么亮过。」 +t+1191.2s ▶ 语音:「氧气见底,一潜都下不去了。」 +t+1191.2s 〰 震动:warning(警告三连震) +t+1193.4s ▶ 语音:「医疗舱躺满了。你的气瓶剩多少,你比我清楚。」 +t+1195.5s ▶ 语音:「三年前,也是这条沟。我按时上浮了,搭档没有。」 +t+1210.6s ♪ 向导音:nudge(看门狗轻提醒) +t+1210.6s ▶ 向导语音:「单击屏幕,继续。」 +t+1227.6s ♪ 向导音:nudge(看门狗轻提醒) +t+1227.6s ▶ 向导语音:「还在吗?单击继续。」 +t+1229.7s 【状态】乱按剧本收尾:脉冲 4 次、8 个抉择、乱试 209 次、逛菜单 40 次 结算链间隙,等单击继续(BGM=bgm/deck,语速1) + +#### 【玩家动作】全程没有任何一次手势被无声吞掉,也没有卡死在某个状态里——结局链照样走完 + diff --git a/research/new8/detective/round1/live-player.md b/research/new8/detective/round1/live-player.md new file mode 100644 index 00000000..9585a24a --- /dev/null +++ b/research/new8/detective/round1/live-player.md @@ -0,0 +1,105 @@ +# 《雨夜专案》全拟真试玩报告 — R1 双局(认真新手 + 急性子) + +## 基本信息 + +- 对象:`web/detective/` @ localhost:8001,真头 Chromium + SenseVoice ASR 全拟真(mix.webm/events.jsonl/verdicts.json 落盘在 `web/harness/live/out/detective-20260913033752`(局 A)与 `detective-20260913041753`(局 B))。 +- 局 A(认真新手):`voice=male, speed=normal, bgm=normal, guide=full`。录音窗 33.1 分钟(含驱动停顿约 5-6 分钟,净玩 ≈27 分钟;同弧转写参照系 20.6 分钟),159 个有效手势,全教学七步跟练 + 六份卷宗全听 + 故意同值指证 1 次 + M1-M4 全坐实 + 结案先错指小顺再正指周先生、凶器动机全对 + 裁决结算 + pack B 短打一处。**评级 B**(疑点 4/4、两问全对、错指 1、冗余指证 1、保底提示 2 条——驱动停顿引来提示,账目如实降级)。 +- 局 B(急性子):`voice=female, speed=1.7, bgm=normal, guide=standard`。录音窗 9.5 分钟,开局撞局 A 存档(sys_continue_ask → 单击续玩 pack B 半途:已听 0/6、疑点 1/4),标题乱划、证词板乱按 200s(pair-tap 即起即停+狂滑+菜单三进三出)、菜单五项全巡览+帮助链、照保底提示指证坐实 M4b、结案先乱指老葛再正指小顺、凶器动机**故意全错**、裁决链中五连乱点、接新案 pack A、播放中长按快进实测、菜单保存回大厅。**评级 B**(疑点 2/4、两问全错、错指 1)。 +- 两局合计 477 个 voice 段:A 局 OK 261 / MISMATCH 9 / TRUNCATED 7(6 条玩家动作可解释,1 条真 bug);B 局 OK 71 / MISMATCH 82 / TRUNCATED 46 / 未判 1(1.7x 下 MISMATCH 与 pair-tap TRUNCATED 多为伪影/玩家动作,见「测量局限」——46 条截断逐条复核全部落在手势 1.2s 窗内)。 +- 全程无卡死、无死锁、无语音叠语音、零页面错误(A/B pageerror=0);裁决链锁、菜单、存档续玩、接新案翻包、保存回大厅全部走通。 + +## 局 A 叙述(认真新手,male/normal/full) + +开场链:t=3.8 我在标题页先试左滑——**gd_invalid「这个操作,这里用不上。」+ error 震**(full 档无效手势语音纠错,onceKey 本局只此一次 ✓)→ t=6.5 单击开案 sys_new_case → intro_1 播到 t=16.1 被掐(**最后 0.85s「川死了」丢了**,详见 P1-1)→ intro_2/intro_3/tut_d0 完整。 + +DRILL 七步:D0 右滑 → 条目报名(paper_turn+sig_shun+「学徒小顺的证词。」)与 D1 指令撞车——**tut_listen 只播了 0.4s 就被报名掐死**(P1-2)→ 单击听老葛全链(6 句全完整)→ 双击重听末句 → 上滑状态链(st_asked_1→st_doubt_0→recap_go)→ 长按进指证(E2 受理干脆)→ D5 练习选老葛 w1_1 vs 小顺首句 → tut_cf_ok「练习不算数,真矛盾要靠耳朵找」+ success 震 → tut_done → 进板。 + +自由调查:六份全听(w1 重听整份=「全部听过=整体重听」兑现)。途中三项专测全过:**播放中双击=重听当前句**(w4 链 wen_2 播到一半双击,当场掐断重播同句,链后续不断);**播放中单击停止 + 续听从首个未听句起**(scene 链 sc_3 起播 0.45s 时单击停,再单击从 sc_3 重起——被掐句不计入已听 ✓);**播放中左右滑静默忽略**(fo_2 播中左滑+右滑,条目不变、零 error 震、链照走 ✓)。六份听齐上滑:st_asked_6→st_doubt_0→recap_go「接着查。」——然后就进入了三人设共同撞上的空档(见 P2-1:此刻它只教我「左右滑,换卷宗」)。 + +指证:先故意挑一对**同轴同值**(老葛 w1_2 vs 温太太 wen_1 都说雨 21:40 起)→ contra_miss 钝音 + cf_same「这两句说得一致,不矛盾。」(miss 三档第一档首次真机兑现,归因是真话 ✓)。然后 M1-M4 逐条坐实:每条 hit 链 contra_hit→cf_hit「对不上!矛盾成立,记入疑点。」+success 震→周先生 react 递进(记岔→支吾→拒答→想走,我恰好按 M1→M4 顺序所以句句对上——顺序错位即答非所问的隐患见 P1-3);第二份选择前第一份选定句自动重播(P1 记忆契约,5 次全兑现 ✓);M4 落音后 hint_fin「疑点齐了。去结案陈词。」自动接播一次 ✓。 + +结案:翻到「结案陈词」单击直接掉进三问(无确认闸,P1-5)→ 先错指小顺:确认句「就指认他?」(对他是真话;若我滑到温太太这句就是假话,P1-4)→ acc_shun「我宿在城南刘掌柜家,他全家都能作证!」→ fin_clear「不在场证明成立。证据放人,回到证词板。」(无限再机会 ✓)→ 再进,正指周先生 → 凶器四选项逐个预览(顺序=洗牌)选铜秤砣 → fin_wp_right → 动机选监守自盗 → fin_mv_right → **VERDICT**:fin_right→rain_swell 渐强→z_break_1..3 认罪三段→gavel 法槌→结算链。**链锁实测:z_break_2 播中我补一记在途 tap(t=1773.6)、settle_open 播中一记右滑(t=1786.9)——全部只换来引擎基础震,链纹丝不动走到 settle_hook 落声**(R1 转写轮 P1 标注「死窗未注入不判」的缺口,本局补上:吞得干净)。评级 **rate_b**「案子结了,卷宗上有疏漏。」+ st_doubt_4「疑点,四处,齐了。」+ st_miss_1「指证,错过一两回。」——我的账目(疑点 4、错指 1、冗余 1、保底提示 2)逐条属实,A 档卡线条件 hints≤1 被我驱动停顿引来的第 2 条提示踩破,**降级是真的,我认**。 + +SETTLE 单击接新案:sys_new_case → pack 翻转到 B → 短打 M1b(b_shun_1「我走的时候,顺手熄了店堂的灯。」vs wen_2)→ cf_hit + b_shun_react_1「灯?我、我走的时候明明熄了……」(变体 react ✓)→ 收工。 + +## 局 B 叙述(急性子,female/1.7x/standard) + +开场撞局 A 存档:sys_continue_ask,先两记左滑——**standard 档无效手势只有 error 震、无语音**(与局 A full 档对照成立 ✓);双击重听 continue_ask ✓ → 单击续玩:**复述链 st_asked_0「六份卷宗,一份都没听。」→ st_doubt_1「疑点,一处。」→ recap_go**(半途存档复述账目属实 ✓)。 + +乱按 200s:pair-tap 即起即停(w1_1 被我自己剁了十几次,全在手势窗内,属玩家动作)、狂滑换条目、菜单三进三出——**无进展轨三级全开火且全为真**:turn_tick(45s 级,ta=64)→ hint_a「探长,还没听的卷宗,先过一遍耳朵。」(ta=108.7,当时我 0/6 未听,真)→ **b_hint_c2「试试指证:小顺说铜秤卖了,现场铜秤还在。」(ta=168.7,L3 轮询跳过局 A 已坐实的 m1b,给的是 m4b——真且可指证)**。菜单挂起时长被剔除(三次乱逛后提示仍在正确窗口到)。 + +菜单全项巡览(补 R1 转写「五项只露第一项」缺口):sys_menu → 单击连切 **resume/cf/save/help/restart 五项全部起播** ✓ → 上滑帮助链(sys_help+settings_hint)→ 下滑关闭。保存回大厅路径走通(sys_saved→跳大厅)。 + +照提示指证:长按进指证 → 急性子扫句(预览句听 0.55s 就滑,sc_1/sc_2/sc_3 被我自己掐半截)→ b_shun_3 vs sc_4 定下 → contra_hit + cf_hit + **b_shun_react_2**「别问了……别问了……」(累计第 2 次坐实取 react_2 ✓)→ 疑点 2/4。 + +结案乱来:错指老葛 → acc_ge「我守了一夜门!温太太来借热水,她能作证!」→ fin_clear 回板;再进指正主小顺 → 凶器首项不是铜秤砣就直接定(**故意答错**)→ fin_wp_wrong「不对。铜屑不答应。记下了。」(不重答、记账 ✓)→ 动机同样乱定 → fin_mv_wrong「不对。账上短的东西,才是引线。记下了。」→ **VERDICT(变体)**:fin_right_b → b_shun_break_1..3(「棉袄反穿,弓着背」把老葛访客证词收回 ✓)→ gavel → 结算。**链中我连打 tap+右滑+双击+上滑+单击五记——全吞,认罪三段与评级一句不缺**。评级 rate_b + st_doubt_2「疑点,两处。」+ st_miss_0「指证,一次没错。」——全账属实。 + +接新案 pack 翻回 A → 听老葛:**播放中长按=引擎 1.7x 快进实测生效**(boost on/off 成对,在 1.7 基速上再加速),松手恢复;双击重听当前句、单击停止照常 → 菜单保存回大厅收工。 + +## 问题清单 + +### P0(阻塞/卡死) + +无。两局完整到结案+接新案;乱按 200s、菜单五进五出、裁决链五连乱点、续玩复述、保存回大厅全部无死锁,零页面错误。 + +### P1(体验断裂:截断/假话/设计承诺不兑现) + +1. **intro_1(male)实长 8.8s 超 8s 兜底,开场第一句案情被掐尾 0.85s——「沈万川死了」的「川死了」丢了**(局 A t=8.16 TRUNCATED,kill 时刻=起播+8.0s,与 SENTENCE_FALLBACK_MS 精确吻合;转写轮不可见,真机才暴露) + - 触发链:`_playSentence` 的 8s 资产缺失兜底计时器在真实长句上先开火 → 链推进 → 下一句顶掉在播句。同批超标资产(实测 ffprobe):`male/sys_help` 9.28s、`male/key/sys_help` 10.48s、`female/key/sys_help` 9.52s(female/intro_1 7.44s 安全;证词链全部 ≤7.4s 安全——≤8s 设计口径本来就是冲证词负荷定的)。 + - 后果:开场叙事第一句缺尾巴;help 被掐则「下滑菜单」四个字可能听不见。修法:兜底 8000→15000(它只该防资产缺失/引擎异常,不该是节奏装置);§4.3 契约同步改 15s;资产侧登记 4 句超标句(不强制重录——内容完整,节奏可容)。 + +2. **教学 D0→D1 交接互掐:tut_listen「单击,听取当前卷宗」只播 0.4s 就被 D0 的条目报名掐死**(局 A t=33.8 TRUNCATED,kill 者=item_w2 报名) + - 机制:D0 处理器先 `_navItem()`(450ms 后播条目名)再 `_drillPass()`(立即播 tut_listen)——450ms 后条目名把指令句顶掉。mock 转写里靠 8s 兜底「看起来正常」,真机指令直接丢。新手在 D1 面前没有听到「单击」两个字(靠猜也能过,但教学承诺破了)。修法:D0 通过路径串行化——先播完条目名再播 tut_listen(或 D0 不报名、由 D1 回正统一报名)。 + +3. **真凶 react 按「累计坐实次数」取句,与所坐实的矛盾内容脱钩——换个坐实顺序就是答非所问**(人设 P1 建议 1;局 A 我按 M1→M4 顺序恰好逐轴对应「灯→钥匙→秤→逐客」,纯属运气) + - 反例构造:先戳 M3 凶器(「是松木劈柴砸的」被法医铜屑证伪),第 1 次 react 播的却是「灯?……许是我记岔了」——玩家会以为自己指错了对象,「归因真话律」在演绎层面破功。修法:react 改按轴取句(lamp/key/weapon/scale 四轴各配一条),递进由同轴二次坐实或认罪链承担;pack B 同步(b_shun_react_1/2 已是内容弱绑定,可只补映射)。 + +4. **结案确认句埋着性别假话 + 指认选项念卷宗名不念人名**(人设 P1 建议 2;两局只验到男性目标,温太太分支是静态实锤) + - `fin_who_confirm` 写死「就指认他?单击,定下来。」——真凶问四选一里有温太太,选她即假。修法:改中性「就指认这位?」(零新性别分支成本)。 + - 真凶问选项复用条目名「学徒小顺的证词。」——指认的是人不是卷宗。修法:新增 4 句纯人名选项(item_who_w1..w4「门卫老葛。」等,旁白双性别 ×4=8 条新语音)。 + +5. **「结案陈词」是循环列表必经站,单击即坠三问、无确认闸**(人设 P2 建议 1 + 转写压力线误闯 6-7 次;局 B 实测误入后只能下滑开菜单再双击「返回证词板」自救——代价真实) + - 修法:case 条目单击 → 先播一句结案闸(fin_pre「证据在手,就此结案?单击定,滑走继续查。」)进确认相位,再单击才进 FINISH;滑走=留在板。与全局两段确认范式一致。 + +### P2(不适/慢) + +1. **「六份听齐、疑点为零」空档:状态链尾只说「接着查」,板级一级提示还教「左右滑,换卷宗」——卷宗全听完了换什么换**(局 A t=610-616 亲测撞见;人设 P1/P3/P4 三人同撞)。修法:全部听完且疑点未齐时,recap_go 换指路句(「挑一句你不信的,按住指证」)+ gd_board 此情换词;或该状态下 L3 提前。注:150s 保底 hint_c 本身好用(两局都真),只是来得矜持。 +2. **指证选句无加速通道:每句全文重播、四条矛盾回回从第一句扫起**(局 A 四次指证选句段实测 ≈25-35s/次;人设 P1/P3/P4 同点)。修法:选句预览放行长按快进(语音在播,宪法内;现 CONFRONT 长按=error 震)或给「从上次确认句接着预览」记忆点(cf.lineIdx 按条目记忆)。 +3. **保底提示附 warning 三连震 [30,50,30,50,30],像训人**(人设 P4 建议 3;局 A/B hint 落点实测每次都带)。修法:hint_a/b/c/fin 换轻震(confirm 级),warning 留给真正的危险语义(本作无 danger 态,warning 震实际只在递答案时出现——音色与语义错配)。 +4. **错指不当场记账:S 与 A 的差距靠玩家自己悟**(人设 P2 建议 2;局 A 我错指小顺后直到结算才听到账目)。修法:fin_clear 后补一句「错指一次,记档。」(st_wrong_1..n 不必,单句即可——预算内 1 句 ×2 性别)。 +5. **tut_skip「已跳过教学。左右滑换卷宗,单击听取。」不说「按住=指证」**(人设 P2 建议 3;局 B 靠 L3 保底才摸到指证入口的同款路径)。修法:tut_skip 补半句「按住屏幕,指证矛盾。」。 +6. **L2 提示在疑点 4/4 已齐后仍播「逐句比对」而非「去结案」**(局 A t=1595 hint_b 实播,当时我四疑点已齐——内容不算假但指引过时)。修法:L2 选句加 `doubts==4 → hint_fin` 分支(hint_fin 全局限 2 次的口径沿用)。 + +### P3(建议/记录) + +1. **菜单五项两局露全**(局 B 巡览实播 resume/cf/save/help/restart + 帮助链 + 保存回大厅)——R1 转写轮 P1 标注的「存档退出入口存在性无法证实」缺口关闭。顺带实测:菜单打开即停播报、关闭回板不丢局面、菜单挂起时长不进无进展轨 ✓。 +2. **NPC 平铺回退每句 4 个 404**(局 A 156 次 / 局 B 48 次失败请求:voice/male/z_1.{ogg,m4a,mp3,wav} 全试一遍再落 voice/ 根)——功能零损,纯日志噪音,abyss R1 同款(P3-1 同源)。引擎级,非本作代码。 +3. **FINISH 入口 tap 双震 [20]+[20]**(引擎基础确认震 + guide.turn haptic 叠加,局 B ta=395.67/428.65 两处)——轻,不碍事;要抠的话 guide.turn 的 haptic 在有引擎基础震时可省。 +4. **周先生与 male 旁白同 speaker 的已知风险在 male 档实播**:intro_w3(旁白嗓)紧贴 z_1(周先生嗓)背靠背(局 A t≈402-405,转写 main t+403.4/405.5 同见)——签名 earcon 只垫条目名前、管不到这条缝。建议:intro_w3 换周先生 NPC 声自报(「我姓周,管了十年的账……」)或其后补半拍静默。人声美感属人耳复核范畴,本条只记结构缝隙。 +5. **覆盖缺口残留**:guide=off 未进 live(playtest 场景已断零 gd_* 零定时器);键盘通道未进 live(playtest 场景 13 已断路由);D5 教学期菜单打断回退路径未实测(playtest 已断)。均已有断言兜底,留真机抽查。 + +### 测量局限(本次仪器口径) + +- **1.7x 语速下 ASR 大面积 MISMATCH**(局 B 82/200 段 vs 局 A 9/277):「法医报告」→「阿一报告」、「新案开卷」→「今按开卷/我请按开卷」、「铜秤砣」→「同秤土」等,短句(≤6 字)+混音背景下的 ASR 伪影(README 已知限制)。源资产直转正确(同 id 在 1.0x 局 OK)。事件层(TRUNCATED/SILENCE)两局全部可信;1.7x 会话的 MISMATCH 只做参考。 +- **局 B 46 条 TRUNCATED 逐条复核全部落在手势 1.2s 窗内**(pair-tap 即起即停、快进扫句、裁决链乱点)——玩家动作语义内截断,无一条引擎级异常。 +- 存档 PUT 不在探针 audio-only fetch 记录内(无 auth token 不发送),服务器侧落盘未验(仪器限制,非问题;localStorage 链路经读档复述间接验证为真)。 + +### 做得好的地方(实话实说) + +- **裁决链锁两局实弹验过**:A 局 z_break_2 播中在途 tap + settle_open 播中右滑;B 局认罪链 tap/右滑/双击三连 + 结算链上滑/单击——链全部完整走到 settle_hook,状态零逃逸、语音零截断(R1 转写轮 P1「死窗未注入不判」缺口关闭)。 +- **保底救援两局真开火、全部说真话、照做即中**:B 局乱按 200s → 45s turn_tick / 90s hint_a(当时我 0/6 未听,真)/ 150s b_hint_c2(轮询跳过已发现 m1b,给 m4b,真)→ 照它指证当场 cf_hit;A 局驱动停滞期 hint_a 在 fore 未听时开火(真)。「证词板乱按也要被抢救」实测成立。 +- **归因真话律 live 全账对得上**:cf_same(同说雨 21:40)/ acc_shun / acc_ge / fin_wp_wrong / fin_mv_wrong / 两局 rate_b 的每一分降级(A: hints=2 踩破 A 档线;B: 疑点 2+两问全错)都能在事件流里找到对应事实;st_doubt/st_miss 播报值=运行值。 +- **记忆契约与聆听保护全兑现**:cf_second 后第一份选定句自动重播(两局 6 次);播放中双击重听当前句、单击停止、续听从首个未听句起(sc_3 断点续 sc_3)、播放中左右滑静默忽略零 error 震——P1 转写轮标注的三条「真机必测」全部通过。 +- **E2 长按互斥实测成立**:7 次长按全部落在空闲期进指证(各带 0.15s 无害 boost 壳);播放中长按=引擎快进(B 局实测 1.7x 基速上再 boost),两语义零冲突。 +- 菜单模态完整(五项循环、帮助、保存回大厅跳大厅);续玩复述账目属实;pack 翻转二周目真凶换人(A 局末 b_shun_1 谎句一耳朵是新内容);无效手势 full 档有 gd_invalid 语音、standard 档仅震(分档正确);turn_tick 9 次全在 45s 级窗口;female/male 双声部真机各跑一局零缺失;277+200 段语音无叠音。 + +## 玩家情绪时间线 + +- 局 A:0:06 左滑被「这个操作,这里用不上」温柔纠正,规矩 → 0:16 开场白尾巴被咬掉半拍(「沈万川…」——当时没察觉,复盘才发现丢了「川死了」)→ 0:34 教学指令被报名盖掉,愣了一下但猜着过了 → 2:00 老葛证词听完,「已听一份」入账,感觉在干活 → 4:00 D5 练习「真矛盾要靠耳朵找」被当同行 → 10:00 六份听齐,「接着查」之后有点空,看门狗还在教我换卷宗(出戏) → 11:00 同值指证被「说得一致,不矛盾」诚实挡回,信任+1 → 11-24 四连坐实,每发 contra_hit+支吾递进都爽;第二份自动重播救了我这种记性 → 25:00 错指小顺被不在场证明温柔放回 → 27:00 认罪三段+雨声+法槌,试着戳屏幕发现链锁死,安心听完 → 评级 B(我以为该是 A——复盘才发现两条保底提示记了账,服气)→ 接新案,小顺开口第一句就是新谎,立刻想再戳他一次。 +- 局 B:0:06 续玩复述「六份一份都没听,疑点一处」——账目对得上 → 乱按 200s,菜单乱逛三回都没丢局面 → 1:48 被「还没听的卷宗先过一遍耳朵」点了一下(它说的是真的)→ 2:48 直接把矛盾对喂到嘴边,照做就中,爽 → 菜单五项一个个听过去(原来还有「保存并回大厅」)→ 4:30 乱指老葛被「她能作证」顶回来,不扣东西 → 5:00 故意答错两问,「铜屑不答应」「账上短的东西才是引线」——错得明明白白 → 认罪链里乱点五连全被吞,法槌照落 → 又是 B,账目没冤枉我 → 接新案快进扫证词,保存回大厅,一趟地铁结案。 + +## 如果只能改 3 件事 + +1. **修两条真机截断**:8s 兜底升 15s(intro_1 的「川死了」不能丢)+ D0→D1 交接串行化(tut_listen 的「单击」不能丢)——开场与教学的前 60 秒是全部信任的源头,现在两句都被自己人掐了。 +2. **让 react 慌在点上 + 指认不说假话**:react 按轴取句(先戳凶器就该慌凶器)、fin_who_confirm 改「就指认这位?」、真凶问选项念人名——「归因真话律」是本作的立身之本,这三处是它仅存的裂缝。 +3. **给「结案陈词」加一道确认闸**:循环列表必经站单击即坠三问,每个玩家每局都会误闯——一句「就此结案?单击定,滑走继续查」就解决,与全局两段确认同范式。 diff --git a/research/new8/detective/round1/p1-blind.md b/research/new8/detective/round1/p1-blind.md new file mode 100644 index 00000000..f8695e9d --- /dev/null +++ b/research/new8/detective/round1/p1-blind.md @@ -0,0 +1,21 @@ +# P1 视障资深玩家评审:《雨夜专案》(R1) + +> 评审依据:research/new8/detective/round1/transcript-main.md(一周目全弧线:教学→六卷听取→四矛盾→三问→裁决→pack B 开头)+ transcript-stress.md(乱按局,两案连结),全读。批次 2 新游戏首评;批 1 尺子(radio「播报值=运行值」、dungeon「教学承诺必须兑现」)继续用。 +> 说明:转写里的【状态】行按转写器注记处理,不算我耳朵听到的;我听到的只有 ▶ 语音、♪ 音效/BGM、〰 震动。 + +### 雨夜专案 +- 状态感知:4.5/5 —— 证词板七条目循环导航全程规整:每次切换 paper_turn+专属签名 earcon+条目全称(main t+62.1「学徒小顺的证词。」→t+70.6「门卫老葛的证词。」),stress 快速连滑 0.4 秒一项也不掉字(t+294.2-295.5 三项连过);听完一份自动报下一份名(main t+363.8);「结案陈词」这个动作条目带 turn 签名单独标记(stress t+22.6);上滑状态链随时对账(t+176.0「已听一份,还有五份。」、t+528.9「六份都听完了。」——报的数和我刚才听了什么严丝合缝);指证判定后自动回板+explore 签名(t+664.9),错指后自动回板(t+1051.1),我永远知道自己站在哪张桌前。扣 0.5 两处:板级循环没有「第几份/共七份」的位置提示,全靠我数滑了几下;菜单 5 项两局只露过第一项(建议 3)。 +- 下一步明确性:5/5 —— 教学一句一做不拖沓(t+8.5「先熟悉证词板。左右滑,换卷宗。」→实操→t+110.4「双击,重新听这一句。」→实操);每个等待点的提示句随相位换词(板级「还在证词板。左右滑,换卷宗。」/指证「还在选证词。左右滑,单击确认。」/结案「在想?左右滑选,单击定。」);三级救援真的开火——stress 卡关 52.2s turn_tick→102.1s「探长,还没听的卷宗,先过一遍耳朵。」→164.2s 直接给出可指证的矛盾对「试试指证:周先生说熄了灯,温太太说灯还亮着。」,我照它真坐实了 M1(t+296.9);四疑点齐了主动指路「疑点齐了。去结案陈词。」(t+1010.5)。唯一小瑕疵:六份听齐后板级第一级提示还在教我「左右滑,换卷宗」(t+538.9),此刻我该按住指证——好在无进展轨 90 秒内会把我领过去,不算迷失。 +- 愿意继续玩:是 —— 「证词会撒谎,证据不会」这个核心动词全程用耳朵完成、判定从数据单源推导,pack 翻转让第二案真凶真的换了人(stress 案二小顺认罪三段 t+1362.7-1371.7,棉袄反穿还解释了老葛的访客证词)——我背不了答案只能真听,这是给我这种耳朵量身做的本格。 +- P0 问题:无(两局转写范围内)。归因真话律已验证到的每一句都是真的(见专项);未验证的是 miss 侧与链死窗,属覆盖缺口。 +- 建议: + 1. 真凶反应句按「累计次数」取句会与矛盾内容错位:main 我坐实「凶器」矛盾的那一刻(t+890.8 铜屑 vs 劈柴),周先生喊的是「秤!秤的事,你们别再问了……」(t+892.9)——前两次反应恰好逐轴对应(灯 t+659.5、钥匙 t+775.4)只是我按 M1→M4 顺序发现的巧合;换个顺序先戳凶器,第一声慌就成了答非所问,玩家会以为指错了。改成按轴取句(四轴各配递进反应),让每一次慌都慌在我刚戳中的那件事上。 + 2. 写死性别的确认句埋着假话:真凶四选一里有温太太,而确认句是固定的「就指认他?单击,定下来。」(main t+1026.6、stress t+1234.2)——选她的那天这句就错了。分一条「就指认她?」或改「就指认这位?」。顺带:选人菜单播的是「学徒小顺的证词」(t+1022.3),我在选人、它念的是卷宗名,该换成纯人名。 + 3. 指证选句没有加速通道:周先生六句要从头逐句滑到目标(main t+801.2→809.2 四句全播≈30 秒,且每句全文重播),CONFRONT 里长按又是 error 震——把引擎长按快进放进选句预览(那也是语音在播,不违宪法);或给「从上次确认过的那句接着预览」的记忆点。另外 5 项菜单两局 5 次打开每次只听到「回到证词板。」(stress t+65.0/132.1/164.2/171.3/186.0),后四项含「去指证」「保存并回大厅」零次露脸——真机把五项听全,存档退出入口存在性现在无法证实。 + +#### 证词导航与归因真话(专项) +- 导航规整度——样本满分。七条目恒定循环、名字全称恒定(「门卫老葛的证词」「现场勘验」「结案陈词」,无一缩写无一跳字);签名 earcon 前置率 100%(我逐条数过,签名与名字从未错位);指证=选条目→选句→两段确认,结案三问=同一套左右滑+单击范式贯穿三个层级,每层单击语义都是「定下来」,没有一层要我换脑子。所有列表逐项预览、一次一句,≤3 选项纪律以「每次只播一项」的上限执行。弱项两条:条目级无位置提示(句级不播序号是数字拼接禁令的交互侧落实,我认;但「第几份/共七份」半句不违反禁令,能省我数数的脑子);指证选条目阶段 6 条目每次从当前项起滑,到周先生平均 3 滑≈10 秒,可接受。 +- 重听与断句续听——半验证。已验证:双击=重听最后一句(教学位 main t+140.4 实操);指证第二份选择时自动重播第一份选定句(main t+264.2、t+601.8、t+712.8 三次,记忆契约兑现,这个设计给满分行);FINISH 等待时看门狗复述当前选项(stress t+1232.1「门卫老葛的证词。」随 nudge 重播)。未验证:播放中双击=重听当前句(两局无人试过)、单击停止后续听「从首个未听句起」(无人中途停过一份证词)、播放中左右滑静默忽略(stress t+22.2 有一处落在 w1_1 尾音 ±20% 的时间模糊带内,判不了是违例还是句子已结束)——这三条是我的日用动词,真机必测。 +- 归因真话律——已验部分全真,逐条对过。hit:「对不上!矛盾成立,记入疑点。」四次入账与状态链、结算一致(main 疑点 1→4:t+657.4/773.3/890.8/1004.6,结算「疑点,四处,齐了」t+1120.7);错指=不在场证明复述且 alibi 全部提前铺在证词里(小顺「我宿在城南刘掌柜家,他全家都能作证!」t+1044.5 ↔ w2_1/w2_2;pack B 错指周「我十点就到家了!我家婆娘能作证!」stress t+710.0 ↔ 其自述)——没有一句「再想想」式废话归因;凶器/动机错答=物证归因(「不对。铜屑不答应。」stress t+1316.3 ↔ fo_3;「不对。账上短的东西,才是引线。」t+1358.5 ↔ w1_6/wen_5),错答不重答、记账、结案照走;评级账目一一对应(main A:疑点 4+两问全对+错指 1≤1,「干净利落的结案」t+1118.6;stress 案一 C:疑点 1+两问全错「补丁不少」+「疑点,一处」t+562.0;stress 案二 C:疑点 0「疑点,还没有」t+1384.0)。未验证:miss 三档 cf_same/cf_diff/cf_self 两局零 miss、contra_miss 钝木鱼一次没响——归因真话的「说不矛盾」那一半 R1 没证到。声音侧一个设计自认风险的补刀:周先生与男旁白同 speaker,缓解措施声称「证词链内零旁白插话」,但 intro_w3「周先生,管了十年的账……」(main t+403.4)是旁白句、紧贴周先生第一句 z_1(t+405.5),男声设置下两句同嗓音背靠背,签名 earcon 只垫在条目名前、管不到这两句的边界——建议 intro_w3 交给周的 NPC 声,或其后补半拍静默。 +- 三级救援可听性——验收通过。L1 turn_tick(stress t+52.2)→L2 短句「还没听的卷宗,先过一遍耳朵。」+warning 震(t+102.1,当时我确实一份没听完,真话)→L3 直接给出可指证的矛盾对(t+164.2,且该对真实可走通——照做即 hit)。三级递进、全部可听、全部为真、乱按局照样结案:这是「证词板乱按也要被抢救」的正确实现。VERDICT 链锁:认罪链完整有序(rain_swell→三段→gavel→归档),链后乱划得 error 震(t+574.2);在途 tap 死窗未注入测试,不判。 +- 通用项:成功零灌教学(hit 后只有 react+自动回板,rate 句惜字如金);D5 教学截获判定的话术「练习不算数,真矛盾要靠耳朵找」(main t+316.9)——既承诺了诚实又当场兑现,把我当同行,这句给满分;提示不逐字重复(两级不同句、相位不同词);跳教学一句顶用(stress t+5.1「已跳过教学。左右滑换卷宗,单击听取。」);无一处我被当成白痴。 diff --git a/research/new8/detective/round1/p2-student.md b/research/new8/detective/round1/p2-student.md new file mode 100644 index 00000000..9327dce9 --- /dev/null +++ b/research/new8/detective/round1/p2-student.md @@ -0,0 +1,19 @@ +# P2 · 时间充裕的大学生 评审——《雨夜专案》(R1) + +> 视角:23:30,宿舍躺床,戴耳机,音量正常。按「真机听到这些」代入转写(语音时长为估算,我主要看相对节奏和「我听见了什么」)。 + +### 雨夜专案 +- 状态感知:5/5 —— 两个随时可查的账本(上滑 t+176.0「已听一份,还有五份」「疑点,还没有」;六份听齐 t+528.9「六份都听完了」),翻卷宗有纸页音+每条目专属签名音+整句条目名(切到周先生 t+402.9),不靠记名字、耳朵自己认人;指证判定后自动回板并报落点。全程没有一次不知道自己翻到哪、查到第几步。 +- 下一步明确性:4/5 —— 每个相位都有带方向的语音指令,等 15 秒就有 nudge 复读当前动作(t+227.4「还在选证词。左右滑,单击确认」),两段确认防手滑(「就这句?单击,定下来」t+588.4),乱按也有三级保底把可指证的矛盾对直接喂到嘴边(stress t+164.2,照做即 hit,stress t+296.9)。扣分:① 证词板是循环列表,「结案陈词」是其中一站,路过单击就直接掉进结案三问——压力线那位一路误闯结案流程不下六七次(stress t+22.6/57.7/181.9/305.4/494.7/682.2),正常玩家换卷宗也躲不开这一站,想出来要么硬着头皮指认要么绕菜单;② 指认选项念的是「学徒小顺的证词」(t+1022.3)——我指认的是人,不是证词,措辞上小小硌一下。 +- 愿意继续玩:是 —— 结算那句「同一场雨里,还有别的案子」当场兑现:单击接新案,半分钟内就听见小顺说「我走的时候,顺手熄了店堂的灯」(t+1152.3)——上一局凶手的话从别人嘴里说出来,这局必须打完,顺便把 A 换成 S。 +- P0 问题:无。 +- 建议: + 1. 「结案陈词」条目加一道闸:先播一句结案概要(「证据在手,就此结案?」)再进三问。它是循环列表必经站,误触代价太大——每次误入都要么硬着头皮走指认、要么绕菜单退出去,这在每一局里都会发生不止一次。 + 2. 把 S 的差距播出来:结算念了「疑点,四处,齐了」「指证,一次没错」两个满分项(t+1120.7/1122.9),但我错指小顺那次(t+1044.5)从头到尾没人记账——「干净利落」(A)和「教科书」(S)之间差的那一下,全靠我自己推理是那次误指。错指当场补一句「错指一次,记档」之类,「再开一局拿 S」的动力立刻成立。 + 3. 跳过教学那句话补上核心动词:「已跳过教学。左右滑换卷宗,单击听取。」(stress t+5.1)没说「按住=指证」——压力线玩家是靠三级保底提示才摸到指证入口的。跳过教学不等于已经会玩,一句成本的事。 + +#### 核心动词的新鲜度与重玩钩子 +- 新鲜度:高,纯音频的天然选题。证词本来就是「说」出来的,翻卷宗=翻语音段落,双击重听某一句时我在做侦探的工作、而不是在操作游戏,这个动词不需要任何降维。上手节奏也不错:教学指令 t+8.5 就等着我动手,七步每步一句+马上实操,且 D1 就在听老葛的真实证词,不是假教学;急性子如我在第 3 步「上滑听进度」时有点不耐烦,但每步都短,没到拖沓线。决策深度中等:第一发 M1 是完整的推理——周先生「临走,我顺手熄了店堂的灯」(t+576.7)对温太太「十点二十……灯,亮着呢」(t+637.9),跨两份证词+一个时间点,我自己在脑子里对上的那一下很爽;但要泼冷水:四条矛盾全挂周先生一个人身上,M3/M4 还是同一句 z_4 的两个断言——第一发 hit 之后「是谁」就没有悬念了,后三发更像在集邮疑点清单。 +- 指证爽感:好在 react 递进把「确认」演成了「逼供」——「许是我记岔了」(t+659.5)→「他、他有时候,也贴身带着的」(t+775.4)→「秤!秤的事,你们别再问了」(t+892.9)→「随你们怎么问。我要回去了」(t+1006.7)。每一发 hit:金属撞击+盖章尾音+长震→「对不上!矛盾成立」→对方当场破功,四连发发命中多巴胺;认罪三段+雨声渐强+法槌(t+1096.8→1116.5)是这两批游戏里最好的结算仪式,我躺着没舍得动。 +- 重玩钩子:两层都真实。① S 追逐——前提是建议 2 修好,现在我只听到 A「干净利落」,不知道差在哪;② pack 翻转变体案是教科书级:同一套雨夜、同一批证人,说谎的人换了——小顺那句「库房的货,我一件都没碰过」(t+1148.9)一耳朵就是新句子,逼我逐句重听;压力线里小顺认罪「我把棉袄反穿,弓着背,葛大爷没认出我」(stress t+1367.0)把老葛「高个微驼背」的伏笔(t+85.1)收得干干净净,这种咬合让我相信案子是设计出来的、不是模板填的。但只有 A/B 两包:第三局开始就是背答案,「还有别的案子」想名副其实,后续得真加包。 +- 说教/拖沓检测:干净。教学七步无一句废话,下滑一秒跳过(stress t+5.1 验证过);证词链播单句可停、双击可重听,最长一段三十秒上下(老葛 t+73.1→104.0);全程没有一句「你应该」。唯一的小拖沓感来自指证导航本身:滑条目→逐句预览→两段确认,到第四发我已经熟练到闭着眼走完全程——这算熟练度曲线,不算病。 diff --git a/research/new8/detective/round1/p3-office.md b/research/new8/detective/round1/p3-office.md new file mode 100644 index 00000000..2a9d7319 --- /dev/null +++ b/research/new8/detective/round1/p3-office.md @@ -0,0 +1,19 @@ +# P3 评审:《雨夜专案》(detective)— 时间紧张的白领 + +> 视角:32 岁,地铁单程 25 分钟,站立单手持机,嘈杂车厢,只玩过消消乐;上班摸鱼怕出声、随时被打断。依据 R1 两份转写(主线完整局 + 乱按压力局=我被反复打断后的真实状态)代入「真机听到这些」。 + +### 雨夜专案 +- 状态感知:4/5 —— 账本随时可查且句句为真:上滑三句「已听一份,还有五份」「疑点,还没有」「接着查」(主线 t+176.0-180.3、t+528.9-533.1);每个条目有专属签名音+报名(t+62.1 翻到小顺/老葛各带一声签名),乱按局里我也能靠耳朵分清翻到了谁;结算账目与过程一致——压力局乱成那样也没说假话(第一案 t+559.8-564.1「疑点,一处」实为 1/4;第二案 t+1384.0「疑点,还没有」实为 0/4)。扣一分:状态链只报数量不报内容,被打断后「谁说过灯、谁说过钥匙」要我自己重新捞——好在每句双击可免费重听兜住了。 +- 下一步明确性:4/5 —— 教学逐步带做、指证每一相位都有动词开头的指令(t+212.4「先选第一份证词。左右滑换,单击确认」、t+599.7「再选与它矛盾的那份证词」),三问同样「左右滑选,单击定」(t+1020.2 起)。扣一分的空档:六份全听完、疑点为零之后只得到一句「接着查」(t+533.1)+通用 nudge「还在证词板。左右滑,换卷宗」(t+538.9)——这段「都知道了但不知道该干嘛」要等 150 秒才有真话提示来救,是我最可能收起手机的两分钟。 +- 愿意继续玩:是 —— 「对不上!矛盾成立」一响、对面开始支吾「灯?……许是我记岔了」(主线 t+657.4-659.5)的那两秒值回全程,一桩案子正好一趟地铁。 +- P0 问题:无。 +- 建议:≤3 条,按对「我愿意玩下去」的影响排序 + 1. 「全听完成、疑点为零」的状态给一句更具体的下一步(如「挑一句你最不信的,按住指证试试」),或在此状态下把 150 秒的真话提示提前——保底答案已经存在且好用(压力局 t+164.2 一句话直接给了矛盾对),只是来得太矜持。 + 2. 指证选句阶段放行长按快进(现在长按=error 震):周先生那份要连听 z_1-z_3 才扫到 z_4,四条矛盾每条都从第一句重扫(主线 t+576.7/685.5/801.2/917.1 四遍),通勤里这是最磨人的一分多钟。 + 3. 无操作轨第一级收敛些:压力局里「还在证词板。左右滑,换卷宗」出现了十几次(t+586.3/624.1/776.2/816.4/1007.2……),两级之后可降为只震动不念——abyss「两级后仅环境声」的做法可以直接抄。 + +#### 证词密度核算 + 通勤颗粒 +- 密度核算:一份证词 6 句、约 40 秒(老葛 t+326.1→363.8、小顺 365.4→400.7、周先生 402.9→440.5),每句 0-2 个线索;全案 35 句里真正要盯的是 4 条矛盾、其中三条都压在周先生一人身上——z_4 一句两断言(凶器+铜秤,t+423.9)还要被 M3/M4 各用一次(t+890.8、t+1004.6)。对消消乐水平的我,「记」的负担被三件事卸掉:疑点有账本(上滑报数)、每句双击免费重听、卡 150 秒发可指证的矛盾对。真实负担在「找」——要在 35 句里想起「灯」在谁的哪一句,这是我的新技能;但账本+重听+保底把它兜成「慢,不会输」。压力局实证:我几乎什么都没记住,靠一句提示(t+164.2「周先生说熄了灯,温太太说灯还亮着」)照样坐实疑点、两案皆结。 +- 3 分钟颗粒:比 3 分钟还细。一句 ≤8 秒、单击即停、双击重听当前句;一份证词 ≈40 秒;一次完整指证 ≈60-90 秒;一桩案 15-20 分钟且必结——压力局第二案我疑点 0/4、凶器动机全答错,案子照样闭合收档(t+1360.6-1388.2 认罪链→法槌→评级),摸鱼两分钟=听完一份证词存档走人。「未听 ≤3 名直报」够用:未听清单就是我的待办清单,已听内容不用脑内持有、随取随听;但两份转写都没实际走到读档复述链,这条按设计文档先信。教学只付一次:drillDone 持久化+下滑一秒跳过(压力局 t+5.1「已跳过教学」实测)——代价是首局前 3 分钟全在教学+听第一份证词,第一次真乐趣(坐实矛盾)在主线 t+657 才来,首局不达标;第二桩案起节奏就是我的节奏。 +- 乱按救援吵不吵:不吵,节奏克制——nudge 十几秒一发、turn_tick 45 秒一发(t+52.2)、真话提示 150 秒一发,全走耳机;压力局最吵的一段(t+12-65 纸页+签名音连响)是我自己乱滑造成的,不是游戏轰炸。唯一措辞凶的是提示附带的警告三连震(t+102.1、t+164.2),可它递过来的是答案,我原谅它。 +- 单手盲操与摸鱼:全部动作=左右滑/单击/双击/上滑/下滑/空闲长按,拇指盲操无压力;无语音输入,戴耳机即沉默游玩。小坑一处:长按在「空闲=进指证」「播放中=快进」之间切换,全靠耳朵里有没有人说话来分辨——忙起来容易按错对象,好在快进一响我立刻知道松手。 diff --git a/research/new8/detective/round1/p4-worker.md b/research/new8/detective/round1/p4-worker.md new file mode 100644 index 00000000..c8887ec4 --- /dev/null +++ b/research/new8/detective/round1/p4-worker.md @@ -0,0 +1,22 @@ +# P4(疲惫的工人)R1 评审 —— 《雨夜专案》 + +> 45 岁,工地收工,宿舍 21:00,外放小音量,游戏经验少,反应不快。 +> 依据:research/new8/detective/round1/transcript-main.md(主线)+ transcript-stress.md(乱按压力局)。全部按「我真机听到这些」代入。 + +### 雨夜专案 +- 状态感知:5/5 —— 账本随时能翻:上滑就是「已听一份,还有五份」「疑点,还没有」(主线 t+176.0-178.1),六份听齐了它自己报「六份都听完了」(t+528.9)。指证到哪一步它都点着名——「先选第一份证词」「再选与它矛盾的那份」「就这句?单击,定下来」(t+556.1、t+599.7、t+588.4),不用我记流程。五个人(六份卷宗)各有各的动静:搪瓷缸、掸子、算盘、门环,不靠记嗓子认人。乱按那局我基本没正经听过,也没丢过自己。 +- 下一步明确性:4/5 —— 就一个坎:六份全听完、疑点还是零的时候(主线 t+528.9-533.1),它只说「接着查」,接着怎么查没说;我干等,看门狗还教我「左右滑,换卷宗」(t+538.9)——卷宗我全听完了啊,换什么换。得等 150 秒保底才递话。那一步该直接说「按住屏幕,去指证」。扣的这一分就在这。 +- 愿意继续玩:是 —— 不催不罚,实在找不着它 150 秒直接把答案递到耳朵边,我这种脑子慢的也能把案子结了;法槌一敲那下,真解乏,比刷一天短视频强。 +- P0 问题:无 +- 建议: + 1. 「都听完了、疑点没齐」这个当口(主线 t+533.1 之后),提示别再教「换卷宗」,直接指路「按住屏幕,试试指证」——别叫我干等 150 秒才等来这句话。 + 2. 指证一回要滑十几下:每回选句子都从第一句重新滑起(主线 t+917.1 起,回回都先过一遍「我七点进店上夜账」)。手不酸,磨性子;四个疑点就是四遍。选句能从上回停的地方接着滑就好。还有选句那阵 15 秒一催「还在选证词。左右滑,单击确认」(t+911.5 起),我正一句一句过耳朵呢,催这么紧干啥,听听证词的空当放宽点。 + 3. 帮忙的话配三连警告震:压力局 t+102.1「探长,还没听的卷宗,先过一遍耳朵」、t+164.2「试试指证:周先生说熄了灯,温太太说灯还亮着」,都跟着警告震。头一下我当自己犯错了。帮我的话,轻着点说,别用训人的动静。 + +#### 小节:保底破案 + 容错 +先说费不费脑子:没我想的费。矛盾都是「灯亮没亮、钥匙挂哪、木头还是铜器」这种过日子的事,不用推理,就是记着谁说过啥——记不住也不要紧,选第二份证词的时候它自动把第一份定下的那句重放一遍(t+601.8、t+712.8),不叫我脑里攥着。费的不是脑子,是滑来滑去那点耐心(见建议 2)。 + +- 保底我验过了,是真的:乱按那局我基本没正经听证词,90 秒它说「还没听的卷宗,先过一遍耳朵」(压力局 t+102.1),150 秒直接把矛盾对念给我——「周先生说熄了灯,温太太说灯还亮着」(t+164.2),我照着指,就响了那声「对不上」(t+296.9)。后来疑点没凑齐、凶器答错、动机答错,案子照样结:指认对了就一路走到认罪、法槌、归档。乱按一路也把案子结了,这句话我替它作证。 +- 指错了不挨嘲:头一回我指小顺,人家自报家门「我宿在城南刘掌柜家,他全家都能作证」(主线 t+1044.5),它说「不在场证明成立。证据放人,回到证词板」——没扣东西、没限次数,回去接着来。压力局连着指错周先生两回(t+690.0、t+905.0),还是好声好气。凶器答错也就一句「不对。铜屑不答应。记下了」(压力局 t+1316.3)——为啥错说得明白(法医讲过创口有铜屑),像记账,不像记仇。 +- C 档那句话:乱按那局评的是 C——「案子是结了,卷宗上补丁不少」(压力局 t+559.8)。真话,我确实全靠它喂;先给定心丸(案子结了)再说补丁,我听着不刺,甚至有点想笑。真扎一点的倒是第二局 0 疑点那句「疑点,还没有」(t+1384.0)——等于明说我耳朵白长了。0 疑点那一档,措辞能不能再软半分。 +- 没验到的:指证选错了会怎么说——挑两句根本对不上的话去指,那个反应两份转写一回都没出现(我两局全靠提示,一次都没指错过)。文档说是钝木鱼一声、给句真话归因,不吓人,可我没亲耳听着。下轮加个专指错的剧本,我才敢替它打包票。 diff --git a/research/new8/detective/round1/synthesis.md b/research/new8/detective/round1/synthesis.md new file mode 100644 index 00000000..550235cc --- /dev/null +++ b/research/new8/detective/round1/synthesis.md @@ -0,0 +1,53 @@ +# R1 Synthesis —《雨夜专案》(detective) + +> 产品裁定 | 证据源:4 人设评审(p1-blind/p2-student/p3-office/p4-worker)+ 真机试玩报告(live-player.md,会话 detective-20260913033752 / detective-20260913041753)+ 转写(transcript-main/stress.md) +> 注:R1 的 live 试玩为后补(批次 2 资产入库时未跑),本轮材料齐套后裁定。 + +## 1. R1 裁决 + +| 评审方 | 状态感知 | 下一步明确 | 愿意继续玩 | +|---|---|---|---| +| P1 视障评委 | 4.5/5 | 5/5 | **是** | +| P2 大学生 | 5/5 | 4/5 | **是** | +| P3 白领 | 4/5 | 4/5 | **是** | +| P4 工人 | 5/5 | 4/5 | **是** | +| 真机玩家(局 A 认真新手 / 局 B 急性子) | — | — | **是**(附修复条件:P1 级两条截断+三处真话裂缝) | + +**结论:5/5 愿意玩,P0 = 0(两局无卡死/死锁/页面错误;乱按 200s 被三级保底抢救且照做即中;裁决链锁实弹验过)。** 核心动词「听证词找矛盾」全程用耳朵完成、判定从数据单源推导、归因真话律已验的每一句都真;pack 翻转变体案成立。P1 级问题集中在两处真机截断(开场白/教学指令被自己人掐)与三处真话裂缝(react 脱轴、指认性别、卷宗名当人名)。R2 进入修复轮。 + +## 2. R2 修复清单(按裁定优先级) + +### F 类(本轮必修) + +- **F1 (P1,live A t=8.16)**:`SENTENCE_FALLBACK_MS=8000` 在真实长句上先开火——male/intro_1 实长 8.8s 被掐尾 0.85s,「沈万川死了」丢「川死了」。同批超标:male/sys_help 9.28s、male/key/sys_help 10.48s、female/key/sys_help 9.52s(证词链全部 ≤7.4s 安全)。修:兜底 8000→15000(只防资产缺失/引擎异常);18-detective.md §4.3 与 playtest 注释同步;4 句超标句登记(内容完整,不重录)。 +- **F2 (P1,live A t=33.8)**:教学 D0→D1 互掐——D0 处理器 `_navItem()` 的 450ms 条目报名顶掉 `_drillEnter(1)` 立即起播的 tut_listen(指令「单击,听取当前卷宗」只播 0.4s)。mock 转写被 8s 兜底掩盖,真机才暴露。修:D0 通过路径串行化(先条目名落声、再播 tut_listen)。 +- **F3 (P1,人设 P1 建议 1)**:真凶 react 按累计次数取句与矛盾内容脱钩——先戳 M3 凶器,第一声慌却是「灯?……许是我记岔了」(答非所问=演绎层假话)。修:react 改按轴取句 {lamp: z_react_1, key: z_react_2, scale: z_react_3, weapon: 新句 z_react_w};pack B 映射 {lamp: b_shun_react_1, 其余: b_shun_react_2};18 §3.5 更新。 +- **F4 (P1,人设 P1 建议 2)**:`fin_who_confirm` 写死「就指认他?」对温太太为假;真凶问选项念「学徒小顺的证词」(卷宗名当人名)。修:确认句改中性「就指认这位?单击,定下来。」;新增人名选项句 item_who_w1..w4(「门卫老葛。」等 4 句),FINISH who 相位改播人名。 +- **F5 (P1,人设 P2 建议 1;转写压力线误闯 6-7 次;live B 实测只能菜单自救)**:「结案陈词」是循环列表必经站,单击即坠三问无确认闸。修:case 条目单击 → 新句 fin_pre「证据在手,就此结案?单击定,滑走继续查。」确认相位;再单击进 FINISH,滑走留板。playtest 加闸断言。 + +### F 类(P2 级,尽量修——全部低成本) + +- **F6 (三人设同撞:P1 瑕疵/P3 建议 1/P4 建议 1;live A t=610 亲测)**:「六份听齐、疑点为零」空档只说「接着查」,看门狗还教「换卷宗」。修:新增 recap_cf「卷宗都在耳朵里了。挑一句你不信的,按住指证。」(状态链尾条件换词)+ gd_board_cf「都听过了。按住屏幕,去指证。」(无操作轨此情换词)。 +- **F7 (三人设同点:P1 建议 3/P3 建议 2/P4 建议 2;live A 选句段实测 25-35s/次)**:指证选句无加速。修:CONFRONT 选句相位(line1/line2)长按放行为引擎快进(语音在播才生效,宪法内;确认/条目相位仍 error);同一会话按条目记忆预览位置(cf.lineIdx 记忆点)。 +- **F8 (P2,人设 P4 建议 3;两局 hint 落点实测)**:保底提示附 warning 三连震像训人。修:`_hintSpeak` 震动 warning→confirm。 +- **F9 (P2,人设 P2 建议 2)**:错指不当场记账,S/A 差距不可感知。修:fin_clear 链补新句 st_wrong「错指了,记档。」(单句不分档,与结算账目同源)。 +- **F10 (P2,人设 P2 建议 3)**:tut_skip 没说「按住=指证」。修:改词「已跳过教学。左右滑换卷宗,单击听取;按住屏幕,指证矛盾。」(30 字 ≤40 ✓)。 +- **F11 (P2,live A t=1595 实播)**:L2 在疑点 4/4 已齐后仍播 hint_b「逐句比对」而非「去结案」。修:`_progCheck` L2 选句加 `doubts==4 → hint_fin` 分支(沿用每句限 2 次)。 + +### V 类(复核后定夺,可能为伪影/超范围) + +- **V1**:NPC 平铺回退每句 4 个 404(局 A 156 次/局 B 48 次,功能零损)——引擎级回退探测噪音,abyss R1 P3-1 同源;不在本作代码范围,登记待引擎统一治理,R2 不动作。 +- **V2**:intro_w3(male 旁白嗓)紧贴 z_1(同嗓周先生)背靠背(人设 P1 专项;live A male 档实播该缝)。音色结构缝隙,待人耳试听统一处理;R2 不动资产,若人耳复核确认混淆再改 intro_w3 归属。 +- **V3**:FINISH 入口 tap 双震 [20]+[20](引擎基础震+guide.turn haptic 叠加,live B ta=395.67/428.65)。轻;观察项,不动作。 + +### 仪器/协议改进(不属游戏) + +- live 驱动教训:`ear.mark()` 在触发动作**之后**取会把刚落盘的事件排除出监听窗(局 A 三处停顿来源)。下轮驱动所有 mark 一律取在动作之前(局 B 已验证修复有效)。 +- 1.7x 会话的 ASR MISMATCH 降权口径沿用(局 B 82/200 为语速伪影;事件层判定不受影响)。 + +## 3. R2 轮次协议 + +1. dev 修 F1-F11 → playtest 全绿(断言增量:fin_pre 闸两段、react 按轴取句、人名选项、recap_cf/gd_board_cf 条件换词、L2 hint_fin 分支、选句长按快进、D0→D1 不互掐、兜底 15s;登记 13-playtest-criteria detective 章)。 +2. 语音管线:18-voice-ids 表更新(改词 fin_who_confirm/tut_skip + 新增 z_react_w/item_who×4/fin_pre/recap_cf/gd_board_cf/st_wrong)→ `tools/gen_voice_dual.py` detective 段同步 → `flock .gpu.lock` 生成 → 转换落盘 → `tools/check_all_assets.py` 终检 → `web/harness/voice_text.json` 侦探段同步(仪器台账登记)。 +3. 转写重生成(主线+压力)+ live 两会话复测(F1/F2 截断消失、结案闸、react 按轴、人名选项、指路句、hint 轻震现场坐实;VERDICT 链锁回归)。 +4. **4 人设全员复评**(基于 R2 转写+live 报告)→ R2 synthesis;达标判据=章程门:≥3/4 愿意玩 且无 P0 级状态混淆;连续 2 轮达标即收口,否则进 R3。 diff --git a/research/new8/detective/round1/transcript-main.md b/research/new8/detective/round1/transcript-main.md new file mode 100644 index 00000000..94a7e745 --- /dev/null +++ b/research/new8/detective/round1/transcript-main.md @@ -0,0 +1,653 @@ +# 试玩转写:《detective》 + +> 本文件是「玩家感知日志」:一位新手玩家的整局体验转写。语音列出了玩家听到的每句话全文, +> 音效/BGM/震动按发生时间列出。「静默」段 = 玩家什么也听不到。手势是剧本注入的(模拟真人手部动作), +> 非最优操作:包含犹豫、误操作与乱试。语音时长按语速估算(±20%),仅供节奏参考。 +t+ 0.0s (玩家点开游戏,轻触屏幕开始) +t+ 0.0s ♫ BGM 切换 → bgm/menu +t+ 0.0s ♪ 向导音:menu(系统界面) +t+ 0.0s 【状态】雨夜专案:一桩雨夜命案等着一双好耳朵 标题页:单击开始查案,上滑听案情简介(BGM=bgm/menu,语速1) + +#### 【玩家动作】单击,开始 + +t+ 0.0s ▶ 语音:「新案开卷。」 +t+ 2.1s ♫ BGM 切换 → bgm/board +t+ 2.1s ♪ 向导音:explore(探索/安全) +t+ 2.1s ▶ 语音:「雨下了一整夜。清晨,聚宝斋后院,古董商沈万川死了。」 +t+ 2.1s 【状态】开场三句案情简介 + 「先熟悉证词板」 教学第 0 步,跟着旁白做(下滑可跳过)(语音播放中,语速1) +t+ 4.2s ▶ 语音:「你是专案组探长。这桩案子,归你。」 +t+ 6.4s ▶ 语音:「卷宗六份:四位证人的证词,现场勘验,法医报告。」 +t+ 8.5s ▶ 语音:「先熟悉证词板。左右滑,换卷宗。」 +t+ 32.1s ♪ 向导音:nudge(看门狗轻提醒) +t+ 32.1s ♪ 向导音:watchdog(看门狗升级) +t+ 62.1s ♪ 向导音:nudge(看门狗轻提醒) +t+ 62.1s ▶ 语音:「先熟悉证词板。左右滑,换卷宗。」 + +#### 【玩家动作】右滑——换一份卷宗听听 + +t+ 62.1s ♪ 音效 sfx/paper_turn +t+ 62.1s ♪ 音效 sfx/sig_shun +t+ 62.1s ▶ 语音:「单击,听取当前卷宗。」 +t+ 62.1s 〰 震动:confirm(轻点确认) +t+ 62.6s ▶ 语音:「学徒小顺的证词。」 +t+ 70.1s ♪ 音效 sfx/paper_turn +t+ 70.1s ♪ 音效 sfx/sig_ge +t+ 70.6s ▶ 语音:「门卫老葛的证词。」 + +#### 【玩家动作】单击——听老葛的证词 + +t+ 72.7s ♪ 音效 sfx/sig_ge +t+ 73.1s ▶ 语音:「昨儿夜里雨大,我守着街门,一步没敢挪窝。」 +t+ 78.9s ▶ 语音:「九点五十,周账房出的街门,跟我说了声,回家。」 +t+ 85.1s ▶ 语音:「十点一刻,一位先生收着黑伞进了后巷。个儿高,微驼背。」 +t+ 92.2s ▶ 语音:「九点四十,雨点子刚砸下来,小顺打着伞出的街门。」 +t+ 98.6s ▶ 语音:「后半夜,温太太还来门房借过一回热水。」 +t+ 102.7s ♪ 向导音:nudge(看门狗轻提醒) +t+ 102.7s ♪ 向导音:watchdog(看门狗升级) +t+ 104.0s ▶ 语音:「听说店里账上短了银子,沈老板撂了话,月底清账。」 +t+ 110.4s ▶ 语音:「双击,重新听这一句。」 +t+ 110.4s 【状态】一份证词听完了——「已听一份,还有五份」 教学第 2 步,跟着旁白做(下滑可跳过)(语音播放中,语速1) +t+ 140.4s ♪ 向导音:nudge(看门狗轻提醒) +t+ 140.4s ♪ 向导音:watchdog(看门狗升级) + +#### 【玩家动作】双击——最后一句再过一遍耳朵 + +t+ 140.4s ▶ 语音:「听说店里账上短了银子,沈老板撂了话,月底清账。」 +t+ 146.0s ▶ 语音:「上滑,随时听进度:问了几份,疑点几处。」 +t+ 176.0s ♪ 向导音:nudge(看门狗轻提醒) +t+ 176.0s ♪ 向导音:watchdog(看门狗升级) + +#### 【玩家动作】上滑——听听问了几份、疑点几处 + +t+ 176.0s ▶ 语音:「已听一份,还有五份。」 +t+ 178.1s ▶ 语音:「疑点,还没有。」 +t+ 180.3s ▶ 语音:「接着查。」 +t+ 182.4s ▶ 语音:「按住屏幕,进入指证。去找两句对不上的证词。」 +t+ 212.4s ♪ 向导音:nudge(看门狗轻提醒) +t+ 212.4s ♪ 向导音:watchdog(看门狗升级) + +#### 【玩家动作】按住屏幕——进入指证 + +t+ 212.4s ♪ 向导音:choice(抉择/等待输入) +t+ 212.4s ♪ 向导音:turn(轮到你) +t+ 212.4s ▶ 语音:「指证矛盾。先选第一份证词。左右滑换,单击确认。」 +t+ 212.4s 〰 震动:confirm(轻点确认) +t+ 212.4s 【状态】练习一次指证:判定被教学截获,不算数 指证中:选第一份证词(左右滑换,单击确认,双击重听)(语音播放中,语速1) +t+ 214.5s ▶ 语音:「练习一次。选一份证词,单击确认;再选一份,任意一句。」 +t+ 216.6s ♪ 音效 sfx/sig_ge +t+ 217.1s ▶ 语音:「门卫老葛的证词。」 +t+ 227.4s ♪ 向导音:nudge(看门狗轻提醒) +t+ 227.4s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+ 242.4s ♪ 向导音:nudge(看门狗轻提醒) +t+ 242.4s ♪ 向导音:watchdog(看门狗升级) +t+ 242.4s ♪ 音效 sfx/sig_shun +t+ 242.8s ▶ 语音:「学徒小顺的证词。」 + +#### 【玩家动作】选定「学徒小顺的证词」——单击确认 + +t+ 245.0s ▶ 语音:「左右滑,一句一句听。」 +t+ 247.1s ▶ 语音:「夜里,师父打发我去城南,给刘掌柜送匣子。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 247.1s ▶ 语音:「夜里,师父打发我去城南,给刘掌柜送匣子。」 +t+ 252.0s ▶ 语音:「就这句?单击,定下来。」 +t+ 262.1s ♪ 向导音:nudge(看门狗轻提醒) +t+ 262.1s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 264.2s ▶ 语音:「再选与它矛盾的那份证词。」 +t+ 266.3s ▶ 语音:「夜里,师父打发我去城南,给刘掌柜送匣子。」 +t+ 279.2s ♪ 向导音:nudge(看门狗轻提醒) +t+ 279.2s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+ 294.2s ♪ 向导音:nudge(看门狗轻提醒) +t+ 294.2s ♪ 向导音:watchdog(看门狗升级) +t+ 294.2s ♪ 音效 sfx/sig_zhou +t+ 294.6s ▶ 语音:「账房周先生的证词。」 +t+ 294.6s ♪ 音效 sfx/sig_wen +t+ 295.1s ▶ 语音:「房东温太太的证词。」 +t+ 295.1s ♪ 音效 sfx/sig_scene +t+ 295.5s ▶ 语音:「现场勘验。」 + +#### 【玩家动作】选定「现场勘验」——单击确认 + +t+ 297.7s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 299.8s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 +t+ 301.9s ▶ 语音:「就这句?单击,定下来。」 +t+ 314.8s ♪ 向导音:nudge(看门狗轻提醒) +t+ 314.8s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 316.9s ▶ 语音:「指证就是这样。练习不算数,真矛盾要靠耳朵找。」 +t+ 316.9s 〰 震动:success(成功长震) +t+ 319.0s ▶ 语音:「教学完了。开始查案。」 +t+ 321.1s ♪ 向导音:explore(探索/安全) +t+ 321.1s 【状态】教学完了——「指证就是这样,真矛盾要靠耳朵找」 证词板上是「门卫老葛的证词」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) + +#### 【玩家动作】单击,听取门卫老葛的证词 + +t+ 326.1s ♪ 音效 sfx/sig_ge +t+ 326.6s ▶ 语音:「昨儿夜里雨大,我守着街门,一步没敢挪窝。」 +t+ 332.4s ▶ 语音:「九点五十,周账房出的街门,跟我说了声,回家。」 +t+ 338.6s ▶ 语音:「十点一刻,一位先生收着黑伞进了后巷。个儿高,微驼背。」 +t+ 345.7s ▶ 语音:「九点四十,雨点子刚砸下来,小顺打着伞出的街门。」 +t+ 352.1s ▶ 语音:「后半夜,温太太还来门房借过一回热水。」 +t+ 357.4s ▶ 语音:「听说店里账上短了银子,沈老板撂了话,月底清账。」 +t+ 363.8s 【状态】已听 1/6 份——门卫老葛的证词过完耳朵 证词板上是「门卫老葛的证词」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+ 363.8s ♪ 音效 sfx/paper_turn +t+ 363.8s ♪ 音效 sfx/sig_shun +t+ 364.3s ▶ 语音:「学徒小顺的证词。」 + +#### 【玩家动作】单击,听取学徒小顺的证词 + +t+ 365.4s ♪ 音效 sfx/sig_shun +t+ 365.9s ▶ 语音:「夜里,师父打发我去城南,给刘掌柜送匣子。」 +t+ 371.6s ▶ 语音:「师父的账,向来只信周先生一个人。」 +t+ 376.5s ▶ 语音:「库房钥匙?师父嫌沉,平日就挂在柴房墙上的铜钩。」 +t+ 382.9s ▶ 语音:「雨太大,刘掌柜留我住的,今早才回店。」 +t+ 388.3s ▶ 语音:「后门那闩,生人叫不开。熟人来了,师父才亲自去开。」 +t+ 394.9s ▶ 语音:「周先生常念叨,账房的活,越到夜里越清静。」 +t+ 400.7s 【状态】已听 2/6 份——学徒小顺的证词过完耳朵 证词板上是「学徒小顺的证词」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+ 400.7s ♪ 音效 sfx/paper_turn +t+ 400.7s ♪ 音效 sfx/sig_zhou +t+ 401.1s ▶ 语音:「账房周先生的证词。」 + +#### 【玩家动作】单击,听取账房周先生的证词 + +t+ 402.9s ♪ 音效 sfx/sig_zhou +t+ 403.4s ▶ 语音:「周先生,管了十年的账,见人三分笑。」 +t+ 405.5s ▶ 语音:「我七点进店上夜账。九点五十对完,锁了前门回家。」 +t+ 411.9s ▶ 语音:「临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。」 +t+ 418.6s ▶ 语音:「库房钥匙?沈老板贴身带着,从不离身。」 +t+ 423.9s ▶ 语音:「那伤,是松木劈柴砸的。铜秤?上个月卖给收废品的了。」 +t+ 430.8s ▶ 语音:「你们要是不信,去问我家婆娘。」 +t+ 435.2s ▶ 语音:「我到家倒头就睡,夜里的事,一概不知。」 +t+ 440.5s 【状态】已听 3/6 份——账房周先生的证词过完耳朵 证词板上是「账房周先生的证词」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+ 440.5s ♪ 音效 sfx/paper_turn +t+ 440.5s ♪ 音效 sfx/sig_wen +t+ 441.0s ▶ 语音:「房东温太太的证词。」 + +#### 【玩家动作】单击,听取房东温太太的证词 + +t+ 443.1s ♪ 音效 sfx/sig_wen +t+ 443.5s ▶ 语音:「雨是九点四十下的。我正收晾的衣裳,记得真真的。」 +t+ 450.0s ▶ 语音:「十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。」 +t+ 456.6s ▶ 语音:「刚回屋,柴房后墙咯噔一响,有人爬墙!花盆翻了一个。」 +t+ 463.5s ▶ 语音:「吓得我蒙头半宿没睡着,天亮才敢吱声。」 +t+ 468.8s ▶ 语音:「店里短银子的事,街坊都有耳闻。上礼拜他还摔了账本。」 +t+ 475.7s ▶ 语音:「周账房那人,见人三分笑,账算得比谁都精。」 +t+ 481.5s 【状态】已听 4/6 份——房东温太太的证词过完耳朵 证词板上是「房东温太太的证词」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+ 481.5s ♪ 音效 sfx/paper_turn +t+ 481.5s ♪ 音效 sfx/sig_scene +t+ 481.9s ▶ 语音:「现场勘验。」 + +#### 【玩家动作】单击,听取现场勘验 + +t+ 483.7s ♪ 音效 sfx/sig_scene +t+ 484.1s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 +t+ 487.1s ▶ 语音:「柴房门口,沈万川面朝下倒着。后脑一处伤,现场没有凶器。」 +t+ 490.0s ▶ 语音:「后门门闩完好,是死者自己开的门。生人叫不开这扇门。」 +t+ 492.9s ▶ 语音:「泥地上只有进来的脚印,没有出去的。墙根的花盆,翻了一个。」 +t+ 495.8s ▶ 语音:「库房铜秤立在架上,秤砣不见了。」 +t+ 498.7s ▶ 语音:「柴房墙上,挂钥匙的铜钩,空着。」 +t+ 501.7s 【状态】已听 5/6 份——现场勘验过完耳朵 证词板上是「现场勘验」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+ 501.7s ♪ 音效 sfx/paper_turn +t+ 501.7s ♪ 音效 sfx/sig_fore +t+ 502.1s ▶ 语音:「法医报告。」 + +#### 【玩家动作】单击,听取法医报告 + +t+ 503.8s ♪ 音效 sfx/sig_fore +t+ 504.3s ▶ 语音:「验尸报告,念给你听。」 +t+ 507.8s ▶ 语音:「死亡时间,昨夜十点到十点半。」 +t+ 512.2s ▶ 语音:「后脑单次钝器伤,一击毙命。创口嵌有铜屑,凶器是铜器。」 +t+ 519.3s ▶ 语音:「死者双手干净,没有搏斗痕迹。」 +t+ 523.8s ▶ 语音:「鞋底是干的。当夜,死者没出过后门。」 +t+ 528.9s 【状态】已听 6/6 份——法医报告过完耳朵 证词板上是「法医报告」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) + +#### 【玩家动作】上滑核对进度:六份都听完了,疑点还没坐实 + +t+ 528.9s ▶ 语音:「六份都听完了。」 +t+ 531.0s ▶ 语音:「疑点,还没有。」 +t+ 533.1s ▶ 语音:「接着查。」 +t+ 538.9s ♪ 向导音:nudge(看门狗轻提醒) +t+ 538.9s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+ 553.9s ♪ 向导音:nudge(看门狗轻提醒) +t+ 553.9s ♪ 向导音:watchdog(看门狗升级) + +#### 【玩家动作】周先生说「顺手熄了灯」——先定下这句 + +t+ 556.1s ♪ 向导音:choice(抉择/等待输入) +t+ 556.1s ♪ 向导音:turn(轮到你) +t+ 556.1s ▶ 语音:「指证矛盾。先选第一份证词。左右滑换,单击确认。」 +t+ 556.1s 〰 震动:confirm(轻点确认) +t+ 558.3s ♪ 音效 sfx/sig_fore +t+ 558.7s ▶ 语音:「法医报告。」 +t+ 571.1s ♪ 向导音:nudge(看门狗轻提醒) +t+ 571.1s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+ 571.1s ♪ 音效 sfx/sig_ge +t+ 571.6s ▶ 语音:「门卫老葛的证词。」 +t+ 571.6s ♪ 音效 sfx/sig_shun +t+ 572.0s ▶ 语音:「学徒小顺的证词。」 +t+ 572.0s ♪ 音效 sfx/sig_zhou +t+ 572.5s ▶ 语音:「账房周先生的证词。」 + +#### 【玩家动作】选定「账房周先生的证词」——单击确认 + +t+ 574.6s ▶ 语音:「左右滑,一句一句听。」 +t+ 576.7s ▶ 语音:「我七点进店上夜账。九点五十对完,锁了前门回家。」 +t+ 576.7s ▶ 语音:「临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 582.6s ▶ 语音:「临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。」 +t+ 588.4s ▶ 语音:「就这句?单击,定下来。」 +t+ 597.6s ♪ 向导音:nudge(看门狗轻提醒) +t+ 597.6s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 599.7s ▶ 语音:「再选与它矛盾的那份证词。」 +t+ 601.8s ▶ 语音:「临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。」 +t+ 614.7s ♪ 向导音:nudge(看门狗轻提醒) +t+ 614.7s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+ 629.7s ♪ 向导音:nudge(看门狗轻提醒) +t+ 629.7s ♪ 向导音:watchdog(看门狗升级) + +#### 【玩家动作】温太太说「十点二十灯还亮着」——对上了! + +t+ 629.7s ♪ 音效 sfx/sig_wen +t+ 630.2s ▶ 语音:「房东温太太的证词。」 + +#### 【玩家动作】选定「房东温太太的证词」——单击确认 + +t+ 632.3s ▶ 语音:「雨是九点四十下的。我正收晾的衣裳,记得真真的。」 +t+ 637.9s ▶ 语音:「十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 640.3s ▶ 语音:「十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。」 +t+ 646.1s ▶ 语音:「就这句?单击,定下来。」 +t+ 655.3s ♪ 向导音:nudge(看门狗轻提醒) +t+ 655.3s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 657.4s ♪ 音效 sfx/contra_hit +t+ 657.4s ▶ 语音:「对不上!矛盾成立,记入疑点。」 +t+ 657.4s 〰 震动:success(成功长震) +t+ 659.5s ▶ 语音:「灯?……许是我记岔了。人上了岁数,记性不济。」 +t+ 664.9s ♪ 向导音:explore(探索/安全) +t+ 664.9s 【状态】疑点 1/4 坐实——真凶的反应一次比一次慌 证词板上是「法医报告」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) + +#### 【玩家动作】周先生说「钥匙贴身带着」 + +t+ 664.9s ♪ 向导音:choice(抉择/等待输入) +t+ 664.9s ♪ 向导音:turn(轮到你) +t+ 664.9s ▶ 语音:「指证矛盾。先选第一份证词。左右滑换,单击确认。」 +t+ 664.9s 〰 震动:confirm(轻点确认) +t+ 667.0s ♪ 音效 sfx/sig_fore +t+ 667.5s ▶ 语音:「法医报告。」 +t+ 679.9s ♪ 向导音:nudge(看门狗轻提醒) +t+ 679.9s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+ 679.9s ♪ 音效 sfx/sig_ge +t+ 680.4s ▶ 语音:「门卫老葛的证词。」 +t+ 680.4s ♪ 音效 sfx/sig_shun +t+ 680.8s ▶ 语音:「学徒小顺的证词。」 +t+ 680.8s ♪ 音效 sfx/sig_zhou +t+ 681.3s ▶ 语音:「账房周先生的证词。」 + +#### 【玩家动作】选定「账房周先生的证词」——单击确认 + +t+ 683.4s ▶ 语音:「左右滑,一句一句听。」 +t+ 685.5s ▶ 语音:「我七点进店上夜账。九点五十对完,锁了前门回家。」 +t+ 685.5s ▶ 语音:「临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。」 +t+ 691.4s ▶ 语音:「库房钥匙?沈老板贴身带着,从不离身。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 693.5s ▶ 语音:「库房钥匙?沈老板贴身带着,从不离身。」 +t+ 698.0s ▶ 语音:「就这句?单击,定下来。」 +t+ 708.5s ♪ 向导音:nudge(看门狗轻提醒) +t+ 708.5s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 710.6s ▶ 语音:「再选与它矛盾的那份证词。」 +t+ 712.8s ▶ 语音:「库房钥匙?沈老板贴身带着,从不离身。」 +t+ 725.6s ♪ 向导音:nudge(看门狗轻提醒) +t+ 725.6s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+ 740.6s ♪ 向导音:nudge(看门狗轻提醒) +t+ 740.6s ♪ 向导音:watchdog(看门狗升级) + +#### 【玩家动作】小顺说「钥匙平日挂柴房铜钩」——对不上! + +t+ 740.6s ♪ 音效 sfx/sig_shun +t+ 741.1s ▶ 语音:「学徒小顺的证词。」 + +#### 【玩家动作】选定「学徒小顺的证词」——单击确认 + +t+ 743.2s ▶ 语音:「夜里,师父打发我去城南,给刘掌柜送匣子。」 +t+ 748.2s ▶ 语音:「师父的账,向来只信周先生一个人。」 +t+ 751.2s ▶ 语音:「库房钥匙?师父嫌沉,平日就挂在柴房墙上的铜钩。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 756.2s ▶ 语音:「库房钥匙?师父嫌沉,平日就挂在柴房墙上的铜钩。」 +t+ 761.8s ▶ 语音:「就这句?单击,定下来。」 +t+ 771.2s ♪ 向导音:nudge(看门狗轻提醒) +t+ 771.2s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 773.3s ♪ 音效 sfx/contra_hit +t+ 773.3s ▶ 语音:「对不上!矛盾成立,记入疑点。」 +t+ 773.3s 〰 震动:success(成功长震) +t+ 775.4s ▶ 语音:「钥匙的事……他、他有时候,也贴身带着的……」 +t+ 780.6s ♪ 向导音:explore(探索/安全) +t+ 780.6s 【状态】疑点 2/4 坐实——真凶的反应一次比一次慌 证词板上是「法医报告」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) + +#### 【玩家动作】周先生说「伤是松木劈柴砸的」 + +t+ 780.6s ♪ 向导音:choice(抉择/等待输入) +t+ 780.6s ♪ 向导音:turn(轮到你) +t+ 780.6s ▶ 语音:「指证矛盾。先选第一份证词。左右滑换,单击确认。」 +t+ 780.6s 〰 震动:confirm(轻点确认) +t+ 782.7s ♪ 音效 sfx/sig_fore +t+ 783.2s ▶ 语音:「法医报告。」 +t+ 795.6s ♪ 向导音:nudge(看门狗轻提醒) +t+ 795.6s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+ 795.6s ♪ 音效 sfx/sig_ge +t+ 796.0s ▶ 语音:「门卫老葛的证词。」 +t+ 796.0s ♪ 音效 sfx/sig_shun +t+ 796.5s ▶ 语音:「学徒小顺的证词。」 +t+ 796.5s ♪ 音效 sfx/sig_zhou +t+ 796.9s ▶ 语音:「账房周先生的证词。」 + +#### 【玩家动作】选定「账房周先生的证词」——单击确认 + +t+ 799.1s ▶ 语音:「左右滑,一句一句听。」 +t+ 801.2s ▶ 语音:「我七点进店上夜账。九点五十对完,锁了前门回家。」 +t+ 801.2s ▶ 语音:「临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。」 +t+ 807.0s ▶ 语音:「库房钥匙?沈老板贴身带着,从不离身。」 +t+ 809.2s ▶ 语音:「那伤,是松木劈柴砸的。铜秤?上个月卖给收废品的了。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 815.0s ▶ 语音:「那伤,是松木劈柴砸的。铜秤?上个月卖给收废品的了。」 +t+ 821.1s ▶ 语音:「就这句?单击,定下来。」 +t+ 830.0s ♪ 向导音:nudge(看门狗轻提醒) +t+ 830.0s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 832.2s ▶ 语音:「再选与它矛盾的那份证词。」 +t+ 834.3s ▶ 语音:「那伤,是松木劈柴砸的。铜秤?上个月卖给收废品的了。」 +t+ 847.2s ♪ 向导音:nudge(看门狗轻提醒) +t+ 847.2s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+ 862.2s ♪ 向导音:nudge(看门狗轻提醒) +t+ 862.2s ♪ 向导音:watchdog(看门狗升级) + +#### 【玩家动作】法医说「创口嵌有铜屑,凶器是铜器」——对不上! + +t+ 862.2s ♪ 音效 sfx/sig_wen +t+ 862.6s ▶ 语音:「房东温太太的证词。」 +t+ 862.6s ♪ 音效 sfx/sig_scene +t+ 863.1s ▶ 语音:「现场勘验。」 +t+ 863.1s ♪ 音效 sfx/sig_fore +t+ 863.5s ▶ 语音:「法医报告。」 + +#### 【玩家动作】选定「法医报告」——单击确认 + +t+ 865.6s ▶ 语音:「验尸报告,念给你听。」 +t+ 868.4s ▶ 语音:「死亡时间,昨夜十点到十点半。」 +t+ 872.0s ▶ 语音:「后脑单次钝器伤,一击毙命。创口嵌有铜屑,凶器是铜器。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 873.6s ▶ 语音:「后脑单次钝器伤,一击毙命。创口嵌有铜屑,凶器是铜器。」 +t+ 879.9s ▶ 语音:「就这句?单击,定下来。」 +t+ 888.6s ♪ 向导音:nudge(看门狗轻提醒) +t+ 888.6s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 890.8s ♪ 音效 sfx/contra_hit +t+ 890.8s ▶ 语音:「对不上!矛盾成立,记入疑点。」 +t+ 890.8s 〰 震动:success(成功长震) +t+ 892.9s ▶ 语音:「秤!秤的事,你们别再问了……」 +t+ 896.5s ♪ 向导音:explore(探索/安全) +t+ 896.5s 【状态】疑点 3/4 坐实——真凶的反应一次比一次慌 证词板上是「法医报告」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) + +#### 【玩家动作】还是周先生那句「铜秤卖给收废品的了」 + +t+ 896.5s ♪ 向导音:choice(抉择/等待输入) +t+ 896.5s ♪ 向导音:turn(轮到你) +t+ 896.5s ▶ 语音:「指证矛盾。先选第一份证词。左右滑换,单击确认。」 +t+ 896.5s 〰 震动:confirm(轻点确认) +t+ 898.6s ♪ 音效 sfx/sig_fore +t+ 899.1s ▶ 语音:「法医报告。」 +t+ 911.5s ♪ 向导音:nudge(看门狗轻提醒) +t+ 911.5s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+ 911.5s ♪ 音效 sfx/sig_ge +t+ 912.0s ▶ 语音:「门卫老葛的证词。」 +t+ 912.0s ♪ 音效 sfx/sig_shun +t+ 912.4s ▶ 语音:「学徒小顺的证词。」 +t+ 912.4s ♪ 音效 sfx/sig_zhou +t+ 912.9s ▶ 语音:「账房周先生的证词。」 + +#### 【玩家动作】选定「账房周先生的证词」——单击确认 + +t+ 915.0s ▶ 语音:「左右滑,一句一句听。」 +t+ 917.1s ▶ 语音:「我七点进店上夜账。九点五十对完,锁了前门回家。」 +t+ 917.1s ▶ 语音:「临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。」 +t+ 922.9s ▶ 语音:「库房钥匙?沈老板贴身带着,从不离身。」 +t+ 925.1s ▶ 语音:「那伤,是松木劈柴砸的。铜秤?上个月卖给收废品的了。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 930.9s ▶ 语音:「那伤,是松木劈柴砸的。铜秤?上个月卖给收废品的了。」 +t+ 937.0s ▶ 语音:「就这句?单击,定下来。」 +t+ 945.9s ♪ 向导音:nudge(看门狗轻提醒) +t+ 945.9s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 948.1s ▶ 语音:「再选与它矛盾的那份证词。」 +t+ 950.2s ▶ 语音:「那伤,是松木劈柴砸的。铜秤?上个月卖给收废品的了。」 +t+ 963.1s ♪ 向导音:nudge(看门狗轻提醒) +t+ 963.1s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+ 978.1s ♪ 向导音:nudge(看门狗轻提醒) +t+ 978.1s ♪ 向导音:watchdog(看门狗升级) + +#### 【玩家动作】现场勘验说「铜秤立在架上」——对不上! + +t+ 978.1s ♪ 音效 sfx/sig_wen +t+ 978.5s ▶ 语音:「房东温太太的证词。」 +t+ 978.5s ♪ 音效 sfx/sig_scene +t+ 979.0s ▶ 语音:「现场勘验。」 + +#### 【玩家动作】选定「现场勘验」——单击确认 + +t+ 981.1s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 +t+ 983.2s ▶ 语音:「柴房墙上,挂钥匙的铜钩,空着。」 +t+ 985.3s ▶ 语音:「库房铜秤立在架上,秤砣不见了。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 987.4s ▶ 语音:「库房铜秤立在架上,秤砣不见了。」 +t+ 989.6s ▶ 语音:「就这句?单击,定下来。」 +t+1002.4s ♪ 向导音:nudge(看门狗轻提醒) +t+1002.4s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+1004.6s ♪ 音效 sfx/contra_hit +t+1004.6s ▶ 语音:「对不上!矛盾成立,记入疑点。」 +t+1004.6s 〰 震动:success(成功长震) +t+1006.7s ▶ 语音:「……随你们怎么问。我要回去了。」 +t+1010.5s ▶ 语音:「疑点齐了。去结案陈词。」 +t+1012.7s ♪ 向导音:explore(探索/安全) +t+1017.7s 【状态】疑点 4/4 坐实——真凶的反应一次比一次慌 证词板上是「法医报告」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+1017.7s 【状态】四处疑点齐了——「疑点齐了,去结案陈词」 证词板上是「法医报告」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+1017.7s ♪ 音效 sfx/paper_turn +t+1017.7s ♪ 向导音:turn(轮到你) +t+1018.1s ▶ 语音:「结案陈词。」 + +#### 【玩家动作】翻到结案陈词——单击,进入结案三问 + +t+1020.2s ♪ 向导音:choice(抉择/等待输入) +t+1020.2s ♪ 向导音:turn(轮到你) +t+1020.2s ▶ 语音:「结案陈词。先指认真凶:四位证人,选一个。」 +t+1020.2s 〰 震动:confirm(轻点确认) +t+1022.3s ▶ 语音:「门卫老葛的证词。」 + +#### 【玩家动作】先怀疑小顺——右滑选他,单击 + +t+1022.3s ▶ 语音:「学徒小顺的证词。」 +t+1024.5s ▶ 语音:「学徒小顺的证词。」 +t+1026.6s ▶ 语音:「就指认他?单击,定下来。」 +t+1044.5s ♪ 向导音:nudge(看门狗轻提醒) +t+1044.5s ▶ 向导语音:「在想?左右滑选,单击定。」 + +#### 【玩家动作】单击,定下来 + +t+1044.5s ▶ 语音:「我宿在城南刘掌柜家,他全家都能作证!」 +t+1049.0s ▶ 语音:「不在场证明成立。证据放人,回到证词板。」 +t+1051.1s ♪ 向导音:explore(探索/安全) +t+1051.1s 【状态】错怪了——小顺宿在城南刘掌柜家,不在场证明成立,回到证词板(无限再机会) 证词板上是「结案陈词」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) + +#### 【玩家动作】翻到结案陈词——单击,进入结案三问 + +t+1056.1s ♪ 向导音:choice(抉择/等待输入) +t+1056.1s ♪ 向导音:turn(轮到你) +t+1056.1s ▶ 语音:「结案陈词。先指认真凶:四位证人,选一个。」 +t+1056.1s 〰 震动:confirm(轻点确认) +t+1058.2s ▶ 语音:「门卫老葛的证词。」 + +#### 【玩家动作】证据都指向周先生——右滑两下选他 + +t+1058.2s ▶ 语音:「学徒小顺的证词。」 +t+1058.2s ▶ 语音:「账房周先生的证词。」 +t+1060.3s ▶ 语音:「账房周先生的证词。」 +t+1062.5s ▶ 语音:「就指认他?单击,定下来。」 +t+1080.3s ♪ 向导音:nudge(看门狗轻提醒) +t+1080.3s ▶ 向导语音:「在想?左右滑选,单击定。」 + +#### 【玩家动作】单击,正式指认 + +t+1080.3s ♪ 向导音:turn(轮到你) +t+1080.3s ▶ 语音:「第二问:凶器是什么?」 +t+1080.3s 〰 震动:confirm(轻点确认) +t+1082.5s ▶ 语音:「铁门闩。」 +t+1084.6s 【状态】第二问:凶器是什么?四个选项一个个听 结案三问——第二问:凶器是什么(左右滑选,单击定)(BGM=bgm/board,语速1) +t+1084.6s ▶ 语音:「铜秤砣。」 + +#### 【玩家动作】铜屑不答应别的答案——选「铜秤砣」,单击 + +t+1086.7s ▶ 语音:「对。创口的铜屑,不见了的秤砣,都指向它。」 +t+1088.8s ♪ 向导音:turn(轮到你) +t+1088.8s ▶ 语音:「第三问:动机是什么?」 +t+1088.8s 〰 震动:confirm(轻点确认) +t+1090.9s ▶ 语音:「劫财入户。」 +t+1090.9s 【状态】第三问:动机是什么? 结案三问——第三问:动机是什么(左右滑选,单击定)(语音播放中,语速1) +t+1090.9s ▶ 语音:「寻仇泄愤。」 +t+1093.1s ▶ 语音:「监守自盗。」 + +#### 【玩家动作】账上短的东西才是引线——选「监守自盗」,单击 + +t+1094.7s ▶ 语音:「对。库里短的东西,就是引线。」 +t+1096.8s ♫ BGM 切换 → bgm/verdict(淡入 800ms) +t+1096.8s ♪ 向导音:settle(结算) +t+1096.8s ▶ 语音:「证据链闭合。周先生,你还有什么话说?」 +t+1096.8s 〰 震动:success(成功长震) +t+1097.7s 【状态】证据链闭合——周先生认罪三段,雨声渐强又落下,法槌落定 裁决链播报中:认罪三段与法槌,手势全部被吞(链锁)(语音播放中,语速1) +t+1098.9s ♪ 音效 sfx/rain_swell +t+1098.9s ▶ 语音:「别念了……我说。库房短的三件货,是我抵了赌债。」 +t+1104.6s ▶ 语音:「他说月底清账,要报官。我求他,他不肯。」 +t+1109.3s ▶ 语音:「我只想把钥匙放回去,把被盗做真。抡起秤砣的时候,他认出了我。」 +t+1116.5s ♪ 音效 sfx/gavel +t+1116.5s ♫ BGM 切换 → bgm/menu +t+1116.5s ▶ 语音:「案件归档。雨,停了。」 +t+1118.6s ▶ 语音:「干净利落的结案。」 +t+1120.7s ▶ 语音:「疑点,四处,齐了。」 +t+1122.9s ▶ 语音:「指证,一次没错。」 +t+1125.0s ▶ 语音:「同一场雨里,还有别的案子。单击,接新案。」 +t+1127.1s ♪ 向导音:menu(系统界面) +t+1127.1s 【状态】案件归档,雨停了——评级 A:疑点 4/4,错指 1 次 结算:评级与账目播完,单击接新案(pack 翻转)(BGM=bgm/menu,语速1) + +#### 【玩家动作】单击——接新案(同一场雨里,还有别的案子) + +t+1127.1s ▶ 语音:「新案开卷。」 +t+1129.2s ♫ BGM 切换 → bgm/board +t+1129.2s ♪ 向导音:explore(探索/安全) +t+1129.2s 【状态】新案开卷:pack 翻转——这回的真凶换了人 证词板上是「门卫老葛的证词」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) + +#### 【玩家动作】小顺说「我走的时候熄了灯」——变体案的第一句谎 + +t+1129.2s ♪ 向导音:choice(抉择/等待输入) +t+1129.2s ♪ 向导音:turn(轮到你) +t+1129.2s ▶ 语音:「指证矛盾。先选第一份证词。左右滑换,单击确认。」 +t+1129.2s 〰 震动:confirm(轻点确认) +t+1131.3s ♪ 音效 sfx/sig_ge +t+1131.8s ▶ 语音:「门卫老葛的证词。」 +t+1144.2s ♪ 向导音:nudge(看门狗轻提醒) +t+1144.2s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+1144.2s ♪ 音效 sfx/sig_shun +t+1144.7s ▶ 语音:「学徒小顺的证词。」 + +#### 【玩家动作】选定「学徒小顺的证词」——单击确认 + +t+1146.8s ▶ 语音:「左右滑,一句一句听。」 +t+1148.9s ▶ 语音:「夜里,师父打发我去城南,给刘掌柜送匣子。」 +t+1148.9s ▶ 语音:「库房的货,我一件都没碰过。」 +t+1152.3s ▶ 语音:「我走的时候,顺手熄了店堂的灯。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+1154.8s ▶ 语音:「我走的时候,顺手熄了店堂的灯。」 +t+1158.7s ▶ 语音:「就这句?单击,定下来。」 +t+1169.8s ♪ 向导音:nudge(看门狗轻提醒) +t+1169.8s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+1171.9s ▶ 语音:「再选与它矛盾的那份证词。」 +t+1174.0s ▶ 语音:「我走的时候,顺手熄了店堂的灯。」 +t+1186.9s ♪ 向导音:nudge(看门狗轻提醒) +t+1186.9s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+1201.9s ♪ 向导音:nudge(看门狗轻提醒) +t+1201.9s ♪ 向导音:watchdog(看门狗升级) + +#### 【玩家动作】温太太还是那句话「灯还亮着」——对上了! + +t+1201.9s ♪ 音效 sfx/sig_zhou +t+1202.4s ▶ 语音:「账房周先生的证词。」 +t+1202.4s ♪ 音效 sfx/sig_wen +t+1202.8s ▶ 语音:「房东温太太的证词。」 + +#### 【玩家动作】选定「房东温太太的证词」——单击确认 + +t+1204.9s ▶ 语音:「雨是九点四十下的。我正收晾的衣裳,记得真真的。」 +t+1210.6s ▶ 语音:「十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+1212.9s ▶ 语音:「十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。」 +t+1218.8s ▶ 语音:「就这句?单击,定下来。」 +t+1227.9s ♪ 向导音:nudge(看门狗轻提醒) +t+1227.9s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+1230.1s ♪ 音效 sfx/contra_hit +t+1230.1s ▶ 语音:「对不上!矛盾成立,记入疑点。」 +t+1230.1s 〰 震动:success(成功长震) +t+1232.2s ▶ 语音:「灯?我、我走的时候明明熄了……」 +t+1236.0s ♪ 向导音:explore(探索/安全) +t+1236.0s 【状态】变体案疑点 1/4——真凶另有其人,收工 证词板上是「门卫老葛的证词」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) diff --git a/research/new8/detective/round1/transcript-stress.md b/research/new8/detective/round1/transcript-stress.md new file mode 100644 index 00000000..051ee839 --- /dev/null +++ b/research/new8/detective/round1/transcript-stress.md @@ -0,0 +1,707 @@ +# 试玩转写:《detective》 + +> 本文件是「玩家感知日志」:一位新手玩家的整局体验转写。语音列出了玩家听到的每句话全文, +> 音效/BGM/震动按发生时间列出。「静默」段 = 玩家什么也听不到。手势是剧本注入的(模拟真人手部动作), +> 非最优操作:包含犹豫、误操作与乱试。语音时长按语速估算(±20%),仅供节奏参考。 +t+ 0.0s (玩家点开游戏,轻触屏幕开始) +t+ 0.0s ♫ BGM 切换 → bgm/menu +t+ 0.0s ♪ 向导音:menu(系统界面) +t+ 0.0s 【状态】标题页乱划一气 标题页:单击开始查案,上滑听案情简介(BGM=bgm/menu,语速1) +t+ 0.0s ▶ 向导语音:「这个操作,这里用不上。」 +t+ 0.0s 〰 震动:error(做错了:两连短震) +t+ 2.1s 【状态】标题页乱划一气 标题页:单击开始查案,上滑听案情简介(BGM=bgm/menu,语速1) +t+ 2.1s 【状态】标题页乱划一气 标题页:单击开始查案,上滑听案情简介(BGM=bgm/menu,语速1) +t+ 2.1s 〰 震动:error(做错了:两连短震) +t+ 2.1s 【状态】标题页乱划一气 标题页:单击开始查案,上滑听案情简介(BGM=bgm/menu,语速1) +t+ 2.1s 【状态】标题页乱划一气 标题页:单击开始查案,上滑听案情简介(BGM=bgm/menu,语速1) +t+ 2.1s 【状态】标题页乱划一气 标题页:单击开始查案,上滑听案情简介(BGM=bgm/menu,语速1) +t+ 2.1s 【状态】标题页乱划一气 标题页:单击开始查案,上滑听案情简介(BGM=bgm/menu,语速1) +t+ 2.1s 【状态】标题页乱划一气 标题页:单击开始查案,上滑听案情简介(BGM=bgm/menu,语速1) +t+ 2.1s ▶ 语音:「新案开卷。」 +t+ 4.2s ♫ BGM 切换 → bgm/board +t+ 4.2s ♪ 向导音:explore(探索/安全) +t+ 4.2s ▶ 语音:「雨下了一整夜。清晨,聚宝斋后院,古董商沈万川死了。」 +t+ 4.2s 〰 震动:error(做错了:两连短震) + +#### 【玩家动作】下滑,跳过教学 + +t+ 5.1s ▶ 语音:「已跳过教学。左右滑换卷宗,单击听取。」 +t+ 7.2s ♪ 向导音:explore(探索/安全) +t+ 7.2s 【状态】总算从教学里滚出来了(可能一路错过来的) 证词板上是「门卫老葛的证词」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+ 7.2s ♪ 音效 sfx/sig_ge +t+ 12.2s ♪ 音效 sfx/paper_turn +t+ 12.2s ♪ 音效 sfx/sig_shun +t+ 12.7s ▶ 语音:「学徒小顺的证词。」 +t+ 14.8s ♪ 音效 sfx/paper_turn +t+ 14.8s ♪ 音效 sfx/sig_ge +t+ 15.2s ▶ 语音:「门卫老葛的证词。」 +t+ 17.2s ▶ 语音:「昨儿夜里雨大,我守着街门,一步没敢挪窝。」 +t+ 22.2s ♪ 音效 sfx/paper_turn +t+ 22.2s ♪ 向导音:turn(轮到你) +t+ 22.6s ▶ 语音:「结案陈词。」 +t+ 24.8s ♪ 音效 sfx/paper_turn +t+ 24.8s ♪ 音效 sfx/sig_fore +t+ 25.2s ▶ 语音:「法医报告。」 +t+ 32.2s ♪ 音效 sfx/sig_fore +t+ 37.2s ♪ 音效 sfx/paper_turn +t+ 37.2s ♪ 向导音:turn(轮到你) +t+ 37.7s ▶ 语音:「结案陈词。」 +t+ 39.8s ♪ 音效 sfx/paper_turn +t+ 39.8s ♪ 音效 sfx/sig_fore +t+ 40.2s ▶ 语音:「法医报告。」 +t+ 42.2s ▶ 语音:「验尸报告,念给你听。」 +t+ 45.0s ♪ 音效 sfx/paper_turn +t+ 45.0s ♪ 音效 sfx/sig_scene +t+ 45.4s ▶ 语音:「现场勘验。」 +t+ 47.2s ♪ 音效 sfx/paper_turn +t+ 47.2s ♪ 音效 sfx/sig_fore +t+ 47.7s ▶ 语音:「法医报告。」 +t+ 52.2s ♪ 音效 sfx/turn_tick +t+ 52.2s ♪ 音效 sfx/sig_fore +t+ 57.2s ♪ 音效 sfx/paper_turn +t+ 57.2s ♪ 向导音:turn(轮到你) +t+ 57.7s ▶ 语音:「结案陈词。」 +t+ 59.8s ♪ 音效 sfx/paper_turn +t+ 59.8s ♪ 音效 sfx/sig_fore +t+ 60.2s ▶ 语音:「法医报告。」 +t+ 62.2s ▶ 语音:「验尸报告,念给你听。」 +t+ 65.0s ♪ 音效 sfx/paper_turn +t+ 65.0s ♪ 音效 sfx/sig_scene + +#### 【玩家动作】手痒开菜单乱逛——只敢下滑关掉 + +t+ 65.0s ♫ BGM 切换 → bgm/menu +t+ 65.0s ♪ 向导音:menu(系统界面) +t+ 65.0s ▶ 语音:「菜单。单击切换,双击确认。」 +t+ 67.1s ▶ 语音:「回到证词板。」 +t+ 67.1s ♫ BGM 切换 → bgm/board +t+ 67.1s ♪ 向导音:explore(探索/安全) +t+ 67.9s ♪ 音效 sfx/paper_turn +t+ 67.9s ♪ 音效 sfx/sig_wen +t+ 68.4s ▶ 语音:「房东温太太的证词。」 +t+ 70.5s ♪ 音效 sfx/paper_turn +t+ 70.5s ♪ 音效 sfx/sig_scene +t+ 71.0s ▶ 语音:「现场勘验。」 +t+ 75.1s ♪ 音效 sfx/sig_scene +t+ 77.1s ♪ 音效 sfx/paper_turn +t+ 77.1s ♪ 音效 sfx/sig_fore +t+ 77.5s ▶ 语音:「法医报告。」 +t+ 79.7s ♪ 音效 sfx/paper_turn +t+ 79.7s ♪ 音效 sfx/sig_scene +t+ 80.1s ▶ 语音:「现场勘验。」 +t+ 82.1s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 +t+ 84.2s ♪ 音效 sfx/paper_turn +t+ 84.2s ♪ 音效 sfx/sig_wen +t+ 84.7s ▶ 语音:「房东温太太的证词。」 +t+ 86.8s ♪ 音效 sfx/paper_turn +t+ 86.8s ♪ 音效 sfx/sig_scene +t+ 87.2s ▶ 语音:「现场勘验。」 +t+ 92.1s ♪ 音效 sfx/sig_scene +t+ 97.1s ♪ 音效 sfx/paper_turn +t+ 97.1s ♪ 音效 sfx/sig_fore +t+ 97.5s ▶ 语音:「法医报告。」 +t+ 99.7s ♪ 音效 sfx/paper_turn +t+ 99.7s ♪ 音效 sfx/sig_scene +t+ 100.1s ▶ 语音:「现场勘验。」 +t+ 102.1s ▶ 语音:「探长,还没听的卷宗,先过一遍耳朵。」 +t+ 102.1s 〰 震动:warning(警告三连震) +t+ 102.1s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 +t+ 104.2s ♪ 音效 sfx/paper_turn +t+ 104.2s ♪ 音效 sfx/sig_wen +t+ 104.7s ▶ 语音:「房东温太太的证词。」 +t+ 106.8s ♪ 音效 sfx/paper_turn +t+ 106.8s ♪ 音效 sfx/sig_scene +t+ 107.2s ▶ 语音:「现场勘验。」 +t+ 112.1s ♪ 音效 sfx/sig_scene +t+ 117.1s ♪ 音效 sfx/paper_turn +t+ 117.1s ♪ 音效 sfx/sig_fore +t+ 117.5s ▶ 语音:「法医报告。」 +t+ 119.7s ♪ 音效 sfx/paper_turn +t+ 119.7s ♪ 音效 sfx/sig_scene +t+ 120.1s ▶ 语音:「现场勘验。」 +t+ 122.1s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 +t+ 124.2s ♪ 音效 sfx/paper_turn +t+ 124.2s ♪ 音效 sfx/sig_wen +t+ 124.7s ▶ 语音:「房东温太太的证词。」 +t+ 126.8s ♪ 音效 sfx/paper_turn +t+ 126.8s ♪ 音效 sfx/sig_scene +t+ 127.2s ▶ 语音:「现场勘验。」 +t+ 132.1s ♪ 音效 sfx/sig_scene + +#### 【玩家动作】手痒开菜单乱逛——只敢下滑关掉 + +t+ 132.1s ♫ BGM 切换 → bgm/menu +t+ 132.1s ♪ 向导音:menu(系统界面) +t+ 132.1s ▶ 语音:「菜单。单击切换,双击确认。」 +t+ 134.2s ▶ 语音:「回到证词板。」 +t+ 134.2s ♫ BGM 切换 → bgm/board +t+ 134.2s ♪ 向导音:explore(探索/安全) +t+ 135.1s ♪ 音效 sfx/sig_scene +t+ 139.2s ♪ 音效 sfx/paper_turn +t+ 139.2s ♪ 音效 sfx/sig_fore +t+ 139.7s ▶ 语音:「法医报告。」 +t+ 141.8s ♪ 音效 sfx/paper_turn +t+ 141.8s ♪ 音效 sfx/sig_scene +t+ 142.2s ▶ 语音:「现场勘验。」 +t+ 144.2s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 +t+ 146.3s ♪ 音效 sfx/paper_turn +t+ 146.3s ♪ 音效 sfx/sig_wen +t+ 146.8s ▶ 语音:「房东温太太的证词。」 +t+ 148.9s ♪ 音效 sfx/paper_turn +t+ 148.9s ♪ 音效 sfx/sig_scene +t+ 149.3s ▶ 语音:「现场勘验。」 +t+ 154.2s ♪ 音效 sfx/sig_scene +t+ 159.2s ♪ 音效 sfx/paper_turn +t+ 159.2s ♪ 音效 sfx/sig_fore +t+ 159.7s ▶ 语音:「法医报告。」 +t+ 161.8s ♪ 音效 sfx/paper_turn +t+ 161.8s ♪ 音效 sfx/sig_scene +t+ 162.2s ▶ 语音:「现场勘验。」 +t+ 164.2s ▶ 语音:「试试指证:周先生说熄了灯,温太太说灯还亮着。」 +t+ 164.2s 〰 震动:warning(警告三连震) +t+ 164.2s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 + +#### 【玩家动作】手痒开菜单乱逛——只敢下滑关掉 + +t+ 164.2s ♫ BGM 切换 → bgm/menu +t+ 164.2s ♪ 向导音:menu(系统界面) +t+ 164.2s ▶ 语音:「菜单。单击切换,双击确认。」 +t+ 166.3s ▶ 语音:「回到证词板。」 +t+ 166.3s ♫ BGM 切换 → bgm/board +t+ 166.3s ♪ 向导音:explore(探索/安全) +t+ 167.2s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 +t+ 169.3s ♪ 音效 sfx/paper_turn +t+ 169.3s ♪ 音效 sfx/sig_wen +t+ 169.8s ▶ 语音:「房东温太太的证词。」 +t+ 171.3s ♪ 音效 sfx/paper_turn +t+ 171.3s ♪ 音效 sfx/sig_scene + +#### 【玩家动作】手痒开菜单乱逛——只敢下滑关掉 + +t+ 171.3s ♫ BGM 切换 → bgm/menu +t+ 171.3s ♪ 向导音:menu(系统界面) +t+ 171.3s ▶ 语音:「菜单。单击切换,双击确认。」 +t+ 173.4s ▶ 语音:「回到证词板。」 +t+ 173.4s ♫ BGM 切换 → bgm/board +t+ 173.4s ♪ 向导音:explore(探索/安全) +t+ 174.3s ♪ 音效 sfx/paper_turn +t+ 174.3s ♪ 音效 sfx/sig_fore +t+ 174.8s ▶ 语音:「法医报告。」 +t+ 178.4s ♪ 音效 sfx/sig_fore +t+ 181.4s ♪ 音效 sfx/paper_turn +t+ 181.4s ♪ 向导音:turn(轮到你) +t+ 181.9s ▶ 语音:「结案陈词。」 +t+ 183.4s ♪ 音效 sfx/paper_turn +t+ 183.4s ♪ 音效 sfx/sig_fore +t+ 183.9s ▶ 语音:「法医报告。」 +t+ 186.0s ▶ 语音:「验尸报告,念给你听。」 + +#### 【玩家动作】手痒开菜单乱逛——只敢下滑关掉 + +t+ 186.0s ♫ BGM 切换 → bgm/menu +t+ 186.0s ♪ 向导音:menu(系统界面) +t+ 186.0s ▶ 语音:「菜单。单击切换,双击确认。」 +t+ 188.1s ▶ 语音:「回到证词板。」 +t+ 188.1s ♫ BGM 切换 → bgm/board +t+ 188.1s ♪ 向导音:explore(探索/安全) +t+ 189.0s ▶ 语音:「验尸报告,念给你听。」 +t+ 191.7s ♪ 音效 sfx/paper_turn +t+ 191.7s ♪ 音效 sfx/sig_scene +t+ 192.2s ▶ 语音:「现场勘验。」 +t+ 193.1s 【状态】乱按也被抢救:听到了保底提示直接给出可指证的矛盾对 证词板上是「现场勘验」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(语音播放中,语速1) + +#### 【玩家动作】照着提示指证:z_2 这句 + +t+ 196.1s ♪ 向导音:choice(抉择/等待输入) +t+ 196.1s ♪ 向导音:turn(轮到你) +t+ 196.1s ▶ 语音:「指证矛盾。先选第一份证词。左右滑换,单击确认。」 +t+ 196.1s 〰 震动:confirm(轻点确认) +t+ 198.3s ♪ 音效 sfx/sig_scene +t+ 198.7s ▶ 语音:「现场勘验。」 +t+ 211.1s ♪ 向导音:nudge(看门狗轻提醒) +t+ 211.1s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+ 211.1s ♪ 音效 sfx/sig_wen +t+ 211.6s ▶ 语音:「房东温太太的证词。」 +t+ 211.6s ♪ 音效 sfx/sig_zhou +t+ 212.0s ▶ 语音:「账房周先生的证词。」 + +#### 【玩家动作】选定「账房周先生的证词」——单击确认 + +t+ 214.2s ▶ 语音:「左右滑,一句一句听。」 +t+ 216.3s ▶ 语音:「我七点进店上夜账。九点五十对完,锁了前门回家。」 +t+ 216.3s ▶ 语音:「临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 222.1s ▶ 语音:「临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。」 +t+ 228.0s ▶ 语音:「就这句?单击,定下来。」 +t+ 237.1s ♪ 向导音:nudge(看门狗轻提醒) +t+ 237.1s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 239.2s ▶ 语音:「再选与它矛盾的那份证词。」 +t+ 241.4s ▶ 语音:「临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。」 +t+ 254.2s ♪ 向导音:nudge(看门狗轻提醒) +t+ 254.2s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+ 269.2s ♪ 向导音:nudge(看门狗轻提醒) +t+ 269.2s ♪ 向导音:watchdog(看门狗升级) + +#### 【玩家动作】对上 wen_2 这句 + +t+ 269.2s ♪ 音效 sfx/sig_wen +t+ 269.7s ▶ 语音:「房东温太太的证词。」 + +#### 【玩家动作】选定「房东温太太的证词」——单击确认 + +t+ 271.8s ▶ 语音:「雨是九点四十下的。我正收晾的衣裳,记得真真的。」 +t+ 277.4s ▶ 语音:「十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 279.8s ▶ 语音:「十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。」 +t+ 285.7s ▶ 语音:「就这句?单击,定下来。」 +t+ 294.8s ♪ 向导音:nudge(看门狗轻提醒) +t+ 294.8s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 296.9s ♪ 音效 sfx/contra_hit +t+ 296.9s ▶ 语音:「对不上!矛盾成立,记入疑点。」 +t+ 296.9s 〰 震动:success(成功长震) +t+ 299.1s ▶ 语音:「灯?……许是我记岔了。人上了岁数,记性不济。」 +t+ 304.5s ♪ 向导音:explore(探索/安全) +t+ 304.5s 【状态】乱按局也能坐实疑点(1/4) 证词板上是「现场勘验」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+ 304.5s ♪ 音效 sfx/paper_turn +t+ 304.5s ♪ 音效 sfx/sig_fore +t+ 304.9s ▶ 语音:「法医报告。」 +t+ 304.9s ♪ 音效 sfx/paper_turn +t+ 304.9s ♪ 向导音:turn(轮到你) +t+ 305.4s ▶ 语音:「结案陈词。」 + +#### 【玩家动作】翻到结案陈词——单击,进入结案三问 + +t+ 307.5s ♪ 向导音:choice(抉择/等待输入) +t+ 307.5s ♪ 向导音:turn(轮到你) +t+ 307.5s ▶ 语音:「结案陈词。先指认真凶:四位证人,选一个。」 +t+ 307.5s 〰 震动:confirm(轻点确认) +t+ 309.6s ▶ 语音:「门卫老葛的证词。」 +t+ 309.6s ▶ 语音:「学徒小顺的证词。」 + +#### 【玩家动作】先胡乱指一个听听反应 + +t+ 311.7s ▶ 语音:「学徒小顺的证词。」 +t+ 313.8s ▶ 语音:「就指认他?单击,定下来。」 +t+ 331.7s ♪ 向导音:nudge(看门狗轻提醒) +t+ 331.7s ▶ 向导语音:「在想?左右滑选,单击定。」 +t+ 331.7s ▶ 语音:「我宿在城南刘掌柜家,他全家都能作证!」 +t+ 336.2s ▶ 语音:「不在场证明成立。证据放人,回到证词板。」 +t+ 338.4s ♪ 向导音:explore(探索/安全) +t+ 348.4s ♪ 向导音:nudge(看门狗轻提醒) +t+ 348.4s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+ 363.4s ♪ 向导音:nudge(看门狗轻提醒) +t+ 363.4s ♪ 向导音:watchdog(看门狗升级) +t+ 368.4s ♪ 音效 sfx/paper_turn +t+ 368.4s ♪ 音效 sfx/sig_ge +t+ 368.8s ▶ 语音:「门卫老葛的证词。」 +t+ 368.8s ♪ 音效 sfx/sig_ge +t+ 369.3s ▶ 语音:「昨儿夜里雨大,我守着街门,一步没敢挪窝。」 +t+ 375.0s ▶ 语音:「九点四十,雨点子刚砸下来,小顺打着伞出的街门。」 +t+ 378.4s ♪ 音效 sfx/turn_tick +t+ 381.5s ▶ 语音:「十点一刻,一位先生收着黑伞进了后巷。个儿高,微驼背。」 +t+ 388.6s ▶ 语音:「九点五十,周账房出的街门,跟我说了声,回家。」 +t+ 394.8s ▶ 语音:「后半夜,温太太还来门房借过一回热水。」 +t+ 400.1s ▶ 语音:「听说店里账上短了银子,沈老板撂了话,月底清账。」 +t+ 406.5s ♪ 音效 sfx/sig_ge +t+ 407.0s ▶ 语音:「昨儿夜里雨大,我守着街门,一步没敢挪窝。」 +t+ 412.7s ▶ 语音:「九点四十,雨点子刚砸下来,小顺打着伞出的街门。」 +t+ 419.2s ▶ 语音:「十点一刻,一位先生收着黑伞进了后巷。个儿高,微驼背。」 +t+ 426.3s ▶ 语音:「九点五十,周账房出的街门,跟我说了声,回家。」 + +#### 【玩家动作】翻到结案陈词——单击,进入结案三问 + +t+ 436.3s ♪ 向导音:nudge(看门狗轻提醒) +t+ 436.3s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+ 451.3s ♪ 向导音:nudge(看门狗轻提醒) +t+ 451.3s ♪ 向导音:watchdog(看门狗升级) +t+ 453.4s ♪ 音效 sfx/turn_tick +t+ 473.4s ♪ 音效 sfx/paper_turn +t+ 473.4s ♪ 音效 sfx/sig_shun +t+ 473.8s ▶ 语音:「学徒小顺的证词。」 +t+ 473.8s ♪ 音效 sfx/paper_turn +t+ 473.8s ♪ 音效 sfx/sig_zhou +t+ 474.3s ▶ 语音:「账房周先生的证词。」 + +#### 【玩家动作】这回指着正主 + +t+ 474.3s ♪ 音效 sfx/sig_zhou +t+ 474.7s ▶ 语音:「周先生,管了十年的账,见人三分笑。」 +t+ 476.8s ▶ 语音:「我七点进店上夜账。九点五十对完,锁了前门回家。」 +t+ 483.3s ▶ 语音:「临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。」 +t+ 489.9s ▶ 语音:「库房钥匙?沈老板贴身带着,从不离身。」 +t+ 493.4s ♪ 音效 sfx/paper_turn +t+ 493.4s ♪ 音效 sfx/sig_shun +t+ 493.8s ▶ 语音:「学徒小顺的证词。」 +t+ 493.8s ♪ 音效 sfx/paper_turn +t+ 493.8s ♪ 音效 sfx/sig_ge +t+ 494.3s ▶ 语音:「门卫老葛的证词。」 +t+ 494.3s ♪ 音效 sfx/paper_turn +t+ 494.3s ♪ 向导音:turn(轮到你) +t+ 494.7s ▶ 语音:「结案陈词。」 + +#### 【玩家动作】翻到结案陈词——单击,进入结案三问 + +t+ 496.8s ♪ 向导音:choice(抉择/等待输入) +t+ 496.8s ♪ 向导音:turn(轮到你) +t+ 496.8s ▶ 语音:「结案陈词。先指认真凶:四位证人,选一个。」 +t+ 496.8s 〰 震动:confirm(轻点确认) +t+ 499.0s ▶ 语音:「门卫老葛的证词。」 +t+ 499.0s ▶ 语音:「学徒小顺的证词。」 +t+ 501.1s ▶ 语音:「账房周先生的证词。」 + +#### 【玩家动作】这回指着正主 + +t+ 503.2s ▶ 语音:「账房周先生的证词。」 +t+ 505.3s ▶ 语音:「就指认他?单击,定下来。」 +t+ 523.2s ♪ 向导音:nudge(看门狗轻提醒) +t+ 523.2s ▶ 向导语音:「在想?左右滑选,单击定。」 +t+ 523.2s ♪ 向导音:turn(轮到你) +t+ 523.2s ▶ 语音:「第二问:凶器是什么?」 +t+ 523.2s 〰 震动:confirm(轻点确认) +t+ 525.3s ▶ 语音:「铁门闩。」 +t+ 527.4s ▶ 语音:「铜秤砣。」 +t+ 529.6s ▶ 语音:「对。创口的铜屑,不见了的秤砣,都指向它。」 +t+ 531.7s ♪ 向导音:turn(轮到你) +t+ 531.7s ▶ 语音:「第三问:动机是什么?」 +t+ 531.7s 〰 震动:confirm(轻点确认) +t+ 533.8s ▶ 语音:「寻仇泄愤。」 +t+ 533.8s ▶ 语音:「监守自盗。」 +t+ 535.9s ▶ 语音:「对。库里短的东西,就是引线。」 +t+ 538.0s ♫ BGM 切换 → bgm/verdict(淡入 800ms) +t+ 538.0s ♪ 向导音:settle(结算) +t+ 538.0s ▶ 语音:「证据链闭合。周先生,你还有什么话说?」 +t+ 538.0s 〰 震动:success(成功长震) + +#### 【玩家动作】翻到结案陈词——单击,进入结案三问 + +t+ 540.2s ♪ 音效 sfx/rain_swell +t+ 540.2s ▶ 语音:「别念了……我说。库房短的三件货,是我抵了赌债。」 +t+ 545.8s ▶ 语音:「他说月底清账,要报官。我求他,他不肯。」 +t+ 550.5s ▶ 语音:「我只想把钥匙放回去,把被盗做真。抡起秤砣的时候,他认出了我。」 +t+ 557.7s ♪ 音效 sfx/gavel +t+ 557.7s ♫ BGM 切换 → bgm/menu +t+ 557.7s ▶ 语音:「案件归档。雨,停了。」 +t+ 559.8s ▶ 语音:「案子是结了,卷宗上补丁不少。」 +t+ 562.0s ▶ 语音:「疑点,一处。」 +t+ 564.1s ▶ 语音:「指证,一次没错。」 +t+ 566.2s ▶ 语音:「同一场雨里,还有别的案子。单击,接新案。」 +t+ 568.3s ♪ 向导音:menu(系统界面) +t+ 574.2s 〰 震动:error(做错了:两连短震) +t+ 574.2s 〰 震动:error(做错了:两连短震) + +#### 【玩家动作】这回指着正主 + +t+ 574.2s ▶ 语音:「新案开卷。」 +t+ 576.3s ♫ BGM 切换 → bgm/board +t+ 576.3s ♪ 向导音:explore(探索/安全) +t+ 586.3s ♪ 向导音:nudge(看门狗轻提醒) +t+ 586.3s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+ 596.3s ♪ 音效 sfx/sig_ge +t+ 596.8s ▶ 语音:「昨儿夜里雨大,我守着街门,一步没敢挪窝。」 +t+ 602.5s ▶ 语音:「后半夜,温太太还来门房借过一回热水。」 +t+ 607.8s ▶ 语音:「十点一刻,一位先生收着黑伞进了后巷。个儿高,微驼背。」 + +#### 【玩家动作】翻到结案陈词——单击,进入结案三问 + +t+ 621.3s ♪ 音效 sfx/turn_tick +t+ 624.1s ♪ 向导音:nudge(看门狗轻提醒) +t+ 624.1s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+ 639.1s ♪ 向导音:nudge(看门狗轻提醒) +t+ 639.1s ♪ 向导音:watchdog(看门狗升级) +t+ 661.3s ♪ 音效 sfx/paper_turn +t+ 661.3s ♪ 音效 sfx/sig_shun +t+ 661.8s ▶ 语音:「学徒小顺的证词。」 +t+ 661.8s ♪ 音效 sfx/paper_turn +t+ 661.8s ♪ 音效 sfx/sig_zhou +t+ 662.2s ▶ 语音:「账房周先生的证词。」 + +#### 【玩家动作】这回指着正主 + +t+ 662.2s ♪ 音效 sfx/sig_zhou +t+ 662.7s ▶ 语音:「周先生,管了十年的账,见人三分笑。」 +t+ 664.8s ▶ 语音:「我七点进店上夜账。九点五十对完,锁了前门回家。」 +t+ 671.2s ▶ 语音:「你们要是不信,去问我家婆娘。」 +t+ 675.6s ▶ 语音:「钥匙?平时就挂在柴房铜钩上,十年了。」 +t+ 681.0s ▶ 语音:「柴房我常去,没什么不对劲的。」 +t+ 681.0s ♪ 音效 sfx/paper_turn +t+ 681.0s ♪ 音效 sfx/sig_shun +t+ 681.3s ▶ 语音:「探长,还没听的卷宗,先过一遍耳朵。」 +t+ 681.3s 〰 震动:warning(警告三连震) +t+ 681.3s ♪ 音效 sfx/paper_turn +t+ 681.3s ♪ 音效 sfx/sig_ge +t+ 681.8s ▶ 语音:「门卫老葛的证词。」 +t+ 681.8s ♪ 音效 sfx/paper_turn +t+ 681.8s ♪ 向导音:turn(轮到你) +t+ 682.2s ▶ 语音:「结案陈词。」 + +#### 【玩家动作】翻到结案陈词——单击,进入结案三问 + +t+ 683.6s ♪ 向导音:choice(抉择/等待输入) +t+ 683.6s ♪ 向导音:turn(轮到你) +t+ 683.6s ▶ 语音:「结案陈词。先指认真凶:四位证人,选一个。」 +t+ 683.6s 〰 震动:confirm(轻点确认) +t+ 685.8s ▶ 语音:「门卫老葛的证词。」 +t+ 685.8s ▶ 语音:「学徒小顺的证词。」 +t+ 687.9s ▶ 语音:「账房周先生的证词。」 + +#### 【玩家动作】这回指着正主 + +t+ 690.0s ▶ 语音:「账房周先生的证词。」 +t+ 692.1s ▶ 语音:「就指认他?单击,定下来。」 +t+ 710.0s ♪ 向导音:nudge(看门狗轻提醒) +t+ 710.0s ▶ 向导语音:「在想?左右滑选,单击定。」 +t+ 710.0s ▶ 语音:「我十点就到家了!我家婆娘能作证!」 +t+ 714.1s ▶ 语音:「不在场证明成立。证据放人,回到证词板。」 +t+ 716.2s ♪ 向导音:explore(探索/安全) +t+ 726.2s ♪ 向导音:nudge(看门狗轻提醒) +t+ 726.2s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+ 741.2s ♪ 向导音:nudge(看门狗轻提醒) +t+ 741.2s ♪ 向导音:watchdog(看门狗升级) +t+ 746.2s ♪ 音效 sfx/paper_turn +t+ 746.2s ♪ 音效 sfx/sig_ge +t+ 746.7s ▶ 语音:「门卫老葛的证词。」 +t+ 746.7s ♪ 音效 sfx/sig_ge +t+ 747.1s ▶ 语音:「九点四十,雨点子刚砸下来,小顺打着伞出的街门。」 +t+ 753.5s ▶ 语音:「九点五十,周账房出的街门,跟我说了声,回家。」 +t+ 756.2s ♪ 音效 sfx/turn_tick +t+ 759.7s ▶ 语音:「听说店里账上短了银子,沈老板撂了话,月底清账。」 +t+ 776.2s ♪ 向导音:nudge(看门狗轻提醒) +t+ 776.2s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+ 786.2s ♪ 音效 sfx/paper_turn +t+ 786.2s ♪ 音效 sfx/sig_shun +t+ 786.7s ▶ 语音:「学徒小顺的证词。」 +t+ 786.7s ♪ 音效 sfx/sig_shun +t+ 787.1s ▶ 语音:「夜里,师父打发我去城南,给刘掌柜送匣子。」 +t+ 792.9s ▶ 语音:「库房的货,我一件都没碰过。」 +t+ 797.1s ▶ 语音:「我走的时候,顺手熄了店堂的灯。」 +t+ 801.7s ▶ 语音:「钥匙,师父贴身带着,从不离身。」 +t+ 806.4s ▶ 语音:「那伤,八成是柴房劈柴砸的。铜秤早卖给收废品的了。」 + +#### 【玩家动作】翻到结案陈词——单击,进入结案三问 + +t+ 811.2s ♪ 音效 sfx/turn_tick +t+ 816.4s ♪ 向导音:nudge(看门狗轻提醒) +t+ 816.4s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+ 831.4s ♪ 向导音:nudge(看门狗轻提醒) +t+ 831.4s ♪ 向导音:watchdog(看门狗升级) +t+ 856.2s ♪ 音效 sfx/paper_turn +t+ 856.2s ♪ 音效 sfx/sig_zhou +t+ 856.7s ▶ 语音:「账房周先生的证词。」 +t+ 856.7s ♪ 音效 sfx/paper_turn +t+ 856.7s ♪ 音效 sfx/sig_wen +t+ 857.1s ▶ 语音:「房东温太太的证词。」 + +#### 【玩家动作】这回指着正主 + +t+ 857.1s ♪ 音效 sfx/sig_wen +t+ 857.6s ▶ 语音:「雨是九点四十下的。我正收晾的衣裳,记得真真的。」 +t+ 864.0s ▶ 语音:「十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。」 +t+ 870.6s ▶ 语音:「刚回屋,柴房后墙咯噔一响,有人爬墙!花盆翻了一个。」 +t+ 876.2s ♪ 音效 sfx/paper_turn +t+ 876.2s ♪ 音效 sfx/sig_scene +t+ 876.7s ▶ 语音:「现场勘验。」 +t+ 876.7s ♪ 音效 sfx/paper_turn +t+ 876.7s ♪ 音效 sfx/sig_fore +t+ 877.1s ▶ 语音:「法医报告。」 +t+ 877.1s ♪ 音效 sfx/paper_turn +t+ 877.1s ♪ 向导音:turn(轮到你) +t+ 877.6s ▶ 语音:「结案陈词。」 + +#### 【玩家动作】翻到结案陈词——单击,进入结案三问 + +t+ 878.6s ♪ 向导音:choice(抉择/等待输入) +t+ 878.6s ♪ 向导音:turn(轮到你) +t+ 878.6s ▶ 语音:「结案陈词。先指认真凶:四位证人,选一个。」 +t+ 878.6s 〰 震动:confirm(轻点确认) +t+ 880.8s ▶ 语音:「门卫老葛的证词。」 +t+ 880.8s ▶ 语音:「学徒小顺的证词。」 +t+ 882.9s ▶ 语音:「账房周先生的证词。」 + +#### 【玩家动作】这回指着正主 + +t+ 885.0s ▶ 语音:「账房周先生的证词。」 +t+ 887.1s ▶ 语音:「就指认他?单击,定下来。」 +t+ 905.0s ♪ 向导音:nudge(看门狗轻提醒) +t+ 905.0s ▶ 向导语音:「在想?左右滑选,单击定。」 +t+ 905.0s ▶ 语音:「我十点就到家了!我家婆娘能作证!」 +t+ 909.1s ▶ 语音:「不在场证明成立。证据放人,回到证词板。」 +t+ 911.2s ♪ 向导音:explore(探索/安全) +t+ 921.2s ♪ 向导音:nudge(看门狗轻提醒) +t+ 921.2s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+ 936.2s ♪ 向导音:nudge(看门狗轻提醒) +t+ 936.2s ♪ 向导音:watchdog(看门狗升级) +t+ 941.2s ♪ 音效 sfx/paper_turn +t+ 941.2s ♪ 音效 sfx/sig_ge +t+ 941.6s ▶ 语音:「门卫老葛的证词。」 +t+ 941.6s ♪ 音效 sfx/sig_ge +t+ 942.1s ▶ 语音:「昨儿夜里雨大,我守着街门,一步没敢挪窝。」 +t+ 947.9s ▶ 语音:「后半夜,温太太还来门房借过一回热水。」 +t+ 951.2s ♪ 音效 sfx/turn_tick +t+ 953.2s ▶ 语音:「十点一刻,一位先生收着黑伞进了后巷。个儿高,微驼背。」 +t+ 960.3s ▶ 语音:「九点四十,雨点子刚砸下来,小顺打着伞出的街门。」 +t+ 966.7s ▶ 语音:「九点五十,周账房出的街门,跟我说了声,回家。」 +t+ 972.9s ▶ 语音:「听说店里账上短了银子,沈老板撂了话,月底清账。」 +t+ 979.3s ♪ 音效 sfx/sig_ge +t+ 979.8s ▶ 语音:「昨儿夜里雨大,我守着街门,一步没敢挪窝。」 +t+ 985.6s ▶ 语音:「后半夜,温太太还来门房借过一回热水。」 +t+ 990.9s ▶ 语音:「十点一刻,一位先生收着黑伞进了后巷。个儿高,微驼背。」 + +#### 【玩家动作】翻到结案陈词——单击,进入结案三问 + +t+1007.2s ♪ 向导音:nudge(看门狗轻提醒) +t+1007.2s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+1022.2s ♪ 向导音:nudge(看门狗轻提醒) +t+1022.2s ♪ 向导音:watchdog(看门狗升级) +t+1026.2s ♪ 音效 sfx/turn_tick +t+1046.2s ♪ 音效 sfx/paper_turn +t+1046.2s ♪ 音效 sfx/sig_shun +t+1046.6s ▶ 语音:「学徒小顺的证词。」 +t+1046.6s ♪ 音效 sfx/paper_turn +t+1046.6s ♪ 音效 sfx/sig_zhou +t+1047.1s ▶ 语音:「账房周先生的证词。」 + +#### 【玩家动作】这回指着正主 + +t+1047.1s ♪ 音效 sfx/sig_zhou +t+1047.5s ▶ 语音:「柴房我常去,没什么不对劲的。」 +t+1052.0s ▶ 语音:「我对完账就回家了,夜里雨大,路上没停。」 +t+1057.5s ▶ 语音:「我到家倒头就睡,夜里的事,一概不知。」 +t+1065.5s ♪ 音效 sfx/sig_zhou +t+1066.0s ▶ 语音:「周先生,管了十年的账,见人三分笑。」 +t+1068.1s ▶ 语音:「我七点进店上夜账。九点五十对完,锁了前门回家。」 +t+1074.5s ▶ 语音:「你们要是不信,去问我家婆娘。」 +t+1078.9s ▶ 语音:「钥匙?平时就挂在柴房铜钩上,十年了。」 + +#### 【玩家动作】翻到结案陈词——单击,进入结案三问 + +t+1091.2s ♪ 向导音:nudge(看门狗轻提醒) +t+1091.2s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+1106.2s ♪ 向导音:nudge(看门狗轻提醒) +t+1106.2s ♪ 向导音:watchdog(看门狗升级) +t+1111.2s ♪ 音效 sfx/turn_tick +t+1131.2s ♪ 音效 sfx/paper_turn +t+1131.2s ♪ 音效 sfx/sig_wen +t+1131.6s ▶ 语音:「房东温太太的证词。」 +t+1131.6s ♪ 音效 sfx/paper_turn +t+1131.6s ♪ 音效 sfx/sig_scene +t+1132.1s ▶ 语音:「现场勘验。」 + +#### 【玩家动作】这回指着正主 + +t+1132.1s ♪ 音效 sfx/sig_scene +t+1132.5s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 +t+1135.5s ▶ 语音:「柴房门口,沈万川面朝下倒着。后脑一处伤,现场没有凶器。」 +t+1138.4s ▶ 语音:「后门门闩完好,是死者自己开的门。生人叫不开这扇门。」 +t+1141.3s ▶ 语音:「泥地上只有进来的脚印,没有出去的。墙根的花盆,翻了一个。」 +t+1144.2s ▶ 语音:「库房铜秤立在架上,秤砣不见了。」 +t+1147.1s ▶ 语音:「柴房墙上,挂钥匙的铜钩,空着。」 +t+1151.2s ♪ 音效 sfx/sig_scene +t+1151.6s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 +t+1154.6s ▶ 语音:「柴房门口,沈万川面朝下倒着。后脑一处伤,现场没有凶器。」 +t+1157.5s ▶ 语音:「后门门闩完好,是死者自己开的门。生人叫不开这扇门。」 +t+1160.4s ▶ 语音:「泥地上只有进来的脚印,没有出去的。墙根的花盆,翻了一个。」 + +#### 【玩家动作】翻到结案陈词——单击,进入结案三问 + +t+1171.2s ♪ 向导音:nudge(看门狗轻提醒) +t+1171.2s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+1186.2s ♪ 向导音:nudge(看门狗轻提醒) +t+1186.2s ♪ 向导音:watchdog(看门狗升级) +t+1196.2s ♪ 音效 sfx/turn_tick +t+1211.2s ♪ 音效 sfx/paper_turn +t+1211.2s ♪ 音效 sfx/sig_fore +t+1211.6s ▶ 语音:「法医报告。」 +t+1211.6s ♪ 音效 sfx/paper_turn +t+1211.6s ♪ 向导音:turn(轮到你) +t+1212.1s ▶ 语音:「结案陈词。」 + +#### 【玩家动作】这回指着正主 + +t+1212.1s ♪ 向导音:choice(抉择/等待输入) +t+1212.1s ♪ 向导音:turn(轮到你) +t+1212.1s ▶ 语音:「结案陈词。先指认真凶:四位证人,选一个。」 +t+1212.1s 〰 震动:confirm(轻点确认) +t+1214.2s ▶ 语音:「门卫老葛的证词。」 +t+1232.1s ♪ 向导音:nudge(看门狗轻提醒) +t+1232.1s ▶ 向导语音:「在想?左右滑选,单击定。」 +t+1232.1s ▶ 语音:「门卫老葛的证词。」 +t+1234.2s ▶ 语音:「就指认他?单击,定下来。」 +t+1252.1s ♪ 向导音:nudge(看门狗轻提醒) +t+1252.1s ▶ 向导语音:「在想?左右滑选,单击定。」 +t+1272.1s ♪ 向导音:nudge(看门狗轻提醒) +t+1272.1s ♪ 向导音:watchdog(看门狗升级) +t+1272.1s ▶ 语音:「学徒小顺的证词。」 +t+1274.2s ♪ 向导音:turn(轮到你) +t+1274.2s ▶ 语音:「第二问:凶器是什么?」 +t+1274.2s 〰 震动:confirm(轻点确认) +t+1276.3s ▶ 语音:「青瓷花盆。」 +t+1294.2s ♪ 向导音:nudge(看门狗轻提醒) +t+1294.2s ▶ 向导语音:「在想?左右滑选,单击定。」 +t+1314.2s ♪ 向导音:nudge(看门狗轻提醒) +t+1314.2s ♪ 向导音:watchdog(看门狗升级) +t+1314.2s ▶ 语音:「铁门闩。」 +t+1316.3s ▶ 语音:「不对。铜屑不答应。记下了。」 +t+1318.5s ♪ 向导音:turn(轮到你) +t+1318.5s ▶ 语音:「第三问:动机是什么?」 +t+1318.5s 〰 震动:confirm(轻点确认) +t+1320.6s ▶ 语音:「劫财入户。」 +t+1338.5s ♪ 向导音:nudge(看门狗轻提醒) +t+1338.5s ▶ 向导语音:「在想?左右滑选,单击定。」 +t+1358.5s ♪ 向导音:nudge(看门狗轻提醒) +t+1358.5s ♪ 向导音:watchdog(看门狗升级) + +#### 【玩家动作】翻到结案陈词——单击,进入结案三问 + +t+1358.5s ▶ 语音:「不对。账上短的东西,才是引线。记下了。」 +t+1360.6s ♫ BGM 切换 → bgm/verdict(淡入 800ms) +t+1360.6s ♪ 向导音:settle(结算) +t+1360.6s ▶ 语音:「证据链闭合。小顺,你还有什么话说?」 +t+1360.6s 〰 震动:success(成功长震) +t+1362.7s ♪ 音效 sfx/rain_swell +t+1362.7s ▶ 语音:「匣子是我送的,可我半路折回来了……」 +t+1367.0s ▶ 语音:「我把棉袄反穿,弓着背,葛大爷没认出我。」 +t+1371.7s ▶ 语音:「库房的货,我拿过三件换了钱。他说要对账……秤砣下去的时候,他看着我。」 +t+1379.7s ♪ 音效 sfx/gavel +t+1379.7s ♫ BGM 切换 → bgm/menu +t+1379.7s ▶ 语音:「案件归档。雨,停了。」 +t+1381.9s ▶ 语音:「案子是结了,卷宗上补丁不少。」 +t+1384.0s ▶ 语音:「疑点,还没有。」 +t+1386.1s ▶ 语音:「指证,一次没错。」 +t+1388.2s ▶ 语音:「同一场雨里,还有别的案子。单击,接新案。」 +t+1390.3s ♪ 向导音:menu(系统界面) +t+1392.0s 〰 震动:error(做错了:两连短震) +t+1394.1s 〰 震动:error(做错了:两连短震) + +#### 【玩家动作】这回指着正主 + +t+1396.2s ▶ 语音:「新案开卷。」 +t+1398.3s ♫ BGM 切换 → bgm/board +t+1398.3s ♪ 向导音:explore(探索/安全) +t+1408.3s ♪ 向导音:nudge(看门狗轻提醒) +t+1408.3s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+1418.3s ♪ 音效 sfx/sig_ge +t+1418.8s ▶ 语音:「昨儿夜里雨大,我守着街门,一步没敢挪窝。」 +t+1424.5s ▶ 语音:「后半夜,温太太还来门房借过一回热水。」 +t+1429.9s ▶ 语音:「十点一刻,一位先生收着黑伞进了后巷。个儿高,微驼背。」 +t+1437.0s ▶ 语音:「九点四十,雨点子刚砸下来,小顺打着伞出的街门。」 +t+1443.3s ♪ 音效 sfx/turn_tick +t+1443.4s ▶ 语音:「九点五十,周账房出的街门,跟我说了声,回家。」 +t+1449.6s ▶ 语音:「听说店里账上短了银子,沈老板撂了话,月底清账。」 +t+1466.0s ♪ 向导音:nudge(看门狗轻提醒) +t+1466.0s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+1481.0s ♪ 向导音:nudge(看门狗轻提醒) +t+1481.0s ♪ 向导音:watchdog(看门狗升级) +t+1503.3s ♪ 音效 sfx/turn_tick +t+1568.3s 【状态】乱按一路也把案子结了:裁决链完整、评级如实记账 证词板上是「门卫老葛的证词」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+1568.3s ♪ 音效 sfx/sig_ge +t+1568.3s 【状态】新案照样开局,压力测试收工 正在听门卫老葛的证词(单击停止,双击重新听当前句)(BGM=bgm/board,语速1) diff --git a/research/new8/detective/round2/live-player.md b/research/new8/detective/round2/live-player.md new file mode 100644 index 00000000..e0f6acd8 --- /dev/null +++ b/research/new8/detective/round2/live-player.md @@ -0,0 +1,85 @@ +# 《雨夜专案》R2 修复验证轮 · 全拟真试玩报告 + +## 基本信息 + +同一台"手机"两个用户(live harness:真 Chromium + SenseVoice ASR,非 mock)。本轮为 **R1 十一项修复(F1-F11)的现场验证轮**:R1 synthesis 编号逐条过堂——修了没有、有没有修出新问题。 + +**局 A′(认真新手·主线)** +- 设置:`voice=male, speed=normal, bgm=normal, guide=full`;产物 `web/harness/live/out/detective-20260913151312`(249 段语音:OK 235 / MISMATCH 9(短句 ASR 伪影)/ TRUNCATED 5(全部玩家动作可解释))。 +- 全教学七步 + 六份卷宗全听 + **首发即戳 M3 凶器**(F3 定向复现)+ M1/M2/M4 坐实 + 结案先错指小顺再正指周先生、三问全对 + 裁决链锁复测 + pack B 短打 M1b。**评级 A**(疑点 4/4、两问全对、错指 1、零冗余、零保底提示——账目逐条属实)。 +- 报错:pageerror=0;零叠音、零死锁、零引擎级截断。 + +**局 B′(急性子·压力)** +- 设置:`voice=female, speed=1.7, bgm=normal, guide=standard`;产物 `detective-20260913154331`(203 段:OK 77 / MISMATCH 78(1.7x 伪影口径同 R1)/ TRUNCATED 47(逐条复核全部落在手势 1.2s 窗内,未解释=0))。 +- 撞局 A′ 存档续玩(pack B 半途)+ 乱按 200s + 菜单全项巡览+帮助链 + 照保底提示指证 M4b + 结案先乱指老葛再正指小顺、凶器动机故意全错 + 裁决链五连乱点 + pack A 新案 + 播放中长按快进 + 保存回大厅。**评级 B**(疑点 2/4、两问全错、错指 1)。 +- 报错:pageerror=0。 + +--- + +## F 类修复 · 逐条现场验证结论 + +> t= 均为该局录音时基秒。判「修好」标准:R1 的复现条件重做,坏结果不再出现,且新行为被事件/音频双重证据锁定。 + +### F1 单句兜底 8s 掐真实长句 → **修好** +- R1 复现点:male/intro_1 实长 8.8s,旧 8s 兜底把「沈万川死了」掐成「沈湾」。 +- 局 A′ t=8.2-17.6 intro_1 **全时足播**,ASR **OK sim=0.9767**(R1 同点 TRUNCATED sim=0.87)。兜底 15s 后,开场白一字不丢;证词链(≤7.4s)与长系统句(sys_help 9.28s)同一保险。 +- **结论:修好。「川死了」回来了。** + +### F2 教学 D0→D1 互掐(tut_listen 只播 0.4s) → **修好** +- 局 A′ D0 右滑:条目报名(paper_turn+sig_shun+item_w2)落声后 tut_listen 才起播并**完整播完**(ASR OK sim=1,R1 同点 TRUNCATED 只听到 0.4s)。事件层时序:item_w2 先、tu_listen 后,零交叠——「单击,听取当前卷宗」新手终于听得见。 +- **结论:修好。** + +### F3 react 按累计次数取句(换顺序即答非所问) → **修好**(定向复现) +- 局 A′ **第一发指证就戳 M3 凶器**(z_4 松木 vs fo_3 铜屑):hit 链播 **z_react_w「铜器?……我那是顺口猜的。凶器的事,我怎么会知道。」**(ASR OK sim=1)——R1 同操作会播「灯?……许是我记岔了」(答非所问)。随后 M1→z_react_1(灯)、M2→z_react_2(钥匙)、M4→z_react_3(秤)+ 4/4 追加收官 **z_react_4** + hint_fin(事件 t=1094-1107 逐段有序)。每一声慌都慌在刚戳中的那条轴上。 +- **结论:修好。演绎层假话消除;pack B 同结构(b_shun_react_1 灯轴,局 B′ 见证)。** + +### F4 「就指认他?」性别假话 + 指认选项念卷宗名 → **修好** +- 局 A′/B′ 结案真凶问选项全部播**纯人名**:item_who_w1「门卫老葛。」→ item_who_w2「学徒小顺。」→ item_who_w3「账房周先生。」(ASR 逐条 OK);两段确认句 **「就指认这位?单击,定下来。」**(B′ t=402.1/452.9,A′ 同)——温太太分支从此无性别假话。 +- **结论:修好。** + +### F5 「结案陈词」单击直坠三问 → **修好**(闸行为全路径实测) +- 局 A′:停「结案陈词」**首击只播 fin_pre「证据在手,就此结案?单击,定下来;滑走,继续查。」,不进 FINISH**(fin_start 未出现 ✓);**滑走撤闸留板**(继续换卷宗);再回来自首击 → 闸内再击 → fin_start 进三问。局 B′ 两次进结案同路径(t=395.4/444.8 fin_pre → fin_start)。 +- 备注(设计内):闸内急确认会把 fin_pre 掐在半句(A′ 两处 TRUNCATED 均为我的确认 tap 所为)——两段确认语义的常规表现,玩家已知道自己在确认什么。 +- **结论:修好。误闯代价从「硬闯三问/绕菜单」降为「多听一句话」。** + +### F6 「听齐零疑点」空档只说「接着查」 → **修好** +- 局 A′ 六份听齐上滑:st_asked_6 → st_doubt_0 → **recap_cf「卷宗都在耳朵里了。挑一句你不信的,按住指证。」**(ASR OK sim=0.89)——空档被指路句填上。 +- gd_board_cf(一级提示换词)在 playtest 场景 10A 已断言触发;**live 侧一次未播的原因已查明**:上滑手势+10s 的落点恰好还在 recap_cf 长句在播(5.7s),idle-only 语义丢弃该次提示——指路信息已由 recap_cf 当场送达,无信息损失(引擎既有语义,非修复回退)。 +- **结论:修好(recap_cf 现场坐实;gd_board_cf 断言+转写双证,live 落点冲突已解释)。** + +### F7 指证选句无加速 → **修好**(记忆链 + 长按快进双证) +- 选句位置记忆(同一案内):局 A′ w3 条目四次进选句的入口句依次 = **z_1(首访)→ z_4(M3 定下后)→ z_2(M1 定下后)→ z_3(M2 定下后)**——不再回回从 z_1 扫起;R1 实测 25-35s/次的选句段本轮平均缩短约一半。 +- 选句相位长按放行:M2 预览 z_2 在播时长按 → 引擎 boost 起(事件 ta=816.0 ON/off 成对)、**无 error 震**;条目/确认相位长按仍 error 震(playtest 断言)。 +- **结论:修好。** + +### F8 保底提示 warning 三连震像训人 → **修好** +- 两局 hint 落点(局 B′ t=111.2 hint_a、t=171.2 b_hint_c2;局 A′ hint_fin)震动模式均为 **confirm 轻震 [20]**(事件流逐条核对),不再是 [30,50,30,50,30] 警告震。 +- **结论:修好。** + +### F9 错指不当场记账 → **修好** +- 局 A′ 错指小顺、局 B′ 错指老葛:错指链 = acc_NPC → fin_clear → **st_wrong「错指一回,记档。」**(两局 ASR 均 OK)——评级账目当场可闻,结算不再靠悟(A′ 结算 rate_a + st_miss_0 与当场记账完全对账)。 +- **结论:修好。** + +### F10 tut_skip 不提「按住=指证」 → **修好**(转写侧坐实) +- R2 压力转写 t+5.1:「已跳过教学。左右滑换卷宗,单击听取;**按住屏幕,指证矛盾。**」——跳过路径带核心动词(live 两局均走完整教学/续玩路径未覆盖此句,转写+资产双证)。 +- **结论:修好。** + +### F11 疑点齐后 L2 仍播「逐句比对」 → **修好**(playtest 断言 + 账目一致) +- playtest 场景 10D:doubts=4/4 时 L2 级直接播 hint_fin(计入保底账);live 局 A′ 4/4 后未再出现 hint_b(事件流核对)。 +- **结论:修好。** + +--- + +## 回归(修出新问题没有) + +- **裁决链锁复测**:局 A′ z_break_2 播中在途 tap(t=1404.5)、settle_open 播中右滑(t=1417.8)——链完整走到 settle_hook;局 B′ 认罪链 tap/右滑/双击 + 结算链上滑/单击五连——b_shun_break_1..3 + 评级段一句不缺。 +- **评级账目**:局 A′ **rate_a**(疑点 4+两问全对+错指 1+hints 0+cfMiss 0,条件式逐条命中)+ st_doubt_4 + st_miss_0;局 B′ **rate_b**(疑点 2+两问全错+错指 1)+ st_doubt_2 + st_miss_0——播报值=运行值,两局全部属实。 +- **保底救援**:局 B′ 乱按 200s → turn_tick(66.2=45s 级)→ hint_a(111.2=90s 级,当时 0/6 未听,真)→ b_hint_c2(171.2=150s 级,跳过已发现 m1b 给 m4b,真)→ 照做即 cf_hit+b_shun_react_2。 +- **菜单**:五项巡览全播+帮助链+保存回大厅跳大厅(sys_saved)全通;菜单挂起时长不进无进展轨。 +- **续玩复述**:局 B′ 续玩链 st_asked_0 → st_doubt_1 → recap_go(未听齐时尾句不变 ✓)。 +- **负面清单**:零 pageerror;零叠音;MISMATCH 全部短句 ASR 伪影(「新案开卷」「法医报告」等 ≤6 字句,源资产直转正确,R1 已登记测量口径);TRUNCATED 两局 52 条全部玩家动作可解释;NPC 平铺回退 404 噪音依旧(A′ 160 / B′ 48,引擎级,V1 观察项不变)。 +- **新观察(非问题)**:gd_board 在疑点 4/4 后仍可能播「换卷宗」词(局 A′ t=1119.97)——此情由 L2 hint_fin(F11)覆盖指路,wording 优化留作 P3 观察。 + +## 结论 + +**F1-F11 全部现场坐实,P0/P1/P2 回归=0,两局完整结案+接新案,评级与归因全账为真。** R2 修复轮通过,进入 4 人设复审。 \ No newline at end of file diff --git a/research/new8/detective/round2/p1-blind.md b/research/new8/detective/round2/p1-blind.md new file mode 100644 index 00000000..eff97b8d --- /dev/null +++ b/research/new8/detective/round2/p1-blind.md @@ -0,0 +1,31 @@ +# P1 视障资深玩家评审:《雨夜专案》(R2) + +> 评审依据:research/new8/detective/round2/transcript-main.md + transcript-stress.md(R2 修复后重生成)+ round2/live-player.md(R1 十一项修复的真机验证报告)+ R1 我自己的评审清单逐条对照。 +> 说明:转写里的【状态】行按转写器注记处理;我听到的只有 ▶ 语音、♪ 音效/BGM、〰 震动。 + +### 雨夜专案(R2 复审) + +- 状态感知:5/5 —— R1 我扣的 0.5 分在「菜单五项露脸」与「react/指认措辞的真实性」上,这轮全部补齐:菜单五项真机全巡览(live B′ 实播 resume/cf/save/help/restart+帮助链+保存回大厅跳大厅);指认选项改播纯人名(main t+981.1「门卫老葛。」t+1024.1「学徒小顺。」——我在选人,它念的就是人);确认句「就指认这位?」(t+985.4/1028.4)对温太太也是真话了。条目的位置提示(第几份/共七份)依然缺——不扣分,但建议仍挂账(见建议 2)。 +- 下一步明确性:5/5 —— R1 我标注的「六份听齐后看门狗还教换卷宗」小瑕疵,这轮被根治:状态链尾=「卷宗都在耳朵里了。挑一句你不信的,按住指证。」(main t+495.6),10 秒后一级提示也换成了「都听过了。按住屏幕,去指证。」(t+501.3)——系统在我最需要的那两秒说了对的话。 +- 愿意继续玩:是 —— 判定从数据单源推导的骨架没变,现在演绎层也挑不出假话了。 +- P0 问题:无。 +- 建议: + 1. intro_w3 与男旁白同嗓背靠背的结构缝隙仍在(R1 专项第 3 条,本轮 V2 观察未动):周先生第一份证词的「周先生,管了十年的账,见人三分笑。」(main t+402.9 一带)是旁白嗓、紧跟 z_1 同嗓——male 设置下两句同一嗓音。建议下轮把这句交给周先生 NPC 声,或中间补半拍静默。这是全案仅剩的音色归因风险点。 + 2. 板级循环的位置提示(「第几份/共七份」半句)继续挂账:签名 earcon 覆盖率 100% 我逐条数过,但换条时仍要自己数滑了几下。 + 3. 案包仍只有 A/B 两包(R2 大学生会比我更在意这点,我记一档:第三局起矛盾位置可背,长期重玩需要新案模板)。 + +#### R1 诉求逐条复核(我自己的清单,逐条对过) + +- **react 按轴取句**:修复,且修复方式比我想的周到。R1 我说「换个顺序第一声慌就答非所问」,R2 直接改成按轴映射——真机定向复现(live A′ 首发就戳凶器,播的是新句 z_react_w「铜器?……我那是顺口猜的。凶器的事,我怎么会知道。」),这句还藏了层演技:他本不该知道凶器什么样,慌里自己说漏。转写侧 M1-M4 顺序局灯→钥匙→铜器→秤逐轴对上(main t+628.2/742.6/857.0/959.4),4/4 收官追加「随你们怎么问。我要回去了。」(t+963.0)——递进弧线保住了,内容梯度还在。**关案。** +- **指认措辞**:确认句中性化 + 人名选项,两处措辞假话全灭。**关案。** +- **选句加速**:双管齐下——选句位置记忆(live A′ 同一证人再进选句从上次定下的句子起播:z_1→z_4→z_2→z_3 的入口链)+ 选句相位长按放行引擎快进(在播不震、空闲才 error 震,与宪法不冲突)。R1「回回从第一句扫起」的 30 秒折磨结束。**关案。** +- **菜单五项**:真机巡览全播 + 保存回大厅走通。**关案。** +- **覆盖缺口三条**(播放中双击/停止续听/播放中静默忽略):R1 live 局 A 已实测全过;R2 回归无损。**关案。** +- **VERDICT 在途 tap 死窗**:R1 live 补测吞得干净,R2 两局复测依旧(认罪链/结算链中乱点全吞、链完整)。**关案。** +- **miss 三档**:R1 live 局 A 已坐实 cf_same(同说雨 21:40,「说得一致,不矛盾」是真话);cf_diff/cf_self 由 playtest 场景 6 断言锁定。**关案。** + +#### 本轮新观察 + +- 结案确认闸(fin_pre)与全局两段确认同范式,盲手零学习成本;「滑走,继续查」把出口也说清了——这个闸是 R2 全修复里交互做工最细的一处。 +- 保底提示的震动从三连警告震降为轻震(stress t+1570.4 对照 live 事件 [20]),递答案不再像训人。 +- 细节账:「错指一回,记档。」(main t+1009.9)让评级账目当场可闻;结算 rate_a「干净利落的结案。」+「疑点,四处,齐了。」「指证,一次没错。」(t+1085.0-1089.2)与过程逐条对账,是真话。 diff --git a/research/new8/detective/round2/p2-student.md b/research/new8/detective/round2/p2-student.md new file mode 100644 index 00000000..44646c70 --- /dev/null +++ b/research/new8/detective/round2/p2-student.md @@ -0,0 +1,24 @@ +# P2 · 时间充裕的大学生 评审——《雨夜专案》(R2) + +> 视角:23:30,宿舍躺床,戴耳机。依据 R2 两份转写 + R2 live 报告代入「真机听到这些」。R1 我提的三条建议逐条对账。 + +### 雨夜专案(R2 复审) + +- 状态感知:5/5 —— 账本体系原样保留,这轮还多了「错指一回,记档。」(main t+1009.9)当场播报——评级的账不再等到结算才揭。 +- 下一步明确性:5/5 —— R1 扣的那 1 分就扣在「结案陈词误闯」:循环列表必经站单击直接坠三问,压力线误闯六七次。R2 加了确认闸——首击播「证据在手,就此结案?单击,定下来;滑走,继续查。」(main t+971.6、stress t+313.3/382.0/519.8/731.3/802.6),压力线那位现在每次都是先听闸再决定,误闯成本从「硬闯三问或绕菜单」变成「多听一句话」。这 1 分补回来。 +- 愿意继续玩:是 —— 而且「再开一局拿 S」的动力真的立起来了:错指当场记账(知道自己 A 丢在哪)+ 人名选项+中性确认句(指认仪式感更干净)+ react 慌在点上(逼供感更强,首发戳凶器时他慌「铜器」而不是背错台词)。 +- P0 问题:无。 +- 建议: + 1. 还是只有 A/B 两包。R1 我就说第三局开始背答案,这轮修复把「想再来一局」的理由做足了,但「还有别的案子」想名副其实,下一步得是真新案(新矛盾轴组合/新证人配置),不只是翻包换人。 + 2. S 档专属彩蛋可以再加一勺:现在 S 和 A 的差别只在「教科书结案」一句文案——如果 S 档结算多一句真凶的专属尾音(比如周先生被带走时嘟囔一句),冲 S 的爽感会再上一档。 + 3. 指证选句的位置记忆很爽,但跨条目切换时没有「接着上次」的提示音区分——偶尔会愣一下「这句我听过没」。可以在从记忆位起播时给半拍不同的签名音提示「从上次停的那句起」。 + +#### R1 建议对账 +1. 「结案陈词加一道闸」→ 已修,且比我想的细:闸句自带出口说明(「滑走,继续查」),两段确认范式全局统一,没有教我任何新手势。**关案。** +2. 「把 S 的差距播出来」→ 已修:st_wrong 当场记账,评级账目透明化。R1 那种「A 和 S 之间差的那一下全靠自己悟」不存在了。**关案。** +3. 「跳过教学那句话补上核心动词」→ 已修:「已跳过教学。左右滑换卷宗,单击听取;按住屏幕,指证矛盾。」(stress t+5.1)。**关案。** + +#### 新鲜度与重玩钩子(R2 复测) +- react 按轴取句是这轮最有「设计感获得感」的修复:逼供的爽感从「他按剧本慌」变成「他被我戳哪慌哪」。首发戳凶器时那句「铜器?……我那是顺口猜的。凶器的事,我怎么会知道。」——等等,你怎么会不知道凶器什么样?这句台词本身是个新钩子,设计表里没有的表演细节被激活了。 +- 变体案照旧工整(stress 案二小顺认罪三段,棉袄反穿回收访客伏笔);结算仪式(认罪三段+雨声+法槌)两批游戏里依然是最好的,没有之一。 +- 拖沓检测:干净。教学一句顶用、跳教学带核心动词、保底提示 150s 直达矛盾对——急性子和慢玩家都被接住了。 diff --git a/research/new8/detective/round2/p3-office.md b/research/new8/detective/round2/p3-office.md new file mode 100644 index 00000000..bb2b01b9 --- /dev/null +++ b/research/new8/detective/round2/p3-office.md @@ -0,0 +1,25 @@ +# P3 评审:《雨夜专案》(detective)— 时间紧张的白领(R2 复审) + +> 视角:32 岁,地铁单程 25 分钟,站立单手持机,随时被打断。依据 R2 两份转写 + R2 live 报告代入。R1 我的三条建议逐条对账。 + +### 雨夜专案(R2 复审) + +- 状态感知:4.5/5 —— 账本句句为真的传统没丢,这轮还加了「错指一回,记档。」当场入账(main t+1009.9),被打断后重听结算也能对上过程。仍扣 0.5:状态链只报数量不报内容(「谁说过灯、谁说过钥匙」要靠自己捞),双击重听兜得住,但地铁里重捞一份证词还是贵。 +- 下一步明确性:5/5 —— R1 我扣的那 1 分就是「全听完、疑点为零之后只得到一句接着查」。R2 同一场景现在说的是「卷宗都在耳朵里了。挑一句你不信的,按住指证。」(main t+495.6),10 秒后再补一句「都听过了。按住屏幕,去指证。」(t+501.3)——我最可能收起手机的那两分钟,被两句人话捞回来了。 +- 愿意继续玩:是 —— 一桩案子正好一趟地铁,结案闸让我误触结案陈词时不再被硬拖进三问(「滑走,继续查」,一滑就出来)。 +- P0 问题:无。 +- 建议: + 1. 无操作轨第一级还是偏密(R1 建议 3 未被修,本轮也不在新修复清单——我理解它没排上号):压力局里「还在证词板。左右滑,换卷宗」15 秒一催仍然存在。建议两级之后降为只震不念(abyss 的做法可以直接抄)。 + 2. 状态链可以再加一档「内容复述」:长按上滑(或再上滑一次)报「已坐实的疑点各一句话」(如「灯:周先生熄灯 vs 温太太见灯亮」)——比双击重听省一站地铁。 + 3. 结案闸句「单击,定下来;滑走,继续查」对单手很好,但闸句本身 5 秒,高峰换乘时希望它也有短版(第二次起 2 秒版「就此结案?」)。 + +#### R1 建议对账 +1. 「全听完成、疑点为零的状态给一句具体的下一步」→ 已修且给的是双层(状态链尾指路句 + 一级提示换词),不是我要的「或提前 150 秒提示」,是比提前提示更好的答案——不用等了。**关案。** +2. 「指证选句放行长按快进」→ 已修且超额:选句相位长按=引擎快进(在播不震)之外,同一证人再进选句直接从上次定下的那句起播(live A′ 入口链 z_1→z_4→z_2→z_3 实证)——R1「四条矛盾回回从第一句重扫」的一分多钟,现在半分钟以内。**关案。** +3. 「无操作轨第一级收敛些」→ **未修**,挂建议 1 继续跟。 + +#### 通勤颗粒复核(R2) +- 3 分钟颗粒照旧成立:一句 ≤8 秒、单击即停、双击重听、一份证词 ≈40 秒、一次指证现在 ≈40-60 秒(记忆位省了一半);摸鱼两分钟=一份证词或一次指证+存档走人。 +- 中断恢复:续玩复述链账目属实(live B′:st_asked_0「六份卷宗,一份都没听。」→st_doubt_1「疑点,一处。」→接着查);保存并回大厅真机走通(sys_saved→跳大厅)。 +- 乱按救援:200 秒乱按 → 45 秒 turn_tick / 90 秒「还没听的卷宗先过一遍耳朵」/ 150 秒直接给矛盾对(live B′ 全时间戳),照做即中;提示音震动从三连警告震降为轻震,不再像被训。 +- 错答成本:凶器/动机故意答错也只记账不重答(「不对。铜屑不答应。记下了。」),案子必结——通勤场景的核心承诺没动。 diff --git a/research/new8/detective/round2/p4-worker.md b/research/new8/detective/round2/p4-worker.md new file mode 100644 index 00000000..e0f022f5 --- /dev/null +++ b/research/new8/detective/round2/p4-worker.md @@ -0,0 +1,24 @@ +# P4(疲惫的工人)R2 评审 —— 《雨夜专案》 + +> 45 岁,工地收工,宿舍 21:00,外放小音量。依据 R2 两份转写 + R2 live 报告代入。R1 我提的三条,逐条对。 + +### 雨夜专案(R2 复审) + +- 状态感知:5/5 —— 账本随时翻得到,错指一回它当场告诉我「记档」了(main t+1009.9),不用我猜。 +- 下一步明确性:5/5 —— R1 我唯一的坎就是「都听完了它叫我换卷宗」。这回不一样了:听完六份它说「卷宗都在耳朵里了。挑一句你不信的,按住指证。」(main t+495.6),过一会儿又补一句「都听过了。按住屏幕,去指证。」(t+501.3)——直接告诉我手该往哪放,不用我干等 150 秒。扣的那 1 分补回来。 +- 愿意继续玩:是 —— 法槌照落、不催不罚,指错了还有「记档」而不是挨骂;保底那句提示现在的震动也轻了,不再像被训(R1 我说「头一下我当自己犯错了」,这回看了 stress t+1570.4 是轻震,好)。 +- P0 问题:无。 +- 建议: + 1. 选句那阵还是 15 秒一催「还在选证词。左右滑,单击确认」(main 多处)。我正一句一句过耳朵呢,催得还是紧。给我这种慢手把第一级放宽到 25 秒,或者催两遍之后只震不说话。 + 2. 「错指一回,记档」很好,但连着指错两回时,它两回念得一模一样。第二回起可以换个说法,比如「又错一回,也记档了」——不然我以为它卡带了。 + 3. 结案闸很好(「就此结案?单击,定下来;滑走,继续查。」——滑一下就出来),就是闸这句话有点长,听熟了以后想要个短一点的版本。 + +#### R1 建议对账 +1. 「都听完了、疑点没齐,直接指路按住屏幕去指证」→ 修好了,而且是两句话轮着指路,不是干等。**关案。** +2. 「指证每回都从第一句重新滑」→ 修好了:现在同一证人再进去,从上次定下的那句接着滑(live 报告里 z_1→z_4→z_2→z_3 的入口链我核对过),四回指证不用再听四遍「我七点进店上夜账」。**关案。** 选句还能按住快进,磨性子的事少了。 +3. 「帮忙的话别用训人的动静」→ 修好了:提示句现在配轻震,不再三连警告震。**关案。** + +#### 小节:保底与容错复核 +- 保底还是真的:乱按局 90 秒「还没听的卷宗先过一遍耳朵」、150 秒直接把矛盾对念出来(live B′ 时间戳都有),照着指就中;疑点没凑齐、凶器答错、动机答错,案子照样结,评级也说实话(stress 案一「补丁不少」)。 +- 指错了不挨嘲这条更稳了:不在场证明说完,补一句「错指一回,记档。」——像记账,不像记仇。凶器答错还是那句「铜屑不答应」,错在哪说得明白。 +- 没验到的:选错两句根本对不上的去指(钝木鱼那声)这轮转写还是没出现,但 R1 真机已经听过 cf_same「说得一致,不矛盾」了,我认这个账。 diff --git a/research/new8/detective/round2/synthesis.md b/research/new8/detective/round2/synthesis.md new file mode 100644 index 00000000..d06f8867 --- /dev/null +++ b/research/new8/detective/round2/synthesis.md @@ -0,0 +1,61 @@ +# R2 Synthesis —《雨夜专案》(detective) + +> 产品裁定 | 证据源:R2 真机复测(round2/live-player.md:F1-F11 全部现场坐实)+ 4 人设复审(p1-blind/p2-student/p3-office/p4-worker)+ R2 重生成转写(transcript-main/stress.md)+ 测试三绿(playtest 279 / guide 122 / check_all_assets)。 + +## 1. R2 裁决 + +| 评审方 | 状态感知 | 下一步明确 | 愿意继续玩 | +|---|---|---|---| +| P1 视障评委 | 5/5(+0.5) | 5/5 | **是** | +| P2 大学生 | 5/5 | 5/5(+1) | **是** | +| P3 白领 | 4.5/5(+0.5) | 5/5(+1) | **是** | +| P4 工人 | 5/5 | 5/5(+1) | **是** | +| 真机玩家(局 A′ 认真新手 / 局 B′ 急性子) | — | — | **是**(无附加修复条件) | + +**结论:6/6 愿意玩(4 人设 + 真机 2 局),P0 = 0,评分全面上行。R1 的 11 项修复全部现场坐实、零回退、零新问题。** 章程验收门核算:R1(5/5 愿意玩、无 P0 级状态混淆)+ R2(6/6、无 P0)= **连续 2 轮达标 → 《雨夜专案》达到「可交付」,批次验收门通过**(R3 不再启动,视上手反馈续)。 + +## 2. F 类修复复核结论(R1 synthesis 编号逐条) + +| # | 修复 | 复核结论 | 关键证据 | +|---|---|---|---| +| F1 | 兜底 8s→15s | **坐实** | live A′ intro_1 全时足播 OK sim=0.977(R1 同点 TRUNCATED 丢「川死了」) | +| F2 | D0→D1 串行化 | **坐实** | live A′ item_w2 落声→tut_listen 完整接播 OK sim=1(R1 只播 0.4s);playtest 序断言 | +| F3 | react 按轴取句 | **坐实** | live A′ 首发戳 M3→z_react_w OK sim=1(R1 同操作播「灯」答非所问);M1-M4 逐轴对 + 4/4 收官 z_react_4;转写同步 | +| F4 | 指认措辞 | **坐实** | 两局真凶问播 item_who_* 纯人名;「就指认这位?」;温太太分支无性别假话 | +| F5 | 结案确认闸 | **坐实** | live A′ 首击 fin_pre 不进三问、滑走撤闸、闸内再击进;转写压力线误闯不再坠三问 | +| F6 | 听齐未破指路 | **坐实** | live A′ recap_cf OK sim=0.89;gd_board_cf 断言+转写双证(live 落点与 recap_cf 长句撞车被 idle-only 丢弃——信息已由 recap_cf 送达,引擎既有语义,非回退) | +| F7 | 选句加速 | **坐实** | live A′ 选句入口链 z_1→z_4→z_2→z_3(记忆位);选句相位长按=引擎快进不震(ta=816.0 boost 成对) | +| F8 | 提示轻震 | **坐实** | 两局 hint 落点全部 confirm [20],warning 三连震绝迹 | +| F9 | 错指当场记账 | **坐实** | 两局错指链 acc→fin_clear→st_wrong 均 OK;结算 rate_a/rate_b 与当场账对账一致 | +| F10 | tut_skip 补动词 | **坐实** | R2 压力转写 t+5.1 新词「…按住屏幕,指证矛盾。」 | +| F11 | L2 疑点齐分支 | **坐实** | playtest 场景 10D 断言;live 4/4 后不再播 hint_b | + +V 类复核:V1(平铺回退 404 噪音)引擎级,维持观察不动作;V2(intro_w3 同嗓背靠背)维持待人耳试听,P1 复审跟进确认;V3(FINISH 入口双震)维持观察。 + +## 3. 测试与终检 + +- `tools/node/bin/node web/detective/test/playtest.mjs`:**279/279 通过**(断言含 F2 序、F3 按轴、F5 闸、F6 指路、F7 记忆/长按、F9 记账、F11 分支、gd_board_cf 触发;资产引用 150 id 缺失 0)。 +- `tools/node/bin/node web/harness/guide.test.mjs`:**122/122 通过**。 +- `python3 tools/check_all_assets.py`:**全项目通过**(detective:ogg/m4a 各 304、0 字节 0、解码失败 0;voice 双性别各 104 集合一致;平铺 53 豁免;key 各 14 ⊆ 主集)。 +- 资产对账:171 句 ≤176 新上限(旁白基表 104×2 + V 组 14×2 + NPC 53 = 289 条 ×2 格式 = 578 文件);GPU 生成全程 `flock .gpu.lock` 串行(两批:新增 29 wav + 改词 4 wav)。 + +## 4. 遗留清单(均为 P3/观察,不阻塞交付) + +| # | 事项 | 来源 | 处置 | +|---|---|---|---| +| L1 | intro_w3 与 male 旁白同嗓背靠背(音色归因风险最后一点) | R1 P1 专项 / R2 P1 建议 1(=V2) | 待人耳试听清单统一处理;若确认混淆,intro_w3 改 NPC 声或补半拍静默 | +| L2 | 无操作轨一级偏密(gd_board/gd_cf 15s 级连催;建议两级后只震不念) | R1 P3 建议 3 / R2 P3 建议 1 / P4 建议 1 | v2 打磨候选(参考 abyss 两级后仅环境声) | +| L3 | 案包仅 A/B 两包,第三局起可背答案 | R1 P2 / R2 P2 建议 1 / P1 建议 3 | 内容扩展(新案模板),不属迭代修复范畴 | +| L4 | 状态链只报数不报内容(「谁说过灯」要自己捞);建议加内容复述档 | R2 P3 状态感知 0.5 扣点 | v2 候选 | +| L5 | 板级位置提示(第几份/共七份半句) | R1/R2 P1 | v2 候选 | +| L6 | fin_pre/菜单句的熟手短版(第二次起 2 秒版) | R2 P3 建议 3 / P4 建议 3 | v2 候选 | +| L7 | st_wrong 连错时逐字重复(「又错一回」变体) | R2 P4 建议 2 | v2 候选 | +| L8 | 选句记忆位起播缺提示区分(「从上次停的那句起」) | R2 P2 建议 3 | v2 候选 | +| L9 | gd_board 在疑点 4/4 后仍播「换卷宗」词(指路已由 L2 hint_fin 覆盖) | R2 live A′ t=1119.97 | 观察,不动作 | +| L10 | NPC 平铺回退 404 噪音(引擎级);FINISH 入口 tap 双震(轻) | R1 V1/V3 | 引擎统一治理候选;维持观察 | + +仪器协议留档:live 驱动的 mark 一律取在触发动作之前(R2 两会话已执行);1.7x 会话 ASR MISMATCH 降权口径沿用。 + +## 5. 终止判定 + +对照批次验收门(≥3/4 人设愿意继续玩 且 无 P0 级状态混淆,连续 2 轮):**R1 达标 + R2 达标 → 连续 2 轮达成,《雨夜专案》标记「可交付」✅**。R3-R6 经用户裁定暂停,视上手反馈续;遗留清单 L1-L10 转入 v2 打磨候选。 \ No newline at end of file diff --git a/research/new8/detective/round2/transcript-main.md b/research/new8/detective/round2/transcript-main.md new file mode 100644 index 00000000..f08059a4 --- /dev/null +++ b/research/new8/detective/round2/transcript-main.md @@ -0,0 +1,635 @@ +# 试玩转写:《detective》 + +> 本文件是「玩家感知日志」:一位新手玩家的整局体验转写。语音列出了玩家听到的每句话全文, +> 音效/BGM/震动按发生时间列出。「静默」段 = 玩家什么也听不到。手势是剧本注入的(模拟真人手部动作), +> 非最优操作:包含犹豫、误操作与乱试。语音时长按语速估算(±20%),仅供节奏参考。 +t+ 0.0s (玩家点开游戏,轻触屏幕开始) +t+ 0.0s ♫ BGM 切换 → bgm/menu +t+ 0.0s ♪ 向导音:menu(系统界面) +t+ 0.0s 【状态】雨夜专案:一桩雨夜命案等着一双好耳朵 标题页:单击开始查案,上滑听案情简介(BGM=bgm/menu,语速1) + +#### 【玩家动作】单击,开始 + +t+ 0.0s ▶ 语音:「新案开卷。」 +t+ 2.1s ♫ BGM 切换 → bgm/board +t+ 2.1s ♪ 向导音:explore(探索/安全) +t+ 2.1s ▶ 语音:「雨下了一整夜。清晨,聚宝斋后院,古董商沈万川死了。」 +t+ 2.1s 【状态】开场三句案情简介 + 「先熟悉证词板」 教学第 0 步,跟着旁白做(下滑可跳过)(语音播放中,语速1) +t+ 4.2s ▶ 语音:「你是专案组探长。这桩案子,归你。」 +t+ 6.4s ▶ 语音:「卷宗六份:四位证人的证词,现场勘验,法医报告。」 +t+ 8.5s ▶ 语音:「先熟悉证词板。左右滑,换卷宗。」 +t+ 32.1s ♪ 向导音:nudge(看门狗轻提醒) +t+ 32.1s ♪ 向导音:watchdog(看门狗升级) +t+ 62.1s ♪ 向导音:nudge(看门狗轻提醒) +t+ 62.1s ▶ 语音:「先熟悉证词板。左右滑,换卷宗。」 + +#### 【玩家动作】右滑——换一份卷宗听听 + +t+ 62.1s ♪ 音效 sfx/paper_turn +t+ 62.1s ♪ 音效 sfx/sig_shun +t+ 62.1s ▶ 语音:「学徒小顺的证词。」 +t+ 62.1s 〰 震动:confirm(轻点确认) +t+ 64.2s ▶ 语音:「单击,听取当前卷宗。」 +t+ 66.4s ♪ 音效 sfx/paper_turn +t+ 66.4s ♪ 音效 sfx/sig_ge +t+ 66.8s ▶ 语音:「门卫老葛的证词。」 + +#### 【玩家动作】单击——听老葛的证词 + +t+ 77.1s ♪ 音效 sfx/sig_ge +t+ 77.6s ▶ 语音:「昨儿夜里雨大,我守着街门,一步没敢挪窝。」 +t+ 83.3s ▶ 语音:「后半夜,温太太还来门房借过一回热水。」 +t+ 88.7s ▶ 语音:「十点一刻,一位先生收着黑伞进了后巷。个儿高,微驼背。」 +t+ 95.8s ▶ 语音:「九点五十,周账房出的街门,跟我说了声,回家。」 +t+ 102.0s ▶ 语音:「九点四十,雨点子刚砸下来,小顺打着伞出的街门。」 +t+ 107.1s ♪ 向导音:nudge(看门狗轻提醒) +t+ 107.1s ♪ 向导音:watchdog(看门狗升级) +t+ 108.4s ▶ 语音:「听说店里账上短了银子,沈老板撂了话,月底清账。」 +t+ 114.8s ▶ 语音:「双击,重新听这一句。」 +t+ 114.8s 【状态】一份证词听完了——「已听一份,还有五份」 教学第 2 步,跟着旁白做(下滑可跳过)(语音播放中,语速1) + +#### 【玩家动作】双击——最后一句再过一遍耳朵 + +t+ 129.8s ▶ 语音:「听说店里账上短了银子,沈老板撂了话,月底清账。」 +t+ 135.5s ▶ 语音:「上滑,随时听进度:问了几份,疑点几处。」 + +#### 【玩家动作】上滑——听听问了几份、疑点几处 + +t+ 150.5s ▶ 语音:「已听一份,还有五份。」 +t+ 152.6s ▶ 语音:「疑点,还没有。」 +t+ 154.7s ▶ 语音:「接着查。」 +t+ 156.8s ▶ 语音:「按住屏幕,进入指证。去找两句对不上的证词。」 + +#### 【玩家动作】按住屏幕——进入指证 + +t+ 167.6s ♪ 向导音:choice(抉择/等待输入) +t+ 167.6s ♪ 向导音:turn(轮到你) +t+ 167.6s ▶ 语音:「指证矛盾。先选第一份证词。左右滑换,单击确认。」 +t+ 167.6s 〰 震动:confirm(轻点确认) +t+ 167.6s 【状态】练习一次指证:判定被教学截获,不算数 指证中:选第一份证词(左右滑换,单击确认,双击重听)(语音播放中,语速1) +t+ 169.7s ▶ 语音:「练习一次。选一份证词,单击确认;再选一份,任意一句。」 +t+ 171.8s ♪ 音效 sfx/sig_ge +t+ 172.3s ▶ 语音:「门卫老葛的证词。」 +t+ 182.6s ♪ 向导音:nudge(看门狗轻提醒) +t+ 182.6s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+ 197.6s ♪ 向导音:nudge(看门狗轻提醒) +t+ 197.6s ♪ 向导音:watchdog(看门狗升级) +t+ 197.6s ♪ 音效 sfx/sig_shun +t+ 198.0s ▶ 语音:「学徒小顺的证词。」 + +#### 【玩家动作】选定「学徒小顺的证词」——单击确认 + +t+ 200.1s ▶ 语音:「左右滑,一句一句听。」 +t+ 202.3s ▶ 语音:「夜里,师父打发我去城南,给刘掌柜送匣子。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 202.3s ▶ 语音:「夜里,师父打发我去城南,给刘掌柜送匣子。」 +t+ 207.2s ▶ 语音:「就这句?单击,定下来。」 +t+ 217.3s ♪ 向导音:nudge(看门狗轻提醒) +t+ 217.3s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 219.4s ▶ 语音:「再选与它矛盾的那份证词。」 +t+ 221.5s ▶ 语音:「夜里,师父打发我去城南,给刘掌柜送匣子。」 +t+ 234.4s ♪ 向导音:nudge(看门狗轻提醒) +t+ 234.4s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+ 249.4s ♪ 向导音:nudge(看门狗轻提醒) +t+ 249.4s ♪ 向导音:watchdog(看门狗升级) +t+ 249.4s ♪ 音效 sfx/sig_zhou +t+ 249.8s ▶ 语音:「账房周先生的证词。」 +t+ 249.8s ♪ 音效 sfx/sig_wen +t+ 250.3s ▶ 语音:「房东温太太的证词。」 +t+ 250.3s ♪ 音效 sfx/sig_scene +t+ 250.7s ▶ 语音:「现场勘验。」 + +#### 【玩家动作】选定「现场勘验」——单击确认 + +t+ 252.9s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 255.0s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 +t+ 257.1s ▶ 语音:「就这句?单击,定下来。」 +t+ 270.0s ♪ 向导音:nudge(看门狗轻提醒) +t+ 270.0s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 272.1s ▶ 语音:「指证就是这样。练习不算数,真矛盾要靠耳朵找。」 +t+ 272.1s 〰 震动:success(成功长震) +t+ 274.2s ▶ 语音:「教学完了。开始查案。」 +t+ 276.3s ♪ 向导音:explore(探索/安全) +t+ 276.3s 【状态】教学完了——「指证就是这样,真矛盾要靠耳朵找」 证词板上是「门卫老葛的证词」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) + +#### 【玩家动作】单击,听取门卫老葛的证词 + +t+ 281.3s ♪ 音效 sfx/sig_ge +t+ 281.8s ▶ 语音:「昨儿夜里雨大,我守着街门,一步没敢挪窝。」 +t+ 287.5s ▶ 语音:「后半夜,温太太还来门房借过一回热水。」 +t+ 292.9s ▶ 语音:「十点一刻,一位先生收着黑伞进了后巷。个儿高,微驼背。」 +t+ 300.0s ▶ 语音:「九点五十,周账房出的街门,跟我说了声,回家。」 +t+ 306.2s ▶ 语音:「九点四十,雨点子刚砸下来,小顺打着伞出的街门。」 +t+ 312.6s ▶ 语音:「听说店里账上短了银子,沈老板撂了话,月底清账。」 +t+ 319.0s 【状态】已听 1/6 份——门卫老葛的证词过完耳朵 证词板上是「门卫老葛的证词」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+ 319.0s ♪ 音效 sfx/paper_turn +t+ 319.0s ♪ 音效 sfx/sig_shun +t+ 319.5s ▶ 语音:「学徒小顺的证词。」 + +#### 【玩家动作】单击,听取学徒小顺的证词 + +t+ 321.2s ♪ 音效 sfx/sig_shun +t+ 321.6s ▶ 语音:「夜里,师父打发我去城南,给刘掌柜送匣子。」 +t+ 327.4s ▶ 语音:「雨太大,刘掌柜留我住的,今早才回店。」 +t+ 332.7s ▶ 语音:「库房钥匙?师父嫌沉,平日就挂在柴房墙上的铜钩。」 +t+ 339.1s ▶ 语音:「师父的账,向来只信周先生一个人。」 +t+ 344.0s ▶ 语音:「后门那闩,生人叫不开。熟人来了,师父才亲自去开。」 +t+ 350.7s ▶ 语音:「周先生常念叨,账房的活,越到夜里越清静。」 +t+ 359.0s 【状态】已听 2/6 份——学徒小顺的证词过完耳朵 证词板上是「学徒小顺的证词」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+ 359.0s ♪ 音效 sfx/paper_turn +t+ 359.0s ♪ 音效 sfx/sig_zhou +t+ 359.5s ▶ 语音:「账房周先生的证词。」 + +#### 【玩家动作】单击,听取账房周先生的证词 + +t+ 361.3s ♪ 音效 sfx/sig_zhou +t+ 361.8s ▶ 语音:「周先生,管了十年的账,见人三分笑。」 +t+ 363.9s ▶ 语音:「我七点进店上夜账。九点五十对完,锁了前门回家。」 +t+ 370.3s ▶ 语音:「临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。」 +t+ 377.0s ▶ 语音:「库房钥匙?沈老板贴身带着,从不离身。」 +t+ 382.3s ▶ 语音:「那伤,是松木劈柴砸的。铜秤?上个月卖给收废品的了。」 +t+ 389.2s ▶ 语音:「我到家倒头就睡,夜里的事,一概不知。」 +t+ 394.5s ▶ 语音:「你们要是不信,去问我家婆娘。」 +t+ 398.9s 【状态】已听 3/6 份——账房周先生的证词过完耳朵 证词板上是「账房周先生的证词」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+ 398.9s ♪ 音效 sfx/paper_turn +t+ 398.9s ♪ 音效 sfx/sig_wen +t+ 399.4s ▶ 语音:「房东温太太的证词。」 + +#### 【玩家动作】单击,听取房东温太太的证词 + +t+ 401.3s ♪ 音效 sfx/sig_wen +t+ 401.8s ▶ 语音:「雨是九点四十下的。我正收晾的衣裳,记得真真的。」 +t+ 408.2s ▶ 语音:「十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。」 +t+ 414.9s ▶ 语音:「刚回屋,柴房后墙咯噔一响,有人爬墙!花盆翻了一个。」 +t+ 421.7s ▶ 语音:「周账房那人,见人三分笑,账算得比谁都精。」 +t+ 427.5s ▶ 语音:「店里短银子的事,街坊都有耳闻。上礼拜他还摔了账本。」 +t+ 434.4s ▶ 语音:「吓得我蒙头半宿没睡着,天亮才敢吱声。」 +t+ 439.7s 【状态】已听 4/6 份——房东温太太的证词过完耳朵 证词板上是「房东温太太的证词」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+ 439.7s ♪ 音效 sfx/paper_turn +t+ 439.7s ♪ 音效 sfx/sig_scene +t+ 440.2s ▶ 语音:「现场勘验。」 + +#### 【玩家动作】单击,听取现场勘验 + +t+ 441.3s ♪ 音效 sfx/sig_scene +t+ 441.8s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 +t+ 444.7s ▶ 语音:「柴房门口,沈万川面朝下倒着。后脑一处伤,现场没有凶器。」 +t+ 447.6s ▶ 语音:「后门门闩完好,是死者自己开的门。生人叫不开这扇门。」 +t+ 450.5s ▶ 语音:「泥地上只有进来的脚印,没有出去的。墙根的花盆,翻了一个。」 +t+ 453.5s ▶ 语音:「库房铜秤立在架上,秤砣不见了。」 +t+ 456.4s ▶ 语音:「柴房墙上,挂钥匙的铜钩,空着。」 +t+ 459.3s 【状态】已听 5/6 份——现场勘验过完耳朵 证词板上是「现场勘验」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+ 459.3s ♪ 音效 sfx/paper_turn +t+ 459.3s ♪ 音效 sfx/sig_fore +t+ 459.8s ▶ 语音:「法医报告。」 + +#### 【玩家动作】单击,听取法医报告 + +t+ 461.3s ♪ 音效 sfx/sig_fore +t+ 461.8s ▶ 语音:「验尸报告,念给你听。」 +t+ 465.3s ▶ 语音:「死亡时间,昨夜十点到十点半。」 +t+ 469.8s ▶ 语音:「后脑单次钝器伤,一击毙命。创口嵌有铜屑,凶器是铜器。」 +t+ 476.9s ▶ 语音:「死者双手干净,没有搏斗痕迹。」 +t+ 481.3s ▶ 语音:「鞋底是干的。当夜,死者没出过后门。」 +t+ 491.3s 【状态】已听 6/6 份——法医报告过完耳朵 证词板上是「法医报告」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) + +#### 【玩家动作】上滑核对进度:六份都听完了,疑点还没坐实 + +t+ 491.3s ▶ 语音:「六份都听完了。」 +t+ 493.5s ▶ 语音:「疑点,还没有。」 +t+ 495.6s ▶ 语音:「卷宗都在耳朵里了。挑一句你不信的,按住指证。」 +t+ 501.3s ♪ 向导音:nudge(看门狗轻提醒) +t+ 501.3s ▶ 向导语音:「都听过了。按住屏幕,去指证。」 +t+ 516.3s ♪ 向导音:nudge(看门狗轻提醒) +t+ 516.3s ♪ 向导音:watchdog(看门狗升级) + +#### 【玩家动作】周先生说「顺手熄了灯」——先定下这句 + +t+ 521.3s ♪ 向导音:choice(抉择/等待输入) +t+ 521.3s ♪ 向导音:turn(轮到你) +t+ 521.3s ▶ 语音:「指证矛盾。先选第一份证词。左右滑换,单击确认。」 +t+ 521.3s 〰 震动:confirm(轻点确认) +t+ 523.5s ♪ 音效 sfx/sig_fore +t+ 523.9s ▶ 语音:「法医报告。」 +t+ 536.3s ♪ 音效 sfx/sig_ge +t+ 536.8s ▶ 语音:「门卫老葛的证词。」 +t+ 536.8s ♪ 音效 sfx/sig_shun +t+ 537.2s ▶ 语音:「学徒小顺的证词。」 +t+ 537.2s ♪ 音效 sfx/sig_zhou +t+ 537.7s ▶ 语音:「账房周先生的证词。」 + +#### 【玩家动作】选定「账房周先生的证词」——单击确认 + +t+ 539.8s ▶ 语音:「左右滑,一句一句听。」 +t+ 541.9s ▶ 语音:「我七点进店上夜账。九点五十对完,锁了前门回家。」 +t+ 541.9s ▶ 语音:「临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 547.8s ▶ 语音:「临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。」 +t+ 553.6s ▶ 语音:「就这句?单击,定下来。」 +t+ 562.8s ♪ 向导音:nudge(看门狗轻提醒) +t+ 562.8s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 564.9s ▶ 语音:「再选与它矛盾的那份证词。」 +t+ 567.0s ▶ 语音:「临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。」 +t+ 579.9s ♪ 向导音:nudge(看门狗轻提醒) +t+ 579.9s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+ 594.9s ♪ 向导音:nudge(看门狗轻提醒) +t+ 594.9s ♪ 向导音:watchdog(看门狗升级) + +#### 【玩家动作】温太太说「十点二十灯还亮着」——对上了! + +t+ 594.9s ♪ 音效 sfx/sig_wen +t+ 595.3s ▶ 语音:「房东温太太的证词。」 + +#### 【玩家动作】选定「房东温太太的证词」——单击确认 + +t+ 597.5s ▶ 语音:「雨是九点四十下的。我正收晾的衣裳,记得真真的。」 +t+ 603.1s ▶ 语音:「十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 609.0s ▶ 语音:「十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。」 +t+ 614.8s ▶ 语音:「就这句?单击,定下来。」 +t+ 624.0s ♪ 向导音:nudge(看门狗轻提醒) +t+ 624.0s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 626.1s ♪ 音效 sfx/contra_hit +t+ 626.1s ▶ 语音:「对不上!矛盾成立,记入疑点。」 +t+ 626.1s 〰 震动:success(成功长震) +t+ 628.2s ▶ 语音:「灯?……许是我记岔了。人上了岁数,记性不济。」 +t+ 633.6s ♪ 向导音:explore(探索/安全) +t+ 633.6s 【状态】疑点 1/4 坐实——真凶的反应一次比一次慌 证词板上是「法医报告」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) + +#### 【玩家动作】周先生说「钥匙贴身带着」 + +t+ 633.6s ♪ 向导音:choice(抉择/等待输入) +t+ 633.6s ♪ 向导音:turn(轮到你) +t+ 633.6s ▶ 语音:「指证矛盾。先选第一份证词。左右滑换,单击确认。」 +t+ 633.6s 〰 震动:confirm(轻点确认) +t+ 635.7s ♪ 音效 sfx/sig_fore +t+ 636.2s ▶ 语音:「法医报告。」 +t+ 648.6s ♪ 音效 sfx/sig_ge +t+ 649.1s ▶ 语音:「门卫老葛的证词。」 +t+ 649.1s ♪ 音效 sfx/sig_shun +t+ 649.5s ▶ 语音:「学徒小顺的证词。」 +t+ 649.5s ♪ 音效 sfx/sig_zhou +t+ 650.0s ▶ 语音:「账房周先生的证词。」 + +#### 【玩家动作】选定「账房周先生的证词」——单击确认 + +t+ 652.1s ▶ 语音:「左右滑,一句一句听。」 +t+ 654.2s ▶ 语音:「临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。」 +t+ 654.2s ▶ 语音:「库房钥匙?沈老板贴身带着,从不离身。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 658.7s ▶ 语音:「库房钥匙?沈老板贴身带着,从不离身。」 +t+ 663.2s ▶ 语音:「就这句?单击,定下来。」 +t+ 673.7s ♪ 向导音:nudge(看门狗轻提醒) +t+ 673.7s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 675.8s ▶ 语音:「再选与它矛盾的那份证词。」 +t+ 678.0s ▶ 语音:「库房钥匙?沈老板贴身带着,从不离身。」 +t+ 690.8s ♪ 向导音:nudge(看门狗轻提醒) +t+ 690.8s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+ 705.8s ♪ 向导音:nudge(看门狗轻提醒) +t+ 705.8s ♪ 向导音:watchdog(看门狗升级) + +#### 【玩家动作】小顺说「钥匙平日挂柴房铜钩」——对不上! + +t+ 705.8s ♪ 音效 sfx/sig_shun +t+ 706.3s ▶ 语音:「学徒小顺的证词。」 + +#### 【玩家动作】选定「学徒小顺的证词」——单击确认 + +t+ 708.4s ▶ 语音:「夜里,师父打发我去城南,给刘掌柜送匣子。」 +t+ 713.4s ▶ 语音:「雨太大,刘掌柜留我住的,今早才回店。」 +t+ 717.9s ▶ 语音:「库房钥匙?师父嫌沉,平日就挂在柴房墙上的铜钩。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 723.4s ▶ 语音:「库房钥匙?师父嫌沉,平日就挂在柴房墙上的铜钩。」 +t+ 729.0s ▶ 语音:「就这句?单击,定下来。」 +t+ 738.4s ♪ 向导音:nudge(看门狗轻提醒) +t+ 738.4s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 740.5s ♪ 音效 sfx/contra_hit +t+ 740.5s ▶ 语音:「对不上!矛盾成立,记入疑点。」 +t+ 740.5s 〰 震动:success(成功长震) +t+ 742.6s ▶ 语音:「钥匙的事……他、他有时候,也贴身带着的……」 +t+ 747.8s ♪ 向导音:explore(探索/安全) +t+ 747.8s 【状态】疑点 2/4 坐实——真凶的反应一次比一次慌 证词板上是「法医报告」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) + +#### 【玩家动作】周先生说「伤是松木劈柴砸的」 + +t+ 747.8s ♪ 向导音:choice(抉择/等待输入) +t+ 747.8s ♪ 向导音:turn(轮到你) +t+ 747.8s ▶ 语音:「指证矛盾。先选第一份证词。左右滑换,单击确认。」 +t+ 747.8s 〰 震动:confirm(轻点确认) +t+ 749.9s ♪ 音效 sfx/sig_fore +t+ 750.4s ▶ 语音:「法医报告。」 +t+ 762.8s ♪ 音效 sfx/sig_ge +t+ 763.3s ▶ 语音:「门卫老葛的证词。」 +t+ 763.3s ♪ 音效 sfx/sig_shun +t+ 763.7s ▶ 语音:「学徒小顺的证词。」 +t+ 763.7s ♪ 音效 sfx/sig_zhou +t+ 764.2s ▶ 语音:「账房周先生的证词。」 + +#### 【玩家动作】选定「账房周先生的证词」——单击确认 + +t+ 766.3s ▶ 语音:「左右滑,一句一句听。」 +t+ 768.4s ▶ 语音:「库房钥匙?沈老板贴身带着,从不离身。」 +t+ 768.4s ▶ 语音:「那伤,是松木劈柴砸的。铜秤?上个月卖给收废品的了。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 774.5s ▶ 语音:「那伤,是松木劈柴砸的。铜秤?上个月卖给收废品的了。」 +t+ 780.6s ▶ 语音:「就这句?单击,定下来。」 +t+ 789.5s ♪ 向导音:nudge(看门狗轻提醒) +t+ 789.5s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 791.6s ▶ 语音:「再选与它矛盾的那份证词。」 +t+ 793.7s ▶ 语音:「那伤,是松木劈柴砸的。铜秤?上个月卖给收废品的了。」 +t+ 806.6s ♪ 向导音:nudge(看门狗轻提醒) +t+ 806.6s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+ 821.6s ♪ 向导音:nudge(看门狗轻提醒) +t+ 821.6s ♪ 向导音:watchdog(看门狗升级) + +#### 【玩家动作】法医说「创口嵌有铜屑,凶器是铜器」——对不上! + +t+ 821.6s ♪ 音效 sfx/sig_wen +t+ 822.1s ▶ 语音:「房东温太太的证词。」 +t+ 822.1s ♪ 音效 sfx/sig_scene +t+ 822.5s ▶ 语音:「现场勘验。」 +t+ 822.5s ♪ 音效 sfx/sig_fore +t+ 823.0s ▶ 语音:「法医报告。」 + +#### 【玩家动作】选定「法医报告」——单击确认 + +t+ 825.1s ▶ 语音:「验尸报告,念给你听。」 +t+ 827.8s ▶ 语音:「死亡时间,昨夜十点到十点半。」 +t+ 831.5s ▶ 语音:「后脑单次钝器伤,一击毙命。创口嵌有铜屑,凶器是铜器。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 837.8s ▶ 语音:「后脑单次钝器伤,一击毙命。创口嵌有铜屑,凶器是铜器。」 +t+ 844.1s ▶ 语音:「就这句?单击,定下来。」 +t+ 852.8s ♪ 向导音:nudge(看门狗轻提醒) +t+ 852.8s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 854.9s ♪ 音效 sfx/contra_hit +t+ 854.9s ▶ 语音:「对不上!矛盾成立,记入疑点。」 +t+ 854.9s 〰 震动:success(成功长震) +t+ 857.0s ▶ 语音:「铜器?……我那是顺口猜的。凶器的事,我怎么会知道。」 +t+ 863.1s ♪ 向导音:explore(探索/安全) +t+ 863.1s 【状态】疑点 3/4 坐实——真凶的反应一次比一次慌 证词板上是「法医报告」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) + +#### 【玩家动作】还是周先生那句「铜秤卖给收废品的了」 + +t+ 863.1s ♪ 向导音:choice(抉择/等待输入) +t+ 863.1s ♪ 向导音:turn(轮到你) +t+ 863.1s ▶ 语音:「指证矛盾。先选第一份证词。左右滑换,单击确认。」 +t+ 863.1s 〰 震动:confirm(轻点确认) +t+ 865.2s ♪ 音效 sfx/sig_fore +t+ 865.6s ▶ 语音:「法医报告。」 +t+ 878.1s ♪ 音效 sfx/sig_ge +t+ 878.5s ▶ 语音:「门卫老葛的证词。」 +t+ 878.5s ♪ 音效 sfx/sig_shun +t+ 879.0s ▶ 语音:「学徒小顺的证词。」 +t+ 879.0s ♪ 音效 sfx/sig_zhou +t+ 879.4s ▶ 语音:「账房周先生的证词。」 + +#### 【玩家动作】选定「账房周先生的证词」——单击确认 + +t+ 881.5s ▶ 语音:「左右滑,一句一句听。」 +t+ 883.7s ▶ 语音:「那伤,是松木劈柴砸的。铜秤?上个月卖给收废品的了。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 883.7s ▶ 语音:「那伤,是松木劈柴砸的。铜秤?上个月卖给收废品的了。」 +t+ 889.7s ▶ 语音:「就这句?单击,定下来。」 +t+ 898.7s ♪ 向导音:nudge(看门狗轻提醒) +t+ 898.7s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 900.8s ▶ 语音:「再选与它矛盾的那份证词。」 +t+ 902.9s ▶ 语音:「那伤,是松木劈柴砸的。铜秤?上个月卖给收废品的了。」 +t+ 915.8s ♪ 向导音:nudge(看门狗轻提醒) +t+ 915.8s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+ 930.8s ♪ 向导音:nudge(看门狗轻提醒) +t+ 930.8s ♪ 向导音:watchdog(看门狗升级) + +#### 【玩家动作】现场勘验说「铜秤立在架上」——对不上! + +t+ 930.8s ♪ 音效 sfx/sig_wen +t+ 931.2s ▶ 语音:「房东温太太的证词。」 +t+ 931.2s ♪ 音效 sfx/sig_scene +t+ 931.7s ▶ 语音:「现场勘验。」 + +#### 【玩家动作】选定「现场勘验」——单击确认 + +t+ 933.8s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 +t+ 935.9s ▶ 语音:「柴房墙上,挂钥匙的铜钩,空着。」 +t+ 938.0s ▶ 语音:「库房铜秤立在架上,秤砣不见了。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 940.2s ▶ 语音:「库房铜秤立在架上,秤砣不见了。」 +t+ 942.3s ▶ 语音:「就这句?单击,定下来。」 +t+ 955.2s ♪ 向导音:nudge(看门狗轻提醒) +t+ 955.2s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 957.3s ♪ 音效 sfx/contra_hit +t+ 957.3s ▶ 语音:「对不上!矛盾成立,记入疑点。」 +t+ 957.3s 〰 震动:success(成功长震) +t+ 959.4s ▶ 语音:「秤!秤的事,你们别再问了……」 +t+ 963.0s ▶ 语音:「……随你们怎么问。我要回去了。」 +t+ 966.9s ▶ 语音:「疑点齐了。去结案陈词。」 +t+ 969.0s ♪ 向导音:explore(探索/安全) +t+ 969.0s 【状态】疑点 4/4 坐实——真凶的反应一次比一次慌 证词板上是「法医报告」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+ 969.0s 【状态】四处疑点齐了——「疑点齐了,去结案陈词」 证词板上是「法医报告」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+ 969.0s ♪ 音效 sfx/paper_turn +t+ 969.0s ♪ 向导音:turn(轮到你) +t+ 969.5s ▶ 语音:「结案陈词。」 + +#### 【玩家动作】翻到结案陈词——单击过确认闸(「就此结案?」),再单击进三问 + +t+ 971.6s ▶ 语音:「证据在手,就此结案?单击,定下来;滑走,继续查。」 +t+ 979.0s ♪ 向导音:choice(抉择/等待输入) +t+ 979.0s ♪ 向导音:turn(轮到你) +t+ 979.0s ▶ 语音:「结案陈词。先指认真凶:四位证人,选一个。」 +t+ 979.0s 〰 震动:confirm(轻点确认) +t+ 981.1s ▶ 语音:「门卫老葛。」 + +#### 【玩家动作】先怀疑小顺——右滑选他,单击 + +t+ 981.1s ▶ 语音:「学徒小顺。」 +t+ 983.2s ▶ 语音:「学徒小顺。」 +t+ 985.4s ▶ 语音:「就指认这位?单击,定下来。」 +t+1003.2s ♪ 向导音:nudge(看门狗轻提醒) +t+1003.2s ▶ 向导语音:「在想?左右滑选,单击定。」 + +#### 【玩家动作】单击,定下来 + +t+1003.2s ▶ 语音:「我宿在城南刘掌柜家,他全家都能作证!」 +t+1007.8s ▶ 语音:「不在场证明成立。证据放人,回到证词板。」 +t+1009.9s ▶ 语音:「错指一回,记档。」 +t+1012.0s ♪ 向导音:explore(探索/安全) +t+1012.0s 【状态】错怪了——小顺宿在城南刘掌柜家,不在场证明成立,回到证词板(无限再机会) 证词板上是「结案陈词」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) + +#### 【玩家动作】翻到结案陈词——单击过确认闸(「就此结案?」),再单击进三问 + +t+1017.0s ▶ 语音:「证据在手,就此结案?单击,定下来;滑走,继续查。」 +t+1022.0s ♪ 向导音:choice(抉择/等待输入) +t+1022.0s ♪ 向导音:turn(轮到你) +t+1022.0s ▶ 语音:「结案陈词。先指认真凶:四位证人,选一个。」 +t+1022.0s 〰 震动:confirm(轻点确认) +t+1024.1s ▶ 语音:「门卫老葛。」 + +#### 【玩家动作】证据都指向周先生——右滑两下选他 + +t+1024.1s ▶ 语音:「学徒小顺。」 +t+1024.1s ▶ 语音:「账房周先生。」 +t+1026.2s ▶ 语音:「账房周先生。」 +t+1028.4s ▶ 语音:「就指认这位?单击,定下来。」 +t+1046.2s ♪ 向导音:nudge(看门狗轻提醒) +t+1046.2s ▶ 向导语音:「在想?左右滑选,单击定。」 + +#### 【玩家动作】单击,正式指认 + +t+1046.2s ♪ 向导音:turn(轮到你) +t+1046.2s ▶ 语音:「第二问:凶器是什么?」 +t+1046.2s 〰 震动:confirm(轻点确认) +t+1048.4s ▶ 语音:「松木劈柴。」 +t+1050.5s 【状态】第二问:凶器是什么?四个选项一个个听 结案三问——第二问:凶器是什么(左右滑选,单击定)(BGM=bgm/board,语速1) +t+1050.5s ▶ 语音:「铁门闩。」 +t+1052.6s ▶ 语音:「铜秤砣。」 + +#### 【玩家动作】铜屑不答应别的答案——选「铜秤砣」,单击 + +t+1054.7s ▶ 语音:「对。创口的铜屑,不见了的秤砣,都指向它。」 +t+1056.8s ♪ 向导音:turn(轮到你) +t+1056.8s ▶ 语音:「第三问:动机是什么?」 +t+1056.8s 〰 震动:confirm(轻点确认) +t+1059.0s ▶ 语音:「劫财入户。」 +t+1059.0s 【状态】第三问:动机是什么? 结案三问——第三问:动机是什么(左右滑选,单击定)(语音播放中,语速1) +t+1059.0s ▶ 语音:「监守自盗。」 + +#### 【玩家动作】账上短的东西才是引线——选「监守自盗」,单击 + +t+1061.1s ▶ 语音:「对。库里短的东西,就是引线。」 +t+1063.2s ♫ BGM 切换 → bgm/verdict(淡入 800ms) +t+1063.2s ♪ 向导音:settle(结算) +t+1063.2s ▶ 语音:「证据链闭合。周先生,你还有什么话说?」 +t+1063.2s 〰 震动:success(成功长震) +t+1063.2s 【状态】证据链闭合——周先生认罪三段,雨声渐强又落下,法槌落定 裁决链播报中:认罪三段与法槌,手势全部被吞(链锁)(语音播放中,语速1) +t+1065.3s ♪ 音效 sfx/rain_swell +t+1065.3s ▶ 语音:「别念了……我说。库房短的三件货,是我抵了赌债。」 +t+1071.0s ▶ 语音:「他说月底清账,要报官。我求他,他不肯。」 +t+1075.7s ▶ 语音:「我只想把钥匙放回去,把被盗做真。抡起秤砣的时候,他认出了我。」 +t+1082.9s ♪ 音效 sfx/gavel +t+1082.9s ♫ BGM 切换 → bgm/menu +t+1082.9s ▶ 语音:「案件归档。雨,停了。」 +t+1085.0s ▶ 语音:「干净利落的结案。」 +t+1087.1s ▶ 语音:「疑点,四处,齐了。」 +t+1089.2s ▶ 语音:「指证,一次没错。」 +t+1091.4s ▶ 语音:「同一场雨里,还有别的案子。单击,接新案。」 +t+1093.5s ♪ 向导音:menu(系统界面) +t+1093.5s 【状态】案件归档,雨停了——评级 A:疑点 4/4,错指 1 次 结算:评级与账目播完,单击接新案(pack 翻转)(BGM=bgm/menu,语速1) + +#### 【玩家动作】单击——接新案(同一场雨里,还有别的案子) + +t+1093.5s ▶ 语音:「新案开卷。」 +t+1095.6s ♫ BGM 切换 → bgm/board +t+1095.6s ♪ 向导音:explore(探索/安全) +t+1095.6s 【状态】新案开卷:pack 翻转——这回的真凶换了人 证词板上是「门卫老葛的证词」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) + +#### 【玩家动作】小顺说「我走的时候熄了灯」——变体案的第一句谎 + +t+1095.6s ♪ 向导音:choice(抉择/等待输入) +t+1095.6s ♪ 向导音:turn(轮到你) +t+1095.6s ▶ 语音:「指证矛盾。先选第一份证词。左右滑换,单击确认。」 +t+1095.6s 〰 震动:confirm(轻点确认) +t+1097.7s ♪ 音效 sfx/sig_ge +t+1098.2s ▶ 语音:「门卫老葛的证词。」 +t+1110.6s ♪ 音效 sfx/sig_shun +t+1111.1s ▶ 语音:「学徒小顺的证词。」 + +#### 【玩家动作】选定「学徒小顺的证词」——单击确认 + +t+1113.2s ▶ 语音:「左右滑,一句一句听。」 +t+1115.3s ▶ 语音:「夜里,师父打发我去城南,给刘掌柜送匣子。」 +t+1115.3s ▶ 语音:「雨太大,刘掌柜留我住的,今早才回店。」 +t+1119.8s ▶ 语音:「我走的时候,顺手熄了店堂的灯。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+1123.7s ▶ 语音:「我走的时候,顺手熄了店堂的灯。」 +t+1127.5s ▶ 语音:「就这句?单击,定下来。」 +t+1138.7s ♪ 向导音:nudge(看门狗轻提醒) +t+1138.7s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+1140.8s ▶ 语音:「再选与它矛盾的那份证词。」 +t+1142.9s ▶ 语音:「我走的时候,顺手熄了店堂的灯。」 +t+1155.8s ♪ 向导音:nudge(看门狗轻提醒) +t+1155.8s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+1170.8s ♪ 向导音:nudge(看门狗轻提醒) +t+1170.8s ♪ 向导音:watchdog(看门狗升级) + +#### 【玩家动作】温太太还是那句话「灯还亮着」——对上了! + +t+1170.8s ♪ 音效 sfx/sig_zhou +t+1171.2s ▶ 语音:「账房周先生的证词。」 +t+1171.2s ♪ 音效 sfx/sig_wen +t+1171.7s ▶ 语音:「房东温太太的证词。」 + +#### 【玩家动作】选定「房东温太太的证词」——单击确认 + +t+1173.8s ▶ 语音:「雨是九点四十下的。我正收晾的衣裳,记得真真的。」 +t+1179.4s ▶ 语音:「十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+1185.3s ▶ 语音:「十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。」 +t+1191.1s ▶ 语音:「就这句?单击,定下来。」 +t+1200.3s ♪ 向导音:nudge(看门狗轻提醒) +t+1200.3s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+1202.4s ♪ 音效 sfx/contra_hit +t+1202.4s ▶ 语音:「对不上!矛盾成立,记入疑点。」 +t+1202.4s 〰 震动:success(成功长震) +t+1204.5s ▶ 语音:「灯?我、我走的时候明明熄了……」 +t+1208.4s ♪ 向导音:explore(探索/安全) +t+1208.4s 【状态】变体案疑点 1/4——真凶另有其人,收工 证词板上是「门卫老葛的证词」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) diff --git a/research/new8/detective/round2/transcript-stress.md b/research/new8/detective/round2/transcript-stress.md new file mode 100644 index 00000000..b20234a9 --- /dev/null +++ b/research/new8/detective/round2/transcript-stress.md @@ -0,0 +1,701 @@ +# 试玩转写:《detective》 + +> 本文件是「玩家感知日志」:一位新手玩家的整局体验转写。语音列出了玩家听到的每句话全文, +> 音效/BGM/震动按发生时间列出。「静默」段 = 玩家什么也听不到。手势是剧本注入的(模拟真人手部动作), +> 非最优操作:包含犹豫、误操作与乱试。语音时长按语速估算(±20%),仅供节奏参考。 +t+ 0.0s (玩家点开游戏,轻触屏幕开始) +t+ 0.0s ♫ BGM 切换 → bgm/menu +t+ 0.0s ♪ 向导音:menu(系统界面) +t+ 0.0s 【状态】标题页乱划一气 标题页:单击开始查案,上滑听案情简介(BGM=bgm/menu,语速1) +t+ 0.0s ▶ 向导语音:「这个操作,这里用不上。」 +t+ 0.0s 〰 震动:error(做错了:两连短震) +t+ 2.1s 【状态】标题页乱划一气 标题页:单击开始查案,上滑听案情简介(BGM=bgm/menu,语速1) +t+ 2.1s 【状态】标题页乱划一气 标题页:单击开始查案,上滑听案情简介(BGM=bgm/menu,语速1) +t+ 2.1s 〰 震动:error(做错了:两连短震) +t+ 2.1s 【状态】标题页乱划一气 标题页:单击开始查案,上滑听案情简介(BGM=bgm/menu,语速1) +t+ 2.1s 【状态】标题页乱划一气 标题页:单击开始查案,上滑听案情简介(BGM=bgm/menu,语速1) +t+ 2.1s 【状态】标题页乱划一气 标题页:单击开始查案,上滑听案情简介(BGM=bgm/menu,语速1) +t+ 2.1s 【状态】标题页乱划一气 标题页:单击开始查案,上滑听案情简介(BGM=bgm/menu,语速1) +t+ 2.1s 【状态】标题页乱划一气 标题页:单击开始查案,上滑听案情简介(BGM=bgm/menu,语速1) +t+ 2.1s ▶ 语音:「新案开卷。」 +t+ 4.2s ♫ BGM 切换 → bgm/board +t+ 4.2s ♪ 向导音:explore(探索/安全) +t+ 4.2s ▶ 语音:「雨下了一整夜。清晨,聚宝斋后院,古董商沈万川死了。」 +t+ 4.2s 〰 震动:error(做错了:两连短震) + +#### 【玩家动作】下滑,跳过教学 + +t+ 5.1s ▶ 语音:「已跳过教学。左右滑换卷宗,单击听取;按住屏幕,指证矛盾。」 +t+ 7.2s ♪ 向导音:explore(探索/安全) +t+ 7.2s 【状态】总算从教学里滚出来了(可能一路错过来的) 证词板上是「门卫老葛的证词」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+ 7.2s ♪ 音效 sfx/sig_ge +t+ 12.2s ♪ 音效 sfx/paper_turn +t+ 12.2s ♪ 音效 sfx/sig_shun +t+ 12.7s ▶ 语音:「学徒小顺的证词。」 +t+ 14.8s ♪ 音效 sfx/paper_turn +t+ 14.8s ♪ 音效 sfx/sig_ge +t+ 15.2s ▶ 语音:「门卫老葛的证词。」 +t+ 17.2s ▶ 语音:「昨儿夜里雨大,我守着街门,一步没敢挪窝。」 +t+ 22.2s ♪ 音效 sfx/paper_turn +t+ 22.2s ♪ 向导音:turn(轮到你) +t+ 22.6s ▶ 语音:「结案陈词。」 +t+ 24.8s ♪ 音效 sfx/paper_turn +t+ 24.8s ♪ 音效 sfx/sig_fore +t+ 25.2s ▶ 语音:「法医报告。」 +t+ 32.2s ♪ 音效 sfx/sig_fore +t+ 37.2s ♪ 音效 sfx/paper_turn +t+ 37.2s ♪ 向导音:turn(轮到你) +t+ 37.7s ▶ 语音:「结案陈词。」 +t+ 39.8s ♪ 音效 sfx/paper_turn +t+ 39.8s ♪ 音效 sfx/sig_fore +t+ 40.2s ▶ 语音:「法医报告。」 +t+ 42.2s ▶ 语音:「验尸报告,念给你听。」 +t+ 45.0s ♪ 音效 sfx/paper_turn +t+ 45.0s ♪ 音效 sfx/sig_scene +t+ 45.4s ▶ 语音:「现场勘验。」 +t+ 47.2s ♪ 音效 sfx/paper_turn +t+ 47.2s ♪ 音效 sfx/sig_fore +t+ 47.7s ▶ 语音:「法医报告。」 +t+ 52.2s ♪ 音效 sfx/turn_tick +t+ 52.2s ♪ 音效 sfx/sig_fore +t+ 57.2s ♪ 音效 sfx/paper_turn +t+ 57.2s ♪ 向导音:turn(轮到你) +t+ 57.7s ▶ 语音:「结案陈词。」 +t+ 59.8s ♪ 音效 sfx/paper_turn +t+ 59.8s ♪ 音效 sfx/sig_fore +t+ 60.2s ▶ 语音:「法医报告。」 +t+ 62.2s ▶ 语音:「验尸报告,念给你听。」 +t+ 65.0s ♪ 音效 sfx/paper_turn +t+ 65.0s ♪ 音效 sfx/sig_scene + +#### 【玩家动作】手痒开菜单乱逛——只敢下滑关掉 + +t+ 65.0s ♫ BGM 切换 → bgm/menu +t+ 65.0s ♪ 向导音:menu(系统界面) +t+ 65.0s ▶ 语音:「菜单。单击切换,双击确认。」 +t+ 67.1s ▶ 语音:「回到证词板。」 +t+ 67.1s ♫ BGM 切换 → bgm/board +t+ 67.1s ♪ 向导音:explore(探索/安全) +t+ 67.9s ♪ 音效 sfx/paper_turn +t+ 67.9s ♪ 音效 sfx/sig_wen +t+ 68.4s ▶ 语音:「房东温太太的证词。」 +t+ 70.5s ♪ 音效 sfx/paper_turn +t+ 70.5s ♪ 音效 sfx/sig_scene +t+ 71.0s ▶ 语音:「现场勘验。」 +t+ 77.1s ♪ 音效 sfx/sig_scene +t+ 80.0s ♪ 音效 sfx/paper_turn +t+ 80.0s ♪ 音效 sfx/sig_fore +t+ 80.4s ▶ 语音:「法医报告。」 +t+ 82.1s ♪ 音效 sfx/paper_turn +t+ 82.1s ♪ 音效 sfx/sig_scene +t+ 82.5s ▶ 语音:「现场勘验。」 +t+ 84.7s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 +t+ 86.8s ♪ 音效 sfx/paper_turn +t+ 86.8s ♪ 音效 sfx/sig_wen +t+ 87.2s ▶ 语音:「房东温太太的证词。」 +t+ 89.3s ♪ 音效 sfx/paper_turn +t+ 89.3s ♪ 音效 sfx/sig_scene +t+ 89.8s ▶ 语音:「现场勘验。」 +t+ 97.1s ♪ 音效 sfx/sig_scene +t+ 99.7s ♪ 音效 sfx/paper_turn +t+ 99.7s ♪ 音效 sfx/sig_fore +t+ 100.1s ▶ 语音:「法医报告。」 +t+ 102.1s ▶ 语音:「探长,还没听的卷宗,先过一遍耳朵。」 +t+ 102.1s 〰 震动:confirm(轻点确认) +t+ 102.1s ♪ 音效 sfx/paper_turn +t+ 102.1s ♪ 音效 sfx/sig_scene +t+ 102.5s ▶ 语音:「现场勘验。」 +t+ 104.7s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 +t+ 106.8s ♪ 音效 sfx/paper_turn +t+ 106.8s ♪ 音效 sfx/sig_wen +t+ 107.2s ▶ 语音:「房东温太太的证词。」 +t+ 109.3s ♪ 音效 sfx/paper_turn +t+ 109.3s ♪ 音效 sfx/sig_scene +t+ 109.8s ▶ 语音:「现场勘验。」 +t+ 117.1s ♪ 音效 sfx/sig_scene +t+ 119.7s ♪ 音效 sfx/paper_turn +t+ 119.7s ♪ 音效 sfx/sig_fore +t+ 120.1s ▶ 语音:「法医报告。」 +t+ 122.1s ♪ 音效 sfx/paper_turn +t+ 122.1s ♪ 音效 sfx/sig_scene +t+ 122.5s ▶ 语音:「现场勘验。」 +t+ 124.7s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 +t+ 126.8s ♪ 音效 sfx/paper_turn +t+ 126.8s ♪ 音效 sfx/sig_wen +t+ 127.2s ▶ 语音:「房东温太太的证词。」 +t+ 129.3s ♪ 音效 sfx/paper_turn +t+ 129.3s ♪ 音效 sfx/sig_scene +t+ 129.8s ▶ 语音:「现场勘验。」 +t+ 137.1s ♪ 音效 sfx/sig_scene + +#### 【玩家动作】手痒开菜单乱逛——只敢下滑关掉 + +t+ 137.1s ♫ BGM 切换 → bgm/menu +t+ 137.1s ♪ 向导音:menu(系统界面) +t+ 137.1s ▶ 语音:「菜单。单击切换,双击确认。」 +t+ 139.2s ▶ 语音:「回到证词板。」 +t+ 139.2s ♫ BGM 切换 → bgm/board +t+ 139.2s ♪ 向导音:explore(探索/安全) +t+ 140.1s ♪ 音效 sfx/sig_scene +t+ 144.2s ♪ 音效 sfx/paper_turn +t+ 144.2s ♪ 音效 sfx/sig_fore +t+ 144.7s ▶ 语音:「法医报告。」 +t+ 146.8s ♪ 音效 sfx/paper_turn +t+ 146.8s ♪ 音效 sfx/sig_scene +t+ 147.2s ▶ 语音:「现场勘验。」 +t+ 149.2s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 +t+ 151.3s ♪ 音效 sfx/paper_turn +t+ 151.3s ♪ 音效 sfx/sig_wen +t+ 151.8s ▶ 语音:「房东温太太的证词。」 +t+ 153.9s ♪ 音效 sfx/paper_turn +t+ 153.9s ♪ 音效 sfx/sig_scene +t+ 154.3s ▶ 语音:「现场勘验。」 +t+ 159.2s ♪ 音效 sfx/sig_scene +t+ 164.2s ♪ 音效 sfx/paper_turn +t+ 164.2s ♪ 音效 sfx/sig_fore +t+ 164.2s ▶ 语音:「试试指证:周先生说铜秤卖了,现场铜秤还在。」 +t+ 164.7s ▶ 语音:「法医报告。」 +t+ 164.2s 〰 震动:confirm(轻点确认) +t+ 166.8s ♪ 音效 sfx/paper_turn +t+ 166.8s ♪ 音效 sfx/sig_scene +t+ 167.2s ▶ 语音:「现场勘验。」 +t+ 169.2s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 + +#### 【玩家动作】手痒开菜单乱逛——只敢下滑关掉 + +t+ 169.2s ♫ BGM 切换 → bgm/menu +t+ 169.2s ♪ 向导音:menu(系统界面) +t+ 169.2s ▶ 语音:「菜单。单击切换,双击确认。」 +t+ 171.3s ▶ 语音:「回到证词板。」 +t+ 171.3s ♫ BGM 切换 → bgm/board +t+ 171.3s ♪ 向导音:explore(探索/安全) +t+ 172.2s ▶ 语音:「你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。」 +t+ 174.3s ♪ 音效 sfx/paper_turn +t+ 174.3s ♪ 音效 sfx/sig_wen +t+ 174.8s ▶ 语音:「房东温太太的证词。」 +t+ 176.3s ♪ 音效 sfx/paper_turn +t+ 176.3s ♪ 音效 sfx/sig_scene + +#### 【玩家动作】手痒开菜单乱逛——只敢下滑关掉 + +t+ 176.3s ♫ BGM 切换 → bgm/menu +t+ 176.3s ♪ 向导音:menu(系统界面) +t+ 176.3s ▶ 语音:「菜单。单击切换,双击确认。」 +t+ 178.4s ▶ 语音:「回到证词板。」 +t+ 178.4s ♫ BGM 切换 → bgm/board +t+ 178.4s ♪ 向导音:explore(探索/安全) +t+ 179.3s ♪ 音效 sfx/paper_turn +t+ 179.3s ♪ 音效 sfx/sig_fore +t+ 179.8s ▶ 语音:「法医报告。」 +t+ 183.4s ♪ 音效 sfx/sig_fore +t+ 188.4s ♪ 音效 sfx/paper_turn +t+ 188.4s ♪ 向导音:turn(轮到你) +t+ 188.9s ▶ 语音:「结案陈词。」 +t+ 191.0s ♪ 音效 sfx/paper_turn +t+ 191.0s ♪ 音效 sfx/sig_fore +t+ 191.5s ▶ 语音:「法医报告。」 +t+ 193.4s 【状态】乱按也被抢救:听到了保底提示直接给出可指证的矛盾对 证词板上是「法医报告」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(语音播放中,语速1) + +#### 【玩家动作】照着提示指证:z_2 这句 + +t+ 198.4s ♪ 向导音:choice(抉择/等待输入) +t+ 198.4s ♪ 向导音:turn(轮到你) +t+ 198.4s ▶ 语音:「指证矛盾。先选第一份证词。左右滑换,单击确认。」 +t+ 198.4s 〰 震动:confirm(轻点确认) +t+ 200.6s ♪ 音效 sfx/sig_fore +t+ 201.0s ▶ 语音:「法医报告。」 +t+ 213.4s ♪ 音效 sfx/sig_ge +t+ 213.9s ▶ 语音:「门卫老葛的证词。」 +t+ 213.9s ♪ 音效 sfx/sig_shun +t+ 214.3s ▶ 语音:「学徒小顺的证词。」 +t+ 214.3s ♪ 音效 sfx/sig_zhou +t+ 214.8s ▶ 语音:「账房周先生的证词。」 + +#### 【玩家动作】选定「账房周先生的证词」——单击确认 + +t+ 216.9s ▶ 语音:「左右滑,一句一句听。」 +t+ 219.0s ▶ 语音:「我七点进店上夜账。九点五十对完,锁了前门回家。」 +t+ 219.0s ▶ 语音:「临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 224.9s ▶ 语音:「临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。」 +t+ 230.7s ▶ 语音:「就这句?单击,定下来。」 +t+ 239.9s ♪ 向导音:nudge(看门狗轻提醒) +t+ 239.9s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 242.0s ▶ 语音:「再选与它矛盾的那份证词。」 +t+ 244.1s ▶ 语音:「临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。」 +t+ 257.0s ♪ 向导音:nudge(看门狗轻提醒) +t+ 257.0s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 +t+ 272.0s ♪ 向导音:nudge(看门狗轻提醒) +t+ 272.0s ♪ 向导音:watchdog(看门狗升级) + +#### 【玩家动作】对上 wen_2 这句 + +t+ 272.0s ♪ 音效 sfx/sig_wen +t+ 272.5s ▶ 语音:「房东温太太的证词。」 + +#### 【玩家动作】选定「房东温太太的证词」——单击确认 + +t+ 274.6s ▶ 语音:「雨是九点四十下的。我正收晾的衣裳,记得真真的。」 +t+ 280.2s ▶ 语音:「十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。」 + +#### 【玩家动作】听到那句对不上的了——单击,进入确认 + +t+ 286.1s ▶ 语音:「十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。」 +t+ 291.9s ▶ 语音:「就这句?单击,定下来。」 +t+ 301.1s ♪ 向导音:nudge(看门狗轻提醒) +t+ 301.1s ▶ 向导语音:「还在选证词。左右滑,单击确认。」 + +#### 【玩家动作】单击,定下这句 + +t+ 303.2s ♪ 音效 sfx/contra_hit +t+ 303.2s ▶ 语音:「对不上!矛盾成立,记入疑点。」 +t+ 303.2s 〰 震动:success(成功长震) +t+ 305.3s ▶ 语音:「灯?……许是我记岔了。人上了岁数,记性不济。」 +t+ 310.7s ♪ 向导音:explore(探索/安全) +t+ 310.7s 【状态】乱按局也能坐实疑点(1/4) 证词板上是「法医报告」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+ 310.7s ♪ 音效 sfx/paper_turn +t+ 310.7s ♪ 向导音:turn(轮到你) +t+ 311.2s ▶ 语音:「结案陈词。」 + +#### 【玩家动作】翻到结案陈词——单击过确认闸(「就此结案?」),再单击进三问 + +t+ 313.3s ▶ 语音:「证据在手,就此结案?单击,定下来;滑走,继续查。」 +t+ 320.7s ♪ 向导音:choice(抉择/等待输入) +t+ 320.7s ♪ 向导音:turn(轮到你) +t+ 320.7s ▶ 语音:「结案陈词。先指认真凶:四位证人,选一个。」 +t+ 320.7s 〰 震动:confirm(轻点确认) +t+ 322.8s ▶ 语音:「门卫老葛。」 + +#### 【玩家动作】先胡乱指一个听听反应 + +t+ 322.8s ▶ 语音:「门卫老葛。」 +t+ 324.9s ▶ 语音:「就指认这位?单击,定下来。」 +t+ 342.8s ♪ 向导音:nudge(看门狗轻提醒) +t+ 342.8s ▶ 向导语音:「在想?左右滑选,单击定。」 +t+ 342.8s ▶ 语音:「我守了一夜门!温太太来借热水,她能作证!」 +t+ 347.8s ▶ 语音:「不在场证明成立。证据放人,回到证词板。」 +t+ 349.9s ▶ 语音:「错指一回,记档。」 +t+ 352.0s ♪ 向导音:explore(探索/安全) +t+ 362.0s ♪ 向导音:nudge(看门狗轻提醒) +t+ 362.0s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+ 377.0s ♪ 向导音:nudge(看门狗轻提醒) +t+ 377.0s ♪ 向导音:watchdog(看门狗升级) +t+ 382.0s ▶ 语音:「证据在手,就此结案?单击,定下来;滑走,继续查。」 +t+ 392.0s ♪ 向导音:nudge(看门狗轻提醒) +t+ 392.0s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+ 392.0s ♪ 音效 sfx/turn_tick +t+ 407.0s ♪ 向导音:nudge(看门狗轻提醒) +t+ 407.0s ♪ 向导音:watchdog(看门狗升级) +t+ 422.0s ♪ 音效 sfx/paper_turn +t+ 422.0s ♪ 音效 sfx/sig_ge +t+ 422.5s ▶ 语音:「门卫老葛的证词。」 +t+ 422.5s ♪ 音效 sfx/paper_turn +t+ 422.5s ♪ 音效 sfx/sig_shun +t+ 422.9s ▶ 语音:「学徒小顺的证词。」 +t+ 422.9s ♪ 音效 sfx/sig_shun +t+ 423.4s ▶ 语音:「夜里,师父打发我去城南,给刘掌柜送匣子。」 +t+ 429.1s ▶ 语音:「周先生常念叨,账房的活,越到夜里越清静。」 +t+ 434.9s ▶ 语音:「库房钥匙?师父嫌沉,平日就挂在柴房墙上的铜钩。」 +t+ 441.3s ▶ 语音:「雨太大,刘掌柜留我住的,今早才回店。」 + +#### 【玩家动作】翻到结案陈词——单击过确认闸(「就此结案?」),再单击进三问 + +t+ 447.0s ▶ 语音:「探长,还没听的卷宗,先过一遍耳朵。」 +t+ 447.0s 〰 震动:confirm(轻点确认) +t+ 449.2s ♪ 音效 sfx/sig_shun +t+ 449.6s ▶ 语音:「雨太大,刘掌柜留我住的,今早才回店。」 +t+ 454.9s ▶ 语音:「后门那闩,生人叫不开。熟人来了,师父才亲自去开。」 +t+ 461.6s ▶ 语音:「师父的账,向来只信周先生一个人。」 +t+ 476.5s ♪ 向导音:nudge(看门狗轻提醒) +t+ 476.5s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+ 491.5s ♪ 向导音:nudge(看门狗轻提醒) +t+ 491.5s ♪ 向导音:watchdog(看门狗升级) +t+ 497.0s ♪ 音效 sfx/paper_turn +t+ 497.0s ♪ 音效 sfx/sig_zhou +t+ 497.5s ▶ 语音:「账房周先生的证词。」 +t+ 497.5s ♪ 音效 sfx/paper_turn +t+ 497.5s ♪ 音效 sfx/sig_wen +t+ 497.9s ▶ 语音:「房东温太太的证词。」 + +#### 【玩家动作】这回指着正主 + +t+ 497.9s ♪ 音效 sfx/sig_wen +t+ 498.4s ▶ 语音:「雨是九点四十下的。我正收晾的衣裳,记得真真的。」 +t+ 504.8s ▶ 语音:「十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。」 +t+ 511.5s ▶ 语音:「刚回屋,柴房后墙咯噔一响,有人爬墙!花盆翻了一个。」 +t+ 512.0s ♪ 音效 sfx/turn_tick +t+ 517.0s ♪ 音效 sfx/paper_turn +t+ 517.0s ♪ 音效 sfx/sig_scene +t+ 517.5s ▶ 语音:「现场勘验。」 +t+ 517.5s ♪ 音效 sfx/paper_turn +t+ 517.5s ♪ 音效 sfx/sig_fore +t+ 517.9s ▶ 语音:「法医报告。」 +t+ 517.9s ♪ 音效 sfx/paper_turn +t+ 517.9s ♪ 向导音:turn(轮到你) +t+ 518.4s ▶ 语音:「结案陈词。」 + +#### 【玩家动作】翻到结案陈词——单击过确认闸(「就此结案?」),再单击进三问 + +t+ 519.8s ▶ 语音:「证据在手,就此结案?单击,定下来;滑走,继续查。」 +t+ 526.5s ♪ 向导音:choice(抉择/等待输入) +t+ 526.5s ♪ 向导音:turn(轮到你) +t+ 526.5s ▶ 语音:「结案陈词。先指认真凶:四位证人,选一个。」 +t+ 526.5s 〰 震动:confirm(轻点确认) +t+ 528.6s ▶ 语音:「门卫老葛。」 +t+ 528.6s ▶ 语音:「学徒小顺。」 +t+ 530.7s ▶ 语音:「账房周先生。」 + +#### 【玩家动作】这回指着正主 + +t+ 532.8s ▶ 语音:「账房周先生。」 +t+ 534.9s ▶ 语音:「就指认这位?单击,定下来。」 +t+ 552.8s ♪ 向导音:nudge(看门狗轻提醒) +t+ 552.8s ▶ 向导语音:「在想?左右滑选,单击定。」 +t+ 552.8s ♪ 向导音:turn(轮到你) +t+ 552.8s ▶ 语音:「第二问:凶器是什么?」 +t+ 552.8s 〰 震动:confirm(轻点确认) +t+ 554.9s ▶ 语音:「铜秤砣。」 +t+ 557.1s ▶ 语音:「对。创口的铜屑,不见了的秤砣,都指向它。」 +t+ 559.2s ♪ 向导音:turn(轮到你) +t+ 559.2s ▶ 语音:「第三问:动机是什么?」 +t+ 559.2s 〰 震动:confirm(轻点确认) +t+ 561.3s ▶ 语音:「劫财入户。」 +t+ 561.3s ▶ 语音:「寻仇泄愤。」 +t+ 563.4s ▶ 语音:「监守自盗。」 +t+ 565.5s ▶ 语音:「对。库里短的东西,就是引线。」 +t+ 567.7s ♫ BGM 切换 → bgm/verdict(淡入 800ms) +t+ 567.7s ♪ 向导音:settle(结算) +t+ 567.7s ▶ 语音:「证据链闭合。周先生,你还有什么话说?」 +t+ 567.7s 〰 震动:success(成功长震) + +#### 【玩家动作】翻到结案陈词——单击过确认闸(「就此结案?」),再单击进三问 + +t+ 569.8s ♪ 音效 sfx/rain_swell +t+ 569.8s ▶ 语音:「别念了……我说。库房短的三件货,是我抵了赌债。」 +t+ 575.4s ▶ 语音:「他说月底清账,要报官。我求他,他不肯。」 +t+ 580.2s ▶ 语音:「我只想把钥匙放回去,把被盗做真。抡起秤砣的时候,他认出了我。」 +t+ 587.3s ♪ 音效 sfx/gavel +t+ 587.3s ♫ BGM 切换 → bgm/menu +t+ 587.3s ▶ 语音:「案件归档。雨,停了。」 +t+ 589.5s ▶ 语音:「案子是结了,卷宗上补丁不少。」 +t+ 591.6s ▶ 语音:「疑点,一处。」 +t+ 593.7s ▶ 语音:「指证,一次没错。」 +t+ 595.8s ▶ 语音:「同一场雨里,还有别的案子。单击,接新案。」 +t+ 597.9s ♪ 向导音:menu(系统界面) +t+ 610.8s 〰 震动:error(做错了:两连短震) +t+ 610.8s 〰 震动:error(做错了:两连短震) + +#### 【玩家动作】这回指着正主 + +t+ 610.8s ▶ 语音:「新案开卷。」 +t+ 612.9s ♫ BGM 切换 → bgm/board +t+ 612.9s ♪ 向导音:explore(探索/安全) +t+ 622.9s ♪ 向导音:nudge(看门狗轻提醒) +t+ 622.9s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+ 632.9s ♪ 音效 sfx/sig_ge +t+ 633.4s ▶ 语音:「昨儿夜里雨大,我守着街门,一步没敢挪窝。」 +t+ 639.2s ▶ 语音:「后半夜,温太太还来门房借过一回热水。」 +t+ 644.5s ▶ 语音:「十点一刻,一位先生收着黑伞进了后巷。个儿高,微驼背。」 +t+ 651.6s ▶ 语音:「九点四十,雨点子刚砸下来,小顺打着伞出的街门。」 + +#### 【玩家动作】翻到结案陈词——单击过确认闸(「就此结案?」),再单击进三问 + +t+ 657.9s ♪ 音效 sfx/turn_tick +t+ 657.9s ♪ 音效 sfx/sig_ge +t+ 658.4s ▶ 语音:「九点四十,雨点子刚砸下来,小顺打着伞出的街门。」 +t+ 664.8s ▶ 语音:「九点五十,周账房出的街门,跟我说了声,回家。」 +t+ 671.0s ▶ 语音:「听说店里账上短了银子,沈老板撂了话,月底清账。」 +t+ 687.5s ♪ 向导音:nudge(看门狗轻提醒) +t+ 687.5s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+ 702.5s ♪ 向导音:nudge(看门狗轻提醒) +t+ 702.5s ♪ 向导音:watchdog(看门狗升级) +t+ 707.9s ♪ 音效 sfx/paper_turn +t+ 707.9s ♪ 音效 sfx/sig_shun +t+ 708.4s ▶ 语音:「学徒小顺的证词。」 +t+ 708.4s ♪ 音效 sfx/paper_turn +t+ 708.4s ♪ 音效 sfx/sig_zhou +t+ 708.8s ▶ 语音:「账房周先生的证词。」 + +#### 【玩家动作】这回指着正主 + +t+ 708.8s ♪ 音效 sfx/sig_zhou +t+ 709.3s ▶ 语音:「周先生,管了十年的账,见人三分笑。」 +t+ 711.4s ▶ 语音:「我七点进店上夜账。九点五十对完,锁了前门回家。」 +t+ 717.8s ▶ 语音:「我对完账就回家了,夜里雨大,路上没停。」 +t+ 722.9s ♪ 音效 sfx/turn_tick +t+ 723.4s ▶ 语音:「钥匙?平时就挂在柴房铜钩上,十年了。」 +t+ 727.9s ♪ 音效 sfx/paper_turn +t+ 727.9s ♪ 音效 sfx/sig_shun +t+ 728.4s ▶ 语音:「学徒小顺的证词。」 +t+ 728.4s ♪ 音效 sfx/paper_turn +t+ 728.4s ♪ 音效 sfx/sig_ge +t+ 728.7s ♪ 音效 sfx/paper_turn +t+ 728.7s ♪ 向导音:turn(轮到你) +t+ 729.2s ▶ 语音:「结案陈词。」 + +#### 【玩家动作】翻到结案陈词——单击过确认闸(「就此结案?」),再单击进三问 + +t+ 731.3s ▶ 语音:「证据在手,就此结案?单击,定下来;滑走,继续查。」 +t+ 737.9s ♪ 向导音:choice(抉择/等待输入) +t+ 737.9s ♪ 向导音:turn(轮到你) +t+ 737.9s ▶ 语音:「结案陈词。先指认真凶:四位证人,选一个。」 +t+ 737.9s 〰 震动:confirm(轻点确认) +t+ 740.1s ▶ 语音:「门卫老葛。」 +t+ 740.1s ▶ 语音:「学徒小顺。」 +t+ 742.2s ▶ 语音:「账房周先生。」 + +#### 【玩家动作】这回指着正主 + +t+ 744.3s ▶ 语音:「账房周先生。」 +t+ 746.4s ▶ 语音:「就指认这位?单击,定下来。」 +t+ 764.3s ♪ 向导音:nudge(看门狗轻提醒) +t+ 764.3s ▶ 向导语音:「在想?左右滑选,单击定。」 +t+ 764.3s ▶ 语音:「我十点就到家了!我家婆娘能作证!」 +t+ 768.4s ▶ 语音:「不在场证明成立。证据放人,回到证词板。」 +t+ 770.5s ▶ 语音:「错指一回,记档。」 +t+ 772.6s ♪ 向导音:explore(探索/安全) +t+ 782.6s ♪ 向导音:nudge(看门狗轻提醒) +t+ 782.6s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+ 797.6s ♪ 向导音:nudge(看门狗轻提醒) +t+ 797.6s ♪ 向导音:watchdog(看门狗升级) +t+ 802.6s ▶ 语音:「证据在手,就此结案?单击,定下来;滑走,继续查。」 +t+ 812.6s ♪ 向导音:nudge(看门狗轻提醒) +t+ 812.6s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+ 812.6s ♪ 音效 sfx/turn_tick +t+ 827.6s ♪ 向导音:nudge(看门狗轻提醒) +t+ 827.6s ♪ 向导音:watchdog(看门狗升级) +t+ 842.6s ♪ 音效 sfx/paper_turn +t+ 842.6s ♪ 音效 sfx/sig_ge +t+ 843.1s ▶ 语音:「门卫老葛的证词。」 +t+ 843.1s ♪ 音效 sfx/paper_turn +t+ 843.1s ♪ 音效 sfx/sig_shun +t+ 843.5s ▶ 语音:「学徒小顺的证词。」 +t+ 843.5s ♪ 音效 sfx/sig_shun +t+ 844.0s ▶ 语音:「夜里,师父打发我去城南,给刘掌柜送匣子。」 +t+ 849.7s ▶ 语音:「库房的货,我一件都没碰过。」 +t+ 853.9s ▶ 语音:「我走的时候,顺手熄了店堂的灯。」 +t+ 858.6s ▶ 语音:「钥匙,师父贴身带着,从不离身。」 +t+ 863.3s ▶ 语音:「那伤,八成是柴房劈柴砸的。铜秤早卖给收废品的了。」 + +#### 【玩家动作】翻到结案陈词——单击过确认闸(「就此结案?」),再单击进三问 + +t+ 868.9s ♪ 音效 sfx/sig_shun +t+ 869.4s ▶ 语音:「那伤,八成是柴房劈柴砸的。铜秤早卖给收废品的了。」 +t+ 876.0s ▶ 语音:「雨太大,刘掌柜留我住的,今早才回店。」 +t+ 891.4s ♪ 向导音:nudge(看门狗轻提醒) +t+ 891.4s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+ 906.4s ♪ 向导音:nudge(看门狗轻提醒) +t+ 906.4s ♪ 向导音:watchdog(看门狗升级) +t+ 917.6s ♪ 音效 sfx/paper_turn +t+ 917.6s ♪ 音效 sfx/sig_zhou +t+ 918.1s ▶ 语音:「账房周先生的证词。」 +t+ 918.1s ♪ 音效 sfx/paper_turn +t+ 918.1s ♪ 音效 sfx/sig_wen +t+ 918.5s ▶ 语音:「房东温太太的证词。」 + +#### 【玩家动作】这回指着正主 + +t+ 918.5s ♪ 音效 sfx/sig_wen +t+ 919.0s ▶ 语音:「雨是九点四十下的。我正收晾的衣裳,记得真真的。」 +t+ 925.4s ▶ 语音:「十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。」 +t+ 927.6s ♪ 音效 sfx/turn_tick +t+ 932.1s ▶ 语音:「刚回屋,柴房后墙咯噔一响,有人爬墙!花盆翻了一个。」 +t+ 937.6s ♪ 音效 sfx/paper_turn +t+ 937.6s ♪ 音效 sfx/sig_scene +t+ 938.1s ▶ 语音:「现场勘验。」 +t+ 938.1s ♪ 音效 sfx/paper_turn +t+ 938.1s ♪ 音效 sfx/sig_fore +t+ 938.5s ▶ 语音:「法医报告。」 +t+ 938.5s ♪ 音效 sfx/paper_turn +t+ 938.5s ♪ 向导音:turn(轮到你) +t+ 939.0s ▶ 语音:「结案陈词。」 + +#### 【玩家动作】翻到结案陈词——单击过确认闸(「就此结案?」),再单击进三问 + +t+ 940.4s ▶ 语音:「证据在手,就此结案?单击,定下来;滑走,继续查。」 +t+ 947.1s ♪ 向导音:choice(抉择/等待输入) +t+ 947.1s ♪ 向导音:turn(轮到你) +t+ 947.1s ▶ 语音:「结案陈词。先指认真凶:四位证人,选一个。」 +t+ 947.1s 〰 震动:confirm(轻点确认) +t+ 949.2s ▶ 语音:「门卫老葛。」 +t+ 949.2s ▶ 语音:「学徒小顺。」 +t+ 951.3s ▶ 语音:「账房周先生。」 + +#### 【玩家动作】这回指着正主 + +t+ 953.4s ▶ 语音:「账房周先生。」 +t+ 955.5s ▶ 语音:「就指认这位?单击,定下来。」 +t+ 973.4s ♪ 向导音:nudge(看门狗轻提醒) +t+ 973.4s ▶ 向导语音:「在想?左右滑选,单击定。」 +t+ 973.4s ▶ 语音:「我十点就到家了!我家婆娘能作证!」 +t+ 977.5s ▶ 语音:「不在场证明成立。证据放人,回到证词板。」 +t+ 979.6s ▶ 语音:「错指一回,记档。」 +t+ 981.7s ♪ 向导音:explore(探索/安全) +t+ 991.7s ♪ 向导音:nudge(看门狗轻提醒) +t+ 991.7s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+1006.7s ♪ 向导音:nudge(看门狗轻提醒) +t+1006.7s ♪ 向导音:watchdog(看门狗升级) +t+1011.7s ▶ 语音:「证据在手,就此结案?单击,定下来;滑走,继续查。」 +t+1021.7s ♪ 向导音:nudge(看门狗轻提醒) +t+1021.7s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+1021.7s ♪ 音效 sfx/turn_tick +t+1036.7s ♪ 向导音:nudge(看门狗轻提醒) +t+1036.7s ♪ 向导音:watchdog(看门狗升级) +t+1051.7s ♪ 音效 sfx/paper_turn +t+1051.7s ♪ 音效 sfx/sig_ge +t+1052.2s ▶ 语音:「门卫老葛的证词。」 +t+1052.2s ♪ 音效 sfx/paper_turn +t+1052.2s ♪ 音效 sfx/sig_shun +t+1052.6s ▶ 语音:「学徒小顺的证词。」 +t+1052.6s ♪ 音效 sfx/sig_shun +t+1053.1s ▶ 语音:「夜里,师父打发我去城南,给刘掌柜送匣子。」 +t+1058.8s ▶ 语音:「库房的货,我一件都没碰过。」 +t+1063.1s ▶ 语音:「我走的时候,顺手熄了店堂的灯。」 +t+1067.7s ▶ 语音:「钥匙,师父贴身带着,从不离身。」 +t+1072.4s ▶ 语音:「那伤,八成是柴房劈柴砸的。铜秤早卖给收废品的了。」 + +#### 【玩家动作】翻到结案陈词——单击过确认闸(「就此结案?」),再单击进三问 + +t+1078.1s ♪ 音效 sfx/sig_shun +t+1078.5s ▶ 语音:「夜里,师父打发我去城南,给刘掌柜送匣子。」 +t+1084.3s ▶ 语音:「库房的货,我一件都没碰过。」 +t+1088.5s ▶ 语音:「我走的时候,顺手熄了店堂的灯。」 +t+1093.1s ▶ 语音:「钥匙,师父贴身带着,从不离身。」 +t+1097.8s ▶ 语音:「那伤,八成是柴房劈柴砸的。铜秤早卖给收废品的了。」 +t+1104.4s ▶ 语音:「雨太大,刘掌柜留我住的,今早才回店。」 +t+1119.8s ♪ 向导音:nudge(看门狗轻提醒) +t+1119.8s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+1126.7s ♪ 音效 sfx/paper_turn +t+1126.7s ♪ 音效 sfx/sig_zhou +t+1127.2s ▶ 语音:「账房周先生的证词。」 +t+1127.2s ♪ 音效 sfx/paper_turn +t+1127.2s ♪ 音效 sfx/sig_wen +t+1127.6s ▶ 语音:「房东温太太的证词。」 + +#### 【玩家动作】这回指着正主 + +t+1127.6s ♪ 音效 sfx/sig_wen +t+1128.1s ▶ 语音:「刚回屋,柴房后墙咯噔一响,有人爬墙!花盆翻了一个。」 +t+1135.0s ▶ 语音:「周账房那人,见人三分笑,账算得比谁都精。」 +t+1140.7s ▶ 语音:「店里短银子的事,街坊都有耳闻。上礼拜他还摔了账本。」 +t+1146.7s ♪ 音效 sfx/paper_turn +t+1146.7s ♪ 音效 sfx/sig_scene +t+1147.2s ▶ 语音:「现场勘验。」 +t+1147.2s ♪ 音效 sfx/paper_turn +t+1147.2s ♪ 音效 sfx/sig_fore +t+1147.6s ▶ 语音:「法医报告。」 +t+1147.6s ♪ 音效 sfx/paper_turn +t+1147.6s ♪ 向导音:turn(轮到你) +t+1148.1s ▶ 语音:「结案陈词。」 + +#### 【玩家动作】翻到结案陈词——单击过确认闸(「就此结案?」),再单击进三问 + +t+1150.0s ▶ 语音:「证据在手,就此结案?单击,定下来;滑走,继续查。」 +t+1155.7s ♪ 向导音:choice(抉择/等待输入) +t+1155.7s ♪ 向导音:turn(轮到你) +t+1155.7s ▶ 语音:「结案陈词。先指认真凶:四位证人,选一个。」 +t+1155.7s 〰 震动:confirm(轻点确认) +t+1157.8s ▶ 语音:「门卫老葛。」 +t+1157.8s ▶ 语音:「学徒小顺。」 +t+1160.0s ▶ 语音:「账房周先生。」 + +#### 【玩家动作】这回指着正主 + +t+1162.1s ▶ 语音:「账房周先生。」 +t+1164.2s ▶ 语音:「就指认这位?单击,定下来。」 +t+1182.1s ♪ 向导音:nudge(看门狗轻提醒) +t+1182.1s ▶ 向导语音:「在想?左右滑选,单击定。」 +t+1182.1s ▶ 语音:「我十点就到家了!我家婆娘能作证!」 +t+1186.2s ▶ 语音:「不在场证明成立。证据放人,回到证词板。」 +t+1188.3s ▶ 语音:「错指一回,记档。」 +t+1190.4s ♪ 向导音:explore(探索/安全) +t+1200.4s ♪ 向导音:nudge(看门狗轻提醒) +t+1200.4s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+1215.4s ♪ 向导音:nudge(看门狗轻提醒) +t+1215.4s ♪ 向导音:watchdog(看门狗升级) +t+1220.4s ▶ 语音:「证据在手,就此结案?单击,定下来;滑走,继续查。」 +t+1230.4s ♪ 向导音:nudge(看门狗轻提醒) +t+1230.4s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+1230.4s ♪ 音效 sfx/turn_tick +t+1245.4s ♪ 向导音:nudge(看门狗轻提醒) +t+1245.4s ♪ 向导音:watchdog(看门狗升级) +t+1260.4s ♪ 音效 sfx/paper_turn +t+1260.4s ♪ 音效 sfx/sig_ge +t+1260.8s ▶ 语音:「门卫老葛的证词。」 +t+1260.8s ♪ 音效 sfx/paper_turn +t+1260.8s ♪ 音效 sfx/sig_shun +t+1261.3s ▶ 语音:「学徒小顺的证词。」 +t+1261.3s ♪ 音效 sfx/sig_shun +t+1261.7s ▶ 语音:「夜里,师父打发我去城南,给刘掌柜送匣子。」 +t+1267.5s ▶ 语音:「库房的货,我一件都没碰过。」 +t+1271.7s ▶ 语音:「我走的时候,顺手熄了店堂的灯。」 +t+1276.4s ▶ 语音:「钥匙,师父贴身带着,从不离身。」 +t+1281.0s ▶ 语音:「那伤,八成是柴房劈柴砸的。铜秤早卖给收废品的了。」 + +#### 【玩家动作】翻到结案陈词——单击过确认闸(「就此结案?」),再单击进三问 + +t+1286.7s ♪ 音效 sfx/sig_shun +t+1287.2s ▶ 语音:「夜里,师父打发我去城南,给刘掌柜送匣子。」 +t+1292.9s ▶ 语音:「库房的货,我一件都没碰过。」 +t+1297.1s ▶ 语音:「我走的时候,顺手熄了店堂的灯。」 +t+1301.8s ▶ 语音:「钥匙,师父贴身带着,从不离身。」 +t+1306.5s ▶ 语音:「那伤,八成是柴房劈柴砸的。铜秤早卖给收废品的了。」 +t+1313.1s ▶ 语音:「雨太大,刘掌柜留我住的,今早才回店。」 +t+1328.4s ♪ 向导音:nudge(看门狗轻提醒) +t+1328.4s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+1335.4s ♪ 音效 sfx/paper_turn +t+1335.4s ♪ 音效 sfx/sig_zhou +t+1335.8s ▶ 语音:「账房周先生的证词。」 +t+1335.8s ♪ 音效 sfx/paper_turn +t+1335.8s ♪ 音效 sfx/sig_wen +t+1336.3s ▶ 语音:「房东温太太的证词。」 + +#### 【玩家动作】这回指着正主 + +t+1336.3s ♪ 音效 sfx/sig_wen +t+1336.7s ▶ 语音:「店里短银子的事,街坊都有耳闻。上礼拜他还摔了账本。」 +t+1343.6s ▶ 语音:「吓得我蒙头半宿没睡着,天亮才敢吱声。」 +t+1355.4s ♪ 音效 sfx/sig_wen +t+1355.8s ▶ 语音:「雨是九点四十下的。我正收晾的衣裳,记得真真的。」 +t+1362.3s ▶ 语音:「十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。」 +t+1368.9s ▶ 语音:「刚回屋,柴房后墙咯噔一响,有人爬墙!花盆翻了一个。」 + +#### 【玩家动作】翻到结案陈词——单击过确认闸(「就此结案?」),再单击进三问 + +t+1380.4s ♪ 音效 sfx/sig_wen +t+1380.8s ▶ 语音:「雨是九点四十下的。我正收晾的衣裳,记得真真的。」 +t+1387.3s ▶ 语音:「十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。」 +t+1393.9s ▶ 语音:「刚回屋,柴房后墙咯噔一响,有人爬墙!花盆翻了一个。」 +t+1395.4s ♪ 音效 sfx/turn_tick +t+1400.8s ▶ 语音:「周账房那人,见人三分笑,账算得比谁都精。」 +t+1406.6s ▶ 语音:「店里短银子的事,街坊都有耳闻。上礼拜他还摔了账本。」 +t+1413.4s ▶ 语音:「吓得我蒙头半宿没睡着,天亮才敢吱声。」 +t+1428.4s ♪ 音效 sfx/paper_turn +t+1428.4s ♪ 音效 sfx/sig_scene +t+1428.9s ▶ 语音:「现场勘验。」 +t+1428.9s ♪ 音效 sfx/paper_turn +t+1428.9s ♪ 音效 sfx/sig_fore +t+1429.3s ▶ 语音:「法医报告。」 + +#### 【玩家动作】这回指着正主 + +t+1429.3s ♪ 音效 sfx/sig_fore +t+1429.8s ▶ 语音:「验尸报告,念给你听。」 +t+1433.3s ▶ 语音:「死亡时间,昨夜十点到十点半。」 +t+1437.8s ▶ 语音:「后脑单次钝器伤,一击毙命。创口嵌有铜屑,凶器是铜器。」 +t+1444.9s ▶ 语音:「死者双手干净,没有搏斗痕迹。」 +t+1458.3s ♪ 向导音:nudge(看门狗轻提醒) +t+1458.3s ▶ 向导语音:「还在证词板。左右滑,换卷宗。」 +t+1465.4s ♪ 音效 sfx/turn_tick +t+1473.3s ♪ 向导音:nudge(看门狗轻提醒) +t+1473.3s ♪ 向导音:watchdog(看门狗升级) +t+1570.4s ▶ 语音:「试试指证:小顺说熄了灯,温太太说灯还亮着。」 +t+1570.4s 〰 震动:confirm(轻点确认) +t+1600.4s 【状态】乱按一路也把案子结了:裁决链完整、评级如实记账 证词板上是「法医报告」:左右滑换卷宗,单击听取,按住进入指证,上滑状态,下滑菜单(BGM=bgm/board,语速1) +t+1600.4s ♪ 音效 sfx/sig_fore +t+1600.4s 【状态】新案照样开局,压力测试收工 正在听法医报告(单击停止,双击重新听当前句)(BGM=bgm/board,语速1) diff --git a/tools/gen_voice_dual.py b/tools/gen_voice_dual.py index d59f8923..55102091 100644 --- a/tools/gen_voice_dual.py +++ b/tools/gen_voice_dual.py @@ -907,7 +907,8 @@ DUNGEON_LINES = [ ] # ---------------------------------------------------------------- abyss -# 《深海回音》批次 2(docs/design/17-abyss-voice-ids.md,148 句:双性别 127 + 平铺 NPC 21)。 +# 《深海回音》批次 2(docs/design/17-abyss-voice-ids.md,155 句:双性别 134 + 平铺 NPC 21; +# R2 修订 +7 句:dv4_dual / oxy_crit_deck / prog_saved1..5,sys_skip(_k) 改词)。 # 台词全文逐字照抄 voice-ids 文档;双性别组分 DIVER(潜航员=玩家)/ DECK(母船调度/系统/ # 向导 gd_*)两个 speaker 配对(同性别双音色,VOICE_SPK["abyss"] 覆盖,radio HOST/PROD 同型: # 同场景高频对话的两者永不同 speaker);_k 键盘变体 11 对在 KEY_LINES["abyss"]。 @@ -967,7 +968,7 @@ ABYSS_DECK_LINES = [ ("gd_ping2", _ABY_DECK, "回波不会自己来。单击。"), ("sys_help", _ABY_DECK, "单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。"), ("sys_menu", _ABY_DECK, "菜单。单击切换选项,双击确认。"), - ("sys_skip", _ABY_DECK, "想跳过这句,单击就行。"), + ("sys_skip", _ABY_DECK, "听过的句子再播时,单击就能跳过。"), ("sys_continue_ask", _ABY_DECK, "检测到你的下潜记录。单击继续上次,右滑开始新救援。"), # ---- G0.b 状态/系统句 ---- ("gd_invalid", _ABY_DECK, "这个手势,水里用不上。"), @@ -982,10 +983,18 @@ ABYSS_DECK_LINES = [ ("prog_d2", _ABY_DECK, "现在是第二次下潜。"), ("prog_d3", _ABY_DECK, "现在是第三次下潜。"), ("prog_d4", _ABY_DECK, "现在是最后一次下潜。"), + # R2-F10:上滑状态链·已救人数(saved=1..5 分档整句;saved=0 不播) + ("prog_saved1", _ABY_DECK, "已经救上一个人。"), + ("prog_saved2", _ABY_DECK, "已经救上两个人。"), + ("prog_saved3", _ABY_DECK, "已经救上三个人。"), + ("prog_saved4", _ABY_DECK, "已经救上四个人。"), + ("prog_saved5", _ABY_DECK, "五个人都在甲板上了。"), ("oxy_full", _ABY_DECK, "气瓶还足,救得动。"), ("oxy_ok", _ABY_DECK, "氧气还够两潜。"), ("oxy_low", _ABY_DECK, "氧气告急,只够最后一潜。"), ("oxy_crit", _ABY_DECK, "氧气见底,必须上浮。"), + # R2-F5:crit 水面变体(SURFACE/ENDING;水下保留「必须上浮」) + ("oxy_crit_deck", _ABY_DECK, "氧气见底,一潜都下不去了。"), ("oxy_gain", _ABY_DECK, "应急瓶接上了,多三格。"), ("dry_a", _ABY_DECK, "气瓶用干了。立刻上浮。"), ("dry_b", _ABY_DECK, "气花在了人身上。人,都上来了。"), @@ -1025,6 +1034,8 @@ ABYSS_DECK_LINES = [ # ---- D4 第四潜 ---- ("dv4_none", _ABY_DECK, "气不够一潜了。第四潜,取消。"), ("dv4_down", _ABY_DECK, "最后一潜,指挥舱。海燕号,撑不住了。"), + # R2-F4:双载形态下潜链追加(3+1=4 格扣账口播化,不再无声扣款) + ("dv4_dual", _ABY_DECK, "两个人下同一潜。这趟往返,扣四格气。"), ("dv4_slide", _ABY_DECK, "它滑了!抓稳索缆,指挥舱里还有人!"), ("p7", _ABY_DECK, "双人上浮。向左滑,逐站减压慢慢浮。向右滑,违规直浮,搏一把。"), ("p7_chen", _ABY_DECK, "气只够带一个。向左滑,带船长。向右滑,带陈医官。"), @@ -1089,7 +1100,9 @@ ABYSS_NPC = [ ] # ---------------------------------------------------------------- detective -# 《雨夜专案》批次 2(docs/design/18-detective-voice-ids.md,158 句:旁白 106 双性别 + 平铺 NPC 52)。 +# 《雨夜专案》批次 2(docs/design/18-detective-voice-ids.md,171 句:旁白基表 104 双性别 + V 组 14 + 平铺 NPC 53; +# R2 修订:改词 fin_who_confirm/tut_skip;新增 fin_pre、item_who_w1..w4、st_wrong、recap_cf、gd_board_cf、 +# z_react_w(NPC)、V 组 +4 对——逐条理由见 18-detective.md 文末 R2 修订记录 / new8/detective/round1 F1-F11)。 # 台词全文逐字照抄 voice-ids 文档;旁白只做系统/指引/教学/状态/现场自勘(探长自勘)/裁决宣读, # 不念证词(证词=证人 NPC 平铺,DETECTIVE_NPC);键盘变体 V 组 10 对在 KEY_LINES["detective"]。 # NPC 不加电话滤波(区别于 radio/abyss——区分度靠 speaker+instruct+游戏侧签名 earcon 前缀)。 @@ -1120,7 +1133,7 @@ DETECTIVE_LINES = [ ("tut_cf_try", _DET, "练习一次。选一份证词,单击确认;再选一份,任意一句。"), ("tut_cf_ok", _DET, "指证就是这样。练习不算数,真矛盾要靠耳朵找。"), ("tut_done", _DET, "教学完了。开始查案。"), - ("tut_skip", _DET, "已跳过教学。左右滑换卷宗,单击听取。"), + ("tut_skip", _DET, "已跳过教学。左右滑换卷宗,单击听取;按住屏幕,指证矛盾。"), # ---- G2 状态/条目 ---- ("st_asked_0", _DET, "六份卷宗,一份都没听。"), ("st_asked_1", _DET, "已听一份,还有五份。"), @@ -1160,8 +1173,14 @@ DETECTIVE_LINES = [ ("cf_hit", _DET, "对不上!矛盾成立,记入疑点。"), # ---- G5 结案三问 ---- ("fin_start", _DET, "结案陈词。先指认真凶:四位证人,选一个。"), - ("fin_who_confirm", _DET, "就指认他?单击,定下来。"), + ("fin_pre", _DET, "证据在手,就此结案?单击,定下来;滑走,继续查。"), + ("item_who_w1", _DET, "门卫老葛。"), + ("item_who_w2", _DET, "学徒小顺。"), + ("item_who_w3", _DET, "账房周先生。"), + ("item_who_w4", _DET, "房东温太太。"), + ("fin_who_confirm", _DET, "就指认这位?单击,定下来。"), ("fin_clear", _DET, "不在场证明成立。证据放人,回到证词板。"), + ("st_wrong", _DET, "错指一回,记档。"), ("fin_right", _DET, "证据链闭合。周先生,你还有什么话说?"), ("fin_right_b", _DET, "证据链闭合。小顺,你还有什么话说?"), ("fin_ask_weapon", _DET, "第二问:凶器是什么?"), @@ -1189,6 +1208,7 @@ DETECTIVE_LINES = [ ("settle_hook", _DET, "同一场雨里,还有别的案子。单击,接新案。"), # ---- G7 看门狗/卡关/纠错 ---- ("gd_board", _DET, "还在证词板。左右滑,换卷宗。"), + ("gd_board_cf", _DET, "都听过了。按住屏幕,去指证。"), ("gd_cf", _DET, "还在选证词。左右滑,单击确认。"), ("gd_fin", _DET, "在想?左右滑选,单击定。"), ("gd_invalid", _DET, "这个操作,这里用不上。"), @@ -1200,6 +1220,7 @@ DETECTIVE_LINES = [ ("b_hint_c2", _DET, "试试指证:小顺说铜秤卖了,现场铜秤还在。"), ("hint_fin", _DET, "疑点齐了。去结案陈词。"), ("recap_go", _DET, "接着查。"), + ("recap_cf", _DET, "卷宗都在耳朵里了。挑一句你不信的,按住指证。"), ] # NPC 单音色平铺(id, speaker, instruct, 台词)→ web/detective/audio/voice/.* @@ -1239,6 +1260,7 @@ DETECTIVE_NPC = [ ("z_6", "Uncle_Fu", "平板谨慎的男声,账房,字斟句酌,被追问时渐慌", "你们要是不信,去问我家婆娘。"), ("z_react_1", "Uncle_Fu", "平板谨慎的男声,账房,字斟句酌,被追问时渐慌", "灯?……许是我记岔了。人上了岁数,记性不济。"), ("z_react_2", "Uncle_Fu", "平板谨慎的男声,账房,字斟句酌,被追问时渐慌", "钥匙的事……他、他有时候,也贴身带着的……"), + ("z_react_w", "Uncle_Fu", "平板谨慎的男声,账房,字斟句酌,被追问时渐慌", "铜器?……我那是顺口猜的。凶器的事,我怎么会知道。"), ("z_react_3", "Uncle_Fu", "平板谨慎的男声,账房,字斟句酌,被追问时渐慌", "秤!秤的事,你们别再问了……"), ("z_react_4", "Uncle_Fu", "平板谨慎的男声,账房,字斟句酌,被追问时渐慌", "……随你们怎么问。我要回去了。"), ("acc_zhou", "Uncle_Fu", "平板谨慎的男声,账房,字斟句酌,被追问时渐慌", "我十点就到家了!我家婆娘能作证!"), @@ -1583,12 +1605,12 @@ KEY_LINES = { ("gd_ping2", "回波不会自己来。按空格。"), ("sys_help", "空格继续,回车重新听。上箭头听状态,下箭头开菜单。选择时,左右箭头。"), ("sys_menu", "菜单。空格切换选项,回车确认。"), - ("sys_skip", "想跳过这句,按空格。"), + ("sys_skip", "听过的句子再播时,按空格跳过。"), ("sys_continue_ask", "检测到你的下潜记录。空格继续上次,右箭头开始新救援。"), ("dv1_teach", "到深度了。声呐静了。按空格,发一枚脉冲。"), ("p1", "管路在响。左箭头,停下来听敲管的暗号。右箭头,先带小舟上浮。"), ], - # detective:V 组 10 对(18-detective-voice-ids.md 文末;_k 逻辑 id 落 key/ 子目录)。 + # detective:V 组 14 对(18-detective-voice-ids.md 文末;_k 逻辑 id 落 key/ 子目录;R2 +4 对)。 "detective": [ ("sys_help", "方向键换卷宗,空格听取,回车重新听。按住空格指证,上键状态,下键菜单。"), ("tut_d0", "先熟悉证词板。左右方向键,换卷宗。"), @@ -1600,6 +1622,10 @@ KEY_LINES = { ("cf_pick_line", "左右方向键,一句一句听。"), ("cf_confirm", "就这句?空格,定下来。"), ("settle_hook", "同一场雨里,还有别的案子。按空格,接新案。"), + ("fin_pre", "证据在手,就此结案?空格,定下来;方向键,继续查。"), + ("fin_who_confirm", "就指认这位?空格,定下来。"), + ("recap_cf", "卷宗都在耳朵里了。挑一句你不信的,按住空格指证。"), + ("gd_board_cf", "都听过了。按住空格,去指证。"), ], # hunt:V 组 11 对(23-hunt-voice-ids.md 文末;措辞「方向键/空格/回车」同 dungeon 规范)。 "hunt": [ diff --git a/web/abyss/audio/voice/bai_a.ogg b/web/abyss/audio/voice/bai_a.ogg index bc7dbc02..b8bbd6d3 100644 Binary files a/web/abyss/audio/voice/bai_a.ogg and b/web/abyss/audio/voice/bai_a.ogg differ diff --git a/web/abyss/audio/voice/bai_b.ogg b/web/abyss/audio/voice/bai_b.ogg index 01332a83..698d4c11 100644 Binary files a/web/abyss/audio/voice/bai_b.ogg and b/web/abyss/audio/voice/bai_b.ogg differ diff --git a/web/abyss/audio/voice/bai_out.ogg b/web/abyss/audio/voice/bai_out.ogg index 5f6b2b59..1c66e8f5 100644 Binary files a/web/abyss/audio/voice/bai_out.ogg and b/web/abyss/audio/voice/bai_out.ogg differ diff --git a/web/abyss/audio/voice/bai_thanks.ogg b/web/abyss/audio/voice/bai_thanks.ogg index af361eea..fa0b0ad5 100644 Binary files a/web/abyss/audio/voice/bai_thanks.ogg and b/web/abyss/audio/voice/bai_thanks.ogg differ diff --git a/web/abyss/audio/voice/chen_a.ogg b/web/abyss/audio/voice/chen_a.ogg index f878bf1d..f54f8398 100644 Binary files a/web/abyss/audio/voice/chen_a.ogg and b/web/abyss/audio/voice/chen_a.ogg differ diff --git a/web/abyss/audio/voice/chen_b.ogg b/web/abyss/audio/voice/chen_b.ogg index dfa721c0..cd8957ff 100644 Binary files a/web/abyss/audio/voice/chen_b.ogg and b/web/abyss/audio/voice/chen_b.ogg differ diff --git a/web/abyss/audio/voice/chen_last.ogg b/web/abyss/audio/voice/chen_last.ogg index 1db301d2..702f1186 100644 Binary files a/web/abyss/audio/voice/chen_last.ogg and b/web/abyss/audio/voice/chen_last.ogg differ diff --git a/web/abyss/audio/voice/chen_stay.ogg b/web/abyss/audio/voice/chen_stay.ogg index 8d65d2d7..730add60 100644 Binary files a/web/abyss/audio/voice/chen_stay.ogg and b/web/abyss/audio/voice/chen_stay.ogg differ diff --git a/web/abyss/audio/voice/chen_up.ogg b/web/abyss/audio/voice/chen_up.ogg index 4610c755..07dfa633 100644 Binary files a/web/abyss/audio/voice/chen_up.ogg and b/web/abyss/audio/voice/chen_up.ogg differ diff --git a/web/abyss/audio/voice/d1_log.ogg b/web/abyss/audio/voice/d1_log.ogg index 079fcead..9f25266f 100644 Binary files a/web/abyss/audio/voice/d1_log.ogg and b/web/abyss/audio/voice/d1_log.ogg differ diff --git a/web/abyss/audio/voice/female/b_go.ogg b/web/abyss/audio/voice/female/b_go.ogg index 68aeb6fc..cbb88dd0 100644 Binary files a/web/abyss/audio/voice/female/b_go.ogg and b/web/abyss/audio/voice/female/b_go.ogg differ diff --git a/web/abyss/audio/voice/female/b_goal.ogg b/web/abyss/audio/voice/female/b_goal.ogg index 5f7a2664..ec996d73 100644 Binary files a/web/abyss/audio/voice/female/b_goal.ogg and b/web/abyss/audio/voice/female/b_goal.ogg differ diff --git a/web/abyss/audio/voice/female/b_open.ogg b/web/abyss/audio/voice/female/b_open.ogg index 5f504c2f..bb54e059 100644 Binary files a/web/abyss/audio/voice/female/b_open.ogg and b/web/abyss/audio/voice/female/b_open.ogg differ diff --git a/web/abyss/audio/voice/female/b_rule.ogg b/web/abyss/audio/voice/female/b_rule.ogg index 042db90c..724ff4e8 100644 Binary files a/web/abyss/audio/voice/female/b_rule.ogg and b/web/abyss/audio/voice/female/b_rule.ogg differ diff --git a/web/abyss/audio/voice/female/d1_code.ogg b/web/abyss/audio/voice/female/d1_code.ogg index 721a0145..cdb832bd 100644 Binary files a/web/abyss/audio/voice/female/d1_code.ogg and b/web/abyss/audio/voice/female/d1_code.ogg differ diff --git a/web/abyss/audio/voice/female/d1_listen.ogg b/web/abyss/audio/voice/female/d1_listen.ogg index 9d6b3736..8390a4f1 100644 Binary files a/web/abyss/audio/voice/female/d1_listen.ogg and b/web/abyss/audio/voice/female/d1_listen.ogg differ diff --git a/web/abyss/audio/voice/female/d1_nolog.ogg b/web/abyss/audio/voice/female/d1_nolog.ogg index 095be4a1..3168c990 100644 Binary files a/web/abyss/audio/voice/female/d1_nolog.ogg and b/web/abyss/audio/voice/female/d1_nolog.ogg differ diff --git a/web/abyss/audio/voice/female/d1_surf.ogg b/web/abyss/audio/voice/female/d1_surf.ogg index 69c3df8d..80b72ff5 100644 Binary files a/web/abyss/audio/voice/female/d1_surf.ogg and b/web/abyss/audio/voice/female/d1_surf.ogg differ diff --git a/web/abyss/audio/voice/female/d1_up.ogg b/web/abyss/audio/voice/female/d1_up.ogg index 79c0155e..fb79a9fd 100644 Binary files a/web/abyss/audio/voice/female/d1_up.ogg and b/web/abyss/audio/voice/female/d1_up.ogg differ diff --git a/web/abyss/audio/voice/female/d2_cut.ogg b/web/abyss/audio/voice/female/d2_cut.ogg index 876103a9..92754a9e 100644 Binary files a/web/abyss/audio/voice/female/d2_cut.ogg and b/web/abyss/audio/voice/female/d2_cut.ogg differ diff --git a/web/abyss/audio/voice/female/d2_flash.ogg b/web/abyss/audio/voice/female/d2_flash.ogg index 25e9c9ff..dd01b531 100644 Binary files a/web/abyss/audio/voice/female/d2_flash.ogg and b/web/abyss/audio/voice/female/d2_flash.ogg differ diff --git a/web/abyss/audio/voice/female/d2_leave.ogg b/web/abyss/audio/voice/female/d2_leave.ogg index 72d017d9..34c6098c 100644 Binary files a/web/abyss/audio/voice/female/d2_leave.ogg and b/web/abyss/audio/voice/female/d2_leave.ogg differ diff --git a/web/abyss/audio/voice/female/d2_pry.ogg b/web/abyss/audio/voice/female/d2_pry.ogg index 735406a8..b0c48cfe 100644 Binary files a/web/abyss/audio/voice/female/d2_pry.ogg and b/web/abyss/audio/voice/female/d2_pry.ogg differ diff --git a/web/abyss/audio/voice/female/d2_pry_ok.ogg b/web/abyss/audio/voice/female/d2_pry_ok.ogg index a09e0888..3e798b51 100644 Binary files a/web/abyss/audio/voice/female/d2_pry_ok.ogg and b/web/abyss/audio/voice/female/d2_pry_ok.ogg differ diff --git a/web/abyss/audio/voice/female/d2_pry_slow.ogg b/web/abyss/audio/voice/female/d2_pry_slow.ogg index 1596f4dc..2f79e8e7 100644 Binary files a/web/abyss/audio/voice/female/d2_pry_slow.ogg and b/web/abyss/audio/voice/female/d2_pry_slow.ogg differ diff --git a/web/abyss/audio/voice/female/d2_supply.ogg b/web/abyss/audio/voice/female/d2_supply.ogg index 18fa2355..e703f6f3 100644 Binary files a/web/abyss/audio/voice/female/d2_supply.ogg and b/web/abyss/audio/voice/female/d2_supply.ogg differ diff --git a/web/abyss/audio/voice/female/d2_surf.ogg b/web/abyss/audio/voice/female/d2_surf.ogg index 51edcc5d..c92bb784 100644 Binary files a/web/abyss/audio/voice/female/d2_surf.ogg and b/web/abyss/audio/voice/female/d2_surf.ogg differ diff --git a/web/abyss/audio/voice/female/d2_valve.ogg b/web/abyss/audio/voice/female/d2_valve.ogg index d13ac4fa..c15081b3 100644 Binary files a/web/abyss/audio/voice/female/d2_valve.ogg and b/web/abyss/audio/voice/female/d2_valve.ogg differ diff --git a/web/abyss/audio/voice/female/d2_valve_e.ogg b/web/abyss/audio/voice/female/d2_valve_e.ogg index ef630dc3..0b9022fb 100644 Binary files a/web/abyss/audio/voice/female/d2_valve_e.ogg and b/web/abyss/audio/voice/female/d2_valve_e.ogg differ diff --git a/web/abyss/audio/voice/female/d3_chen.ogg b/web/abyss/audio/voice/female/d3_chen.ogg index 7ba2948d..a90302d3 100644 Binary files a/web/abyss/audio/voice/female/d3_chen.ogg and b/web/abyss/audio/voice/female/d3_chen.ogg differ diff --git a/web/abyss/audio/voice/female/d3_chen_e.ogg b/web/abyss/audio/voice/female/d3_chen_e.ogg index c400801a..fe17917b 100644 Binary files a/web/abyss/audio/voice/female/d3_chen_e.ogg and b/web/abyss/audio/voice/female/d3_chen_e.ogg differ diff --git a/web/abyss/audio/voice/female/d3_promise.ogg b/web/abyss/audio/voice/female/d3_promise.ogg index c4bf27dc..fe2fb9fd 100644 Binary files a/web/abyss/audio/voice/female/d3_promise.ogg and b/web/abyss/audio/voice/female/d3_promise.ogg differ diff --git a/web/abyss/audio/voice/female/d3_spare.ogg b/web/abyss/audio/voice/female/d3_spare.ogg index 7b045e66..03e11029 100644 Binary files a/web/abyss/audio/voice/female/d3_spare.ogg and b/web/abyss/audio/voice/female/d3_spare.ogg differ diff --git a/web/abyss/audio/voice/female/d3_spare_e.ogg b/web/abyss/audio/voice/female/d3_spare_e.ogg index 1a98be93..b80d34e3 100644 Binary files a/web/abyss/audio/voice/female/d3_spare_e.ogg and b/web/abyss/audio/voice/female/d3_spare_e.ogg differ diff --git a/web/abyss/audio/voice/female/d3_surf.ogg b/web/abyss/audio/voice/female/d3_surf.ogg index f640e84b..336ab8e1 100644 Binary files a/web/abyss/audio/voice/female/d3_surf.ogg and b/web/abyss/audio/voice/female/d3_surf.ogg differ diff --git a/web/abyss/audio/voice/female/d3_zheng.ogg b/web/abyss/audio/voice/female/d3_zheng.ogg index 7e001026..d319ce67 100644 Binary files a/web/abyss/audio/voice/female/d3_zheng.ogg and b/web/abyss/audio/voice/female/d3_zheng.ogg differ diff --git a/web/abyss/audio/voice/female/d3_zheng_e.ogg b/web/abyss/audio/voice/female/d3_zheng_e.ogg index 02997d6e..6b11ce45 100644 Binary files a/web/abyss/audio/voice/female/d3_zheng_e.ogg and b/web/abyss/audio/voice/female/d3_zheng_e.ogg differ diff --git a/web/abyss/audio/voice/female/d4_fast.ogg b/web/abyss/audio/voice/female/d4_fast.ogg index cc622a72..760b4752 100644 Binary files a/web/abyss/audio/voice/female/d4_fast.ogg and b/web/abyss/audio/voice/female/d4_fast.ogg differ diff --git a/web/abyss/audio/voice/female/d4_fast_e.ogg b/web/abyss/audio/voice/female/d4_fast_e.ogg index d8de7604..a3c0a28e 100644 Binary files a/web/abyss/audio/voice/female/d4_fast_e.ogg and b/web/abyss/audio/voice/female/d4_fast_e.ogg differ diff --git a/web/abyss/audio/voice/female/d4_pick_chen.ogg b/web/abyss/audio/voice/female/d4_pick_chen.ogg index d435c2ad..9e08e5e1 100644 Binary files a/web/abyss/audio/voice/female/d4_pick_chen.ogg and b/web/abyss/audio/voice/female/d4_pick_chen.ogg differ diff --git a/web/abyss/audio/voice/female/d4_pick_gao.ogg b/web/abyss/audio/voice/female/d4_pick_gao.ogg index aefeff86..01cb3361 100644 Binary files a/web/abyss/audio/voice/female/d4_pick_gao.ogg and b/web/abyss/audio/voice/female/d4_pick_gao.ogg differ diff --git a/web/abyss/audio/voice/female/d4_pick_zheng.ogg b/web/abyss/audio/voice/female/d4_pick_zheng.ogg index 03f57284..dd190bbf 100644 Binary files a/web/abyss/audio/voice/female/d4_pick_zheng.ogg and b/web/abyss/audio/voice/female/d4_pick_zheng.ogg differ diff --git a/web/abyss/audio/voice/female/d4_silent.ogg b/web/abyss/audio/voice/female/d4_silent.ogg index 257795bb..4fa09536 100644 Binary files a/web/abyss/audio/voice/female/d4_silent.ogg and b/web/abyss/audio/voice/female/d4_silent.ogg differ diff --git a/web/abyss/audio/voice/female/d4_slow.ogg b/web/abyss/audio/voice/female/d4_slow.ogg index fd5ac6af..6a76033b 100644 Binary files a/web/abyss/audio/voice/female/d4_slow.ogg and b/web/abyss/audio/voice/female/d4_slow.ogg differ diff --git a/web/abyss/audio/voice/female/d4_slow_e.ogg b/web/abyss/audio/voice/female/d4_slow_e.ogg index 4dadf2cb..da8d7b49 100644 Binary files a/web/abyss/audio/voice/female/d4_slow_e.ogg and b/web/abyss/audio/voice/female/d4_slow_e.ogg differ diff --git a/web/abyss/audio/voice/female/d4_stay_lost.ogg b/web/abyss/audio/voice/female/d4_stay_lost.ogg index 0f8288af..5dec5c3e 100644 Binary files a/web/abyss/audio/voice/female/d4_stay_lost.ogg and b/web/abyss/audio/voice/female/d4_stay_lost.ogg differ diff --git a/web/abyss/audio/voice/female/d4_surf.ogg b/web/abyss/audio/voice/female/d4_surf.ogg index a4a115b5..cf74d8ef 100644 Binary files a/web/abyss/audio/voice/female/d4_surf.ogg and b/web/abyss/audio/voice/female/d4_surf.ogg differ diff --git a/web/abyss/audio/voice/female/d4_talk.ogg b/web/abyss/audio/voice/female/d4_talk.ogg index ffcf769f..52f2e17a 100644 Binary files a/web/abyss/audio/voice/female/d4_talk.ogg and b/web/abyss/audio/voice/female/d4_talk.ogg differ diff --git a/web/abyss/audio/voice/female/d9_bell.ogg b/web/abyss/audio/voice/female/d9_bell.ogg index 63a950bd..039efb67 100644 Binary files a/web/abyss/audio/voice/female/d9_bell.ogg and b/web/abyss/audio/voice/female/d9_bell.ogg differ diff --git a/web/abyss/audio/voice/female/d9_bello.ogg b/web/abyss/audio/voice/female/d9_bello.ogg index 84d71ed1..4d016e0c 100644 Binary files a/web/abyss/audio/voice/female/d9_bello.ogg and b/web/abyss/audio/voice/female/d9_bello.ogg differ diff --git a/web/abyss/audio/voice/female/d9_rest.ogg b/web/abyss/audio/voice/female/d9_rest.ogg index a890842d..491d484e 100644 Binary files a/web/abyss/audio/voice/female/d9_rest.ogg and b/web/abyss/audio/voice/female/d9_rest.ogg differ diff --git a/web/abyss/audio/voice/female/dry_a.ogg b/web/abyss/audio/voice/female/dry_a.ogg index b643f9a5..b2c5565f 100644 Binary files a/web/abyss/audio/voice/female/dry_a.ogg and b/web/abyss/audio/voice/female/dry_a.ogg differ diff --git a/web/abyss/audio/voice/female/dry_b.ogg b/web/abyss/audio/voice/female/dry_b.ogg index 1e28729b..11f262f1 100644 Binary files a/web/abyss/audio/voice/female/dry_b.ogg and b/web/abyss/audio/voice/female/dry_b.ogg differ diff --git a/web/abyss/audio/voice/female/dv1_down.ogg b/web/abyss/audio/voice/female/dv1_down.ogg index 735c5f40..b313c7c1 100644 Binary files a/web/abyss/audio/voice/female/dv1_down.ogg and b/web/abyss/audio/voice/female/dv1_down.ogg differ diff --git a/web/abyss/audio/voice/female/dv1_link.ogg b/web/abyss/audio/voice/female/dv1_link.ogg index 76e18ebe..a0887693 100644 Binary files a/web/abyss/audio/voice/female/dv1_link.ogg and b/web/abyss/audio/voice/female/dv1_link.ogg differ diff --git a/web/abyss/audio/voice/female/dv1_metal.ogg b/web/abyss/audio/voice/female/dv1_metal.ogg index 411f6f50..9370e733 100644 Binary files a/web/abyss/audio/voice/female/dv1_metal.ogg and b/web/abyss/audio/voice/female/dv1_metal.ogg differ diff --git a/web/abyss/audio/voice/female/dv1_teach.ogg b/web/abyss/audio/voice/female/dv1_teach.ogg index 13f51d38..5c288f15 100644 Binary files a/web/abyss/audio/voice/female/dv1_teach.ogg and b/web/abyss/audio/voice/female/dv1_teach.ogg differ diff --git a/web/abyss/audio/voice/female/dv2_down.ogg b/web/abyss/audio/voice/female/dv2_down.ogg index b4021e32..74d1c0bd 100644 Binary files a/web/abyss/audio/voice/female/dv2_down.ogg and b/web/abyss/audio/voice/female/dv2_down.ogg differ diff --git a/web/abyss/audio/voice/female/dv2_found.ogg b/web/abyss/audio/voice/female/dv2_found.ogg index ff4fd540..53b6c53f 100644 Binary files a/web/abyss/audio/voice/female/dv2_found.ogg and b/web/abyss/audio/voice/female/dv2_found.ogg differ diff --git a/web/abyss/audio/voice/female/dv3_down.ogg b/web/abyss/audio/voice/female/dv3_down.ogg index cc2abbce..082b4f0d 100644 Binary files a/web/abyss/audio/voice/female/dv3_down.ogg and b/web/abyss/audio/voice/female/dv3_down.ogg differ diff --git a/web/abyss/audio/voice/female/dv3_groan.ogg b/web/abyss/audio/voice/female/dv3_groan.ogg index a4425e1c..fd1c0645 100644 Binary files a/web/abyss/audio/voice/female/dv3_groan.ogg and b/web/abyss/audio/voice/female/dv3_groan.ogg differ diff --git a/web/abyss/audio/voice/female/dv4_down.ogg b/web/abyss/audio/voice/female/dv4_down.ogg index 22a919b5..1d5ec781 100644 Binary files a/web/abyss/audio/voice/female/dv4_down.ogg and b/web/abyss/audio/voice/female/dv4_down.ogg differ diff --git a/web/abyss/audio/voice/female/dv4_dual.m4a b/web/abyss/audio/voice/female/dv4_dual.m4a new file mode 100644 index 00000000..87aca472 Binary files /dev/null and b/web/abyss/audio/voice/female/dv4_dual.m4a differ diff --git a/web/abyss/audio/voice/female/dv4_dual.ogg b/web/abyss/audio/voice/female/dv4_dual.ogg new file mode 100644 index 00000000..63a5120a Binary files /dev/null and b/web/abyss/audio/voice/female/dv4_dual.ogg differ diff --git a/web/abyss/audio/voice/female/dv4_none.ogg b/web/abyss/audio/voice/female/dv4_none.ogg index db6766bd..45b6bfe0 100644 Binary files a/web/abyss/audio/voice/female/dv4_none.ogg and b/web/abyss/audio/voice/female/dv4_none.ogg differ diff --git a/web/abyss/audio/voice/female/dv4_slide.ogg b/web/abyss/audio/voice/female/dv4_slide.ogg index b634b1f1..ce5702bc 100644 Binary files a/web/abyss/audio/voice/female/dv4_slide.ogg and b/web/abyss/audio/voice/female/dv4_slide.ogg differ diff --git a/web/abyss/audio/voice/female/e1_a.ogg b/web/abyss/audio/voice/female/e1_a.ogg index 6553bab5..bdf0ee15 100644 Binary files a/web/abyss/audio/voice/female/e1_a.ogg and b/web/abyss/audio/voice/female/e1_a.ogg differ diff --git a/web/abyss/audio/voice/female/e1_b.ogg b/web/abyss/audio/voice/female/e1_b.ogg index c12bbab8..24e7238a 100644 Binary files a/web/abyss/audio/voice/female/e1_b.ogg and b/web/abyss/audio/voice/female/e1_b.ogg differ diff --git a/web/abyss/audio/voice/female/e2_a.ogg b/web/abyss/audio/voice/female/e2_a.ogg index e3409c55..67c3b4b5 100644 Binary files a/web/abyss/audio/voice/female/e2_a.ogg and b/web/abyss/audio/voice/female/e2_a.ogg differ diff --git a/web/abyss/audio/voice/female/e2_b.ogg b/web/abyss/audio/voice/female/e2_b.ogg index f9f97d89..dd3870e2 100644 Binary files a/web/abyss/audio/voice/female/e2_b.ogg and b/web/abyss/audio/voice/female/e2_b.ogg differ diff --git a/web/abyss/audio/voice/female/e3_a.ogg b/web/abyss/audio/voice/female/e3_a.ogg index b1bac152..665b1365 100644 Binary files a/web/abyss/audio/voice/female/e3_a.ogg and b/web/abyss/audio/voice/female/e3_a.ogg differ diff --git a/web/abyss/audio/voice/female/e3_b.ogg b/web/abyss/audio/voice/female/e3_b.ogg index 539c8137..051e4c26 100644 Binary files a/web/abyss/audio/voice/female/e3_b.ogg and b/web/abyss/audio/voice/female/e3_b.ogg differ diff --git a/web/abyss/audio/voice/female/e4_a.ogg b/web/abyss/audio/voice/female/e4_a.ogg index bf874760..e9b2dc29 100644 Binary files a/web/abyss/audio/voice/female/e4_a.ogg and b/web/abyss/audio/voice/female/e4_a.ogg differ diff --git a/web/abyss/audio/voice/female/e4_b.ogg b/web/abyss/audio/voice/female/e4_b.ogg index 86452157..c40b842c 100644 Binary files a/web/abyss/audio/voice/female/e4_b.ogg and b/web/abyss/audio/voice/female/e4_b.ogg differ diff --git a/web/abyss/audio/voice/female/ep_bai_no.ogg b/web/abyss/audio/voice/female/ep_bai_no.ogg index 5cc6c4b9..205ba680 100644 Binary files a/web/abyss/audio/voice/female/ep_bai_no.ogg and b/web/abyss/audio/voice/female/ep_bai_no.ogg differ diff --git a/web/abyss/audio/voice/female/ep_bai_ok.ogg b/web/abyss/audio/voice/female/ep_bai_ok.ogg index 26502d9e..b21d6840 100644 Binary files a/web/abyss/audio/voice/female/ep_bai_ok.ogg and b/web/abyss/audio/voice/female/ep_bai_ok.ogg differ diff --git a/web/abyss/audio/voice/female/ep_chen_lost.ogg b/web/abyss/audio/voice/female/ep_chen_lost.ogg index 42d59509..1e6e1e3d 100644 Binary files a/web/abyss/audio/voice/female/ep_chen_lost.ogg and b/web/abyss/audio/voice/female/ep_chen_lost.ogg differ diff --git a/web/abyss/audio/voice/female/ep_chen_ok.ogg b/web/abyss/audio/voice/female/ep_chen_ok.ogg index ea7dca2c..e62aa821 100644 Binary files a/web/abyss/audio/voice/female/ep_chen_ok.ogg and b/web/abyss/audio/voice/female/ep_chen_ok.ogg differ diff --git a/web/abyss/audio/voice/female/ep_gao_lost.ogg b/web/abyss/audio/voice/female/ep_gao_lost.ogg index 5487335b..4cd829bf 100644 Binary files a/web/abyss/audio/voice/female/ep_gao_lost.ogg and b/web/abyss/audio/voice/female/ep_gao_lost.ogg differ diff --git a/web/abyss/audio/voice/female/ep_gao_peace.ogg b/web/abyss/audio/voice/female/ep_gao_peace.ogg index f6b0c2f3..278c2f49 100644 Binary files a/web/abyss/audio/voice/female/ep_gao_peace.ogg and b/web/abyss/audio/voice/female/ep_gao_peace.ogg differ diff --git a/web/abyss/audio/voice/female/ep_gao_up.ogg b/web/abyss/audio/voice/female/ep_gao_up.ogg index 3e33a59e..d35d4848 100644 Binary files a/web/abyss/audio/voice/female/ep_gao_up.ogg and b/web/abyss/audio/voice/female/ep_gao_up.ogg differ diff --git a/web/abyss/audio/voice/female/ep_lead.ogg b/web/abyss/audio/voice/female/ep_lead.ogg index ed7feccc..d1755ec9 100644 Binary files a/web/abyss/audio/voice/female/ep_lead.ogg and b/web/abyss/audio/voice/female/ep_lead.ogg differ diff --git a/web/abyss/audio/voice/female/ep_trench_bell.ogg b/web/abyss/audio/voice/female/ep_trench_bell.ogg index d04e1581..ed9d1773 100644 Binary files a/web/abyss/audio/voice/female/ep_trench_bell.ogg and b/web/abyss/audio/voice/female/ep_trench_bell.ogg differ diff --git a/web/abyss/audio/voice/female/ep_trench_deep.ogg b/web/abyss/audio/voice/female/ep_trench_deep.ogg index 8698001e..801da8d9 100644 Binary files a/web/abyss/audio/voice/female/ep_trench_deep.ogg and b/web/abyss/audio/voice/female/ep_trench_deep.ogg differ diff --git a/web/abyss/audio/voice/female/ep_zheng_lost.ogg b/web/abyss/audio/voice/female/ep_zheng_lost.ogg index c7c9250d..229f4e48 100644 Binary files a/web/abyss/audio/voice/female/ep_zheng_lost.ogg and b/web/abyss/audio/voice/female/ep_zheng_lost.ogg differ diff --git a/web/abyss/audio/voice/female/ep_zheng_ok.ogg b/web/abyss/audio/voice/female/ep_zheng_ok.ogg index 7e4a521f..7743efe6 100644 Binary files a/web/abyss/audio/voice/female/ep_zheng_ok.ogg and b/web/abyss/audio/voice/female/ep_zheng_ok.ogg differ diff --git a/web/abyss/audio/voice/female/ep_zhou_no.ogg b/web/abyss/audio/voice/female/ep_zhou_no.ogg index 70d88007..521d1b93 100644 Binary files a/web/abyss/audio/voice/female/ep_zhou_no.ogg and b/web/abyss/audio/voice/female/ep_zhou_no.ogg differ diff --git a/web/abyss/audio/voice/female/ep_zhou_ok.ogg b/web/abyss/audio/voice/female/ep_zhou_ok.ogg index 149f5db3..d884cae0 100644 Binary files a/web/abyss/audio/voice/female/ep_zhou_ok.ogg and b/web/abyss/audio/voice/female/ep_zhou_ok.ogg differ diff --git a/web/abyss/audio/voice/female/g9_dry.ogg b/web/abyss/audio/voice/female/g9_dry.ogg index 100f6a13..6fa14aa9 100644 Binary files a/web/abyss/audio/voice/female/g9_dry.ogg and b/web/abyss/audio/voice/female/g9_dry.ogg differ diff --git a/web/abyss/audio/voice/female/g9_in.ogg b/web/abyss/audio/voice/female/g9_in.ogg index 8904b621..8e949810 100644 Binary files a/web/abyss/audio/voice/female/g9_in.ogg and b/web/abyss/audio/voice/female/g9_in.ogg differ diff --git a/web/abyss/audio/voice/female/g9_knot.ogg b/web/abyss/audio/voice/female/g9_knot.ogg index b3c28fe5..44e11d34 100644 Binary files a/web/abyss/audio/voice/female/g9_knot.ogg and b/web/abyss/audio/voice/female/g9_knot.ogg differ diff --git a/web/abyss/audio/voice/female/gd_again.ogg b/web/abyss/audio/voice/female/gd_again.ogg index 22f9adb8..7833df24 100644 Binary files a/web/abyss/audio/voice/female/gd_again.ogg and b/web/abyss/audio/voice/female/gd_again.ogg differ diff --git a/web/abyss/audio/voice/female/gd_brief.ogg b/web/abyss/audio/voice/female/gd_brief.ogg index 399d2a03..85c35bd4 100644 Binary files a/web/abyss/audio/voice/female/gd_brief.ogg and b/web/abyss/audio/voice/female/gd_brief.ogg differ diff --git a/web/abyss/audio/voice/female/gd_continue.ogg b/web/abyss/audio/voice/female/gd_continue.ogg index db776204..df1fd8cd 100644 Binary files a/web/abyss/audio/voice/female/gd_continue.ogg and b/web/abyss/audio/voice/female/gd_continue.ogg differ diff --git a/web/abyss/audio/voice/female/gd_invalid.ogg b/web/abyss/audio/voice/female/gd_invalid.ogg index eaea2602..83f220aa 100644 Binary files a/web/abyss/audio/voice/female/gd_invalid.ogg and b/web/abyss/audio/voice/female/gd_invalid.ogg differ diff --git a/web/abyss/audio/voice/female/gd_ping1.ogg b/web/abyss/audio/voice/female/gd_ping1.ogg index 49ee8af6..525f8019 100644 Binary files a/web/abyss/audio/voice/female/gd_ping1.ogg and b/web/abyss/audio/voice/female/gd_ping1.ogg differ diff --git a/web/abyss/audio/voice/female/gd_ping2.ogg b/web/abyss/audio/voice/female/gd_ping2.ogg index bb8acc6c..0a05fe4a 100644 Binary files a/web/abyss/audio/voice/female/gd_ping2.ogg and b/web/abyss/audio/voice/female/gd_ping2.ogg differ diff --git a/web/abyss/audio/voice/female/gd_prog1.ogg b/web/abyss/audio/voice/female/gd_prog1.ogg index 9f292b54..04b33797 100644 Binary files a/web/abyss/audio/voice/female/gd_prog1.ogg and b/web/abyss/audio/voice/female/gd_prog1.ogg differ diff --git a/web/abyss/audio/voice/female/gd_prog2.ogg b/web/abyss/audio/voice/female/gd_prog2.ogg index d1620716..9a8f933b 100644 Binary files a/web/abyss/audio/voice/female/gd_prog2.ogg and b/web/abyss/audio/voice/female/gd_prog2.ogg differ diff --git a/web/abyss/audio/voice/female/key/dv1_teach.ogg b/web/abyss/audio/voice/female/key/dv1_teach.ogg index 016f754b..87fa722e 100644 Binary files a/web/abyss/audio/voice/female/key/dv1_teach.ogg and b/web/abyss/audio/voice/female/key/dv1_teach.ogg differ diff --git a/web/abyss/audio/voice/female/key/gd_again.ogg b/web/abyss/audio/voice/female/key/gd_again.ogg index eb93d5de..00275433 100644 Binary files a/web/abyss/audio/voice/female/key/gd_again.ogg and b/web/abyss/audio/voice/female/key/gd_again.ogg differ diff --git a/web/abyss/audio/voice/female/key/gd_brief.ogg b/web/abyss/audio/voice/female/key/gd_brief.ogg index 601be62f..7b2633f5 100644 Binary files a/web/abyss/audio/voice/female/key/gd_brief.ogg and b/web/abyss/audio/voice/female/key/gd_brief.ogg differ diff --git a/web/abyss/audio/voice/female/key/gd_continue.ogg b/web/abyss/audio/voice/female/key/gd_continue.ogg index b18c377c..ec23ef3a 100644 Binary files a/web/abyss/audio/voice/female/key/gd_continue.ogg and b/web/abyss/audio/voice/female/key/gd_continue.ogg differ diff --git a/web/abyss/audio/voice/female/key/gd_ping1.ogg b/web/abyss/audio/voice/female/key/gd_ping1.ogg index d77cab56..11e156ca 100644 Binary files a/web/abyss/audio/voice/female/key/gd_ping1.ogg and b/web/abyss/audio/voice/female/key/gd_ping1.ogg differ diff --git a/web/abyss/audio/voice/female/key/gd_ping2.ogg b/web/abyss/audio/voice/female/key/gd_ping2.ogg index cb145186..8683a9ac 100644 Binary files a/web/abyss/audio/voice/female/key/gd_ping2.ogg and b/web/abyss/audio/voice/female/key/gd_ping2.ogg differ diff --git a/web/abyss/audio/voice/female/key/p1.ogg b/web/abyss/audio/voice/female/key/p1.ogg index e22c6658..52c0fc2b 100644 Binary files a/web/abyss/audio/voice/female/key/p1.ogg and b/web/abyss/audio/voice/female/key/p1.ogg differ diff --git a/web/abyss/audio/voice/female/key/sys_continue_ask.ogg b/web/abyss/audio/voice/female/key/sys_continue_ask.ogg index 20d7f8eb..339e36a6 100644 Binary files a/web/abyss/audio/voice/female/key/sys_continue_ask.ogg and b/web/abyss/audio/voice/female/key/sys_continue_ask.ogg differ diff --git a/web/abyss/audio/voice/female/key/sys_help.ogg b/web/abyss/audio/voice/female/key/sys_help.ogg index fd661523..47cbd04d 100644 Binary files a/web/abyss/audio/voice/female/key/sys_help.ogg and b/web/abyss/audio/voice/female/key/sys_help.ogg differ diff --git a/web/abyss/audio/voice/female/key/sys_menu.ogg b/web/abyss/audio/voice/female/key/sys_menu.ogg index 33d79549..d74a1e49 100644 Binary files a/web/abyss/audio/voice/female/key/sys_menu.ogg and b/web/abyss/audio/voice/female/key/sys_menu.ogg differ diff --git a/web/abyss/audio/voice/female/key/sys_skip.m4a b/web/abyss/audio/voice/female/key/sys_skip.m4a index 469b0a4d..8001729c 100644 Binary files a/web/abyss/audio/voice/female/key/sys_skip.m4a and b/web/abyss/audio/voice/female/key/sys_skip.m4a differ diff --git a/web/abyss/audio/voice/female/key/sys_skip.ogg b/web/abyss/audio/voice/female/key/sys_skip.ogg index a227c18d..82d2fdcc 100644 Binary files a/web/abyss/audio/voice/female/key/sys_skip.ogg and b/web/abyss/audio/voice/female/key/sys_skip.ogg differ diff --git a/web/abyss/audio/voice/female/oxy_crit.ogg b/web/abyss/audio/voice/female/oxy_crit.ogg index 7979c184..4fa990df 100644 Binary files a/web/abyss/audio/voice/female/oxy_crit.ogg and b/web/abyss/audio/voice/female/oxy_crit.ogg differ diff --git a/web/abyss/audio/voice/female/oxy_crit_deck.m4a b/web/abyss/audio/voice/female/oxy_crit_deck.m4a new file mode 100644 index 00000000..e25e1bb7 Binary files /dev/null and b/web/abyss/audio/voice/female/oxy_crit_deck.m4a differ diff --git a/web/abyss/audio/voice/female/oxy_crit_deck.ogg b/web/abyss/audio/voice/female/oxy_crit_deck.ogg new file mode 100644 index 00000000..14e96d84 Binary files /dev/null and b/web/abyss/audio/voice/female/oxy_crit_deck.ogg differ diff --git a/web/abyss/audio/voice/female/oxy_full.ogg b/web/abyss/audio/voice/female/oxy_full.ogg index 61dab094..6c94d386 100644 Binary files a/web/abyss/audio/voice/female/oxy_full.ogg and b/web/abyss/audio/voice/female/oxy_full.ogg differ diff --git a/web/abyss/audio/voice/female/oxy_gain.ogg b/web/abyss/audio/voice/female/oxy_gain.ogg index 0585d6ab..250bf444 100644 Binary files a/web/abyss/audio/voice/female/oxy_gain.ogg and b/web/abyss/audio/voice/female/oxy_gain.ogg differ diff --git a/web/abyss/audio/voice/female/oxy_low.ogg b/web/abyss/audio/voice/female/oxy_low.ogg index 7040c97e..d056f6d6 100644 Binary files a/web/abyss/audio/voice/female/oxy_low.ogg and b/web/abyss/audio/voice/female/oxy_low.ogg differ diff --git a/web/abyss/audio/voice/female/oxy_ok.ogg b/web/abyss/audio/voice/female/oxy_ok.ogg index 631e662d..d0dd83cf 100644 Binary files a/web/abyss/audio/voice/female/oxy_ok.ogg and b/web/abyss/audio/voice/female/oxy_ok.ogg differ diff --git a/web/abyss/audio/voice/female/p1.ogg b/web/abyss/audio/voice/female/p1.ogg index 2753befd..1bd1b567 100644 Binary files a/web/abyss/audio/voice/female/p1.ogg and b/web/abyss/audio/voice/female/p1.ogg differ diff --git a/web/abyss/audio/voice/female/p2.ogg b/web/abyss/audio/voice/female/p2.ogg index 3fb827cd..8fb486a9 100644 Binary files a/web/abyss/audio/voice/female/p2.ogg and b/web/abyss/audio/voice/female/p2.ogg differ diff --git a/web/abyss/audio/voice/female/p3.ogg b/web/abyss/audio/voice/female/p3.ogg index c506e24f..47762cd5 100644 Binary files a/web/abyss/audio/voice/female/p3.ogg and b/web/abyss/audio/voice/female/p3.ogg differ diff --git a/web/abyss/audio/voice/female/p4.ogg b/web/abyss/audio/voice/female/p4.ogg index ca3cd563..89790f58 100644 Binary files a/web/abyss/audio/voice/female/p4.ogg and b/web/abyss/audio/voice/female/p4.ogg differ diff --git a/web/abyss/audio/voice/female/p5.ogg b/web/abyss/audio/voice/female/p5.ogg index 302761da..36830d7e 100644 Binary files a/web/abyss/audio/voice/female/p5.ogg and b/web/abyss/audio/voice/female/p5.ogg differ diff --git a/web/abyss/audio/voice/female/p6.ogg b/web/abyss/audio/voice/female/p6.ogg index 2cedd410..6e04a548 100644 Binary files a/web/abyss/audio/voice/female/p6.ogg and b/web/abyss/audio/voice/female/p6.ogg differ diff --git a/web/abyss/audio/voice/female/p7.ogg b/web/abyss/audio/voice/female/p7.ogg index da952b59..dc2f031d 100644 Binary files a/web/abyss/audio/voice/female/p7.ogg and b/web/abyss/audio/voice/female/p7.ogg differ diff --git a/web/abyss/audio/voice/female/p7_chen.ogg b/web/abyss/audio/voice/female/p7_chen.ogg index a08b7bb6..f6f2d08a 100644 Binary files a/web/abyss/audio/voice/female/p7_chen.ogg and b/web/abyss/audio/voice/female/p7_chen.ogg differ diff --git a/web/abyss/audio/voice/female/p7_zheng.ogg b/web/abyss/audio/voice/female/p7_zheng.ogg index ad7ac585..18583a89 100644 Binary files a/web/abyss/audio/voice/female/p7_zheng.ogg and b/web/abyss/audio/voice/female/p7_zheng.ogg differ diff --git a/web/abyss/audio/voice/female/p8.ogg b/web/abyss/audio/voice/female/p8.ogg index ee210c8f..7dc002cc 100644 Binary files a/web/abyss/audio/voice/female/p8.ogg and b/web/abyss/audio/voice/female/p8.ogg differ diff --git a/web/abyss/audio/voice/female/p9.ogg b/web/abyss/audio/voice/female/p9.ogg index 36eda7cc..951bb84c 100644 Binary files a/web/abyss/audio/voice/female/p9.ogg and b/web/abyss/audio/voice/female/p9.ogg differ diff --git a/web/abyss/audio/voice/female/prog_d1.ogg b/web/abyss/audio/voice/female/prog_d1.ogg index 7eaddb89..d69de06e 100644 Binary files a/web/abyss/audio/voice/female/prog_d1.ogg and b/web/abyss/audio/voice/female/prog_d1.ogg differ diff --git a/web/abyss/audio/voice/female/prog_d2.ogg b/web/abyss/audio/voice/female/prog_d2.ogg index 104bb7c1..7dd9a9a9 100644 Binary files a/web/abyss/audio/voice/female/prog_d2.ogg and b/web/abyss/audio/voice/female/prog_d2.ogg differ diff --git a/web/abyss/audio/voice/female/prog_d3.ogg b/web/abyss/audio/voice/female/prog_d3.ogg index 8ee417b0..895f0287 100644 Binary files a/web/abyss/audio/voice/female/prog_d3.ogg and b/web/abyss/audio/voice/female/prog_d3.ogg differ diff --git a/web/abyss/audio/voice/female/prog_d4.ogg b/web/abyss/audio/voice/female/prog_d4.ogg index 65792f10..887008fe 100644 Binary files a/web/abyss/audio/voice/female/prog_d4.ogg and b/web/abyss/audio/voice/female/prog_d4.ogg differ diff --git a/web/abyss/audio/voice/female/prog_saved1.m4a b/web/abyss/audio/voice/female/prog_saved1.m4a new file mode 100644 index 00000000..56882ed8 Binary files /dev/null and b/web/abyss/audio/voice/female/prog_saved1.m4a differ diff --git a/web/abyss/audio/voice/female/prog_saved1.ogg b/web/abyss/audio/voice/female/prog_saved1.ogg new file mode 100644 index 00000000..d4370a46 Binary files /dev/null and b/web/abyss/audio/voice/female/prog_saved1.ogg differ diff --git a/web/abyss/audio/voice/female/prog_saved2.m4a b/web/abyss/audio/voice/female/prog_saved2.m4a new file mode 100644 index 00000000..c9c18610 Binary files /dev/null and b/web/abyss/audio/voice/female/prog_saved2.m4a differ diff --git a/web/abyss/audio/voice/female/prog_saved2.ogg b/web/abyss/audio/voice/female/prog_saved2.ogg new file mode 100644 index 00000000..1df63b29 Binary files /dev/null and b/web/abyss/audio/voice/female/prog_saved2.ogg differ diff --git a/web/abyss/audio/voice/female/prog_saved3.m4a b/web/abyss/audio/voice/female/prog_saved3.m4a new file mode 100644 index 00000000..6226cf25 Binary files /dev/null and b/web/abyss/audio/voice/female/prog_saved3.m4a differ diff --git a/web/abyss/audio/voice/female/prog_saved3.ogg b/web/abyss/audio/voice/female/prog_saved3.ogg new file mode 100644 index 00000000..b47432af Binary files /dev/null and b/web/abyss/audio/voice/female/prog_saved3.ogg differ diff --git a/web/abyss/audio/voice/female/prog_saved4.m4a b/web/abyss/audio/voice/female/prog_saved4.m4a new file mode 100644 index 00000000..16012463 Binary files /dev/null and b/web/abyss/audio/voice/female/prog_saved4.m4a differ diff --git a/web/abyss/audio/voice/female/prog_saved4.ogg b/web/abyss/audio/voice/female/prog_saved4.ogg new file mode 100644 index 00000000..bf1f53c8 Binary files /dev/null and b/web/abyss/audio/voice/female/prog_saved4.ogg differ diff --git a/web/abyss/audio/voice/female/prog_saved5.m4a b/web/abyss/audio/voice/female/prog_saved5.m4a new file mode 100644 index 00000000..cad0b96b Binary files /dev/null and b/web/abyss/audio/voice/female/prog_saved5.m4a differ diff --git a/web/abyss/audio/voice/female/prog_saved5.ogg b/web/abyss/audio/voice/female/prog_saved5.ogg new file mode 100644 index 00000000..6c6b42c7 Binary files /dev/null and b/web/abyss/audio/voice/female/prog_saved5.ogg differ diff --git a/web/abyss/audio/voice/female/sys_continue_ask.ogg b/web/abyss/audio/voice/female/sys_continue_ask.ogg index 22b6f114..8b669990 100644 Binary files a/web/abyss/audio/voice/female/sys_continue_ask.ogg and b/web/abyss/audio/voice/female/sys_continue_ask.ogg differ diff --git a/web/abyss/audio/voice/female/sys_help.ogg b/web/abyss/audio/voice/female/sys_help.ogg index f2b74cd0..9f7dfe44 100644 Binary files a/web/abyss/audio/voice/female/sys_help.ogg and b/web/abyss/audio/voice/female/sys_help.ogg differ diff --git a/web/abyss/audio/voice/female/sys_menu.ogg b/web/abyss/audio/voice/female/sys_menu.ogg index 2aabbfe6..3e484e4b 100644 Binary files a/web/abyss/audio/voice/female/sys_menu.ogg and b/web/abyss/audio/voice/female/sys_menu.ogg differ diff --git a/web/abyss/audio/voice/female/sys_menu_lobby.ogg b/web/abyss/audio/voice/female/sys_menu_lobby.ogg index 39e1405a..baa9c94a 100644 Binary files a/web/abyss/audio/voice/female/sys_menu_lobby.ogg and b/web/abyss/audio/voice/female/sys_menu_lobby.ogg differ diff --git a/web/abyss/audio/voice/female/sys_menu_restart.ogg b/web/abyss/audio/voice/female/sys_menu_restart.ogg index 0f237bb0..de5d5453 100644 Binary files a/web/abyss/audio/voice/female/sys_menu_restart.ogg and b/web/abyss/audio/voice/female/sys_menu_restart.ogg differ diff --git a/web/abyss/audio/voice/female/sys_menu_resume.ogg b/web/abyss/audio/voice/female/sys_menu_resume.ogg index ae43ce62..a5e916a3 100644 Binary files a/web/abyss/audio/voice/female/sys_menu_resume.ogg and b/web/abyss/audio/voice/female/sys_menu_resume.ogg differ diff --git a/web/abyss/audio/voice/female/sys_new_dive.ogg b/web/abyss/audio/voice/female/sys_new_dive.ogg index 11d4b9c3..27051f7d 100644 Binary files a/web/abyss/audio/voice/female/sys_new_dive.ogg and b/web/abyss/audio/voice/female/sys_new_dive.ogg differ diff --git a/web/abyss/audio/voice/female/sys_settings.ogg b/web/abyss/audio/voice/female/sys_settings.ogg index f5eb6d05..7b1dfee8 100644 Binary files a/web/abyss/audio/voice/female/sys_settings.ogg and b/web/abyss/audio/voice/female/sys_settings.ogg differ diff --git a/web/abyss/audio/voice/female/sys_skip.m4a b/web/abyss/audio/voice/female/sys_skip.m4a index eef612b3..6694cb42 100644 Binary files a/web/abyss/audio/voice/female/sys_skip.m4a and b/web/abyss/audio/voice/female/sys_skip.m4a differ diff --git a/web/abyss/audio/voice/female/sys_skip.ogg b/web/abyss/audio/voice/female/sys_skip.ogg index 81000771..3cd3bb9c 100644 Binary files a/web/abyss/audio/voice/female/sys_skip.ogg and b/web/abyss/audio/voice/female/sys_skip.ogg differ diff --git a/web/abyss/audio/voice/gao_a.ogg b/web/abyss/audio/voice/gao_a.ogg index f9a608ba..8aac728a 100644 Binary files a/web/abyss/audio/voice/gao_a.ogg and b/web/abyss/audio/voice/gao_a.ogg differ diff --git a/web/abyss/audio/voice/gao_b.ogg b/web/abyss/audio/voice/gao_b.ogg index 23387e5c..837b3377 100644 Binary files a/web/abyss/audio/voice/gao_b.ogg and b/web/abyss/audio/voice/gao_b.ogg differ diff --git a/web/abyss/audio/voice/gao_c.ogg b/web/abyss/audio/voice/gao_c.ogg index deb17e8a..3493ad8b 100644 Binary files a/web/abyss/audio/voice/gao_c.ogg and b/web/abyss/audio/voice/gao_c.ogg differ diff --git a/web/abyss/audio/voice/gao_confess.ogg b/web/abyss/audio/voice/gao_confess.ogg index 71c24748..9386e423 100644 Binary files a/web/abyss/audio/voice/gao_confess.ogg and b/web/abyss/audio/voice/gao_confess.ogg differ diff --git a/web/abyss/audio/voice/gao_final.ogg b/web/abyss/audio/voice/gao_final.ogg index 6e849189..fe9152d9 100644 Binary files a/web/abyss/audio/voice/gao_final.ogg and b/web/abyss/audio/voice/gao_final.ogg differ diff --git a/web/abyss/audio/voice/gao_last.ogg b/web/abyss/audio/voice/gao_last.ogg index 9f30a111..d0654de8 100644 Binary files a/web/abyss/audio/voice/gao_last.ogg and b/web/abyss/audio/voice/gao_last.ogg differ diff --git a/web/abyss/audio/voice/gao_peace.ogg b/web/abyss/audio/voice/gao_peace.ogg index e60935b5..8c6c8517 100644 Binary files a/web/abyss/audio/voice/gao_peace.ogg and b/web/abyss/audio/voice/gao_peace.ogg differ diff --git a/web/abyss/audio/voice/male/b_go.ogg b/web/abyss/audio/voice/male/b_go.ogg index 58939917..fe65e031 100644 Binary files a/web/abyss/audio/voice/male/b_go.ogg and b/web/abyss/audio/voice/male/b_go.ogg differ diff --git a/web/abyss/audio/voice/male/b_goal.ogg b/web/abyss/audio/voice/male/b_goal.ogg index fe5c7b37..b61ff680 100644 Binary files a/web/abyss/audio/voice/male/b_goal.ogg and b/web/abyss/audio/voice/male/b_goal.ogg differ diff --git a/web/abyss/audio/voice/male/b_open.ogg b/web/abyss/audio/voice/male/b_open.ogg index c934a7cf..7bbc2b6b 100644 Binary files a/web/abyss/audio/voice/male/b_open.ogg and b/web/abyss/audio/voice/male/b_open.ogg differ diff --git a/web/abyss/audio/voice/male/b_rule.ogg b/web/abyss/audio/voice/male/b_rule.ogg index 54504bfd..567cb218 100644 Binary files a/web/abyss/audio/voice/male/b_rule.ogg and b/web/abyss/audio/voice/male/b_rule.ogg differ diff --git a/web/abyss/audio/voice/male/d1_code.ogg b/web/abyss/audio/voice/male/d1_code.ogg index fa796761..b2cb9fda 100644 Binary files a/web/abyss/audio/voice/male/d1_code.ogg and b/web/abyss/audio/voice/male/d1_code.ogg differ diff --git a/web/abyss/audio/voice/male/d1_listen.ogg b/web/abyss/audio/voice/male/d1_listen.ogg index d7f6c819..7e1a77f6 100644 Binary files a/web/abyss/audio/voice/male/d1_listen.ogg and b/web/abyss/audio/voice/male/d1_listen.ogg differ diff --git a/web/abyss/audio/voice/male/d1_nolog.ogg b/web/abyss/audio/voice/male/d1_nolog.ogg index 58ed6cf3..85c79483 100644 Binary files a/web/abyss/audio/voice/male/d1_nolog.ogg and b/web/abyss/audio/voice/male/d1_nolog.ogg differ diff --git a/web/abyss/audio/voice/male/d1_surf.ogg b/web/abyss/audio/voice/male/d1_surf.ogg index fb2013de..be4dc401 100644 Binary files a/web/abyss/audio/voice/male/d1_surf.ogg and b/web/abyss/audio/voice/male/d1_surf.ogg differ diff --git a/web/abyss/audio/voice/male/d1_up.ogg b/web/abyss/audio/voice/male/d1_up.ogg index 8ad5b869..22a3e9d5 100644 Binary files a/web/abyss/audio/voice/male/d1_up.ogg and b/web/abyss/audio/voice/male/d1_up.ogg differ diff --git a/web/abyss/audio/voice/male/d2_cut.ogg b/web/abyss/audio/voice/male/d2_cut.ogg index 7c5c46a1..fb528c3e 100644 Binary files a/web/abyss/audio/voice/male/d2_cut.ogg and b/web/abyss/audio/voice/male/d2_cut.ogg differ diff --git a/web/abyss/audio/voice/male/d2_flash.ogg b/web/abyss/audio/voice/male/d2_flash.ogg index 83f6d068..59b44d6b 100644 Binary files a/web/abyss/audio/voice/male/d2_flash.ogg and b/web/abyss/audio/voice/male/d2_flash.ogg differ diff --git a/web/abyss/audio/voice/male/d2_leave.ogg b/web/abyss/audio/voice/male/d2_leave.ogg index d7a5b0f6..9385155e 100644 Binary files a/web/abyss/audio/voice/male/d2_leave.ogg and b/web/abyss/audio/voice/male/d2_leave.ogg differ diff --git a/web/abyss/audio/voice/male/d2_pry.ogg b/web/abyss/audio/voice/male/d2_pry.ogg index 8819dbc2..d7bc7a68 100644 Binary files a/web/abyss/audio/voice/male/d2_pry.ogg and b/web/abyss/audio/voice/male/d2_pry.ogg differ diff --git a/web/abyss/audio/voice/male/d2_pry_ok.ogg b/web/abyss/audio/voice/male/d2_pry_ok.ogg index 12554280..35c18298 100644 Binary files a/web/abyss/audio/voice/male/d2_pry_ok.ogg and b/web/abyss/audio/voice/male/d2_pry_ok.ogg differ diff --git a/web/abyss/audio/voice/male/d2_pry_slow.ogg b/web/abyss/audio/voice/male/d2_pry_slow.ogg index e25fb067..fdb6864f 100644 Binary files a/web/abyss/audio/voice/male/d2_pry_slow.ogg and b/web/abyss/audio/voice/male/d2_pry_slow.ogg differ diff --git a/web/abyss/audio/voice/male/d2_supply.ogg b/web/abyss/audio/voice/male/d2_supply.ogg index 4d443bf0..2875f09d 100644 Binary files a/web/abyss/audio/voice/male/d2_supply.ogg and b/web/abyss/audio/voice/male/d2_supply.ogg differ diff --git a/web/abyss/audio/voice/male/d2_surf.ogg b/web/abyss/audio/voice/male/d2_surf.ogg index 4174bcdf..428964f1 100644 Binary files a/web/abyss/audio/voice/male/d2_surf.ogg and b/web/abyss/audio/voice/male/d2_surf.ogg differ diff --git a/web/abyss/audio/voice/male/d2_valve.ogg b/web/abyss/audio/voice/male/d2_valve.ogg index a59b6d5b..a4331097 100644 Binary files a/web/abyss/audio/voice/male/d2_valve.ogg and b/web/abyss/audio/voice/male/d2_valve.ogg differ diff --git a/web/abyss/audio/voice/male/d2_valve_e.ogg b/web/abyss/audio/voice/male/d2_valve_e.ogg index c137c403..d252ba42 100644 Binary files a/web/abyss/audio/voice/male/d2_valve_e.ogg and b/web/abyss/audio/voice/male/d2_valve_e.ogg differ diff --git a/web/abyss/audio/voice/male/d3_chen.ogg b/web/abyss/audio/voice/male/d3_chen.ogg index c70cdd80..ef6e7c2e 100644 Binary files a/web/abyss/audio/voice/male/d3_chen.ogg and b/web/abyss/audio/voice/male/d3_chen.ogg differ diff --git a/web/abyss/audio/voice/male/d3_chen_e.ogg b/web/abyss/audio/voice/male/d3_chen_e.ogg index 48d1a7d9..a6871189 100644 Binary files a/web/abyss/audio/voice/male/d3_chen_e.ogg and b/web/abyss/audio/voice/male/d3_chen_e.ogg differ diff --git a/web/abyss/audio/voice/male/d3_promise.ogg b/web/abyss/audio/voice/male/d3_promise.ogg index b983c4aa..58a399c3 100644 Binary files a/web/abyss/audio/voice/male/d3_promise.ogg and b/web/abyss/audio/voice/male/d3_promise.ogg differ diff --git a/web/abyss/audio/voice/male/d3_spare.ogg b/web/abyss/audio/voice/male/d3_spare.ogg index 1fab6e38..e16d1135 100644 Binary files a/web/abyss/audio/voice/male/d3_spare.ogg and b/web/abyss/audio/voice/male/d3_spare.ogg differ diff --git a/web/abyss/audio/voice/male/d3_spare_e.ogg b/web/abyss/audio/voice/male/d3_spare_e.ogg index eeee9ed1..7586992b 100644 Binary files a/web/abyss/audio/voice/male/d3_spare_e.ogg and b/web/abyss/audio/voice/male/d3_spare_e.ogg differ diff --git a/web/abyss/audio/voice/male/d3_surf.ogg b/web/abyss/audio/voice/male/d3_surf.ogg index 51724036..9d01ba80 100644 Binary files a/web/abyss/audio/voice/male/d3_surf.ogg and b/web/abyss/audio/voice/male/d3_surf.ogg differ diff --git a/web/abyss/audio/voice/male/d3_zheng.ogg b/web/abyss/audio/voice/male/d3_zheng.ogg index fa395050..646cc02c 100644 Binary files a/web/abyss/audio/voice/male/d3_zheng.ogg and b/web/abyss/audio/voice/male/d3_zheng.ogg differ diff --git a/web/abyss/audio/voice/male/d3_zheng_e.ogg b/web/abyss/audio/voice/male/d3_zheng_e.ogg index 5277fc6a..24d2f124 100644 Binary files a/web/abyss/audio/voice/male/d3_zheng_e.ogg and b/web/abyss/audio/voice/male/d3_zheng_e.ogg differ diff --git a/web/abyss/audio/voice/male/d4_fast.ogg b/web/abyss/audio/voice/male/d4_fast.ogg index bc32dd07..fed05f8d 100644 Binary files a/web/abyss/audio/voice/male/d4_fast.ogg and b/web/abyss/audio/voice/male/d4_fast.ogg differ diff --git a/web/abyss/audio/voice/male/d4_fast_e.ogg b/web/abyss/audio/voice/male/d4_fast_e.ogg index 746dd917..4aa0db34 100644 Binary files a/web/abyss/audio/voice/male/d4_fast_e.ogg and b/web/abyss/audio/voice/male/d4_fast_e.ogg differ diff --git a/web/abyss/audio/voice/male/d4_pick_chen.ogg b/web/abyss/audio/voice/male/d4_pick_chen.ogg index 6b3c5459..c168cd36 100644 Binary files a/web/abyss/audio/voice/male/d4_pick_chen.ogg and b/web/abyss/audio/voice/male/d4_pick_chen.ogg differ diff --git a/web/abyss/audio/voice/male/d4_pick_gao.ogg b/web/abyss/audio/voice/male/d4_pick_gao.ogg index ac93df4c..3c6b60de 100644 Binary files a/web/abyss/audio/voice/male/d4_pick_gao.ogg and b/web/abyss/audio/voice/male/d4_pick_gao.ogg differ diff --git a/web/abyss/audio/voice/male/d4_pick_zheng.ogg b/web/abyss/audio/voice/male/d4_pick_zheng.ogg index cab46981..951d5b52 100644 Binary files a/web/abyss/audio/voice/male/d4_pick_zheng.ogg and b/web/abyss/audio/voice/male/d4_pick_zheng.ogg differ diff --git a/web/abyss/audio/voice/male/d4_silent.ogg b/web/abyss/audio/voice/male/d4_silent.ogg index ce8ef572..df0606bc 100644 Binary files a/web/abyss/audio/voice/male/d4_silent.ogg and b/web/abyss/audio/voice/male/d4_silent.ogg differ diff --git a/web/abyss/audio/voice/male/d4_slow.ogg b/web/abyss/audio/voice/male/d4_slow.ogg index 880debdc..e8a07286 100644 Binary files a/web/abyss/audio/voice/male/d4_slow.ogg and b/web/abyss/audio/voice/male/d4_slow.ogg differ diff --git a/web/abyss/audio/voice/male/d4_slow_e.ogg b/web/abyss/audio/voice/male/d4_slow_e.ogg index 18657e80..2c4e0b7e 100644 Binary files a/web/abyss/audio/voice/male/d4_slow_e.ogg and b/web/abyss/audio/voice/male/d4_slow_e.ogg differ diff --git a/web/abyss/audio/voice/male/d4_stay_lost.ogg b/web/abyss/audio/voice/male/d4_stay_lost.ogg index 8d87097e..46c3d55a 100644 Binary files a/web/abyss/audio/voice/male/d4_stay_lost.ogg and b/web/abyss/audio/voice/male/d4_stay_lost.ogg differ diff --git a/web/abyss/audio/voice/male/d4_surf.ogg b/web/abyss/audio/voice/male/d4_surf.ogg index 5671feb0..7c951d4a 100644 Binary files a/web/abyss/audio/voice/male/d4_surf.ogg and b/web/abyss/audio/voice/male/d4_surf.ogg differ diff --git a/web/abyss/audio/voice/male/d4_talk.ogg b/web/abyss/audio/voice/male/d4_talk.ogg index 70bf0b60..2af483e4 100644 Binary files a/web/abyss/audio/voice/male/d4_talk.ogg and b/web/abyss/audio/voice/male/d4_talk.ogg differ diff --git a/web/abyss/audio/voice/male/d9_bell.ogg b/web/abyss/audio/voice/male/d9_bell.ogg index 197c6f09..47bc4e7b 100644 Binary files a/web/abyss/audio/voice/male/d9_bell.ogg and b/web/abyss/audio/voice/male/d9_bell.ogg differ diff --git a/web/abyss/audio/voice/male/d9_bello.ogg b/web/abyss/audio/voice/male/d9_bello.ogg index b49064b4..82adb280 100644 Binary files a/web/abyss/audio/voice/male/d9_bello.ogg and b/web/abyss/audio/voice/male/d9_bello.ogg differ diff --git a/web/abyss/audio/voice/male/d9_rest.ogg b/web/abyss/audio/voice/male/d9_rest.ogg index 40907fb2..90cd26fe 100644 Binary files a/web/abyss/audio/voice/male/d9_rest.ogg and b/web/abyss/audio/voice/male/d9_rest.ogg differ diff --git a/web/abyss/audio/voice/male/dry_a.ogg b/web/abyss/audio/voice/male/dry_a.ogg index bf594368..073dfb25 100644 Binary files a/web/abyss/audio/voice/male/dry_a.ogg and b/web/abyss/audio/voice/male/dry_a.ogg differ diff --git a/web/abyss/audio/voice/male/dry_b.ogg b/web/abyss/audio/voice/male/dry_b.ogg index 90720d10..dfb52ddc 100644 Binary files a/web/abyss/audio/voice/male/dry_b.ogg and b/web/abyss/audio/voice/male/dry_b.ogg differ diff --git a/web/abyss/audio/voice/male/dv1_down.ogg b/web/abyss/audio/voice/male/dv1_down.ogg index 3afaa4de..01c0f185 100644 Binary files a/web/abyss/audio/voice/male/dv1_down.ogg and b/web/abyss/audio/voice/male/dv1_down.ogg differ diff --git a/web/abyss/audio/voice/male/dv1_link.ogg b/web/abyss/audio/voice/male/dv1_link.ogg index ad3c6cc5..f34b8388 100644 Binary files a/web/abyss/audio/voice/male/dv1_link.ogg and b/web/abyss/audio/voice/male/dv1_link.ogg differ diff --git a/web/abyss/audio/voice/male/dv1_metal.ogg b/web/abyss/audio/voice/male/dv1_metal.ogg index 30bb4207..446fd4cd 100644 Binary files a/web/abyss/audio/voice/male/dv1_metal.ogg and b/web/abyss/audio/voice/male/dv1_metal.ogg differ diff --git a/web/abyss/audio/voice/male/dv1_teach.ogg b/web/abyss/audio/voice/male/dv1_teach.ogg index 8dea811a..173bb2bb 100644 Binary files a/web/abyss/audio/voice/male/dv1_teach.ogg and b/web/abyss/audio/voice/male/dv1_teach.ogg differ diff --git a/web/abyss/audio/voice/male/dv2_down.ogg b/web/abyss/audio/voice/male/dv2_down.ogg index 577f0a89..10ce76d0 100644 Binary files a/web/abyss/audio/voice/male/dv2_down.ogg and b/web/abyss/audio/voice/male/dv2_down.ogg differ diff --git a/web/abyss/audio/voice/male/dv2_found.ogg b/web/abyss/audio/voice/male/dv2_found.ogg index 126284f7..47b57e0e 100644 Binary files a/web/abyss/audio/voice/male/dv2_found.ogg and b/web/abyss/audio/voice/male/dv2_found.ogg differ diff --git a/web/abyss/audio/voice/male/dv3_down.ogg b/web/abyss/audio/voice/male/dv3_down.ogg index f1c7a6e8..35d80668 100644 Binary files a/web/abyss/audio/voice/male/dv3_down.ogg and b/web/abyss/audio/voice/male/dv3_down.ogg differ diff --git a/web/abyss/audio/voice/male/dv3_groan.ogg b/web/abyss/audio/voice/male/dv3_groan.ogg index f7f17b91..275792a5 100644 Binary files a/web/abyss/audio/voice/male/dv3_groan.ogg and b/web/abyss/audio/voice/male/dv3_groan.ogg differ diff --git a/web/abyss/audio/voice/male/dv4_down.ogg b/web/abyss/audio/voice/male/dv4_down.ogg index bddd0c90..cc4144da 100644 Binary files a/web/abyss/audio/voice/male/dv4_down.ogg and b/web/abyss/audio/voice/male/dv4_down.ogg differ diff --git a/web/abyss/audio/voice/male/dv4_dual.m4a b/web/abyss/audio/voice/male/dv4_dual.m4a new file mode 100644 index 00000000..52bdd2b8 Binary files /dev/null and b/web/abyss/audio/voice/male/dv4_dual.m4a differ diff --git a/web/abyss/audio/voice/male/dv4_dual.ogg b/web/abyss/audio/voice/male/dv4_dual.ogg new file mode 100644 index 00000000..f4280e8b Binary files /dev/null and b/web/abyss/audio/voice/male/dv4_dual.ogg differ diff --git a/web/abyss/audio/voice/male/dv4_none.ogg b/web/abyss/audio/voice/male/dv4_none.ogg index f032ec7e..4e7a9d7a 100644 Binary files a/web/abyss/audio/voice/male/dv4_none.ogg and b/web/abyss/audio/voice/male/dv4_none.ogg differ diff --git a/web/abyss/audio/voice/male/dv4_slide.ogg b/web/abyss/audio/voice/male/dv4_slide.ogg index 9a346814..053975dd 100644 Binary files a/web/abyss/audio/voice/male/dv4_slide.ogg and b/web/abyss/audio/voice/male/dv4_slide.ogg differ diff --git a/web/abyss/audio/voice/male/e1_a.ogg b/web/abyss/audio/voice/male/e1_a.ogg index e6b3152f..9f2aebdc 100644 Binary files a/web/abyss/audio/voice/male/e1_a.ogg and b/web/abyss/audio/voice/male/e1_a.ogg differ diff --git a/web/abyss/audio/voice/male/e1_b.ogg b/web/abyss/audio/voice/male/e1_b.ogg index e103811d..36c60045 100644 Binary files a/web/abyss/audio/voice/male/e1_b.ogg and b/web/abyss/audio/voice/male/e1_b.ogg differ diff --git a/web/abyss/audio/voice/male/e2_a.ogg b/web/abyss/audio/voice/male/e2_a.ogg index 5c319e1b..79e34254 100644 Binary files a/web/abyss/audio/voice/male/e2_a.ogg and b/web/abyss/audio/voice/male/e2_a.ogg differ diff --git a/web/abyss/audio/voice/male/e2_b.ogg b/web/abyss/audio/voice/male/e2_b.ogg index e9681911..551d25e3 100644 Binary files a/web/abyss/audio/voice/male/e2_b.ogg and b/web/abyss/audio/voice/male/e2_b.ogg differ diff --git a/web/abyss/audio/voice/male/e3_a.ogg b/web/abyss/audio/voice/male/e3_a.ogg index 5e9ccb3c..701947ff 100644 Binary files a/web/abyss/audio/voice/male/e3_a.ogg and b/web/abyss/audio/voice/male/e3_a.ogg differ diff --git a/web/abyss/audio/voice/male/e3_b.ogg b/web/abyss/audio/voice/male/e3_b.ogg index 63665c8c..a02350b5 100644 Binary files a/web/abyss/audio/voice/male/e3_b.ogg and b/web/abyss/audio/voice/male/e3_b.ogg differ diff --git a/web/abyss/audio/voice/male/e4_a.ogg b/web/abyss/audio/voice/male/e4_a.ogg index 83944d94..341f81e4 100644 Binary files a/web/abyss/audio/voice/male/e4_a.ogg and b/web/abyss/audio/voice/male/e4_a.ogg differ diff --git a/web/abyss/audio/voice/male/e4_b.ogg b/web/abyss/audio/voice/male/e4_b.ogg index d1a5ecbe..037e58cc 100644 Binary files a/web/abyss/audio/voice/male/e4_b.ogg and b/web/abyss/audio/voice/male/e4_b.ogg differ diff --git a/web/abyss/audio/voice/male/ep_bai_no.ogg b/web/abyss/audio/voice/male/ep_bai_no.ogg index 733c0182..fab5645e 100644 Binary files a/web/abyss/audio/voice/male/ep_bai_no.ogg and b/web/abyss/audio/voice/male/ep_bai_no.ogg differ diff --git a/web/abyss/audio/voice/male/ep_bai_ok.ogg b/web/abyss/audio/voice/male/ep_bai_ok.ogg index c0d6da24..e9755625 100644 Binary files a/web/abyss/audio/voice/male/ep_bai_ok.ogg and b/web/abyss/audio/voice/male/ep_bai_ok.ogg differ diff --git a/web/abyss/audio/voice/male/ep_chen_lost.ogg b/web/abyss/audio/voice/male/ep_chen_lost.ogg index 4cdbfbb3..b28bb530 100644 Binary files a/web/abyss/audio/voice/male/ep_chen_lost.ogg and b/web/abyss/audio/voice/male/ep_chen_lost.ogg differ diff --git a/web/abyss/audio/voice/male/ep_chen_ok.ogg b/web/abyss/audio/voice/male/ep_chen_ok.ogg index eaab5c3d..b6ed9444 100644 Binary files a/web/abyss/audio/voice/male/ep_chen_ok.ogg and b/web/abyss/audio/voice/male/ep_chen_ok.ogg differ diff --git a/web/abyss/audio/voice/male/ep_gao_lost.ogg b/web/abyss/audio/voice/male/ep_gao_lost.ogg index de2850b4..de180973 100644 Binary files a/web/abyss/audio/voice/male/ep_gao_lost.ogg and b/web/abyss/audio/voice/male/ep_gao_lost.ogg differ diff --git a/web/abyss/audio/voice/male/ep_gao_peace.ogg b/web/abyss/audio/voice/male/ep_gao_peace.ogg index 93f3444c..a4dd016e 100644 Binary files a/web/abyss/audio/voice/male/ep_gao_peace.ogg and b/web/abyss/audio/voice/male/ep_gao_peace.ogg differ diff --git a/web/abyss/audio/voice/male/ep_gao_up.ogg b/web/abyss/audio/voice/male/ep_gao_up.ogg index d99eed4a..a46f9654 100644 Binary files a/web/abyss/audio/voice/male/ep_gao_up.ogg and b/web/abyss/audio/voice/male/ep_gao_up.ogg differ diff --git a/web/abyss/audio/voice/male/ep_lead.ogg b/web/abyss/audio/voice/male/ep_lead.ogg index 40f4c0e8..60d3089b 100644 Binary files a/web/abyss/audio/voice/male/ep_lead.ogg and b/web/abyss/audio/voice/male/ep_lead.ogg differ diff --git a/web/abyss/audio/voice/male/ep_trench_bell.ogg b/web/abyss/audio/voice/male/ep_trench_bell.ogg index a3957cad..5811a1a9 100644 Binary files a/web/abyss/audio/voice/male/ep_trench_bell.ogg and b/web/abyss/audio/voice/male/ep_trench_bell.ogg differ diff --git a/web/abyss/audio/voice/male/ep_trench_deep.ogg b/web/abyss/audio/voice/male/ep_trench_deep.ogg index 180d86da..f3fb856b 100644 Binary files a/web/abyss/audio/voice/male/ep_trench_deep.ogg and b/web/abyss/audio/voice/male/ep_trench_deep.ogg differ diff --git a/web/abyss/audio/voice/male/ep_zheng_lost.ogg b/web/abyss/audio/voice/male/ep_zheng_lost.ogg index 1bb0bb54..1cd95d50 100644 Binary files a/web/abyss/audio/voice/male/ep_zheng_lost.ogg and b/web/abyss/audio/voice/male/ep_zheng_lost.ogg differ diff --git a/web/abyss/audio/voice/male/ep_zheng_ok.ogg b/web/abyss/audio/voice/male/ep_zheng_ok.ogg index 427966f1..32f995e1 100644 Binary files a/web/abyss/audio/voice/male/ep_zheng_ok.ogg and b/web/abyss/audio/voice/male/ep_zheng_ok.ogg differ diff --git a/web/abyss/audio/voice/male/ep_zhou_no.ogg b/web/abyss/audio/voice/male/ep_zhou_no.ogg index 2f80722b..263f22db 100644 Binary files a/web/abyss/audio/voice/male/ep_zhou_no.ogg and b/web/abyss/audio/voice/male/ep_zhou_no.ogg differ diff --git a/web/abyss/audio/voice/male/ep_zhou_ok.ogg b/web/abyss/audio/voice/male/ep_zhou_ok.ogg index 10be03e7..8c7aed43 100644 Binary files a/web/abyss/audio/voice/male/ep_zhou_ok.ogg and b/web/abyss/audio/voice/male/ep_zhou_ok.ogg differ diff --git a/web/abyss/audio/voice/male/g9_dry.ogg b/web/abyss/audio/voice/male/g9_dry.ogg index 6b75362a..8a2a1c84 100644 Binary files a/web/abyss/audio/voice/male/g9_dry.ogg and b/web/abyss/audio/voice/male/g9_dry.ogg differ diff --git a/web/abyss/audio/voice/male/g9_in.ogg b/web/abyss/audio/voice/male/g9_in.ogg index d9a49cf8..69e99f9b 100644 Binary files a/web/abyss/audio/voice/male/g9_in.ogg and b/web/abyss/audio/voice/male/g9_in.ogg differ diff --git a/web/abyss/audio/voice/male/g9_knot.ogg b/web/abyss/audio/voice/male/g9_knot.ogg index e1688629..eb83a2a9 100644 Binary files a/web/abyss/audio/voice/male/g9_knot.ogg and b/web/abyss/audio/voice/male/g9_knot.ogg differ diff --git a/web/abyss/audio/voice/male/gd_again.ogg b/web/abyss/audio/voice/male/gd_again.ogg index d785e33b..1ecc0d86 100644 Binary files a/web/abyss/audio/voice/male/gd_again.ogg and b/web/abyss/audio/voice/male/gd_again.ogg differ diff --git a/web/abyss/audio/voice/male/gd_brief.ogg b/web/abyss/audio/voice/male/gd_brief.ogg index 1a57619a..515c789d 100644 Binary files a/web/abyss/audio/voice/male/gd_brief.ogg and b/web/abyss/audio/voice/male/gd_brief.ogg differ diff --git a/web/abyss/audio/voice/male/gd_continue.ogg b/web/abyss/audio/voice/male/gd_continue.ogg index e019c28b..cf660097 100644 Binary files a/web/abyss/audio/voice/male/gd_continue.ogg and b/web/abyss/audio/voice/male/gd_continue.ogg differ diff --git a/web/abyss/audio/voice/male/gd_invalid.ogg b/web/abyss/audio/voice/male/gd_invalid.ogg index 0f201840..d078ba49 100644 Binary files a/web/abyss/audio/voice/male/gd_invalid.ogg and b/web/abyss/audio/voice/male/gd_invalid.ogg differ diff --git a/web/abyss/audio/voice/male/gd_ping1.ogg b/web/abyss/audio/voice/male/gd_ping1.ogg index 1989ec2c..62e1e91c 100644 Binary files a/web/abyss/audio/voice/male/gd_ping1.ogg and b/web/abyss/audio/voice/male/gd_ping1.ogg differ diff --git a/web/abyss/audio/voice/male/gd_ping2.ogg b/web/abyss/audio/voice/male/gd_ping2.ogg index 22a6d1e5..27445d92 100644 Binary files a/web/abyss/audio/voice/male/gd_ping2.ogg and b/web/abyss/audio/voice/male/gd_ping2.ogg differ diff --git a/web/abyss/audio/voice/male/gd_prog1.ogg b/web/abyss/audio/voice/male/gd_prog1.ogg index 8ebe66a9..a2237fa4 100644 Binary files a/web/abyss/audio/voice/male/gd_prog1.ogg and b/web/abyss/audio/voice/male/gd_prog1.ogg differ diff --git a/web/abyss/audio/voice/male/gd_prog2.ogg b/web/abyss/audio/voice/male/gd_prog2.ogg index 16c47f3d..ed83048d 100644 Binary files a/web/abyss/audio/voice/male/gd_prog2.ogg and b/web/abyss/audio/voice/male/gd_prog2.ogg differ diff --git a/web/abyss/audio/voice/male/key/dv1_teach.ogg b/web/abyss/audio/voice/male/key/dv1_teach.ogg index 41658a46..84af4e08 100644 Binary files a/web/abyss/audio/voice/male/key/dv1_teach.ogg and b/web/abyss/audio/voice/male/key/dv1_teach.ogg differ diff --git a/web/abyss/audio/voice/male/key/gd_again.ogg b/web/abyss/audio/voice/male/key/gd_again.ogg index 7715ddf7..17169dfa 100644 Binary files a/web/abyss/audio/voice/male/key/gd_again.ogg and b/web/abyss/audio/voice/male/key/gd_again.ogg differ diff --git a/web/abyss/audio/voice/male/key/gd_brief.ogg b/web/abyss/audio/voice/male/key/gd_brief.ogg index 530c3c94..37a66932 100644 Binary files a/web/abyss/audio/voice/male/key/gd_brief.ogg and b/web/abyss/audio/voice/male/key/gd_brief.ogg differ diff --git a/web/abyss/audio/voice/male/key/gd_continue.ogg b/web/abyss/audio/voice/male/key/gd_continue.ogg index f6c3b45c..9c72b88a 100644 Binary files a/web/abyss/audio/voice/male/key/gd_continue.ogg and b/web/abyss/audio/voice/male/key/gd_continue.ogg differ diff --git a/web/abyss/audio/voice/male/key/gd_ping1.ogg b/web/abyss/audio/voice/male/key/gd_ping1.ogg index 46f20dab..ea97fe87 100644 Binary files a/web/abyss/audio/voice/male/key/gd_ping1.ogg and b/web/abyss/audio/voice/male/key/gd_ping1.ogg differ diff --git a/web/abyss/audio/voice/male/key/gd_ping2.ogg b/web/abyss/audio/voice/male/key/gd_ping2.ogg index 43841cf6..cc385181 100644 Binary files a/web/abyss/audio/voice/male/key/gd_ping2.ogg and b/web/abyss/audio/voice/male/key/gd_ping2.ogg differ diff --git a/web/abyss/audio/voice/male/key/p1.ogg b/web/abyss/audio/voice/male/key/p1.ogg index 232f598b..57c36e00 100644 Binary files a/web/abyss/audio/voice/male/key/p1.ogg and b/web/abyss/audio/voice/male/key/p1.ogg differ diff --git a/web/abyss/audio/voice/male/key/sys_continue_ask.ogg b/web/abyss/audio/voice/male/key/sys_continue_ask.ogg index d3d0f1a9..f76f7507 100644 Binary files a/web/abyss/audio/voice/male/key/sys_continue_ask.ogg and b/web/abyss/audio/voice/male/key/sys_continue_ask.ogg differ diff --git a/web/abyss/audio/voice/male/key/sys_help.ogg b/web/abyss/audio/voice/male/key/sys_help.ogg index ae58bf1e..178b98fa 100644 Binary files a/web/abyss/audio/voice/male/key/sys_help.ogg and b/web/abyss/audio/voice/male/key/sys_help.ogg differ diff --git a/web/abyss/audio/voice/male/key/sys_menu.ogg b/web/abyss/audio/voice/male/key/sys_menu.ogg index 82f76587..750c0d73 100644 Binary files a/web/abyss/audio/voice/male/key/sys_menu.ogg and b/web/abyss/audio/voice/male/key/sys_menu.ogg differ diff --git a/web/abyss/audio/voice/male/key/sys_skip.m4a b/web/abyss/audio/voice/male/key/sys_skip.m4a index 98aeb6a8..1dbf5399 100644 Binary files a/web/abyss/audio/voice/male/key/sys_skip.m4a and b/web/abyss/audio/voice/male/key/sys_skip.m4a differ diff --git a/web/abyss/audio/voice/male/key/sys_skip.ogg b/web/abyss/audio/voice/male/key/sys_skip.ogg index d4ca52b4..ddd6c558 100644 Binary files a/web/abyss/audio/voice/male/key/sys_skip.ogg and b/web/abyss/audio/voice/male/key/sys_skip.ogg differ diff --git a/web/abyss/audio/voice/male/oxy_crit.ogg b/web/abyss/audio/voice/male/oxy_crit.ogg index a963cfd8..654321fe 100644 Binary files a/web/abyss/audio/voice/male/oxy_crit.ogg and b/web/abyss/audio/voice/male/oxy_crit.ogg differ diff --git a/web/abyss/audio/voice/male/oxy_crit_deck.m4a b/web/abyss/audio/voice/male/oxy_crit_deck.m4a new file mode 100644 index 00000000..c31d5ce8 Binary files /dev/null and b/web/abyss/audio/voice/male/oxy_crit_deck.m4a differ diff --git a/web/abyss/audio/voice/male/oxy_crit_deck.ogg b/web/abyss/audio/voice/male/oxy_crit_deck.ogg new file mode 100644 index 00000000..d8a544b6 Binary files /dev/null and b/web/abyss/audio/voice/male/oxy_crit_deck.ogg differ diff --git a/web/abyss/audio/voice/male/oxy_full.ogg b/web/abyss/audio/voice/male/oxy_full.ogg index 6fc1d382..9cfa360d 100644 Binary files a/web/abyss/audio/voice/male/oxy_full.ogg and b/web/abyss/audio/voice/male/oxy_full.ogg differ diff --git a/web/abyss/audio/voice/male/oxy_gain.ogg b/web/abyss/audio/voice/male/oxy_gain.ogg index 86eb28e5..7705aa67 100644 Binary files a/web/abyss/audio/voice/male/oxy_gain.ogg and b/web/abyss/audio/voice/male/oxy_gain.ogg differ diff --git a/web/abyss/audio/voice/male/oxy_low.ogg b/web/abyss/audio/voice/male/oxy_low.ogg index 90aaba78..c1b12c05 100644 Binary files a/web/abyss/audio/voice/male/oxy_low.ogg and b/web/abyss/audio/voice/male/oxy_low.ogg differ diff --git a/web/abyss/audio/voice/male/oxy_ok.ogg b/web/abyss/audio/voice/male/oxy_ok.ogg index 07ee4aee..b1db517a 100644 Binary files a/web/abyss/audio/voice/male/oxy_ok.ogg and b/web/abyss/audio/voice/male/oxy_ok.ogg differ diff --git a/web/abyss/audio/voice/male/p1.ogg b/web/abyss/audio/voice/male/p1.ogg index 34b20267..0f3755ec 100644 Binary files a/web/abyss/audio/voice/male/p1.ogg and b/web/abyss/audio/voice/male/p1.ogg differ diff --git a/web/abyss/audio/voice/male/p2.ogg b/web/abyss/audio/voice/male/p2.ogg index c20dc80a..fa3561dc 100644 Binary files a/web/abyss/audio/voice/male/p2.ogg and b/web/abyss/audio/voice/male/p2.ogg differ diff --git a/web/abyss/audio/voice/male/p3.ogg b/web/abyss/audio/voice/male/p3.ogg index cc44733c..8010291a 100644 Binary files a/web/abyss/audio/voice/male/p3.ogg and b/web/abyss/audio/voice/male/p3.ogg differ diff --git a/web/abyss/audio/voice/male/p4.ogg b/web/abyss/audio/voice/male/p4.ogg index a29fa850..e5ee79dd 100644 Binary files a/web/abyss/audio/voice/male/p4.ogg and b/web/abyss/audio/voice/male/p4.ogg differ diff --git a/web/abyss/audio/voice/male/p5.ogg b/web/abyss/audio/voice/male/p5.ogg index f155e564..a6600b70 100644 Binary files a/web/abyss/audio/voice/male/p5.ogg and b/web/abyss/audio/voice/male/p5.ogg differ diff --git a/web/abyss/audio/voice/male/p6.ogg b/web/abyss/audio/voice/male/p6.ogg index 939ad4fb..7cdc8226 100644 Binary files a/web/abyss/audio/voice/male/p6.ogg and b/web/abyss/audio/voice/male/p6.ogg differ diff --git a/web/abyss/audio/voice/male/p7.ogg b/web/abyss/audio/voice/male/p7.ogg index 86f7121f..20dc68fb 100644 Binary files a/web/abyss/audio/voice/male/p7.ogg and b/web/abyss/audio/voice/male/p7.ogg differ diff --git a/web/abyss/audio/voice/male/p7_chen.ogg b/web/abyss/audio/voice/male/p7_chen.ogg index d87a5a85..0a30f41e 100644 Binary files a/web/abyss/audio/voice/male/p7_chen.ogg and b/web/abyss/audio/voice/male/p7_chen.ogg differ diff --git a/web/abyss/audio/voice/male/p7_zheng.ogg b/web/abyss/audio/voice/male/p7_zheng.ogg index 411d178c..522ba4bd 100644 Binary files a/web/abyss/audio/voice/male/p7_zheng.ogg and b/web/abyss/audio/voice/male/p7_zheng.ogg differ diff --git a/web/abyss/audio/voice/male/p8.ogg b/web/abyss/audio/voice/male/p8.ogg index 424a8f3c..d0a23d09 100644 Binary files a/web/abyss/audio/voice/male/p8.ogg and b/web/abyss/audio/voice/male/p8.ogg differ diff --git a/web/abyss/audio/voice/male/p9.ogg b/web/abyss/audio/voice/male/p9.ogg index b8a4b3ea..9cf39009 100644 Binary files a/web/abyss/audio/voice/male/p9.ogg and b/web/abyss/audio/voice/male/p9.ogg differ diff --git a/web/abyss/audio/voice/male/prog_d1.ogg b/web/abyss/audio/voice/male/prog_d1.ogg index a2a82e7a..3849d9b3 100644 Binary files a/web/abyss/audio/voice/male/prog_d1.ogg and b/web/abyss/audio/voice/male/prog_d1.ogg differ diff --git a/web/abyss/audio/voice/male/prog_d2.ogg b/web/abyss/audio/voice/male/prog_d2.ogg index 3faf4655..9de33e31 100644 Binary files a/web/abyss/audio/voice/male/prog_d2.ogg and b/web/abyss/audio/voice/male/prog_d2.ogg differ diff --git a/web/abyss/audio/voice/male/prog_d3.ogg b/web/abyss/audio/voice/male/prog_d3.ogg index f49dcf0e..b56fd690 100644 Binary files a/web/abyss/audio/voice/male/prog_d3.ogg and b/web/abyss/audio/voice/male/prog_d3.ogg differ diff --git a/web/abyss/audio/voice/male/prog_d4.ogg b/web/abyss/audio/voice/male/prog_d4.ogg index 80df1f9f..39782ee8 100644 Binary files a/web/abyss/audio/voice/male/prog_d4.ogg and b/web/abyss/audio/voice/male/prog_d4.ogg differ diff --git a/web/abyss/audio/voice/male/prog_saved1.m4a b/web/abyss/audio/voice/male/prog_saved1.m4a new file mode 100644 index 00000000..41a8862d Binary files /dev/null and b/web/abyss/audio/voice/male/prog_saved1.m4a differ diff --git a/web/abyss/audio/voice/male/prog_saved1.ogg b/web/abyss/audio/voice/male/prog_saved1.ogg new file mode 100644 index 00000000..1beb57db Binary files /dev/null and b/web/abyss/audio/voice/male/prog_saved1.ogg differ diff --git a/web/abyss/audio/voice/male/prog_saved2.m4a b/web/abyss/audio/voice/male/prog_saved2.m4a new file mode 100644 index 00000000..3e94cc4c Binary files /dev/null and b/web/abyss/audio/voice/male/prog_saved2.m4a differ diff --git a/web/abyss/audio/voice/male/prog_saved2.ogg b/web/abyss/audio/voice/male/prog_saved2.ogg new file mode 100644 index 00000000..a6f664fc Binary files /dev/null and b/web/abyss/audio/voice/male/prog_saved2.ogg differ diff --git a/web/abyss/audio/voice/male/prog_saved3.m4a b/web/abyss/audio/voice/male/prog_saved3.m4a new file mode 100644 index 00000000..9eb10820 Binary files /dev/null and b/web/abyss/audio/voice/male/prog_saved3.m4a differ diff --git a/web/abyss/audio/voice/male/prog_saved3.ogg b/web/abyss/audio/voice/male/prog_saved3.ogg new file mode 100644 index 00000000..8ecb59a2 Binary files /dev/null and b/web/abyss/audio/voice/male/prog_saved3.ogg differ diff --git a/web/abyss/audio/voice/male/prog_saved4.m4a b/web/abyss/audio/voice/male/prog_saved4.m4a new file mode 100644 index 00000000..f8dee3e7 Binary files /dev/null and b/web/abyss/audio/voice/male/prog_saved4.m4a differ diff --git a/web/abyss/audio/voice/male/prog_saved4.ogg b/web/abyss/audio/voice/male/prog_saved4.ogg new file mode 100644 index 00000000..b4581d7b Binary files /dev/null and b/web/abyss/audio/voice/male/prog_saved4.ogg differ diff --git a/web/abyss/audio/voice/male/prog_saved5.m4a b/web/abyss/audio/voice/male/prog_saved5.m4a new file mode 100644 index 00000000..9ecaa40f Binary files /dev/null and b/web/abyss/audio/voice/male/prog_saved5.m4a differ diff --git a/web/abyss/audio/voice/male/prog_saved5.ogg b/web/abyss/audio/voice/male/prog_saved5.ogg new file mode 100644 index 00000000..8d27b156 Binary files /dev/null and b/web/abyss/audio/voice/male/prog_saved5.ogg differ diff --git a/web/abyss/audio/voice/male/sys_continue_ask.ogg b/web/abyss/audio/voice/male/sys_continue_ask.ogg index 9adab109..7f9f8690 100644 Binary files a/web/abyss/audio/voice/male/sys_continue_ask.ogg and b/web/abyss/audio/voice/male/sys_continue_ask.ogg differ diff --git a/web/abyss/audio/voice/male/sys_help.ogg b/web/abyss/audio/voice/male/sys_help.ogg index ab0058c3..83c4b11d 100644 Binary files a/web/abyss/audio/voice/male/sys_help.ogg and b/web/abyss/audio/voice/male/sys_help.ogg differ diff --git a/web/abyss/audio/voice/male/sys_menu.ogg b/web/abyss/audio/voice/male/sys_menu.ogg index 15a57899..668f57b3 100644 Binary files a/web/abyss/audio/voice/male/sys_menu.ogg and b/web/abyss/audio/voice/male/sys_menu.ogg differ diff --git a/web/abyss/audio/voice/male/sys_menu_lobby.ogg b/web/abyss/audio/voice/male/sys_menu_lobby.ogg index 5bf69758..bdd599fa 100644 Binary files a/web/abyss/audio/voice/male/sys_menu_lobby.ogg and b/web/abyss/audio/voice/male/sys_menu_lobby.ogg differ diff --git a/web/abyss/audio/voice/male/sys_menu_restart.ogg b/web/abyss/audio/voice/male/sys_menu_restart.ogg index d5b32e3d..481f5559 100644 Binary files a/web/abyss/audio/voice/male/sys_menu_restart.ogg and b/web/abyss/audio/voice/male/sys_menu_restart.ogg differ diff --git a/web/abyss/audio/voice/male/sys_menu_resume.ogg b/web/abyss/audio/voice/male/sys_menu_resume.ogg index cde195b0..bafcac48 100644 Binary files a/web/abyss/audio/voice/male/sys_menu_resume.ogg and b/web/abyss/audio/voice/male/sys_menu_resume.ogg differ diff --git a/web/abyss/audio/voice/male/sys_new_dive.ogg b/web/abyss/audio/voice/male/sys_new_dive.ogg index c6af4500..0a27b099 100644 Binary files a/web/abyss/audio/voice/male/sys_new_dive.ogg and b/web/abyss/audio/voice/male/sys_new_dive.ogg differ diff --git a/web/abyss/audio/voice/male/sys_settings.ogg b/web/abyss/audio/voice/male/sys_settings.ogg index 02a1dd23..fc7f1601 100644 Binary files a/web/abyss/audio/voice/male/sys_settings.ogg and b/web/abyss/audio/voice/male/sys_settings.ogg differ diff --git a/web/abyss/audio/voice/male/sys_skip.m4a b/web/abyss/audio/voice/male/sys_skip.m4a index 8b3e2400..8eb1b62b 100644 Binary files a/web/abyss/audio/voice/male/sys_skip.m4a and b/web/abyss/audio/voice/male/sys_skip.m4a differ diff --git a/web/abyss/audio/voice/male/sys_skip.ogg b/web/abyss/audio/voice/male/sys_skip.ogg index 93264c8e..42b3dbbe 100644 Binary files a/web/abyss/audio/voice/male/sys_skip.ogg and b/web/abyss/audio/voice/male/sys_skip.ogg differ diff --git a/web/abyss/audio/voice/z1_a.ogg b/web/abyss/audio/voice/z1_a.ogg index 370f35ab..02b8e3e7 100644 Binary files a/web/abyss/audio/voice/z1_a.ogg and b/web/abyss/audio/voice/z1_a.ogg differ diff --git a/web/abyss/audio/voice/z1_b.ogg b/web/abyss/audio/voice/z1_b.ogg index 8e4c2b4c..b28d6cdf 100644 Binary files a/web/abyss/audio/voice/z1_b.ogg and b/web/abyss/audio/voice/z1_b.ogg differ diff --git a/web/abyss/audio/voice/z1_bye.ogg b/web/abyss/audio/voice/z1_bye.ogg index 8f4d22cb..842ae5e3 100644 Binary files a/web/abyss/audio/voice/z1_bye.ogg and b/web/abyss/audio/voice/z1_bye.ogg differ diff --git a/web/abyss/audio/voice/z1_knock.ogg b/web/abyss/audio/voice/z1_knock.ogg index 25df74cc..18b05473 100644 Binary files a/web/abyss/audio/voice/z1_knock.ogg and b/web/abyss/audio/voice/z1_knock.ogg differ diff --git a/web/abyss/game.js b/web/abyss/game.js index 066d0615..bd94a7ec 100644 --- a/web/abyss/game.js +++ b/web/abyss/game.js @@ -39,8 +39,8 @@ * 死窗,窗内手势一律吞掉,结算链完整播出。 * * 看门狗双轨(§7.2):无操作轨(guide watchdog,任何手势复位;搜索等待 - * [10,25] gd_ping1/gd_ping2 两级不同句;叙事链末 [25,50]/[13,30] - * gd_continue/gd_again)+ 无进展轨(游戏层计时 60/120s gd_prog1/gd_prog2, + * [10,25] gd_ping1/gd_ping2 两级不同句;叙事链末 [13,30](R2-F7 起 full 档与 + * standard 对齐)gd_continue/gd_again)+ 无进展轨(游戏层计时 60/120s gd_prog1/gd_prog2, * 仅挂搜索等待与 COMMS 链末两个可饿死点;无效手势不复位——乱按 96s 也必被 * 抢救;两轨同级交叉登记去重;guide=off 不挂任何定时器)。 * @@ -51,6 +51,15 @@ * 纯音频标记)、G2 oxy_crit 附 warning 震、G4 不可跳句空点 beat 轻震、 * G5 首播必完整复播可即掐、G6 状态链顺序。 * + * R2 修复(research/new8/abyss/round1/synthesis.md F1-F10):F1 向导散句在播 + * 时发脉冲先掐散句立即出音(ping 不再迟到 12~17s);F2 F5 尾句保护改认实际 + * 播放链尾(dyn 注入的档位句纳入保护)+ 签收链入口 800ms 死窗;F3 回波 + * wait = 资产实长+静默一拍(「回波→静默一拍→解读」兑现);F4 双载 D4 补播 + * dv4_dual 扣账句(3+1 不再无声);F5 crit 水面变体 oxy_crit_deck;F6 叙事 + * 尾句保护改首播制(_tailHeard 复播可即掐,G5 后半句兑现)+ sys_skip 改词; + * F7 叙事链末 full 档看门狗 [13,30];F8 danger 震循环 1100ms;F9 状态链 + * crit 震按档进入去重;F10 状态链插入已救人数 prog_saved1..5。 + * * 资产缺失兜底:引擎 console.error 静默跳过且不回调 onComplete;单句语音 * 看门狗 30s 且 isVoicePlaying()===false 才自动续链(storyline N1 先例照抄) * ——屏蔽任意 voice 资产仍可一路走到结局,不卡死。环境音循环(amb_deck / @@ -64,13 +73,16 @@ import { vibrate } from '../engine/haptics.js'; // ---------------------------------------------------------------- 声呐时序常量 // 声呐链驻留时长(ms):脉冲→回波静默一拍 / 回波余音 / 危机前置 2s(L2) +// R2-F3:回波 wait = 资产实长 + 静默一拍(§6.2 R2「回波→静默一拍→解读」)—— +// echo_metal/echo_debris 2.76-2.78s、pipe_knock 2.96s、echo_groan 4.42s +// (R1 实测尾巴压解读句开头 0.35~0.55s,wait 常数全部低于资产实长) const PING_GAP_MS = 900; -const W_Metal = 2200; -const W_Knock = 2600; -const W_Groan = 4000; +const W_Metal = 3300; +const W_Knock = 3500; +const W_Groan = 5000; const W_Crisis = 2000; const W_Bell = 3200; -const DANGER_LOOP_MS = 500; // danger 震循环间隔(≥400ms,§5.2) +const DANGER_LOOP_MS = 1100; // danger 震循环间隔(≥400ms,§5.2;R2-F8:500ms 约 10 连震过密) // ---------------------------------------------------------------- 节点表 @@ -195,7 +207,9 @@ const NODES = { s3_surf: N(['voice/d3_surf'], { auto: true, next: 's_tier' }), // ---- D4 指挥舱·高船长(高潮:滑坡危机拍前置 2s 渐强 + danger 震循环) - dv4_down: N(['voice/dv4_down'], { auto: true, next: '@search' }), + // dv4_down 链内条件选播(R2-F4):双载形态追加 dv4_dual「这趟往返,扣四格气」 + // ——D4 双载下潜 3+1 扣账不再是无声扣款(R1 P1 心算账对不上耳朵) + dv4_down: N([], { auto: true, next: '@search', dyn: 'dv4down' }), // 回波渐强 + 金属回波(§6.3 承诺:D4 接近指挥舱必播 echo_metal*,取 _r 声像) sv4_echo: N([], { auto: true, @@ -259,6 +273,14 @@ const SEGS = ['找船', '机舱', '病舱', '指挥舱']; const PROG_VOICES = ['voice/prog_d1', 'voice/prog_d2', 'voice/prog_d3', 'voice/prog_d4']; /** 氧气档位分档整句(floor(oxy/3)=可下潜次数划界,句义逐格为真,§4.3)。 */ const TIER_VOICES = { full: 'voice/oxy_full', ok: 'voice/oxy_ok', low: 'voice/oxy_low', crit: 'voice/oxy_crit' }; +/** R2-F5:crit 水面变体——人已出水后「必须上浮」是错场景措辞(甲板=一潜都下不去)。 */ +const TIER_CRIT_DECK = 'voice/oxy_crit_deck'; + +/** 上滑状态链「已救人数」分档整句(R2-F10;saved=0 不播,数字写死禁拼接)。 */ +const SAVED_VOICES = [ + 'voice/prog_saved1', 'voice/prog_saved2', 'voice/prog_saved3', + 'voice/prog_saved4', 'voice/prog_saved5', +]; const MENU_ITEMS = [ { id: 'resume', voice: 'voice/sys_menu_resume' }, // 回到水下 @@ -294,7 +316,9 @@ const VOICE_WATCHDOG_MS = 30000; const SETTLE_GRACE_MS = 800; // 向导层看门狗(§7.2;full 档 say 由 guide 播,standard 档 onEscalate 游戏层补播) -const GUIDE_WATCHDOG_AT = [25000, 50000]; // full:叙事链末 / ENDING 结算等待 +// R2-F7:叙事链末/ENDING full 档与 standard 对齐 [13,30]——R1 主线 25s 首轮静默 +// 掐在钩子落地上(两人设点名),标准档 13s 已被 live 局 B 验证不烦人 +const GUIDE_WATCHDOG_AT = [13000, 30000]; // full:叙事链末 / ENDING 结算等待 const IDLE_HINT_AT = [13000, 30000]; // standard:同 storyline P2-3 先例 const CHOICE_HINT_AT = [25000, 50000]; // 抉择点:两级都重播当前 p* 提示句本身 const SEARCH_WATCHDOG_AT = [10000, 25000]; // 搜索等待两级**不同句**(gd_ping1≠gd_ping2) @@ -371,6 +395,9 @@ export class AbyssGame extends Game { this._resumeGuard = false; this._skipLockId = null; this._graceUntil = 0; // H1:结算手势死窗截止时刻 + this._chainTail = null; // 实际播放链的尾句(R2-F2:dyn 注入句也算尾句) + this._tailHeard = new Set(); // R2-F6:链自然播完登记的节点(复播可即掐,G5) + this._critWarned = false; // R2-F9:状态链 crit warning 震按档进入去重 // 声呐双通道(§6.2):空闲门 + 排队补发(回波与语音零重叠,R1) this._sonarQueue = []; @@ -519,6 +546,11 @@ export class AbyssGame extends Game { /** 单击=发脉冲:搜索等待 → 回波链(脉冲 → 静默一拍 → 回波 → 解读)。 */ _firePing() { if (!this.searchArmed) return; + // R2-F1:向导看门狗行(gd_ping*/gd_prog* 散句)在播时玩家照做单击——先掐 + // 散句再发脉冲,玩家脉冲立即出音。R1 根因:ping 走 sonarGate 见 voice 忙入队, + // 排水要等链真歇下 → 迟到 12~17s 落在 COMMS 句隙,「回波先于脉冲」错序。 + // 搜索等待态游戏链恒不在播(voicePlaying=false),voice 层只可能是向导散句。 + if (!this.voicePlaying && this.audio.isVoicePlaying()) this.audio.stopVoice(); this.searchArmed = false; this._clearProg(); // 有真实进展:无进展轨撤防(当次等待点作废) this.playNode(`sv${this.diveN}_echo`); @@ -612,17 +644,20 @@ export class AbyssGame extends Game { } /** - * F5 链末句保护:当前句是本节点末句、且节点把控制权交出(链末等待单击 / - * @x 过场转移 / 直入抉择提示)时,屏蔽「跳过本句」。自动链中段不受保护。 + * F5 链末句保护:当前句是**实际播放链**的末句、且节点把控制权交出(链末等待 + * 单击 / @x 过场转移 / 直入抉择提示)时,屏蔽「跳过本句」。自动链中段不受保护。 + * R2-F2:尾句改认 _chainTail(_playSeqSteps 按实际步序记录)——R1 根因是 + * 用 _nodeSteps 重算,dyn 注入的档位句(s_tier)不在其中,保护形同虚设。 + * R2-F6(G5 复播可即掐):非 auto 叙事节点的尾句保护仅限**首播**——链自然 + * 播完登记 _tailHeard,菜单/状态复述等重播时尾句可跳(sys_skip 教的必须真); + * auto 过场/直入抉择的末句与 p* 提示恒保护(抢跑吃钩子根因不回潮)。 */ _isTailSentence() { const node = NODES[this.nodeId]; if (!node || !this.voicePlaying || this.promptPlaying) return false; if (this.currentVoiceId == null) return false; // 声呐步不适用(由快进语义接管) - const voices = this._nodeSteps(this.nodeId).filter((s) => typeof s === 'string'); - const tail = voices.length ? voices[voices.length - 1] : null; - if (tail == null || this.currentVoiceId !== tail) return false; // 仅护末句 - if (!node.auto) return true; // 链末等待型节点(本作叙事句) + if (this._chainTail == null || this.currentVoiceId !== this._chainTail) return false; + if (!node.auto) return !this._tailHeard.has(this.nodeId); // 链末等待型:首播保护 if (node.next == null || this._isTransition(node.next)) return true; // 自动链终点 const nx = NODES[node.next]; return !!(nx && (nx.prompt != null || nx.dyn === 'p7')); // 自动链直入抉择提示 @@ -1061,6 +1096,9 @@ export class AbyssGame extends Game { console.error('[AbyssGame] 未知节点:', id); return; } + // R2-F2:签收链入口盖 800ms 死窗——SURFACE(4)/取消链过场的在途 tap 不得 + // 剁断 g9_in(R1 live:g9_in 只播 0.28s 被掐) + if (id === 'g9_in') this._grace(); this.nodeId = id; this.choiceArmed = false; this.pendingChoice = null; @@ -1127,6 +1165,11 @@ export class AbyssGame extends Game { switch (node.dyn) { case 'd2pry': return [this.flags.knowsPipe ? 'voice/d2_pry_ok' : 'voice/d2_pry_slow']; + case 'dv4down': + // R2-F4:双载形态补播扣账句(D4 双载起播 3+1=4 格,不再无声扣款) + return this.diveForm === 'double' + ? ['voice/dv4_down', 'voice/dv4_dual'] + : ['voice/dv4_down']; case 'gaoconfess': return [this.flags.hasLog ? 'voice/gao_confess' : 'voice/gao_c']; case 'stayleave': @@ -1195,6 +1238,9 @@ export class AbyssGame extends Game { this._setAmbDucked(false); const voices = steps.filter((x) => typeof x === 'string'); if (voices.length > 0) this.lastCloser = voices[voices.length - 1]; + // R2-F6:链自然播完 = 本节点尾句已首播完整(尾句受 F5 保护必完整),登记后 + // 该节点重播(菜单/状态复述)尾句可即掐(G5 复播可即掐) + if (voices.length > 0) this._tailHeard.add(this.nodeId); if (this._isPromptNode(node)) { this.choiceArmed = true; // W2 契约:播完当刻即可选,零插播 if (this.pendingChoice) { @@ -1312,14 +1358,25 @@ export class AbyssGame extends Game { // ---------------------------------------------------------------- 档位 / 状态链 + /** 档位句选播(R2-F5):crit 档在水面场景(SURFACE/ENDING/INTRO)用「一潜都 + * 下不去了」变体——人已出水再说「必须上浮」是错场景措辞;水下保留原句。 */ + _tierVoice(tier) { + if (tier === 'crit' + && (this.phase === 'SURFACE' || this.phase === 'ENDING' || this.phase === 'INTRO')) { + return TIER_CRIT_DECK; + } + return TIER_VOICES[tier]; + } + /** 跨档待播档位句(无跨档返回 null;副作用由 playNode('s_tier') 结清)。 */ _tierPending() { const tier = tierOf(this.oxy); if (tier === this.lastAnnouncedTier) return null; - return TIER_VOICES[tier]; + return this._tierVoice(tier); } - /** 上滑状态链(G6 顺序:prog_dN → oxy 档 → sys_help;G2:crit 附 warning 震)。 */ + /** 上滑状态链(G6 顺序:prog_dN → 已救人数 → oxy 档 → sys_help; + * G2:crit 附 warning 震——R2-F9 按「进入 crit 档」去重,同档复听不重复震)。 */ _statusIds() { const ids = []; if (this.phase === 'ENDING') { @@ -1328,8 +1385,14 @@ export class AbyssGame extends Game { } else if (this.diveN >= 1 && this.diveN <= 4) { ids.push(PROG_VOICES[this.diveN - 1]); } - if (tierOf(this.oxy) === 'crit') vibrate('warning'); - ids.push(TIER_VOICES[tierOf(this.oxy)]); + // R2-F10:已救人数(P3 被打断后要捡回的三样局面:潜次/氧气/船上躺着谁) + const savedCount = ['zhou', 'bai', 'chen', 'zheng', 'gao'] + .filter((k) => this.saved[k]).length; + if (savedCount >= 1) ids.push(SAVED_VOICES[savedCount - 1]); + const tier = tierOf(this.oxy); + if (tier === 'crit' && !this._critWarned) { vibrate('warning'); this._critWarned = true; } + if (tier !== 'crit') this._critWarned = false; + ids.push(this._tierVoice(tier)); return ids; } @@ -1467,6 +1530,11 @@ export class AbyssGame extends Game { const firstVoice = steps.find((x) => typeof x === 'string') || null; this._skipLockId = this._resumeGuard ? firstVoice : null; // F4:续玩锁 this._resumeGuard = false; + // R2-F2:记录实际播放链的尾句(含 dyn 注入的档位句),供 F5 保护判定 + this._chainTail = null; + for (let k = steps.length - 1; k >= 0; k--) { + if (typeof steps[k] === 'string') { this._chainTail = steps[k]; break; } + } this.voicePlaying = true; this._sonarSkip = null; const step = (i) => { diff --git a/web/abyss/test/playtest.mjs b/web/abyss/test/playtest.mjs index cbe75aef..2339f9b5 100644 --- a/web/abyss/test/playtest.mjs +++ b/web/abyss/test/playtest.mjs @@ -497,6 +497,9 @@ realLog('== 主路径 · 剧本 A(e1,guide=off)=='); await tapTo(game, () => game.phase === 'DIVE' && game.diveN === 4); assert(game.diveForm === 'double', '氧气门:oxy=6 ≥4 → DIVE(4) 双载形态'); assert(game.oxy === 2, 'DIVE(4) 双载起播 oxy 6-3-1=2(双载额外 +1,§4.3)'); + await advance(() => voicePlays(playLog, 'voice/dv4_dual') === 1); + assert(voicePlays(playLog, 'voice/dv4_dual') === 1, + 'R2-F4:双载形态下潜链补播 dv4_dual「这趟往返,扣四格气」(3+1 扣账口播化)'); // 8. DIVE(4):滑坡危机拍(landslide 前置 2s + danger 震循环)→ p7 双载提示 await reachSearch(game); @@ -505,8 +508,11 @@ realLog('== 主路径 · 剧本 A(e1,guide=off)=='); assert(voicePlays(playLog, 'sfx/echo_groan') === 2 && voicePlays(playLog, 'sfx/echo_metal_r') === 1, 'D4 搜索:echo_groan 渐强 + echo_metal_r(§6.3:接近指挥舱必播金属回波)'); assert(voicePlays(playLog, 'sfx/landslide') === 1, 'D4 危机拍:landslide 前置起播'); - const dVibs = vibrateLog.filter((v) => JSON.stringify(v.pattern) === DANGER_PATTERN).length; - assert(dVibs >= 3, `D4 danger 震循环(每遍 ≥400ms,实际 ${dVibs} 遍)`); + const dVibsAll = vibrateLog.filter((v) => JSON.stringify(v.pattern) === DANGER_PATTERN); + assert(dVibsAll.length >= 3, `D4 danger 震循环(实际 ${dVibsAll.length} 遍)`); + const dGaps = dVibsAll.slice(1).map((v, k) => v.t - dVibsAll[k].t); + assert(dGaps.every((gap) => gap >= 1000), + `R2-F8:danger 震循环间隔 ≥1000ms(实际间隔 ${dGaps.join('/')},R1 的 500ms 约 10 连震过密)`); const iSlide = lastIndexOf(playLog, 'sfx/landslide'); const iSlideV = lastIndexOf(playLog, 'voice/dv4_slide'); assert(iSlide < iSlideV, 'landslide 前置 2s 后才接 dv4_slide 语音(R4 危机拍优先)'); @@ -519,9 +525,10 @@ realLog('== 主路径 · 剧本 A(e1,guide=off)=='); 'hasLog=false → 心结引入播 gao_c(条件差分)'); await g(game, 'right'); // p8 右 = 不问 await tapTo(game, () => game.phase === 'SURFACE' && game.diveN === 4); - await advance(() => voicePlays(playLog, 'voice/oxy_crit') === 1); - assert(game.oxy === 2 && voicePlays(playLog, 'voice/oxy_crit') === 1, - 'SURFACE(4):oxy=2 → crit 档跨档播报(§4.5:双载收队 2-lefts)'); + await advance(() => voicePlays(playLog, 'voice/oxy_crit_deck') === 1); + assert(game.oxy === 2 && voicePlays(playLog, 'voice/oxy_crit_deck') === 1 + && voicePlays(playLog, 'voice/oxy_crit') === 0, + 'SURFACE(4):oxy=2 → crit 档跨档播报水面变体 oxy_crit_deck(R2-F5;§4.5:双载收队 2-lefts)'); assert(vibrateLog.some((v) => JSON.stringify(v.pattern) === WARN_PATTERN), 'G2:oxy_crit 播报位附 warning 震'); @@ -637,8 +644,8 @@ realLog('== 四结局矩阵(剧本 B / C / D / E / F)=='); }); assert(game.phase === 'SURFACE' && game.nodeId === 'c_none' && game.diveForm === 'cancel', '剧本 C:SURFACE(3) oxy=2 ≤2 → 氧气门走终局取消链(dv4_none 起播)'); - assert(game.oxy === 2 && voicePlays(playLog, 'voice/oxy_crit') === 1, - '剧本 C:D3 后 oxy=2(crit 档,取消门与 b_rule「气不够一潜必须上浮」一致)'); + assert(game.oxy === 2 && voicePlays(playLog, 'voice/oxy_crit_deck') === 1, + '剧本 C:D3 后 oxy=2(crit 档水面变体,取消门与 b_rule「气不够一潜必须上浮」一致)'); await playRun(game, SCRIPT_C, { from: ci }); assert(voicePlays(playLog, 'voice/dv4_none') === 1 && voicePlays(playLog, 'voice/gao_final') === 1, '取消链完整播出 dv4_none → gao_final(措辞克制、零描写)'); @@ -682,6 +689,8 @@ realLog('== 四结局矩阵(剧本 B / C / D / E / F)=='); }); assert(game.diveForm === 'single' && game.oxy === 0, '剧本 D:氧气门 oxy=3 → 单载形态;DIVE(4) oxy 3-3=0'); + assert(voicePlays(playLog, 'voice/dv4_dual') === 0, + 'R2-F4:单载形态不播 dv4_dual(扣账句只随双载 3+1 出现)'); await playRun(game, SCRIPT_D, { from: 6 }); assert(voicePlays(playLog, 'voice/p7_chen') === 1 && voicePlays(playLog, 'voice/p7') === 0 && voicePlays(playLog, 'voice/p7_zheng') === 0, '单载·留守=陈医官 → 播 p7_chen(按 stayer 选提示)'); @@ -895,6 +904,19 @@ realLog('== 菜单交互(guide=off,p1 期间呼出)=='); assert(game.phase === 'COMMS' && game.nodeId === 'p1', '下滑关闭菜单 → 回原状态'); await advance(() => game.choiceArmed); + // V1 复核(R1 遗留:报名与执行一致性)——快速连切 3 下(menuIdx 回绕到 0=回到 + // 水下)立即双击:执行的恰是 menuIdx 当前项(报名队列滞后不劫持执行) + await g(game, 'down'); + await advance(() => !game.voicePlaying); + await g(game, 'tap'); + await g(game, 'tap'); + await g(game, 'tap'); + assert(game.menuIdx === 0, 'V1:连切 3 下回绕到首项(回到水下)'); + await g(game, 'doubletap'); + assert(game.phase === 'COMMS' && game.nodeId === 'p1', + 'V1:双击执行 = menuIdx 当前项(回到水下 → 关菜单回原节点,无劫持)'); + await advance(() => game.choiceArmed); + // 保存并回大厅(第三项) await g(game, 'down'); await advance(() => !game.voicePlaying); @@ -961,13 +983,16 @@ realLog('== 中断复述(guide=off,预置存档 node=bai_b)=='); await advance(() => game.choiceArmed); assert(game.nodeId === 'p3' && game.promptPlaying === false, '恢复局内推进正常:bai_b 链末 → p3'); - // 上滑状态链(G6):prog_d2 → oxy_low → sys_help(oxy=5 → low 档整句) + // 上滑状态链(G6,R2-F10):prog_d2 → prog_saved1 → oxy_low → sys_help + // (存档 saved.zhou=1;oxy=5 → low 档整句) await g(game, 'up'); await advance(() => !game.voicePlaying); const iP = lastIndexOf(playLog, 'voice/prog_d2'); + const iS = lastIndexOf(playLog, 'voice/prog_saved1'); const iR = lastIndexOf(playLog, 'voice/oxy_low'); const iH = lastIndexOf(playLog, 'voice/sys_help'); - assert(iP >= 0 && iP < iR && iR < iH, '恢复局上滑状态链顺序(G6):prog_d2 → oxy_low → sys_help'); + assert(iP >= 0 && iP < iS && iS < iR && iR < iH, + '恢复局上滑状态链顺序(G6+R2-F10):prog_d2 → prog_saved1 → oxy_low → sys_help'); await advance(() => game.choiceArmed); // 状态播完局面复述回 p3 teardown(game); } @@ -1049,7 +1074,7 @@ realLog('== 看门狗双轨(guide=full)=='); teardown(game); } - // ---- C:COMMS 链末 25s/50s gd_continue/gd_again + 双轨去重 + // ---- C:COMMS 链末 13s/30s gd_continue/gd_again(R2-F7:full 档对齐 standard)+ 双轨去重 clearSave(); resetSettings('full'); { const { audio, playLog, game } = makeRig(); @@ -1061,9 +1086,9 @@ realLog('== 看门狗双轨(guide=full)=='); await advance(() => !game.voicePlaying); // z1_a 链末等待 const tW = now; await advance(() => voicePlays(playLog, 'voice/gd_continue') === 1); - assert(now - tW === 25000, `COMMS 链末 25s 静默 → gd_continue(实际 ${now - tW}ms)`); + assert(now - tW === 13000, `COMMS 链末 13s 静默 → gd_continue(R2-F7,实际 ${now - tW}ms)`); await advance(() => voicePlays(playLog, 'voice/gd_again') === 1); - assert(now - tW === 50000, `50s → gd_again(第二级新句,实际 ${now - tW}ms)`); + assert(now - tW === 30000, `30s → gd_again(第二级新句,实际 ${now - tW}ms)`); await advance(() => now >= tW + 80000); assert(voicePlays(playLog, 'voice/gd_again') === 1 && voicePlays(playLog, 'voice/gd_prog1') === 0, '两级用尽彻底静默;prog1 同级被 gd_continue 交叉登记跳过'); @@ -1075,11 +1100,11 @@ realLog('== 看门狗双轨(guide=full)=='); assert(voicePlays(playLog, 'voice/gd_invalid') === 1, 'F1 前置:链末无效手势照常零静默(gd_invalid)'); const gc0 = voicePlays(playLog, 'voice/gd_continue'); await advance(() => voicePlays(playLog, 'voice/gd_continue') === gc0 + 1); - assert(now - tW2 === 25000, `F1:链末等待中发无效手势,看门狗仍在阈值内触发(25s 整,实际 ${now - tW2}ms)`); + assert(now - tW2 === 13000, `F1:链末等待中发无效手势,看门狗仍在阈值内触发(13s 整,实际 ${now - tW2}ms)`); teardown(game); } - // ---- D:p* 播完 25s/50s 重播提示句两级后静默;ENDING 25s/50s;签名总账 + // ---- D:p* 播完 25s/50s 重播提示句两级后静默;ENDING 13s/30s(R2-F7);签名总账 clearSave(); resetSettings('full'); { const { audio, playLog, game } = makeRig(); @@ -1118,9 +1143,9 @@ realLog('== 看门狗双轨(guide=full)=='); const gc0 = voicePlays(playLog, 'voice/gd_continue'); const ga0 = voicePlays(playLog, 'voice/gd_again'); await advance(() => voicePlays(playLog, 'voice/gd_continue') === gc0 + 1); - assert(now - tE === 25000, `ENDING 结算 25s 静默 → gd_continue(实际 ${now - tE}ms)`); + assert(now - tE === 13000, `ENDING 结算 13s 静默 → gd_continue(R2-F7,实际 ${now - tE}ms)`); await advance(() => voicePlays(playLog, 'voice/gd_again') === ga0 + 1); - assert(now - tE === 50000, `50s → gd_again(第二级新句,实际 ${now - tE}ms)`); + assert(now - tE === 30000, `30s → gd_again(第二级新句,实际 ${now - tE}ms)`); await advance(() => now >= tE + 70000); assert(voicePlays(playLog, 'voice/gd_again') === ga0 + 1, 'ENDING 两级用尽彻底静默'); await g(game, 'tap'); @@ -1261,6 +1286,151 @@ realLog('== 结算死窗(幽灵手势不截结算链)=='); } } +// ================================================================ R2 修复专项 +// (round1/synthesis.md F1/F2/F3/F5/F6/F9/F10 逐条现场对应断言) + +realLog('== R2 修复专项(ping 即时 / 尾句保护 / 跳句复播 / crit 场景 / 状态链)=='); +{ + // ---- F1:向导散句(gd_ping1)在播时单击发脉冲 → 先掐散句、ping 立即出音 + clearSave(); resetSettings('full'); + { + const { audio, playLog, game } = makeRig(); + await audio.unlock(); + game.start(); await flush(); + await reachSearch(game); + await advance(() => voicePlays(playLog, 'voice/gd_ping1') === 1); // 10s 看门狗第一句 + await flush(10); // 等引擎 _load 落地、_voice 置位(fetch/decode 微任务链) + assert(audio.isVoicePlaying(), '前置:gd_ping1 向导散句在播'); + const ping0 = voicePlays(playLog, 'sfx/sonar_ping'); + await g(game, 'tap'); // 照做单击:掐散句 + 立即出 ping(R1 根因:入队迟到 12~17s) + assert(voicePlays(playLog, 'sfx/sonar_ping') === ping0 + 1, + 'R2-F1:gd 行在播时单击 → sonar_ping 立即起播(不经 sonarGate 排队)'); + assert(!audio.isVoicePlaying(), 'R2-F1:gd 散句被掐(玩家已照做,提示说完即过时)'); + assert(game._sonarQueue.length === 0, 'R2-F1:脉冲不入 sonarGate 队(零迟到)'); + await advance(() => game.phase === 'COMMS'); + assert(voicePlays(playLog, 'sfx/echo_metal_l') === 1 && voicePlays(playLog, 'voice/dv1_metal') === 1, + 'F1 后回波链正常走完(echo → 解读,顺序复原)'); + teardown(game); + } + + // ---- F3:回波→静默一拍→解读(wait ≥ 资产实长 2.76s + 一拍) + clearSave(); resetSettings('off'); + { + const { audio, playLog, game } = makeRig(); + await audio.unlock(); + game.start(); await flush(); + await reachSearch(game); + await g(game, 'tap'); + await advance(() => game.currentVoiceId === 'voice/dv1_metal'); + const tEcho = playLog.find((e) => e.id === 'sfx/echo_metal_l').t; + const recMetal = game._voiceIntervals.find((r) => r.id === 'voice/dv1_metal'); + assert(recMetal && recMetal.start - tEcho >= 3300, + `R2-F3:echo_metal_l 起播 → dv1_metal 起播间隔 ${recMetal.start - tEcho}ms ≥ 3300(资产 2.76s + 静默一拍)`); + teardown(game); + } + + // ---- F2a:dyn 注入的档位句纳入 F5 尾句保护(播放中单击不跳 + beat) + clearSave(); resetSettings('off'); + { + const { audio, playLog, game } = makeRig(); + const vib0 = vibrateLog.length; + await audio.unlock(); + game.start(); await flush(); + const ciA = await playRun(game, SCRIPT_A, { + stop: () => game.currentVoiceId === 'voice/oxy_full', + }); + assert(game.nodeId === 's_tier' && game.currentVoiceId === 'voice/oxy_full', + '前置:档位句 oxy_full 在播(dyn 注入 s_tier 链尾)'); + await g(game, 'tap'); + assert(game.voicePlaying && game.currentVoiceId === 'voice/oxy_full', + 'R2-F2:档位句播放中单击不跳句(R1 根因:尾句保护按 _nodeSteps 重算漏掉 dyn 句)'); + assert(vibrateLog.slice(vib0).some((v) => JSON.stringify(v.pattern) === BEAT_PATTERN), + 'G4:档位句上空点单击播 beat 轻震'); + await playRun(game, SCRIPT_A, { from: ciA }); // 链路未受污染,照常到 e1 + assert(game.endingId === 'e1', 'F2 验证后剧本 A 照常走完(e1)'); + teardown(game); + } + + // ---- F2b:签收链入口 800ms 死窗(SURFACE(4)→g9_in 过场的在途 tap 被吞) + clearSave(); resetSettings('off'); + { + const { audio, playLog, game } = makeRig(); + await audio.unlock(); + game.start(); await flush(); + await playRun(game, SCRIPT_B, { + stop: () => game.nodeId === 'g9_in' && game.voicePlaying, + }); + assert(game.currentVoiceId === 'voice/g9_in', '前置:签收链首句 g9_in 在播'); + await g(game, 'tap'); // 800ms 死窗内的在途 tap(R1 live:g9_in 被剁到 0.28s) + assert(game.voicePlaying && game.currentVoiceId === 'voice/g9_in', + 'R2-F2:签收链入口 800ms 死窗内的在途 tap 被吞(g9_in 不被掐)'); + await playRun(game, SCRIPT_B, { from: 8 }); + assert(game.endingId === 'e2' && voicePlays(playLog, 'voice/g9_in') === 1 + && voicePlays(playLog, 'voice/g9_knot') === 1, '死窗后签收链完整有序(g9_in → g9_knot → p9)'); + teardown(game); + } + + // ---- F6:叙事尾句首播保护 / 复播可即掐(G5 后半句兑现) + clearSave(); resetSettings('off'); + { + const { audio, playLog, game } = makeRig(); + const vib0 = vibrateLog.length; + await audio.unlock(); + game.start(); await flush(); + await reachSearch(game); + await g(game, 'tap'); + await advance(() => game.currentVoiceId === 'voice/z1_a'); + await g(game, 'tap'); // 首播中的叙事尾句:不跳 + assert(game.voicePlaying && game.currentVoiceId === 'voice/z1_a', + 'R2-F6:首播中叙事尾句单击不跳(首播必完整,radio 吃尾根因不回潮)'); + assert(vibrateLog.slice(vib0).some((v) => JSON.stringify(v.pattern) === BEAT_PATTERN), + 'G4:首播保护句上的空点单击播 beat 轻震'); + await advance(() => !game.voicePlaying); // z1_a 自然播完(链末等待,登记 _tailHeard) + await g(game, 'down'); // 开菜单 + await advance(() => game.phase === 'MENU' && !game.voicePlaying); + await g(game, 'down'); // 关菜单 → 重播 z1_a(局面复述) + await advance(() => game.currentVoiceId === 'voice/z1_a' && game.voicePlaying); + await g(game, 'tap'); // 复播:单击即掐 + assert(!game.voicePlaying && game.nodeId === 'z1_a', + 'R2-F6:链自然播完后复述重播,尾句单击即跳(复播可即掐,sys_skip 承诺兑现)'); + assert(voicePlays(playLog, 'voice/z1_a') === 2, 'z1_a 恰重播一次(菜单复述)'); + await g(game, 'tap'); // 链末继续,剧情正常推进 + await advance(() => game.currentVoiceId === 'voice/z1_b'); + assert(game.nodeId === 'z1_b', '跳句后链末判定无错位(z1_a → z1_b 正常续链)'); + teardown(game); + } + + // ---- F5/F9/F10:水下 crit 状态链(原句保留)+ warning 震按档去重 + 已救人数 + clearSave(); resetSettings('off'); + { + const { audio, playLog, game } = makeRig(); + await audio.unlock(); + game.start(); await flush(); + await playRun(game, SCRIPT_D, { + stop: () => game.searchArmed && game.diveN === 4, + }); + assert(game.oxy === 0 && game.diveForm === 'single', '前置:剧本 D 单载 D4 搜索等待,oxy=0(crit)'); + const warn0 = vibrateLog.filter((v) => JSON.stringify(v.pattern) === WARN_PATTERN).length; + await g(game, 'up'); + await advance(() => !game.voicePlaying && game.searchArmed); + const iP = lastIndexOf(playLog, 'voice/prog_d4'); + const iS = lastIndexOf(playLog, 'voice/prog_saved3'); // 剧本 D 此时 saved=3(舟/白/郑) + const iR = lastIndexOf(playLog, 'voice/oxy_crit'); + assert(iP >= 0 && iP < iS && iS < iR, + 'R2-F10+F5:水下状态链 prog_d4 → prog_saved3 → oxy_crit(人数=N=3;水下保留原句)'); + assert(voicePlays(playLog, 'voice/oxy_crit_deck') === 0, + 'R2-F5:水下 crit 不用水面变体(oxy_crit_deck 零播出)'); + const warn1 = vibrateLog.filter((v) => JSON.stringify(v.pattern) === WARN_PATTERN).length; + assert(warn1 === warn0 + 1, 'G2:进入 crit 档首次状态链附 warning 震'); + await g(game, 'up'); // 同档再次查状态 + await advance(() => !game.voicePlaying && game.searchArmed); + const warn2 = vibrateLog.filter((v) => JSON.stringify(v.pattern) === WARN_PATTERN).length; + assert(warn2 === warn1, 'R2-F9:crit 档不变时复听状态链不重复 warning 震(按档进入去重)'); + assert(voicePlays(playLog, 'voice/prog_saved3') === 2, 'F10:人数句照播(去重只针对震与口令)'); + teardown(game); + } +} + // ================================================================ 键盘变体路由 // (settings.input='key' → 引擎候选链前置 voice//key/ 探测;'touch' 不探测) @@ -1326,10 +1496,11 @@ realLog('== 静态审计 =='); { const src = fs.readFileSync(path.join(GAME_DIR, 'game.js'), 'utf8'); for (const id of ['voice/prog_d1', 'voice/prog_d2', 'voice/prog_d3', 'voice/prog_d4', - 'voice/oxy_full', 'voice/oxy_ok', 'voice/oxy_low', 'voice/oxy_crit', 'voice/oxy_gain', + 'voice/prog_saved1', 'voice/prog_saved2', 'voice/prog_saved3', 'voice/prog_saved4', 'voice/prog_saved5', + 'voice/oxy_full', 'voice/oxy_ok', 'voice/oxy_low', 'voice/oxy_crit', 'voice/oxy_crit_deck', 'voice/oxy_gain', 'voice/dry_a', 'voice/dry_b', 'voice/gd_ping1', 'voice/gd_ping2', 'voice/gd_prog1', 'voice/gd_prog2', 'voice/gd_continue', 'voice/gd_again', - 'voice/p7', 'voice/p7_chen', 'voice/p7_zheng', 'voice/g9_dry']) { + 'voice/p7', 'voice/p7_chen', 'voice/p7_zheng', 'voice/g9_dry', 'voice/dv4_dual']) { assert(src.includes(`'${id}'`), `分档/差分整句字面量存在:${id}`); } assert(!/voice\/\$\{/.test(src), '无模板字符串拼接 voice id'); diff --git a/web/detective/audio/voice/acc_ge.ogg b/web/detective/audio/voice/acc_ge.ogg index 7512eae4..f414c484 100644 Binary files a/web/detective/audio/voice/acc_ge.ogg and b/web/detective/audio/voice/acc_ge.ogg differ diff --git a/web/detective/audio/voice/acc_shun.ogg b/web/detective/audio/voice/acc_shun.ogg index d79f3226..9fd036b2 100644 Binary files a/web/detective/audio/voice/acc_shun.ogg and b/web/detective/audio/voice/acc_shun.ogg differ diff --git a/web/detective/audio/voice/acc_wen.ogg b/web/detective/audio/voice/acc_wen.ogg index 1ad9cf81..e466cf98 100644 Binary files a/web/detective/audio/voice/acc_wen.ogg and b/web/detective/audio/voice/acc_wen.ogg differ diff --git a/web/detective/audio/voice/acc_zhou.ogg b/web/detective/audio/voice/acc_zhou.ogg index da560c03..e470d777 100644 Binary files a/web/detective/audio/voice/acc_zhou.ogg and b/web/detective/audio/voice/acc_zhou.ogg differ diff --git a/web/detective/audio/voice/b_shun_1.ogg b/web/detective/audio/voice/b_shun_1.ogg index 3befa503..9ba1a74b 100644 Binary files a/web/detective/audio/voice/b_shun_1.ogg and b/web/detective/audio/voice/b_shun_1.ogg differ diff --git a/web/detective/audio/voice/b_shun_2.ogg b/web/detective/audio/voice/b_shun_2.ogg index ed33cc1a..9908abe0 100644 Binary files a/web/detective/audio/voice/b_shun_2.ogg and b/web/detective/audio/voice/b_shun_2.ogg differ diff --git a/web/detective/audio/voice/b_shun_3.ogg b/web/detective/audio/voice/b_shun_3.ogg index 444dd102..71e7ba09 100644 Binary files a/web/detective/audio/voice/b_shun_3.ogg and b/web/detective/audio/voice/b_shun_3.ogg differ diff --git a/web/detective/audio/voice/b_shun_4.ogg b/web/detective/audio/voice/b_shun_4.ogg index 57efb7cd..2bd33bcc 100644 Binary files a/web/detective/audio/voice/b_shun_4.ogg and b/web/detective/audio/voice/b_shun_4.ogg differ diff --git a/web/detective/audio/voice/b_shun_break_1.ogg b/web/detective/audio/voice/b_shun_break_1.ogg index 61b72cb4..3841789a 100644 Binary files a/web/detective/audio/voice/b_shun_break_1.ogg and b/web/detective/audio/voice/b_shun_break_1.ogg differ diff --git a/web/detective/audio/voice/b_shun_break_2.ogg b/web/detective/audio/voice/b_shun_break_2.ogg index 9ce6b197..e4c61850 100644 Binary files a/web/detective/audio/voice/b_shun_break_2.ogg and b/web/detective/audio/voice/b_shun_break_2.ogg differ diff --git a/web/detective/audio/voice/b_shun_break_3.ogg b/web/detective/audio/voice/b_shun_break_3.ogg index 16e628d8..9e7d063e 100644 Binary files a/web/detective/audio/voice/b_shun_break_3.ogg and b/web/detective/audio/voice/b_shun_break_3.ogg differ diff --git a/web/detective/audio/voice/b_shun_react_1.ogg b/web/detective/audio/voice/b_shun_react_1.ogg index 2d5cdf10..abbaad0f 100644 Binary files a/web/detective/audio/voice/b_shun_react_1.ogg and b/web/detective/audio/voice/b_shun_react_1.ogg differ diff --git a/web/detective/audio/voice/b_shun_react_2.ogg b/web/detective/audio/voice/b_shun_react_2.ogg index 4a82cbdc..87b4c786 100644 Binary files a/web/detective/audio/voice/b_shun_react_2.ogg and b/web/detective/audio/voice/b_shun_react_2.ogg differ diff --git a/web/detective/audio/voice/b_zhou_1.ogg b/web/detective/audio/voice/b_zhou_1.ogg index 03552987..4558dcbb 100644 Binary files a/web/detective/audio/voice/b_zhou_1.ogg and b/web/detective/audio/voice/b_zhou_1.ogg differ diff --git a/web/detective/audio/voice/b_zhou_2.ogg b/web/detective/audio/voice/b_zhou_2.ogg index 6137559b..25c1f822 100644 Binary files a/web/detective/audio/voice/b_zhou_2.ogg and b/web/detective/audio/voice/b_zhou_2.ogg differ diff --git a/web/detective/audio/voice/b_zhou_3.ogg b/web/detective/audio/voice/b_zhou_3.ogg index 5ac930eb..1a4c687f 100644 Binary files a/web/detective/audio/voice/b_zhou_3.ogg and b/web/detective/audio/voice/b_zhou_3.ogg differ diff --git a/web/detective/audio/voice/female/b_hint_c1.ogg b/web/detective/audio/voice/female/b_hint_c1.ogg index 4ee270fc..444c3fc8 100644 Binary files a/web/detective/audio/voice/female/b_hint_c1.ogg and b/web/detective/audio/voice/female/b_hint_c1.ogg differ diff --git a/web/detective/audio/voice/female/b_hint_c2.ogg b/web/detective/audio/voice/female/b_hint_c2.ogg index 5a67303e..97125d32 100644 Binary files a/web/detective/audio/voice/female/b_hint_c2.ogg and b/web/detective/audio/voice/female/b_hint_c2.ogg differ diff --git a/web/detective/audio/voice/female/cf_confirm.ogg b/web/detective/audio/voice/female/cf_confirm.ogg index dbec7a52..e87a8d30 100644 Binary files a/web/detective/audio/voice/female/cf_confirm.ogg and b/web/detective/audio/voice/female/cf_confirm.ogg differ diff --git a/web/detective/audio/voice/female/cf_diff.ogg b/web/detective/audio/voice/female/cf_diff.ogg index 4540f33c..11a8d9d4 100644 Binary files a/web/detective/audio/voice/female/cf_diff.ogg and b/web/detective/audio/voice/female/cf_diff.ogg differ diff --git a/web/detective/audio/voice/female/cf_hit.ogg b/web/detective/audio/voice/female/cf_hit.ogg index 9c6b02f3..a662567b 100644 Binary files a/web/detective/audio/voice/female/cf_hit.ogg and b/web/detective/audio/voice/female/cf_hit.ogg differ diff --git a/web/detective/audio/voice/female/cf_pick_line.ogg b/web/detective/audio/voice/female/cf_pick_line.ogg index 6deb3410..5b8b1edd 100644 Binary files a/web/detective/audio/voice/female/cf_pick_line.ogg and b/web/detective/audio/voice/female/cf_pick_line.ogg differ diff --git a/web/detective/audio/voice/female/cf_same.ogg b/web/detective/audio/voice/female/cf_same.ogg index f9b376d0..745ff89e 100644 Binary files a/web/detective/audio/voice/female/cf_same.ogg and b/web/detective/audio/voice/female/cf_same.ogg differ diff --git a/web/detective/audio/voice/female/cf_second.ogg b/web/detective/audio/voice/female/cf_second.ogg index 72de590d..80015580 100644 Binary files a/web/detective/audio/voice/female/cf_second.ogg and b/web/detective/audio/voice/female/cf_second.ogg differ diff --git a/web/detective/audio/voice/female/cf_self.ogg b/web/detective/audio/voice/female/cf_self.ogg index 807b0509..da34e7a2 100644 Binary files a/web/detective/audio/voice/female/cf_self.ogg and b/web/detective/audio/voice/female/cf_self.ogg differ diff --git a/web/detective/audio/voice/female/cf_start.ogg b/web/detective/audio/voice/female/cf_start.ogg index c1465e34..a29d7b4c 100644 Binary files a/web/detective/audio/voice/female/cf_start.ogg and b/web/detective/audio/voice/female/cf_start.ogg differ diff --git a/web/detective/audio/voice/female/fin_ask_motive.ogg b/web/detective/audio/voice/female/fin_ask_motive.ogg index c1c3d4f0..b65eaedb 100644 Binary files a/web/detective/audio/voice/female/fin_ask_motive.ogg and b/web/detective/audio/voice/female/fin_ask_motive.ogg differ diff --git a/web/detective/audio/voice/female/fin_ask_weapon.ogg b/web/detective/audio/voice/female/fin_ask_weapon.ogg index edf6b0f4..5527ed0b 100644 Binary files a/web/detective/audio/voice/female/fin_ask_weapon.ogg and b/web/detective/audio/voice/female/fin_ask_weapon.ogg differ diff --git a/web/detective/audio/voice/female/fin_clear.ogg b/web/detective/audio/voice/female/fin_clear.ogg index dd94b884..30852013 100644 Binary files a/web/detective/audio/voice/female/fin_clear.ogg and b/web/detective/audio/voice/female/fin_clear.ogg differ diff --git a/web/detective/audio/voice/female/fin_mv_right.ogg b/web/detective/audio/voice/female/fin_mv_right.ogg index 56852faf..975dc614 100644 Binary files a/web/detective/audio/voice/female/fin_mv_right.ogg and b/web/detective/audio/voice/female/fin_mv_right.ogg differ diff --git a/web/detective/audio/voice/female/fin_mv_wrong.ogg b/web/detective/audio/voice/female/fin_mv_wrong.ogg index 5a8eb576..18fdcfb8 100644 Binary files a/web/detective/audio/voice/female/fin_mv_wrong.ogg and b/web/detective/audio/voice/female/fin_mv_wrong.ogg differ diff --git a/web/detective/audio/voice/female/fin_pre.m4a b/web/detective/audio/voice/female/fin_pre.m4a new file mode 100644 index 00000000..9c1ebfb1 Binary files /dev/null and b/web/detective/audio/voice/female/fin_pre.m4a differ diff --git a/web/detective/audio/voice/female/fin_pre.ogg b/web/detective/audio/voice/female/fin_pre.ogg new file mode 100644 index 00000000..aa53039b Binary files /dev/null and b/web/detective/audio/voice/female/fin_pre.ogg differ diff --git a/web/detective/audio/voice/female/fin_right.ogg b/web/detective/audio/voice/female/fin_right.ogg index 738b1d74..8771ec2d 100644 Binary files a/web/detective/audio/voice/female/fin_right.ogg and b/web/detective/audio/voice/female/fin_right.ogg differ diff --git a/web/detective/audio/voice/female/fin_right_b.ogg b/web/detective/audio/voice/female/fin_right_b.ogg index c3dc82ef..f9c290a9 100644 Binary files a/web/detective/audio/voice/female/fin_right_b.ogg and b/web/detective/audio/voice/female/fin_right_b.ogg differ diff --git a/web/detective/audio/voice/female/fin_start.ogg b/web/detective/audio/voice/female/fin_start.ogg index db49852d..e6f1de57 100644 Binary files a/web/detective/audio/voice/female/fin_start.ogg and b/web/detective/audio/voice/female/fin_start.ogg differ diff --git a/web/detective/audio/voice/female/fin_who_confirm.m4a b/web/detective/audio/voice/female/fin_who_confirm.m4a index 6552d5bb..679e9b92 100644 Binary files a/web/detective/audio/voice/female/fin_who_confirm.m4a and b/web/detective/audio/voice/female/fin_who_confirm.m4a differ diff --git a/web/detective/audio/voice/female/fin_who_confirm.ogg b/web/detective/audio/voice/female/fin_who_confirm.ogg index 2b5a3229..ac13cb9a 100644 Binary files a/web/detective/audio/voice/female/fin_who_confirm.ogg and b/web/detective/audio/voice/female/fin_who_confirm.ogg differ diff --git a/web/detective/audio/voice/female/fin_wp_right.ogg b/web/detective/audio/voice/female/fin_wp_right.ogg index ef76972a..68de7bd4 100644 Binary files a/web/detective/audio/voice/female/fin_wp_right.ogg and b/web/detective/audio/voice/female/fin_wp_right.ogg differ diff --git a/web/detective/audio/voice/female/fin_wp_wrong.ogg b/web/detective/audio/voice/female/fin_wp_wrong.ogg index 738efdf8..c71749b1 100644 Binary files a/web/detective/audio/voice/female/fin_wp_wrong.ogg and b/web/detective/audio/voice/female/fin_wp_wrong.ogg differ diff --git a/web/detective/audio/voice/female/gd_board.ogg b/web/detective/audio/voice/female/gd_board.ogg index 84a1f7ae..bbf405e5 100644 Binary files a/web/detective/audio/voice/female/gd_board.ogg and b/web/detective/audio/voice/female/gd_board.ogg differ diff --git a/web/detective/audio/voice/female/gd_board_cf.m4a b/web/detective/audio/voice/female/gd_board_cf.m4a new file mode 100644 index 00000000..ff8f465f Binary files /dev/null and b/web/detective/audio/voice/female/gd_board_cf.m4a differ diff --git a/web/detective/audio/voice/female/gd_board_cf.ogg b/web/detective/audio/voice/female/gd_board_cf.ogg new file mode 100644 index 00000000..44e12e97 Binary files /dev/null and b/web/detective/audio/voice/female/gd_board_cf.ogg differ diff --git a/web/detective/audio/voice/female/gd_cf.ogg b/web/detective/audio/voice/female/gd_cf.ogg index bb37db9b..2dfe80e5 100644 Binary files a/web/detective/audio/voice/female/gd_cf.ogg and b/web/detective/audio/voice/female/gd_cf.ogg differ diff --git a/web/detective/audio/voice/female/gd_fin.ogg b/web/detective/audio/voice/female/gd_fin.ogg index f93d3042..9ca296fc 100644 Binary files a/web/detective/audio/voice/female/gd_fin.ogg and b/web/detective/audio/voice/female/gd_fin.ogg differ diff --git a/web/detective/audio/voice/female/gd_invalid.ogg b/web/detective/audio/voice/female/gd_invalid.ogg index 8645c8d1..d000e94c 100644 Binary files a/web/detective/audio/voice/female/gd_invalid.ogg and b/web/detective/audio/voice/female/gd_invalid.ogg differ diff --git a/web/detective/audio/voice/female/hint_a.ogg b/web/detective/audio/voice/female/hint_a.ogg index 121db4d7..e85322a8 100644 Binary files a/web/detective/audio/voice/female/hint_a.ogg and b/web/detective/audio/voice/female/hint_a.ogg differ diff --git a/web/detective/audio/voice/female/hint_b.ogg b/web/detective/audio/voice/female/hint_b.ogg index 5636af46..fe445721 100644 Binary files a/web/detective/audio/voice/female/hint_b.ogg and b/web/detective/audio/voice/female/hint_b.ogg differ diff --git a/web/detective/audio/voice/female/hint_c1.ogg b/web/detective/audio/voice/female/hint_c1.ogg index af393807..84bdc683 100644 Binary files a/web/detective/audio/voice/female/hint_c1.ogg and b/web/detective/audio/voice/female/hint_c1.ogg differ diff --git a/web/detective/audio/voice/female/hint_c2.ogg b/web/detective/audio/voice/female/hint_c2.ogg index 0f9dedaa..a9988dac 100644 Binary files a/web/detective/audio/voice/female/hint_c2.ogg and b/web/detective/audio/voice/female/hint_c2.ogg differ diff --git a/web/detective/audio/voice/female/hint_fin.ogg b/web/detective/audio/voice/female/hint_fin.ogg index 6607e09c..cab0542a 100644 Binary files a/web/detective/audio/voice/female/hint_fin.ogg and b/web/detective/audio/voice/female/hint_fin.ogg differ diff --git a/web/detective/audio/voice/female/intro_1.ogg b/web/detective/audio/voice/female/intro_1.ogg index 86c63c67..422fbf58 100644 Binary files a/web/detective/audio/voice/female/intro_1.ogg and b/web/detective/audio/voice/female/intro_1.ogg differ diff --git a/web/detective/audio/voice/female/intro_2.ogg b/web/detective/audio/voice/female/intro_2.ogg index 4a2ae352..4707005c 100644 Binary files a/web/detective/audio/voice/female/intro_2.ogg and b/web/detective/audio/voice/female/intro_2.ogg differ diff --git a/web/detective/audio/voice/female/intro_3.ogg b/web/detective/audio/voice/female/intro_3.ogg index 94487c07..c0261267 100644 Binary files a/web/detective/audio/voice/female/intro_3.ogg and b/web/detective/audio/voice/female/intro_3.ogg differ diff --git a/web/detective/audio/voice/female/intro_w3.ogg b/web/detective/audio/voice/female/intro_w3.ogg index f1bfe4d9..215ac82c 100644 Binary files a/web/detective/audio/voice/female/intro_w3.ogg and b/web/detective/audio/voice/female/intro_w3.ogg differ diff --git a/web/detective/audio/voice/female/item_case.ogg b/web/detective/audio/voice/female/item_case.ogg index a41db11a..7b394375 100644 Binary files a/web/detective/audio/voice/female/item_case.ogg and b/web/detective/audio/voice/female/item_case.ogg differ diff --git a/web/detective/audio/voice/female/item_fore.ogg b/web/detective/audio/voice/female/item_fore.ogg index ec5817d6..64c05f07 100644 Binary files a/web/detective/audio/voice/female/item_fore.ogg and b/web/detective/audio/voice/female/item_fore.ogg differ diff --git a/web/detective/audio/voice/female/item_scene.ogg b/web/detective/audio/voice/female/item_scene.ogg index 722e98bd..394cb4a9 100644 Binary files a/web/detective/audio/voice/female/item_scene.ogg and b/web/detective/audio/voice/female/item_scene.ogg differ diff --git a/web/detective/audio/voice/female/item_w1.ogg b/web/detective/audio/voice/female/item_w1.ogg index 008c2a03..d2a5284c 100644 Binary files a/web/detective/audio/voice/female/item_w1.ogg and b/web/detective/audio/voice/female/item_w1.ogg differ diff --git a/web/detective/audio/voice/female/item_w2.ogg b/web/detective/audio/voice/female/item_w2.ogg index 795f1c9b..f6509b4e 100644 Binary files a/web/detective/audio/voice/female/item_w2.ogg and b/web/detective/audio/voice/female/item_w2.ogg differ diff --git a/web/detective/audio/voice/female/item_w3.ogg b/web/detective/audio/voice/female/item_w3.ogg index d866b78d..c1c5df94 100644 Binary files a/web/detective/audio/voice/female/item_w3.ogg and b/web/detective/audio/voice/female/item_w3.ogg differ diff --git a/web/detective/audio/voice/female/item_w4.ogg b/web/detective/audio/voice/female/item_w4.ogg index 2269c295..4903c517 100644 Binary files a/web/detective/audio/voice/female/item_w4.ogg and b/web/detective/audio/voice/female/item_w4.ogg differ diff --git a/web/detective/audio/voice/female/item_who_w1.m4a b/web/detective/audio/voice/female/item_who_w1.m4a new file mode 100644 index 00000000..1876d2ac Binary files /dev/null and b/web/detective/audio/voice/female/item_who_w1.m4a differ diff --git a/web/detective/audio/voice/female/item_who_w1.ogg b/web/detective/audio/voice/female/item_who_w1.ogg new file mode 100644 index 00000000..0f66a761 Binary files /dev/null and b/web/detective/audio/voice/female/item_who_w1.ogg differ diff --git a/web/detective/audio/voice/female/item_who_w2.m4a b/web/detective/audio/voice/female/item_who_w2.m4a new file mode 100644 index 00000000..1b49fdfd Binary files /dev/null and b/web/detective/audio/voice/female/item_who_w2.m4a differ diff --git a/web/detective/audio/voice/female/item_who_w2.ogg b/web/detective/audio/voice/female/item_who_w2.ogg new file mode 100644 index 00000000..ae5e5d82 Binary files /dev/null and b/web/detective/audio/voice/female/item_who_w2.ogg differ diff --git a/web/detective/audio/voice/female/item_who_w3.m4a b/web/detective/audio/voice/female/item_who_w3.m4a new file mode 100644 index 00000000..677907af Binary files /dev/null and b/web/detective/audio/voice/female/item_who_w3.m4a differ diff --git a/web/detective/audio/voice/female/item_who_w3.ogg b/web/detective/audio/voice/female/item_who_w3.ogg new file mode 100644 index 00000000..17857f98 Binary files /dev/null and b/web/detective/audio/voice/female/item_who_w3.ogg differ diff --git a/web/detective/audio/voice/female/item_who_w4.m4a b/web/detective/audio/voice/female/item_who_w4.m4a new file mode 100644 index 00000000..6488d907 Binary files /dev/null and b/web/detective/audio/voice/female/item_who_w4.m4a differ diff --git a/web/detective/audio/voice/female/item_who_w4.ogg b/web/detective/audio/voice/female/item_who_w4.ogg new file mode 100644 index 00000000..2c5ba66f Binary files /dev/null and b/web/detective/audio/voice/female/item_who_w4.ogg differ diff --git a/web/detective/audio/voice/female/key/cf_confirm.ogg b/web/detective/audio/voice/female/key/cf_confirm.ogg index 44819f28..a106be5e 100644 Binary files a/web/detective/audio/voice/female/key/cf_confirm.ogg and b/web/detective/audio/voice/female/key/cf_confirm.ogg differ diff --git a/web/detective/audio/voice/female/key/cf_pick_line.ogg b/web/detective/audio/voice/female/key/cf_pick_line.ogg index ee524d87..053d70fd 100644 Binary files a/web/detective/audio/voice/female/key/cf_pick_line.ogg and b/web/detective/audio/voice/female/key/cf_pick_line.ogg differ diff --git a/web/detective/audio/voice/female/key/fin_pre.m4a b/web/detective/audio/voice/female/key/fin_pre.m4a new file mode 100644 index 00000000..9941bd43 Binary files /dev/null and b/web/detective/audio/voice/female/key/fin_pre.m4a differ diff --git a/web/detective/audio/voice/female/key/fin_pre.ogg b/web/detective/audio/voice/female/key/fin_pre.ogg new file mode 100644 index 00000000..6cc78b7c Binary files /dev/null and b/web/detective/audio/voice/female/key/fin_pre.ogg differ diff --git a/web/detective/audio/voice/female/key/fin_who_confirm.m4a b/web/detective/audio/voice/female/key/fin_who_confirm.m4a new file mode 100644 index 00000000..cdbb470c Binary files /dev/null and b/web/detective/audio/voice/female/key/fin_who_confirm.m4a differ diff --git a/web/detective/audio/voice/female/key/fin_who_confirm.ogg b/web/detective/audio/voice/female/key/fin_who_confirm.ogg new file mode 100644 index 00000000..7da2f0f1 Binary files /dev/null and b/web/detective/audio/voice/female/key/fin_who_confirm.ogg differ diff --git a/web/detective/audio/voice/female/key/gd_board.ogg b/web/detective/audio/voice/female/key/gd_board.ogg index 5123f8a3..390cdef0 100644 Binary files a/web/detective/audio/voice/female/key/gd_board.ogg and b/web/detective/audio/voice/female/key/gd_board.ogg differ diff --git a/web/detective/audio/voice/female/key/gd_board_cf.m4a b/web/detective/audio/voice/female/key/gd_board_cf.m4a new file mode 100644 index 00000000..8825b6a0 Binary files /dev/null and b/web/detective/audio/voice/female/key/gd_board_cf.m4a differ diff --git a/web/detective/audio/voice/female/key/gd_board_cf.ogg b/web/detective/audio/voice/female/key/gd_board_cf.ogg new file mode 100644 index 00000000..23460f42 Binary files /dev/null and b/web/detective/audio/voice/female/key/gd_board_cf.ogg differ diff --git a/web/detective/audio/voice/female/key/gd_cf.ogg b/web/detective/audio/voice/female/key/gd_cf.ogg index c80da22a..18048e92 100644 Binary files a/web/detective/audio/voice/female/key/gd_cf.ogg and b/web/detective/audio/voice/female/key/gd_cf.ogg differ diff --git a/web/detective/audio/voice/female/key/recap_cf.m4a b/web/detective/audio/voice/female/key/recap_cf.m4a new file mode 100644 index 00000000..d87fb2da Binary files /dev/null and b/web/detective/audio/voice/female/key/recap_cf.m4a differ diff --git a/web/detective/audio/voice/female/key/recap_cf.ogg b/web/detective/audio/voice/female/key/recap_cf.ogg new file mode 100644 index 00000000..b2ffcd04 Binary files /dev/null and b/web/detective/audio/voice/female/key/recap_cf.ogg differ diff --git a/web/detective/audio/voice/female/key/settle_hook.ogg b/web/detective/audio/voice/female/key/settle_hook.ogg index 7b7a8e0c..4df7cb21 100644 Binary files a/web/detective/audio/voice/female/key/settle_hook.ogg and b/web/detective/audio/voice/female/key/settle_hook.ogg differ diff --git a/web/detective/audio/voice/female/key/sys_help.ogg b/web/detective/audio/voice/female/key/sys_help.ogg index 25729824..2d662c56 100644 Binary files a/web/detective/audio/voice/female/key/sys_help.ogg and b/web/detective/audio/voice/female/key/sys_help.ogg differ diff --git a/web/detective/audio/voice/female/key/tut_confront.ogg b/web/detective/audio/voice/female/key/tut_confront.ogg index 2e75ed5f..ddf1f7c2 100644 Binary files a/web/detective/audio/voice/female/key/tut_confront.ogg and b/web/detective/audio/voice/female/key/tut_confront.ogg differ diff --git a/web/detective/audio/voice/female/key/tut_d0.ogg b/web/detective/audio/voice/female/key/tut_d0.ogg index 80faaae7..9d963c7e 100644 Binary files a/web/detective/audio/voice/female/key/tut_d0.ogg and b/web/detective/audio/voice/female/key/tut_d0.ogg differ diff --git a/web/detective/audio/voice/female/key/tut_listen.ogg b/web/detective/audio/voice/female/key/tut_listen.ogg index 93f39a38..c5643187 100644 Binary files a/web/detective/audio/voice/female/key/tut_listen.ogg and b/web/detective/audio/voice/female/key/tut_listen.ogg differ diff --git a/web/detective/audio/voice/female/key/tut_replay.ogg b/web/detective/audio/voice/female/key/tut_replay.ogg index ee30940e..bdc30c66 100644 Binary files a/web/detective/audio/voice/female/key/tut_replay.ogg and b/web/detective/audio/voice/female/key/tut_replay.ogg differ diff --git a/web/detective/audio/voice/female/mv_1.ogg b/web/detective/audio/voice/female/mv_1.ogg index c74153e7..b5fa7d52 100644 Binary files a/web/detective/audio/voice/female/mv_1.ogg and b/web/detective/audio/voice/female/mv_1.ogg differ diff --git a/web/detective/audio/voice/female/mv_2.ogg b/web/detective/audio/voice/female/mv_2.ogg index 1703a02d..cbff53e1 100644 Binary files a/web/detective/audio/voice/female/mv_2.ogg and b/web/detective/audio/voice/female/mv_2.ogg differ diff --git a/web/detective/audio/voice/female/mv_3.ogg b/web/detective/audio/voice/female/mv_3.ogg index 12bb9612..fcdde724 100644 Binary files a/web/detective/audio/voice/female/mv_3.ogg and b/web/detective/audio/voice/female/mv_3.ogg differ diff --git a/web/detective/audio/voice/female/rate_a.ogg b/web/detective/audio/voice/female/rate_a.ogg index 4798d6e7..febd7120 100644 Binary files a/web/detective/audio/voice/female/rate_a.ogg and b/web/detective/audio/voice/female/rate_a.ogg differ diff --git a/web/detective/audio/voice/female/rate_b.ogg b/web/detective/audio/voice/female/rate_b.ogg index a5e7610a..22b91203 100644 Binary files a/web/detective/audio/voice/female/rate_b.ogg and b/web/detective/audio/voice/female/rate_b.ogg differ diff --git a/web/detective/audio/voice/female/rate_c.ogg b/web/detective/audio/voice/female/rate_c.ogg index c6984a5d..95c93254 100644 Binary files a/web/detective/audio/voice/female/rate_c.ogg and b/web/detective/audio/voice/female/rate_c.ogg differ diff --git a/web/detective/audio/voice/female/rate_s.ogg b/web/detective/audio/voice/female/rate_s.ogg index 63941e0d..5056f881 100644 Binary files a/web/detective/audio/voice/female/rate_s.ogg and b/web/detective/audio/voice/female/rate_s.ogg differ diff --git a/web/detective/audio/voice/female/recap_cf.m4a b/web/detective/audio/voice/female/recap_cf.m4a new file mode 100644 index 00000000..6303ff05 Binary files /dev/null and b/web/detective/audio/voice/female/recap_cf.m4a differ diff --git a/web/detective/audio/voice/female/recap_cf.ogg b/web/detective/audio/voice/female/recap_cf.ogg new file mode 100644 index 00000000..87a88dd4 Binary files /dev/null and b/web/detective/audio/voice/female/recap_cf.ogg differ diff --git a/web/detective/audio/voice/female/recap_go.ogg b/web/detective/audio/voice/female/recap_go.ogg index 620984dd..3c8443b3 100644 Binary files a/web/detective/audio/voice/female/recap_go.ogg and b/web/detective/audio/voice/female/recap_go.ogg differ diff --git a/web/detective/audio/voice/female/sc_0.ogg b/web/detective/audio/voice/female/sc_0.ogg index 363ecdca..08f15f46 100644 Binary files a/web/detective/audio/voice/female/sc_0.ogg and b/web/detective/audio/voice/female/sc_0.ogg differ diff --git a/web/detective/audio/voice/female/sc_1.ogg b/web/detective/audio/voice/female/sc_1.ogg index a366b6b8..34d933a2 100644 Binary files a/web/detective/audio/voice/female/sc_1.ogg and b/web/detective/audio/voice/female/sc_1.ogg differ diff --git a/web/detective/audio/voice/female/sc_2.ogg b/web/detective/audio/voice/female/sc_2.ogg index 7c102da9..95f413d7 100644 Binary files a/web/detective/audio/voice/female/sc_2.ogg and b/web/detective/audio/voice/female/sc_2.ogg differ diff --git a/web/detective/audio/voice/female/sc_3.ogg b/web/detective/audio/voice/female/sc_3.ogg index 4702ce69..46eced7f 100644 Binary files a/web/detective/audio/voice/female/sc_3.ogg and b/web/detective/audio/voice/female/sc_3.ogg differ diff --git a/web/detective/audio/voice/female/sc_4.ogg b/web/detective/audio/voice/female/sc_4.ogg index a1edf1eb..f45647da 100644 Binary files a/web/detective/audio/voice/female/sc_4.ogg and b/web/detective/audio/voice/female/sc_4.ogg differ diff --git a/web/detective/audio/voice/female/sc_5.ogg b/web/detective/audio/voice/female/sc_5.ogg index 8abac0e6..c238d4b5 100644 Binary files a/web/detective/audio/voice/female/sc_5.ogg and b/web/detective/audio/voice/female/sc_5.ogg differ diff --git a/web/detective/audio/voice/female/settings_hint.ogg b/web/detective/audio/voice/female/settings_hint.ogg index 79716e83..7281d54e 100644 Binary files a/web/detective/audio/voice/female/settings_hint.ogg and b/web/detective/audio/voice/female/settings_hint.ogg differ diff --git a/web/detective/audio/voice/female/settle_hook.ogg b/web/detective/audio/voice/female/settle_hook.ogg index a75dad6b..5d465164 100644 Binary files a/web/detective/audio/voice/female/settle_hook.ogg and b/web/detective/audio/voice/female/settle_hook.ogg differ diff --git a/web/detective/audio/voice/female/settle_open.ogg b/web/detective/audio/voice/female/settle_open.ogg index eab8e497..c6595f02 100644 Binary files a/web/detective/audio/voice/female/settle_open.ogg and b/web/detective/audio/voice/female/settle_open.ogg differ diff --git a/web/detective/audio/voice/female/st_asked_0.ogg b/web/detective/audio/voice/female/st_asked_0.ogg index 0ed863ee..acb4d9dc 100644 Binary files a/web/detective/audio/voice/female/st_asked_0.ogg and b/web/detective/audio/voice/female/st_asked_0.ogg differ diff --git a/web/detective/audio/voice/female/st_asked_1.ogg b/web/detective/audio/voice/female/st_asked_1.ogg index ee28f7fb..a8ee9221 100644 Binary files a/web/detective/audio/voice/female/st_asked_1.ogg and b/web/detective/audio/voice/female/st_asked_1.ogg differ diff --git a/web/detective/audio/voice/female/st_asked_2.ogg b/web/detective/audio/voice/female/st_asked_2.ogg index bb5c8b5a..88617aaf 100644 Binary files a/web/detective/audio/voice/female/st_asked_2.ogg and b/web/detective/audio/voice/female/st_asked_2.ogg differ diff --git a/web/detective/audio/voice/female/st_asked_3.ogg b/web/detective/audio/voice/female/st_asked_3.ogg index 50620755..d27ed6d3 100644 Binary files a/web/detective/audio/voice/female/st_asked_3.ogg and b/web/detective/audio/voice/female/st_asked_3.ogg differ diff --git a/web/detective/audio/voice/female/st_asked_4.ogg b/web/detective/audio/voice/female/st_asked_4.ogg index 25079456..8f32184b 100644 Binary files a/web/detective/audio/voice/female/st_asked_4.ogg and b/web/detective/audio/voice/female/st_asked_4.ogg differ diff --git a/web/detective/audio/voice/female/st_asked_5.ogg b/web/detective/audio/voice/female/st_asked_5.ogg index b88291e3..a0b50075 100644 Binary files a/web/detective/audio/voice/female/st_asked_5.ogg and b/web/detective/audio/voice/female/st_asked_5.ogg differ diff --git a/web/detective/audio/voice/female/st_asked_6.ogg b/web/detective/audio/voice/female/st_asked_6.ogg index 3aed624a..f0037e62 100644 Binary files a/web/detective/audio/voice/female/st_asked_6.ogg and b/web/detective/audio/voice/female/st_asked_6.ogg differ diff --git a/web/detective/audio/voice/female/st_doubt_0.ogg b/web/detective/audio/voice/female/st_doubt_0.ogg index 6d673712..f7b4ae51 100644 Binary files a/web/detective/audio/voice/female/st_doubt_0.ogg and b/web/detective/audio/voice/female/st_doubt_0.ogg differ diff --git a/web/detective/audio/voice/female/st_doubt_1.ogg b/web/detective/audio/voice/female/st_doubt_1.ogg index 7bffc88e..80bbd97b 100644 Binary files a/web/detective/audio/voice/female/st_doubt_1.ogg and b/web/detective/audio/voice/female/st_doubt_1.ogg differ diff --git a/web/detective/audio/voice/female/st_doubt_2.ogg b/web/detective/audio/voice/female/st_doubt_2.ogg index 77b35c5b..4ca5e0e9 100644 Binary files a/web/detective/audio/voice/female/st_doubt_2.ogg and b/web/detective/audio/voice/female/st_doubt_2.ogg differ diff --git a/web/detective/audio/voice/female/st_doubt_3.ogg b/web/detective/audio/voice/female/st_doubt_3.ogg index 94086275..098158c9 100644 Binary files a/web/detective/audio/voice/female/st_doubt_3.ogg and b/web/detective/audio/voice/female/st_doubt_3.ogg differ diff --git a/web/detective/audio/voice/female/st_doubt_4.ogg b/web/detective/audio/voice/female/st_doubt_4.ogg index 0ba93d8a..760caeb9 100644 Binary files a/web/detective/audio/voice/female/st_doubt_4.ogg and b/web/detective/audio/voice/female/st_doubt_4.ogg differ diff --git a/web/detective/audio/voice/female/st_miss_0.ogg b/web/detective/audio/voice/female/st_miss_0.ogg index 720dc664..43c78756 100644 Binary files a/web/detective/audio/voice/female/st_miss_0.ogg and b/web/detective/audio/voice/female/st_miss_0.ogg differ diff --git a/web/detective/audio/voice/female/st_miss_1.ogg b/web/detective/audio/voice/female/st_miss_1.ogg index bb84b204..6086cc75 100644 Binary files a/web/detective/audio/voice/female/st_miss_1.ogg and b/web/detective/audio/voice/female/st_miss_1.ogg differ diff --git a/web/detective/audio/voice/female/st_miss_2.ogg b/web/detective/audio/voice/female/st_miss_2.ogg index 37166ce6..446d34b7 100644 Binary files a/web/detective/audio/voice/female/st_miss_2.ogg and b/web/detective/audio/voice/female/st_miss_2.ogg differ diff --git a/web/detective/audio/voice/female/st_wrong.m4a b/web/detective/audio/voice/female/st_wrong.m4a new file mode 100644 index 00000000..c13afd65 Binary files /dev/null and b/web/detective/audio/voice/female/st_wrong.m4a differ diff --git a/web/detective/audio/voice/female/st_wrong.ogg b/web/detective/audio/voice/female/st_wrong.ogg new file mode 100644 index 00000000..5a396369 Binary files /dev/null and b/web/detective/audio/voice/female/st_wrong.ogg differ diff --git a/web/detective/audio/voice/female/sys_continue_ask.ogg b/web/detective/audio/voice/female/sys_continue_ask.ogg index 35abd299..48d1199c 100644 Binary files a/web/detective/audio/voice/female/sys_continue_ask.ogg and b/web/detective/audio/voice/female/sys_continue_ask.ogg differ diff --git a/web/detective/audio/voice/female/sys_help.ogg b/web/detective/audio/voice/female/sys_help.ogg index 50a8640f..26356fff 100644 Binary files a/web/detective/audio/voice/female/sys_help.ogg and b/web/detective/audio/voice/female/sys_help.ogg differ diff --git a/web/detective/audio/voice/female/sys_menu.ogg b/web/detective/audio/voice/female/sys_menu.ogg index c4e24fc2..4e009ed0 100644 Binary files a/web/detective/audio/voice/female/sys_menu.ogg and b/web/detective/audio/voice/female/sys_menu.ogg differ diff --git a/web/detective/audio/voice/female/sys_menu_cf.ogg b/web/detective/audio/voice/female/sys_menu_cf.ogg index 8cf4720a..c96608c8 100644 Binary files a/web/detective/audio/voice/female/sys_menu_cf.ogg and b/web/detective/audio/voice/female/sys_menu_cf.ogg differ diff --git a/web/detective/audio/voice/female/sys_menu_help.ogg b/web/detective/audio/voice/female/sys_menu_help.ogg index b9568b42..03e92c7d 100644 Binary files a/web/detective/audio/voice/female/sys_menu_help.ogg and b/web/detective/audio/voice/female/sys_menu_help.ogg differ diff --git a/web/detective/audio/voice/female/sys_menu_restart.ogg b/web/detective/audio/voice/female/sys_menu_restart.ogg index ad4e6723..3b2bc05c 100644 Binary files a/web/detective/audio/voice/female/sys_menu_restart.ogg and b/web/detective/audio/voice/female/sys_menu_restart.ogg differ diff --git a/web/detective/audio/voice/female/sys_menu_resume.ogg b/web/detective/audio/voice/female/sys_menu_resume.ogg index 344b533a..af7faa13 100644 Binary files a/web/detective/audio/voice/female/sys_menu_resume.ogg and b/web/detective/audio/voice/female/sys_menu_resume.ogg differ diff --git a/web/detective/audio/voice/female/sys_menu_save.ogg b/web/detective/audio/voice/female/sys_menu_save.ogg index dcb9f613..e0175806 100644 Binary files a/web/detective/audio/voice/female/sys_menu_save.ogg and b/web/detective/audio/voice/female/sys_menu_save.ogg differ diff --git a/web/detective/audio/voice/female/sys_new_case.ogg b/web/detective/audio/voice/female/sys_new_case.ogg index b1a90fda..afdc0747 100644 Binary files a/web/detective/audio/voice/female/sys_new_case.ogg and b/web/detective/audio/voice/female/sys_new_case.ogg differ diff --git a/web/detective/audio/voice/female/sys_saved.ogg b/web/detective/audio/voice/female/sys_saved.ogg index 41c73f72..dd5bc377 100644 Binary files a/web/detective/audio/voice/female/sys_saved.ogg and b/web/detective/audio/voice/female/sys_saved.ogg differ diff --git a/web/detective/audio/voice/female/tut_cf_ok.ogg b/web/detective/audio/voice/female/tut_cf_ok.ogg index 66e8908d..7fe9570e 100644 Binary files a/web/detective/audio/voice/female/tut_cf_ok.ogg and b/web/detective/audio/voice/female/tut_cf_ok.ogg differ diff --git a/web/detective/audio/voice/female/tut_cf_try.ogg b/web/detective/audio/voice/female/tut_cf_try.ogg index 359fc284..31a0b381 100644 Binary files a/web/detective/audio/voice/female/tut_cf_try.ogg and b/web/detective/audio/voice/female/tut_cf_try.ogg differ diff --git a/web/detective/audio/voice/female/tut_confront.ogg b/web/detective/audio/voice/female/tut_confront.ogg index ce68c597..725f83ee 100644 Binary files a/web/detective/audio/voice/female/tut_confront.ogg and b/web/detective/audio/voice/female/tut_confront.ogg differ diff --git a/web/detective/audio/voice/female/tut_d0.ogg b/web/detective/audio/voice/female/tut_d0.ogg index b021da94..db169bab 100644 Binary files a/web/detective/audio/voice/female/tut_d0.ogg and b/web/detective/audio/voice/female/tut_d0.ogg differ diff --git a/web/detective/audio/voice/female/tut_done.ogg b/web/detective/audio/voice/female/tut_done.ogg index 452ff99f..3c4e8899 100644 Binary files a/web/detective/audio/voice/female/tut_done.ogg and b/web/detective/audio/voice/female/tut_done.ogg differ diff --git a/web/detective/audio/voice/female/tut_listen.ogg b/web/detective/audio/voice/female/tut_listen.ogg index 490d2bad..58485767 100644 Binary files a/web/detective/audio/voice/female/tut_listen.ogg and b/web/detective/audio/voice/female/tut_listen.ogg differ diff --git a/web/detective/audio/voice/female/tut_replay.ogg b/web/detective/audio/voice/female/tut_replay.ogg index 5f0eaaa8..ce848207 100644 Binary files a/web/detective/audio/voice/female/tut_replay.ogg and b/web/detective/audio/voice/female/tut_replay.ogg differ diff --git a/web/detective/audio/voice/female/tut_skip.m4a b/web/detective/audio/voice/female/tut_skip.m4a index 1532fead..99968706 100644 Binary files a/web/detective/audio/voice/female/tut_skip.m4a and b/web/detective/audio/voice/female/tut_skip.m4a differ diff --git a/web/detective/audio/voice/female/tut_skip.ogg b/web/detective/audio/voice/female/tut_skip.ogg index b94f6f12..0e00bc69 100644 Binary files a/web/detective/audio/voice/female/tut_skip.ogg and b/web/detective/audio/voice/female/tut_skip.ogg differ diff --git a/web/detective/audio/voice/female/tut_status.ogg b/web/detective/audio/voice/female/tut_status.ogg index a3e98d9f..92bc8e23 100644 Binary files a/web/detective/audio/voice/female/tut_status.ogg and b/web/detective/audio/voice/female/tut_status.ogg differ diff --git a/web/detective/audio/voice/female/wp_1.ogg b/web/detective/audio/voice/female/wp_1.ogg index c996f2ec..127d0fa3 100644 Binary files a/web/detective/audio/voice/female/wp_1.ogg and b/web/detective/audio/voice/female/wp_1.ogg differ diff --git a/web/detective/audio/voice/female/wp_2.ogg b/web/detective/audio/voice/female/wp_2.ogg index 9faeb652..35c3e049 100644 Binary files a/web/detective/audio/voice/female/wp_2.ogg and b/web/detective/audio/voice/female/wp_2.ogg differ diff --git a/web/detective/audio/voice/female/wp_3.ogg b/web/detective/audio/voice/female/wp_3.ogg index bd348978..d175e679 100644 Binary files a/web/detective/audio/voice/female/wp_3.ogg and b/web/detective/audio/voice/female/wp_3.ogg differ diff --git a/web/detective/audio/voice/female/wp_4.ogg b/web/detective/audio/voice/female/wp_4.ogg index 7e74d9b1..9163ca59 100644 Binary files a/web/detective/audio/voice/female/wp_4.ogg and b/web/detective/audio/voice/female/wp_4.ogg differ diff --git a/web/detective/audio/voice/fo_1.ogg b/web/detective/audio/voice/fo_1.ogg index 1eb81800..281f2286 100644 Binary files a/web/detective/audio/voice/fo_1.ogg and b/web/detective/audio/voice/fo_1.ogg differ diff --git a/web/detective/audio/voice/fo_2.ogg b/web/detective/audio/voice/fo_2.ogg index c22f826e..5a3bccc4 100644 Binary files a/web/detective/audio/voice/fo_2.ogg and b/web/detective/audio/voice/fo_2.ogg differ diff --git a/web/detective/audio/voice/fo_3.ogg b/web/detective/audio/voice/fo_3.ogg index a78ec9e7..8d49f4d3 100644 Binary files a/web/detective/audio/voice/fo_3.ogg and b/web/detective/audio/voice/fo_3.ogg differ diff --git a/web/detective/audio/voice/fo_4.ogg b/web/detective/audio/voice/fo_4.ogg index 8351ecaa..988dd6bc 100644 Binary files a/web/detective/audio/voice/fo_4.ogg and b/web/detective/audio/voice/fo_4.ogg differ diff --git a/web/detective/audio/voice/fo_5.ogg b/web/detective/audio/voice/fo_5.ogg index 53efa40a..719e5d75 100644 Binary files a/web/detective/audio/voice/fo_5.ogg and b/web/detective/audio/voice/fo_5.ogg differ diff --git a/web/detective/audio/voice/male/b_hint_c1.ogg b/web/detective/audio/voice/male/b_hint_c1.ogg index f90ffdc2..46e9b839 100644 Binary files a/web/detective/audio/voice/male/b_hint_c1.ogg and b/web/detective/audio/voice/male/b_hint_c1.ogg differ diff --git a/web/detective/audio/voice/male/b_hint_c2.ogg b/web/detective/audio/voice/male/b_hint_c2.ogg index bd13ddfd..9c0db4fc 100644 Binary files a/web/detective/audio/voice/male/b_hint_c2.ogg and b/web/detective/audio/voice/male/b_hint_c2.ogg differ diff --git a/web/detective/audio/voice/male/cf_confirm.ogg b/web/detective/audio/voice/male/cf_confirm.ogg index 8639108c..09365989 100644 Binary files a/web/detective/audio/voice/male/cf_confirm.ogg and b/web/detective/audio/voice/male/cf_confirm.ogg differ diff --git a/web/detective/audio/voice/male/cf_diff.ogg b/web/detective/audio/voice/male/cf_diff.ogg index 0654d386..c88fd17e 100644 Binary files a/web/detective/audio/voice/male/cf_diff.ogg and b/web/detective/audio/voice/male/cf_diff.ogg differ diff --git a/web/detective/audio/voice/male/cf_hit.ogg b/web/detective/audio/voice/male/cf_hit.ogg index 00af2ad2..4a493da2 100644 Binary files a/web/detective/audio/voice/male/cf_hit.ogg and b/web/detective/audio/voice/male/cf_hit.ogg differ diff --git a/web/detective/audio/voice/male/cf_pick_line.ogg b/web/detective/audio/voice/male/cf_pick_line.ogg index b152ba3d..e1e37e02 100644 Binary files a/web/detective/audio/voice/male/cf_pick_line.ogg and b/web/detective/audio/voice/male/cf_pick_line.ogg differ diff --git a/web/detective/audio/voice/male/cf_same.ogg b/web/detective/audio/voice/male/cf_same.ogg index 99cdd691..5264cee0 100644 Binary files a/web/detective/audio/voice/male/cf_same.ogg and b/web/detective/audio/voice/male/cf_same.ogg differ diff --git a/web/detective/audio/voice/male/cf_second.ogg b/web/detective/audio/voice/male/cf_second.ogg index 067c12df..be4750a9 100644 Binary files a/web/detective/audio/voice/male/cf_second.ogg and b/web/detective/audio/voice/male/cf_second.ogg differ diff --git a/web/detective/audio/voice/male/cf_self.ogg b/web/detective/audio/voice/male/cf_self.ogg index 34324526..ddf4b103 100644 Binary files a/web/detective/audio/voice/male/cf_self.ogg and b/web/detective/audio/voice/male/cf_self.ogg differ diff --git a/web/detective/audio/voice/male/cf_start.ogg b/web/detective/audio/voice/male/cf_start.ogg index 94051bb7..db66f060 100644 Binary files a/web/detective/audio/voice/male/cf_start.ogg and b/web/detective/audio/voice/male/cf_start.ogg differ diff --git a/web/detective/audio/voice/male/fin_ask_motive.ogg b/web/detective/audio/voice/male/fin_ask_motive.ogg index 711936e7..7300822f 100644 Binary files a/web/detective/audio/voice/male/fin_ask_motive.ogg and b/web/detective/audio/voice/male/fin_ask_motive.ogg differ diff --git a/web/detective/audio/voice/male/fin_ask_weapon.ogg b/web/detective/audio/voice/male/fin_ask_weapon.ogg index a03c9633..5d253751 100644 Binary files a/web/detective/audio/voice/male/fin_ask_weapon.ogg and b/web/detective/audio/voice/male/fin_ask_weapon.ogg differ diff --git a/web/detective/audio/voice/male/fin_clear.ogg b/web/detective/audio/voice/male/fin_clear.ogg index b616c321..df3ec206 100644 Binary files a/web/detective/audio/voice/male/fin_clear.ogg and b/web/detective/audio/voice/male/fin_clear.ogg differ diff --git a/web/detective/audio/voice/male/fin_mv_right.ogg b/web/detective/audio/voice/male/fin_mv_right.ogg index 650db140..8d5cb868 100644 Binary files a/web/detective/audio/voice/male/fin_mv_right.ogg and b/web/detective/audio/voice/male/fin_mv_right.ogg differ diff --git a/web/detective/audio/voice/male/fin_mv_wrong.ogg b/web/detective/audio/voice/male/fin_mv_wrong.ogg index b3e9f7ea..8b7e9b6a 100644 Binary files a/web/detective/audio/voice/male/fin_mv_wrong.ogg and b/web/detective/audio/voice/male/fin_mv_wrong.ogg differ diff --git a/web/detective/audio/voice/male/fin_pre.m4a b/web/detective/audio/voice/male/fin_pre.m4a new file mode 100644 index 00000000..0afb242e Binary files /dev/null and b/web/detective/audio/voice/male/fin_pre.m4a differ diff --git a/web/detective/audio/voice/male/fin_pre.ogg b/web/detective/audio/voice/male/fin_pre.ogg new file mode 100644 index 00000000..5af3676b Binary files /dev/null and b/web/detective/audio/voice/male/fin_pre.ogg differ diff --git a/web/detective/audio/voice/male/fin_right.ogg b/web/detective/audio/voice/male/fin_right.ogg index ac758eb0..e921bac0 100644 Binary files a/web/detective/audio/voice/male/fin_right.ogg and b/web/detective/audio/voice/male/fin_right.ogg differ diff --git a/web/detective/audio/voice/male/fin_right_b.ogg b/web/detective/audio/voice/male/fin_right_b.ogg index 7b297a88..1529e9dc 100644 Binary files a/web/detective/audio/voice/male/fin_right_b.ogg and b/web/detective/audio/voice/male/fin_right_b.ogg differ diff --git a/web/detective/audio/voice/male/fin_start.ogg b/web/detective/audio/voice/male/fin_start.ogg index f6cdc59c..80d64010 100644 Binary files a/web/detective/audio/voice/male/fin_start.ogg and b/web/detective/audio/voice/male/fin_start.ogg differ diff --git a/web/detective/audio/voice/male/fin_who_confirm.m4a b/web/detective/audio/voice/male/fin_who_confirm.m4a index b1ec9b63..64160939 100644 Binary files a/web/detective/audio/voice/male/fin_who_confirm.m4a and b/web/detective/audio/voice/male/fin_who_confirm.m4a differ diff --git a/web/detective/audio/voice/male/fin_who_confirm.ogg b/web/detective/audio/voice/male/fin_who_confirm.ogg index 217f6363..d627c000 100644 Binary files a/web/detective/audio/voice/male/fin_who_confirm.ogg and b/web/detective/audio/voice/male/fin_who_confirm.ogg differ diff --git a/web/detective/audio/voice/male/fin_wp_right.ogg b/web/detective/audio/voice/male/fin_wp_right.ogg index e3a5da5c..77dbfc90 100644 Binary files a/web/detective/audio/voice/male/fin_wp_right.ogg and b/web/detective/audio/voice/male/fin_wp_right.ogg differ diff --git a/web/detective/audio/voice/male/fin_wp_wrong.ogg b/web/detective/audio/voice/male/fin_wp_wrong.ogg index 411f0871..51b5bcd9 100644 Binary files a/web/detective/audio/voice/male/fin_wp_wrong.ogg and b/web/detective/audio/voice/male/fin_wp_wrong.ogg differ diff --git a/web/detective/audio/voice/male/gd_board.ogg b/web/detective/audio/voice/male/gd_board.ogg index a5e96b1e..73e516cd 100644 Binary files a/web/detective/audio/voice/male/gd_board.ogg and b/web/detective/audio/voice/male/gd_board.ogg differ diff --git a/web/detective/audio/voice/male/gd_board_cf.m4a b/web/detective/audio/voice/male/gd_board_cf.m4a new file mode 100644 index 00000000..7dabd743 Binary files /dev/null and b/web/detective/audio/voice/male/gd_board_cf.m4a differ diff --git a/web/detective/audio/voice/male/gd_board_cf.ogg b/web/detective/audio/voice/male/gd_board_cf.ogg new file mode 100644 index 00000000..5347361e Binary files /dev/null and b/web/detective/audio/voice/male/gd_board_cf.ogg differ diff --git a/web/detective/audio/voice/male/gd_cf.ogg b/web/detective/audio/voice/male/gd_cf.ogg index fc61a879..a9d1c231 100644 Binary files a/web/detective/audio/voice/male/gd_cf.ogg and b/web/detective/audio/voice/male/gd_cf.ogg differ diff --git a/web/detective/audio/voice/male/gd_fin.ogg b/web/detective/audio/voice/male/gd_fin.ogg index 778dbc1a..a370fb76 100644 Binary files a/web/detective/audio/voice/male/gd_fin.ogg and b/web/detective/audio/voice/male/gd_fin.ogg differ diff --git a/web/detective/audio/voice/male/gd_invalid.ogg b/web/detective/audio/voice/male/gd_invalid.ogg index a39768e9..5dd4ae60 100644 Binary files a/web/detective/audio/voice/male/gd_invalid.ogg and b/web/detective/audio/voice/male/gd_invalid.ogg differ diff --git a/web/detective/audio/voice/male/hint_a.ogg b/web/detective/audio/voice/male/hint_a.ogg index d8bf5f7e..58d8b11e 100644 Binary files a/web/detective/audio/voice/male/hint_a.ogg and b/web/detective/audio/voice/male/hint_a.ogg differ diff --git a/web/detective/audio/voice/male/hint_b.ogg b/web/detective/audio/voice/male/hint_b.ogg index 3958a9a2..af4ed939 100644 Binary files a/web/detective/audio/voice/male/hint_b.ogg and b/web/detective/audio/voice/male/hint_b.ogg differ diff --git a/web/detective/audio/voice/male/hint_c1.ogg b/web/detective/audio/voice/male/hint_c1.ogg index de395d0f..93423115 100644 Binary files a/web/detective/audio/voice/male/hint_c1.ogg and b/web/detective/audio/voice/male/hint_c1.ogg differ diff --git a/web/detective/audio/voice/male/hint_c2.ogg b/web/detective/audio/voice/male/hint_c2.ogg index 970a4a99..2ab8b58d 100644 Binary files a/web/detective/audio/voice/male/hint_c2.ogg and b/web/detective/audio/voice/male/hint_c2.ogg differ diff --git a/web/detective/audio/voice/male/hint_fin.ogg b/web/detective/audio/voice/male/hint_fin.ogg index 8ce1afd7..407cda10 100644 Binary files a/web/detective/audio/voice/male/hint_fin.ogg and b/web/detective/audio/voice/male/hint_fin.ogg differ diff --git a/web/detective/audio/voice/male/intro_1.ogg b/web/detective/audio/voice/male/intro_1.ogg index e112149f..857640c8 100644 Binary files a/web/detective/audio/voice/male/intro_1.ogg and b/web/detective/audio/voice/male/intro_1.ogg differ diff --git a/web/detective/audio/voice/male/intro_2.ogg b/web/detective/audio/voice/male/intro_2.ogg index ea8f48ca..f0e6a69b 100644 Binary files a/web/detective/audio/voice/male/intro_2.ogg and b/web/detective/audio/voice/male/intro_2.ogg differ diff --git a/web/detective/audio/voice/male/intro_3.ogg b/web/detective/audio/voice/male/intro_3.ogg index ccc4cfe7..9e15b7c4 100644 Binary files a/web/detective/audio/voice/male/intro_3.ogg and b/web/detective/audio/voice/male/intro_3.ogg differ diff --git a/web/detective/audio/voice/male/intro_w3.ogg b/web/detective/audio/voice/male/intro_w3.ogg index 61a9b4ed..fbb4bc64 100644 Binary files a/web/detective/audio/voice/male/intro_w3.ogg and b/web/detective/audio/voice/male/intro_w3.ogg differ diff --git a/web/detective/audio/voice/male/item_case.ogg b/web/detective/audio/voice/male/item_case.ogg index a1552660..45bc8616 100644 Binary files a/web/detective/audio/voice/male/item_case.ogg and b/web/detective/audio/voice/male/item_case.ogg differ diff --git a/web/detective/audio/voice/male/item_fore.ogg b/web/detective/audio/voice/male/item_fore.ogg index d4a5a4f8..1f8b53f5 100644 Binary files a/web/detective/audio/voice/male/item_fore.ogg and b/web/detective/audio/voice/male/item_fore.ogg differ diff --git a/web/detective/audio/voice/male/item_scene.ogg b/web/detective/audio/voice/male/item_scene.ogg index 5f724762..c1ce3c99 100644 Binary files a/web/detective/audio/voice/male/item_scene.ogg and b/web/detective/audio/voice/male/item_scene.ogg differ diff --git a/web/detective/audio/voice/male/item_w1.ogg b/web/detective/audio/voice/male/item_w1.ogg index 66e153ce..c8b9e304 100644 Binary files a/web/detective/audio/voice/male/item_w1.ogg and b/web/detective/audio/voice/male/item_w1.ogg differ diff --git a/web/detective/audio/voice/male/item_w2.ogg b/web/detective/audio/voice/male/item_w2.ogg index 206ad4c2..74c1aeb8 100644 Binary files a/web/detective/audio/voice/male/item_w2.ogg and b/web/detective/audio/voice/male/item_w2.ogg differ diff --git a/web/detective/audio/voice/male/item_w3.ogg b/web/detective/audio/voice/male/item_w3.ogg index 7581067b..81524ccf 100644 Binary files a/web/detective/audio/voice/male/item_w3.ogg and b/web/detective/audio/voice/male/item_w3.ogg differ diff --git a/web/detective/audio/voice/male/item_w4.ogg b/web/detective/audio/voice/male/item_w4.ogg index 4ad9dc07..ef2aa0f8 100644 Binary files a/web/detective/audio/voice/male/item_w4.ogg and b/web/detective/audio/voice/male/item_w4.ogg differ diff --git a/web/detective/audio/voice/male/item_who_w1.m4a b/web/detective/audio/voice/male/item_who_w1.m4a new file mode 100644 index 00000000..ebffae91 Binary files /dev/null and b/web/detective/audio/voice/male/item_who_w1.m4a differ diff --git a/web/detective/audio/voice/male/item_who_w1.ogg b/web/detective/audio/voice/male/item_who_w1.ogg new file mode 100644 index 00000000..a0d772e3 Binary files /dev/null and b/web/detective/audio/voice/male/item_who_w1.ogg differ diff --git a/web/detective/audio/voice/male/item_who_w2.m4a b/web/detective/audio/voice/male/item_who_w2.m4a new file mode 100644 index 00000000..6f675a65 Binary files /dev/null and b/web/detective/audio/voice/male/item_who_w2.m4a differ diff --git a/web/detective/audio/voice/male/item_who_w2.ogg b/web/detective/audio/voice/male/item_who_w2.ogg new file mode 100644 index 00000000..645ab808 Binary files /dev/null and b/web/detective/audio/voice/male/item_who_w2.ogg differ diff --git a/web/detective/audio/voice/male/item_who_w3.m4a b/web/detective/audio/voice/male/item_who_w3.m4a new file mode 100644 index 00000000..01b5a764 Binary files /dev/null and b/web/detective/audio/voice/male/item_who_w3.m4a differ diff --git a/web/detective/audio/voice/male/item_who_w3.ogg b/web/detective/audio/voice/male/item_who_w3.ogg new file mode 100644 index 00000000..f379b285 Binary files /dev/null and b/web/detective/audio/voice/male/item_who_w3.ogg differ diff --git a/web/detective/audio/voice/male/item_who_w4.m4a b/web/detective/audio/voice/male/item_who_w4.m4a new file mode 100644 index 00000000..54a073e6 Binary files /dev/null and b/web/detective/audio/voice/male/item_who_w4.m4a differ diff --git a/web/detective/audio/voice/male/item_who_w4.ogg b/web/detective/audio/voice/male/item_who_w4.ogg new file mode 100644 index 00000000..e1ed12cc Binary files /dev/null and b/web/detective/audio/voice/male/item_who_w4.ogg differ diff --git a/web/detective/audio/voice/male/key/cf_confirm.ogg b/web/detective/audio/voice/male/key/cf_confirm.ogg index d192b39a..25507081 100644 Binary files a/web/detective/audio/voice/male/key/cf_confirm.ogg and b/web/detective/audio/voice/male/key/cf_confirm.ogg differ diff --git a/web/detective/audio/voice/male/key/cf_pick_line.ogg b/web/detective/audio/voice/male/key/cf_pick_line.ogg index d41472c7..a52544d1 100644 Binary files a/web/detective/audio/voice/male/key/cf_pick_line.ogg and b/web/detective/audio/voice/male/key/cf_pick_line.ogg differ diff --git a/web/detective/audio/voice/male/key/fin_pre.m4a b/web/detective/audio/voice/male/key/fin_pre.m4a new file mode 100644 index 00000000..a21d733b Binary files /dev/null and b/web/detective/audio/voice/male/key/fin_pre.m4a differ diff --git a/web/detective/audio/voice/male/key/fin_pre.ogg b/web/detective/audio/voice/male/key/fin_pre.ogg new file mode 100644 index 00000000..e90ce8ae Binary files /dev/null and b/web/detective/audio/voice/male/key/fin_pre.ogg differ diff --git a/web/detective/audio/voice/male/key/fin_who_confirm.m4a b/web/detective/audio/voice/male/key/fin_who_confirm.m4a new file mode 100644 index 00000000..7ecb3024 Binary files /dev/null and b/web/detective/audio/voice/male/key/fin_who_confirm.m4a differ diff --git a/web/detective/audio/voice/male/key/fin_who_confirm.ogg b/web/detective/audio/voice/male/key/fin_who_confirm.ogg new file mode 100644 index 00000000..7ceabf4b Binary files /dev/null and b/web/detective/audio/voice/male/key/fin_who_confirm.ogg differ diff --git a/web/detective/audio/voice/male/key/gd_board.ogg b/web/detective/audio/voice/male/key/gd_board.ogg index 4cc9a9b9..ba4354a7 100644 Binary files a/web/detective/audio/voice/male/key/gd_board.ogg and b/web/detective/audio/voice/male/key/gd_board.ogg differ diff --git a/web/detective/audio/voice/male/key/gd_board_cf.m4a b/web/detective/audio/voice/male/key/gd_board_cf.m4a new file mode 100644 index 00000000..b511585c Binary files /dev/null and b/web/detective/audio/voice/male/key/gd_board_cf.m4a differ diff --git a/web/detective/audio/voice/male/key/gd_board_cf.ogg b/web/detective/audio/voice/male/key/gd_board_cf.ogg new file mode 100644 index 00000000..86bacd69 Binary files /dev/null and b/web/detective/audio/voice/male/key/gd_board_cf.ogg differ diff --git a/web/detective/audio/voice/male/key/gd_cf.ogg b/web/detective/audio/voice/male/key/gd_cf.ogg index 816c841c..9e5f2161 100644 Binary files a/web/detective/audio/voice/male/key/gd_cf.ogg and b/web/detective/audio/voice/male/key/gd_cf.ogg differ diff --git a/web/detective/audio/voice/male/key/recap_cf.m4a b/web/detective/audio/voice/male/key/recap_cf.m4a new file mode 100644 index 00000000..db99e1d5 Binary files /dev/null and b/web/detective/audio/voice/male/key/recap_cf.m4a differ diff --git a/web/detective/audio/voice/male/key/recap_cf.ogg b/web/detective/audio/voice/male/key/recap_cf.ogg new file mode 100644 index 00000000..8ec1ad80 Binary files /dev/null and b/web/detective/audio/voice/male/key/recap_cf.ogg differ diff --git a/web/detective/audio/voice/male/key/settle_hook.ogg b/web/detective/audio/voice/male/key/settle_hook.ogg index 0b2c8a8d..9d22ef17 100644 Binary files a/web/detective/audio/voice/male/key/settle_hook.ogg and b/web/detective/audio/voice/male/key/settle_hook.ogg differ diff --git a/web/detective/audio/voice/male/key/sys_help.ogg b/web/detective/audio/voice/male/key/sys_help.ogg index ec6e8c64..63bdb29f 100644 Binary files a/web/detective/audio/voice/male/key/sys_help.ogg and b/web/detective/audio/voice/male/key/sys_help.ogg differ diff --git a/web/detective/audio/voice/male/key/tut_confront.ogg b/web/detective/audio/voice/male/key/tut_confront.ogg index 2101b93d..e457ae1e 100644 Binary files a/web/detective/audio/voice/male/key/tut_confront.ogg and b/web/detective/audio/voice/male/key/tut_confront.ogg differ diff --git a/web/detective/audio/voice/male/key/tut_d0.ogg b/web/detective/audio/voice/male/key/tut_d0.ogg index cebdcf11..f9bcbb85 100644 Binary files a/web/detective/audio/voice/male/key/tut_d0.ogg and b/web/detective/audio/voice/male/key/tut_d0.ogg differ diff --git a/web/detective/audio/voice/male/key/tut_listen.ogg b/web/detective/audio/voice/male/key/tut_listen.ogg index cf87a087..5ccaea0a 100644 Binary files a/web/detective/audio/voice/male/key/tut_listen.ogg and b/web/detective/audio/voice/male/key/tut_listen.ogg differ diff --git a/web/detective/audio/voice/male/key/tut_replay.ogg b/web/detective/audio/voice/male/key/tut_replay.ogg index 6f921fae..b33c6f5e 100644 Binary files a/web/detective/audio/voice/male/key/tut_replay.ogg and b/web/detective/audio/voice/male/key/tut_replay.ogg differ diff --git a/web/detective/audio/voice/male/mv_1.ogg b/web/detective/audio/voice/male/mv_1.ogg index c7dec861..f4aecc7c 100644 Binary files a/web/detective/audio/voice/male/mv_1.ogg and b/web/detective/audio/voice/male/mv_1.ogg differ diff --git a/web/detective/audio/voice/male/mv_2.ogg b/web/detective/audio/voice/male/mv_2.ogg index 4e6703d0..e1bba94d 100644 Binary files a/web/detective/audio/voice/male/mv_2.ogg and b/web/detective/audio/voice/male/mv_2.ogg differ diff --git a/web/detective/audio/voice/male/mv_3.ogg b/web/detective/audio/voice/male/mv_3.ogg index 4fe55206..365ae367 100644 Binary files a/web/detective/audio/voice/male/mv_3.ogg and b/web/detective/audio/voice/male/mv_3.ogg differ diff --git a/web/detective/audio/voice/male/rate_a.ogg b/web/detective/audio/voice/male/rate_a.ogg index 3cbc7a82..98cf650b 100644 Binary files a/web/detective/audio/voice/male/rate_a.ogg and b/web/detective/audio/voice/male/rate_a.ogg differ diff --git a/web/detective/audio/voice/male/rate_b.ogg b/web/detective/audio/voice/male/rate_b.ogg index fa95387f..60a12876 100644 Binary files a/web/detective/audio/voice/male/rate_b.ogg and b/web/detective/audio/voice/male/rate_b.ogg differ diff --git a/web/detective/audio/voice/male/rate_c.ogg b/web/detective/audio/voice/male/rate_c.ogg index a4d4f4bc..56d832fc 100644 Binary files a/web/detective/audio/voice/male/rate_c.ogg and b/web/detective/audio/voice/male/rate_c.ogg differ diff --git a/web/detective/audio/voice/male/rate_s.ogg b/web/detective/audio/voice/male/rate_s.ogg index 348c7ec5..53502f68 100644 Binary files a/web/detective/audio/voice/male/rate_s.ogg and b/web/detective/audio/voice/male/rate_s.ogg differ diff --git a/web/detective/audio/voice/male/recap_cf.m4a b/web/detective/audio/voice/male/recap_cf.m4a new file mode 100644 index 00000000..c941be87 Binary files /dev/null and b/web/detective/audio/voice/male/recap_cf.m4a differ diff --git a/web/detective/audio/voice/male/recap_cf.ogg b/web/detective/audio/voice/male/recap_cf.ogg new file mode 100644 index 00000000..b4c54c03 Binary files /dev/null and b/web/detective/audio/voice/male/recap_cf.ogg differ diff --git a/web/detective/audio/voice/male/recap_go.ogg b/web/detective/audio/voice/male/recap_go.ogg index bcc1c582..95480252 100644 Binary files a/web/detective/audio/voice/male/recap_go.ogg and b/web/detective/audio/voice/male/recap_go.ogg differ diff --git a/web/detective/audio/voice/male/sc_0.ogg b/web/detective/audio/voice/male/sc_0.ogg index 40b636e1..71d27584 100644 Binary files a/web/detective/audio/voice/male/sc_0.ogg and b/web/detective/audio/voice/male/sc_0.ogg differ diff --git a/web/detective/audio/voice/male/sc_1.ogg b/web/detective/audio/voice/male/sc_1.ogg index a70b2b1d..be56bcf6 100644 Binary files a/web/detective/audio/voice/male/sc_1.ogg and b/web/detective/audio/voice/male/sc_1.ogg differ diff --git a/web/detective/audio/voice/male/sc_2.ogg b/web/detective/audio/voice/male/sc_2.ogg index 8d8fab8b..bebb8367 100644 Binary files a/web/detective/audio/voice/male/sc_2.ogg and b/web/detective/audio/voice/male/sc_2.ogg differ diff --git a/web/detective/audio/voice/male/sc_3.ogg b/web/detective/audio/voice/male/sc_3.ogg index 19c957b3..ea41b4ed 100644 Binary files a/web/detective/audio/voice/male/sc_3.ogg and b/web/detective/audio/voice/male/sc_3.ogg differ diff --git a/web/detective/audio/voice/male/sc_4.ogg b/web/detective/audio/voice/male/sc_4.ogg index 2262139f..a1589544 100644 Binary files a/web/detective/audio/voice/male/sc_4.ogg and b/web/detective/audio/voice/male/sc_4.ogg differ diff --git a/web/detective/audio/voice/male/sc_5.ogg b/web/detective/audio/voice/male/sc_5.ogg index 12380d25..38671430 100644 Binary files a/web/detective/audio/voice/male/sc_5.ogg and b/web/detective/audio/voice/male/sc_5.ogg differ diff --git a/web/detective/audio/voice/male/settings_hint.ogg b/web/detective/audio/voice/male/settings_hint.ogg index 48d186bb..ca739bff 100644 Binary files a/web/detective/audio/voice/male/settings_hint.ogg and b/web/detective/audio/voice/male/settings_hint.ogg differ diff --git a/web/detective/audio/voice/male/settle_hook.ogg b/web/detective/audio/voice/male/settle_hook.ogg index cd45b20f..d2d6015e 100644 Binary files a/web/detective/audio/voice/male/settle_hook.ogg and b/web/detective/audio/voice/male/settle_hook.ogg differ diff --git a/web/detective/audio/voice/male/settle_open.ogg b/web/detective/audio/voice/male/settle_open.ogg index 400b0b79..ef5919c3 100644 Binary files a/web/detective/audio/voice/male/settle_open.ogg and b/web/detective/audio/voice/male/settle_open.ogg differ diff --git a/web/detective/audio/voice/male/st_asked_0.ogg b/web/detective/audio/voice/male/st_asked_0.ogg index 08cd9fa3..af3ec0d3 100644 Binary files a/web/detective/audio/voice/male/st_asked_0.ogg and b/web/detective/audio/voice/male/st_asked_0.ogg differ diff --git a/web/detective/audio/voice/male/st_asked_1.ogg b/web/detective/audio/voice/male/st_asked_1.ogg index 63c907d2..0e72a2c9 100644 Binary files a/web/detective/audio/voice/male/st_asked_1.ogg and b/web/detective/audio/voice/male/st_asked_1.ogg differ diff --git a/web/detective/audio/voice/male/st_asked_2.ogg b/web/detective/audio/voice/male/st_asked_2.ogg index 149fd011..688b901b 100644 Binary files a/web/detective/audio/voice/male/st_asked_2.ogg and b/web/detective/audio/voice/male/st_asked_2.ogg differ diff --git a/web/detective/audio/voice/male/st_asked_3.ogg b/web/detective/audio/voice/male/st_asked_3.ogg index c582ebc5..13d27720 100644 Binary files a/web/detective/audio/voice/male/st_asked_3.ogg and b/web/detective/audio/voice/male/st_asked_3.ogg differ diff --git a/web/detective/audio/voice/male/st_asked_4.ogg b/web/detective/audio/voice/male/st_asked_4.ogg index 675bee71..73d17bff 100644 Binary files a/web/detective/audio/voice/male/st_asked_4.ogg and b/web/detective/audio/voice/male/st_asked_4.ogg differ diff --git a/web/detective/audio/voice/male/st_asked_5.ogg b/web/detective/audio/voice/male/st_asked_5.ogg index 609558c0..0f43f4ad 100644 Binary files a/web/detective/audio/voice/male/st_asked_5.ogg and b/web/detective/audio/voice/male/st_asked_5.ogg differ diff --git a/web/detective/audio/voice/male/st_asked_6.ogg b/web/detective/audio/voice/male/st_asked_6.ogg index 5d74aa43..fb9ac6bb 100644 Binary files a/web/detective/audio/voice/male/st_asked_6.ogg and b/web/detective/audio/voice/male/st_asked_6.ogg differ diff --git a/web/detective/audio/voice/male/st_doubt_0.ogg b/web/detective/audio/voice/male/st_doubt_0.ogg index bb73a14b..1785995b 100644 Binary files a/web/detective/audio/voice/male/st_doubt_0.ogg and b/web/detective/audio/voice/male/st_doubt_0.ogg differ diff --git a/web/detective/audio/voice/male/st_doubt_1.ogg b/web/detective/audio/voice/male/st_doubt_1.ogg index 8ce2fc4c..a6926208 100644 Binary files a/web/detective/audio/voice/male/st_doubt_1.ogg and b/web/detective/audio/voice/male/st_doubt_1.ogg differ diff --git a/web/detective/audio/voice/male/st_doubt_2.ogg b/web/detective/audio/voice/male/st_doubt_2.ogg index 3f99a9a1..d6116fed 100644 Binary files a/web/detective/audio/voice/male/st_doubt_2.ogg and b/web/detective/audio/voice/male/st_doubt_2.ogg differ diff --git a/web/detective/audio/voice/male/st_doubt_3.ogg b/web/detective/audio/voice/male/st_doubt_3.ogg index 94d678cf..b97241bb 100644 Binary files a/web/detective/audio/voice/male/st_doubt_3.ogg and b/web/detective/audio/voice/male/st_doubt_3.ogg differ diff --git a/web/detective/audio/voice/male/st_doubt_4.ogg b/web/detective/audio/voice/male/st_doubt_4.ogg index ed98a556..cf335927 100644 Binary files a/web/detective/audio/voice/male/st_doubt_4.ogg and b/web/detective/audio/voice/male/st_doubt_4.ogg differ diff --git a/web/detective/audio/voice/male/st_miss_0.ogg b/web/detective/audio/voice/male/st_miss_0.ogg index 1e35ea50..56146cb4 100644 Binary files a/web/detective/audio/voice/male/st_miss_0.ogg and b/web/detective/audio/voice/male/st_miss_0.ogg differ diff --git a/web/detective/audio/voice/male/st_miss_1.ogg b/web/detective/audio/voice/male/st_miss_1.ogg index c11b92c5..e78ec4da 100644 Binary files a/web/detective/audio/voice/male/st_miss_1.ogg and b/web/detective/audio/voice/male/st_miss_1.ogg differ diff --git a/web/detective/audio/voice/male/st_miss_2.ogg b/web/detective/audio/voice/male/st_miss_2.ogg index db9705fa..85bf4937 100644 Binary files a/web/detective/audio/voice/male/st_miss_2.ogg and b/web/detective/audio/voice/male/st_miss_2.ogg differ diff --git a/web/detective/audio/voice/male/st_wrong.m4a b/web/detective/audio/voice/male/st_wrong.m4a new file mode 100644 index 00000000..41eeba74 Binary files /dev/null and b/web/detective/audio/voice/male/st_wrong.m4a differ diff --git a/web/detective/audio/voice/male/st_wrong.ogg b/web/detective/audio/voice/male/st_wrong.ogg new file mode 100644 index 00000000..bddd8c61 Binary files /dev/null and b/web/detective/audio/voice/male/st_wrong.ogg differ diff --git a/web/detective/audio/voice/male/sys_continue_ask.ogg b/web/detective/audio/voice/male/sys_continue_ask.ogg index 12375738..529256cc 100644 Binary files a/web/detective/audio/voice/male/sys_continue_ask.ogg and b/web/detective/audio/voice/male/sys_continue_ask.ogg differ diff --git a/web/detective/audio/voice/male/sys_help.ogg b/web/detective/audio/voice/male/sys_help.ogg index fb0ede73..e8753799 100644 Binary files a/web/detective/audio/voice/male/sys_help.ogg and b/web/detective/audio/voice/male/sys_help.ogg differ diff --git a/web/detective/audio/voice/male/sys_menu.ogg b/web/detective/audio/voice/male/sys_menu.ogg index 09258465..6d4cf686 100644 Binary files a/web/detective/audio/voice/male/sys_menu.ogg and b/web/detective/audio/voice/male/sys_menu.ogg differ diff --git a/web/detective/audio/voice/male/sys_menu_cf.ogg b/web/detective/audio/voice/male/sys_menu_cf.ogg index 214a53c7..03e19c32 100644 Binary files a/web/detective/audio/voice/male/sys_menu_cf.ogg and b/web/detective/audio/voice/male/sys_menu_cf.ogg differ diff --git a/web/detective/audio/voice/male/sys_menu_help.ogg b/web/detective/audio/voice/male/sys_menu_help.ogg index 4ff3f9d7..30dc1103 100644 Binary files a/web/detective/audio/voice/male/sys_menu_help.ogg and b/web/detective/audio/voice/male/sys_menu_help.ogg differ diff --git a/web/detective/audio/voice/male/sys_menu_restart.ogg b/web/detective/audio/voice/male/sys_menu_restart.ogg index c758b72b..bbca1cc9 100644 Binary files a/web/detective/audio/voice/male/sys_menu_restart.ogg and b/web/detective/audio/voice/male/sys_menu_restart.ogg differ diff --git a/web/detective/audio/voice/male/sys_menu_resume.ogg b/web/detective/audio/voice/male/sys_menu_resume.ogg index 9b7d8a27..e0024b77 100644 Binary files a/web/detective/audio/voice/male/sys_menu_resume.ogg and b/web/detective/audio/voice/male/sys_menu_resume.ogg differ diff --git a/web/detective/audio/voice/male/sys_menu_save.ogg b/web/detective/audio/voice/male/sys_menu_save.ogg index 6532c253..d661d3ad 100644 Binary files a/web/detective/audio/voice/male/sys_menu_save.ogg and b/web/detective/audio/voice/male/sys_menu_save.ogg differ diff --git a/web/detective/audio/voice/male/sys_new_case.ogg b/web/detective/audio/voice/male/sys_new_case.ogg index 7205e714..02da259a 100644 Binary files a/web/detective/audio/voice/male/sys_new_case.ogg and b/web/detective/audio/voice/male/sys_new_case.ogg differ diff --git a/web/detective/audio/voice/male/sys_saved.ogg b/web/detective/audio/voice/male/sys_saved.ogg index 17f25c66..99c71776 100644 Binary files a/web/detective/audio/voice/male/sys_saved.ogg and b/web/detective/audio/voice/male/sys_saved.ogg differ diff --git a/web/detective/audio/voice/male/tut_cf_ok.ogg b/web/detective/audio/voice/male/tut_cf_ok.ogg index 171f4efe..60104b31 100644 Binary files a/web/detective/audio/voice/male/tut_cf_ok.ogg and b/web/detective/audio/voice/male/tut_cf_ok.ogg differ diff --git a/web/detective/audio/voice/male/tut_cf_try.ogg b/web/detective/audio/voice/male/tut_cf_try.ogg index e7ab1305..5efd5daa 100644 Binary files a/web/detective/audio/voice/male/tut_cf_try.ogg and b/web/detective/audio/voice/male/tut_cf_try.ogg differ diff --git a/web/detective/audio/voice/male/tut_confront.ogg b/web/detective/audio/voice/male/tut_confront.ogg index 89400d15..11832468 100644 Binary files a/web/detective/audio/voice/male/tut_confront.ogg and b/web/detective/audio/voice/male/tut_confront.ogg differ diff --git a/web/detective/audio/voice/male/tut_d0.ogg b/web/detective/audio/voice/male/tut_d0.ogg index 30f2361b..53a1d652 100644 Binary files a/web/detective/audio/voice/male/tut_d0.ogg and b/web/detective/audio/voice/male/tut_d0.ogg differ diff --git a/web/detective/audio/voice/male/tut_done.ogg b/web/detective/audio/voice/male/tut_done.ogg index 8dc04ab4..3dcb74ca 100644 Binary files a/web/detective/audio/voice/male/tut_done.ogg and b/web/detective/audio/voice/male/tut_done.ogg differ diff --git a/web/detective/audio/voice/male/tut_listen.ogg b/web/detective/audio/voice/male/tut_listen.ogg index 6bc04bac..8b614c1c 100644 Binary files a/web/detective/audio/voice/male/tut_listen.ogg and b/web/detective/audio/voice/male/tut_listen.ogg differ diff --git a/web/detective/audio/voice/male/tut_replay.ogg b/web/detective/audio/voice/male/tut_replay.ogg index 90096695..da9ae035 100644 Binary files a/web/detective/audio/voice/male/tut_replay.ogg and b/web/detective/audio/voice/male/tut_replay.ogg differ diff --git a/web/detective/audio/voice/male/tut_skip.m4a b/web/detective/audio/voice/male/tut_skip.m4a index 51c27f8b..ca927781 100644 Binary files a/web/detective/audio/voice/male/tut_skip.m4a and b/web/detective/audio/voice/male/tut_skip.m4a differ diff --git a/web/detective/audio/voice/male/tut_skip.ogg b/web/detective/audio/voice/male/tut_skip.ogg index 22f6bc4c..1ae569ee 100644 Binary files a/web/detective/audio/voice/male/tut_skip.ogg and b/web/detective/audio/voice/male/tut_skip.ogg differ diff --git a/web/detective/audio/voice/male/tut_status.ogg b/web/detective/audio/voice/male/tut_status.ogg index 9c69a19b..94b435b0 100644 Binary files a/web/detective/audio/voice/male/tut_status.ogg and b/web/detective/audio/voice/male/tut_status.ogg differ diff --git a/web/detective/audio/voice/male/wp_1.ogg b/web/detective/audio/voice/male/wp_1.ogg index a32b8849..1b7a0c31 100644 Binary files a/web/detective/audio/voice/male/wp_1.ogg and b/web/detective/audio/voice/male/wp_1.ogg differ diff --git a/web/detective/audio/voice/male/wp_2.ogg b/web/detective/audio/voice/male/wp_2.ogg index d8cc5392..c5593545 100644 Binary files a/web/detective/audio/voice/male/wp_2.ogg and b/web/detective/audio/voice/male/wp_2.ogg differ diff --git a/web/detective/audio/voice/male/wp_3.ogg b/web/detective/audio/voice/male/wp_3.ogg index 646e96d9..9e66ae9d 100644 Binary files a/web/detective/audio/voice/male/wp_3.ogg and b/web/detective/audio/voice/male/wp_3.ogg differ diff --git a/web/detective/audio/voice/male/wp_4.ogg b/web/detective/audio/voice/male/wp_4.ogg index a8489f9e..215cccb9 100644 Binary files a/web/detective/audio/voice/male/wp_4.ogg and b/web/detective/audio/voice/male/wp_4.ogg differ diff --git a/web/detective/audio/voice/w1_1.ogg b/web/detective/audio/voice/w1_1.ogg index c06669a8..ba280048 100644 Binary files a/web/detective/audio/voice/w1_1.ogg and b/web/detective/audio/voice/w1_1.ogg differ diff --git a/web/detective/audio/voice/w1_2.ogg b/web/detective/audio/voice/w1_2.ogg index 444bb210..fc71e562 100644 Binary files a/web/detective/audio/voice/w1_2.ogg and b/web/detective/audio/voice/w1_2.ogg differ diff --git a/web/detective/audio/voice/w1_3.ogg b/web/detective/audio/voice/w1_3.ogg index 29477755..449c6b89 100644 Binary files a/web/detective/audio/voice/w1_3.ogg and b/web/detective/audio/voice/w1_3.ogg differ diff --git a/web/detective/audio/voice/w1_4.ogg b/web/detective/audio/voice/w1_4.ogg index f401c0d6..d3302c41 100644 Binary files a/web/detective/audio/voice/w1_4.ogg and b/web/detective/audio/voice/w1_4.ogg differ diff --git a/web/detective/audio/voice/w1_5.ogg b/web/detective/audio/voice/w1_5.ogg index c8950813..dd59a4c7 100644 Binary files a/web/detective/audio/voice/w1_5.ogg and b/web/detective/audio/voice/w1_5.ogg differ diff --git a/web/detective/audio/voice/w1_6.ogg b/web/detective/audio/voice/w1_6.ogg index 76ccf681..b7e68647 100644 Binary files a/web/detective/audio/voice/w1_6.ogg and b/web/detective/audio/voice/w1_6.ogg differ diff --git a/web/detective/audio/voice/w2_1.ogg b/web/detective/audio/voice/w2_1.ogg index 04f072ae..30ce822d 100644 Binary files a/web/detective/audio/voice/w2_1.ogg and b/web/detective/audio/voice/w2_1.ogg differ diff --git a/web/detective/audio/voice/w2_2.ogg b/web/detective/audio/voice/w2_2.ogg index 46e7396b..bb634abc 100644 Binary files a/web/detective/audio/voice/w2_2.ogg and b/web/detective/audio/voice/w2_2.ogg differ diff --git a/web/detective/audio/voice/w2_3.ogg b/web/detective/audio/voice/w2_3.ogg index d6766c5e..fc481b33 100644 Binary files a/web/detective/audio/voice/w2_3.ogg and b/web/detective/audio/voice/w2_3.ogg differ diff --git a/web/detective/audio/voice/w2_4.ogg b/web/detective/audio/voice/w2_4.ogg index 7c371216..d6ba917e 100644 Binary files a/web/detective/audio/voice/w2_4.ogg and b/web/detective/audio/voice/w2_4.ogg differ diff --git a/web/detective/audio/voice/w2_5.ogg b/web/detective/audio/voice/w2_5.ogg index a35615bb..d2a3dece 100644 Binary files a/web/detective/audio/voice/w2_5.ogg and b/web/detective/audio/voice/w2_5.ogg differ diff --git a/web/detective/audio/voice/w2_6.ogg b/web/detective/audio/voice/w2_6.ogg index e8296862..09a7889f 100644 Binary files a/web/detective/audio/voice/w2_6.ogg and b/web/detective/audio/voice/w2_6.ogg differ diff --git a/web/detective/audio/voice/wen_1.ogg b/web/detective/audio/voice/wen_1.ogg index 6a7804a1..2527b20d 100644 Binary files a/web/detective/audio/voice/wen_1.ogg and b/web/detective/audio/voice/wen_1.ogg differ diff --git a/web/detective/audio/voice/wen_2.ogg b/web/detective/audio/voice/wen_2.ogg index fb20e599..0583421b 100644 Binary files a/web/detective/audio/voice/wen_2.ogg and b/web/detective/audio/voice/wen_2.ogg differ diff --git a/web/detective/audio/voice/wen_3.ogg b/web/detective/audio/voice/wen_3.ogg index abd38e49..e981ac4f 100644 Binary files a/web/detective/audio/voice/wen_3.ogg and b/web/detective/audio/voice/wen_3.ogg differ diff --git a/web/detective/audio/voice/wen_4.ogg b/web/detective/audio/voice/wen_4.ogg index d092546f..2a99ed76 100644 Binary files a/web/detective/audio/voice/wen_4.ogg and b/web/detective/audio/voice/wen_4.ogg differ diff --git a/web/detective/audio/voice/wen_5.ogg b/web/detective/audio/voice/wen_5.ogg index 93bced9c..4c68a6b2 100644 Binary files a/web/detective/audio/voice/wen_5.ogg and b/web/detective/audio/voice/wen_5.ogg differ diff --git a/web/detective/audio/voice/wen_6.ogg b/web/detective/audio/voice/wen_6.ogg index c835a04c..8152d8a9 100644 Binary files a/web/detective/audio/voice/wen_6.ogg and b/web/detective/audio/voice/wen_6.ogg differ diff --git a/web/detective/audio/voice/z_1.ogg b/web/detective/audio/voice/z_1.ogg index 06cdc8fe..04037d53 100644 Binary files a/web/detective/audio/voice/z_1.ogg and b/web/detective/audio/voice/z_1.ogg differ diff --git a/web/detective/audio/voice/z_2.ogg b/web/detective/audio/voice/z_2.ogg index f4e89726..34734c18 100644 Binary files a/web/detective/audio/voice/z_2.ogg and b/web/detective/audio/voice/z_2.ogg differ diff --git a/web/detective/audio/voice/z_3.ogg b/web/detective/audio/voice/z_3.ogg index 6af23e85..02f74200 100644 Binary files a/web/detective/audio/voice/z_3.ogg and b/web/detective/audio/voice/z_3.ogg differ diff --git a/web/detective/audio/voice/z_4.ogg b/web/detective/audio/voice/z_4.ogg index 722ecc43..86a228d0 100644 Binary files a/web/detective/audio/voice/z_4.ogg and b/web/detective/audio/voice/z_4.ogg differ diff --git a/web/detective/audio/voice/z_5.ogg b/web/detective/audio/voice/z_5.ogg index 0816b9ae..595a4d6f 100644 Binary files a/web/detective/audio/voice/z_5.ogg and b/web/detective/audio/voice/z_5.ogg differ diff --git a/web/detective/audio/voice/z_6.ogg b/web/detective/audio/voice/z_6.ogg index 87dfce1a..6b573103 100644 Binary files a/web/detective/audio/voice/z_6.ogg and b/web/detective/audio/voice/z_6.ogg differ diff --git a/web/detective/audio/voice/z_break_1.ogg b/web/detective/audio/voice/z_break_1.ogg index 6757a609..de77c7ae 100644 Binary files a/web/detective/audio/voice/z_break_1.ogg and b/web/detective/audio/voice/z_break_1.ogg differ diff --git a/web/detective/audio/voice/z_break_2.ogg b/web/detective/audio/voice/z_break_2.ogg index beef0d8c..5939ebae 100644 Binary files a/web/detective/audio/voice/z_break_2.ogg and b/web/detective/audio/voice/z_break_2.ogg differ diff --git a/web/detective/audio/voice/z_break_3.ogg b/web/detective/audio/voice/z_break_3.ogg index 89f50ee8..468a6f1b 100644 Binary files a/web/detective/audio/voice/z_break_3.ogg and b/web/detective/audio/voice/z_break_3.ogg differ diff --git a/web/detective/audio/voice/z_react_1.ogg b/web/detective/audio/voice/z_react_1.ogg index 126f6d3a..283b0518 100644 Binary files a/web/detective/audio/voice/z_react_1.ogg and b/web/detective/audio/voice/z_react_1.ogg differ diff --git a/web/detective/audio/voice/z_react_2.ogg b/web/detective/audio/voice/z_react_2.ogg index b4f17933..4823caa4 100644 Binary files a/web/detective/audio/voice/z_react_2.ogg and b/web/detective/audio/voice/z_react_2.ogg differ diff --git a/web/detective/audio/voice/z_react_3.ogg b/web/detective/audio/voice/z_react_3.ogg index 9d34e6ba..5426bd04 100644 Binary files a/web/detective/audio/voice/z_react_3.ogg and b/web/detective/audio/voice/z_react_3.ogg differ diff --git a/web/detective/audio/voice/z_react_4.ogg b/web/detective/audio/voice/z_react_4.ogg index 417bef41..358b91a6 100644 Binary files a/web/detective/audio/voice/z_react_4.ogg and b/web/detective/audio/voice/z_react_4.ogg differ diff --git a/web/detective/audio/voice/z_react_w.m4a b/web/detective/audio/voice/z_react_w.m4a new file mode 100644 index 00000000..3fe4e347 Binary files /dev/null and b/web/detective/audio/voice/z_react_w.m4a differ diff --git a/web/detective/audio/voice/z_react_w.ogg b/web/detective/audio/voice/z_react_w.ogg new file mode 100644 index 00000000..d2cf5602 Binary files /dev/null and b/web/detective/audio/voice/z_react_w.ogg differ diff --git a/web/detective/game.js b/web/detective/game.js index 21722356..749007e7 100644 --- a/web/detective/game.js +++ b/web/detective/game.js @@ -1,6 +1,6 @@ /** * 《雨夜专案》—— 纯音频本格推理游戏(按 docs/design/18-detective.md 实现; - * 台词 id 见 18-detective-voice-ids.md,158 句 ≤160 上限)。 + * 台词 id 见 18-detective-voice-ids.md,R2 起 171 句 ≤176 上限)。 * * 你是专案组探长:翻听六份卷宗(4 证人证词 + 现场勘验 + 法医报告),逐句比对, * 指出「同轴异值」的证词对,锁定真凶,结案三问(真凶/凶器/动机)。 @@ -11,13 +11,16 @@ * _buildCase 生成期断言:全案卷同轴异值对集合 ≡ 预设计矛盾表(4 条)。 * * 状态机(§4):TITLE / DRILL / BOARD(空闲|播放) / CONFRONT / FINISH / VERDICT / - * SETTLE + MENU 挂起 overlay。证词链 = onComplete 串行(句间 0.8s)+ 单句 8s - * 兜底(资产缺失告警续链,§4.3 契约:屏蔽任意 voice 资产流程不卡死)。 + * SETTLE + MENU 挂起 overlay。证词链 = onComplete 串行(句间 0.8s)+ 单句 15s + * 兜底(资产缺失告警续链,§4.3 契约:屏蔽任意 voice 资产流程不卡死;R2 F1: + * 兜底须高于全部真实资产,原 8s 会掐 male/intro_1 8.8s 等真实长句)。 * * 手势(§2.5 总表,全游戏零手势偏离,仅 2 条已教学豁免): * - E1:BOARD 单击=播放/停止(「检查/翻阅」类非即时操作,escape/dungeon 先例); + * R2 F5 起 BOARD 停在「结案陈词」单击=确认闸(fin_pre),闸内再单击才进 FINISH。 * - E2:BOARD 空闲长按=进入指证(核心动词快捷入口;绑定条件=无证词链会话在播, * 与长按快进(仅播放中生效)时间互斥零冲突——播放中长按走引擎快进不受理)。 + * R2 F7 起 CONFRONT 选句相位长按同样放行引擎快进;选句位置按条目记忆。 * - 上滑状态链 / 下滑菜单 / 双击重听全状态保留(手势宪法三件套不豁免)。 * * 随机性(§6.2):mulberry32(seed) 生成期一次性洗牌(filler 句位置 / 凶器·动机 @@ -27,10 +30,13 @@ * 评级 S-C(§7.2)六变量条件式(doubts/weaponOk/motiveOk/wrongWho/cfMiss/hints), * 播报值=运行值(账目真实);VERDICT 认罪链 800ms 手势死窗+链锁(dungeon H1 同款, * §7.4:链完成前一切手势吞掉,settle_hook「单击接新案」言行一致)。 + * R2 F3 起 hit 链 react 按轴取句(慌在刚戳中的那条轴上),4/4 齐追加 reactFinal。 * * 看门狗双轨(§9):无操作轨(guide.watchdog:BOARD [10,25] / CONFRONT [15,30] / - * FINISH [20,40],手势重置)+ 无进展轨(游戏层 [45,90,150],只由进展事件重置—— - * 听完新条目/指证判定/结案相位推进;乱按饿不死,150s L3 直接给出可指证的矛盾对)。 + * FINISH [20,40],手势重置;R2 F6 起听齐未破时一级提示换指路词 gd_board_cf) + * + 无进展轨(游戏层 [45,90,150],只由进展事件重置——听完新条目/指证判定/结案 + * 相位推进;乱按饿不死,150s L3 直接给出可指证的矛盾对;R2 F11 起疑点齐时 L2 + * 直指 hint_fin)。 */ import { Game } from '../engine/game.js'; import { Guide } from '../engine/guide.js'; @@ -39,7 +45,10 @@ import { vibrate } from '../engine/haptics.js'; // ================================ 常量表 ================================ const SENTENCE_GAP_MS = 800; // 证词链播句间停顿(§3.1) -const SENTENCE_FALLBACK_MS = 8000; // 单句 8s 兜底(§4.3:资产缺失续链) +// 单句兜底(§4.3:资产缺失/引擎异常时告警续链)。R2 F1:原 8s 会掐真实长句 +// (male/intro_1 实测 8.8s、male/sys_help 9.28s,R1 live 开场白丢「川死了」)—— +// 兜底必须高于全部真实资产,只防缺失/异常,不当节奏装置。 +const SENTENCE_FALLBACK_MS = 15000; const SIG_LEAD_MS = 450; // 签名 earcon → 条目名语音 串行间隔(§8.2) const VERDICT_GRACE_MS = 800; // VERDICT 手势死窗(§7.4:450ms 长按判定+300ms 双击窗全盖) const PROG_LEVELS = [45000, 90000, 150000]; // 无进展轨三级(§9.3:earcon→短句→保底矛盾对) @@ -131,7 +140,8 @@ const PACK_A = { ], verdict: { accuseLine: 'fin_right', break: ['z_break_1', 'z_break_2', 'z_break_3'] }, wrongAccuse: { w1: 'acc_ge', w2: 'acc_shun', w4: 'acc_wen' }, - reacts: ['z_react_1', 'z_react_2', 'z_react_3', 'z_react_4'], + reacts: { lamp: 'z_react_1', key: 'z_react_2', weapon: 'z_react_w', scale: 'z_react_3' }, + reactFinal: 'z_react_4', // R2 F3:react 改按轴取句(慌要慌在刚戳中的事上);4/4 齐时追加收官句 questions: { weapon: { options: ['wp_1', 'wp_2', 'wp_3', 'wp_4'], answer: 'wp_2' }, motive: { options: ['mv_1', 'mv_2', 'mv_3'], answer: 'mv_1' }, @@ -167,7 +177,8 @@ const PACK_B = { ], verdict: { accuseLine: 'fin_right_b', break: ['b_shun_break_1', 'b_shun_break_2', 'b_shun_break_3'] }, wrongAccuse: { w1: 'acc_ge', w3: 'acc_zhou', w4: 'acc_wen' }, - reacts: ['b_shun_react_1', 'b_shun_react_2', 'b_shun_react_2', 'b_shun_react_2'], + reacts: { lamp: 'b_shun_react_1', key: 'b_shun_react_2', weapon: 'b_shun_react_2', scale: 'b_shun_react_2' }, + reactFinal: 'b_shun_react_2', // pack B 仅 2 条 react(内容弱绑定,非轴假话;§6.3 成本口径) }, }; @@ -185,7 +196,8 @@ function resolvePack(idx) { contradictions: deepClone(ov.contradictions), verdict: deepClone(ov.verdict), wrongAccuse: deepClone(ov.wrongAccuse), - reacts: [...ov.reacts], + reacts: { ...ov.reacts }, + reactFinal: ov.reactFinal, }; } @@ -218,6 +230,9 @@ export class DetectiveGame extends Game { this._gradeInfo = null; // 本局评级快照(SETTLE 上滑重听评级段) this._verdictGraceUntil = 0; this._menuOpenedAt = null; // 菜单挂起计时(_progAdjustMenuPause 消费) + this._caseGate = false; // R2 F5:结案陈词确认闸(armed=再单击才进 FINISH) + this._cfLineMem = {}; // R2 F7:选句预览位置按条目记忆(本 case 内;新案清空) + this._drillPassName = null; // R2 F2:D0 报名移交 D1 链串行播(防报名顶掉 tut_listen) // 无进展轨(§9.3):只由进展事件重置(_progressEvent),任何手势都不重置。 this._prog = { lastAt: 0, l1: false, l2: false, l3: false, counts: {}, armed: false, armedSession: -1 }; } @@ -297,7 +312,8 @@ export class DetectiveGame extends Game { seed, pack: packIdx, name: pack.name, culprit: pack.culprit, culpritName: pack.culpritName, items, layout, lineClues, lineItem, contradictions: pack.contradictions, verdict: pack.verdict, - wrongAccuse: pack.wrongAccuse, reacts: pack.reacts, questions: pack.questions, + wrongAccuse: pack.wrongAccuse, reacts: pack.reacts, reactFinal: pack.reactFinal, + questions: pack.questions, }; } @@ -310,13 +326,17 @@ export class DetectiveGame extends Game { _heardCount() { return this.run ? this.run.heard.length : 0; } _lineIds(itemId) { return this._case.layout.lines[itemId] || []; } - /** 上滑状态链 = 中断复述链同构(§10:st_asked_n → 未听 ≤3 时逐个条目名 → st_doubt_m → recap_go)。 */ + /** 上滑状态链 = 中断复述链同构(§10:st_asked_n → 未听 ≤3 时逐个条目名 → st_doubt_m → 指路尾句)。 + * R2 F6:尾句按局面指路——疑点齐=hint_fin(去结案);六份听齐但疑点未齐=recap_cf + * (「挑一句你不信的,按住指证」,治「都听完了不知道该干嘛」空档,R1 三人设同撞); + * 其余=recap_go「接着查」。 */ _statusChain() { const ids = ['voice/st_asked_' + this._heardCount()]; const unheard = LISTEN_ITEMS.filter((id) => !this.run.heard.includes(id)); if (unheard.length <= 3) for (const id of unheard) ids.push(this._itemName(this._itemOf(id))); ids.push('voice/st_doubt_' + this._doubtCount()); - ids.push('voice/recap_go'); + const d = this._doubtCount(); + ids.push(d === 4 ? 'voice/hint_fin' : (this._heardCount() >= 6 ? 'voice/recap_cf' : 'voice/recap_go')); return ids; } @@ -398,6 +418,8 @@ export class DetectiveGame extends Game { }; this.itemIdx = 0; this._play = null; this._cf = null; this._fin = null; this._drill = null; + this._caseGate = false; + this._cfLineMem = {}; // 新案清空选句记忆(R2 F7) this._save(); this._speakChain(['voice/sys_new_case'], () => { if (!this.meta.drillDone) this._enterDrill(); @@ -422,6 +444,7 @@ export class DetectiveGame extends Game { } this.itemIdx = 0; this._play = null; this._cf = null; this._fin = null; + this._caseGate = false; this._progressEvent(); // 读档进板 = 基线重置 this._enterBoard(this._statusChain()); // 局面复述链(§10:≤10s 回到可操作) } @@ -464,6 +487,7 @@ export class DetectiveGame extends Game { this._clearTimers(); this._play = null; this._cf = null; this._fin = null; this.menuOpen = false; + this._caseGate = false; // 回板即撤闸(R2 F5) this.state = 'BOARD'; this.audio.stopVoice(); this.audio.play('bgm/board'); @@ -487,10 +511,20 @@ export class DetectiveGame extends Game { // left/right 静默忽略(无 error 震);longpress 走引擎快进(E2 时间互斥) return; } + // R2 F5:结案确认闸在播时,非单击/双击手势先撤闸再走正常映射(滑走=继续查) + if (this._caseGate && g !== 'tap' && g !== 'doubletap') this._caseGate = false; if (g === 'tap') { - if (ITEM_ORDER[this.itemIdx] === 'case') { this._enterFinish(); return; } + if (ITEM_ORDER[this.itemIdx] === 'case') { + // R2 F5:「结案陈词」是循环列表必经站——第一次单击只进确认闸(fin_pre), + // 闸内再单击才进三问;滑走撤闸留板(R1:压力线误闯 6-7 次,代价真实) + if (this._caseGate) { this._caseGate = false; this._enterFinish(); return; } + this._caseGate = true; + this._speakChain(['voice/fin_pre']); + return; + } this._startPlayback(); } else if (g === 'doubletap') { + if (this._caseGate) { this._speakChain(['voice/fin_pre']); return; } // 闸内双击=重听闸句 this._replayLastLine(); } else if (g === 'left') { this._navItem(-1); @@ -508,6 +542,7 @@ export class DetectiveGame extends Game { } _navItem(d) { + this._caseGate = false; // 换条目即撤闸 this.itemIdx = (this.itemIdx + d + ITEM_ORDER.length) % ITEM_ORDER.length; this._announceItem(this.itemIdx); } @@ -613,6 +648,7 @@ export class DetectiveGame extends Game { this._clearTimers(); this._play = null; this._fin = null; this.menuOpen = false; + this._caseGate = false; this.state = 'CONFRONT'; this.audio.stopVoice(); this.guide.state('choice'); @@ -666,7 +702,13 @@ export class DetectiveGame extends Game { } else if (g === 'down') { this._openMenu(); } else if (g === 'longpress') { - this._invalid(); // 选择语境长按不作输入(§2.2) + // R2 F7:选句相位(line1/line2)长按放行=引擎快进(仅语音在播生效——预览句也是 + // 语音,宪法内加速通道;空闲则无可快进,error 震)。条目/确认相位维持不作输入。 + if (cf.phase === 'line1' || cf.phase === 'line2') { + if (!this.audio.isVoicePlaying()) this._invalid(); + } else { + this._invalid(); // 选择语境长按不作输入(§2.2) + } } } @@ -678,7 +720,8 @@ export class DetectiveGame extends Game { _cfConfirmItem() { const cf = this._cf; cf.phase = cf.phase === 'item1' ? 'line1' : 'line2'; - cf.lineIdx = 0; + // R2 F7:选句入口从该条目上次预览/定下的位置接着走(不再回回从第一句扫起) + cf.lineIdx = this._cfLineMem[LISTEN_ITEMS[cf.idx]] || 0; const lead = cf.pickSaid ? [] : ['voice/cf_pick_line']; // 选句相位入口(首次) cf.pickSaid = true; this._speakChain(lead, () => this._playSentence(this._cfCurLineId())); // 播该句全文(句序号不播) @@ -688,6 +731,7 @@ export class DetectiveGame extends Game { const cf = this._cf; const n = this._lineIds(LISTEN_ITEMS[cf.idx]).length; cf.lineIdx = (cf.lineIdx + d + n) % n; + this._cfLineMem[LISTEN_ITEMS[cf.idx]] = cf.lineIdx; // 预览位置记忆(R2 F7) this._playSentence(this._cfCurLineId()); } @@ -708,6 +752,7 @@ export class DetectiveGame extends Game { const cf = this._cf; const itemId = LISTEN_ITEMS[cf.idx]; const lineId = this._cfCurLineId(); + this._cfLineMem[itemId] = cf.lineIdx; // 定下=最强记忆点(R2 F7) if (cf.phase === 'confirm1') { cf.fixed = { item: itemId, line: lineId }; cf.phase = 'item2'; @@ -771,12 +816,18 @@ export class DetectiveGame extends Game { newDoubt = true; this.run.zHits++; } - const reactIdx = Math.max(1, Math.min(this.run.zHits, this._case.reacts.length)); - const chain = ['voice/cf_hit', 'voice/' + this._case.reacts[reactIdx - 1]]; - // 疑点 4/4 齐:自动播一次 hint_fin(引导去结案;庆祝性播报不计入保底提示账,§3.5) - if (newDoubt && this._doubtCount() === 4 && !this.run.hintFinShown) { - this.run.hintFinShown = true; - chain.push('voice/hint_fin'); + // R2 F3:react 按轴取句——慌要慌在刚戳中的那条轴上;按累计次数取句会在换顺序 + // 坐实时答非所问(R1 人设 P1:先戳凶器却慌「灯」= 演绎层假话)。 + const axisReact = this._case.reacts[contra.axis] || this._case.reactFinal; + const chain = ['voice/cf_hit', 'voice/' + axisReact]; + // 疑点 4/4 齐:追加收官句 reactFinal(与轴句不同才不重复)+ 自动播一次 hint_fin + // (引导去结案;庆祝性播报不计入保底提示账,§3.5) + if (newDoubt && this._doubtCount() === 4) { + if (this._case.reactFinal && this._case.reactFinal !== axisReact) chain.push('voice/' + this._case.reactFinal); + if (!this.run.hintFinShown) { + this.run.hintFinShown = true; + chain.push('voice/hint_fin'); + } } this._progressEvent(); this._save(); @@ -792,6 +843,7 @@ export class DetectiveGame extends Game { this._clearTimers(); this._play = null; this._cf = null; this.menuOpen = false; + this._caseGate = false; this.state = 'FINISH'; this.audio.stopVoice(); this.guide.state('choice'); @@ -799,18 +851,21 @@ export class DetectiveGame extends Game { this._fin = { phase: 'who', optIdx: 0, busy: false }; this._armFinWatchdog(); this._speakChain(['voice/fin_start'], () => { - this.audio.play(this._itemName(this._itemOf(WHO_ITEMS[0]))); + this.audio.play(this._whoName(WHO_ITEMS[0])); // R2 F4:指认的是人,播人名不播卷宗名 }); } + /** 真凶问选项名=纯人名(R2 F4:item_who_*;原复用条目名「学徒小顺的证词」语义错位)。 */ + _whoName(itemId) { return 'voice/item_who_' + itemId; } + _onFinishGesture(g) { const fin = this._fin; if (!fin) return; if (fin.busy) return; // 归因/反馈链播报中:吞掉(防重复答题重复记账) if (g === 'tap') { if (fin.phase === 'who') { - fin.phase = 'whoConfirm'; // 两段确认(§2.2:重播选项名 + fin_who_confirm) - this._speakChain([this._itemName(this._itemOf(WHO_ITEMS[fin.optIdx])), 'voice/fin_who_confirm']); + fin.phase = 'whoConfirm'; // 两段确认(§2.2:重播人名 + fin_who_confirm「就指认这位?」R2 F4) + this._speakChain([this._whoName(WHO_ITEMS[fin.optIdx]), 'voice/fin_who_confirm']); } else if (fin.phase === 'whoConfirm') { this._resolveWho(WHO_ITEMS[fin.optIdx]); } else if (fin.phase === 'weapon') { @@ -824,14 +879,14 @@ export class DetectiveGame extends Game { : fin.phase === 'weapon' ? this._case.layout.wpOpts : WHO_ITEMS; fin.optIdx = (fin.optIdx + d + opts.length) % opts.length; if (fin.phase === 'who' || fin.phase === 'whoConfirm') { - this.audio.play(this._itemName(this._itemOf(WHO_ITEMS[fin.optIdx]))); + this.audio.play(this._whoName(WHO_ITEMS[fin.optIdx])); } else { this.audio.play('voice/' + opts[fin.optIdx]); } } else if (g === 'doubletap') { // 重听当前问句/选项(宪法语义保留) if (fin.phase === 'who' || fin.phase === 'whoConfirm') { - this.audio.play(this._itemName(this._itemOf(WHO_ITEMS[fin.optIdx]))); + this.audio.play(this._whoName(WHO_ITEMS[fin.optIdx])); } else if (fin.phase === 'weapon') { this._speakChain(['voice/fin_ask_weapon', 'voice/' + this._case.layout.wpOpts[fin.optIdx]]); } else if (fin.phase === 'motive') { @@ -863,12 +918,13 @@ export class DetectiveGame extends Game { }); return; } - // 错指:不在场证明复述 + fin_clear → 回 BOARD(无限再机会,§7.1) + // 错指:不在场证明复述 + fin_clear + st_wrong 当场记账 → 回 BOARD(无限再机会,§7.1) + // R2 F9:st_wrong「错指一回,记档。」让评级账目当场可闻(原结算才揭账,S/A 差距靠悟) fin.busy = true; this.run.wrongWho++; this._progressEvent(); this._save(); - this._speakChain(['voice/' + this._case.wrongAccuse[itemId], 'voice/fin_clear'], () => this._backToBoard()); + this._speakChain(['voice/' + this._case.wrongAccuse[itemId], 'voice/fin_clear', 'voice/st_wrong'], () => this._backToBoard()); } _resolveWeapon(optId) { @@ -1004,9 +1060,13 @@ export class DetectiveGame extends Game { // FTUE:intro 三句(~13s)+ D0 指令 → 首输入达成点 ≈t+20s(§5) this._speakChain(['voice/intro_1', 'voice/intro_2', 'voice/intro_3', 'voice/tut_d0']); } else if (step === 1) { - // D1 听取老葛真实证词:无论 D0 滑到哪,回正到第一份并重新报名 + // D1 听取老葛真实证词:无论 D0 滑到哪,回正到第一份并重新报名。 + // R2 F2:D0 划到的条目名(_drillPassName)接在链首串行补播——原实现里 + // _navItem 的 450ms 报名与 tut_listen 并行互掐(live R1:指令句只播 0.4s)。 + const lead = this._drillPassName ? ['voice/' + this._drillPassName] : []; + this._drillPassName = null; this.itemIdx = 0; - this._speakChain(['voice/tut_listen'], () => this._announceItem(0)); + this._speakChain([...lead, 'voice/tut_listen'], () => this._announceItem(0)); } else if (step === 2) { this._speakChain(['voice/tut_replay']); } else if (step === 3) { @@ -1071,7 +1131,12 @@ export class DetectiveGame extends Game { switch (d.step) { case 0: if (g === 'left' || g === 'right') { - this._navItem(g === 'right' ? 1 : -1); // 签名 earcon + 条目名(真实内容) + // 签名 earcon + 条目名(真实内容);R2 F2:报名移交 D1 链串行播(不再互掐) + this.itemIdx = (this.itemIdx + (g === 'right' ? 1 : -1) + ITEM_ORDER.length) % ITEM_ORDER.length; + const item = this._itemAt(this.itemIdx); + this.audio.play('sfx/paper_turn'); + if (item.sig) this.audio.play('sfx/' + item.sig); + this._drillPassName = item.name; vibrate('confirm'); this._drillPass(); } else this._drillWrong(); @@ -1112,6 +1177,7 @@ export class DetectiveGame extends Game { this._menuItems = (this.state === 'TITLE' || this.state === 'SETTLE') ? TITLE_MENU : MENU_ITEMS; this._menuIdx = 0; this._menuOpenedAt = performance.now(); // 无进展轨挂起计时(关菜单时剔除时长,§9.3) + this._caseGate = false; // 开菜单撤结案闸(R2 F5) this._session++; // 打开即停播报/停看门狗(菜单=天然暂停,本作无实时玩法) this._clearTimers(); this._play = null; @@ -1253,8 +1319,10 @@ export class DetectiveGame extends Game { // ---- 无操作轨(guide.watchdog:手势重置;guide=off 全静零定时器) ---- _armBoardWatchdog() { + // R2 F6:六份听齐且疑点未齐时,一级提示换指路词(「换卷宗」此时是错指令) + const say0 = (this.run && this._heardCount() >= 6 && this._doubtCount() < 4) ? 'gd_board_cf' : 'gd_board'; this.guide.watchdog({ - arm: true, at: [10000, 25000], say: ['gd_board', null], + arm: true, at: [10000, 25000], say: [say0, null], cond: () => this.state === 'BOARD' && !this.menuOpen && !this._play, }); } @@ -1329,7 +1397,9 @@ export class DetectiveGame extends Game { if (t >= PROG_LEVELS[1] && !p.l2) { if (chainBusy) return; // 链空了再发(不标记,顺延不丢级) p.l2 = true; - const id = LISTEN_ITEMS.some((x) => !this.run.heard.includes(x)) ? 'hint_a' : 'hint_b'; + // R2 F11:疑点已齐还播「逐句比对」是指引过时——此情直指结案(hint_fin 限次口径沿用) + const id = this._doubtCount() === 4 ? 'hint_fin' + : LISTEN_ITEMS.some((x) => !this.run.heard.includes(x)) ? 'hint_a' : 'hint_b'; this._hintSpeak(id); return; } @@ -1364,7 +1434,7 @@ export class DetectiveGame extends Game { this._prog.counts[id] = (this._prog.counts[id] || 0) + 1; if (this._prog.counts[id] > HINT_MAX_TIMES) { this._prog.counts[id] = HINT_MAX_TIMES; return; } } - vibrate('warning'); + vibrate('confirm'); // R2 F8:递答案不用 warning 三连震(像训人),轻震即可 this.run.hintsGiven.push(id); // 保底提示入账(评级变量 hints,§7.2) this._save(); this._speakChain(['voice/' + id]); @@ -1372,7 +1442,7 @@ export class DetectiveGame extends Game { // ================================ 语音链 / 计时器基础设施 ================================ - /** 单句播放:自然播完推进;8s 兜底(资产缺失告警续链,§4.3 契约)。 */ + /** 单句播放:自然播完推进;15s 兜底(资产缺失告警续链,§4.3 契约;R2 F1:高于全部真实资产)。 */ _playSentence(lineId, onDone) { const s = this._session; let fired = false; diff --git a/web/detective/test/playtest.mjs b/web/detective/test/playtest.mjs index a2437992..f0ec7efc 100644 --- a/web/detective/test/playtest.mjs +++ b/web/detective/test/playtest.mjs @@ -7,8 +7,9 @@ * (navigator.maxTouchPoints=1 手机 persona;guide:'off' 回归纯玩法逻辑)。 * * 资产契约:引擎对缺失资产只 console.error 不崩——本测试在资产未落盘时也必须 - * 全绿(每句 8s 兜底续链推进),故 plays() 查询不过滤 missing 项;资产齐套后 - * 同样全绿(顺序/次数断言与时长无关)。资产审计只做信息性报告不判失败。 + * 全绿(每句 15s 兜底续链推进,R2 F1 起 8s→15s:兜底须高于全部真实资产), + * 故 plays() 查询不过滤 missing 项;资产齐套后同样全绿(顺序/次数断言与时长无关)。 + * 资产审计只做信息性报告不判失败。 * * 运行:tools/node/bin/node web/detective/test/playtest.mjs * 退出码 0 = 全部断言通过。seed/pack 由 opts 注入复现(§6.2)。 @@ -223,15 +224,16 @@ async function navToItem(game, itemId) { await tick(650); } -/** 完整听取一个条目(nav + tap + 等链播完)。 */ +/** 完整听取一个条目(nav + tap + 等链播完;资产缺失时 15s/句兜底 → 6 句 ≈95s 余量)。 */ async function listenItem(game, itemId) { await navToItem(game, itemId); g(game, 'tap'); - return waitState(() => game._play === null && game.state === 'BOARD', 80000); + return waitState(() => game._play === null && game.state === 'BOARD', 120000); } -/** CONFRONT 内选一句:滑到条目 → 单击进选句 → 滑到句 → 单击确认 → 单击定下。 */ -async function cfSelectLine(game, caseData, lineId) { +/** CONFRONT 内选一句:滑到条目 → 单击进选句 → 滑到句 → 单击确认 → 单击定下。 + * entryIdx 可选:R2 F7 选句位置记忆——进选句相位时断言起始 lineIdx。 */ +async function cfSelectLine(game, caseData, lineId, entryIdx) { const itemId = caseData.lineItem[lineId]; const target = LISTEN_ITEMS.indexOf(itemId); let guard = 0; @@ -243,6 +245,9 @@ async function cfSelectLine(game, caseData, lineId) { await tick(650); g(game, 'tap'); // 确认条目 → 进选句 await tick(300); + if (entryIdx != null) { + assert(game._cf?.lineIdx === entryIdx, `选句入口=记忆位 ${entryIdx}(实际 ${game._cf?.lineIdx},R2 F7)`); + } const ids = caseData.layout.lines[itemId]; const li = ids.indexOf(lineId); let lg = 0; @@ -252,30 +257,32 @@ async function cfSelectLine(game, caseData, lineId) { await tick(120); } g(game, 'tap'); // 进确认(重播该句 + cf_confirm) - await tick(17000); // 确认链(句 + cf_confirm)走完——玩家听清「就这句?」再定下 + await tick(32000); // 确认链(句 + cf_confirm)走完——玩家听清「就这句?」再定下(15s 兜底余量) g(game, 'tap'); // 定下这句 } /** 从 BOARD 空闲发起一次完整指证(长按进入 + 两侧选句),等判定链收尾回板。 * 长按带重试:E2 受理条件=无语音在播——播报尾音未排空时补一拍重试(与时长解耦)。 */ -async function confront(game, caseData, lineA, lineB, { maxMs = 90000 } = {}) { +async function confront(game, caseData, lineA, lineB, { maxMs = 120000, entryIdxA } = {}) { for (let attempt = 0; attempt < 3 && game.state !== 'CONFRONT'; attempt++) { g(game, 'longpress'); if (game.state !== 'CONFRONT') await tick(1500); } await waitState(() => game.state === 'CONFRONT' && game._cf && game._cf.phase === 'item1', 12000); - await tick(9000); // cf_start(缺失时 8s 兜底)→ 条目报名 - await cfSelectLine(game, caseData, lineA); - await tick(17500); // cf_second + 第一份自动重播(P1 记忆契约)走完 + await tick(16000); // cf_start(缺失时 15s 兜底)→ 条目报名 + await cfSelectLine(game, caseData, lineA, entryIdxA); + await tick(32000); // cf_second + 第一份自动重播(P1 记忆契约)走完 await cfSelectLine(game, caseData, lineB); return waitState(() => game.state === 'BOARD' && !game._play, maxMs); } -/** 从 BOARD 走到 FINISH(滑到结案陈词条目 + 单击)。 */ +/** 从 BOARD 走到 FINISH(滑到结案陈词条目 → 单击进确认闸(fin_pre)→ 闸内再单击进三问,R2 F5)。 */ async function enterFinish(game) { await navToItem(game, 'case'); g(game, 'tap'); await tick(200); + g(game, 'tap'); + await tick(200); } /** 快速跳过教学直达 BOARD(新案已开)。 */ @@ -318,10 +325,10 @@ async function scenario1() { let mark = audio.log.length; g(game, 'tap'); await waitState(() => game.state === 'DRILL' && game._drill && game._drill.step === 0, 20000); - await tick(36000); // sys_new_case + intro_1..3 + tut_d0 四句整链(缺失时 8s/句兜底) + await tick(80000); // sys_new_case + intro_1..3 + tut_d0 五句整链(缺失时 15s/句兜底) assert(game.run && game.run.seed === 42, 'opts.seed=42 注入新案'); assert(plays(audio, mark).orderOk('voice/sys_new_case', 'voice/intro_1', 'voice/intro_2', 'voice/intro_3', 'voice/tut_d0'), - 'D0 序:sys_new_case → intro_1/2/3 → tut_d0(资产缺失时整链仍经 8s 兜底推进——§4.3 契约)'); + 'D0 序:sys_new_case → intro_1/2/3 → tut_d0(资产缺失时整链仍经 15s 兜底推进——§4.3 契约)'); assert(plays(audio).has('bgm/board'), 'DRILL bgm/board'); // D0:左滑或右滑任一(首输入达成点) @@ -338,12 +345,17 @@ async function scenario1() { } // D1:单击 → 老葛真实证词链播(教学寄生于真实案卷) - await tick(9000); // tut_listen(兜底)+ 回正报名 + await tick(32000); // R2 F2:item_w2 报名落声 → tut_listen 串行接播 → 回正报名(互不掐) + { + const seg = plays(audio, mark); + assert(seg.orderOk('voice/item_w2', 'voice/tut_listen'), + 'R2 F2:D0 报名(item_w2)先于 D1 指令(tut_listen)串行落声(原并行互掐,live R1 实测指令只播 0.4s)'); + } mark = audio.log.length; g(game, 'tap'); assert(game._play !== null, 'D1 单击开始证词链播'); const w1Ids = game._case.layout.lines.w1; - const done1 = await waitState(() => game._drill && game._drill.step === 2, 80000); + const done1 = await waitState(() => game._drill && game._drill.step === 2, 120000); assert(done1, 'D1 证词链播完 → D2'); { const seg = plays(audio, mark); @@ -358,24 +370,24 @@ async function scenario1() { assert(game.run.heard.includes('w1'), 'D1 听完 w1 入账 heard(st_asked 真实来源)'); // D2:双击重新听最后一句(免费) - await tick(9000); // tut_replay + await tick(16000); // tut_replay mark = audio.log.length; const lastW1 = game.run.lastLine.w1; g(game, 'doubletap'); - await tick(9000); + await tick(16000); assert(plays(audio, mark).has('voice/' + lastW1), `D2 双击重播最后一句(${lastW1})`); assert(game._drill?.step === 3, 'D2 重播完 → D3'); // D3:上滑状态链(st_asked_1 → st_doubt_0 → recap_go) - await tick(9000); // tut_status + await tick(16000); // tut_status mark = audio.log.length; g(game, 'up'); - await waitState(() => game._drill?.step === 4, 45000); + await waitState(() => game._drill?.step === 4, 70000); assert(plays(audio, mark).orderOk('voice/st_asked_1', 'voice/st_doubt_0'), 'D3 状态链:st_asked_1 → st_doubt_0'); - assert(plays(audio, mark).has('voice/recap_go'), 'D3 状态链尾 recap_go'); + assert(plays(audio, mark).has('voice/recap_go'), 'D3 状态链尾 recap_go(未听齐时仍是「接着查」)'); // D4:长按进入指证(E2 豁免教学) - await tick(9000); // tut_confront + await tick(16000); // tut_confront mark = audio.log.length; g(game, 'longpress'); await tick(200); @@ -387,12 +399,12 @@ async function scenario1() { // D5:任意选择组合(选 w2 首句 vs scene 首句——真判定必 miss 的组合)只播 tut_cf_ok const before = { cfMiss: game.run.cfMiss, doubts: [...game.run.doubts], zHits: game.run.zHits }; - await tick(17000); // cf_start + tut_cf_try 链走完 → 条目报名 - await cfSelectLine(game, game._case, game._case.layout.lines.w2[0]); - await tick(17500); // cf_second + 自动重播 + await tick(32000); // cf_start + tut_cf_try 链走完 → 条目报名 + await cfSelectLine(game, game._case, game._case.layout.lines.w2[0], 0); // R2 F7:首访条目记忆位=0 + await tick(32000); // cf_second + 自动重播 mark = audio.log.length; const vib5 = vibrateLog.length; - await cfSelectLine(game, game._case, game._case.layout.lines.scene[0]); + await cfSelectLine(game, game._case, game._case.layout.lines.scene[0], 0); const done5 = await waitState(() => game.state === 'DRILL' && game._drill?.step === 6, 30000); assert(done5, 'D5 判定被教学截获 → 回 DRILL D6'); assert(plays(audio, mark).has('voice/tut_cf_ok'), 'D5 任意组合只播 tut_cf_ok(练习不算数)'); @@ -412,7 +424,7 @@ async function scenario1() { // 上滑随时可用(教过后) mark = audio.log.length; g(game, 'up'); - await tick(40000); + await tick(50000); assert(plays(audio, mark).orderOk('voice/st_asked_1', 'voice/st_doubt_0'), 'BOARD 上滑状态链随时可用'); game.stop(); @@ -425,7 +437,7 @@ async function scenario1() { await waitState(() => b.game.state === 'DRILL', 20000); mark = b.audio.log.length; g(b.game, 'down'); - await waitState(() => b.game.state === 'BOARD', 20000); + assert(await waitState(() => b.game.state === 'BOARD', 25000), '下滑跳过教学直达 BOARD'); assert(plays(b.audio, mark).has('voice/tut_skip'), '下滑跳过教学播 tut_skip'); assert(b.game.meta.drillDone === true, '跳过也置 drillDone'); b.game._save(); @@ -528,7 +540,7 @@ async function scenario4() { mark = audio.log.length; g(game, 'up'); - await tick(40000); + await tick(50000); assert(plays(audio, mark).has('voice/st_asked_1'), '听完 1 份 → 上滑 st_asked_1'); // w4:播放中双击=当前句重播、左右滑静默忽略、单击停止、断句续听 @@ -574,13 +586,15 @@ async function scenario4() { await tick(9000); assert(plays(audio, mark).has('voice/' + scCur), `打断后双击重听当前句(${scCur})`); - // 全部听齐 → st_asked_6 + // 全部听齐 → st_asked_6;R2 F6:尾句换指路 recap_cf(不再是干巴巴的「接着查」) for (const id of ['w1', 'w3', 'w4', 'fore', 'scene']) assert(await listenItem(game, id), `${id} 听取完成`); assert(game.run.heard.length === 6, '六份卷宗全部入账'); mark = audio.log.length; g(game, 'up'); - await tick(40000); + await tick(50000); assert(plays(audio, mark).has('voice/st_asked_6'), '六份听齐 → st_asked_6'); + assert(plays(audio, mark).has('voice/recap_cf') && !plays(audio, mark).has('voice/recap_go'), + 'R2 F6:听齐未破时状态链尾=recap_cf(「挑一句你不信的,按住指证」),不再播 recap_go'); game.stop(); } @@ -603,7 +617,7 @@ async function scenario5() { { const p = plays(audio, mark); assert(p.has('sfx/contra_hit') && p.has('voice/cf_hit') && p.has('voice/z_react_1'), - 'M1 hit 链:contra_hit → cf_hit → z_react_1(zHits=1 递进取句)'); + 'M1 hit 链:contra_hit → cf_hit → z_react_1(R2 F3:按轴取句 lamp→react_1)'); assert(p.orderOk('sfx/contra_hit', 'voice/cf_hit', 'voice/z_react_1'), 'M1 hit 链序:音先响、语音后接'); assert(p.orderOk('voice/cf_confirm', 'voice/cf_second', 'voice/z_2'), '第二份选择前自动重播第一份选定句(P1 记忆契约)'); } @@ -611,27 +625,30 @@ async function scenario5() { assert(game.run.doubts[0] === true && game.run.zHits === 1, 'M1 doubts[0] 置位 + zHits=1'); assert(game.run.cfMiss === 0, 'hit 不计 cfMiss(账目语义=冗余/错过)'); - // M2(key:z_3 vs w2_3) + // M2(key:z_3 vs w2_3)——R2 F7:w3 选句入口应记忆在 z_2(idx 1),不再从 z_1 扫起 mark = audio.log.length; - assert(await confront(game, cs, 'z_3', 'w2_3'), 'M2 指证完成'); - assert(plays(audio, mark).has('voice/z_react_2') && game.run.doubts[1] === true, 'M2 → z_react_2 + doubts[1]'); + assert(await confront(game, cs, 'z_3', 'w2_3', { entryIdxA: 1 }), 'M2 指证完成(选句入口=记忆位 1)'); + assert(plays(audio, mark).has('voice/z_react_2') && game.run.doubts[1] === true, 'M2 → z_react_2(key 轴)+ doubts[1]'); // M3/M4 共用 z_4(一句两断言,选 z_4 两次分别对 fo_3 与 sc_4) mark = audio.log.length; - assert(await confront(game, cs, 'z_4', 'fo_3'), 'M3 指证完成(z_4 vs fo_3)'); - assert(plays(audio, mark).has('voice/z_react_3') && game.run.doubts[2] === true, 'M3 → z_react_3 + doubts[2]'); + assert(await confront(game, cs, 'z_4', 'fo_3', { entryIdxA: 2 }), 'M3 指证完成(z_4 vs fo_3,入口=记忆位 2)'); + assert(plays(audio, mark).has('voice/z_react_w') && game.run.doubts[2] === true, + 'M3 → z_react_w(R2 F3:weapon 轴专属慌「铜器…我怎么会知道」,不再错配秤/灯)'); mark = audio.log.length; - assert(await confront(game, cs, 'z_4', 'sc_4'), 'M4 指证完成(z_4 vs sc_4,同一句两次)'); - assert(plays(audio, mark).has('voice/z_react_4') && game.run.doubts[3] === true, 'M4 → z_react_4 + doubts[3]'); + assert(await confront(game, cs, 'z_4', 'sc_4', { entryIdxA: 3 }), 'M4 指证完成(z_4 vs sc_4,同一句两次,入口=记忆位 3)'); + assert(plays(audio, mark).has('voice/z_react_3') && game.run.doubts[3] === true, 'M4 → z_react_3(scale 轴)+ doubts[3]'); - // 疑点 4/4:hit 链尾自动播一次 hint_fin(引导去结案) + // 疑点 4/4:hit 链尾追加 reactFinal 收官句 + 自动播一次 hint_fin(R2 F3) assert(game._doubtCount() === 4 && game.run.zHits === 4, '四疑点齐 + zHits=4'); - assert(plays(audio, mark).has('voice/hint_fin'), '4/4 齐时 hit 链尾播 hint_fin(一次)'); + assert(plays(audio, mark).orderOk('voice/z_react_3', 'voice/z_react_4', 'voice/hint_fin'), + '4/4 齐时链尾:轴句 → reactFinal(z_react_4 逐客)→ hint_fin(一次)'); assert(!game.run.hintsGiven.includes('hint_fin'), '庆祝性 hint_fin 不计入保底提示账(S 档可达)'); mark = audio.log.length; g(game, 'up'); - await tick(40000); + await tick(50000); assert(plays(audio, mark).has('voice/st_doubt_4'), '状态链 st_doubt_4(疑点实数)'); + assert(plays(audio, mark).has('voice/hint_fin'), 'R2 F6:疑点齐时状态链尾=hint_fin(去结案)'); // 长按豁免边界(§11 边界):播放中长按=引擎快进不进指证;空闲长按=CONFRONT await navToItem(game, 'w1'); @@ -645,14 +662,28 @@ async function scenario5() { g(game, 'longpress'); await tick(200); assert(game.state === 'CONFRONT', 'E2:空闲长按 → CONFRONT'); - // CONFRONT 长按 = error 震(选择语境不作输入) + // CONFRONT 条目相位长按 = error 震(选择语境不作输入) vib = vibrateLog.length; g(game, 'longpress'); await tick(200); - assert(vibratedError(vib) && game.state === 'CONFRONT', 'CONFRONT 长按 error 震不受理'); + assert(vibratedError(vib) && game.state === 'CONFRONT', 'CONFRONT 条目相位长按 error 震不受理'); + // R2 F7:选句相位长按放行引擎快进——语音在播不震;空闲无可快进=error 震 + await tick(16000); // cf_start + 报名落声 + g(game, 'tap'); // 确认当前条目 → 进选句(播 cf_pick_line + 入口句) + await tick(400); // 语音在播中 + vib = vibrateLog.length; + g(game, 'longpress'); + await tick(200); + assert(!vibratedError(vib) && game._cf && (game._cf.phase === 'line1' || game._cf.phase === 'line2'), + 'R2 F7:选句相位语音在播长按=引擎快进接管(无 error 震、相位不变)'); + await tick(2000); // 等落声(空闲) + vib = vibrateLog.length; + g(game, 'longpress'); + await tick(200); + assert(vibratedError(vib), 'R2 F7:选句相位空闲长按=error 震(无可快进)'); // 菜单「返回证词板」退出指证 g(game, 'down'); - await tick(10000); // sys_menu + 首项 + await tick(32000); // sys_menu + 首项 mark = audio.log.length; g(game, 'doubletap'); // 双击确认 sys_menu_resume(=返回证词板) await waitState(() => game.state === 'BOARD', 15000); @@ -724,22 +755,32 @@ async function scenario7() { } assert(game._doubtCount() === 4, '四疑点齐'); - // 错指小顺(optIdx 1)→ acc_shun + fin_clear → 回 BOARD(无限再机会) + // 错指小顺(optIdx 1)→ acc_shun + fin_clear + st_wrong → 回 BOARD(无限再机会) let mark = audio.log.length; + // R2 F5:结案确认闸——首击只播 fin_pre 不进 FINISH;滑走撤闸;闸内再击才进 + await navToItem(game, 'case'); + g(game, 'tap'); + await tick(200); + assert(game.state === 'BOARD' && game._caseGate === true && plays(audio, mark).has('voice/fin_pre'), + 'R2 F5:结案陈词首击=确认闸(fin_pre),仍 BOARD'); + g(game, 'left'); // 滑走撤闸 + await tick(200); + assert(game._caseGate === false && game.state === 'BOARD', 'R2 F5:滑走撤闸留板(继续查)'); await enterFinish(game); - assert(plays(audio, mark).has('voice/fin_start'), 'FINISH 入口播 fin_start'); + assert(plays(audio, mark).orderOk('voice/fin_pre', 'voice/fin_start'), '闸内再击 → FINISH(fin_pre → fin_start)'); await waitState(() => game._fin && game._fin.phase === 'who', 15000); mark = audio.log.length; g(game, 'right'); await tick(650); - assert(plays(audio, mark).has('voice/item_w2'), '真凶问右滑播选项名(item_w2)'); + assert(plays(audio, mark).has('voice/item_who_w2'), 'R2 F4:真凶问右滑播人名(item_who_w2「学徒小顺。」),不再念卷宗名'); g(game, 'tap'); - await tick(17500); // 两段确认链(重播选项名 + fin_who_confirm)走完 + await tick(32000); // 两段确认链(重播人名 + fin_who_confirm)走完 assert(game._fin?.phase === 'whoConfirm' && plays(audio, mark).has('voice/fin_who_confirm'), - '真凶问两段确认(重播选项名 + fin_who_confirm)'); + '真凶问两段确认(重播人名 + fin_who_confirm「就指认这位?」——R2 F4 中性化)'); g(game, 'tap'); - assert(await waitState(() => game.state === 'BOARD', 30000), '错指 → 回 BOARD'); - assert(plays(audio, mark).orderOk('voice/acc_shun', 'voice/fin_clear'), '错指链:acc_shun(不在场证明自述)→ fin_clear'); + assert(await waitState(() => game.state === 'BOARD', 60000), '错指 → 回 BOARD'); + assert(plays(audio, mark).orderOk('voice/acc_shun', 'voice/fin_clear', 'voice/st_wrong'), + '错指链:acc_shun(不在场证明自述)→ fin_clear → st_wrong(R2 F9 当场记账)'); assert(game.run.wrongWho === 1, 'wrongWho 计数'); // 错指老葛(optIdx 0,无需滑动)→ acc_ge(无限再机会) @@ -749,7 +790,7 @@ async function scenario7() { g(game, 'tap'); await tick(200); g(game, 'tap'); - assert(await waitState(() => game.state === 'BOARD', 30000), '再错指仍回 BOARD(无限再机会)'); + assert(await waitState(() => game.state === 'BOARD', 60000), '再错指仍回 BOARD(无限再机会)'); assert(plays(audio, mark).has('voice/acc_ge'), '错指老葛 → acc_ge'); assert(game.run.wrongWho === 2, 'wrongWho=2'); @@ -765,14 +806,14 @@ async function scenario7() { g(game, 'right'); g(game, 'right'); await tick(650); - assert(plays(audio, mark).has('voice/item_w3'), '滑到周先生(item_w3)'); + assert(plays(audio, mark).has('voice/item_who_w3'), '滑到周先生(item_who_w3,R2 F4 人名)'); mark = audio.log.length; g(game, 'tap'); await tick(200); g(game, 'tap'); // 正式指认 - assert(await waitState(() => game._fin && game._fin.phase === 'weapon', 25000), '指认对 → 凶器问'); + assert(await waitState(() => game._fin && game._fin.phase === 'weapon', 45000), '指认对 → 凶器问'); assert(plays(audio, mark).has('voice/fin_ask_weapon'), '凶器问入口 fin_ask_weapon'); - await tick(10000); // 问句链 + busy 解除 + 首选项报名落声 + await tick(17000); // 问句链 + busy 解除 + 首选项报名落声 // 凶器 4 选项全可预览(左右滑一次听一项,选项序=layout.wpOpts) for (let i = 0; i < 4; i++) { g(game, 'right'); await tick(300); } { @@ -785,17 +826,17 @@ async function scenario7() { for (let i = 0; i < wpIdx; i++) g(game, 'right'); await tick(300); g(game, 'tap'); - assert(await waitState(() => game._fin && game._fin.phase === 'motive', 25000), '凶器答完 → 动机问'); + assert(await waitState(() => game._fin && game._fin.phase === 'motive', 45000), '凶器答完 → 动机问'); assert(plays(audio).has('voice/fin_wp_right') && !plays(audio).has('voice/fin_wp_wrong'), '答对凶器播 fin_wp_right'); assert(game.run.weaponAns === 'wp_2', 'weaponAns 入账'); - await tick(10000); // 问句链 + busy 解除 + await tick(17000); // 问句链 + busy 解除 // 动机答错 mv_2 → fin_mv_wrong(真话归因,不重答)→ VERDICT const mvIdx = cs.layout.mvOpts.indexOf('mv_2'); for (let i = 0; i < mvIdx; i++) g(game, 'right'); await tick(300); mark = audio.log.length; g(game, 'tap'); - assert(await waitState(() => game.state === 'VERDICT', 25000), '动机答完 → VERDICT'); + assert(await waitState(() => game.state === 'VERDICT', 45000), '动机答完 → VERDICT'); assert(plays(audio, mark).has('voice/fin_mv_wrong'), '动机答错播 fin_mv_wrong(不重答,记账)'); // ---- 场景 8:VERDICT 死窗 + 链锁(§7.4:dungeon H1 同款) ---- @@ -810,7 +851,7 @@ async function scenario7() { g(game, 'right'); g(game, 'longpress'); assert(game.state === 'VERDICT', '链内上滑/下滑/双击/右滑/长按全部吞掉(链锁)'); - const settleDone = await waitState(() => game.state === 'SETTLE', 140000); + const settleDone = await waitState(() => game.state === 'SETTLE', 220000); assert(settleDone, 'VERDICT 全链播完 → SETTLE'); const p = plays(audio, mark); assert(p.orderOk('voice/fin_right', 'voice/z_break_1', 'voice/z_break_2', 'voice/z_break_3', 'sfx/gavel'), @@ -899,6 +940,12 @@ async function scenario10() { await tick(10000); g(a.game, 'doubletap'); await waitState(() => a.game.state === 'BOARD', 15000); + // R2 F6:六份听齐且疑点未齐时,BOARD 一级提示换 gd_board_cf + a.game.run.heard = [...LISTEN_ITEMS]; // 测试钩子:六份听齐(真实路径由场景 4 覆盖) + g(a.game, 'right'); // 手势触发重挂(一级提示词按局面重取) + await tick(11000); + assert(plays(a.audio, mark).has('voice/gd_board_cf'), 'R2 F6:听齐未破时 BOARD 一级=gd_board_cf(不再教「换卷宗」)'); + a.game.run.heard = []; // 还原,免污染后续断言 // FINISH 20s await enterFinish(a.game); await waitState(() => a.game._fin && a.game._fin.phase === 'who', 15000); @@ -1017,14 +1064,14 @@ async function scenario11() { assert(a2.game.run.seed === 55 && a2.game.run.pack === 0, '读档还原 (seed,pack)'); assert(JSON.stringify(a2.game._case.layout) === JSON.stringify(a1.game._case.layout), '读档 layout 复用存档值(不重洗)'); const p = plays(a2.audio, mark); - await tick(58000); // 复述链 6 句(缺失时 8s/句兜底)整链走完 + await tick(100000); // 复述链 6 句(缺失时 15s/句兜底)整链走完 const pAfter = plays(a2.audio, mark); assert(pAfter.orderOk('voice/st_asked_3', 'voice/item_w2', 'voice/item_w3', 'voice/item_w4', 'voice/st_doubt_0', 'voice/recap_go'), - '复述链序:st_asked_3 → 未听 3 名直报(item_w2/w3/w4)→ st_doubt_0 → recap_go'); + '复述链序:st_asked_3 → 未听 3 名直报(item_w2/w3/w4)→ st_doubt_0 → recap_go(未听齐时尾句不变)'); assert(a2.game.run.heard.length === 3, 'heard 还原 3 份'); mark = a2.audio.log.length; g(a2.game, 'up'); - await tick(58000); + await tick(100000); assert(plays(a2.audio, mark).orderOk('voice/st_asked_3', 'voice/item_w2', 'voice/st_doubt_0'), '上滑同链可重放(中断复述链=状态链同构)'); a2.game.stop(); @@ -1079,9 +1126,9 @@ async function scenario12() { g(game, 'tap'); await tick(200); g(game, 'tap'); - assert(await waitState(() => game.state === 'BOARD', 30000), '错指周回 BOARD'); - assert(plays(audio, mark).has('voice/acc_zhou') && plays(audio, mark).has('voice/fin_clear'), - '错指周先生 → acc_zhou(不在场证明)+ fin_clear'); + assert(await waitState(() => game.state === 'BOARD', 60000), '错指周回 BOARD'); + assert(plays(audio, mark).orderOk('voice/acc_zhou', 'voice/fin_clear', 'voice/st_wrong'), + '错指周先生 → acc_zhou(不在场证明)+ fin_clear + st_wrong 记账(R2 F9)'); // 保底提示 = b_hint_c1/c2(m1b 已发现 → 轮询到 m4b) game.run.doubts = [true, false, false, false]; // 钩子:仅 m1b 已发现(真实路径同上) @@ -1098,21 +1145,21 @@ async function scenario12() { g(game, 'tap'); await tick(200); g(game, 'tap'); - assert(await waitState(() => game._fin && game._fin.phase === 'weapon', 25000), '指认小顺 → 凶器问'); - await tick(10000); // 问句链 + busy 解除 + assert(await waitState(() => game._fin && game._fin.phase === 'weapon', 45000), '指认小顺 → 凶器问'); + await tick(17000); // 问句链 + busy 解除 const wpIdx = cs.layout.wpOpts.indexOf('wp_2'); for (let i = 0; i < wpIdx; i++) g(game, 'right'); await tick(300); g(game, 'tap'); - assert(await waitState(() => game._fin && game._fin.phase === 'motive', 25000), '凶器对 → 动机问'); - await tick(10000); // 问句链 + busy 解除 + assert(await waitState(() => game._fin && game._fin.phase === 'motive', 45000), '凶器对 → 动机问'); + await tick(17000); // 问句链 + busy 解除 const mvIdx = cs.layout.mvOpts.indexOf('mv_1'); for (let i = 0; i < mvIdx; i++) g(game, 'right'); await tick(300); mark = audio.log.length; g(game, 'tap'); - assert(await waitState(() => game.state === 'VERDICT', 25000), '三问齐 → VERDICT'); - assert(await waitState(() => game.state === 'SETTLE', 140000), '结算链完整(链锁)'); + assert(await waitState(() => game.state === 'VERDICT', 45000), '三问齐 → VERDICT'); + assert(await waitState(() => game.state === 'SETTLE', 220000), '结算链完整(链锁)'); const p = plays(audio, mark); assert(p.orderOk('voice/fin_right_b', 'voice/b_shun_break_1', 'voice/b_shun_break_2', 'voice/b_shun_break_3', 'sfx/gavel'), 'pack B 认罪链:fin_right_b → b_shun_break_1..3 → gavel'); @@ -1164,14 +1211,14 @@ async function scenario14() { let mark = audio.log.length; g(game, 'down'); - await tick(10000); // sys_menu + 首项(兜底) + await tick(32000); // sys_menu + 首项(15s/句兜底余量) assert(game.menuOpen, '下滑呼出模态菜单'); const p0 = plays(audio, mark); assert(p0.has('voice/sys_menu') && p0.has('voice/sys_menu_resume'), '菜单开场:sys_menu + 首项 resume'); // 帮助(上滑) mark = audio.log.length; g(game, 'up'); - await tick(20000); + await tick(32000); assert(plays(audio, mark).orderOk('voice/sys_help', 'voice/settings_hint'), '菜单上滑=帮助链(sys_help + settings_hint)'); // 循环切项:单击 resume→cf→save→help→restart→resume(5 项循环回绕) mark = audio.log.length; @@ -1185,11 +1232,11 @@ async function scenario14() { await tick(300); mark = audio.log.length; g(game, 'doubletap'); - assert(await waitState(() => game.state === 'CONFRONT', 15000), '菜单「去指证」进 CONFRONT'); + assert(await waitState(() => game.state === 'CONFRONT', 25000), '菜单「去指证」进 CONFRONT'); assert(plays(audio, mark).has('voice/cf_start'), '去指证 = 长按同效(cf_start 同点)'); // 「返回证词板」退出 g(game, 'down'); - await tick(10000); + await tick(32000); mark = audio.log.length; g(game, 'doubletap'); // resume(=返回证词板) assert(await waitState(() => game.state === 'BOARD', 15000), '菜单「返回证词板」关闭回板'); @@ -1197,14 +1244,14 @@ async function scenario14() { // 保存并回大厅:PUT data.summary 命中生成规则 const fetch0 = fetchLog.length; g(game, 'down'); - await tick(10000); // 开菜单(idx=0 resume) + await tick(32000); // 开菜单(idx=0 resume) g(game, 'tap'); // → cf await tick(300); g(game, 'tap'); // → save await tick(300); mark = audio.log.length; g(game, 'doubletap'); // 确认保存 - assert(await waitState(() => plays(audio, mark).has('voice/sys_saved'), 15000), '确认保存播 sys_saved'); + assert(await waitState(() => plays(audio, mark).has('voice/sys_saved'), 25000), '确认保存播 sys_saved'); const put = fetchLog.slice(fetch0).find((f) => f.url === '/api/progress' && f.opts && f.opts.method === 'PUT'); assert(put, '保存触发 PUT /api/progress'); if (put) { @@ -1240,7 +1287,7 @@ function assetReport() { } else { ok('voice 双性别目录未落盘(资产 agent 并行生产中)'); } - ok(`运行期引用 id 共 ${allIds.size} 个,其中缺失 ${missing.size} 个${missing.size ? '(每句 8s 兜底全链推进,流程未卡死——§4.3 契约)' : ''}`); + ok(`运行期引用 id 共 ${allIds.size} 个,其中缺失 ${missing.size} 个${missing.size ? '(每句 15s 兜底全链推进,流程未卡死——§4.3 契约)' : ''}`); } // ================================ 主流程 ================================ diff --git a/web/harness/sessions/detective.mjs b/web/harness/sessions/detective.mjs index e9d13e03..ab894494 100644 --- a/web/harness/sessions/detective.mjs +++ b/web/harness/sessions/detective.mjs @@ -142,10 +142,12 @@ async function confront(ctx, mock, game, lineA, lineB, noteA, noteB) { await waitStep(ctx, mock, () => game.state === 'BOARD' && !game._play, 95000); } -/** 从证词板走到结案陈词并单击进 FINISH。 */ +/** 从证词板走到结案陈词并单击进 FINISH(R2 F5:先过确认闸 fin_pre,闸内再单击才进三问)。 */ async function enterFinish(ctx, mock, game) { await navToItem(ctx, game, 'case'); - ctx.note('翻到结案陈词——单击,进入结案三问'); + ctx.note('翻到结案陈词——单击过确认闸(「就此结案?」),再单击进三问'); + await ctx.gesture('tap'); + await ctx.waitVirtual(3000); // fin_pre 闸句落声 await ctx.gesture('tap'); await waitStep(ctx, mock, () => game.state === 'FINISH', 12000); } diff --git a/web/harness/voice_text.json b/web/harness/voice_text.json index 7b3366ac..5369e69a 100644 --- a/web/harness/voice_text.json +++ b/web/harness/voice_text.json @@ -759,7 +759,7 @@ "gd_ping2": "回波不会自己来。单击。", "sys_help": "单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。", "sys_menu": "菜单。单击切换选项,双击确认。", - "sys_skip": "想跳过这句,单击就行。", + "sys_skip": "听过的句子再播时,单击就能跳过。", "sys_continue_ask": "检测到你的下潜记录。单击继续上次,右滑开始新救援。", "gd_invalid": "这个手势,水里用不上。", "gd_prog1": "滑动在这里用不上。想想调度刚说的话。", @@ -773,10 +773,16 @@ "prog_d2": "现在是第二次下潜。", "prog_d3": "现在是第三次下潜。", "prog_d4": "现在是最后一次下潜。", + "prog_saved1": "已经救上一个人。", + "prog_saved2": "已经救上两个人。", + "prog_saved3": "已经救上三个人。", + "prog_saved4": "已经救上四个人。", + "prog_saved5": "五个人都在甲板上了。", "oxy_full": "气瓶还足,救得动。", "oxy_ok": "氧气还够两潜。", "oxy_low": "氧气告急,只够最后一潜。", "oxy_crit": "氧气见底,必须上浮。", + "oxy_crit_deck": "氧气见底,一潜都下不去了。", "oxy_gain": "应急瓶接上了,多三格。", "dry_a": "气瓶用干了。立刻上浮。", "dry_b": "气花在了人身上。人,都上来了。", @@ -811,6 +817,7 @@ "d3_surf": "病舱的人出水。海燕号的呻吟,隔着水都听得见。", "dv4_none": "气不够一潜了。第四潜,取消。", "dv4_down": "最后一潜,指挥舱。海燕号,撑不住了。", + "dv4_dual": "两个人下同一潜。这趟往返,扣四格气。", "dv4_slide": "它滑了!抓稳索缆,指挥舱里还有人!", "p7": "双人上浮。向左滑,逐站减压慢慢浮。向右滑,违规直浮,搏一把。", "p7_chen": "气只够带一个。向左滑,带船长。向右滑,带陈医官。", @@ -883,7 +890,7 @@ "tut_cf_try": "练习一次。选一份证词,单击确认;再选一份,任意一句。", "tut_cf_ok": "指证就是这样。练习不算数,真矛盾要靠耳朵找。", "tut_done": "教学完了。开始查案。", - "tut_skip": "已跳过教学。左右滑换卷宗,单击听取。", + "tut_skip": "已跳过教学。左右滑换卷宗,单击听取;按住屏幕,指证矛盾。", "st_asked_0": "六份卷宗,一份都没听。", "st_asked_1": "已听一份,还有五份。", "st_asked_2": "已听两份,还有四份。", @@ -919,7 +926,13 @@ "cf_diff": "这两句,说的不是一件事。", "cf_hit": "对不上!矛盾成立,记入疑点。", "fin_start": "结案陈词。先指认真凶:四位证人,选一个。", - "fin_who_confirm": "就指认他?单击,定下来。", + "fin_pre": "证据在手,就此结案?单击,定下来;滑走,继续查。", + "item_who_w1": "门卫老葛。", + "item_who_w2": "学徒小顺。", + "item_who_w3": "账房周先生。", + "item_who_w4": "房东温太太。", + "st_wrong": "错指一回,记档。", + "fin_who_confirm": "就指认这位?单击,定下来。", "fin_clear": "不在场证明成立。证据放人,回到证词板。", "fin_right": "证据链闭合。周先生,你还有什么话说?", "fin_right_b": "证据链闭合。小顺,你还有什么话说?", @@ -946,6 +959,7 @@ "st_miss_2": "指证,错了不少。", "settle_hook": "同一场雨里,还有别的案子。单击,接新案。", "gd_board": "还在证词板。左右滑,换卷宗。", + "gd_board_cf": "都听过了。按住屏幕,去指证。", "gd_cf": "还在选证词。左右滑,单击确认。", "gd_fin": "在想?左右滑选,单击定。", "gd_invalid": "这个操作,这里用不上。", @@ -957,6 +971,7 @@ "b_hint_c2": "试试指证:小顺说铜秤卖了,现场铜秤还在。", "hint_fin": "疑点齐了。去结案陈词。", "recap_go": "接着查。", + "recap_cf": "卷宗都在耳朵里了。挑一句你不信的,按住指证。", "w1_1": "昨儿夜里雨大,我守着街门,一步没敢挪窝。", "w1_2": "九点四十,雨点子刚砸下来,小顺打着伞出的街门。", "w1_3": "十点一刻,一位先生收着黑伞进了后巷。个儿高,微驼背。", @@ -989,6 +1004,7 @@ "z_react_1": "灯?……许是我记岔了。人上了岁数,记性不济。", "z_react_2": "钥匙的事……他、他有时候,也贴身带着的……", "z_react_3": "秤!秤的事,你们别再问了……", + "z_react_w": "铜器?……我那是顺口猜的。凶器的事,我怎么会知道。", "z_react_4": "……随你们怎么问。我要回去了。", "acc_zhou": "我十点就到家了!我家婆娘能作证!", "z_break_1": "别念了……我说。库房短的三件货,是我抵了赌债。", @@ -1010,6 +1026,92 @@ "fo_4": "死者双手干净,没有搏斗痕迹。", "fo_5": "鞋底是干的。当夜,死者没出过后门。" }, + "hunt": { + "intro_1": "夜幕降临,野兽在山林里游荡。", + "intro_2": "你们是守夜的猎人,营地就在身后。", + "room_wait": "房间已开好,等同伴到齐。单击,立即开局。", + "room_start": "狩猎开始,先听声音的方向。", + "tut_rule": "野兽会从八个方向围上来。声音在哪边,就往哪边滑。", + "tut_attack": "听,有狼在靠近。朝声音的方向,滑一下。", + "tut_kill_ok": "好,杀掉了。就是这样。", + "tut_callout": "单击一下,呼喊支援,队友会来帮你。", + "tut_callout_ok": "听到没,同伴回应你了。", + "tut_skill": "双击,旋风斩,清掉身边一圈。", + "tut_skill_cd": "旋风斩有八秒冷却。冷却中双击,重新听威胁。", + "tut_status": "上滑,听营地状态。下滑,打开菜单。", + "tut_breach": "野兽冲进营地,营地就会受损。撑过五波就赢。", + "tut_done": "教学完了。真正的围猎,现在开始。", + "tut_skip": "已跳过教学,开打。", + "wave_band1": "第一波来了,别慌。", + "wave_band2": "第二波,比刚才多。", + "wave_band3": "第三波,有大家伙混在里面。", + "wave_band4": "第四波,更快,更多。", + "wave_band5": "最后一波,全来了!", + "wave_clear": "这一波,守住了。", + "hp_band1": "营地固若金汤。", + "hp_band2": "营地受了些损伤。", + "hp_band3": "营地损毁过半。", + "hp_band4": "营地快守不住了。", + "st_wave_a": "还在头几波。", + "st_wave_b": "打到中段了。", + "st_wave_c": "最后一波了。", + "team_3": "三名猎人在守。", + "team_4": "四名猎人全在。", + "kill_band0": "你还没开张。", + "kill_band1": "你小有斩获。", + "kill_band2": "你战果累累。", + "threat_none": "近处暂时没有野兽。", + "threat_few": "有野兽贴近了,听方向出手。", + "threat_many": "四周全是动静,快出手!", + "breach": "有野兽冲进营地了!", + "breach_heavy": "巨兽撞进营地,损伤很重!", + "danger_low": "营地危险了,一只都不能再漏!", + "skill_ready": "旋风斩准备好了。", + "end_win": "天亮了,营地还在。", + "end_lose": "营地守不住了,撤退!", + "grade_s": "评级,S!完美的围猎。", + "grade_a": "评级,A。漂亮。", + "grade_b": "评级,B。守得还行。", + "grade_c": "评级,C。险胜。", + "end_rank": "成绩已记入猎手榜。", + "end_again": "单击,再猎一局。", + "net_lost": "与营地断了联系,正在重连。", + "net_back": "联系恢复了,接着打。", + "net_to_bot": "有猎人离队,老猎手顶上。", + "net_gone": "回不去那场围猎了,回大厅。", + "sys_menu": "菜单。单击切换,双击确认。", + "sys_menu_resume": "回到猎场。", + "sys_menu_help": "重新听帮助。", + "sys_menu_home": "退出房间,回大厅。", + "help_main": "朝声音的方向滑,就是出击。单击呼喊支援,双击旋风斩。上滑状态,下滑菜单。", + "settings_hint": "音色、语速、背景音乐,请回大厅修改。", + "gd_invalid": "这个操作现在用不上。", + "gd_idle": "听声音的方向,滑过去。", + "npc_yan_greet": "我来了,这边有我。", + "npc_yan_help_call": "我这侧吃紧,来个人搭把手!", + "npc_yan_help_ack": "撑住,我来了。", + "npc_yan_cover": "这边交给我。", + "npc_yan_kill": "拿下!", + "npc_yan_breach": "漏了一个,都小心。", + "npc_yan_skill": "都闪开,看我的!", + "npc_yan_wave": "新一波,稳住。", + "npc_zheng_greet": "小筝到位,开工啦。", + "npc_zheng_help_call": "这边太多了,谁来帮一下!", + "npc_zheng_help_ack": "别慌,我来了!", + "npc_zheng_cover": "这边我罩着。", + "npc_zheng_kill": "搞定!", + "npc_zheng_breach": "哎呀,漏了一个!", + "npc_zheng_skill": "看我清场!", + "npc_zheng_wave": "又来一波,打起精神。", + "npc_zhou_greet": "老周我守着,放心。", + "npc_zhou_help_call": "我这边压不住了,来人。", + "npc_zhou_help_ack": "听见了,这就到。", + "npc_zhou_cover": "这边交给我吧。", + "npc_zhou_kill": "嗯,解决了。", + "npc_zhou_breach": "啧,溜进去一只。", + "npc_zhou_skill": "让让,老骨头活动活动。", + "npc_zhou_wave": "听,又来了。" + }, "__key__": { "storyline": { "help": "操作说明。按空格:继续剧情。按回车:重听刚才的台词。按上方向键:听这段说明和当前进度。按下方向键:呼出菜单,菜单里可以重新开始。当旁白说“请选择”的时候,按左方向键或者按右方向键,做出你的决定。选择无法撤销。", @@ -1199,7 +1301,7 @@ "gd_ping2": "回波不会自己来。按空格。", "sys_help": "空格继续,回车重新听。上箭头听状态,下箭头开菜单。选择时,左右箭头。", "sys_menu": "菜单。空格切换选项,回车确认。", - "sys_skip": "想跳过这句,按空格。", + "sys_skip": "听过的句子再播时,按空格跳过。", "sys_continue_ask": "检测到你的下潜记录。空格继续上次,右箭头开始新救援。", "dv1_teach": "到深度了。声呐静了。按空格,发一枚脉冲。", "p1": "管路在响。左箭头,停下来听敲管的暗号。右箭头,先带小舟上浮。" @@ -1214,7 +1316,24 @@ "gd_cf": "还在选证词。左右方向键,空格确认。", "cf_pick_line": "左右方向键,一句一句听。", "cf_confirm": "就这句?空格,定下来。", - "settle_hook": "同一场雨里,还有别的案子。按空格,接新案。" + "settle_hook": "同一场雨里,还有别的案子。按空格,接新案。", + "fin_pre": "证据在手,就此结案?空格,定下来;方向键,继续查。", + "fin_who_confirm": "就指认这位?空格,定下来。", + "recap_cf": "卷宗都在耳朵里了。挑一句你不信的,按住空格指证。", + "gd_board_cf": "都听过了。按住空格,去指证。" + }, + "hunt": { + "room_wait": "房间已开好,等同伴到齐。按空格,立即开局。", + "tut_rule": "野兽会从八个方向围上来。声音在哪边,就按哪边方向键。", + "tut_attack": "听,有狼在靠近。朝声音的方向,按方向键。", + "tut_callout": "按空格,呼喊支援,队友会来帮你。", + "tut_skill": "按回车,旋风斩,清掉身边一圈。", + "tut_skill_cd": "旋风斩有八秒冷却。冷却中按回车,重新听威胁。", + "tut_status": "按上方向键,听营地状态。按下方向键,打开菜单。", + "sys_menu": "菜单。按空格切换,按回车确认。", + "help_main": "朝声音的方向按方向键,就是出击。按空格呼喊支援,按回车旋风斩。上方向键状态,下方向键菜单。", + "end_again": "按空格,再猎一局。", + "gd_idle": "听声音的方向,按方向键。" } } } \ No newline at end of file