diff --git a/.gitignore b/.gitignore index fd1ce0cb..0cfab4cb 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,5 @@ web/detective/gen/staging/ tools/bgm_post_wav/ __pycache__/ web/teahouse/gen/staging/ +tools/gen_rhythm_syn_wav/ +tools/gen_space_syn_wav/ diff --git a/docs/design/04-space-rebuild.md b/docs/design/04-space-rebuild.md index 8a4916d0..df647c34 100644 --- a/docs/design/04-space-rebuild.md +++ b/docs/design/04-space-rebuild.md @@ -110,3 +110,48 @@ 6. 语音全部整句重录:演练 8 句、保护期 3 句、单击/双击引入 4 句、归因 5 句、结算 10 句(时间段 4 + 躲避段 4 + 新纪录 + 重开)、里程碑 5 句 ≈ 35 句 × 2 音色。删除全部 num 拼接件。 7. 教学语音与 whoosh 的时序:语音 onComplete 后再 spawn 演练陨石,保证不叠放。 8. 更新 `web/space/README.md` 手势表(同向闪避是玩家可见的最大变化,README 必须同步)。 + +--- + +## 修订记录 R5(space polish:刺耳 + 状态/动作反馈盲区,research/space-polish/) + +取证(round1):live 两会话(research/space-polish/round1/live-{A,B}-transcript.md)+ +4 人设评审(同目录 p1-blind/p2-student/p3-office/p4-worker)+ 全 sfx 客观频谱 +(同目录 sfx-spectrum-analysis.txt)。核心事实: + +1. **刺耳(客观)**:alarm 每颗陨石响两遍且 ≥3kHz 能量 82.3%/≥5kHz 63.9%/峰值 16kHz; + dodge 真峰值 -2.30dBFS + 63.6%≥3kHz;shield_block -2.60+52.2%;boost -2.70+53.0%; + shield -2.90 超标。四件最高暴露音效全部违反 one-shot 标准(≤-3dBFS)。 +2. **保护期结束死亡窗(P0,live A t+151-163 与 t+300-310 两轮复现)**:裸飞期逼近 4.0s + = 刷怪 4.0s,每颗撞击与下一颗 spawn 同窗——呼喊维持生存优先(顶断归因)的代价是 + hit_left/hit_down **零毫秒被杀**,玩家 8 秒三连撞至死不知方位;protect_end 亦被顶得 + 只剩 0.5-3.5s。 +3. **保护期 protect_* 七连截断**:6.96s 教学句对 4.0s 刷怪间隔,每句播 4.0s 就被 + 下一句顶断(live A 7 连 TRUNCATED),信息重复又残缺。 +4. **动作反馈盲区**:加速冷却中单击全静默(护盾拒绝有回音、加速没有——归因真话不均); + 挥空/滑错方向与成功闪避同静默(dodge 音只在判定时才响);boost/shield 激活无 + CONFIRM 震(§5 承诺未兑现)。 + +R5 裁定与实现(逐条对应 playtest.mjs 新断言): + +- **R5-1 刺耳重合成**:alarm/dodge/shield_block/boost/shield 五件程序合成重制 + (`tools/gen_space_syn.py`,低谐波设计:alarm 双音 700/560Hz、dodge 中频气声扫频, + 真峰值 ≤-3.4dBFS、编码后 ≥3kHz 能量 0%,解码回读校验)。SA3 非必需,程序合成达标。 + 新增 `sfx/whiff`(挥空轻叹,0.55 音量)。 +- **R5-2 归因真话·防顶断 replay**:呼喊生存优先裁定**不变**(呼喊照常同窗直出、照常 + 顶断归因);但 hit_/protect_end 起播经 `_defendVoice` 登记,被顶断时登记残留, + 呼喊播完的 onComplete 走 `_replayDefended` queue 接 replay(不顶新威胁信息), + 保证每句归因/保护结束宣告完整送达至少一次;归因 replay 播完仍接 hit_last(先因后果)。 +- **R5-3 protect_* 去重**:上一句 protect_ 在播时新吸收只发 shield_block 音 + + WARNING 震、跳过语音,每句教学完整播完(不再 7 连截断同一句开头)。 +- **R5-4 加速冷却拒绝**:`_deny(now, voiceId)` 共用 4s 去抖(护盾拒绝同路径、原句 + feat_shield_done 不变);加速冷却单击 → HEARTBEAT 震 + 新句 `boost_not_ready` + 「引擎还在冷却,稍等一下。」。 +- **R5-5 protect_soon**:开局第 50s 播报「训练护盾还剩十秒。」(queue 不顶句; + 菜单/分批引入打断由 _rearmRunTimers 补播),给反应慢的玩家 10s 提前量。 +- **R5-6 激活确认**:boost/shield 激活(对局期与 feature 期)补 CONFIRM 震(兑现 §5)。 +- **R5-7 挥空反馈**:playing 期滑向无悬置陨石的方向 → `sfx/whiff` 轻叹(引擎 swipe + 震动已有"收到",whiff 补"无用"),与 dodge 成功音形成对偶。 +- **状态查询手势**:维持 00 §5 豁免表裁定(四向滑=闪避,space 无对局期 status key; + 坠毁结算后上滑=重听教学要点)。状态透明全部由事件反馈句承担(本 R5 已补齐 + 保护期倒计时/冷却拒绝/归因可达性),不新增手势。 diff --git a/docs/design/04-space-voice-ids.md b/docs/design/04-space-voice-ids.md index 38f2ee68..f5963808 100644 --- a/docs/design/04-space-voice-ids.md +++ b/docs/design/04-space-voice-ids.md @@ -145,3 +145,16 @@ web/engine/gesture.js inputMode())时,引擎 voice 候选链前置加载 | `help_recap` | 左边来按左方向键,右边来按右方向键,上面来按上方向键,下面来按下方向键。按空格加速,按回车护盾。 | | `skip_hint` | 按空格可跳过旁白。 | | `gd_hit_hint` | 被撞了。听方位,按对应方向键就能拨开。 | + +--- + +## R5 追加 · space polish 轮新增(2 句 × 2 性别 = 4 条;取证依据 research/space-polish/round1/) + +> 本轮(R5)只追加,不改上方任何旧表。instruct 沿用全表 `_SPC` 常量(两性别同游戏同 instruct,00 文档 §3.2)。 +> 台词已同步 `tools/gen_voice_dual.py` 的 SPACE_LINES(两表一致铁律)与 `web/harness/voice_text.json` 的 space 键。 +> 无键盘变体:两句均不含操作词(space 键盘变体表 24 句不增)。 + +| id | 台词全文 | 触发 | +|---|---|---| +| `protect_soon` | 训练护盾还剩十秒。 | 开局第 50s(保护期剩 10s 预告;queue 不顶句,被菜单/分批引入打断由 _rearmRunTimers 补播) | +| `boost_not_ready` | 引擎还在冷却,稍等一下。 | 加速冷却中单击(R5 归因真话:拒绝必须有回音,此前冷却单击全静默);与护盾拒绝共用 4s 去抖 | diff --git a/research/04-playtests/transcripts/space.md b/research/04-playtests/transcripts/space.md index 324529d8..b7097bac 100644 --- a/research/04-playtests/transcripts/space.md +++ b/research/04-playtests/transcripts/space.md @@ -9,7 +9,8 @@ t+ 2.1s ▶ 语音:「单击可跳过旁白。」 t+ 4.2s ▶ 语音:「陨石来了,会有声音告诉你方位。」 t+ 6.4s ▶ 语音:「听,左边有陨石。向左滑,把它拨开!」 t+ 8.5s ♪ 音效 sfx/whoosh_left -t+ 8.5s 【状态】演练 1/4:左侧有陨石 演练:左边有陨石在逼近,左边滑把它拨开(无 BGM,语速1) +t+ 8.5s ▶ 语音:「左!」 +t+ 8.5s 【状态】演练 1/4:左侧有陨石 演练:左边有陨石在逼近,左边滑把它拨开(语音播放中,语速1) #### 【玩家动作】逼近音一响,同向滑开 @@ -17,20 +18,23 @@ t+ 8.5s ♪ 音效 sfx/dodge t+ 8.5s ▶ 语音:「漂亮。」 t+ 10.6s ▶ 语音:「这次在右边。向右滑!」 t+ 12.7s ♪ 音效 sfx/whoosh_right -t+ 12.7s 【状态】演练 2/4:右侧有陨石 演练:右边有陨石在逼近,右边滑把它拨开(无 BGM,语速1) +t+ 12.7s ▶ 语音:「右!」 +t+ 12.7s 【状态】演练 2/4:右侧有陨石 演练:右边有陨石在逼近,右边滑把它拨开(语音播放中,语速1) #### 【玩家动作】这颗犹豫了,没拨开——听当场重教 t+ 17.2s ▶ 语音:「那是右边来的,向右滑。」 t+ 17.2s 〰 震动:error(做错了:两连短震) t+ 19.3s ♪ 音效 sfx/whoosh_right +t+ 19.3s ▶ 语音:「右!」 #### 【玩家动作】重教听完,这回马上同向滑 t+ 19.3s ♪ 音效 sfx/dodge t+ 19.3s ▶ 语音:「上面有东西,声音又尖又高。向上滑!」 t+ 21.5s ♪ 音效 sfx/whoosh_up -t+ 21.5s 【状态】演练 3/4:上侧有陨石 演练:上面有陨石在逼近,上面滑把它拨开(无 BGM,语速1) +t+ 21.5s ▶ 语音:「上!」 +t+ 21.5s 【状态】演练 3/4:上侧有陨石 演练:上面有陨石在逼近,上面滑把它拨开(语音播放中,语速1) #### 【玩家动作】逼近音一响,同向滑开 @@ -38,7 +42,8 @@ t+ 21.5s ♪ 音效 sfx/dodge t+ 21.5s ▶ 语音:「漂亮。」 t+ 23.6s ▶ 语音:「下面是低沉的轰隆。向下滑!」 t+ 25.7s ♪ 音效 sfx/whoosh_down -t+ 25.7s 【状态】演练 4/4:下侧有陨石 演练:下面有陨石在逼近,下面滑把它拨开(无 BGM,语速1) +t+ 25.7s ▶ 语音:「下!」 +t+ 25.7s 【状态】演练 4/4:下侧有陨石 演练:下面有陨石在逼近,下面滑把它拨开(语音播放中,语速1) #### 【玩家动作】逼近音一响,同向滑开 @@ -48,20 +53,18 @@ t+ 25.7s 【状态】演练做完了,要出发了 演练旁白在播,先 t+ 27.8s ♫ BGM 切换 → bgm/engine t+ 27.8s ♪ 向导音:battle(战斗/对抗) t+ 27.8s 【状态】出发。引擎声起来了,保护期里先练手 对局中:引擎声平稳,等下一颗(保护期)(BGM=bgm/engine,语速1) -t+ 29.3s ♪ 音效 sfx/whoosh_up +t+ 29.3s ♪ 音效 sfx/whoosh_right t+ 32.3s ♪ 音效 sfx/alarm t+ 32.8s ♪ 音效 sfx/alarm -t+ 32.8s ▶ 语音:「上!」 t+ 32.3s 〰 震动:danger(危险逼近) t+ 32.8s 〰 震动:danger(危险逼近) #### 【玩家动作】听到第二段警报和方向呼喊,同向滑开 t+ 33.3s ♪ 音效 sfx/dodge -t+ 33.3s ♪ 音效 sfx/whoosh_left +t+ 33.3s ♪ 音效 sfx/whoosh_up t+ 36.3s ♪ 音效 sfx/alarm t+ 36.8s ♪ 音效 sfx/alarm -t+ 36.8s ▶ 语音:「左!」 t+ 36.3s 〰 震动:danger(危险逼近) t+ 36.8s 〰 震动:danger(危险逼近) @@ -71,24 +74,22 @@ t+ 37.3s ♪ 音效 sfx/dodge t+ 37.3s ♪ 音效 sfx/whoosh_up t+ 40.3s ♪ 音效 sfx/alarm t+ 40.8s ♪ 音效 sfx/alarm -t+ 40.8s ▶ 语音:「上!」 t+ 40.3s 〰 震动:danger(危险逼近) t+ 40.8s 〰 震动:danger(危险逼近) #### 【玩家动作】听到第二段警报和方向呼喊,同向滑开 t+ 41.3s ♪ 音效 sfx/dodge -t+ 41.3s ♪ 音效 sfx/whoosh_left +t+ 41.3s ♪ 音效 sfx/whoosh_down t+ 44.3s ♪ 音效 sfx/alarm t+ 44.8s ♪ 音效 sfx/alarm -t+ 44.8s ▶ 语音:「左!」 t+ 44.3s 〰 震动:danger(危险逼近) t+ 44.8s 〰 震动:danger(危险逼近) #### 【玩家动作】听到第二段警报和方向呼喊,同向滑开 t+ 45.3s ♪ 音效 sfx/dodge -t+ 45.3s ♪ 音效 sfx/whoosh_down +t+ 45.3s ♪ 音效 sfx/whoosh_right t+ 47.8s ▶ 语音:「试试单击,引擎会短促加速,直接冲过空隙。」 t+ 47.8s 【状态】游戏停下来教新功能 暂停了刷怪教新功能:单击试试加速(语音播放中,语速1) @@ -96,57 +97,52 @@ t+ 47.8s 【状态】游戏停下来教新功能 暂停了刷怪教新功能 t+ 49.9s ♪ 音效 sfx/boost t+ 49.9s ▶ 语音:「感觉到了吗?加速的时候,陨石撞不上你。」 -t+ 52.4s ♪ 音效 sfx/whoosh_right +t+ 52.4s ♪ 音效 sfx/whoosh_down t+ 55.4s ♪ 音效 sfx/alarm t+ 55.9s ♪ 音效 sfx/alarm -t+ 55.9s ▶ 语音:「右!」 t+ 55.4s 〰 震动:danger(危险逼近) t+ 55.9s 〰 震动:danger(危险逼近) #### 【玩家动作】听到第二段警报和方向呼喊,同向滑开 t+ 56.4s ♪ 音效 sfx/dodge -t+ 56.4s ♪ 音效 sfx/whoosh_up +t+ 56.4s ♪ 音效 sfx/whoosh_left t+ 59.4s ♪ 音效 sfx/alarm t+ 59.9s ♪ 音效 sfx/alarm -t+ 59.9s ▶ 语音:「上!」 t+ 59.4s 〰 震动:danger(危险逼近) t+ 59.9s 〰 震动:danger(危险逼近) #### 【玩家动作】听到第二段警报和方向呼喊,同向滑开 t+ 60.4s ♪ 音效 sfx/dodge -t+ 60.4s ♪ 音效 sfx/whoosh_right +t+ 60.4s ♪ 音效 sfx/whoosh_up t+ 63.4s ♪ 音效 sfx/alarm t+ 63.9s ♪ 音效 sfx/alarm -t+ 63.9s ▶ 语音:「右!」 t+ 63.4s 〰 震动:danger(危险逼近) t+ 63.9s 〰 震动:danger(危险逼近) #### 【玩家动作】听到第二段警报和方向呼喊,同向滑开 t+ 64.4s ♪ 音效 sfx/dodge -t+ 64.4s ♪ 音效 sfx/whoosh_down +t+ 64.4s ♪ 音效 sfx/whoosh_right t+ 67.4s ♪ 音效 sfx/alarm t+ 67.9s ♪ 音效 sfx/alarm -t+ 67.9s ▶ 语音:「下!」 t+ 67.4s 〰 震动:danger(危险逼近) t+ 67.9s 〰 震动:danger(危险逼近) #### 【玩家动作】听到第二段警报和方向呼喊,同向滑开 t+ 68.4s ♪ 音效 sfx/dodge -t+ 68.4s ♪ 音效 sfx/whoosh_left +t+ 68.4s ♪ 音效 sfx/whoosh_right t+ 71.4s ♪ 音效 sfx/alarm t+ 71.9s ♪ 音效 sfx/alarm -t+ 71.9s ▶ 语音:「左!」 t+ 71.4s 〰 震动:danger(危险逼近) t+ 71.9s 〰 震动:danger(危险逼近) #### 【玩家动作】听到第二段警报和方向呼喊,同向滑开 t+ 72.4s ♪ 音效 sfx/dodge -t+ 72.4s ♪ 音效 sfx/whoosh_left +t+ 72.4s ♪ 音效 sfx/whoosh_right t+ 72.8s ▶ 语音:「双击展开护盾,能挡下一次撞击。」 t+ 72.8s 【状态】游戏停下来教新功能 暂停了刷怪教新功能:双击展开护盾(语音播放中,语速1) @@ -154,10 +150,9 @@ t+ 72.8s 【状态】游戏停下来教新功能 暂停了刷怪教新功能 t+ 74.9s ♪ 音效 sfx/shield t+ 74.9s ▶ 语音:「护盾展开后会自动充能,好了我会告诉你。」 -t+ 77.4s ♪ 音效 sfx/whoosh_down +t+ 77.4s ♪ 音效 sfx/whoosh_up t+ 80.4s ♪ 音效 sfx/alarm t+ 80.9s ♪ 音效 sfx/alarm -t+ 80.9s ▶ 语音:「下!」 t+ 80.4s 〰 震动:danger(危险逼近) t+ 80.9s 〰 震动:danger(危险逼近) @@ -165,103 +160,101 @@ t+ 80.9s 〰 震动:danger(危险逼近) t+ 81.4s ♪ 音效 sfx/dodge t+ 81.4s ▶ 语音:「十颗了,稳。」 -t+ 81.4s ♪ 音效 sfx/whoosh_down +t+ 81.4s ♪ 音效 sfx/whoosh_up t+ 81.4s 〰 震动:confirm(轻点确认) t+ 84.4s ♪ 音效 sfx/alarm t+ 84.9s ♪ 音效 sfx/alarm -t+ 84.9s ▶ 语音:「下!」 t+ 84.4s 〰 震动:danger(危险逼近) t+ 84.9s 〰 震动:danger(危险逼近) #### 【玩家动作】听到第二段警报和方向呼喊,同向滑开 t+ 85.4s ♪ 音效 sfx/dodge -t+ 85.4s ♪ 音效 sfx/whoosh_down +t+ 85.4s ♪ 音效 sfx/whoosh_right +t+ 85.4s ▶ 语音:「右!」 t+ 87.8s ▶ 语音:「训练护盾关闭。接下来,靠你自己了。」 t+ 87.8s 〰 震动:warning(警告三连震) t+ 88.4s ♪ 音效 sfx/alarm t+ 88.9s ♪ 音效 sfx/alarm -t+ 88.9s ▶ 语音:「下!」 t+ 88.4s 〰 震动:danger(危险逼近) t+ 88.9s 〰 震动:danger(危险逼近) t+ 88.9s 【状态】保护期结束了,这颗我故意没动 对局中:1 颗陨石在逼近,听方位同向滑开(语音播放中,语速1) t+ 89.4s ♪ 音效 sfx/hit -t+ 89.4s ▶ 语音:「下面撞上的。听到低沉的轰隆,向下滑。」 +t+ 89.4s ▶ 语音:「右边撞上的。听到右边的呼啸,向右滑。」 t+ 89.4s 〰 震动:hit(受击重震) #### 【玩家动作】被撞了。先听到方位归因,又听到「同向滑动就能拨开」 -t+ 89.4s ♪ 音效 sfx/whoosh_left -t+ 91.2s ♪ 音效 sfx/alarm -t+ 91.6s ▶ 向导语音:「被撞了。听方位,同向滑动就能拨开。」 -t+ 91.7s ♪ 音效 sfx/alarm -t+ 91.7s ▶ 语音:「左!」 -t+ 91.2s 〰 震动:danger(危险逼近) -t+ 91.7s 〰 震动:danger(危险逼近) -t+ 91.7s 【状态】又有一颗,也故意不躲——想听听第二次被撞会说什么 对局中:1 颗陨石在逼近,听方位同向滑开(语音播放中,语速1) -t+ 92.2s ♪ 音效 sfx/hit -t+ 92.2s ▶ 语音:「左边撞上的。听到左边的呼啸,向左滑。」 -t+ 92.2s 〰 震动:hit(受击重震) +t+ 89.4s ♪ 音效 sfx/whoosh_up +t+ 89.4s ▶ 语音:「上!」 +t+ 89.9s ▶ 语音:「护盾充能完毕。」 +t+ 89.9s 〰 震动:pickup(获得) +t+ 92.4s ♪ 音效 sfx/alarm +t+ 92.9s ♪ 音效 sfx/alarm +t+ 92.4s 〰 震动:danger(危险逼近) +t+ 92.9s 〰 震动:danger(危险逼近) +t+ 92.9s 【状态】又有一颗,也故意不躲——想听听第二次被撞会说什么 对局中:1 颗陨石在逼近,听方位同向滑开(语音播放中,语速1) +t+ 93.4s ♪ 音效 sfx/hit +t+ 93.4s ▶ 语音:「上面撞上的。听到高高的呼啸,向上滑。」 +t+ 93.4s 〰 震动:hit(受击重震) #### 【玩家动作】第二次被撞:先听方位归因,又听到「这是最后一次机会,撑住」——这就是全部家底了 -t+ 92.6s ♪ 音效 sfx/whoosh_right -t+ 94.3s ▶ 语音:「船体只剩最后一次了,小心!」 -t+ 94.4s ♪ 音效 sfx/alarm -t+ 94.9s ♪ 音效 sfx/alarm -t+ 94.9s ▶ 语音:「右!」 -t+ 94.4s 〰 震动:danger(危险逼近) -t+ 94.9s 〰 震动:danger(危险逼近) +t+ 93.4s ♪ 音效 sfx/whoosh_down +t+ 93.4s ▶ 语音:「下!」 +t+ 95.6s ▶ 语音:「船体只剩最后一次了,小心!」 +t+ 96.4s ♪ 音效 sfx/alarm +t+ 96.9s ♪ 音效 sfx/alarm +t+ 96.4s 〰 震动:danger(危险逼近) +t+ 96.9s 〰 震动:danger(危险逼近) #### 【玩家动作】听到第二段警报和方向呼喊,同向滑开 -t+ 95.4s ♪ 音效 sfx/dodge -t+ 95.7s ♪ 音效 sfx/whoosh_down -t+ 97.5s ♪ 音效 sfx/alarm -t+ 97.5s 〰 震动:danger(危险逼近) -t+ 98.0s ♪ 音效 sfx/alarm -t+ 98.0s ▶ 语音:「下!」 -t+ 98.0s 〰 震动:danger(危险逼近) +t+ 97.4s ♪ 音效 sfx/dodge +t+ 97.4s ♪ 音效 sfx/whoosh_up +t+ 97.7s ▶ 向导语音:「这是最后一次机会,撑住。」 +t+ 100.4s ♪ 音效 sfx/alarm +t+ 100.5s ♪ 音效 sfx/whoosh_up +t+ 100.5s ▶ 语音:「上!」 +t+ 100.9s ♪ 音效 sfx/alarm +t+ 100.4s 〰 震动:danger(危险逼近) +t+ 100.9s 〰 震动:danger(危险逼近) #### 【玩家动作】听到第二段警报和方向呼喊,同向滑开 -t+ 98.5s ♪ 音效 sfx/dodge -t+ 98.8s ♪ 音效 sfx/whoosh_down -t+ 100.5s ♪ 音效 sfx/alarm -t+ 100.5s 〰 震动:danger(危险逼近) -t+ 101.0s ♪ 音效 sfx/alarm -t+ 101.0s ▶ 语音:「下!」 -t+ 101.0s 〰 震动:danger(危险逼近) +t+ 101.4s ♪ 音效 sfx/dodge +t+ 102.2s ♪ 音效 sfx/alarm +t+ 102.7s ♪ 音效 sfx/alarm +t+ 102.2s 〰 震动:danger(危险逼近) +t+ 102.7s 〰 震动:danger(危险逼近) #### 【玩家动作】听到第二段警报和方向呼喊,同向滑开 -t+ 101.5s ♪ 音效 sfx/dodge -t+ 101.8s ♪ 音效 sfx/whoosh_left -t+ 103.5s ♪ 音效 sfx/alarm -t+ 103.5s 〰 震动:danger(危险逼近) -t+ 104.0s ♪ 音效 sfx/alarm -t+ 104.0s ▶ 语音:「左!」 -t+ 104.0s 〰 震动:danger(危险逼近) +t+ 103.2s ♪ 音效 sfx/dodge +t+ 103.5s ♪ 音效 sfx/whoosh_down +t+ 103.5s ▶ 语音:「下!」 +t+ 105.1s ♪ 音效 sfx/alarm +t+ 105.6s ♪ 音效 sfx/alarm +t+ 105.1s 〰 震动:danger(危险逼近) +t+ 105.6s 〰 震动:danger(危险逼近) #### 【玩家动作】听到第二段警报和方向呼喊,同向滑开 -t+ 104.5s ♪ 音效 sfx/dodge -t+ 104.8s ♪ 音效 sfx/whoosh_up -t+ 104.9s ▶ 语音:「护盾充能完毕。」 -t+ 104.9s 〰 震动:pickup(获得) -t+ 106.4s ♪ 音效 sfx/alarm -t+ 106.9s ♪ 音效 sfx/alarm -t+ 106.9s ▶ 语音:「上!」 -t+ 106.4s 〰 震动:danger(危险逼近) -t+ 106.9s 〰 震动:danger(危险逼近) +t+ 106.1s ♪ 音效 sfx/dodge +t+ 106.4s ♪ 音效 sfx/whoosh_left +t+ 106.4s ▶ 语音:「左!」 +t+ 108.1s ♪ 音效 sfx/alarm +t+ 108.6s ♪ 音效 sfx/alarm +t+ 108.1s 〰 震动:danger(危险逼近) +t+ 108.6s 〰 震动:danger(危险逼近) #### 【玩家动作】听到第二段警报和方向呼喊,同向滑开 -t+ 107.4s ♪ 音效 sfx/dodge -t+ 107.7s ♪ 音效 sfx/whoosh_left -t+ 109.3s ♪ 音效 sfx/alarm -t+ 109.8s ♪ 音效 sfx/alarm -t+ 109.8s ▶ 语音:「左!」 -t+ 109.3s 〰 震动:danger(危险逼近) -t+ 109.8s 〰 震动:danger(危险逼近) -t+ 109.8s 【状态】保护期结束后撑了 22 秒、挨了两下还活着;每回撞击前半秒都能听到方向呼喊,先到这 对局中:1 颗陨石在逼近,听方位同向滑开(语音播放中,语速1) +t+ 109.1s ♪ 音效 sfx/dodge +t+ 109.3s ♪ 音效 sfx/whoosh_right +t+ 109.3s ▶ 语音:「右!」 +t+ 110.9s ♪ 音效 sfx/alarm +t+ 110.9s 〰 震动:danger(危险逼近) +t+ 111.4s ♪ 音效 sfx/alarm +t+ 111.4s 〰 震动:danger(危险逼近) +t+ 111.4s 【状态】保护期结束后撑了 24 秒、挨了两下还活着;每回撞击前半秒都能听到方向呼喊,先到这 对局中:1 颗陨石在逼近,听方位同向滑开(BGM=bgm/engine,语速1) diff --git a/research/space-polish/round1/live-A-transcript.md b/research/space-polish/round1/live-A-transcript.md new file mode 100644 index 00000000..5b713ba9 --- /dev/null +++ b/research/space-polish/round1/live-A-transcript.md @@ -0,0 +1,747 @@ +# space 实时会话 transcript + +- `[ -0.14s]` **GESTURE** tap @(195,422) +- `[ 0.00s]` REC 开始 (audio/webm;codecs=opus) +- `[ 0.11s]` VOICE ▶ drill_welcome (dur 3.68s) +- `[ 4.03s]` VOICE ■ drill_welcome (kill) +- `[ 4.03s]` VERDICT drill_welcome: **OK** sim=1 + - 期望: 欢迎登上盲航。你只有一双耳朵。 + - 听到: 欢迎登上盲航,你只有一双耳朵。。 +- `[ 4.03s]` VOICE ▶ skip_hint (dur 1.92s) +- `[ 5.91s]` VOICE ■ skip_hint (kill) +- `[ 5.91s]` VERDICT skip_hint: **OK** sim=0.7143 + - 期望: 单击可跳过旁白。 + - 听到: 单击可跳过磅榜。 +- `[ 5.91s]` VOICE ▶ drill_rule (dur 3.6s) +- `[ 9.74s]` VOICE ■ drill_rule (kill) +- `[ 9.74s]` VERDICT drill_rule: **OK** sim=0.963 + - 期望: 陨石来了,会有声音告诉你方位。 + - 听到: 陨石来了,会有声音告诉你方位停。 +- `[ 9.75s]` VOICE ▶ drill_left (dur 4.96s) +- `[ 14.96s]` VOICE ■ drill_left (kill) +- `[ 14.96s]` SFX ♪ whoosh_left +- `[ 14.96s]` VOICE ▶ dir_left (dur 0.5570975056689342s) +- `[ 14.96s]` VERDICT drill_left: **OK** sim=0.8889 + - 期望: 听,左边有陨石。向左滑,把它拨开! + - 听到: 停左边有陨石向左滑,把它拨开走。 +- `[ 15.73s]` VOICE ■ dir_left (kill) +- `[ 15.73s]` VERDICT dir_left: **MISMATCH** sim=0 + - 期望: 左! + - 听到: 走。 +- `[ 19.46s]` VIBRATE [60,40,60] +- `[ 19.47s]` VOICE ▶ drill_retry_left (dur 3.36s) +- `[ 19.47s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 22.93s]` VOICE ■ drill_retry_left (kill) +- `[ 22.93s]` SFX ♪ whoosh_left +- `[ 22.93s]` VOICE ▶ dir_left (dur 0.5570975056689342s) +- `[ 22.93s]` VERDICT drill_retry_left: **OK** sim=0.9474 + - 期望: 那是左边来的,向左滑。 + - 听到: 那是左边来的,向左滑左。 +- `[ 23.69s]` VOICE ■ dir_left (kill) +- `[ 23.69s]` VERDICT dir_left: **MISMATCH** sim=0 + - 期望: 左! + - 听到: 走。 +- `[ 27.43s]` VIBRATE [60,40,60] +- `[ 27.43s]` VOICE ▶ drill_moveon (dur 3.84s) +- `[ 27.43s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 28.33s]` **GESTURE** swipeleft @(195,422) +- `[ 28.68s]` VIBRATE [10] +- `[ 31.54s]` VOICE ■ drill_moveon (kill) +- `[ 31.54s]` VERDICT drill_moveon: **OK** sim=1 + - 期望: 没关系,跟着我,我们继续。 + - 听到: 没关系,跟着我,我们继续。 +- `[ 31.55s]` VOICE ▶ drill_right (dur 2.64s) +- `[ 34.26s]` VOICE ■ drill_right (kill) +- `[ 34.26s]` SFX ♪ whoosh_right +- `[ 34.26s]` VOICE ▶ dir_right (dur 0.39909297052154197s) +- `[ 34.26s]` VERDICT drill_right: **OK** sim=0.9412 + - 期望: 这次在右边。向右滑! + - 听到: 这次在右边向右滑右。 +- `[ 34.74s]` VOICE ■ dir_right (kill) +- `[ 34.74s]` VERDICT dir_right: **MISMATCH** sim=0 + - 期望: 右! + - 听到: 救。 +- `[ 38.76s]` VIBRATE [60,40,60] +- `[ 38.76s]` VOICE ▶ drill_retry_right (dur 3.2s) +- `[ 38.76s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 42.22s]` VOICE ■ drill_retry_right (kill) +- `[ 42.22s]` VERDICT drill_retry_right: **OK** sim=0.9474 + - 期望: 那是右边来的,向右滑。 + - 听到: 那是右边来的,向右滑右。 +- `[ 42.22s]` SFX ♪ whoosh_right +- `[ 42.22s]` VOICE ▶ dir_right (dur 0.39909297052154197s) +- `[ 42.71s]` VOICE ■ dir_right (kill) +- `[ 42.71s]` VERDICT dir_right: **MISMATCH** sim=0 + - 期望: 右! + - 听到: 救。 +- `[ 46.72s]` VIBRATE [60,40,60] +- `[ 46.72s]` VOICE ▶ drill_moveon (dur 3.84s) +- `[ 46.72s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 50.83s]` VOICE ■ drill_moveon (kill) +- `[ 50.83s]` VERDICT drill_moveon: **OK** sim=1 + - 期望: 没关系,跟着我,我们继续。 + - 听到: 没关系,跟着我,我们继续。 +- `[ 50.84s]` VOICE ▶ drill_up (dur 4.24s) +- `[ 55.41s]` VOICE ■ drill_up (kill) +- `[ 55.41s]` SFX ♪ whoosh_up +- `[ 55.41s]` VOICE ▶ dir_up (dur 0.39909297052154197s) +- `[ 55.41s]` VERDICT drill_up: **OK** sim=1 + - 期望: 上面有东西,声音又尖又高。向上滑! + - 听到: 上面有东西,声音又尖又高,向上滑。 +- `[ 55.90s]` VOICE ■ dir_up (kill) +- `[ 55.90s]` VERDICT dir_up: **OK** sim=1 + - 期望: 上! + - 听到: 上。 +- `[ 59.91s]` VIBRATE [60,40,60] +- `[ 59.92s]` VOICE ▶ drill_retry_up (dur 4.08s) +- `[ 59.92s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 64.02s]` VOICE ■ drill_retry_up (kill) +- `[ 64.02s]` SFX ♪ whoosh_up +- `[ 64.02s]` VOICE ▶ dir_up (dur 0.39909297052154197s) +- `[ 64.02s]` VERDICT drill_retry_up: **OK** sim=0.96 + - 期望: 声音又高又尖,是上面,向上滑。 + - 听到: 声音又高又尖,是上面向上滑上。 +- `[ 64.51s]` VOICE ■ dir_up (kill) +- `[ 64.51s]` VERDICT dir_up: **OK** sim=1 + - 期望: 上! + - 听到: 上。 +- `[ 66.26s]` **GESTURE** swipeup @(195,422) +- `[ 66.61s]` VIBRATE [10] +- `[ 66.61s]` SFX ♪ dodge +- `[ 66.62s]` VOICE ▶ drill_good (dur 0.7970975056689342s) +- `[ 66.62s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 67.39s]` VOICE ■ drill_good (kill) +- `[ 67.39s]` VERDICT drill_good: **MISMATCH** sim=0 + - 期望: 漂亮。 + - 听到: 你好。 +- `[ 67.39s]` VOICE ▶ drill_down (dur 3.28s) +- `[ 70.85s]` VOICE ■ drill_down (kill) +- `[ 70.85s]` SFX ♪ whoosh_down +- `[ 70.85s]` VOICE ▶ dir_down (dur 0.5570975056689342s) +- `[ 70.85s]` VERDICT drill_down: **OK** sim=0.9091 + - 期望: 下面是低沉的轰隆。向下滑! + - 听到: 下面是低沉的轰龙向下滑。 +- `[ 71.61s]` VOICE ■ dir_down (kill) +- `[ 71.61s]` VERDICT dir_down: **MISMATCH** sim=0 + - 期望: 下! + - 听到: 上。 +- `[ 75.35s]` VIBRATE [60,40,60] +- `[ 75.36s]` VOICE ▶ drill_retry_down (dur 2.72s) +- `[ 75.36s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 78.07s]` VOICE ■ drill_retry_down (kill) +- `[ 78.07s]` SFX ♪ whoosh_down +- `[ 78.07s]` VOICE ▶ dir_down (dur 0.5570975056689342s) +- `[ 78.07s]` VERDICT drill_retry_down: **OK** sim=0.7778 + - 期望: 轰隆声在下面,向下滑。 + - 听到: 轰龙声在下面向下火。 +- `[ 78.83s]` VOICE ■ dir_down (kill) +- `[ 78.83s]` VERDICT dir_down: **MISMATCH** sim=0 + - 期望: 下! + - 听到: 上。 +- `[ 82.57s]` VIBRATE [60,40,60] +- `[ 82.57s]` VOICE ▶ drill_moveon (dur 3.84s) +- `[ 82.57s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 86.68s]` VOICE ■ drill_moveon (kill) +- `[ 86.68s]` VERDICT drill_moveon: **OK** sim=1 + - 期望: 没关系,跟着我,我们继续。 + - 听到: 没关系,跟着我,我们继续。 +- `[ 86.69s]` VOICE ▶ drill_done (dur 4.72s) +- `[ 91.63s]` VOICE ■ drill_done (kill) +- `[ 91.63s]` VERDICT drill_done: **OK** sim=0.9231 + - 期望: 四个方向你都会了。引擎点火,出发! + - 听到: 四个方向你都会了,引擎点火。 +- `[ 91.81s]` BGM ♪ engine (loop) +- `[ 93.13s]` SFX ♪ whoosh_left +- `[ 96.13s]` VIBRATE [25,40,25,40,25] +- `[ 96.13s]` SFX ♪ alarm +- `[ 96.63s]` VIBRATE [25,40,25,40,25] +- `[ 96.63s]` SFX ♪ alarm +- `[ 97.13s]` VIBRATE [30,50,30,50,30] +- `[ 97.13s]` SFX ♪ shield_block +- `[ 97.13s]` VOICE ▶ protect_left (dur 7.76s) +- `[ 97.13s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 97.13s]` SFX ♪ whoosh_right +- `[ 100.13s]` VIBRATE [25,40,25,40,25] +- `[ 100.13s]` SFX ♪ alarm +- `[ 100.63s]` VIBRATE [25,40,25,40,25] +- `[ 100.63s]` SFX ♪ alarm +- `[ 101.13s]` VIBRATE [30,50,30,50,30] +- `[ 101.13s]` SFX ♪ shield_block +- `[ 101.13s]` VOICE ■ protect_left (kill) +- `[ 101.13s]` VOICE ▶ protect_right (dur 7.2s) +- `[ 101.13s]` VERDICT protect_left: **TRUNCATED** sim=0.5625 + - 期望: 训练护盾接住了。那颗在左边,听到左边的呼啸,向左滑。 + - 听到: 训练护盾接住了那颗训。 +- `[ 101.13s]` SFX ♪ whoosh_down +- `[ 104.13s]` VIBRATE [25,40,25,40,25] +- `[ 104.13s]` SFX ♪ alarm +- `[ 104.63s]` VIBRATE [25,40,25,40,25] +- `[ 104.63s]` SFX ♪ alarm +- `[ 105.13s]` VIBRATE [30,50,30,50,30] +- `[ 105.13s]` SFX ♪ shield_block +- `[ 105.13s]` VOICE ■ protect_right (kill) +- `[ 105.13s]` VOICE ▶ protect_down (dur 6.08s) +- `[ 105.13s]` SFX ♪ whoosh_up +- `[ 105.13s]` VERDICT protect_right: **TRUNCATED** sim=0.7059 + - 期望: 训练护盾接住了。那颗在右边,听到右边的呼啸,向右滑。 + - 听到: 训练护盾接住了,那颗在右边。 +- `[ 108.14s]` VIBRATE [25,40,25,40,25] +- `[ 108.14s]` SFX ♪ alarm +- `[ 108.64s]` VIBRATE [25,40,25,40,25] +- `[ 108.64s]` SFX ♪ alarm +- `[ 109.14s]` VIBRATE [30,50,30,50,30] +- `[ 109.14s]` SFX ♪ shield_block +- `[ 109.14s]` VOICE ■ protect_down (kill) +- `[ 109.14s]` VOICE ▶ protect_up (dur 6.96s) +- `[ 109.14s]` VERDICT protect_down: **TRUNCATED** sim=0.3429 + - 期望: 训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。 + - 听到: 训练互动接着,每刻在下面请训。 +- `[ 109.14s]` SFX ♪ whoosh_right +- `[ 111.63s]` VOICE ■ protect_up (kill) +- `[ 111.63s]` VOICE ▶ feat_boost (dur 6.48s) +- `[ 111.63s]` VERDICT protect_up: **TRUNCATED** sim=0.3333 + - 期望: 训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。 + - 听到: 训练互动接住了是。 +- `[ 118.42s]` VOICE ■ feat_boost (kill) +- `[ 118.42s]` VERDICT feat_boost: **OK** sim=1 + - 期望: 试试单击,引擎会短促加速,直接冲过空隙。 + - 听到: 试试单击,引擎会短促加速,直接冲过空隙。 +- `[ 122.13s]` SFX ♪ whoosh_up +- `[ 125.13s]` VIBRATE [25,40,25,40,25] +- `[ 125.13s]` SFX ♪ alarm +- `[ 125.63s]` VIBRATE [25,40,25,40,25] +- `[ 125.63s]` SFX ♪ alarm +- `[ 126.13s]` VIBRATE [30,50,30,50,30] +- `[ 126.13s]` SFX ♪ shield_block +- `[ 126.13s]` VOICE ▶ protect_up (dur 6.96s) +- `[ 126.13s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 126.13s]` SFX ♪ whoosh_up +- `[ 129.13s]` VIBRATE [25,40,25,40,25] +- `[ 129.13s]` SFX ♪ alarm +- `[ 129.63s]` VIBRATE [25,40,25,40,25] +- `[ 129.63s]` SFX ♪ alarm +- `[ 130.13s]` VIBRATE [30,50,30,50,30] +- `[ 130.13s]` SFX ♪ shield_block +- `[ 130.13s]` VOICE ■ protect_up (kill) +- `[ 130.13s]` VOICE ▶ protect_up (dur 6.96s) +- `[ 130.13s]` VERDICT protect_up: **TRUNCATED** sim=0.6286 + - 期望: 训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。 + - 听到: 训练护刃接住了,那颗在上面训。 +- `[ 130.13s]` SFX ♪ whoosh_right +- `[ 133.13s]` VIBRATE [25,40,25,40,25] +- `[ 133.13s]` SFX ♪ alarm +- `[ 133.63s]` VIBRATE [25,40,25,40,25] +- `[ 133.63s]` SFX ♪ alarm +- `[ 134.13s]` VIBRATE [30,50,30,50,30] +- `[ 134.13s]` SFX ♪ shield_block +- `[ 134.13s]` VOICE ■ protect_up (kill) +- `[ 134.13s]` VOICE ▶ protect_right (dur 7.2s) +- `[ 134.13s]` VERDICT protect_up: **TRUNCATED** sim=0.5882 + - 期望: 训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。 + - 听到: 训练互动接住了,那颗在上面。 +- `[ 134.13s]` SFX ♪ whoosh_down +- `[ 136.63s]` VOICE ■ protect_right (kill) +- `[ 136.63s]` VOICE ▶ feat_shield (dur 4.4s) +- `[ 136.63s]` VERDICT protect_right: **TRUNCATED** sim=0.4667 + - 期望: 训练护盾接住了。那颗在右边,听到右边的呼啸,向右滑。 + - 听到: 训练护盾接住了说。 +- `[ 139.46s]` **GESTURE** tap @(195,422) +- `[ 139.82s]` VIBRATE [20] +- `[ 139.82s]` VOICE ■ feat_shield (kill) +- `[ 139.82s]` VERDICT feat_shield: **TRUNCATED** sim=0.6667 + - 期望: 双击展开护盾,能挡下一次撞击。 + - 听到: 双击展开护盾能等。 +- `[ 147.13s]` SFX ♪ whoosh_up +- `[ 150.13s]` VIBRATE [25,40,25,40,25] +- `[ 150.13s]` SFX ♪ alarm +- `[ 150.63s]` VIBRATE [25,40,25,40,25] +- `[ 150.63s]` SFX ♪ alarm +- `[ 151.13s]` VIBRATE [30,50,30,50,30] +- `[ 151.13s]` SFX ♪ shield_block +- `[ 151.13s]` VOICE ▶ protect_up (dur 6.96s) +- `[ 151.13s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 151.13s]` SFX ♪ whoosh_left +- `[ 151.13s]` VOICE ■ protect_up (kill) +- `[ 151.13s]` VOICE ▶ dir_left (dur 0.5570975056689342s) +- `[ 151.13s]` VERDICT protect_up: **TRUNCATED** sim=0 + - 期望: 训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。 + - 听到: 哦。 +- `[ 151.63s]` VIBRATE [30,50,30,50,30] +- `[ 151.63s]` VOICE ■ dir_left (kill) +- `[ 151.63s]` VOICE ▶ protect_end (dur 5.36s) +- `[ 151.63s]` VERDICT dir_left: **MISMATCH** sim=0 + - 期望: 左! + - 听到: 哦。 +- `[ 154.13s]` VIBRATE [25,40,25,40,25] +- `[ 154.13s]` SFX ♪ alarm +- `[ 154.63s]` VIBRATE [25,40,25,40,25] +- `[ 154.63s]` SFX ♪ alarm +- `[ 155.13s]` VIBRATE [80] +- `[ 155.13s]` SFX ♪ hit +- `[ 155.13s]` VOICE ■ protect_end (kill) +- `[ 155.13s]` VOICE ▶ hit_left (dur 4.64s) +- `[ 155.13s]` VERDICT protect_end: **TRUNCATED** sim=0.5217 + - 期望: 训练护盾关闭。接下来,靠你自己了。 + - 听到: 哼训练护盾关闭有效。 +- `[ 155.13s]` SFX ♪ whoosh_down +- `[ 155.13s]` VOICE ■ hit_left (kill) +- `[ 155.13s]` VOICE ▶ dir_down (dur 0.5570975056689342s) +- `[ 155.13s]` VERDICT hit_left: **TRUNCATED** sim=0 + - 期望: 左边撞上的。听到左边的呼啸,向左滑。 + - 听到: 让。 +- `[ 155.90s]` VOICE ■ dir_down (kill) +- `[ 155.90s]` VERDICT dir_down: **MISMATCH** sim=0 + - 期望: 下! + - 听到: 跳。 +- `[ 158.13s]` VIBRATE [25,40,25,40,25] +- `[ 158.13s]` SFX ♪ alarm +- `[ 158.63s]` VIBRATE [25,40,25,40,25] +- `[ 158.63s]` SFX ♪ alarm +- `[ 159.13s]` VIBRATE [80] +- `[ 159.13s]` SFX ♪ hit +- `[ 159.13s]` VOICE ▶ hit_down (dur 4.32s) +- `[ 159.13s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 159.13s]` SFX ♪ whoosh_left +- `[ 159.13s]` VOICE ■ hit_down (kill) +- `[ 159.13s]` VOICE ▶ dir_left (dur 0.5570975056689342s) +- `[ 159.13s]` VERDICT hit_down: **TRUNCATED** sim=0 + - 期望: 下面撞上的。听到低沉的轰隆,向下滑。 + - 听到: 哦。 +- `[ 159.89s]` VOICE ■ dir_left (kill) +- `[ 159.89s]` VOICE ▶ hit_last (dur 2.72s) +- `[ 159.89s]` VERDICT dir_left: **MISMATCH** sim=0 + - 期望: 左! + - 听到: 哦,你传。 +- `[ 162.13s]` VIBRATE [25,40,25,40,25] +- `[ 162.13s]` SFX ♪ alarm +- `[ 162.60s]` VOICE ■ hit_last (kill) +- `[ 162.60s]` VOICE ▶ gd_last_life (dur 2.8s) +- `[ 162.60s]` VERDICT hit_last: **OK** sim=0.8696 + - 期望: 船体只剩最后一次了,小心! + - 听到: 团体只剩最后一次了,小心这。 +- `[ 162.63s]` VIBRATE [25,40,25,40,25] +- `[ 162.63s]` SFX ♪ alarm +- `[ 163.13s]` VIBRATE [80] +- `[ 163.13s]` VOICE ■ gd_last_life (kill) +- `[ 163.13s]` VIBRATE [60,40,60] +- `[ 163.13s]` VERDICT gd_last_life: **TRUNCATED** sim=0.3333 + - 期望: 这是最后一次机会,撑住。 + - 听到: 这是。 +- `[ 163.13s]` SFX ♪ hit +- `[ 163.13s]` SFX ♪ crash +- `[ 163.43s]` VIBRATE [80] +- `[ 164.33s]` VIBRATE [100] +- `[ 164.34s]` VOICE ▶ time_3 (dur 3.2s) +- `[ 167.81s]` VOICE ■ time_3 (kill) +- `[ 167.81s]` VERDICT time_3: **OK** sim=0.9091 + - 期望: 超过一分钟,合格的飞行员。 + - 听到: 超过1分钟,合格的飞行员。 +- `[ 167.81s]` VOICE ▶ new_record (dur 1.28s) +- `[ 169.41s]` VOICE ■ new_record (kill) +- `[ 169.41s]` VERDICT new_record: **MISMATCH** sim=0.5714 + - 期望: 新纪录! + - 听到: 新记录只。 +- `[ 169.41s]` VOICE ▶ dodge_1 (dur 1.36s) +- `[ 171.01s]` VOICE ■ dodge_1 (kill) +- `[ 171.01s]` VERDICT dodge_1: **MISMATCH** sim=0.4 + - 期望: 只拨开几颗。 + - 听到: 只剥开即可。。 +- `[ 171.02s]` VOICE ▶ restart_hint (dur 3.68s) +- `[ 174.48s]` BGM ♪ menu (loop) +- `[ 174.84s]` VOICE ■ restart_hint (kill) +- `[ 174.84s]` VERDICT restart_hint: **OK** sim=0.9091 + - 期望: 单击再飞一次,下滑回大厅。 + - 听到: 单机再飞一次,下滑回大厅。 +- `[ 176.01s]` **GESTURE** doubletap @(195,422) +- `[ 176.26s]` VIBRATE [20] +- `[ 240.43s]` **GESTURE** tap @(195,422) +- `[ 240.80s]` VIBRATE [20] +- `[ 240.80s]` BGM ♪ engine (loop) +- `[ 242.30s]` SFX ♪ whoosh_up +- `[ 245.30s]` VIBRATE [25,40,25,40,25] +- `[ 245.30s]` SFX ♪ alarm +- `[ 245.80s]` VIBRATE [25,40,25,40,25] +- `[ 245.80s]` SFX ♪ alarm +- `[ 246.30s]` VIBRATE [30,50,30,50,30] +- `[ 246.30s]` SFX ♪ shield_block +- `[ 246.30s]` VOICE ▶ protect_up (dur 6.96s) +- `[ 246.30s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 246.30s]` SFX ♪ whoosh_down +- `[ 249.30s]` VIBRATE [25,40,25,40,25] +- `[ 249.30s]` SFX ♪ alarm +- `[ 249.80s]` VIBRATE [25,40,25,40,25] +- `[ 249.80s]` SFX ♪ alarm +- `[ 250.30s]` VIBRATE [30,50,30,50,30] +- `[ 250.30s]` SFX ♪ shield_block +- `[ 250.30s]` VOICE ■ protect_up (kill) +- `[ 250.30s]` VOICE ▶ protect_down (dur 6.08s) +- `[ 250.30s]` VERDICT protect_up: **TRUNCATED** sim=0.5882 + - 期望: 训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。 + - 听到: 训练互动接住了,那颗在上面。 +- `[ 250.30s]` SFX ♪ whoosh_right +- `[ 253.30s]` VIBRATE [25,40,25,40,25] +- `[ 253.30s]` SFX ♪ alarm +- `[ 253.80s]` VIBRATE [25,40,25,40,25] +- `[ 253.80s]` SFX ♪ alarm +- `[ 254.30s]` VIBRATE [30,50,30,50,30] +- `[ 254.30s]` SFX ♪ shield_block +- `[ 254.30s]` VOICE ■ protect_down (kill) +- `[ 254.30s]` VOICE ▶ protect_right (dur 7.2s) +- `[ 254.30s]` VERDICT protect_down: **TRUNCATED** sim=0.5405 + - 期望: 训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。 + - 听到: 训练互动接住了,那颗在下面心奋训。 +- `[ 254.30s]` SFX ♪ whoosh_down +- `[ 257.30s]` VIBRATE [25,40,25,40,25] +- `[ 257.30s]` SFX ♪ alarm +- `[ 257.80s]` VIBRATE [25,40,25,40,25] +- `[ 257.80s]` SFX ♪ alarm +- `[ 258.30s]` VIBRATE [30,50,30,50,30] +- `[ 258.30s]` SFX ♪ shield_block +- `[ 258.30s]` VOICE ■ protect_right (kill) +- `[ 258.30s]` VERDICT protect_right: **TRUNCATED** sim=0.7059 + - 期望: 训练护盾接住了。那颗在右边,听到右边的呼啸,向右滑。 + - 听到: 训练护盾接住了,那颗在右边。 +- `[ 258.30s]` VOICE ▶ protect_down (dur 6.08s) +- `[ 258.30s]` SFX ♪ whoosh_right +- `[ 261.30s]` VIBRATE [25,40,25,40,25] +- `[ 261.30s]` SFX ♪ alarm +- `[ 261.80s]` VIBRATE [25,40,25,40,25] +- `[ 261.80s]` SFX ♪ alarm +- `[ 262.30s]` VIBRATE [30,50,30,50,30] +- `[ 262.30s]` SFX ♪ shield_block +- `[ 262.30s]` VOICE ■ protect_down (kill) +- `[ 262.30s]` VOICE ▶ protect_right (dur 7.2s) +- `[ 262.30s]` VERDICT protect_down: **TRUNCATED** sim=0.5405 + - 期望: 训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。 + - 听到: 训练互动接住了,那颗在下面经动训。 +- `[ 262.30s]` SFX ♪ whoosh_down +- `[ 265.30s]` VIBRATE [25,40,25,40,25] +- `[ 265.30s]` SFX ♪ alarm +- `[ 265.80s]` VIBRATE [25,40,25,40,25] +- `[ 265.80s]` SFX ♪ alarm +- `[ 266.30s]` VIBRATE [30,50,30,50,30] +- `[ 266.30s]` SFX ♪ shield_block +- `[ 266.30s]` VOICE ■ protect_right (kill) +- `[ 266.30s]` VOICE ▶ protect_down (dur 6.08s) +- `[ 266.30s]` VERDICT protect_right: **TRUNCATED** sim=0.7059 + - 期望: 训练护盾接住了。那颗在右边,听到右边的呼啸,向右滑。 + - 听到: 训练护盾接住了,那颗在右边。 +- `[ 266.30s]` SFX ♪ whoosh_down +- `[ 269.30s]` VIBRATE [25,40,25,40,25] +- `[ 269.30s]` SFX ♪ alarm +- `[ 269.80s]` VIBRATE [25,40,25,40,25] +- `[ 269.80s]` SFX ♪ alarm +- `[ 270.30s]` VIBRATE [30,50,30,50,30] +- `[ 270.30s]` SFX ♪ shield_block +- `[ 270.30s]` VOICE ■ protect_down (kill) +- `[ 270.30s]` VOICE ▶ protect_down (dur 6.08s) +- `[ 270.30s]` VERDICT protect_down: **TRUNCATED** sim=0.5 + - 期望: 训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。 + - 听到: 训练互动接住了,那刻在下面拼成。 +- `[ 270.31s]` SFX ♪ whoosh_down +- `[ 273.31s]` VIBRATE [25,40,25,40,25] +- `[ 273.31s]` SFX ♪ alarm +- `[ 273.81s]` VIBRATE [25,40,25,40,25] +- `[ 273.81s]` SFX ♪ alarm +- `[ 274.31s]` VIBRATE [30,50,30,50,30] +- `[ 274.31s]` SFX ♪ shield_block +- `[ 274.31s]` VOICE ■ protect_down (kill) +- `[ 274.31s]` VOICE ▶ protect_down (dur 6.08s) +- `[ 274.31s]` VERDICT protect_down: **TRUNCATED** sim=0.4865 + - 期望: 训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。 + - 听到: 训练互动接住了,那刻在下面形成训。 +- `[ 274.31s]` SFX ♪ whoosh_right +- `[ 277.31s]` VIBRATE [25,40,25,40,25] +- `[ 277.31s]` SFX ♪ alarm +- `[ 277.81s]` VIBRATE [25,40,25,40,25] +- `[ 277.81s]` SFX ♪ alarm +- `[ 278.31s]` VIBRATE [30,50,30,50,30] +- `[ 278.31s]` SFX ♪ shield_block +- `[ 278.31s]` VOICE ■ protect_down (kill) +- `[ 278.31s]` VOICE ▶ protect_right (dur 7.2s) +- `[ 278.31s]` VERDICT protect_down: **TRUNCATED** sim=0.5946 + - 期望: 训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。 + - 听到: 训练互动接住了,那刻在下面听到训。 +- `[ 278.31s]` SFX ♪ whoosh_up +- `[ 281.31s]` VIBRATE [25,40,25,40,25] +- `[ 281.31s]` SFX ♪ alarm +- `[ 281.81s]` VIBRATE [25,40,25,40,25] +- `[ 281.81s]` SFX ♪ alarm +- `[ 282.31s]` VIBRATE [30,50,30,50,30] +- `[ 282.31s]` SFX ♪ shield_block +- `[ 282.31s]` VOICE ■ protect_right (kill) +- `[ 282.31s]` VOICE ▶ protect_up (dur 6.96s) +- `[ 282.31s]` VERDICT protect_right: **TRUNCATED** sim=0.6471 + - 期望: 训练护盾接住了。那颗在右边,听到右边的呼啸,向右滑。 + - 听到: 训练护关接住了,那颗在右边。 +- `[ 282.31s]` SFX ♪ whoosh_right +- `[ 282.56s]` **GESTURE** doubletap @(195,422) +- `[ 282.81s]` VIBRATE [20] +- `[ 282.81s]` SFX ♪ shield +- `[ 285.22s]` **GESTURE** doubletap @(195,422) +- `[ 285.31s]` VIBRATE [25,40,25,40,25] +- `[ 285.31s]` SFX ♪ alarm +- `[ 285.47s]` VIBRATE [20] +- `[ 285.47s]` VIBRATE [40,100,40] +- `[ 285.47s]` VOICE ■ protect_up (kill) +- `[ 285.47s]` VOICE ▶ feat_shield_done (dur 4.88s) +- `[ 285.47s]` VERDICT protect_up: **TRUNCATED** sim=0.4848 + - 期望: 训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。 + - 听到: 训练死定接住了那刻在上。 +- `[ 285.81s]` VIBRATE [25,40,25,40,25] +- `[ 285.81s]` SFX ♪ alarm +- `[ 286.31s]` VIBRATE [100] +- `[ 286.31s]` SFX ♪ shield_block +- `[ 286.31s]` SFX ♪ whoosh_down +- `[ 289.31s]` VIBRATE [25,40,25,40,25] +- `[ 289.31s]` SFX ♪ alarm +- `[ 289.81s]` VIBRATE [25,40,25,40,25] +- `[ 289.81s]` SFX ♪ alarm +- `[ 290.31s]` VIBRATE [30,50,30,50,30] +- `[ 290.31s]` SFX ♪ shield_block +- `[ 290.31s]` VOICE ■ feat_shield_done (kill) +- `[ 290.31s]` VOICE ▶ protect_down (dur 6.08s) +- `[ 290.31s]` VERDICT feat_shield_done: **OK** sim=0.9697 + - 期望: 护盾展开后会自动充能,好了我会告诉你。 + - 听到: 护盾展开后,会自充能。好了,我会告诉你。 +- `[ 290.31s]` SFX ♪ whoosh_down +- `[ 293.31s]` VIBRATE [25,40,25,40,25] +- `[ 293.31s]` SFX ♪ alarm +- `[ 293.81s]` VIBRATE [25,40,25,40,25] +- `[ 293.81s]` SFX ♪ alarm +- `[ 294.31s]` VIBRATE [30,50,30,50,30] +- `[ 294.31s]` SFX ♪ shield_block +- `[ 294.31s]` VOICE ■ protect_down (kill) +- `[ 294.31s]` VOICE ▶ protect_down (dur 6.08s) +- `[ 294.31s]` VERDICT protect_down: **TRUNCATED** sim=0.5 + - 期望: 训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。 + - 听到: 训练互动接住了,那刻在下面请训。 +- `[ 294.31s]` SFX ♪ whoosh_left +- `[ 297.31s]` VIBRATE [25,40,25,40,25] +- `[ 297.31s]` SFX ♪ alarm +- `[ 297.81s]` VIBRATE [25,40,25,40,25] +- `[ 297.81s]` SFX ♪ alarm +- `[ 297.81s]` VIBRATE [15] +- `[ 298.31s]` VIBRATE [30,50,30,50,30] +- `[ 298.31s]` SFX ♪ shield_block +- `[ 298.31s]` VOICE ■ protect_down (kill) +- `[ 298.31s]` VOICE ▶ protect_left (dur 7.76s) +- `[ 298.31s]` VERDICT protect_down: **TRUNCATED** sim=0.5 + - 期望: 训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。 + - 听到: 训念互动接住了,那刻在下面请下。 +- `[ 298.31s]` SFX ♪ whoosh_down +- `[ 298.31s]` VOICE ■ protect_left (kill) +- `[ 298.31s]` VOICE ▶ dir_down (dur 0.5570975056689342s) +- `[ 298.31s]` VERDICT protect_left: **TRUNCATED** sim=0 + - 期望: 训练护盾接住了。那颗在左边,听到左边的呼啸,向左滑。 + - 听到: 这。 +- `[ 299.08s]` VOICE ■ dir_down (kill) +- `[ 299.08s]` VOICE ▶ shield_block (dur 1.6s) +- `[ 299.08s]` VERDICT dir_down: **MISMATCH** sim=0 + - 期望: 下! + - 听到: 跳。 +- `[ 299.82s]` **GESTURE** tap @(195,422) +- `[ 300.19s]` VIBRATE [20] +- `[ 300.19s]` VOICE ■ shield_block (kill) +- `[ 300.19s]` VOICE ▶ shield_ready (dur 1.6s) +- `[ 300.19s]` VERDICT shield_block: **TRUNCATED** sim=0.7273 + - 期望: 护盾挡下了撞击。 + - 听到: 护盾挡下。 +- `[ 300.80s]` VIBRATE [30,50,30,50,30] +- `[ 300.80s]` VOICE ■ shield_ready (kill) +- `[ 300.80s]` VOICE ▶ protect_end (dur 5.36s) +- `[ 300.80s]` VERDICT shield_ready: **TRUNCATED** sim=0 + - 期望: 护盾充能完毕。 + - 听到: 虎。 +- `[ 301.31s]` VIBRATE [25,40,25,40,25] +- `[ 301.31s]` SFX ♪ alarm +- `[ 301.50s]` **GESTURE** tap @(195,422) +- `[ 301.81s]` VIBRATE [25,40,25,40,25] +- `[ 301.81s]` SFX ♪ alarm +- `[ 301.86s]` VIBRATE [20] +- `[ 301.86s]` VOICE ■ protect_end (kill) +- `[ 301.86s]` VERDICT protect_end: **TRUNCATED** sim=0 + - 期望: 训练护盾关闭。接下来,靠你自己了。 + - 听到: 哼。 +- `[ 302.31s]` VIBRATE [80] +- `[ 302.31s]` SFX ♪ hit +- `[ 302.31s]` VOICE ▶ hit_down (dur 4.32s) +- `[ 302.31s]` SFX ♪ whoosh_down +- `[ 302.31s]` VOICE ■ hit_down (kill) +- `[ 302.31s]` VOICE ▶ dir_down (dur 0.5570975056689342s) +- `[ 302.31s]` VERDICT hit_down: **TRUNCATED** sim=0 + - 期望: 下面撞上的。听到低沉的轰隆,向下滑。 + - 听到: 让。 +- `[ 303.07s]` VOICE ■ dir_down (kill) +- `[ 303.07s]` VERDICT dir_down: **MISMATCH** sim=0 + - 期望: 下! + - 听到: 上。 +- `[ 305.31s]` VIBRATE [25,40,25,40,25] +- `[ 305.31s]` SFX ♪ alarm +- `[ 305.81s]` VIBRATE [25,40,25,40,25] +- `[ 305.81s]` SFX ♪ alarm +- `[ 306.31s]` VIBRATE [80] +- `[ 306.31s]` SFX ♪ hit +- `[ 306.31s]` VOICE ▶ hit_down (dur 4.32s) +- `[ 306.31s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 306.31s]` SFX ♪ whoosh_up +- `[ 306.31s]` VOICE ■ hit_down (kill) +- `[ 306.31s]` VOICE ▶ dir_up (dur 0.39909297052154197s) +- `[ 306.31s]` VERDICT hit_down: **TRUNCATED** sim=0.125 + - 期望: 下面撞上的。听到低沉的轰隆,向下滑。 + - 听到: 上。 +- `[ 306.79s]` VOICE ■ dir_up (kill) +- `[ 306.79s]` VOICE ▶ hit_last (dur 2.72s) +- `[ 306.79s]` VERDICT dir_up: **MISMATCH** sim=0 + - 期望: 上! + - 听到: 张。 +- `[ 309.31s]` VIBRATE [25,40,25,40,25] +- `[ 309.31s]` SFX ♪ alarm +- `[ 309.50s]` VOICE ■ hit_last (kill) +- `[ 309.50s]` VOICE ▶ gd_last_life (dur 2.8s) +- `[ 309.50s]` VERDICT hit_last: **OK** sim=0.8696 + - 期望: 船体只剩最后一次了,小心! + - 听到: 团体只剩最后一次了,小心这。 +- `[ 309.81s]` VIBRATE [25,40,25,40,25] +- `[ 309.81s]` SFX ♪ alarm +- `[ 310.31s]` VIBRATE [80] +- `[ 310.31s]` VOICE ■ gd_last_life (kill) +- `[ 310.31s]` VIBRATE [60,40,60] +- `[ 310.31s]` SFX ♪ hit +- `[ 310.31s]` SFX ♪ crash +- `[ 310.31s]` VERDICT gd_last_life: **TRUNCATED** sim=0.4286 + - 期望: 这是最后一次机会,撑住。 + - 听到: 这是最美。 +- `[ 310.62s]` VIBRATE [80] +- `[ 311.52s]` VOICE ▶ time_3 (dur 3.2s) +- `[ 314.96s]` VOICE ■ time_3 (kill) +- `[ 314.96s]` VOICE ▶ dodge_1 (dur 1.36s) +- `[ 314.96s]` VERDICT time_3: **OK** sim=0.8696 + - 期望: 超过一分钟,合格的飞行员。 + - 听到: 超过一分钟,苛格的飞行员只。 +- `[ 316.56s]` VOICE ■ dodge_1 (kill) +- `[ 316.56s]` VOICE ▶ restart_hint (dur 3.68s) +- `[ 316.56s]` VERDICT dodge_1: **MISMATCH** sim=0.4 + - 期望: 只拨开几颗。 + - 听到: 只剥开即可。。 +- `[ 320.39s]` VOICE ■ restart_hint (kill) +- `[ 320.39s]` BGM ♪ menu (loop) +- `[ 320.39s]` VERDICT restart_hint: **OK** sim=0.9091 + - 期望: 单击再飞一次,下滑回大厅。 + - 听到: 单机再飞一次,下滑回大厅。 +- `[ 339.82s]` **GESTURE** tap @(195,422) +- `[ 340.19s]` VIBRATE [20] +- `[ 340.19s]` BGM ♪ engine (loop) +- `[ 341.69s]` SFX ♪ whoosh_down +- `[ 344.30s]` **GESTURE** swipedown @(195,422) +- `[ 344.65s]` VIBRATE [10] +- `[ 344.69s]` VIBRATE [25,40,25,40,25] +- `[ 344.69s]` SFX ♪ alarm +- `[ 345.19s]` VIBRATE [25,40,25,40,25] +- `[ 345.19s]` SFX ♪ alarm +- `[ 345.69s]` SFX ♪ dodge +- `[ 345.69s]` SFX ♪ whoosh_up +- `[ 348.69s]` VIBRATE [25,40,25,40,25] +- `[ 348.69s]` SFX ♪ alarm +- `[ 349.19s]` VIBRATE [25,40,25,40,25] +- `[ 349.19s]` SFX ♪ alarm +- `[ 349.69s]` VIBRATE [30,50,30,50,30] +- `[ 349.69s]` SFX ♪ shield_block +- `[ 349.69s]` VOICE ▶ protect_up (dur 6.96s) +- `[ 349.69s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 349.69s]` SFX ♪ whoosh_up +- `[ 352.69s]` VIBRATE [25,40,25,40,25] +- `[ 352.69s]` SFX ♪ alarm +- `[ 353.19s]` VIBRATE [25,40,25,40,25] +- `[ 353.19s]` SFX ♪ alarm +- `[ 353.69s]` VIBRATE [30,50,30,50,30] +- `[ 353.69s]` SFX ♪ shield_block +- `[ 353.69s]` VOICE ■ protect_up (kill) +- `[ 353.69s]` VERDICT protect_up: **TRUNCATED** sim=0.6471 + - 期望: 训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。 + - 听到: 训练护令接住了,那颗在上面。 +- `[ 353.69s]` VOICE ▶ protect_up (dur 6.96s) +- `[ 353.69s]` SFX ♪ whoosh_right +- `[ 356.69s]` VIBRATE [25,40,25,40,25] +- `[ 356.69s]` SFX ♪ alarm +- `[ 357.19s]` VIBRATE [25,40,25,40,25] +- `[ 357.19s]` SFX ♪ alarm +- `[ 357.69s]` VIBRATE [30,50,30,50,30] +- `[ 357.69s]` SFX ♪ shield_block +- `[ 357.69s]` VOICE ■ protect_up (kill) +- `[ 357.69s]` VOICE ▶ protect_right (dur 7.2s) +- `[ 357.69s]` VERDICT protect_up: **TRUNCATED** sim=0.5882 + - 期望: 训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。 + - 听到: 训练互动接住了,那颗在上面。 +- `[ 357.69s]` SFX ♪ whoosh_left +- `[ 360.69s]` VIBRATE [25,40,25,40,25] +- `[ 360.69s]` SFX ♪ alarm +- `[ 361.19s]` VIBRATE [25,40,25,40,25] +- `[ 361.19s]` SFX ♪ alarm +- `[ 361.69s]` VIBRATE [30,50,30,50,30] +- `[ 361.69s]` SFX ♪ shield_block +- `[ 361.69s]` VOICE ■ protect_right (kill) +- `[ 361.69s]` VOICE ▶ protect_left (dur 7.76s) +- `[ 361.69s]` VERDICT protect_right: **TRUNCATED** sim=0.7059 + - 期望: 训练护盾接住了。那颗在右边,听到右边的呼啸,向右滑。 + - 听到: 训练护盾接住了,那颗在右边。 +- `[ 361.69s]` SFX ♪ whoosh_left +- `[ 364.69s]` VIBRATE [25,40,25,40,25] +- `[ 364.69s]` SFX ♪ alarm +- `[ 365.19s]` VIBRATE [25,40,25,40,25] +- `[ 365.19s]` SFX ♪ alarm +- `[ 365.69s]` VIBRATE [30,50,30,50,30] +- `[ 365.69s]` SFX ♪ shield_block +- `[ 365.69s]` VOICE ■ protect_left (kill) +- `[ 365.69s]` VOICE ▶ protect_left (dur 7.76s) +- `[ 365.69s]` VERDICT protect_left: **TRUNCATED** sim=0.4516 + - 期望: 训练护盾接住了。那颗在左边,听到左边的呼啸,向左滑。 + - 听到: 训练不遁接住了那颗。 +- `[ 365.69s]` SFX ♪ whoosh_right +- `[ 368.70s]` VIBRATE [25,40,25,40,25] +- `[ 368.70s]` SFX ♪ alarm +- `[ 369.20s]` VIBRATE [25,40,25,40,25] +- `[ 369.20s]` SFX ♪ alarm +- `[ 369.70s]` VIBRATE [30,50,30,50,30] +- `[ 369.70s]` SFX ♪ shield_block +- `[ 369.70s]` VOICE ■ protect_left (kill) +- `[ 369.70s]` VOICE ▶ protect_right (dur 7.2s) +- `[ 369.70s]` VERDICT protect_left: **TRUNCATED** sim=0.5625 + - 期望: 训练护盾接住了。那颗在左边,听到左边的呼啸,向左滑。 + - 听到: 训练护盾接住了那颗训。 +- `[ 369.70s]` SFX ♪ whoosh_right +- `[ 371.43s]` **GESTURE** swipedown @(195,422) +- `[ 371.79s]` VIBRATE [10] +- `[ 371.79s]` BGM ♪ menu (loop) +- `[ 371.79s]` VOICE ■ protect_right (kill) +- `[ 371.79s]` VOICE ▶ paused (dur 1.12s) +- `[ 371.79s]` VERDICT protect_right: **TRUNCATED** sim=0.4828 + - 期望: 训练护盾接住了。那颗在右边,听到右边的呼啸,向右滑。 + - 听到: 训练护盾接住了。 +- `[ 372.91s]` VOICE ■ paused (kill) +- `[ 372.91s]` VOICE ▶ menu_main (dur 4.16s) +- `[ 372.91s]` VERDICT paused: **OK** sim=0.6667 + - 期望: 已暂停。 + - 听到: 你暂停。 +- `[ 377.02s]` VOICE ■ menu_main (kill) +- `[ 377.02s]` VOICE ▶ menu_resume (dur 1.12s) +- `[ 377.02s]` VERDICT menu_main: **OK** sim=0.9565 + - 期望: 菜单。单击切换选项,双击确认。 + - 听到: 菜单单击切换选项,双击确。 +- `[ 378.16s]` VOICE ■ menu_resume (kill) +- `[ 378.16s]` VERDICT menu_resume: **OK** sim=1 + - 期望: 继续飞行。 + - 听到: 继续飞行。 +- `[ 404.95s]` **GESTURE** doubletap @(195,422) +- `[ 405.20s]` VIBRATE [20] +- `[ 405.20s]` VIBRATE [30,50,30,50,30] +- `[ 405.20s]` BGM ♪ engine (loop) +- `[ 405.20s]` VOICE ▶ protect_end (dur 5.36s) +- `[ 406.00s]` SFX ♪ whoosh_down +- `[ 406.00s]` VOICE ■ protect_end (kill) +- `[ 406.00s]` VOICE ▶ dir_down (dur 0.5570975056689342s) +- `[ 406.76s]` VOICE ■ dir_down (kill) +- `[ 409.00s]` VIBRATE [25,40,25,40,25] +- `[ 409.00s]` SFX ♪ alarm +- `[ 409.50s]` VIBRATE [25,40,25,40,25] +- `[ 409.50s]` SFX ♪ alarm diff --git a/research/space-polish/round1/live-A-verdicts.json b/research/space-polish/round1/live-A-verdicts.json new file mode 100644 index 00000000..723d2f47 --- /dev/null +++ b/research/space-polish/round1/live-A-verdicts.json @@ -0,0 +1,1979 @@ +{ + "game": "space", + "settings": { + "voice": "male", + "guide": "full", + "speed": 1, + "bgm": 1 + }, + "outdir": "/home/xsl/AutoVideo/SoundGame/web/harness/live/out/space-20260914054721", + "segs": [ + { + "idx": 0, + "voiceId": "drill_welcome", + "t0": 0.111, + "t1": 4.026, + "dur": 3.68, + "expEnd": 3.791, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "欢迎登上盲航,你只有一双耳朵。。", + "similarity": 1 + }, + { + "idx": 1, + "voiceId": "skip_hint", + "t0": 4.027, + "t1": 5.906, + "dur": 1.92, + "expEnd": 5.947, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "单击可跳过磅榜。", + "similarity": 0.7143 + }, + { + "idx": 2, + "voiceId": "drill_rule", + "t0": 5.907, + "t1": 9.738, + "dur": 3.6, + "expEnd": 9.507, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "陨石来了,会有声音告诉你方位停。", + "similarity": 0.963 + }, + { + "idx": 3, + "voiceId": "drill_left", + "t0": 9.746, + "t1": 14.962, + "dur": 4.96, + "expEnd": 14.706, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "停左边有陨石向左滑,把它拨开走。", + "similarity": 0.8889 + }, + { + "idx": 4, + "voiceId": "dir_left", + "t0": 14.962, + "t1": 15.728, + "dur": 0.5570975056689342, + "expEnd": 15.519, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "走。", + "similarity": 0 + }, + { + "idx": 5, + "voiceId": "drill_retry_left", + "t0": 19.471, + "t1": 22.925, + "dur": 3.36, + "expEnd": 22.831, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "那是左边来的,向左滑左。", + "similarity": 0.9474 + }, + { + "idx": 6, + "voiceId": "dir_left", + "t0": 22.925, + "t1": 23.691, + "dur": 0.5570975056689342, + "expEnd": 23.482, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "走。", + "similarity": 0 + }, + { + "idx": 7, + "voiceId": "drill_moveon", + "t0": 27.434, + "t1": 31.539, + "dur": 3.84, + "expEnd": 31.274, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "没关系,跟着我,我们继续。", + "similarity": 1 + }, + { + "idx": 8, + "voiceId": "drill_right", + "t0": 31.546, + "t1": 34.256, + "dur": 2.64, + "expEnd": 34.186, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "这次在右边向右滑右。", + "similarity": 0.9412 + }, + { + "idx": 9, + "voiceId": "dir_right", + "t0": 34.256, + "t1": 34.743, + "dur": 0.39909297052154197, + "expEnd": 34.655, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "救。", + "similarity": 0 + }, + { + "idx": 10, + "voiceId": "drill_retry_right", + "t0": 38.763, + "t1": 42.219, + "dur": 3.2, + "expEnd": 41.963, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "那是右边来的,向右滑右。", + "similarity": 0.9474 + }, + { + "idx": 11, + "voiceId": "dir_right", + "t0": 42.22, + "t1": 42.707, + "dur": 0.39909297052154197, + "expEnd": 42.619, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "救。", + "similarity": 0 + }, + { + "idx": 12, + "voiceId": "drill_moveon", + "t0": 46.72, + "t1": 50.833, + "dur": 3.84, + "expEnd": 50.56, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "没关系,跟着我,我们继续。", + "similarity": 1 + }, + { + "idx": 13, + "voiceId": "drill_up", + "t0": 50.841, + "t1": 55.407, + "dur": 4.24, + "expEnd": 55.081, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "上面有东西,声音又尖又高,向上滑。", + "similarity": 1 + }, + { + "idx": 14, + "voiceId": "dir_up", + "t0": 55.407, + "t1": 55.895, + "dur": 0.39909297052154197, + "expEnd": 55.806, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "上。", + "similarity": 1 + }, + { + "idx": 15, + "voiceId": "drill_retry_up", + "t0": 59.917, + "t1": 64.021, + "dur": 4.08, + "expEnd": 63.997, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "声音又高又尖,是上面向上滑上。", + "similarity": 0.96 + }, + { + "idx": 16, + "voiceId": "dir_up", + "t0": 64.021, + "t1": 64.508, + "dur": 0.39909297052154197, + "expEnd": 64.42, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "上。", + "similarity": 1 + }, + { + "idx": 17, + "voiceId": "drill_good", + "t0": 66.621, + "t1": 67.388, + "dur": 0.7970975056689342, + "expEnd": 67.418, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "你好。", + "similarity": 0 + }, + { + "idx": 18, + "voiceId": "drill_down", + "t0": 67.395, + "t1": 70.847, + "dur": 3.28, + "expEnd": 70.675, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "下面是低沉的轰龙向下滑。", + "similarity": 0.9091 + }, + { + "idx": 19, + "voiceId": "dir_down", + "t0": 70.847, + "t1": 71.613, + "dur": 0.5570975056689342, + "expEnd": 71.404, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "上。", + "similarity": 0 + }, + { + "idx": 20, + "voiceId": "drill_retry_down", + "t0": 75.355, + "t1": 78.068, + "dur": 2.72, + "expEnd": 78.075, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "轰龙声在下面向下火。", + "similarity": 0.7778 + }, + { + "idx": 21, + "voiceId": "dir_down", + "t0": 78.068, + "t1": 78.834, + "dur": 0.5570975056689342, + "expEnd": 78.625, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "上。", + "similarity": 0 + }, + { + "idx": 22, + "voiceId": "drill_moveon", + "t0": 82.568, + "t1": 86.682, + "dur": 3.84, + "expEnd": 86.408, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "没关系,跟着我,我们继续。", + "similarity": 1 + }, + { + "idx": 23, + "voiceId": "drill_done", + "t0": 86.69, + "t1": 91.627, + "dur": 4.72, + "expEnd": 91.41, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "四个方向你都会了,引擎点火。", + "similarity": 0.9231 + }, + { + "idx": 24, + "voiceId": "protect_left", + "t0": 97.131, + "t1": 101.132, + "dur": 7.76, + "expEnd": 104.891, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练护盾接住了那颗训。", + "similarity": 0.5625 + }, + { + "idx": 25, + "voiceId": "protect_right", + "t0": 101.132, + "t1": 105.134, + "dur": 7.2, + "expEnd": 108.332, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练护盾接住了,那颗在右边。", + "similarity": 0.7059 + }, + { + "idx": 26, + "voiceId": "protect_down", + "t0": 105.134, + "t1": 109.135, + "dur": 6.08, + "expEnd": 111.214, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练互动接着,每刻在下面请训。", + "similarity": 0.3429 + }, + { + "idx": 27, + "voiceId": "protect_up", + "t0": 109.135, + "t1": 111.63, + "dur": 6.96, + "expEnd": 116.095, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练互动接住了是。", + "similarity": 0.3333 + }, + { + "idx": 28, + "voiceId": "feat_boost", + "t0": 111.63, + "t1": 118.421, + "dur": 6.48, + "expEnd": 118.11, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "试试单击,引擎会短促加速,直接冲过空隙。", + "similarity": 1 + }, + { + "idx": 29, + "voiceId": "protect_up", + "t0": 126.131, + "t1": 130.132, + "dur": 6.96, + "expEnd": 133.091, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练护刃接住了,那颗在上面训。", + "similarity": 0.6286 + }, + { + "idx": 30, + "voiceId": "protect_up", + "t0": 130.132, + "t1": 134.133, + "dur": 6.96, + "expEnd": 137.092, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练互动接住了,那颗在上面。", + "similarity": 0.5882 + }, + { + "idx": 31, + "voiceId": "protect_right", + "t0": 134.133, + "t1": 136.628, + "dur": 7.2, + "expEnd": 141.333, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练护盾接住了说。", + "similarity": 0.4667 + }, + { + "idx": 32, + "voiceId": "feat_shield", + "t0": 136.628, + "t1": 139.821, + "dur": 4.4, + "expEnd": 141.028, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "双击展开护盾能等。", + "similarity": 0.6667 + }, + { + "idx": 33, + "voiceId": "protect_up", + "t0": 151.129, + "t1": 151.13, + "dur": 6.96, + "expEnd": 158.089, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "哦。", + "similarity": 0 + }, + { + "idx": 34, + "voiceId": "dir_left", + "t0": 151.13, + "t1": 151.627, + "dur": 0.5570975056689342, + "expEnd": 151.687, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "哦。", + "similarity": 0 + }, + { + "idx": 35, + "voiceId": "protect_end", + "t0": 151.627, + "t1": 155.13, + "dur": 5.36, + "expEnd": 156.987, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "哼训练护盾关闭有效。", + "similarity": 0.5217 + }, + { + "idx": 36, + "voiceId": "hit_left", + "t0": 155.13, + "t1": 155.131, + "dur": 4.64, + "expEnd": 159.77, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "让。", + "similarity": 0 + }, + { + "idx": 37, + "voiceId": "dir_down", + "t0": 155.131, + "t1": 155.895, + "dur": 0.5570975056689342, + "expEnd": 155.688, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "跳。", + "similarity": 0 + }, + { + "idx": 38, + "voiceId": "hit_down", + "t0": 159.131, + "t1": 159.132, + "dur": 4.32, + "expEnd": 163.451, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "哦。", + "similarity": 0 + }, + { + "idx": 39, + "voiceId": "dir_left", + "t0": 159.132, + "t1": 159.888, + "dur": 0.5570975056689342, + "expEnd": 159.689, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "哦,你传。", + "similarity": 0 + }, + { + "idx": 40, + "voiceId": "hit_last", + "t0": 159.888, + "t1": 162.605, + "dur": 2.72, + "expEnd": 162.608, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "团体只剩最后一次了,小心这。", + "similarity": 0.8696 + }, + { + "idx": 41, + "voiceId": "gd_last_life", + "t0": 162.605, + "t1": 163.132, + "dur": 2.8, + "expEnd": 165.405, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "这是。", + "similarity": 0.3333 + }, + { + "idx": 42, + "voiceId": "time_3", + "t0": 164.341, + "t1": 167.806, + "dur": 3.2, + "expEnd": 167.541, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "超过1分钟,合格的飞行员。", + "similarity": 0.9091 + }, + { + "idx": 43, + "voiceId": "new_record", + "t0": 167.812, + "t1": 169.407, + "dur": 1.28, + "expEnd": 169.092, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "新记录只。", + "similarity": 0.5714 + }, + { + "idx": 44, + "voiceId": "dodge_1", + "t0": 169.413, + "t1": 171.01, + "dur": 1.36, + "expEnd": 170.773, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "只剥开即可。。", + "similarity": 0.4 + }, + { + "idx": 45, + "voiceId": "restart_hint", + "t0": 171.017, + "t1": 174.841, + "dur": 3.68, + "expEnd": 174.697, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "单机再飞一次,下滑回大厅。", + "similarity": 0.9091 + }, + { + "idx": 46, + "voiceId": "protect_up", + "t0": 246.297, + "t1": 250.298, + "dur": 6.96, + "expEnd": 253.257, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练互动接住了,那颗在上面。", + "similarity": 0.5882 + }, + { + "idx": 47, + "voiceId": "protect_down", + "t0": 250.298, + "t1": 254.299, + "dur": 6.08, + "expEnd": 256.378, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练互动接住了,那颗在下面心奋训。", + "similarity": 0.5405 + }, + { + "idx": 48, + "voiceId": "protect_right", + "t0": 254.299, + "t1": 258.3, + "dur": 7.2, + "expEnd": 261.499, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练护盾接住了,那颗在右边。", + "similarity": 0.7059 + }, + { + "idx": 49, + "voiceId": "protect_down", + "t0": 258.301, + "t1": 262.302, + "dur": 6.08, + "expEnd": 264.381, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练互动接住了,那颗在下面经动训。", + "similarity": 0.5405 + }, + { + "idx": 50, + "voiceId": "protect_right", + "t0": 262.302, + "t1": 266.303, + "dur": 7.2, + "expEnd": 269.502, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练护盾接住了,那颗在右边。", + "similarity": 0.7059 + }, + { + "idx": 51, + "voiceId": "protect_down", + "t0": 266.303, + "t1": 270.304, + "dur": 6.08, + "expEnd": 272.383, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练互动接住了,那刻在下面拼成。", + "similarity": 0.5 + }, + { + "idx": 52, + "voiceId": "protect_down", + "t0": 270.304, + "t1": 274.305, + "dur": 6.08, + "expEnd": 276.384, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练互动接住了,那刻在下面形成训。", + "similarity": 0.4865 + }, + { + "idx": 53, + "voiceId": "protect_down", + "t0": 274.305, + "t1": 278.306, + "dur": 6.08, + "expEnd": 280.385, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练互动接住了,那刻在下面听到训。", + "similarity": 0.5946 + }, + { + "idx": 54, + "voiceId": "protect_right", + "t0": 278.306, + "t1": 282.308, + "dur": 7.2, + "expEnd": 285.506, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练护关接住了,那颗在右边。", + "similarity": 0.6471 + }, + { + "idx": 55, + "voiceId": "protect_up", + "t0": 282.308, + "t1": 285.471, + "dur": 6.96, + "expEnd": 289.268, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练死定接住了那刻在上。", + "similarity": 0.4848 + }, + { + "idx": 56, + "voiceId": "feat_shield_done", + "t0": 285.471, + "t1": 290.309, + "dur": 4.88, + "expEnd": 290.351, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "护盾展开后,会自充能。好了,我会告诉你。", + "similarity": 0.9697 + }, + { + "idx": 57, + "voiceId": "protect_down", + "t0": 290.309, + "t1": 294.31, + "dur": 6.08, + "expEnd": 296.389, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练互动接住了,那刻在下面请训。", + "similarity": 0.5 + }, + { + "idx": 58, + "voiceId": "protect_down", + "t0": 294.31, + "t1": 298.312, + "dur": 6.08, + "expEnd": 300.39, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训念互动接住了,那刻在下面请下。", + "similarity": 0.5 + }, + { + "idx": 59, + "voiceId": "protect_left", + "t0": 298.312, + "t1": 298.313, + "dur": 7.76, + "expEnd": 306.072, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "这。", + "similarity": 0 + }, + { + "idx": 60, + "voiceId": "dir_down", + "t0": 298.313, + "t1": 299.08, + "dur": 0.5570975056689342, + "expEnd": 298.87, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "跳。", + "similarity": 0 + }, + { + "idx": 61, + "voiceId": "shield_block", + "t0": 299.08, + "t1": 300.189, + "dur": 1.6, + "expEnd": 300.68, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "护盾挡下。", + "similarity": 0.7273 + }, + { + "idx": 62, + "voiceId": "shield_ready", + "t0": 300.189, + "t1": 300.796, + "dur": 1.6, + "expEnd": 301.789, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "虎。", + "similarity": 0 + }, + { + "idx": 63, + "voiceId": "protect_end", + "t0": 300.796, + "t1": 301.861, + "dur": 5.36, + "expEnd": 306.156, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "哼。", + "similarity": 0 + }, + { + "idx": 64, + "voiceId": "hit_down", + "t0": 302.313, + "t1": 302.314, + "dur": 4.32, + "expEnd": 306.633, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "让。", + "similarity": 0 + }, + { + "idx": 65, + "voiceId": "dir_down", + "t0": 302.314, + "t1": 303.074, + "dur": 0.5570975056689342, + "expEnd": 302.871, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "上。", + "similarity": 0 + }, + { + "idx": 66, + "voiceId": "hit_down", + "t0": 306.314, + "t1": 306.315, + "dur": 4.32, + "expEnd": 310.634, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "上。", + "similarity": 0.125 + }, + { + "idx": 67, + "voiceId": "dir_up", + "t0": 306.315, + "t1": 306.789, + "dur": 0.39909297052154197, + "expEnd": 306.714, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "张。", + "similarity": 0 + }, + { + "idx": 68, + "voiceId": "hit_last", + "t0": 306.789, + "t1": 309.505, + "dur": 2.72, + "expEnd": 309.509, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "团体只剩最后一次了,小心这。", + "similarity": 0.8696 + }, + { + "idx": 69, + "voiceId": "gd_last_life", + "t0": 309.505, + "t1": 310.315, + "dur": 2.8, + "expEnd": 312.305, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "这是最美。", + "similarity": 0.4286 + }, + { + "idx": 70, + "voiceId": "time_3", + "t0": 311.516, + "t1": 314.961, + "dur": 3.2, + "expEnd": 314.716, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "超过一分钟,苛格的飞行员只。", + "similarity": 0.8696 + }, + { + "idx": 71, + "voiceId": "dodge_1", + "t0": 314.961, + "t1": 316.563, + "dur": 1.36, + "expEnd": 316.321, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "只剥开即可。。", + "similarity": 0.4 + }, + { + "idx": 72, + "voiceId": "restart_hint", + "t0": 316.563, + "t1": 320.394, + "dur": 3.68, + "expEnd": 320.243, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "单机再飞一次,下滑回大厅。", + "similarity": 0.9091 + }, + { + "idx": 73, + "voiceId": "protect_up", + "t0": 349.689, + "t1": 353.69, + "dur": 6.96, + "expEnd": 356.649, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练护令接住了,那颗在上面。", + "similarity": 0.6471 + }, + { + "idx": 74, + "voiceId": "protect_up", + "t0": 353.691, + "t1": 357.692, + "dur": 6.96, + "expEnd": 360.651, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练互动接住了,那颗在上面。", + "similarity": 0.5882 + }, + { + "idx": 75, + "voiceId": "protect_right", + "t0": 357.692, + "t1": 361.693, + "dur": 7.2, + "expEnd": 364.892, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练护盾接住了,那颗在右边。", + "similarity": 0.7059 + }, + { + "idx": 76, + "voiceId": "protect_left", + "t0": 361.693, + "t1": 365.694, + "dur": 7.76, + "expEnd": 369.453, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练不遁接住了那颗。", + "similarity": 0.4516 + }, + { + "idx": 77, + "voiceId": "protect_left", + "t0": 365.694, + "t1": 369.696, + "dur": 7.76, + "expEnd": 373.454, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练护盾接住了那颗训。", + "similarity": 0.5625 + }, + { + "idx": 78, + "voiceId": "protect_right", + "t0": 369.696, + "t1": 371.786, + "dur": 7.2, + "expEnd": 376.896, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练护盾接住了。", + "similarity": 0.4828 + }, + { + "idx": 79, + "voiceId": "paused", + "t0": 371.786, + "t1": 372.913, + "dur": 1.12, + "expEnd": 372.906, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "你暂停。", + "similarity": 0.6667 + }, + { + "idx": 80, + "voiceId": "menu_main", + "t0": 372.913, + "t1": 377.023, + "dur": 4.16, + "expEnd": 377.073, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "菜单单击切换选项,双击确。", + "similarity": 0.9565 + }, + { + "idx": 81, + "voiceId": "menu_resume", + "t0": 377.023, + "t1": 378.16, + "dur": 1.12, + "expEnd": 378.143, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "继续飞行。", + "similarity": 1 + }, + { + "idx": 82, + "voiceId": "protect_end", + "t0": 405.197, + "t1": 405.997, + "dur": 5.36, + "expEnd": 410.557, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 83, + "voiceId": "dir_down", + "t0": 405.997, + "t1": 406.765, + "dur": 0.5570975056689342, + "expEnd": 406.554, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + } + ], + "rows": [ + { + "t0": 0.111, + "t1": 4.026, + "voiceId": "drill_welcome", + "expected": "欢迎登上盲航。你只有一双耳朵。", + "heard": "欢迎登上盲航,你只有一双耳朵。。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 4.027, + "t1": 5.906, + "voiceId": "skip_hint", + "expected": "单击可跳过旁白。", + "heard": "单击可跳过磅榜。", + "similarity": 0.7143, + "verdict": "OK" + }, + { + "t0": 5.907, + "t1": 9.738, + "voiceId": "drill_rule", + "expected": "陨石来了,会有声音告诉你方位。", + "heard": "陨石来了,会有声音告诉你方位停。", + "similarity": 0.963, + "verdict": "OK" + }, + { + "t0": 9.746, + "t1": 14.962, + "voiceId": "drill_left", + "expected": "听,左边有陨石。向左滑,把它拨开!", + "heard": "停左边有陨石向左滑,把它拨开走。", + "similarity": 0.8889, + "verdict": "OK" + }, + { + "t0": 14.962, + "t1": 15.728, + "voiceId": "dir_left", + "expected": "左!", + "heard": "走。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 19.471, + "t1": 22.925, + "voiceId": "drill_retry_left", + "expected": "那是左边来的,向左滑。", + "heard": "那是左边来的,向左滑左。", + "similarity": 0.9474, + "verdict": "OK" + }, + { + "t0": 22.925, + "t1": 23.691, + "voiceId": "dir_left", + "expected": "左!", + "heard": "走。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 27.434, + "t1": 31.539, + "voiceId": "drill_moveon", + "expected": "没关系,跟着我,我们继续。", + "heard": "没关系,跟着我,我们继续。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 15.728, + "t1": 19.471, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 23.691, + "t1": 27.434, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 31.546, + "t1": 34.256, + "voiceId": "drill_right", + "expected": "这次在右边。向右滑!", + "heard": "这次在右边向右滑右。", + "similarity": 0.9412, + "verdict": "OK" + }, + { + "t0": 34.256, + "t1": 34.743, + "voiceId": "dir_right", + "expected": "右!", + "heard": "救。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 38.763, + "t1": 42.219, + "voiceId": "drill_retry_right", + "expected": "那是右边来的,向右滑。", + "heard": "那是右边来的,向右滑右。", + "similarity": 0.9474, + "verdict": "OK" + }, + { + "t0": 42.22, + "t1": 42.707, + "voiceId": "dir_right", + "expected": "右!", + "heard": "救。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 46.72, + "t1": 50.833, + "voiceId": "drill_moveon", + "expected": "没关系,跟着我,我们继续。", + "heard": "没关系,跟着我,我们继续。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 50.841, + "t1": 55.407, + "voiceId": "drill_up", + "expected": "上面有东西,声音又尖又高。向上滑!", + "heard": "上面有东西,声音又尖又高,向上滑。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 34.743, + "t1": 38.763, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 42.707, + "t1": 46.72, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 55.407, + "t1": 55.895, + "voiceId": "dir_up", + "expected": "上!", + "heard": "上。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 59.917, + "t1": 64.021, + "voiceId": "drill_retry_up", + "expected": "声音又高又尖,是上面,向上滑。", + "heard": "声音又高又尖,是上面向上滑上。", + "similarity": 0.96, + "verdict": "OK" + }, + { + "t0": 64.021, + "t1": 64.508, + "voiceId": "dir_up", + "expected": "上!", + "heard": "上。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 66.621, + "t1": 67.388, + "voiceId": "drill_good", + "expected": "漂亮。", + "heard": "你好。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 55.895, + "t1": 59.917, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 64.508, + "t1": 66.621, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 67.395, + "t1": 70.847, + "voiceId": "drill_down", + "expected": "下面是低沉的轰隆。向下滑!", + "heard": "下面是低沉的轰龙向下滑。", + "similarity": 0.9091, + "verdict": "OK" + }, + { + "t0": 70.847, + "t1": 71.613, + "voiceId": "dir_down", + "expected": "下!", + "heard": "上。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 75.355, + "t1": 78.068, + "voiceId": "drill_retry_down", + "expected": "轰隆声在下面,向下滑。", + "heard": "轰龙声在下面向下火。", + "similarity": 0.7778, + "verdict": "OK" + }, + { + "t0": 78.068, + "t1": 78.834, + "voiceId": "dir_down", + "expected": "下!", + "heard": "上。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 82.568, + "t1": 86.682, + "voiceId": "drill_moveon", + "expected": "没关系,跟着我,我们继续。", + "heard": "没关系,跟着我,我们继续。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 86.69, + "t1": 91.627, + "voiceId": "drill_done", + "expected": "四个方向你都会了。引擎点火,出发!", + "heard": "四个方向你都会了,引擎点火。", + "similarity": 0.9231, + "verdict": "OK" + }, + { + "t0": 71.613, + "t1": 75.355, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 78.834, + "t1": 82.568, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 97.131, + "t1": 101.132, + "voiceId": "protect_left", + "expected": "训练护盾接住了。那颗在左边,听到左边的呼啸,向左滑。", + "heard": "训练护盾接住了那颗训。", + "similarity": 0.5625, + "verdict": "TRUNCATED" + }, + { + "t0": 101.132, + "t1": 105.134, + "voiceId": "protect_right", + "expected": "训练护盾接住了。那颗在右边,听到右边的呼啸,向右滑。", + "heard": "训练护盾接住了,那颗在右边。", + "similarity": 0.7059, + "verdict": "TRUNCATED" + }, + { + "t0": 105.134, + "t1": 109.135, + "voiceId": "protect_down", + "expected": "训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。", + "heard": "训练互动接着,每刻在下面请训。", + "similarity": 0.3429, + "verdict": "TRUNCATED" + }, + { + "t0": 109.135, + "t1": 111.63, + "voiceId": "protect_up", + "expected": "训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。", + "heard": "训练互动接住了是。", + "similarity": 0.3333, + "verdict": "TRUNCATED" + }, + { + "t0": 111.63, + "t1": 118.421, + "voiceId": "feat_boost", + "expected": "试试单击,引擎会短促加速,直接冲过空隙。", + "heard": "试试单击,引擎会短促加速,直接冲过空隙。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 91.627, + "t1": 97.131, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 126.131, + "t1": 130.132, + "voiceId": "protect_up", + "expected": "训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。", + "heard": "训练护刃接住了,那颗在上面训。", + "similarity": 0.6286, + "verdict": "TRUNCATED" + }, + { + "t0": 130.132, + "t1": 134.133, + "voiceId": "protect_up", + "expected": "训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。", + "heard": "训练互动接住了,那颗在上面。", + "similarity": 0.5882, + "verdict": "TRUNCATED" + }, + { + "t0": 134.133, + "t1": 136.628, + "voiceId": "protect_right", + "expected": "训练护盾接住了。那颗在右边,听到右边的呼啸,向右滑。", + "heard": "训练护盾接住了说。", + "similarity": 0.4667, + "verdict": "TRUNCATED" + }, + { + "t0": 136.628, + "t1": 139.821, + "voiceId": "feat_shield", + "expected": "双击展开护盾,能挡下一次撞击。", + "heard": "双击展开护盾能等。", + "similarity": 0.6667, + "verdict": "TRUNCATED" + }, + { + "t0": 118.421, + "t1": 126.131, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 151.129, + "t1": 151.13, + "voiceId": "protect_up", + "expected": "训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。", + "heard": "哦。", + "similarity": 0, + "verdict": "TRUNCATED" + }, + { + "t0": 151.13, + "t1": 151.627, + "voiceId": "dir_left", + "expected": "左!", + "heard": "哦。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 151.627, + "t1": 155.13, + "voiceId": "protect_end", + "expected": "训练护盾关闭。接下来,靠你自己了。", + "heard": "哼训练护盾关闭有效。", + "similarity": 0.5217, + "verdict": "TRUNCATED" + }, + { + "t0": 155.13, + "t1": 155.131, + "voiceId": "hit_left", + "expected": "左边撞上的。听到左边的呼啸,向左滑。", + "heard": "让。", + "similarity": 0, + "verdict": "TRUNCATED" + }, + { + "t0": 155.131, + "t1": 155.895, + "voiceId": "dir_down", + "expected": "下!", + "heard": "跳。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 159.131, + "t1": 159.132, + "voiceId": "hit_down", + "expected": "下面撞上的。听到低沉的轰隆,向下滑。", + "heard": "哦。", + "similarity": 0, + "verdict": "TRUNCATED" + }, + { + "t0": 159.132, + "t1": 159.888, + "voiceId": "dir_left", + "expected": "左!", + "heard": "哦,你传。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 159.888, + "t1": 162.605, + "voiceId": "hit_last", + "expected": "船体只剩最后一次了,小心!", + "heard": "团体只剩最后一次了,小心这。", + "similarity": 0.8696, + "verdict": "OK" + }, + { + "t0": 162.605, + "t1": 163.132, + "voiceId": "gd_last_life", + "expected": "这是最后一次机会,撑住。", + "heard": "这是。", + "similarity": 0.3333, + "verdict": "TRUNCATED" + }, + { + "t0": 164.341, + "t1": 167.806, + "voiceId": "time_3", + "expected": "超过一分钟,合格的飞行员。", + "heard": "超过1分钟,合格的飞行员。", + "similarity": 0.9091, + "verdict": "OK" + }, + { + "t0": 167.812, + "t1": 169.407, + "voiceId": "new_record", + "expected": "新纪录!", + "heard": "新记录只。", + "similarity": 0.5714, + "verdict": "MISMATCH" + }, + { + "t0": 169.413, + "t1": 171.01, + "voiceId": "dodge_1", + "expected": "只拨开几颗。", + "heard": "只剥开即可。。", + "similarity": 0.4, + "verdict": "MISMATCH" + }, + { + "t0": 171.017, + "t1": 174.841, + "voiceId": "restart_hint", + "expected": "单击再飞一次,下滑回大厅。", + "heard": "单机再飞一次,下滑回大厅。", + "similarity": 0.9091, + "verdict": "OK" + }, + { + "t0": 139.821, + "t1": 151.129, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 155.895, + "t1": 159.131, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 246.297, + "t1": 250.298, + "voiceId": "protect_up", + "expected": "训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。", + "heard": "训练互动接住了,那颗在上面。", + "similarity": 0.5882, + "verdict": "TRUNCATED" + }, + { + "t0": 250.298, + "t1": 254.299, + "voiceId": "protect_down", + "expected": "训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。", + "heard": "训练互动接住了,那颗在下面心奋训。", + "similarity": 0.5405, + "verdict": "TRUNCATED" + }, + { + "t0": 254.299, + "t1": 258.3, + "voiceId": "protect_right", + "expected": "训练护盾接住了。那颗在右边,听到右边的呼啸,向右滑。", + "heard": "训练护盾接住了,那颗在右边。", + "similarity": 0.7059, + "verdict": "TRUNCATED" + }, + { + "t0": 258.301, + "t1": 262.302, + "voiceId": "protect_down", + "expected": "训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。", + "heard": "训练互动接住了,那颗在下面经动训。", + "similarity": 0.5405, + "verdict": "TRUNCATED" + }, + { + "t0": 174.841, + "t1": 246.297, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 262.302, + "t1": 266.303, + "voiceId": "protect_right", + "expected": "训练护盾接住了。那颗在右边,听到右边的呼啸,向右滑。", + "heard": "训练护盾接住了,那颗在右边。", + "similarity": 0.7059, + "verdict": "TRUNCATED" + }, + { + "t0": 266.303, + "t1": 270.304, + "voiceId": "protect_down", + "expected": "训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。", + "heard": "训练互动接住了,那刻在下面拼成。", + "similarity": 0.5, + "verdict": "TRUNCATED" + }, + { + "t0": 270.304, + "t1": 274.305, + "voiceId": "protect_down", + "expected": "训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。", + "heard": "训练互动接住了,那刻在下面形成训。", + "similarity": 0.4865, + "verdict": "TRUNCATED" + }, + { + "t0": 274.305, + "t1": 278.306, + "voiceId": "protect_down", + "expected": "训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。", + "heard": "训练互动接住了,那刻在下面听到训。", + "similarity": 0.5946, + "verdict": "TRUNCATED" + }, + { + "t0": 278.306, + "t1": 282.308, + "voiceId": "protect_right", + "expected": "训练护盾接住了。那颗在右边,听到右边的呼啸,向右滑。", + "heard": "训练护关接住了,那颗在右边。", + "similarity": 0.6471, + "verdict": "TRUNCATED" + }, + { + "t0": 282.308, + "t1": 285.471, + "voiceId": "protect_up", + "expected": "训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。", + "heard": "训练死定接住了那刻在上。", + "similarity": 0.4848, + "verdict": "TRUNCATED" + }, + { + "t0": 285.471, + "t1": 290.309, + "voiceId": "feat_shield_done", + "expected": "护盾展开后会自动充能,好了我会告诉你。", + "heard": "护盾展开后,会自充能。好了,我会告诉你。", + "similarity": 0.9697, + "verdict": "OK" + }, + { + "t0": 290.309, + "t1": 294.31, + "voiceId": "protect_down", + "expected": "训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。", + "heard": "训练互动接住了,那刻在下面请训。", + "similarity": 0.5, + "verdict": "TRUNCATED" + }, + { + "t0": 294.31, + "t1": 298.312, + "voiceId": "protect_down", + "expected": "训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。", + "heard": "训念互动接住了,那刻在下面请下。", + "similarity": 0.5, + "verdict": "TRUNCATED" + }, + { + "t0": 298.312, + "t1": 298.313, + "voiceId": "protect_left", + "expected": "训练护盾接住了。那颗在左边,听到左边的呼啸,向左滑。", + "heard": "这。", + "similarity": 0, + "verdict": "TRUNCATED" + }, + { + "t0": 298.313, + "t1": 299.08, + "voiceId": "dir_down", + "expected": "下!", + "heard": "跳。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 299.08, + "t1": 300.189, + "voiceId": "shield_block", + "expected": "护盾挡下了撞击。", + "heard": "护盾挡下。", + "similarity": 0.7273, + "verdict": "TRUNCATED" + }, + { + "t0": 300.189, + "t1": 300.796, + "voiceId": "shield_ready", + "expected": "护盾充能完毕。", + "heard": "虎。", + "similarity": 0, + "verdict": "TRUNCATED" + }, + { + "t0": 300.796, + "t1": 301.861, + "voiceId": "protect_end", + "expected": "训练护盾关闭。接下来,靠你自己了。", + "heard": "哼。", + "similarity": 0, + "verdict": "TRUNCATED" + }, + { + "t0": 302.313, + "t1": 302.314, + "voiceId": "hit_down", + "expected": "下面撞上的。听到低沉的轰隆,向下滑。", + "heard": "让。", + "similarity": 0, + "verdict": "TRUNCATED" + }, + { + "t0": 302.314, + "t1": 303.074, + "voiceId": "dir_down", + "expected": "下!", + "heard": "上。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 306.314, + "t1": 306.315, + "voiceId": "hit_down", + "expected": "下面撞上的。听到低沉的轰隆,向下滑。", + "heard": "上。", + "similarity": 0.125, + "verdict": "TRUNCATED" + }, + { + "t0": 306.315, + "t1": 306.789, + "voiceId": "dir_up", + "expected": "上!", + "heard": "张。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 306.789, + "t1": 309.505, + "voiceId": "hit_last", + "expected": "船体只剩最后一次了,小心!", + "heard": "团体只剩最后一次了,小心这。", + "similarity": 0.8696, + "verdict": "OK" + }, + { + "t0": 309.505, + "t1": 310.315, + "voiceId": "gd_last_life", + "expected": "这是最后一次机会,撑住。", + "heard": "这是最美。", + "similarity": 0.4286, + "verdict": "TRUNCATED" + }, + { + "t0": 311.516, + "t1": 314.961, + "voiceId": "time_3", + "expected": "超过一分钟,合格的飞行员。", + "heard": "超过一分钟,苛格的飞行员只。", + "similarity": 0.8696, + "verdict": "OK" + }, + { + "t0": 314.961, + "t1": 316.563, + "voiceId": "dodge_1", + "expected": "只拨开几颗。", + "heard": "只剥开即可。。", + "similarity": 0.4, + "verdict": "MISMATCH" + }, + { + "t0": 316.563, + "t1": 320.394, + "voiceId": "restart_hint", + "expected": "单击再飞一次,下滑回大厅。", + "heard": "单机再飞一次,下滑回大厅。", + "similarity": 0.9091, + "verdict": "OK" + }, + { + "t0": 303.074, + "t1": 306.314, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 349.689, + "t1": 353.69, + "voiceId": "protect_up", + "expected": "训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。", + "heard": "训练护令接住了,那颗在上面。", + "similarity": 0.6471, + "verdict": "TRUNCATED" + }, + { + "t0": 353.691, + "t1": 357.692, + "voiceId": "protect_up", + "expected": "训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。", + "heard": "训练互动接住了,那颗在上面。", + "similarity": 0.5882, + "verdict": "TRUNCATED" + }, + { + "t0": 357.692, + "t1": 361.693, + "voiceId": "protect_right", + "expected": "训练护盾接住了。那颗在右边,听到右边的呼啸,向右滑。", + "heard": "训练护盾接住了,那颗在右边。", + "similarity": 0.7059, + "verdict": "TRUNCATED" + }, + { + "t0": 361.693, + "t1": 365.694, + "voiceId": "protect_left", + "expected": "训练护盾接住了。那颗在左边,听到左边的呼啸,向左滑。", + "heard": "训练不遁接住了那颗。", + "similarity": 0.4516, + "verdict": "TRUNCATED" + }, + { + "t0": 365.694, + "t1": 369.696, + "voiceId": "protect_left", + "expected": "训练护盾接住了。那颗在左边,听到左边的呼啸,向左滑。", + "heard": "训练护盾接住了那颗训。", + "similarity": 0.5625, + "verdict": "TRUNCATED" + }, + { + "t0": 369.696, + "t1": 371.786, + "voiceId": "protect_right", + "expected": "训练护盾接住了。那颗在右边,听到右边的呼啸,向右滑。", + "heard": "训练护盾接住了。", + "similarity": 0.4828, + "verdict": "TRUNCATED" + }, + { + "t0": 371.786, + "t1": 372.913, + "voiceId": "paused", + "expected": "已暂停。", + "heard": "你暂停。", + "similarity": 0.6667, + "verdict": "OK" + }, + { + "t0": 372.913, + "t1": 377.023, + "voiceId": "menu_main", + "expected": "菜单。单击切换选项,双击确认。", + "heard": "菜单单击切换选项,双击确。", + "similarity": 0.9565, + "verdict": "OK" + }, + { + "t0": 377.023, + "t1": 378.16, + "voiceId": "menu_resume", + "expected": "继续飞行。", + "heard": "继续飞行。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 320.394, + "t1": 349.689, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + } + ] +} \ No newline at end of file diff --git a/research/space-polish/round1/live-B-transcript.md b/research/space-polish/round1/live-B-transcript.md new file mode 100644 index 00000000..3fae8c1b --- /dev/null +++ b/research/space-polish/round1/live-B-transcript.md @@ -0,0 +1,617 @@ +# space 实时会话 transcript + +- `[ -0.08s]` **GESTURE** tap @(195,422) +- `[ 0.00s]` REC 开始 (audio/webm;codecs=opus) +- `[ 0.10s]` VOICE ▶ second_run_ask (dur 3.04s) +- `[ 2.35s]` VOICE ■ second_run_ask (kill) +- `[ 2.35s]` VERDICT second_run_ask: **OK** sim=0.96 + - 期望: 上滑重新听演练,单击直接出发。 + - 听到: 上滑重新听演练,单击直接出。 +- `[ 2.41s]` **GESTURE** tap @(195,422) +- `[ 2.78s]` VIBRATE [20] +- `[ 2.97s]` BGM ♪ engine (loop) +- `[ 3.59s]` **GESTURE** tap @(195,422) +- `[ 3.95s]` VIBRATE [20] +- `[ 4.28s]` SFX ♪ whoosh_up +- `[ 4.76s]` **GESTURE** tap @(195,422) +- `[ 5.12s]` VIBRATE [20] +- `[ 5.93s]` **GESTURE** swipeleft @(195,422) +- `[ 6.30s]` VIBRATE [10] +- `[ 7.28s]` VIBRATE [25,40,25,40,25] +- `[ 7.28s]` SFX ♪ alarm +- `[ 7.71s]` **GESTURE** swiperight @(195,422) +- `[ 7.78s]` VIBRATE [25,40,25,40,25] +- `[ 7.78s]` SFX ♪ alarm +- `[ 8.06s]` VIBRATE [10] +- `[ 8.28s]` VIBRATE [30,50,30,50,30] +- `[ 8.28s]` SFX ♪ shield_block +- `[ 8.28s]` VOICE ▶ protect_up (dur 4.8s) +- `[ 8.28s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 8.28s]` SFX ♪ whoosh_down +- `[ 11.28s]` VIBRATE [25,40,25,40,25] +- `[ 11.28s]` SFX ♪ alarm +- `[ 11.78s]` VIBRATE [25,40,25,40,25] +- `[ 11.78s]` SFX ♪ alarm +- `[ 11.94s]` VOICE ■ protect_up (kill) +- `[ 11.94s]` VERDICT protect_up: **OK** sim=0.6977 + - 期望: 训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。 + - 听到: 训练护动接住,那裤子上面听到高高的呼啸,肖哨话。 +- `[ 12.28s]` VIBRATE [30,50,30,50,30] +- `[ 12.28s]` SFX ♪ shield_block +- `[ 12.28s]` VOICE ▶ protect_down (dur 5.04s) +- `[ 12.29s]` SFX ♪ whoosh_down +- `[ 15.29s]` VIBRATE [25,40,25,40,25] +- `[ 15.29s]` SFX ♪ alarm +- `[ 15.79s]` VIBRATE [25,40,25,40,25] +- `[ 15.79s]` SFX ♪ alarm +- `[ 16.21s]` VOICE ■ protect_down (kill) +- `[ 16.21s]` VERDICT protect_down: **OK** sim=0.8837 + - 期望: 训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。 + - 听到: 训练护盾切住,那刻在下面听到低沉的轰隆向下滑。 +- `[ 16.29s]` VIBRATE [30,50,30,50,30] +- `[ 16.29s]` SFX ♪ shield_block +- `[ 16.29s]` VOICE ▶ protect_down (dur 5.04s) +- `[ 16.29s]` SFX ♪ whoosh_up +- `[ 19.29s]` VIBRATE [25,40,25,40,25] +- `[ 19.29s]` SFX ♪ alarm +- `[ 19.79s]` VIBRATE [25,40,25,40,25] +- `[ 19.79s]` SFX ♪ alarm +- `[ 20.20s]` VOICE ■ protect_down (kill) +- `[ 20.20s]` VERDICT protect_down: **OK** sim=0.7442 + - 期望: 训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。 + - 听到: 训疗后段接轨,那刻在下面听到低沉的轰隆向下滑。 +- `[ 20.29s]` VIBRATE [30,50,30,50,30] +- `[ 20.29s]` SFX ♪ shield_block +- `[ 20.29s]` VOICE ▶ protect_up (dur 4.8s) +- `[ 20.29s]` SFX ♪ whoosh_left +- `[ 22.78s]` VOICE ■ protect_up (kill) +- `[ 22.78s]` VOICE ▶ feat_boost (dur 3.84s) +- `[ 22.78s]` VERDICT protect_up: **TRUNCATED** sim=0.5143 + - 期望: 训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。 + - 听到: 训练互动接住,那刻子上面听到。 +- `[ 25.87s]` VOICE ■ feat_boost (kill) +- `[ 25.87s]` VERDICT feat_boost: **OK** sim=0.8235 + - 期望: 试试单击,引擎会短促加速,直接冲过空隙。 + - 听到: 试试单机,引擎或短途加速,直接冲过空隙。 +- `[ 27.43s]` **GESTURE** doubletap @(195,422) +- `[ 27.68s]` VIBRATE [20] +- `[ 29.35s]` **GESTURE** tap @(195,422) +- `[ 29.71s]` VIBRATE [20] +- `[ 29.71s]` SFX ♪ boost +- `[ 29.71s]` VOICE ▶ feat_boost_done (dur 3.44s) +- `[ 29.71s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 31.14s]` **GESTURE** swiperight @(195,422) +- `[ 31.49s]` VIBRATE [10] +- `[ 32.21s]` SFX ♪ whoosh_left +- `[ 32.23s]` VOICE ■ feat_boost_done (kill) +- `[ 32.23s]` VERDICT feat_boost_done: **OK** sim=0.8387 + - 期望: 感觉到了吗?加速的时候,陨石撞不上你。 + - 听到: 感觉到了吗?下死的时候陨石撞不上。 +- `[ 32.95s]` **GESTURE** tap @(195,422) +- `[ 33.31s]` VIBRATE [20] +- `[ 33.31s]` SFX ♪ boost +- `[ 34.09s]` **GESTURE** tap @(195,422) +- `[ 34.45s]` VIBRATE [20] +- `[ 35.21s]` VIBRATE [25,40,25,40,25] +- `[ 35.21s]` SFX ♪ alarm +- `[ 35.60s]` **GESTURE** doubletap @(195,422) +- `[ 35.71s]` VIBRATE [25,40,25,40,25] +- `[ 35.71s]` SFX ♪ alarm +- `[ 35.85s]` VIBRATE [20] +- `[ 35.85s]` VIBRATE [40,100,40] +- `[ 35.85s]` VOICE ▶ feat_shield_done (dur 4.64s) +- `[ 35.85s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 36.21s]` VIBRATE [30,50,30,50,30] +- `[ 36.21s]` SFX ♪ shield_block +- `[ 36.21s]` VOICE ■ feat_shield_done (kill) +- `[ 36.21s]` VOICE ▶ protect_left (dur 6.32s) +- `[ 36.21s]` VERDICT feat_shield_done: **TRUNCATED** sim=0 + - 期望: 护盾展开后会自动充能,好了我会告诉你。 + - 听到: 。 +- `[ 36.21s]` SFX ♪ whoosh_right +- `[ 37.12s]` **GESTURE** swipeleft @(195,422) +- `[ 37.48s]` VIBRATE [10] +- `[ 38.47s]` **GESTURE** swipedown @(195,422) +- `[ 38.83s]` VIBRATE [10] +- `[ 38.83s]` VOICE ■ protect_left (kill) +- `[ 38.83s]` VOICE ▶ paused (dur 0.9570975056689343s) +- `[ 38.83s]` VERDICT protect_left: **TRUNCATED** sim=0.5455 + - 期望: 训练护盾接住了。那颗在左边,听到左边的呼啸,向左滑。 + - 听到: 训练护臀接住,内颗在左边。 +- `[ 38.97s]` BGM ♪ menu (loop) +- `[ 39.77s]` VOICE ■ paused (kill) +- `[ 39.77s]` VOICE ▶ menu_main (dur 3.92s) +- `[ 39.77s]` VERDICT paused: **OK** sim=1 + - 期望: 已暂停。 + - 听到: 已暂停。 +- `[ 40.64s]` **GESTURE** swipedown @(195,422) +- `[ 40.99s]` VIBRATE [10] +- `[ 40.99s]` BGM ♪ engine (loop) +- `[ 41.79s]` SFX ♪ whoosh_up +- `[ 42.44s]` **GESTURE** swipedown @(195,422) +- `[ 42.79s]` VIBRATE [10] +- `[ 42.79s]` BGM ♪ menu (loop) +- `[ 42.79s]` VOICE ■ menu_main (kill) +- `[ 42.79s]` VOICE ▶ paused (dur 0.9570975056689343s) +- `[ 42.79s]` VERDICT menu_main: **OK** sim=1 + - 期望: 菜单。单击切换选项,双击确认。 + - 听到: 菜单单击切换选项,双击确认。 +- `[ 43.74s]` VOICE ■ paused (kill) +- `[ 43.74s]` VOICE ▶ menu_main (dur 3.92s) +- `[ 43.74s]` VERDICT paused: **OK** sim=1 + - 期望: 已暂停。 + - 听到: 已暂停。 +- `[ 44.55s]` **GESTURE** swipeup @(195,422) +- `[ 44.91s]` VIBRATE [10] +- `[ 44.91s]` VOICE ■ menu_main (kill) +- `[ 44.91s]` VOICE ▶ help_recap (dur 8.4s) +- `[ 44.91s]` VERDICT menu_main: **TRUNCATED** sim=0.2857 + - 期望: 菜单。单击切换选项,双击确认。 + - 听到: 菜单。 +- `[ 45.89s]` **GESTURE** tap @(195,422) +- `[ 46.26s]` VIBRATE [20] +- `[ 46.26s]` VOICE ■ help_recap (kill) +- `[ 46.26s]` VOICE ▶ menu_lobby (dur 1.04s) +- `[ 46.26s]` VERDICT help_recap: **TRUNCATED** sim=0.359 + - 期望: 左边来向左滑,右边来向右滑,上面来向上滑,下面来向下滑。单击加速,双击护盾。 + - 听到: 左边来向左滑右。 +- `[ 47.20s]` VOICE ■ menu_lobby (kill) +- `[ 47.20s]` VERDICT menu_lobby: **OK** sim=1 + - 期望: 回大厅。 + - 听到: 回大厅。 +- `[ 47.39s]` **GESTURE** swipeup @(195,422) +- `[ 47.74s]` VIBRATE [10] +- `[ 47.74s]` VOICE ▶ help_recap (dur 8.4s) +- `[ 48.88s]` **GESTURE** tap @(195,422) +- `[ 49.25s]` VIBRATE [20] +- `[ 49.25s]` VOICE ■ help_recap (kill) +- `[ 49.25s]` VERDICT help_recap: **TRUNCATED** sim=0.4 + - 期望: 左边来向左滑,右边来向右滑,上面来向上滑,下面来向下滑。单击加速,双击护盾。 + - 听到: 左边来向左滑,右边。 +- `[ 49.25s]` VOICE ▶ menu_help (dur 1.6s) +- `[ 50.46s]` **GESTURE** doubletap @(195,422) +- `[ 50.48s]` VOICE ■ menu_help (kill) +- `[ 50.48s]` VERDICT menu_help: **OK** sim=0.875 + - 期望: 重新听教学要点。 + - 听到: 右边重新听教学要点。 +- `[ 50.71s]` VIBRATE [20] +- `[ 50.71s]` VOICE ▶ help_recap (dur 8.4s) +- `[ 51.70s]` **GESTURE** swipeleft @(195,422) +- `[ 52.06s]` VIBRATE [10] +- `[ 53.26s]` **GESTURE** tap @(195,422) +- `[ 53.62s]` VIBRATE [20] +- `[ 53.62s]` VOICE ■ help_recap (kill) +- `[ 53.62s]` VOICE ▶ menu_resume (dur 1.12s) +- `[ 53.62s]` VERDICT help_recap: **TRUNCATED** sim=0.6383 + - 期望: 左边来向左滑,右边来向右滑,上面来向上滑,下面来向下滑。单击加速,双击护盾。 + - 听到: 左边来向左滑,右边来向右滑,上面来。 +- `[ 54.56s]` VOICE ■ menu_resume (kill) +- `[ 54.56s]` VERDICT menu_resume: **OK** sim=0.8889 + - 期望: 继续飞行。 + - 听到: 来继续飞行。 +- `[ 55.26s]` **GESTURE** swipeup @(195,422) +- `[ 55.63s]` VIBRATE [10] +- `[ 55.63s]` VOICE ▶ help_recap (dur 8.4s) +- `[ 56.97s]` **GESTURE** tap @(195,422) +- `[ 57.33s]` VIBRATE [20] +- `[ 57.33s]` VOICE ■ help_recap (kill) +- `[ 57.33s]` VOICE ▶ menu_lobby (dur 1.04s) +- `[ 57.33s]` VERDICT help_recap: **TRUNCATED** sim=0.439 + - 期望: 左边来向左滑,右边来向右滑,上面来向上滑,下面来向下滑。单击加速,双击护盾。 + - 听到: 左边来向左滑,右边来。 +- `[ 58.28s]` VOICE ■ menu_lobby (kill) +- `[ 58.28s]` VERDICT menu_lobby: **OK** sim=0.8571 + - 期望: 回大厅。 + - 听到: 来回大厅。 +- `[ 58.63s]` **GESTURE** swipedown @(195,422) +- `[ 58.99s]` VIBRATE [10] +- `[ 58.99s]` BGM ♪ engine (loop) +- `[ 58.99s]` VOICE ▶ feat_shield (dur 2.8s) +- `[ 61.00s]` **GESTURE** swipeup @(195,422) +- `[ 61.25s]` VOICE ■ feat_shield (kill) +- `[ 61.25s]` VERDICT feat_shield: **OK** sim=1 + - 期望: 双击展开护盾,能挡下一次撞击。 + - 听到: 双击展开护盾,能挡下一次撞击。 +- `[ 61.36s]` VIBRATE [10] +- `[ 63.06s]` **GESTURE** swipedown @(195,422) +- `[ 63.43s]` VIBRATE [10] +- `[ 64.37s]` **GESTURE** swipeup @(195,422) +- `[ 64.73s]` VIBRATE [10] +- `[ 66.60s]` **GESTURE** doubletap @(195,422) +- `[ 66.84s]` VIBRATE [20] +- `[ 66.84s]` VIBRATE [30,50,30,50,30] +- `[ 66.84s]` SFX ♪ shield +- `[ 66.84s]` VOICE ▶ feat_shield_done (dur 4.64s) +- `[ 66.84s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 66.84s]` VOICE ■ feat_shield_done (kill) +- `[ 66.84s]` VOICE ▶ protect_end (dur 3.6s) +- `[ 66.84s]` VERDICT feat_shield_done: **TRUNCATED** sim=0 + - 期望: 护盾展开后会自动充能,好了我会告诉你。 + - 听到: 不是。 +- `[ 68.72s]` **GESTURE** swipedown @(195,422) +- `[ 69.08s]` VIBRATE [10] +- `[ 69.08s]` BGM ♪ menu (loop) +- `[ 69.08s]` VOICE ■ protect_end (kill) +- `[ 69.08s]` VOICE ▶ paused (dur 0.9570975056689343s) +- `[ 69.08s]` VERDICT protect_end: **TRUNCATED** sim=0.6087 + - 期望: 训练护盾关闭。接下来,靠你自己了。 + - 听到: 训练部动关闭,接下来。 +- `[ 70.03s]` VOICE ■ paused (kill) +- `[ 70.03s]` VOICE ▶ menu_main (dur 3.92s) +- `[ 70.03s]` VERDICT paused: **OK** sim=1 + - 期望: 已暂停。 + - 听到: 已暂停。 +- `[ 71.05s]` **GESTURE** doubletap @(195,422) +- `[ 71.30s]` VIBRATE [20] +- `[ 71.30s]` BGM ♪ engine (loop) +- `[ 72.10s]` SFX ♪ whoosh_left +- `[ 72.10s]` VOICE ■ menu_main (kill) +- `[ 72.10s]` VOICE ▶ dir_left (dur 0.39909297052154197s) +- `[ 72.10s]` VERDICT menu_main: **TRUNCATED** sim=0.8 + - 期望: 菜单。单击切换选项,双击确认。 + - 听到: 菜单单击切换选项。 +- `[ 72.49s]` VOICE ■ dir_left (kill) +- `[ 72.49s]` VERDICT dir_left: **MISMATCH** sim=0 + - 期望: 左! + - 听到: 走。 +- `[ 72.75s]` **GESTURE** swiperight @(195,422) +- `[ 73.11s]` VIBRATE [10] +- `[ 74.97s]` **GESTURE** swipeup @(195,422) +- `[ 75.10s]` VIBRATE [25,40,25,40,25] +- `[ 75.10s]` SFX ♪ alarm +- `[ 75.33s]` VIBRATE [10] +- `[ 75.60s]` VIBRATE [25,40,25,40,25] +- `[ 75.60s]` SFX ♪ alarm +- `[ 76.10s]` VIBRATE [80] +- `[ 76.10s]` SFX ♪ hit +- `[ 76.10s]` VOICE ▶ hit_left (dur 3.52s) +- `[ 76.10s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 76.10s]` SFX ♪ whoosh_down +- `[ 76.10s]` VOICE ■ hit_left (kill) +- `[ 76.10s]` VOICE ▶ dir_down (dur 0.39909297052154197s) +- `[ 76.10s]` VERDICT hit_left: **TRUNCATED** sim=0 + - 期望: 左边撞上的。听到左边的呼啸,向左滑。 + - 听到: 嗯。 +- `[ 76.50s]` VOICE ■ dir_down (kill) +- `[ 76.50s]` VERDICT dir_down: **MISMATCH** sim=0 + - 期望: 下! + - 听到: 回这。 +- `[ 77.18s]` **GESTURE** tap @(195,422) +- `[ 77.54s]` VIBRATE [20] +- `[ 77.54s]` SFX ♪ boost +- `[ 79.10s]` **GESTURE** swipedown @(195,422) +- `[ 79.10s]` VIBRATE [25,40,25,40,25] +- `[ 79.10s]` SFX ♪ alarm +- `[ 79.46s]` VIBRATE [10] +- `[ 79.60s]` VIBRATE [25,40,25,40,25] +- `[ 79.60s]` SFX ♪ alarm +- `[ 80.10s]` SFX ♪ dodge +- `[ 80.10s]` SFX ♪ whoosh_down +- `[ 80.10s]` VOICE ▶ dir_down (dur 0.39909297052154197s) +- `[ 80.10s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 80.50s]` VOICE ■ dir_down (kill) +- `[ 80.50s]` VERDICT dir_down: **OK** sim=0.6667 + - 期望: 下! + - 听到: 下你。 +- `[ 80.74s]` **GESTURE** swipeleft @(195,422) +- `[ 81.09s]` VIBRATE [10] +- `[ 81.84s]` VIBRATE [15] +- `[ 81.84s]` VOICE ▶ shield_ready (dur 1.28s) +- `[ 82.27s]` **GESTURE** tap @(195,422) +- `[ 82.64s]` VIBRATE [20] +- `[ 82.64s]` VOICE ■ shield_ready (kill) +- `[ 82.64s]` VERDICT shield_ready: **TRUNCATED** sim=0 + - 期望: 护盾充能完毕。 + - 听到: 不段冲动。 +- `[ 83.01s]` SFX ♪ whoosh_down +- `[ 83.01s]` VOICE ▶ dir_down (dur 0.39909297052154197s) +- `[ 83.10s]` VIBRATE [25,40,25,40,25] +- `[ 83.10s]` SFX ♪ alarm +- `[ 83.40s]` VOICE ■ dir_down (kill) +- `[ 83.40s]` VERDICT dir_down: **MISMATCH** sim=0 + - 期望: 下! + - 听到: 这。 +- `[ 83.60s]` VIBRATE [25,40,25,40,25] +- `[ 83.60s]` SFX ♪ alarm +- `[ 84.10s]` VIBRATE [80] +- `[ 84.10s]` SFX ♪ hit +- `[ 84.10s]` VOICE ▶ hit_down (dur 5.28s) +- `[ 84.25s]` **GESTURE** swipedown @(195,422) +- `[ 84.61s]` VIBRATE [10] +- `[ 84.64s]` VIBRATE [25,40,25,40,25] +- `[ 84.64s]` SFX ♪ alarm +- `[ 85.14s]` VIBRATE [25,40,25,40,25] +- `[ 85.14s]` SFX ♪ alarm +- `[ 85.64s]` SFX ♪ dodge +- `[ 85.88s]` SFX ♪ whoosh_right +- `[ 85.88s]` VOICE ■ hit_down (kill) +- `[ 85.88s]` VOICE ▶ dir_right (dur 0.7170975056689343s) +- `[ 85.88s]` VERDICT hit_down: **TRUNCATED** sim=0.2105 + - 期望: 下面撞上的。听到低沉的轰隆,向下滑。 + - 听到: 向你撞上。 +- `[ 86.30s]` **GESTURE** tap @(195,422) +- `[ 86.53s]` VOICE ■ dir_right (kill) +- `[ 86.53s]` VOICE ▶ hit_last (dur 2.88s) +- `[ 86.53s]` VERDICT dir_right: **MISMATCH** sim=0 + - 期望: 右! + - 听到: 娘。 +- `[ 86.66s]` VIBRATE [20] +- `[ 86.66s]` VOICE ■ hit_last (kill) +- `[ 86.66s]` VERDICT hit_last: **TRUNCATED** sim=0 + - 期望: 船体只剩最后一次了,小心! + - 听到: 啊。 +- `[ 87.48s]` VIBRATE [25,40,25,40,25] +- `[ 87.48s]` SFX ♪ alarm +- `[ 87.94s]` **GESTURE** tap @(195,422) +- `[ 87.98s]` VIBRATE [25,40,25,40,25] +- `[ 87.98s]` SFX ♪ alarm +- `[ 88.30s]` VIBRATE [20] +- `[ 88.30s]` SFX ♪ boost +- `[ 88.48s]` SFX ♪ dodge +- `[ 88.69s]` SFX ♪ whoosh_left +- `[ 88.69s]` VOICE ▶ dir_left (dur 0.39909297052154197s) +- `[ 88.69s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 89.09s]` VOICE ■ dir_left (kill) +- `[ 89.09s]` VERDICT dir_left: **MISMATCH** sim=0 + - 期望: 左! + - 听到: 我。 +- `[ 89.46s]` **GESTURE** doubletap @(195,422) +- `[ 89.70s]` VIBRATE [20] +- `[ 89.70s]` SFX ♪ shield +- `[ 90.28s]` VIBRATE [25,40,25,40,25] +- `[ 90.28s]` SFX ♪ alarm +- `[ 90.78s]` VIBRATE [25,40,25,40,25] +- `[ 90.78s]` SFX ♪ alarm +- `[ 90.96s]` **GESTURE** swipeup @(195,422) +- `[ 91.28s]` VIBRATE [100] +- `[ 91.28s]` SFX ♪ shield_block +- `[ 91.28s]` VOICE ▶ shield_block (dur 1.44s) +- `[ 91.28s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 91.31s]` VIBRATE [10] +- `[ 91.46s]` SFX ♪ whoosh_down +- `[ 91.46s]` VOICE ■ shield_block (kill) +- `[ 91.46s]` VOICE ▶ dir_down (dur 0.39909297052154197s) +- `[ 91.46s]` VERDICT shield_block: **TRUNCATED** sim=0 + - 期望: 护盾挡下了撞击。 + - 听到: 。 +- `[ 91.85s]` VOICE ■ dir_down (kill) +- `[ 91.85s]` VERDICT dir_down: **MISMATCH** sim=0 + - 期望: 下! + - 听到: 这。 +- `[ 92.44s]` **GESTURE** tap @(195,422) +- `[ 92.81s]` VIBRATE [20] +- `[ 92.81s]` SFX ♪ boost +- `[ 93.02s]` VIBRATE [25,40,25,40,25] +- `[ 93.02s]` SFX ♪ alarm +- `[ 93.52s]` VIBRATE [25,40,25,40,25] +- `[ 93.52s]` SFX ♪ alarm +- `[ 94.02s]` SFX ♪ dodge +- `[ 94.18s]` SFX ♪ whoosh_left +- `[ 94.18s]` VOICE ▶ dir_left (dur 0.39909297052154197s) +- `[ 94.18s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 94.25s]` **GESTURE** swipeleft @(195,422) +- `[ 94.57s]` VOICE ■ dir_left (kill) +- `[ 94.57s]` VERDICT dir_left: **MISMATCH** sim=0 + - 期望: 左! + - 听到: 说。 +- `[ 94.61s]` VIBRATE [10] +- `[ 95.72s]` VIBRATE [25,40,25,40,25] +- `[ 95.72s]` SFX ♪ alarm +- `[ 95.95s]` **GESTURE** tap @(195,422) +- `[ 96.22s]` VIBRATE [25,40,25,40,25] +- `[ 96.22s]` SFX ♪ alarm +- `[ 96.31s]` VIBRATE [20] +- `[ 96.31s]` SFX ♪ boost +- `[ 96.72s]` SFX ♪ dodge +- `[ 96.86s]` SFX ♪ whoosh_down +- `[ 96.86s]` VOICE ▶ dir_down (dur 0.39909297052154197s) +- `[ 96.86s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 97.24s]` VOICE ■ dir_down (kill) +- `[ 97.24s]` VERDICT dir_down: **MISMATCH** sim=0 + - 期望: 下! + - 听到: 在。 +- `[ 98.37s]` VIBRATE [25,40,25,40,25] +- `[ 98.37s]` SFX ♪ alarm +- `[ 98.87s]` VIBRATE [25,40,25,40,25] +- `[ 98.87s]` SFX ♪ alarm +- `[ 99.37s]` VIBRATE [80] +- `[ 99.38s]` VIBRATE [60,40,60] +- `[ 99.38s]` SFX ♪ hit +- `[ 99.38s]` SFX ♪ crash +- `[ 99.67s]` VIBRATE [80] +- `[ 100.58s]` VIBRATE [100] +- `[ 100.58s]` VOICE ▶ time_3 (dur 2.56s) +- `[ 102.65s]` VOICE ■ time_3 (kill) +- `[ 102.65s]` VOICE ▶ new_record (dur 0.9570975056689343s) +- `[ 103.60s]` VOICE ■ new_record (kill) +- `[ 103.61s]` VOICE ▶ dodge_2 (dur 1.28s) +- `[ 104.83s]` VOICE ■ dodge_2 (kill) +- `[ 104.84s]` VOICE ▶ restart_hint (dur 3.12s) +- `[ 107.36s]` VOICE ■ restart_hint (kill) +- `[ 107.36s]` BGM ♪ menu (loop) +- `[ 112.22s]` **GESTURE** doubletap @(195,422) +- `[ 112.47s]` VIBRATE [20] +- `[ 113.32s]` **GESTURE** tap @(195,422) +- `[ 113.69s]` VIBRATE [20] +- `[ 113.69s]` BGM ♪ engine (loop) +- `[ 114.72s]` **GESTURE** swiperight @(195,422) +- `[ 115.07s]` VIBRATE [10] +- `[ 115.19s]` SFX ♪ whoosh_up +- `[ 116.46s]` **GESTURE** swipeleft @(195,422) +- `[ 116.82s]` VIBRATE [10] +- `[ 118.19s]` VIBRATE [25,40,25,40,25] +- `[ 118.19s]` SFX ♪ alarm +- `[ 118.27s]` **GESTURE** swipedown @(195,422) +- `[ 118.62s]` VIBRATE [10] +- `[ 118.63s]` BGM ♪ menu (loop) +- `[ 118.63s]` VOICE ▶ paused (dur 0.9570975056689343s) +- `[ 119.57s]` VOICE ■ paused (kill) +- `[ 119.57s]` VOICE ▶ menu_main (dur 3.92s) +- `[ 119.82s]` **GESTURE** doubletap @(195,422) +- `[ 120.06s]` VIBRATE [20] +- `[ 120.06s]` BGM ♪ engine (loop) +- `[ 120.86s]` SFX ♪ whoosh_down +- `[ 121.64s]` **GESTURE** doubletap @(195,422) +- `[ 121.89s]` VIBRATE [20] +- `[ 121.89s]` SFX ♪ shield +- `[ 122.66s]` VOICE ■ menu_main (kill) +- `[ 122.66s]` VOICE ▶ menu_resume (dur 1.12s) +- `[ 123.52s]` **GESTURE** doubletap @(195,422) +- `[ 123.61s]` VOICE ■ menu_resume (kill) +- `[ 123.76s]` VIBRATE [20] +- `[ 123.76s]` VIBRATE [40,100,40] +- `[ 123.76s]` VOICE ▶ feat_shield_done (dur 4.64s) +- `[ 123.86s]` VIBRATE [25,40,25,40,25] +- `[ 123.86s]` SFX ♪ alarm +- `[ 124.36s]` VIBRATE [25,40,25,40,25] +- `[ 124.36s]` SFX ♪ alarm +- `[ 124.58s]` **GESTURE** doubletap @(195,422) +- `[ 124.83s]` VIBRATE [20] +- `[ 124.86s]` VIBRATE [100] +- `[ 124.86s]` SFX ♪ shield_block +- `[ 124.86s]` SFX ♪ whoosh_down +- `[ 125.80s]` **GESTURE** swipeleft @(195,422) +- `[ 126.16s]` VIBRATE [10] +- `[ 126.99s]` **GESTURE** doubletap @(195,422) +- `[ 127.24s]` VIBRATE [20] +- `[ 127.40s]` VOICE ■ feat_shield_done (kill) +- `[ 127.40s]` VOICE ▶ shield_block (dur 1.44s) +- `[ 127.86s]` VIBRATE [25,40,25,40,25] +- `[ 127.86s]` SFX ♪ alarm +- `[ 128.37s]` VIBRATE [25,40,25,40,25] +- `[ 128.37s]` SFX ♪ alarm +- `[ 128.63s]` VOICE ■ shield_block (kill) +- `[ 128.70s]` **GESTURE** swipedown @(195,422) +- `[ 128.87s]` VIBRATE [30,50,30,50,30] +- `[ 128.87s]` SFX ♪ shield_block +- `[ 128.87s]` VOICE ▶ protect_down (dur 5.04s) +- `[ 128.87s]` SFX ♪ whoosh_up +- `[ 129.06s]` VIBRATE [10] +- `[ 130.52s]` **GESTURE** swipedown @(195,422) +- `[ 130.87s]` VIBRATE [10] +- `[ 130.87s]` BGM ♪ menu (loop) +- `[ 130.87s]` VOICE ■ protect_down (kill) +- `[ 130.87s]` VOICE ▶ paused (dur 0.9570975056689343s) +- `[ 131.83s]` VOICE ■ paused (kill) +- `[ 131.83s]` VOICE ▶ menu_main (dur 3.92s) +- `[ 131.85s]` **GESTURE** swipedown @(195,422) +- `[ 132.21s]` VIBRATE [10] +- `[ 132.21s]` BGM ♪ engine (loop) +- `[ 132.95s]` **GESTURE** swiperight @(195,422) +- `[ 133.01s]` SFX ♪ whoosh_down +- `[ 133.31s]` VIBRATE [10] +- `[ 134.70s]` **GESTURE** swipedown @(195,422) +- `[ 134.92s]` VOICE ■ menu_main (kill) +- `[ 134.92s]` VOICE ▶ menu_resume (dur 1.12s) +- `[ 135.06s]` VIBRATE [10] +- `[ 135.87s]` VOICE ■ menu_resume (kill) +- `[ 136.01s]` VIBRATE [25,40,25,40,25] +- `[ 136.01s]` SFX ♪ alarm +- `[ 136.51s]` VIBRATE [25,40,25,40,25] +- `[ 136.51s]` SFX ♪ alarm +- `[ 136.61s]` **GESTURE** doubletap @(195,422) +- `[ 136.86s]` VIBRATE [20] +- `[ 136.86s]` VIBRATE [40,100,40] +- `[ 136.86s]` VOICE ▶ feat_shield_done (dur 4.64s) +- `[ 136.89s]` VIBRATE [15] +- `[ 137.01s]` SFX ♪ dodge +- `[ 137.01s]` SFX ♪ whoosh_left +- `[ 137.70s]` **GESTURE** doubletap @(195,422) +- `[ 137.94s]` VIBRATE [20] +- `[ 137.94s]` SFX ♪ shield +- `[ 139.43s]` **GESTURE** swipedown @(195,422) +- `[ 139.79s]` VIBRATE [10] +- `[ 139.79s]` BGM ♪ menu (loop) +- `[ 139.79s]` VOICE ■ feat_shield_done (kill) +- `[ 139.79s]` VOICE ▶ paused (dur 0.9570975056689343s) +- `[ 140.53s]` **GESTURE** tap @(195,422) +- `[ 140.75s]` VOICE ■ paused (kill) +- `[ 140.75s]` VOICE ▶ shield_ready (dur 1.28s) +- `[ 140.75s]` VOICE ■ shield_ready (kill) +- `[ 140.75s]` VOICE ▶ menu_main (dur 3.92s) +- `[ 140.89s]` VIBRATE [20] +- `[ 140.89s]` VOICE ■ menu_main (kill) +- `[ 140.89s]` VOICE ▶ menu_lobby (dur 1.04s) +- `[ 141.79s]` **GESTURE** swiperight @(195,422) +- `[ 141.84s]` VOICE ■ menu_lobby (kill) +- `[ 142.16s]` VIBRATE [10] +- `[ 143.15s]` **GESTURE** tap @(195,422) +- `[ 143.51s]` VIBRATE [20] +- `[ 143.51s]` VOICE ▶ menu_help (dur 1.6s) +- `[ 144.19s]` **GESTURE** swiperight @(195,422) +- `[ 144.56s]` VIBRATE [10] +- `[ 144.74s]` VOICE ■ menu_help (kill) +- `[ 145.48s]` **GESTURE** swipedown @(195,422) +- `[ 145.84s]` VIBRATE [10] +- `[ 145.84s]` BGM ♪ engine (loop) +- `[ 146.64s]` SFX ♪ whoosh_down +- `[ 147.09s]` **GESTURE** doubletap @(195,422) +- `[ 147.34s]` VIBRATE [20] +- `[ 147.34s]` VIBRATE [40,100,40] +- `[ 147.34s]` VOICE ▶ feat_shield_done (dur 4.64s) +- `[ 148.45s]` **GESTURE** swipedown @(195,422) +- `[ 148.81s]` VIBRATE [10] +- `[ 149.64s]` VIBRATE [25,40,25,40,25] +- `[ 149.64s]` SFX ♪ alarm +- `[ 149.99s]` **GESTURE** swipedown @(195,422) +- `[ 150.14s]` VIBRATE [25,40,25,40,25] +- `[ 150.14s]` SFX ♪ alarm +- `[ 150.34s]` VIBRATE [10] +- `[ 150.64s]` SFX ♪ dodge +- `[ 150.64s]` SFX ♪ whoosh_right +- `[ 150.99s]` VOICE ■ feat_shield_done (kill) +- `[ 151.23s]` **GESTURE** swipeleft @(195,422) +- `[ 151.59s]` VIBRATE [10] +- `[ 152.94s]` VIBRATE [15] +- `[ 152.94s]` VOICE ▶ shield_ready (dur 1.28s) +- `[ 153.12s]` **GESTURE** swipeup @(195,422) +- `[ 153.47s]` VIBRATE [10] +- `[ 153.64s]` VIBRATE [25,40,25,40,25] +- `[ 153.64s]` SFX ♪ alarm +- `[ 154.14s]` VIBRATE [25,40,25,40,25] +- `[ 154.14s]` SFX ♪ alarm +- `[ 154.17s]` VOICE ■ shield_ready (kill) +- `[ 154.64s]` VIBRATE [30,50,30,50,30] +- `[ 154.64s]` SFX ♪ shield_block +- `[ 154.64s]` VOICE ▶ protect_right (dur 5.2s) +- `[ 154.64s]` SFX ♪ whoosh_right +- `[ 155.09s]` **GESTURE** tap @(195,422) +- `[ 155.46s]` VIBRATE [20] +- `[ 155.46s]` VOICE ■ protect_right (kill) +- `[ 156.29s]` **GESTURE** swipeup @(195,422) +- `[ 156.64s]` VIBRATE [10] +- `[ 157.64s]` VIBRATE [25,40,25,40,25] +- `[ 157.64s]` SFX ♪ alarm +- `[ 157.87s]` **GESTURE** doubletap @(195,422) +- `[ 158.12s]` VIBRATE [20] +- `[ 158.12s]` SFX ♪ shield +- `[ 158.14s]` VIBRATE [25,40,25,40,25] +- `[ 158.14s]` SFX ♪ alarm +- `[ 158.64s]` VIBRATE [100] +- `[ 158.64s]` SFX ♪ shield_block +- `[ 158.64s]` VOICE ▶ shield_block (dur 1.44s) +- `[ 158.64s]` SFX ♪ whoosh_down +- `[ 159.50s]` **GESTURE** doubletap @(195,422) +- `[ 159.75s]` VIBRATE [20] +- `[ 159.75s]` VIBRATE [40,100,40] +- `[ 159.75s]` VOICE ■ shield_block (kill) +- `[ 159.75s]` VOICE ▶ feat_shield_done (dur 4.64s) +- `[ 160.88s]` **GESTURE** tap @(195,422) +- `[ 161.24s]` VIBRATE [20] +- `[ 161.24s]` VOICE ■ feat_shield_done (kill) +- `[ 161.64s]` VIBRATE [25,40,25,40,25] +- `[ 161.64s]` SFX ♪ alarm +- `[ 162.14s]` VIBRATE [25,40,25,40,25] +- `[ 162.14s]` SFX ♪ alarm +- `[ 162.22s]` **GESTURE** swipedown @(195,422) +- `[ 162.59s]` VIBRATE [10] +- `[ 162.64s]` SFX ♪ dodge +- `[ 162.64s]` SFX ♪ whoosh_left +- `[ 165.64s]` VIBRATE [25,40,25,40,25] +- `[ 165.64s]` SFX ♪ alarm +- `[ 166.14s]` VIBRATE [25,40,25,40,25] +- `[ 166.14s]` SFX ♪ alarm +- `[ 166.64s]` VIBRATE [30,50,30,50,30] +- `[ 166.64s]` SFX ♪ shield_block +- `[ 166.64s]` VOICE ▶ protect_left (dur 6.32s) +- `[ 166.64s]` SFX ♪ whoosh_left diff --git a/research/space-polish/round1/live-B-verdicts.json b/research/space-polish/round1/live-B-verdicts.json new file mode 100644 index 00000000..11ab7960 --- /dev/null +++ b/research/space-polish/round1/live-B-verdicts.json @@ -0,0 +1,1309 @@ +{ + "game": "space", + "settings": { + "voice": "female", + "guide": "standard", + "speed": 1.35, + "bgm": 1 + }, + "outdir": "/home/xsl/AutoVideo/SoundGame/web/harness/live/out/space-20260914055430", + "segs": [ + { + "idx": 0, + "voiceId": "second_run_ask", + "t0": 0.099, + "t1": 2.346, + "dur": 3.04, + "expEnd": 2.351, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "上滑重新听演练,单击直接出。", + "similarity": 0.96 + }, + { + "idx": 1, + "voiceId": "protect_up", + "t0": 8.283, + "t1": 11.935, + "dur": 4.8, + "expEnd": 11.839, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "训练护动接住,那裤子上面听到高高的呼啸,肖哨话。", + "similarity": 0.6977 + }, + { + "idx": 2, + "voiceId": "protect_down", + "t0": 12.284, + "t1": 16.207, + "dur": 5.04, + "expEnd": 16.017, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "训练护盾切住,那刻在下面听到低沉的轰隆向下滑。", + "similarity": 0.8837 + }, + { + "idx": 3, + "voiceId": "protect_down", + "t0": 16.285, + "t1": 20.201, + "dur": 5.04, + "expEnd": 20.018, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "训疗后段接轨,那刻在下面听到低沉的轰隆向下滑。", + "similarity": 0.7442 + }, + { + "idx": 4, + "voiceId": "protect_up", + "t0": 20.286, + "t1": 22.782, + "dur": 4.8, + "expEnd": 23.842, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练互动接住,那刻子上面听到。", + "similarity": 0.5143 + }, + { + "idx": 5, + "voiceId": "feat_boost", + "t0": 22.782, + "t1": 25.866, + "dur": 3.84, + "expEnd": 25.626, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "试试单机,引擎或短途加速,直接冲过空隙。", + "similarity": 0.8235 + }, + { + "idx": 6, + "voiceId": "feat_boost_done", + "t0": 29.71, + "t1": 32.227, + "dur": 3.44, + "expEnd": 32.258, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "感觉到了吗?下死的时候陨石撞不上。", + "similarity": 0.8387 + }, + { + "idx": 7, + "voiceId": "feat_shield_done", + "t0": 35.849, + "t1": 36.21, + "dur": 4.64, + "expEnd": 39.286, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "。", + "similarity": 0 + }, + { + "idx": 8, + "voiceId": "protect_left", + "t0": 36.21, + "t1": 38.828, + "dur": 6.32, + "expEnd": 40.891, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练护臀接住,内颗在左边。", + "similarity": 0.5455 + }, + { + "idx": 9, + "voiceId": "paused", + "t0": 38.828, + "t1": 39.773, + "dur": 0.9570975056689343, + "expEnd": 39.537, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "已暂停。", + "similarity": 1 + }, + { + "idx": 10, + "voiceId": "menu_main", + "t0": 39.773, + "t1": 42.794, + "dur": 3.92, + "expEnd": 42.677, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "菜单单击切换选项,双击确认。", + "similarity": 1 + }, + { + "idx": 11, + "voiceId": "paused", + "t0": 42.794, + "t1": 43.744, + "dur": 0.9570975056689343, + "expEnd": 43.503, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "已暂停。", + "similarity": 1 + }, + { + "idx": 12, + "voiceId": "menu_main", + "t0": 43.744, + "t1": 44.911, + "dur": 3.92, + "expEnd": 46.648, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "菜单。", + "similarity": 0.2857 + }, + { + "idx": 13, + "voiceId": "help_recap", + "t0": 44.911, + "t1": 46.258, + "dur": 8.4, + "expEnd": 51.133, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "左边来向左滑右。", + "similarity": 0.359 + }, + { + "idx": 14, + "voiceId": "menu_lobby", + "t0": 46.258, + "t1": 47.203, + "dur": 1.04, + "expEnd": 47.028, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "回大厅。", + "similarity": 1 + }, + { + "idx": 15, + "voiceId": "help_recap", + "t0": 47.744, + "t1": 49.248, + "dur": 8.4, + "expEnd": 53.966, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "左边来向左滑,右边。", + "similarity": 0.4 + }, + { + "idx": 16, + "voiceId": "menu_help", + "t0": 49.249, + "t1": 50.477, + "dur": 1.6, + "expEnd": 50.434, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "右边重新听教学要点。", + "similarity": 0.875 + }, + { + "idx": 17, + "voiceId": "help_recap", + "t0": 50.712, + "t1": 53.622, + "dur": 8.4, + "expEnd": 56.934, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "左边来向左滑,右边来向右滑,上面来。", + "similarity": 0.6383 + }, + { + "idx": 18, + "voiceId": "menu_resume", + "t0": 53.622, + "t1": 54.563, + "dur": 1.12, + "expEnd": 54.452, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "来继续飞行。", + "similarity": 0.8889 + }, + { + "idx": 19, + "voiceId": "help_recap", + "t0": 55.627, + "t1": 57.329, + "dur": 8.4, + "expEnd": 61.849, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "左边来向左滑,右边来。", + "similarity": 0.439 + }, + { + "idx": 20, + "voiceId": "menu_lobby", + "t0": 57.329, + "t1": 58.278, + "dur": 1.04, + "expEnd": 58.099, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "来回大厅。", + "similarity": 0.8571 + }, + { + "idx": 21, + "voiceId": "feat_shield", + "t0": 58.994, + "t1": 61.25, + "dur": 2.8, + "expEnd": 61.068, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "双击展开护盾,能挡下一次撞击。", + "similarity": 1 + }, + { + "idx": 22, + "voiceId": "feat_shield_done", + "t0": 66.844, + "t1": 66.845, + "dur": 4.64, + "expEnd": 70.281, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "不是。", + "similarity": 0 + }, + { + "idx": 23, + "voiceId": "protect_end", + "t0": 66.845, + "t1": 69.077, + "dur": 3.6, + "expEnd": 69.512, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "训练部动关闭,接下来。", + "similarity": 0.6087 + }, + { + "idx": 24, + "voiceId": "paused", + "t0": 69.077, + "t1": 70.026, + "dur": 0.9570975056689343, + "expEnd": 69.786, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "已暂停。", + "similarity": 1 + }, + { + "idx": 25, + "voiceId": "menu_main", + "t0": 70.026, + "t1": 72.101, + "dur": 3.92, + "expEnd": 72.93, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "菜单单击切换选项。", + "similarity": 0.8 + }, + { + "idx": 26, + "voiceId": "dir_left", + "t0": 72.101, + "t1": 72.488, + "dur": 0.39909297052154197, + "expEnd": 72.397, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "走。", + "similarity": 0 + }, + { + "idx": 27, + "voiceId": "hit_left", + "t0": 76.102, + "t1": 76.103, + "dur": 3.52, + "expEnd": 78.709, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "嗯。", + "similarity": 0 + }, + { + "idx": 28, + "voiceId": "dir_down", + "t0": 76.103, + "t1": 76.504, + "dur": 0.39909297052154197, + "expEnd": 76.399, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "回这。", + "similarity": 0 + }, + { + "idx": 29, + "voiceId": "dir_down", + "t0": 80.103, + "t1": 80.498, + "dur": 0.39909297052154197, + "expEnd": 80.399, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "下你。", + "similarity": 0.6667 + }, + { + "idx": 30, + "voiceId": "shield_ready", + "t0": 81.843, + "t1": 82.636, + "dur": 1.28, + "expEnd": 82.791, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "不段冲动。", + "similarity": 0 + }, + { + "idx": 31, + "voiceId": "dir_down", + "t0": 83.014, + "t1": 83.4, + "dur": 0.39909297052154197, + "expEnd": 83.31, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "这。", + "similarity": 0 + }, + { + "idx": 32, + "voiceId": "hit_down", + "t0": 84.103, + "t1": 85.876, + "dur": 5.28, + "expEnd": 88.014, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "向你撞上。", + "similarity": 0.2105 + }, + { + "idx": 33, + "voiceId": "dir_right", + "t0": 85.876, + "t1": 86.534, + "dur": 0.7170975056689343, + "expEnd": 86.407, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "娘。", + "similarity": 0 + }, + { + "idx": 34, + "voiceId": "hit_last", + "t0": 86.534, + "t1": 86.66, + "dur": 2.88, + "expEnd": 88.667, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "啊。", + "similarity": 0 + }, + { + "idx": 35, + "voiceId": "dir_left", + "t0": 88.692, + "t1": 89.088, + "dur": 0.39909297052154197, + "expEnd": 88.988, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "我。", + "similarity": 0 + }, + { + "idx": 36, + "voiceId": "shield_block", + "t0": 91.276, + "t1": 91.46, + "dur": 1.44, + "expEnd": 92.343, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "。", + "similarity": 0 + }, + { + "idx": 37, + "voiceId": "dir_down", + "t0": 91.46, + "t1": 91.851, + "dur": 0.39909297052154197, + "expEnd": 91.756, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "这。", + "similarity": 0 + }, + { + "idx": 38, + "voiceId": "dir_left", + "t0": 94.182, + "t1": 94.568, + "dur": 0.39909297052154197, + "expEnd": 94.478, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "说。", + "similarity": 0 + }, + { + "idx": 39, + "voiceId": "dir_down", + "t0": 96.858, + "t1": 97.238, + "dur": 0.39909297052154197, + "expEnd": 97.154, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "在。", + "similarity": 0 + }, + { + "idx": 40, + "voiceId": "time_3", + "t0": 100.585, + "t1": 102.648, + "dur": 2.56, + "expEnd": 102.481, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 41, + "voiceId": "new_record", + "t0": 102.654, + "t1": 103.6, + "dur": 0.9570975056689343, + "expEnd": 103.363, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 42, + "voiceId": "dodge_2", + "t0": 103.608, + "t1": 104.83, + "dur": 1.28, + "expEnd": 104.556, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 43, + "voiceId": "restart_hint", + "t0": 104.838, + "t1": 107.361, + "dur": 3.12, + "expEnd": 107.149, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 44, + "voiceId": "paused", + "t0": 118.625, + "t1": 119.574, + "dur": 0.9570975056689343, + "expEnd": 119.334, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 45, + "voiceId": "menu_main", + "t0": 119.574, + "t1": 122.662, + "dur": 3.92, + "expEnd": 122.478, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 46, + "voiceId": "menu_resume", + "t0": 122.662, + "t1": 123.613, + "dur": 1.12, + "expEnd": 123.492, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 47, + "voiceId": "feat_shield_done", + "t0": 123.764, + "t1": 127.398, + "dur": 4.64, + "expEnd": 127.201, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 48, + "voiceId": "shield_block", + "t0": 127.398, + "t1": 128.628, + "dur": 1.44, + "expEnd": 128.465, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 49, + "voiceId": "protect_down", + "t0": 128.865, + "t1": 130.874, + "dur": 5.04, + "expEnd": 132.598, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 50, + "voiceId": "paused", + "t0": 130.874, + "t1": 131.833, + "dur": 0.9570975056689343, + "expEnd": 131.583, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 51, + "voiceId": "menu_main", + "t0": 131.833, + "t1": 134.921, + "dur": 3.92, + "expEnd": 134.737, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 52, + "voiceId": "menu_resume", + "t0": 134.921, + "t1": 135.872, + "dur": 1.12, + "expEnd": 135.751, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 53, + "voiceId": "feat_shield_done", + "t0": 136.86, + "t1": 139.79, + "dur": 4.64, + "expEnd": 140.297, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 54, + "voiceId": "paused", + "t0": 139.79, + "t1": 140.748, + "dur": 0.9570975056689343, + "expEnd": 140.499, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 55, + "voiceId": "shield_ready", + "t0": 140.748, + "t1": 140.749, + "dur": 1.28, + "expEnd": 141.696, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 56, + "voiceId": "menu_main", + "t0": 140.749, + "t1": 140.889, + "dur": 3.92, + "expEnd": 143.653, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 57, + "voiceId": "menu_lobby", + "t0": 140.889, + "t1": 141.839, + "dur": 1.04, + "expEnd": 141.659, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 58, + "voiceId": "menu_help", + "t0": 143.513, + "t1": 144.742, + "dur": 1.6, + "expEnd": 144.698, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 59, + "voiceId": "feat_shield_done", + "t0": 147.339, + "t1": 150.988, + "dur": 4.64, + "expEnd": 150.776, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 60, + "voiceId": "shield_ready", + "t0": 152.943, + "t1": 154.168, + "dur": 1.28, + "expEnd": 153.891, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 61, + "voiceId": "protect_right", + "t0": 154.641, + "t1": 155.458, + "dur": 5.2, + "expEnd": 158.493, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 62, + "voiceId": "shield_block", + "t0": 158.642, + "t1": 159.749, + "dur": 1.44, + "expEnd": 159.709, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 63, + "voiceId": "feat_shield_done", + "t0": 159.75, + "t1": 161.242, + "dur": 4.64, + "expEnd": 163.187, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 64, + "voiceId": "protect_left", + "t0": 166.643, + "t1": 97.501, + "dur": 6.32, + "expEnd": 171.324, + "truncated": true, + "reason": "session-end", + "verdict": null, + "heard": null, + "similarity": null + } + ], + "rows": [ + { + "t0": 0.099, + "t1": 2.346, + "voiceId": "second_run_ask", + "expected": "上滑重新听演练,单击直接出发。", + "heard": "上滑重新听演练,单击直接出。", + "similarity": 0.96, + "verdict": "OK" + }, + { + "t0": 8.283, + "t1": 11.935, + "voiceId": "protect_up", + "expected": "训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。", + "heard": "训练护动接住,那裤子上面听到高高的呼啸,肖哨话。", + "similarity": 0.6977, + "verdict": "OK" + }, + { + "t0": 12.284, + "t1": 16.207, + "voiceId": "protect_down", + "expected": "训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。", + "heard": "训练护盾切住,那刻在下面听到低沉的轰隆向下滑。", + "similarity": 0.8837, + "verdict": "OK" + }, + { + "t0": 16.285, + "t1": 20.201, + "voiceId": "protect_down", + "expected": "训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。", + "heard": "训疗后段接轨,那刻在下面听到低沉的轰隆向下滑。", + "similarity": 0.7442, + "verdict": "OK" + }, + { + "t0": 20.286, + "t1": 22.782, + "voiceId": "protect_up", + "expected": "训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。", + "heard": "训练互动接住,那刻子上面听到。", + "similarity": 0.5143, + "verdict": "TRUNCATED" + }, + { + "t0": 22.782, + "t1": 25.866, + "voiceId": "feat_boost", + "expected": "试试单击,引擎会短促加速,直接冲过空隙。", + "heard": "试试单机,引擎或短途加速,直接冲过空隙。", + "similarity": 0.8235, + "verdict": "OK" + }, + { + "t0": 29.71, + "t1": 32.227, + "voiceId": "feat_boost_done", + "expected": "感觉到了吗?加速的时候,陨石撞不上你。", + "heard": "感觉到了吗?下死的时候陨石撞不上。", + "similarity": 0.8387, + "verdict": "OK" + }, + { + "t0": 35.849, + "t1": 36.21, + "voiceId": "feat_shield_done", + "expected": "护盾展开后会自动充能,好了我会告诉你。", + "heard": "。", + "similarity": 0, + "verdict": "TRUNCATED" + }, + { + "t0": 36.21, + "t1": 38.828, + "voiceId": "protect_left", + "expected": "训练护盾接住了。那颗在左边,听到左边的呼啸,向左滑。", + "heard": "训练护臀接住,内颗在左边。", + "similarity": 0.5455, + "verdict": "TRUNCATED" + }, + { + "t0": 38.828, + "t1": 39.773, + "voiceId": "paused", + "expected": "已暂停。", + "heard": "已暂停。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 39.773, + "t1": 42.794, + "voiceId": "menu_main", + "expected": "菜单。单击切换选项,双击确认。", + "heard": "菜单单击切换选项,双击确认。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 42.794, + "t1": 43.744, + "voiceId": "paused", + "expected": "已暂停。", + "heard": "已暂停。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 43.744, + "t1": 44.911, + "voiceId": "menu_main", + "expected": "菜单。单击切换选项,双击确认。", + "heard": "菜单。", + "similarity": 0.2857, + "verdict": "TRUNCATED" + }, + { + "t0": 44.911, + "t1": 46.258, + "voiceId": "help_recap", + "expected": "左边来向左滑,右边来向右滑,上面来向上滑,下面来向下滑。单击加速,双击护盾。", + "heard": "左边来向左滑右。", + "similarity": 0.359, + "verdict": "TRUNCATED" + }, + { + "t0": 46.258, + "t1": 47.203, + "voiceId": "menu_lobby", + "expected": "回大厅。", + "heard": "回大厅。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 47.744, + "t1": 49.248, + "voiceId": "help_recap", + "expected": "左边来向左滑,右边来向右滑,上面来向上滑,下面来向下滑。单击加速,双击护盾。", + "heard": "左边来向左滑,右边。", + "similarity": 0.4, + "verdict": "TRUNCATED" + }, + { + "t0": 49.249, + "t1": 50.477, + "voiceId": "menu_help", + "expected": "重新听教学要点。", + "heard": "右边重新听教学要点。", + "similarity": 0.875, + "verdict": "OK" + }, + { + "t0": 50.712, + "t1": 53.622, + "voiceId": "help_recap", + "expected": "左边来向左滑,右边来向右滑,上面来向上滑,下面来向下滑。单击加速,双击护盾。", + "heard": "左边来向左滑,右边来向右滑,上面来。", + "similarity": 0.6383, + "verdict": "TRUNCATED" + }, + { + "t0": 53.622, + "t1": 54.563, + "voiceId": "menu_resume", + "expected": "继续飞行。", + "heard": "来继续飞行。", + "similarity": 0.8889, + "verdict": "OK" + }, + { + "t0": 55.627, + "t1": 57.329, + "voiceId": "help_recap", + "expected": "左边来向左滑,右边来向右滑,上面来向上滑,下面来向下滑。单击加速,双击护盾。", + "heard": "左边来向左滑,右边来。", + "similarity": 0.439, + "verdict": "TRUNCATED" + }, + { + "t0": 57.329, + "t1": 58.278, + "voiceId": "menu_lobby", + "expected": "回大厅。", + "heard": "来回大厅。", + "similarity": 0.8571, + "verdict": "OK" + }, + { + "t0": 58.994, + "t1": 61.25, + "voiceId": "feat_shield", + "expected": "双击展开护盾,能挡下一次撞击。", + "heard": "双击展开护盾,能挡下一次撞击。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 66.844, + "t1": 66.845, + "voiceId": "feat_shield_done", + "expected": "护盾展开后会自动充能,好了我会告诉你。", + "heard": "不是。", + "similarity": 0, + "verdict": "TRUNCATED" + }, + { + "t0": 66.845, + "t1": 69.077, + "voiceId": "protect_end", + "expected": "训练护盾关闭。接下来,靠你自己了。", + "heard": "训练部动关闭,接下来。", + "similarity": 0.6087, + "verdict": "TRUNCATED" + }, + { + "t0": 69.077, + "t1": 70.026, + "voiceId": "paused", + "expected": "已暂停。", + "heard": "已暂停。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 70.026, + "t1": 72.101, + "voiceId": "menu_main", + "expected": "菜单。单击切换选项,双击确认。", + "heard": "菜单单击切换选项。", + "similarity": 0.8, + "verdict": "TRUNCATED" + }, + { + "t0": 72.101, + "t1": 72.488, + "voiceId": "dir_left", + "expected": "左!", + "heard": "走。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 76.102, + "t1": 76.103, + "voiceId": "hit_left", + "expected": "左边撞上的。听到左边的呼啸,向左滑。", + "heard": "嗯。", + "similarity": 0, + "verdict": "TRUNCATED" + }, + { + "t0": 76.103, + "t1": 76.504, + "voiceId": "dir_down", + "expected": "下!", + "heard": "回这。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 80.103, + "t1": 80.498, + "voiceId": "dir_down", + "expected": "下!", + "heard": "下你。", + "similarity": 0.6667, + "verdict": "OK" + }, + { + "t0": 81.843, + "t1": 82.636, + "voiceId": "shield_ready", + "expected": "护盾充能完毕。", + "heard": "不段冲动。", + "similarity": 0, + "verdict": "TRUNCATED" + }, + { + "t0": 83.014, + "t1": 83.4, + "voiceId": "dir_down", + "expected": "下!", + "heard": "这。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 84.103, + "t1": 85.876, + "voiceId": "hit_down", + "expected": "下面撞上的。听到低沉的轰隆,向下滑。", + "heard": "向你撞上。", + "similarity": 0.2105, + "verdict": "TRUNCATED" + }, + { + "t0": 85.876, + "t1": 86.534, + "voiceId": "dir_right", + "expected": "右!", + "heard": "娘。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 86.534, + "t1": 86.66, + "voiceId": "hit_last", + "expected": "船体只剩最后一次了,小心!", + "heard": "啊。", + "similarity": 0, + "verdict": "TRUNCATED" + }, + { + "t0": 88.692, + "t1": 89.088, + "voiceId": "dir_left", + "expected": "左!", + "heard": "我。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 91.276, + "t1": 91.46, + "voiceId": "shield_block", + "expected": "护盾挡下了撞击。", + "heard": "。", + "similarity": 0, + "verdict": "TRUNCATED" + }, + { + "t0": 91.46, + "t1": 91.851, + "voiceId": "dir_down", + "expected": "下!", + "heard": "这。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 94.182, + "t1": 94.568, + "voiceId": "dir_left", + "expected": "左!", + "heard": "说。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 96.858, + "t1": 97.238, + "voiceId": "dir_down", + "expected": "下!", + "heard": "在。", + "similarity": 0, + "verdict": "MISMATCH" + }, + { + "t0": 2.346, + "t1": 8.283, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 25.866, + "t1": 29.71, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 32.227, + "t1": 35.849, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 61.25, + "t1": 66.844, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 72.488, + "t1": 76.102, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 76.504, + "t1": 80.103, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 86.66, + "t1": 88.692, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 89.088, + "t1": 91.276, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 91.851, + "t1": 94.182, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 94.568, + "t1": 96.858, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + } + ] +} \ No newline at end of file diff --git a/research/space-polish/round1/p1-blind.md b/research/space-polish/round1/p1-blind.md new file mode 100644 index 00000000..0d88493c --- /dev/null +++ b/research/space-polish/round1/p1-blind.md @@ -0,0 +1,32 @@ +# P1 视障资深玩家评审:《盲航》(space polish 取证轮 R1) + +> 评审依据:research/space-polish/round1/live-A-transcript.md(认真新手局,ta 0-380s)+ live-B-transcript.md(乱按压力局)+ sfx-spectrum-analysis.txt(客观频谱)。 +> 刺耳判定说明:我听不到混音文件,刺耳结论来自客观数据(能量分布/真峰值)+ 出现频率推算,并按"如果这声音在我 75 档耳朵里"代入;与三位玩家评审交叉对账后四席一致。 + +### 盲航 +- 状态感知:2/5 —— 保护期里我每秒都知道自己在哪(训练护盾接住必报方位,A 局 t+97-109),但两段时间我完全失聪:**①保护期结束前后**(A 局 t+151.13-163.13):protect_end 被前一颗的 protect_up 顶得只剩 3.5s/5.4s(sim 0.52,transcript 行 271-283),紧接着 hit_left、hit_down 两条归因**零毫秒被杀**(行 287-307,vstart 与 kill 同时间戳)——8 秒内挨满三撞坠毁,我至死不知道陨石从哪来,也不知道保护期什么时候没的(我自己 t+301.5 一个习惯单击还把 protect_end 掐在 1 秒处,行 552-563)。**②保护期内 protect_* 长句互杀**:6.96s 的句子对 4.0s 的刷怪间隔,每句都被下一颗截到 4.0s(行 367-378 等 7 连 TRUNCATED),听到的是同一句话的七个开头。护盾经济也是糊涂账:充能完毕(shield_ready)被我自己的单击跳过(t+300.2 行 548 附近)、护盾格挡句 shield_block 从未完整听过。 +- 下一步明确性:4/5 —— 演练一句一练、做错当场重教(A 局 t+19.5 drill_retry_left 及时),方向呼喊与呼啸同窗(round4 改口是对的);菜单口令规整(t+371.8 paused→menu_main→menu_resume 全 OK)。扣 1 分在:保护期结束后刷怪不给人喘息, attributions 听不全,"下一颗从哪来"全靠猜。 +- 愿意继续玩:是 —— 同向闪避的手感是我要的反射直达,但前提是把"刚出狱三秒连死还不知缘由"修了。 +- P0 问题:保护期结束窗口(**状态盲区**):protect_end 永远听不全 + 前 8 秒归因链被 spawn 呼喊零毫秒顶断(A 局 t+151-163、300-310 两轮复现),"我在哪/还剩几条命/为什么死"三连问无答案。这是纯听觉玩家的死线。 +- 刺耳清单(按暴露量排序,数据见 sfx-spectrum-analysis.txt): + 1. `sfx/alarm`:≥3kHz 能量 82.3%、≥5kHz 63.9%、质心 7580Hz、峰值 16kHz——每颗陨石响两遍、全程 4s 间隔连刷,是第一刺耳源; + 2. `sfx/dodge`:真峰值 -2.30dBFS(超 -3 标准)、≥3kHz 63.6%——每次闪避都响,高频嘶声贴耳; + 3. `sfx/shield_block`:真峰值 -2.60dBFS、≥3kHz 52.2%——保护期每 4s 一响(比 alarm 还密); + 4. `sfx/boost`:真峰值 -2.70dBFS、≥3kHz 53.0%。 + `whoosh_*`/`crash`/`shield`/`hit`/`whoosh_down` 频谱干净(质心 170-530Hz),不刺耳。 +- 建议(按对"我愿意玩下去"的影响排序): + 1. P0 修复归因链:保护期结束后前 N 秒,spawn 的 dir_* 呼喊不得零毫秒顶断 hit_*/protect_end(排队或让呼喊降级);至少保证"最后一命"前后的信息链完整。 + 2. alarm/dodge/shield_block/boost 四件重合成或低通+降档:真峰值全部回到 ≤-3dBFS,≥5kHz 能量压到 15% 以下;alarm 是全程最高暴露,优先。 + 3. 护盾/加速冷却与层数上状态键可查(space 目前没有任何 status key 手势,radio 的上滑锚这里缺席);拒绝已有回音(护盾冷却双击有 feat_shield_done,合格),加速冷却的拒绝是**全静默**(代码无 deny 路径),补上。 + +#### 听觉惯例符合度(逐条核对我的特别检查项) +- 语音可打断:过但反噬。单击跳句机制本身干净,但对局期我单击的动机常是"加速",结果把 protect_end/shield_ready 这种状态句掐了(A 局 t+300-301)——可打断的语义需要区分"旁白可跳"与"状态句不可误杀"。 +- 语音可重听:半过。菜单 help_recap 可重听(B 局 t+44.9 起),但被顶断的 hit_* 归因没有任何途径重听。 +- 等待有无声:过。BGM engine 不断,无死寂。 +- 失败可归因:**不过**。三次撞击中只有一次 hit_last 完整听到(A 局 t+159.9 sim 0.87),两条方位归因零毫秒(行 287/305)——本项是本作死穴。 +- 菜单列表导航规整:过。口令一致(menu_main 勘误版)、循环三项都实测到(A 局 t+371-378),关菜单恢复有 800ms 冷静期兜底。 +- 提示永不逐字重复:不过。protect_* 在保护期每 4s 逐字重播同一句开头 7+ 次(行 367-473),既重复又截断,双重噪音。 +- 账目真实:半过。结算分档句(time_3/dodge_1)与我真实存活/躲避对得上,但"护盾挡了几次/还剩几条命"中途无法查证。 +- 语速上限/长按快进:未验证(会话内无长按)。 +- status key:**缺席**。上滑在对局期无任何查询语义,只有我这个人设最需要的那件锚没有。 +- 双击确认(菜单约定):过。菜单内双击确认 resume 实测 OK。 diff --git a/research/space-polish/round1/p2-student.md b/research/space-polish/round1/p2-student.md new file mode 100644 index 00000000..ee7d9254 --- /dev/null +++ b/research/space-polish/round1/p2-student.md @@ -0,0 +1,18 @@ +# P2 时间充裕的大学生评审:《盲航》(space polish 取证轮 R1) + +> 评审依据:同 round1 三份材料(live-A / live-B / 频谱表)。我按"躺床戴耳机 23:30"代入,刺耳=物理刺激+精神刺激一起算。 + +### 盲航 +- 状态感知:2.5/5 —— 头 60 秒很踏实(演练四步全练过、保护期撞了也不掉血还有讲解),但**60 秒整那一刻我直接懵掉**:protect_end 刚起个头就被撞车语音冲掉(A 局 t+151.6 行 271-283),接下来 8 秒我连吃三下,"左边撞上的""下面撞上的"两条归因全是零毫秒残影(行 287-307),然后直接结算"超过一分钟,合格的飞行员"——我是合格了,可我连怎么死的都不知道,这夸奖听着像嘲讽。还有:我在保护期每次撞上来的讲解句(protect_*)都被下一颗陨石掐在同一个字上(6.9s 的句子永远只听 4s,行 367-378),像有人反复按掉我的弹幕。 +- 下一步明确性:4/5 —— 教学节奏好,一句一练、做错了当场重教不骂街(A 局 t+19.5);方向呼喊"左!/右!"跟呼啸同窗,反应窗口够。扣 1 分:加速/护盾教完之后没有任何"现在能用/还不能用"的即时信号,我双击没反应的时候(冷却中)要等 4 秒才有一句"护盾展开后会自动充能"——急性子的我早连按五次了,后四次全是无效手势零反馈(B 局 70+ 次乱按里大量此类静默)。 +- 愿意继续玩:勉强 —— 手感成立、结算有钩子("新纪录!"我破纪录那下确实爽,A 局 t+167.8),但每次死都死于"信息没送到"而不是"我菜",挫败感不对味。 +- P0 问题:死亡归因不可达(同 P1,A 局 t+151-163 与 t+300-310 两轮复现);加速冷却单击**全静默**(代码里没有 deny 路径,我的单击习惯=跳句或空气);挥空/滑错方向**全静默**(A 局 t+19.4 我滑慢半拍,什么声音都没有,还是靠下一句重教才知道刚才算失败)。 +- 刺耳清单(耳机党,按折磨度排序): + 1. `sfx/alarm`——16kHz 峰、63.9% 能量在 5kHz 以上,一颗陨石两遍、全程无休,10 分钟局等于几百次指甲刮板; + 2. `sfx/dodge`——每次成功闪避的"奖励音"却是 -2.30dBFS 真峰值+63.6% 高频的嘶啦声,奖励变惩罚; + 3. `sfx/shield_block`(保护期每 4s 一响,最密)与 `sfx/boost`(真峰值都超标)。 + whoosh 四件是舒服的,尤其 whoosh_up 跟教学说的"又尖又高"完全对得上号(频谱其实不刺,质心 528Hz,是"高"不是"刺")。 +- 建议: + 1. 保护期结束给 3 秒"交接仪式":刷怪暂停+protect_end 独占播完,这是整局的情绪转折点,现在被陨石轰隆隆直接碾过。 + 2. alarm 换柔和一点的双音(保方位保警示但去 16kHz 毛刺),dodge 改成中频"咻-叮"而不是高频嘶声—— reward 声音要让人想再听一次。 + 3. 所有无效手势(冷却中/滑错/挥空)给最小耳标或震动,别让我怀疑耳机坏了。 diff --git a/research/space-polish/round1/p3-office.md b/research/space-polish/round1/p3-office.md new file mode 100644 index 00000000..38e15c85 --- /dev/null +++ b/research/space-polish/round1/p3-office.md @@ -0,0 +1,17 @@ +# P3 时间紧张的白领评审:《盲航》(space polish 取证轮 R1) + +> 评审依据:同 round1 三份材料。我按"地铁 25 分钟、单手持机、随时被打断"代入;嘈杂环境是我的主场也是它的考场。 + +### 盲航 +- 状态感知:2/5 —— 单局 60-90 秒的长度对我刚刚好,但**打断恢复是零分**:这游戏没有任何"查状态"手势(上滑在菜单里是帮助、对局里什么都不是),我接个电话回来,护盾在不在、冷却几秒、还剩几条命、保护期过没过——全靠回忆。最坏的是保护期结束那 8 秒死亡窗(A 局 t+151-163):protect_end 听不全、两条归因零毫秒、直接结算,我如果正好在进站刷卡,回来就是一句"单击再飞一次",完全接不上。菜单倒是能暂停(A 局 t+371.8 口令规整),可我得**知道**要先暂停才行——没人告诉过我对局能暂停。 +- 下一步明确性:3.5/5 —— 单手四向滑+点按,盲操满分;方向呼喊与呼啸同窗,嘈杂车厢里 alarm 的高频反而帮我定位(刺耳但有功能)。但"现在能不能双击护盾"无从得知:冷却 15s 里没有计时线索,充能完毕的 shield_ready 会被我自己的单击跳过(A 局 t+300.2),或者被陨石讲解顶掉。 +- 愿意继续玩:是(当通勤小品)—— 但只敢在保护期里玩,保护期后"死得不明不白"让我不想在站立拥挤时开第二把。 +- P0 问题:无 status key(全局唯一没有查询锚的游戏,同 P1);保护期结束信息链断裂(同 P1,A 局 t+151-163);被打断回来零落位信息。 +- 刺耳清单(地铁=高噪环境,我的阈值比宿舍党宽容,但有两个顶不住): + 1. `sfx/alarm`——5kHz 以上 63.9% 的能量是它能在地铁里穿出来的原因,我不主张删,但 16kHz 毛刺在耳道里像针,建议低通到 8kHz 内; + 2. `sfx/dodge`——高频嘶声(-2.30dBFS)在广播报站声里会跟金属啸叫撞车,听着像耳机破音; + 3. `sfx/shield_block`/`sfx/boost` 真峰值超标,连着 BGM 容易糊成一团。 +- 建议(按"下周还玩不玩"排序): + 1. 给一个 status key(比如对局期上滑):播报"护盾就绪/充能中、保护期剩几秒、船体几条"三件套,打断恢复一句话接上。 + 2. 保护期结束独占播完,别跟陨石抢麦——我 25 分钟里只有这一秒最需要听清。 + 3. alarm 保穿透但削毛刺;无效手势(冷却拒绝/滑空)给短震动即可,语音免了(车厢里听不清反而乱)。 diff --git a/research/space-polish/round1/p4-worker.md b/research/space-polish/round1/p4-worker.md new file mode 100644 index 00000000..cf8c5431 --- /dev/null +++ b/research/space-polish/round1/p4-worker.md @@ -0,0 +1,17 @@ +# P4 疲惫的工人评审:《盲航》(space polish 取证轮 R1) + +> 评审依据:同 round1 三份材料。我按"收工 21 点、宿舍外放小音量、反应不快"代入。规则最好一遍懂,声音别太炸,做错了别骂我。 + +### 盲航 +- 状态感知:2.5/5 —— 演练够耐心,四个方向一个一个教、教完还让我亲手试(这点我谢它),保护期里撞了也有人马上告诉我"那颗在左边,向左滑"(A 局 t+97-109)——虽然这句话老被下一颗掐断(行 367-378,每 4 秒重新开头一遍,我跟不上这速度)。但 60 秒以后我就掉线了:那句"训练护盾关闭"永远听不完整(t+151.6 被顶得只剩半句),紧跟着挨两下、两句"从哪撞的"都是零毫秒(行 287-307),然后就听见"船体只剩最后一次了"——**我都不知道前两次是怎么没的**,它就告诉我最后一次了。这就像我们工地:出了事不先说哪块板子掉的,直接宣布罚款。 +- 下一步明确性:4/5 —— 每颗陨石来了有喊"左!右!上!下!",跟着滑就行,简单;做错重教也不骂人("没关系,跟着我,我们继续"A 局 t+27.4 我听了两遍,暖心)。扣 1 分:我双击开护盾如果没充好,要等一会儿才有回音(4 秒去抖),头几秒我以为手机卡了;单击加速没反应的时候(冷却中/话没说完)更是连回音都没有。 +- 愿意继续玩:是 —— 比刷视频强,头一分钟有人手把手教,输了也不会被骂。但夜里玩那个警报音太炸(见下),舍友会嫌。 +- P0 问题:死亡归因听不到(同 P1/P2,A 局两轮复现 t+151-163、t+300-310);保护期结束这个"要变天了"的信号传达失败——我这种反应慢的,最需要提前量,现在反而是信息最乱的时刻。 +- 刺耳清单(小音量外放+疲惫耳朵,最怕突然的尖声): + 1. `sfx/alarm`——16kHz 的尖峰,小音量外放下是"吱——"的电流感,每颗陨石两遍,整局没停过; + 2. `sfx/crash` 不刺(低频,行得通),但 `sfx/hit`(30.7% ≥3kHz)撞上那一下跟 alarm 连着来,惊得我心跳; + 3. `sfx/dodge`/`sfx/shield_block` 高频嘶声,音量开小了发"丝丝"的破音感(真峰值 -2.3/-2.6dBFS 超标的后果)。 +- 建议: + 1. 保护期结束前后,说话的时候别让陨石抢话——我耳朵慢,给我三秒清静听"接下来靠你自己了"。 + 2. 警报音换闷一点的"嘟嘟",别用尖的,夜里吓人;撞上的动静也沉一点。 + 3. 我手势做错了(滑错方向、滑晚了、按快了)的时候,给个轻轻的震动告诉我"收到了但没用",别一点动静没有,我会一直重复同一个错。 diff --git a/research/space-polish/round1/sfx-spectrum-analysis.txt b/research/space-polish/round1/sfx-spectrum-analysis.txt new file mode 100644 index 00000000..35d26ba5 --- /dev/null +++ b/research/space-polish/round1/sfx-spectrum-analysis.txt @@ -0,0 +1,12 @@ +id dur TP dBFS DC %>3kHz %>5kHz centroid maxkHz flags +alarm 1.00 -4.00 -0.00005 82.3 63.9 7580 16.02 5k+高 3k+高 +boost 1.80 -2.70 -0.00018 53.0 43.9 5637 0.17 TP>-3! 5k+高 3k+高 +crash 3.00 -3.00 0.00069 1.5 1.1 170 0.03 +dodge 1.20 -2.30 0.00040 63.6 50.2 6330 0.52 TP>-3! 5k+高 3k+高 +hit 1.50 -3.80 -0.00001 30.7 16.7 2351 0.50 5k+高 +shield 1.50 -2.90 0.00011 1.2 0.5 499 0.50 TP>-3! +shield_block 1.50 -2.60 0.00014 52.2 40.2 4692 0.01 TP>-3! 5k+高 3k+高 +whoosh_down 2.50 -3.00 0.00016 0.2 0.1 211 0.25 +whoosh_left 2.50 -3.20 0.00004 0.1 0.0 188 0.16 +whoosh_right 2.50 -3.20 0.00004 0.1 0.0 188 0.16 +whoosh_up 2.50 -3.20 -0.00017 0.5 0.1 528 0.40 diff --git a/research/space-polish/round1/space_sfx_analysis.json b/research/space-polish/round1/space_sfx_analysis.json new file mode 100644 index 00000000..34a0932b --- /dev/null +++ b/research/space-polish/round1/space_sfx_analysis.json @@ -0,0 +1,101 @@ +{ + "alarm": { + "dur": 1.0, + "tp": -4.0, + "dc": -5e-05, + "e3": 82.3, + "e5": 63.9, + "centroid": 7580, + "maxkHz": 16.02 + }, + "boost": { + "dur": 1.8, + "tp": -2.7, + "dc": -0.00018, + "e3": 53.0, + "e5": 43.9, + "centroid": 5637, + "maxkHz": 0.17 + }, + "crash": { + "dur": 3.0, + "tp": -3.0, + "dc": 0.00069, + "e3": 1.5, + "e5": 1.1, + "centroid": 170, + "maxkHz": 0.03 + }, + "dodge": { + "dur": 1.2, + "tp": -2.3, + "dc": 0.0004, + "e3": 63.6, + "e5": 50.2, + "centroid": 6330, + "maxkHz": 0.52 + }, + "hit": { + "dur": 1.5, + "tp": -3.8, + "dc": -1e-05, + "e3": 30.7, + "e5": 16.7, + "centroid": 2351, + "maxkHz": 0.5 + }, + "shield": { + "dur": 1.5, + "tp": -2.9, + "dc": 0.00011, + "e3": 1.2, + "e5": 0.5, + "centroid": 499, + "maxkHz": 0.5 + }, + "shield_block": { + "dur": 1.5, + "tp": -2.6, + "dc": 0.00014, + "e3": 52.2, + "e5": 40.2, + "centroid": 4692, + "maxkHz": 0.01 + }, + "whoosh_down": { + "dur": 2.5, + "tp": -3.0, + "dc": 0.00016, + "e3": 0.2, + "e5": 0.1, + "centroid": 211, + "maxkHz": 0.25 + }, + "whoosh_left": { + "dur": 2.5, + "tp": -3.2, + "dc": 4e-05, + "e3": 0.1, + "e5": 0.0, + "centroid": 188, + "maxkHz": 0.16 + }, + "whoosh_right": { + "dur": 2.5, + "tp": -3.2, + "dc": 4e-05, + "e3": 0.1, + "e5": 0.0, + "centroid": 188, + "maxkHz": 0.16 + }, + "whoosh_up": { + "dur": 2.5, + "tp": -3.2, + "dc": -0.00017, + "e3": 0.5, + "e5": 0.1, + "centroid": 528, + "maxkHz": 0.4 + } +} \ No newline at end of file diff --git a/research/space-polish/round2/fix-evidence.md b/research/space-polish/round2/fix-evidence.md new file mode 100644 index 00000000..bd26b72f --- /dev/null +++ b/research/space-polish/round2/fix-evidence.md @@ -0,0 +1,106 @@ +# 修复清单与逐条证据(space polish R5,round2) + +取证轮结论 → 编号修复 → 验证证据。设计依据全文见 docs/design/04-space-rebuild.md「修订记录 R5」节。 + +## F1 刺耳音效重合成(P0) + +**嫌疑清单(round1 客观数据,research/space-polish/round1/sfx-spectrum-analysis.txt)** + +| id | 前真峰值 | 前≥3kHz | 前≥5kHz | 前质心 | 暴露频率 | +|---|---|---|---|---|---| +| alarm | -4.00 | 82.3% | 63.9% | 7580Hz(峰 16kHz) | 每颗陨石 2 遍、全程 4s 间隔 | +| dodge | **-2.30** | 63.6% | 50.2% | 6330Hz | 每次闪避 | +| shield_block | **-2.60** | 52.2% | 40.2% | 4692Hz | 保护期每 4s(比 alarm 还密) | +| boost | **-2.70** | 53.0% | 43.9% | 5637Hz | 每次加速 | +| shield | **-2.90** | 1.2% | 0.5% | 499Hz | 峰值超标 | + +**修复**:`tools/gen_space_syn.py`(新建,参照 gen_cipher_syn.py 先例)程序合成重制 5 件 + 新增 whiff。 +低谐波设计:alarm=700/560Hz 电子双音、dodge=500→2100Hz 气声扫频、shield_block=250-2300Hz 电涟、 +boost=55-93Hz 低哼+暗频推进、shield=320→980Hz shimmer。one-shot QC 全过(去直流+8ms cos²+ +编码后 ebur128 真峰值 ≤-3dBFS + 解码回读 ≥3kHz 能量)。 + +**修后数据(round2/sfx-spectrum-after.txt,与修前同口径)** + +| id | 后真峰值 | 后≥3kHz | 后≥5kHz | 后质心 | +|---|---|---|---|---| +| alarm | -3.50 | 0.0% | 0.0% | 593Hz(前 7580) | +| dodge | -3.90 | 0.0% | 0.0% | 1090Hz(前 6330) | +| shield_block | -3.90 | 0.0% | 0.0% | 1271Hz(前 4692) | +| boost | -3.60 | 0.0% | 0.0% | 114Hz | +| shield | -3.40 | 0.0% | 0.0% | 784Hz | +| whiff(新) | -4.80 | 0.0% | 0.0% | 461Hz | + +四席人设评审刺耳清单(alarm/dodge/shield_block/boost)全部消除;whoosh_*/crash/hit 修前即干净,未动。 + +## F2 保护期结束死亡窗:归因防顶断 replay(P0) + +**修前证据(round1 live-A transcript 行 261-331,ta 151.13-163.13)**:裸飞期逼近 4.0s=刷怪 4.0s, +撞击与下一颗 spawn 同窗 → `hit_left`/`hit_down` vstart 与 kill 同时间戳(**零毫秒归因**), +protect_end 被顶到 0.5-3.5s,8 秒三连撞至死不知方位。TRUNCATED 占比 39%(38/97)。 + +**修复**(web/space/game.js):呼喊生存优先裁定不变;`hit_`/`protect_end` 起播经 `_defendVoice` +登记,被顶断时登记残留,呼喊播完 onComplete → `_replayDefended` queue 补 replay(hit_last 排其后,先因后果)。 + +**修后证据(round2 live-A events,live-A-voice-timeline.txt)**:同窗口复现两轮—— +- 轮 1(ta 160.3-168.3):hit_left 零毫秒被杀 → 160.79 **replay 完整播 3.5s**; + hit_right 零毫秒被杀 → 164.78 **replay 完整播 3.5s**(两轮各自闭环)。 +- 轮 2(ta 253.9):hit_right 被杀 → 254.38 replay 播完 257.9。 +- protect_end 被顶断 → replay 补播(B 局 ta 64.69 第二轮 vstart)。 +- playtest.mjs 新增断言:登记残留→补 replay→replay 播完接 hit_last→4 条全绿(S1 172/172)。 + +## F3 保护期 protect_* 七连截断 → 去重 + +**修前**:6.96s 教学句对 4.0s 刷怪间隔,live-A 保护期 7 连 TRUNCATED(transcript 行 367-473), +每句都截在同一位置、同一句话重复 7 遍。 +**修复**:上一句 protect_ 在播时新吸收只发 shield_block 音 + WARNING 震(`_protectSaying` 去重)。 +**修后**:live-A' ta 102.3 protect_up **sim=1.0 完整播出**(修前同句 sim 0.33-0.63); +110.3 第二次吸收在播句刚结束时正常起新句。playtest 去重断言 2 条绿。 + +## F4 状态盲区:protect_soon 50s 预告 + +**修前**:保护期结束无任何提前量,P4(反应慢)/P3(打断恢复)最受伤的时刻恰是信息最乱的时刻。 +**修复**:开局 50s 播报新句「训练护盾还剩十秒。」(`protect_soon`,queue 不顶句,打断由 +_rearmRunTimers 补播)。 +**修后**:live-A' ta 149.8 sim=1.0 OK(ASR 完整识别);live-B' ta 53.8 OK。 +playtest 断言绿。对局期 status key 维持 00 §5 豁免表裁定(不新增手势,见 04-space-rebuild R5 末条)。 + +## F5 动作反馈盲区:加速冷却拒绝 + +**修前**:冷却中单击全静默(护盾拒绝有回音、加速没有);P1/P2/P4 三席点名。 +**修复**:`_deny(now, voiceId)` 共用 4s 去抖(护盾拒绝同路径、原句不变); +新句 `boost_not_ready`「引擎还在冷却,稍等一下。」+ HEARTBEAT 震。 +**修后**:playtest 4 条断言绿(拒绝播报/不重置加速/HEARTBEAT/去抖);live-B' 资产实测加载、 +护盾侧拒绝 echo 在乱按下反复兑现(feat_shield_done ×6 vstart)。 + +## F6 激活确认震动(兑现 04 §5 旧承诺) + +**修前**:boost/shield 激活(对局期+feature 期)均无 CONFIRM 震,文档 §5 承诺未兑现。 +**修复**:4 处激活点补 `vibrate('confirm')`。playtest 断言 2 条绿(delta 计数)。 + +## F7 挥空/滑错方向反馈 + +**修前**:无效手势与成功闪避同静默(dodge 音只在判定时响),玩家怀疑输入失灵。 +**修复**:playing 期滑向无悬置陨石方向 → `sfx/whiff` 轻叹(0.55 音量;引擎 swipe 震动已有"收到")。 +**修后**:live-B' 乱按中 whiff 实测触发 3+ 次(events 28.9/33.5 等);playtest 断言绿。 + +## 验证数字汇总 + +- web/space/test/playtest.mjs:**172 通过 / 0 失败**(新增 R5 断言 15 条) +- web/harness/guide.test.mjs:**122 通过 / 0 失败** +- tools/check_all_assets.py:**全项目绿**(space 184 文件/各 61 id,新增 2 句 ×2 性别 ×2 格式) +- 回归:其余 14 款游戏 playtest 全绿(abyss/bridge/cipher/detective/dungeon/escape/hunt/keeper/radio/rhythm/rpg/simon/storyline/teahouse) +- 刺耳复测:F1 表(全部 ≤-3.4dBFS、≥3kHz 0%) +- live 复跑(8141):A' 两轮保护期结束窗归因 replay 全闭环 + protect_soon OK ×2 局; + B' 零 console.error,whiff/护盾拒绝/protect 链全部实测触发 + +## 遗留清单 + +1. `voice/shield_block`(格挡确认句)不在防顶断登记内,保护期吸收高峰时仍可能被呼喊顶断—— + 有 shield_block 音效+WARNING 震落位,残损可接受;如后续投诉再纳入登记。 +2. live 复跑因 harness 手势派发延迟(峰值 46s,listen ASR 竞争)未能实机验证 boost_not_ready + 语音出声(资产加载、去抖路径、whiff 均实测;boost 拒绝语义由 playtest 覆盖)。建议真机人耳复测。 +3. gd_last_life(向导层"撑住"句)仍可能被后续呼喊顶断(guide.error 无 onComplete 钩子, + 引擎不可改);优先级低于归因句,未纳入本轮。 +4. `hit`(受击音)≥3kHz 30.7% 未重合成——四席评审均未点名(低频主导的撞击感成立),保留。 +5. gen_voice_dual.py --check 对本机缺旧 space staging wav 报「缺 male/female」59 条—— + 环境存量问题(旧 wav 未随仓库保留),与本轮无关;新句两性时长健康(2.48/1.52s、3.28/3.04s)。 diff --git a/research/space-polish/round2/live-A-events.jsonl b/research/space-polish/round2/live-A-events.jsonl new file mode 100644 index 00000000..9dfba0e0 --- /dev/null +++ b/research/space-polish/round2/live-A-events.jsonl @@ -0,0 +1,425 @@ +{"ev":"probe_ready","t":46.400000005960464,"ta":null} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":6049.199999988079,"ta":-0.147} +{"ev":"recstart","mime":"audio/webm;codecs=opus","t":6195.9000000059605,"ta":0} +{"ev":"fetch","url":"audio/sfx/whoosh_left.ogg","status":200,"ok":true,"ms":13,"t":6209,"ta":0.013} +{"ev":"fetch","url":"audio/sfx/whoosh_right.ogg","status":200,"ok":true,"ms":12,"t":6209.199999988079,"ta":0.013} +{"ev":"fetch","url":"audio/sfx/whoosh_up.ogg","status":200,"ok":true,"ms":14,"t":6210.9000000059605,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/alarm.ogg","status":200,"ok":true,"ms":16,"t":6213.199999988079,"ta":0.017} +{"ev":"fetch","url":"audio/sfx/whoosh_down.ogg","status":200,"ok":true,"ms":19,"t":6215.699999988079,"ta":0.02} +{"ev":"fetch","url":"audio/sfx/boost.ogg","status":200,"ok":true,"ms":21,"t":6217.9000000059605,"ta":0.022} +{"ev":"fetch","url":"audio/sfx/shield.ogg","status":200,"ok":true,"ms":26,"t":6223.199999988079,"ta":0.027} +{"ev":"fetch","url":"audio/sfx/shield_block.ogg","status":200,"ok":true,"ms":27,"t":6223.9000000059605,"ta":0.028} +{"ev":"fetch","url":"audio/sfx/dodge.ogg","status":200,"ok":true,"ms":28,"t":6225.5,"ta":0.03} +{"ev":"fetch","url":"audio/sfx/hit.ogg","status":200,"ok":true,"ms":29,"t":6226.199999988079,"ta":0.03} +{"ev":"fetch","url":"audio/sfx/crash.ogg","status":200,"ok":true,"ms":30,"t":6227.199999988079,"ta":0.031} +{"ev":"fetch","url":"audio/sfx/whiff.ogg","status":200,"ok":true,"ms":32,"t":6229.199999988079,"ta":0.033} +{"ev":"fetch","url":"audio/voice/male/dir_left.ogg","status":200,"ok":true,"ms":34,"t":6231.9000000059605,"ta":0.036} +{"ev":"fetch","url":"audio/voice/male/dir_right.ogg","status":200,"ok":true,"ms":37,"t":6234.5999999940395,"ta":0.039} +{"ev":"fetch","url":"audio/voice/male/dir_up.ogg","status":200,"ok":true,"ms":37,"t":6235.199999988079,"ta":0.039} +{"ev":"fetch","url":"audio/voice/male/dir_down.ogg","status":200,"ok":true,"ms":41,"t":6239.5999999940395,"ta":0.044} +{"ev":"fetch","url":"audio/voice/male/hit_right.ogg","status":200,"ok":true,"ms":42,"t":6240.800000011921,"ta":0.045} +{"ev":"fetch","url":"audio/voice/male/hit_left.ogg","status":200,"ok":true,"ms":46,"t":6244.300000011921,"ta":0.048} +{"ev":"fetch","url":"audio/voice/male/hit_up.ogg","status":200,"ok":true,"ms":51,"t":6249.4000000059605,"ta":0.054} +{"ev":"fetch","url":"audio/voice/male/hit_down.ogg","status":200,"ok":true,"ms":55,"t":6253.199999988079,"ta":0.057} +{"ev":"fetch","url":"audio/voice/male/hit_last.ogg","status":200,"ok":true,"ms":56,"t":6254.4000000059605,"ta":0.059} +{"ev":"fetch","url":"audio/voice/male/protect_left.ogg","status":200,"ok":true,"ms":57,"t":6255.5999999940395,"ta":0.06} +{"ev":"fetch","url":"audio/voice/male/protect_right.ogg","status":200,"ok":true,"ms":57,"t":6256.0999999940395,"ta":0.06} +{"ev":"fetch","url":"audio/voice/male/protect_up.ogg","status":200,"ok":true,"ms":59,"t":6257.9000000059605,"ta":0.062} +{"ev":"fetch","url":"audio/voice/male/protect_down.ogg","status":200,"ok":true,"ms":62,"t":6260.699999988079,"ta":0.065} +{"ev":"fetch","url":"audio/voice/male/protect_soon.ogg","status":200,"ok":true,"ms":64,"t":6262.800000011921,"ta":0.067} +{"ev":"fetch","url":"audio/voice/male/protect_end.ogg","status":200,"ok":true,"ms":65,"t":6263.4000000059605,"ta":0.068} +{"ev":"fetch","url":"audio/voice/male/shield_ready.ogg","status":200,"ok":true,"ms":70,"t":6268.9000000059605,"ta":0.073} +{"ev":"fetch","url":"audio/voice/male/shield_block.ogg","status":200,"ok":true,"ms":74,"t":6273.199999988079,"ta":0.077} +{"ev":"fetch","url":"audio/voice/male/feat_boost.ogg","status":200,"ok":true,"ms":79,"t":6278.4000000059605,"ta":0.083} +{"ev":"fetch","url":"audio/voice/male/feat_boost_done.ogg","status":200,"ok":true,"ms":86,"t":6285,"ta":0.089} +{"ev":"fetch","url":"audio/voice/male/feat_shield.ogg","status":200,"ok":true,"ms":87,"t":6286,"ta":0.09} +{"ev":"fetch","url":"audio/voice/male/boost_not_ready.ogg","status":200,"ok":true,"ms":87,"t":6286.800000011921,"ta":0.091} +{"ev":"fetch","url":"audio/voice/male/feat_shield_done.ogg","status":200,"ok":true,"ms":90,"t":6289.4000000059605,"ta":0.094} +{"ev":"fetch","url":"audio/voice/male/ms_10.ogg","status":200,"ok":true,"ms":94,"t":6293.699999988079,"ta":0.098} +{"ev":"fetch","url":"audio/voice/male/ms_25.ogg","status":200,"ok":true,"ms":104,"t":6303.5999999940395,"ta":0.108} +{"ev":"fetch","url":"audio/voice/male/ms_50.ogg","status":200,"ok":true,"ms":107,"t":6306.5999999940395,"ta":0.111} +{"ev":"fetch","url":"audio/voice/male/ms_100.ogg","status":200,"ok":true,"ms":107,"t":6306.5999999940395,"ta":0.111} +{"ev":"fetch","url":"audio/voice/male/gd_hit_hint.ogg","status":200,"ok":true,"ms":107,"t":6306.699999988079,"ta":0.111} +{"ev":"fetch","url":"audio/voice/male/gd_last_life.ogg","status":200,"ok":true,"ms":107,"t":6307.0999999940395,"ta":0.111} +{"ev":"fetch","url":"audio/voice/male/paused.ogg","status":200,"ok":true,"ms":108,"t":6308.300000011921,"ta":0.112} +{"ev":"fetch","url":"audio/voice/male/menu_main.ogg","status":200,"ok":true,"ms":109,"t":6309.0999999940395,"ta":0.113} +{"ev":"fetch","url":"audio/voice/male/menu_resume.ogg","status":200,"ok":true,"ms":114,"t":6314.199999988079,"ta":0.118} +{"ev":"fetch","url":"audio/voice/male/menu_lobby.ogg","status":200,"ok":true,"ms":115,"t":6314.9000000059605,"ta":0.119} +{"ev":"fetch","url":"audio/voice/male/menu_help.ogg","status":200,"ok":true,"ms":116,"t":6315.699999988079,"ta":0.12} +{"ev":"fetch","url":"audio/voice/male/help_recap.ogg","status":200,"ok":true,"ms":118,"t":6318.0999999940395,"ta":0.122} +{"ev":"fetch","url":"audio/voice/male/settings_hint.ogg","status":200,"ok":true,"ms":119,"t":6319,"ta":0.123} +{"ev":"fetch","url":"audio/voice/male/drill_welcome.ogg","status":200,"ok":true,"ms":119,"t":6319.300000011921,"ta":0.123} +{"ev":"fetch","url":"audio/voice/male/second_run_ask.ogg","status":200,"ok":true,"ms":122,"t":6322.699999988079,"ta":0.127} +{"ev":"fetch","url":"audio/voice/male/drill_rule.ogg","status":200,"ok":true,"ms":123,"t":6323.699999988079,"ta":0.128} +{"ev":"fetch","url":"audio/voice/male/skip_hint.ogg","status":200,"ok":true,"ms":124,"t":6324.5999999940395,"ta":0.129} +{"ev":"vstart","url":"audio/voice/male/drill_welcome.ogg","t":6327.199999988079,"dur":3.68,"ta":0.131} +{"ev":"vend","url":"audio/voice/male/drill_welcome.ogg","t":10150.09999999404,"reason":"kill","ta":3.954} +{"ev":"vstart","url":"audio/voice/male/skip_hint.ogg","t":10150.199999988079,"dur":1.92,"ta":3.954} +{"ev":"vend","url":"audio/voice/male/skip_hint.ogg","t":12030.300000011921,"reason":"kill","ta":5.834} +{"ev":"vstart","url":"audio/voice/male/drill_rule.ogg","t":12030.40000000596,"dur":3.6,"ta":5.835} +{"ev":"vend","url":"audio/voice/male/drill_rule.ogg","t":15861.40000000596,"reason":"kill","ta":9.666} +{"ev":"fetch","url":"audio/voice/male/drill_left.ogg","status":200,"ok":true,"ms":4,"t":15865.300000011921,"ta":9.669} +{"ev":"vstart","url":"audio/voice/male/drill_left.ogg","t":15869.90000000596,"dur":4.96,"ta":9.674} +{"ev":"vend","url":"audio/voice/male/drill_left.ogg","t":21085.30000001192,"reason":"kill","ta":14.889} +{"ev":"start","t":21085.59999999404,"sid":1,"url":"audio/sfx/whoosh_left.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":14.89} +{"ev":"vstart","url":"audio/voice/male/dir_left.ogg","t":21085.80000001192,"dur":0.5570975056689342,"ta":14.89} +{"ev":"vend","url":"audio/voice/male/dir_left.ogg","t":21851.59999999404,"reason":"kill","ta":15.656} +{"ev":"vibrate","pattern":"[60,40,60]","t":25586.09999999404,"ta":19.39} +{"ev":"fetch","url":"audio/voice/male/drill_retry_left.ogg","status":200,"ok":true,"ms":3,"t":25589.19999998808,"ta":19.393} +{"ev":"vstart","url":"audio/voice/male/drill_retry_left.ogg","t":25593,"dur":3.36,"ta":19.397} +{"ev":"vend","url":"audio/voice/male/drill_retry_left.ogg","t":29049.09999999404,"reason":"kill","ta":22.853} +{"ev":"start","t":29049.30000001192,"sid":2,"url":"audio/sfx/whoosh_left.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":22.853} +{"ev":"vstart","url":"audio/voice/male/dir_left.ogg","t":29049.40000000596,"dur":0.5570975056689342,"ta":22.854} +{"ev":"vend","url":"audio/voice/male/dir_left.ogg","t":29815.40000000596,"reason":"kill","ta":23.62} +{"ev":"vibrate","pattern":"[60,40,60]","t":33549.40000000596,"ta":27.354} +{"ev":"fetch","url":"audio/voice/male/drill_moveon.ogg","status":200,"ok":true,"ms":3,"t":33552.19999998808,"ta":27.356} +{"ev":"vstart","url":"audio/voice/male/drill_moveon.ogg","t":33556.69999998808,"dur":3.84,"ta":27.361} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":37190.69999998808,"ta":30.995} +{"ev":"vibrate","pattern":"[10]","t":37555.19999998808,"ta":31.359} +{"ev":"vend","url":"audio/voice/male/drill_moveon.ogg","t":37663,"reason":"kill","ta":31.467} +{"ev":"fetch","url":"audio/voice/male/drill_right.ogg","status":200,"ok":true,"ms":2,"t":37665.5,"ta":31.47} +{"ev":"vstart","url":"audio/voice/male/drill_right.ogg","t":37668.40000000596,"dur":2.64,"ta":31.473} +{"ev":"vend","url":"audio/voice/male/drill_right.ogg","t":40379.40000000596,"reason":"kill","ta":34.184} +{"ev":"start","t":40379.5,"sid":3,"url":"audio/sfx/whoosh_right.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":34.184} +{"ev":"vstart","url":"audio/voice/male/dir_right.ogg","t":40379.69999998808,"dur":0.39909297052154197,"ta":34.184} +{"ev":"vend","url":"audio/voice/male/dir_right.ogg","t":40867.19999998808,"reason":"kill","ta":34.671} +{"ev":"vibrate","pattern":"[60,40,60]","t":44879.69999998808,"ta":38.684} +{"ev":"fetch","url":"audio/voice/male/drill_retry_right.ogg","status":200,"ok":true,"ms":3,"t":44882.69999998808,"ta":38.687} +{"ev":"vstart","url":"audio/voice/male/drill_retry_right.ogg","t":44886.19999998808,"dur":3.2,"ta":38.69} +{"ev":"vend","url":"audio/voice/male/drill_retry_right.ogg","t":48343.09999999404,"reason":"kill","ta":42.147} +{"ev":"start","t":48343.19999998808,"sid":4,"url":"audio/sfx/whoosh_right.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":42.147} +{"ev":"vstart","url":"audio/voice/male/dir_right.ogg","t":48343.30000001192,"dur":0.39909297052154197,"ta":42.147} +{"ev":"vend","url":"audio/voice/male/dir_right.ogg","t":48830.69999998808,"reason":"kill","ta":42.635} +{"ev":"vibrate","pattern":"[60,40,60]","t":52843.30000001192,"ta":46.647} +{"ev":"vstart","url":"audio/voice/male/drill_moveon.ogg","t":52843.5,"dur":3.84,"ta":46.648} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":53960.80000001192,"ta":47.765} +{"ev":"vibrate","pattern":"[10]","t":54320.59999999404,"ta":48.125} +{"ev":"vend","url":"audio/voice/male/drill_moveon.ogg","t":56957.30000001192,"reason":"kill","ta":50.761} +{"ev":"fetch","url":"audio/voice/male/drill_up.ogg","status":200,"ok":true,"ms":3,"t":56960.19999998808,"ta":50.764} +{"ev":"vstart","url":"audio/voice/male/drill_up.ogg","t":56964.59999999404,"dur":4.24,"ta":50.769} +{"ev":"vend","url":"audio/voice/male/drill_up.ogg","t":61531.09999999404,"reason":"kill","ta":55.335} +{"ev":"start","t":61531.19999998808,"sid":5,"url":"audio/sfx/whoosh_up.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":55.335} +{"ev":"vstart","url":"audio/voice/male/dir_up.ogg","t":61531.40000000596,"dur":0.39909297052154197,"ta":55.336} +{"ev":"vend","url":"audio/voice/male/dir_up.ogg","t":62018.69999998808,"reason":"kill","ta":55.823} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":65727.19999998808,"ta":59.531} +{"ev":"vibrate","pattern":"[60,40,60]","t":66031.30000001192,"ta":59.835} +{"ev":"fetch","url":"audio/voice/male/drill_retry_up.ogg","status":200,"ok":true,"ms":3,"t":66034.90000000596,"ta":59.839} +{"ev":"vstart","url":"audio/voice/male/drill_retry_up.ogg","t":66039.40000000596,"dur":4.08,"ta":59.844} +{"ev":"vibrate","pattern":"[10]","t":66087.09999999404,"ta":59.891} +{"ev":"vend","url":"audio/voice/male/drill_retry_up.ogg","t":70144.90000000596,"reason":"kill","ta":63.949} +{"ev":"start","t":70145.09999999404,"sid":6,"url":"audio/sfx/whoosh_up.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":63.949} +{"ev":"vstart","url":"audio/voice/male/dir_up.ogg","t":70145.19999998808,"dur":0.39909297052154197,"ta":63.949} +{"ev":"vend","url":"audio/voice/male/dir_up.ogg","t":70632.40000000596,"reason":"kill","ta":64.436} +{"ev":"vibrate","pattern":"[60,40,60]","t":74645.09999999404,"ta":68.449} +{"ev":"vstart","url":"audio/voice/male/drill_moveon.ogg","t":74645.19999998808,"dur":3.84,"ta":68.449} +{"ev":"vend","url":"audio/voice/male/drill_moveon.ogg","t":78758.90000000596,"reason":"kill","ta":72.563} +{"ev":"fetch","url":"audio/voice/male/drill_down.ogg","status":200,"ok":true,"ms":3,"t":78761.80000001192,"ta":72.566} +{"ev":"vstart","url":"audio/voice/male/drill_down.ogg","t":78766.30000001192,"dur":3.28,"ta":72.57} +{"ev":"vend","url":"audio/voice/male/drill_down.ogg","t":82218.09999999404,"reason":"kill","ta":76.022} +{"ev":"start","t":82218.30000001192,"sid":7,"url":"audio/sfx/whoosh_down.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":76.022} +{"ev":"vstart","url":"audio/voice/male/dir_down.ogg","t":82218.30000001192,"dur":0.5570975056689342,"ta":76.022} +{"ev":"vend","url":"audio/voice/male/dir_down.ogg","t":82984.30000001192,"reason":"kill","ta":76.788} +{"ev":"vibrate","pattern":"[60,40,60]","t":86718.30000001192,"ta":80.522} +{"ev":"fetch","url":"audio/voice/male/drill_retry_down.ogg","status":200,"ok":true,"ms":3,"t":86721.19999998808,"ta":80.525} +{"ev":"vstart","url":"audio/voice/male/drill_retry_down.ogg","t":86725.40000000596,"dur":2.72,"ta":80.53} +{"ev":"vend","url":"audio/voice/male/drill_retry_down.ogg","t":89439,"reason":"kill","ta":83.243} +{"ev":"start","t":89439.09999999404,"sid":8,"url":"audio/sfx/whoosh_down.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":83.243} +{"ev":"vstart","url":"audio/voice/male/dir_down.ogg","t":89439.19999998808,"dur":0.5570975056689342,"ta":83.243} +{"ev":"vend","url":"audio/voice/male/dir_down.ogg","t":90205.40000000596,"reason":"kill","ta":84.01} +{"ev":"vibrate","pattern":"[60,40,60]","t":93939.19999998808,"ta":87.743} +{"ev":"vstart","url":"audio/voice/male/drill_moveon.ogg","t":93939.40000000596,"dur":3.84,"ta":87.744} +{"ev":"vend","url":"audio/voice/male/drill_moveon.ogg","t":98052.90000000596,"reason":"kill","ta":91.857} +{"ev":"fetch","url":"audio/voice/male/drill_done.ogg","status":200,"ok":true,"ms":3,"t":98055.80000001192,"ta":91.86} +{"ev":"vstart","url":"audio/voice/male/drill_done.ogg","t":98061.09999999404,"dur":4.72,"ta":91.865} +{"ev":"vend","url":"audio/voice/male/drill_done.ogg","t":102998.30000001192,"reason":"kill","ta":96.802} +{"ev":"fetch","url":"audio/bgm/engine.ogg","status":200,"ok":true,"ms":3,"t":103001.59999999404,"ta":96.806} +{"ev":"start","t":103186.30000001192,"sid":9,"url":"audio/bgm/engine.ogg","layer":"bgm","dur":117,"rate":1,"loop":true,"when":0,"ta":96.99} +{"ev":"start","t":104501.19999998808,"sid":10,"url":"audio/sfx/whoosh_up.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":98.305} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":107501.40000000596,"ta":101.306} +{"ev":"start","t":107501.5,"sid":11,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":101.306} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":108001.30000001192,"ta":101.805} +{"ev":"start","t":108001.40000000596,"sid":12,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":101.806} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":108501.40000000596,"ta":102.306} +{"ev":"start","t":108501.5,"sid":13,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":102.306} +{"ev":"vstart","url":"audio/voice/male/protect_up.ogg","t":108501.59999999404,"dur":6.96,"ta":102.306} +{"ev":"start","t":108502.5,"sid":14,"url":"audio/sfx/whoosh_down.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":102.307} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":111502.69999998808,"ta":105.307} +{"ev":"start","t":111502.69999998808,"sid":15,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":105.307} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":112002.59999999404,"ta":105.807} +{"ev":"start","t":112002.69999998808,"sid":16,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":105.807} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":112502.59999999404,"ta":106.307} +{"ev":"start","t":112502.69999998808,"sid":17,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":106.307} +{"ev":"start","t":112502.80000001192,"sid":18,"url":"audio/sfx/whoosh_up.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":106.307} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":115502.90000000596,"ta":109.307} +{"ev":"start","t":115503,"sid":19,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":109.307} +{"ev":"vend","url":"audio/voice/male/protect_up.ogg","t":115582.5,"reason":"kill","ta":109.387} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":116002.80000001192,"ta":109.807} +{"ev":"start","t":116003,"sid":20,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":109.807} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":116502.90000000596,"ta":110.307} +{"ev":"start","t":116503,"sid":21,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":110.307} +{"ev":"vstart","url":"audio/voice/male/protect_up.ogg","t":116503,"dur":6.96,"ta":110.307} +{"ev":"start","t":116503.90000000596,"sid":22,"url":"audio/sfx/whoosh_right.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":110.308} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":117236.40000000596,"ta":111.041} +{"ev":"vibrate","pattern":"[10]","t":117601.40000000596,"ta":111.406} +{"ev":"vend","url":"audio/voice/male/protect_up.ogg","t":117602,"reason":"kill","ta":111.406} +{"ev":"vstart","url":"audio/voice/male/paused.ogg","t":117602.09999999404,"dur":1.12,"ta":111.406} +{"ev":"fetch","url":"audio/bgm/menu.ogg","status":200,"ok":true,"ms":3,"t":117604.30000001192,"ta":111.408} +{"ev":"start","t":117748.09999999404,"sid":23,"url":"audio/bgm/menu.ogg","layer":"bgm","dur":90,"rate":1,"loop":true,"when":0,"ta":111.552} +{"ev":"stop","t":118108.30000001192,"sid":9,"when":0,"ta":111.912} +{"ev":"vend","url":"audio/voice/male/paused.ogg","t":118740.09999999404,"reason":"kill","ta":112.544} +{"ev":"vstart","url":"audio/voice/male/menu_main.ogg","t":118740.30000001192,"dur":4.16,"ta":112.544} +{"ev":"vend","url":"audio/voice/male/menu_main.ogg","t":122849.69999998808,"reason":"kill","ta":116.654} +{"ev":"vstart","url":"audio/voice/male/menu_resume.ogg","t":122849.80000001192,"dur":1.12,"ta":116.654} +{"ev":"vend","url":"audio/voice/male/menu_resume.ogg","t":123987.5,"reason":"kill","ta":117.792} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":135595.59999999404,"ta":129.4} +{"ev":"vibrate","pattern":"[20]","t":135844.80000001192,"ta":129.649} +{"ev":"start","t":135845.19999998808,"sid":24,"url":"audio/bgm/engine.ogg","layer":"bgm","dur":117,"rate":1,"loop":true,"when":0,"ta":129.649} +{"ev":"vstart","url":"audio/voice/male/feat_boost.ogg","t":135845.40000000596,"dur":6.48,"ta":129.649} +{"ev":"stop","t":136405.30000001192,"sid":23,"when":0,"ta":130.209} +{"ev":"vend","url":"audio/voice/male/feat_boost.ogg","t":142654.80000001192,"reason":"kill","ta":136.459} +{"ev":"start","t":146345.80000001192,"sid":25,"url":"audio/sfx/whoosh_up.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":140.15} +{"ev":"vstart","url":"audio/voice/male/feat_shield.ogg","t":147998.90000000596,"dur":4.4,"ta":141.803} +{"ev":"vend","url":"audio/voice/male/feat_shield.ogg","t":152568.69999998808,"reason":"kill","ta":146.373} +{"ev":"vstart","url":"audio/voice/male/protect_soon.ogg","t":155999,"dur":2.48,"ta":149.803} +{"ev":"start","t":158499.19999998808,"sid":26,"url":"audio/sfx/whoosh_left.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":152.303} +{"ev":"vend","url":"audio/voice/male/protect_soon.ogg","t":158721.69999998808,"reason":"kill","ta":152.526} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":159089.09999999404,"ta":152.893} +{"ev":"vibrate","pattern":"[20]","t":159337.5,"ta":153.142} +{"ev":"vibrate","pattern":"[20]","t":159337.5,"ta":153.142} +{"ev":"start","t":159337.59999999404,"sid":27,"url":"audio/sfx/shield.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":153.142} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":161499.30000001192,"ta":155.303} +{"ev":"start","t":161499.40000000596,"sid":28,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":155.304} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":161999.19999998808,"ta":155.803} +{"ev":"start","t":161999.40000000596,"sid":29,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":155.804} +{"ev":"vibrate","pattern":"[100]","t":162499.30000001192,"ta":156.303} +{"ev":"start","t":162499.30000001192,"sid":30,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":156.303} +{"ev":"vstart","url":"audio/voice/male/shield_block.ogg","t":162499.5,"dur":1.6,"ta":156.304} +{"ev":"start","t":162499.80000001192,"sid":31,"url":"audio/sfx/whoosh_left.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":156.304} +{"ev":"vend","url":"audio/voice/male/shield_block.ogg","t":162499.80000001192,"reason":"kill","ta":156.304} +{"ev":"vstart","url":"audio/voice/male/dir_left.ogg","t":162499.80000001192,"dur":0.5570975056689342,"ta":156.304} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":162998.19999998808,"ta":156.802} +{"ev":"vend","url":"audio/voice/male/dir_left.ogg","t":162998.19999998808,"reason":"kill","ta":156.802} +{"ev":"vstart","url":"audio/voice/male/protect_end.ogg","t":162998.30000001192,"dur":5.36,"ta":156.802} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":165499.90000000596,"ta":159.304} +{"ev":"start","t":165500,"sid":32,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":159.304} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":165999.90000000596,"ta":159.804} +{"ev":"start","t":166000,"sid":33,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":159.804} +{"ev":"vibrate","pattern":"[80]","t":166499.90000000596,"ta":160.304} +{"ev":"start","t":166500,"sid":34,"url":"audio/sfx/hit.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":160.304} +{"ev":"vend","url":"audio/voice/male/protect_end.ogg","t":166500.09999999404,"reason":"kill","ta":160.304} +{"ev":"vstart","url":"audio/voice/male/hit_left.ogg","t":166500.09999999404,"dur":4.64,"ta":160.304} +{"ev":"start","t":166500.90000000596,"sid":35,"url":"audio/sfx/whoosh_right.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":160.305} +{"ev":"vend","url":"audio/voice/male/hit_left.ogg","t":166500.90000000596,"reason":"kill","ta":160.305} +{"ev":"vstart","url":"audio/voice/male/dir_right.ogg","t":166500.90000000596,"dur":0.39909297052154197,"ta":160.305} +{"ev":"vend","url":"audio/voice/male/dir_right.ogg","t":166987.09999999404,"reason":"kill","ta":160.791} +{"ev":"vstart","url":"audio/voice/male/hit_left.ogg","t":166987.5,"dur":4.64,"ta":160.792} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":169501,"ta":163.305} +{"ev":"start","t":169501.09999999404,"sid":36,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":163.305} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":170001,"ta":163.805} +{"ev":"start","t":170001,"sid":37,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":163.805} +{"ev":"vibrate","pattern":"[80]","t":170501,"ta":164.305} +{"ev":"start","t":170501.19999998808,"sid":38,"url":"audio/sfx/hit.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":164.305} +{"ev":"vend","url":"audio/voice/male/hit_left.ogg","t":170501.19999998808,"reason":"kill","ta":164.305} +{"ev":"vstart","url":"audio/voice/male/hit_right.ogg","t":170501.30000001192,"dur":5.12,"ta":164.305} +{"ev":"start","t":170502.09999999404,"sid":39,"url":"audio/sfx/whoosh_right.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":164.306} +{"ev":"vend","url":"audio/voice/male/hit_right.ogg","t":170502.09999999404,"reason":"kill","ta":164.306} +{"ev":"vstart","url":"audio/voice/male/dir_right.ogg","t":170502.09999999404,"dur":0.39909297052154197,"ta":164.306} +{"ev":"vend","url":"audio/voice/male/dir_right.ogg","t":170980.59999999404,"reason":"kill","ta":164.785} +{"ev":"vstart","url":"audio/voice/male/hit_right.ogg","t":170980.80000001192,"dur":5.12,"ta":164.785} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":173502.09999999404,"ta":167.306} +{"ev":"start","t":173502.19999998808,"sid":40,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":167.306} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":174002.19999998808,"ta":167.806} +{"ev":"start","t":174002.30000001192,"sid":41,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":167.806} +{"ev":"vibrate","pattern":"[15]","t":174337.80000001192,"ta":168.142} +{"ev":"vibrate","pattern":"[80]","t":174502.09999999404,"ta":168.306} +{"ev":"vend","url":"audio/voice/male/hit_right.ogg","t":174502.5,"reason":"kill","ta":168.307} +{"ev":"vibrate","pattern":"[60,40,60]","t":174502.5,"ta":168.307} +{"ev":"start","t":174502.80000001192,"sid":42,"url":"audio/sfx/hit.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":168.307} +{"ev":"start","t":174502.90000000596,"sid":43,"url":"audio/sfx/crash.ogg","layer":"sfx","dur":3,"rate":1,"loop":false,"when":0,"ta":168.307} +{"ev":"vibrate","pattern":"[80]","t":174802.69999998808,"ta":168.607} +{"ev":"stop","t":175162.69999998808,"sid":24,"when":0,"ta":168.967} +{"ev":"vibrate","pattern":"[100]","t":175703,"ta":169.507} +{"ev":"fetch","url":"audio/voice/male/time_3.ogg","status":200,"ok":true,"ms":3,"t":175705.90000000596,"ta":169.51} +{"ev":"vstart","url":"audio/voice/male/time_3.ogg","t":175711.69999998808,"dur":3.2,"ta":169.516} +{"ev":"vend","url":"audio/voice/male/time_3.ogg","t":179176.59999999404,"reason":"kill","ta":172.981} +{"ev":"fetch","url":"audio/voice/male/new_record.ogg","status":200,"ok":true,"ms":3,"t":179179.19999998808,"ta":172.983} +{"ev":"vstart","url":"audio/voice/male/new_record.ogg","t":179182.19999998808,"dur":1.28,"ta":172.986} +{"ev":"vend","url":"audio/voice/male/new_record.ogg","t":180778.59999999404,"reason":"kill","ta":174.583} +{"ev":"fetch","url":"audio/voice/male/dodge_1.ogg","status":200,"ok":true,"ms":3,"t":180781.30000001192,"ta":174.585} +{"ev":"vstart","url":"audio/voice/male/dodge_1.ogg","t":180784.30000001192,"dur":1.36,"ta":174.588} +{"ev":"vend","url":"audio/voice/male/dodge_1.ogg","t":182380.69999998808,"reason":"kill","ta":176.185} +{"ev":"fetch","url":"audio/voice/male/restart_hint.ogg","status":200,"ok":true,"ms":3,"t":182383.69999998808,"ta":176.188} +{"ev":"vstart","url":"audio/voice/male/restart_hint.ogg","t":182388.30000001192,"dur":3.68,"ta":176.192} +{"ev":"start","t":185703.5,"sid":44,"url":"audio/bgm/menu.ogg","layer":"bgm","dur":90,"rate":1,"loop":true,"when":0,"ta":179.508} +{"ev":"vend","url":"audio/voice/male/restart_hint.ogg","t":186211.69999998808,"reason":"kill","ta":180.016} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":194218.19999998808,"ta":188.022} +{"ev":"vibrate","pattern":"[20]","t":194583.5,"ta":188.388} +{"ev":"start","t":194583.80000001192,"sid":45,"url":"audio/bgm/engine.ogg","layer":"bgm","dur":117,"rate":1,"loop":true,"when":0,"ta":188.388} +{"ev":"stop","t":195444,"sid":44,"when":0,"ta":189.248} +{"ev":"start","t":196084.09999999404,"sid":46,"url":"audio/sfx/whoosh_down.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":189.888} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":196693.40000000596,"ta":190.498} +{"ev":"vibrate","pattern":"[20]","t":197055.80000001192,"ta":190.86} +{"ev":"vibrate","pattern":"[20]","t":197055.90000000596,"ta":190.86} +{"ev":"start","t":197056.09999999404,"sid":47,"url":"audio/sfx/boost.ogg","layer":"sfx","dur":1.8,"rate":1,"loop":false,"when":0,"ta":190.86} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":199084.19999998808,"ta":192.888} +{"ev":"start","t":199084.19999998808,"sid":48,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":192.888} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":199584.09999999404,"ta":193.388} +{"ev":"start","t":199584.19999998808,"sid":49,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":193.388} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":200084.09999999404,"ta":193.888} +{"ev":"start","t":200084.19999998808,"sid":50,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":193.888} +{"ev":"vstart","url":"audio/voice/male/protect_down.ogg","t":200084.30000001192,"dur":6.08,"ta":193.888} +{"ev":"start","t":200085.30000001192,"sid":51,"url":"audio/sfx/whoosh_down.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":193.889} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":203085.40000000596,"ta":196.89} +{"ev":"start","t":203085.5,"sid":52,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":196.89} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":203585.40000000596,"ta":197.39} +{"ev":"start","t":203585.5,"sid":53,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":197.39} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":204085.40000000596,"ta":197.89} +{"ev":"start","t":204085.5,"sid":54,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":197.89} +{"ev":"start","t":204085.59999999404,"sid":55,"url":"audio/sfx/whoosh_down.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":197.89} +{"ev":"vend","url":"audio/voice/male/protect_down.ogg","t":206504.30000001192,"reason":"kill","ta":200.308} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":207085.69999998808,"ta":200.89} +{"ev":"start","t":207085.80000001192,"sid":56,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":200.89} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":207585.69999998808,"ta":201.39} +{"ev":"start","t":207585.80000001192,"sid":57,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":201.39} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":208085.69999998808,"ta":201.89} +{"ev":"start","t":208085.90000000596,"sid":58,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":201.89} +{"ev":"vstart","url":"audio/voice/male/protect_down.ogg","t":208085.90000000596,"dur":6.08,"ta":201.89} +{"ev":"start","t":208086.80000001192,"sid":59,"url":"audio/sfx/whoosh_up.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":201.891} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":211087,"ta":204.891} +{"ev":"start","t":211087.09999999404,"sid":60,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":204.891} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":211586.90000000596,"ta":205.391} +{"ev":"start","t":211587,"sid":61,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":205.391} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":212087,"ta":205.891} +{"ev":"start","t":212087,"sid":62,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":205.891} +{"ev":"start","t":212087.09999999404,"sid":63,"url":"audio/sfx/whoosh_left.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":205.891} +{"ev":"vend","url":"audio/voice/male/protect_down.ogg","t":214514.40000000596,"reason":"kill","ta":208.319} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":215087.19999998808,"ta":208.891} +{"ev":"start","t":215087.30000001192,"sid":64,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":208.891} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":215587.19999998808,"ta":209.391} +{"ev":"start","t":215587.30000001192,"sid":65,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":209.391} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":216087.19999998808,"ta":209.891} +{"ev":"start","t":216087.30000001192,"sid":66,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":209.891} +{"ev":"vstart","url":"audio/voice/male/protect_left.ogg","t":216087.40000000596,"dur":7.76,"ta":209.892} +{"ev":"start","t":216088.40000000596,"sid":67,"url":"audio/sfx/whoosh_up.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":209.893} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":219088.5,"ta":212.893} +{"ev":"start","t":219088.69999998808,"sid":68,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":212.893} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":219588.59999999404,"ta":213.393} +{"ev":"start","t":219588.69999998808,"sid":69,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":213.393} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":220088.59999999404,"ta":213.893} +{"ev":"start","t":220088.59999999404,"sid":70,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":213.893} +{"ev":"start","t":220088.69999998808,"sid":71,"url":"audio/sfx/whoosh_left.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":213.893} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":223088.80000001192,"ta":216.893} +{"ev":"start","t":223088.90000000596,"sid":72,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":216.893} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":223588.80000001192,"ta":217.393} +{"ev":"start","t":223588.90000000596,"sid":73,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":217.393} +{"ev":"vend","url":"audio/voice/male/protect_left.ogg","t":224010.59999999404,"reason":"kill","ta":217.815} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":224088.80000001192,"ta":217.893} +{"ev":"start","t":224089,"sid":74,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":217.893} +{"ev":"vstart","url":"audio/voice/male/protect_left.ogg","t":224089,"dur":7.76,"ta":217.893} +{"ev":"start","t":224090.19999998808,"sid":75,"url":"audio/sfx/whoosh_up.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":217.894} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":227090.19999998808,"ta":220.894} +{"ev":"start","t":227090.30000001192,"sid":76,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":220.894} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":227590.30000001192,"ta":221.394} +{"ev":"start","t":227590.40000000596,"sid":77,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":221.395} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":228090.19999998808,"ta":221.894} +{"ev":"start","t":228090.30000001192,"sid":78,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":221.894} +{"ev":"start","t":228090.40000000596,"sid":79,"url":"audio/sfx/whoosh_down.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":221.895} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":231090.5,"ta":224.895} +{"ev":"start","t":231090.59999999404,"sid":80,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":224.895} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":231590.5,"ta":225.395} +{"ev":"start","t":231590.59999999404,"sid":81,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":225.395} +{"ev":"vend","url":"audio/voice/male/protect_left.ogg","t":231997.59999999404,"reason":"kill","ta":225.802} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":232090.5,"ta":225.895} +{"ev":"start","t":232090.59999999404,"sid":82,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":225.895} +{"ev":"vstart","url":"audio/voice/male/protect_down.ogg","t":232090.69999998808,"dur":6.08,"ta":225.895} +{"ev":"start","t":232091.5,"sid":83,"url":"audio/sfx/whoosh_up.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":225.896} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":235091.59999999404,"ta":228.896} +{"ev":"start","t":235091.80000001192,"sid":84,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":228.896} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":235591.59999999404,"ta":229.396} +{"ev":"start","t":235591.69999998808,"sid":85,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":229.396} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":236091.69999998808,"ta":229.896} +{"ev":"start","t":236091.69999998808,"sid":86,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":229.896} +{"ev":"start","t":236091.90000000596,"sid":87,"url":"audio/sfx/whoosh_right.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":229.896} +{"ev":"vend","url":"audio/voice/male/protect_down.ogg","t":238521.69999998808,"reason":"kill","ta":232.326} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":239091.90000000596,"ta":232.896} +{"ev":"start","t":239092,"sid":88,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":232.896} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":239591.90000000596,"ta":233.396} +{"ev":"start","t":239592,"sid":89,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":233.396} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":240092,"ta":233.896} +{"ev":"start","t":240092.09999999404,"sid":90,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":233.896} +{"ev":"vstart","url":"audio/voice/male/protect_right.ogg","t":240092.19999998808,"dur":7.2,"ta":233.896} +{"ev":"start","t":240093.30000001192,"sid":91,"url":"audio/sfx/whoosh_right.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":233.897} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":243093.40000000596,"ta":236.898} +{"ev":"start","t":243093.40000000596,"sid":92,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":236.898} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":243593.40000000596,"ta":237.398} +{"ev":"start","t":243593.5,"sid":93,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":237.398} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":244093.40000000596,"ta":237.898} +{"ev":"start","t":244093.5,"sid":94,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":237.898} +{"ev":"start","t":244093.59999999404,"sid":95,"url":"audio/sfx/whoosh_up.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":237.898} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":247093.69999998808,"ta":240.898} +{"ev":"start","t":247093.80000001192,"sid":96,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":240.898} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":247593.59999999404,"ta":241.398} +{"ev":"start","t":247593.69999998808,"sid":97,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":241.398} +{"ev":"vend","url":"audio/voice/male/protect_right.ogg","t":247623.30000001192,"reason":"kill","ta":241.427} +{"ev":"vstart","url":"audio/voice/male/protect_soon.ogg","t":247623.30000001192,"dur":2.48,"ta":241.427} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":248093.69999998808,"ta":241.898} +{"ev":"start","t":248093.80000001192,"sid":98,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":241.898} +{"ev":"vend","url":"audio/voice/male/protect_soon.ogg","t":248093.80000001192,"reason":"kill","ta":241.898} +{"ev":"vstart","url":"audio/voice/male/protect_up.ogg","t":248093.80000001192,"dur":6.96,"ta":241.898} +{"ev":"start","t":248094.80000001192,"sid":99,"url":"audio/sfx/whoosh_left.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":241.899} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":251094.90000000596,"ta":244.899} +{"ev":"start","t":251094.90000000596,"sid":100,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":244.899} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":251594.80000001192,"ta":245.399} +{"ev":"start","t":251594.90000000596,"sid":101,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":245.399} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":252094.90000000596,"ta":245.899} +{"ev":"start","t":252095,"sid":102,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":245.899} +{"ev":"start","t":252095.09999999404,"sid":103,"url":"audio/sfx/whoosh_up.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":245.899} +{"ev":"vend","url":"audio/voice/male/protect_up.ogg","t":252095.09999999404,"reason":"kill","ta":245.899} +{"ev":"vstart","url":"audio/voice/male/dir_up.ogg","t":252095.19999998808,"dur":0.39909297052154197,"ta":245.899} +{"ev":"vend","url":"audio/voice/male/dir_up.ogg","t":252568.69999998808,"reason":"kill","ta":246.373} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":254584,"ta":248.388} +{"ev":"vstart","url":"audio/voice/male/protect_end.ogg","t":254584.09999999404,"dur":5.36,"ta":248.388} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":255095.19999998808,"ta":248.899} +{"ev":"start","t":255095.30000001192,"sid":104,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":248.899} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":255595.19999998808,"ta":249.399} +{"ev":"start","t":255595.30000001192,"sid":105,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":249.399} +{"ev":"vibrate","pattern":"[80]","t":256095.19999998808,"ta":249.899} +{"ev":"start","t":256095.30000001192,"sid":106,"url":"audio/sfx/hit.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":249.899} +{"ev":"vend","url":"audio/voice/male/protect_end.ogg","t":256095.30000001192,"reason":"kill","ta":249.899} +{"ev":"vstart","url":"audio/voice/male/hit_up.ogg","t":256095.40000000596,"dur":5.44,"ta":249.9} +{"ev":"start","t":256096.09999999404,"sid":107,"url":"audio/sfx/whoosh_right.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":249.9} +{"ev":"vend","url":"audio/voice/male/hit_up.ogg","t":256096.09999999404,"reason":"kill","ta":249.9} +{"ev":"vstart","url":"audio/voice/male/dir_right.ogg","t":256096.19999998808,"dur":0.39909297052154197,"ta":249.9} +{"ev":"vend","url":"audio/voice/male/dir_right.ogg","t":256585.59999999404,"reason":"kill","ta":250.39} +{"ev":"vstart","url":"audio/voice/male/hit_up.ogg","t":256585.69999998808,"dur":5.44,"ta":250.39} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":259096.19999998808,"ta":252.9} +{"ev":"start","t":259096.40000000596,"sid":108,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":252.901} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":259596.30000001192,"ta":253.4} +{"ev":"start","t":259596.40000000596,"sid":109,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":253.401} +{"ev":"vibrate","pattern":"[80]","t":260096.30000001192,"ta":253.9} +{"ev":"start","t":260096.40000000596,"sid":110,"url":"audio/sfx/hit.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":253.901} +{"ev":"vend","url":"audio/voice/male/hit_up.ogg","t":260096.40000000596,"reason":"kill","ta":253.901} +{"ev":"vstart","url":"audio/voice/male/hit_right.ogg","t":260096.40000000596,"dur":5.12,"ta":253.901} +{"ev":"start","t":260097.19999998808,"sid":111,"url":"audio/sfx/whoosh_up.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":253.901} +{"ev":"vend","url":"audio/voice/male/hit_right.ogg","t":260097.19999998808,"reason":"kill","ta":253.901} +{"ev":"vstart","url":"audio/voice/male/dir_up.ogg","t":260097.30000001192,"dur":0.39909297052154197,"ta":253.901} +{"ev":"vend","url":"audio/voice/male/dir_up.ogg","t":260578.80000001192,"reason":"kill","ta":254.383} +{"ev":"vstart","url":"audio/voice/male/hit_right.ogg","t":260579,"dur":5.12,"ta":254.383} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":263097.3000000119,"ta":256.901} +{"ev":"start","t":263097.5,"sid":112,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":256.902} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":263597.40000000596,"ta":257.402} +{"ev":"start","t":263597.40000000596,"sid":113,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":257.402} +{"ev":"vibrate","pattern":"[80]","t":264097.3000000119,"ta":257.901} +{"ev":"vend","url":"audio/voice/male/hit_right.ogg","t":264097.59999999404,"reason":"kill","ta":257.902} +{"ev":"vibrate","pattern":"[60,40,60]","t":264097.59999999404,"ta":257.902} +{"ev":"start","t":264097.6999999881,"sid":114,"url":"audio/sfx/hit.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":257.902} +{"ev":"start","t":264097.6999999881,"sid":115,"url":"audio/sfx/crash.ogg","layer":"sfx","dur":3,"rate":1,"loop":false,"when":0,"ta":257.902} +{"ev":"vibrate","pattern":"[80]","t":264397.6999999881,"ta":258.202} +{"ev":"stop","t":264757.6999999881,"sid":45,"when":0,"ta":258.562} +{"ev":"vstart","url":"audio/voice/male/time_3.ogg","t":265298,"dur":3.2,"ta":259.102} +{"ev":"vend","url":"audio/voice/male/time_3.ogg","t":268751.59999999404,"reason":"kill","ta":262.556} +{"ev":"vstart","url":"audio/voice/male/dodge_1.ogg","t":268751.8000000119,"dur":1.36,"ta":262.556} +{"ev":"vend","url":"audio/voice/male/dodge_1.ogg","t":270353.6999999881,"reason":"kill","ta":264.158} +{"ev":"vstart","url":"audio/voice/male/restart_hint.ogg","t":270354,"dur":3.68,"ta":264.158} +{"ev":"vend","url":"audio/voice/male/restart_hint.ogg","t":274184.59999999404,"reason":"kill","ta":267.989} +{"ev":"start","t":274184.8000000119,"sid":116,"url":"audio/bgm/menu.ogg","layer":"bgm","dur":90,"rate":1,"loop":true,"when":0,"ta":267.989} diff --git a/research/space-polish/round2/live-A-voice-timeline.txt b/research/space-polish/round2/live-A-voice-timeline.txt new file mode 100644 index 00000000..9ea32f46 --- /dev/null +++ b/research/space-polish/round2/live-A-voice-timeline.txt @@ -0,0 +1,137 @@ + -0.15 gesture tap + 0.13 vstart drill_welcome.ogg + 3.95 vend drill_welcome.ogg + 3.95 vstart skip_hint.ogg + 5.83 vend skip_hint.ogg + 5.83 vstart drill_rule.ogg + 9.67 vend drill_rule.ogg + 9.67 vstart drill_left.ogg + 14.89 vend drill_left.ogg + 14.89 vstart dir_left.ogg + 15.66 vend dir_left.ogg + 19.40 vstart drill_retry_left.ogg + 22.85 vend drill_retry_left.ogg + 22.85 vstart dir_left.ogg + 23.62 vend dir_left.ogg + 27.36 vstart drill_moveon.ogg + 31.00 gesture swipeleft + 31.47 vend drill_moveon.ogg + 31.47 vstart drill_right.ogg + 34.18 vend drill_right.ogg + 34.18 vstart dir_right.ogg + 34.67 vend dir_right.ogg + 38.69 vstart drill_retry_right.ogg + 42.15 vend drill_retry_right.ogg + 42.15 vstart dir_right.ogg + 42.63 vend dir_right.ogg + 46.65 vstart drill_moveon.ogg + 47.77 gesture swiperight + 50.76 vend drill_moveon.ogg + 50.77 vstart drill_up.ogg + 55.34 vend drill_up.ogg + 55.34 vstart dir_up.ogg + 55.82 vend dir_up.ogg + 59.53 gesture swipeup + 59.84 vstart drill_retry_up.ogg + 63.95 vend drill_retry_up.ogg + 63.95 vstart dir_up.ogg + 64.44 vend dir_up.ogg + 68.45 vstart drill_moveon.ogg + 72.56 vend drill_moveon.ogg + 72.57 vstart drill_down.ogg + 76.02 vend drill_down.ogg + 76.02 vstart dir_down.ogg + 76.79 vend dir_down.ogg + 80.53 vstart drill_retry_down.ogg + 83.24 vend drill_retry_down.ogg + 83.24 vstart dir_down.ogg + 84.01 vend dir_down.ogg + 87.74 vstart drill_moveon.ogg + 91.86 vend drill_moveon.ogg + 91.86 vstart drill_done.ogg + 96.80 vend drill_done.ogg + 102.31 vstart protect_up.ogg + 109.39 vend protect_up.ogg + 110.31 vstart protect_up.ogg + 111.04 gesture swipedown + 111.41 vend protect_up.ogg + 111.41 vstart paused.ogg + 112.54 vend paused.ogg + 112.54 vstart menu_main.ogg + 116.65 vend menu_main.ogg + 116.65 vstart menu_resume.ogg + 117.79 vend menu_resume.ogg + 129.40 gesture doubletap + 129.65 vstart feat_boost.ogg + 136.46 vend feat_boost.ogg + 141.80 vstart feat_shield.ogg + 146.37 vend feat_shield.ogg + 149.80 vstart protect_soon.ogg + 152.53 vend protect_soon.ogg + 152.89 gesture doubletap + 156.30 vstart shield_block.ogg + 156.30 vend shield_block.ogg + 156.30 vstart dir_left.ogg + 156.80 vend dir_left.ogg + 156.80 vstart protect_end.ogg + 160.30 vend protect_end.ogg + 160.30 vstart hit_left.ogg + 160.31 vend hit_left.ogg + 160.31 vstart dir_right.ogg + 160.79 vend dir_right.ogg + 160.79 vstart hit_left.ogg + 164.31 vend hit_left.ogg + 164.31 vstart hit_right.ogg + 164.31 vend hit_right.ogg + 164.31 vstart dir_right.ogg + 164.78 vend dir_right.ogg + 164.78 vstart hit_right.ogg + 168.31 vend hit_right.ogg + 169.52 vstart time_3.ogg + 172.98 vend time_3.ogg + 172.99 vstart new_record.ogg + 174.58 vend new_record.ogg + 174.59 vstart dodge_1.ogg + 176.19 vend dodge_1.ogg + 176.19 vstart restart_hint.ogg + 180.02 vend restart_hint.ogg + 188.02 gesture tap + 190.50 gesture tap + 193.89 vstart protect_down.ogg + 200.31 vend protect_down.ogg + 201.89 vstart protect_down.ogg + 208.32 vend protect_down.ogg + 209.89 vstart protect_left.ogg + 217.81 vend protect_left.ogg + 217.89 vstart protect_left.ogg + 225.80 vend protect_left.ogg + 225.90 vstart protect_down.ogg + 232.33 vend protect_down.ogg + 233.90 vstart protect_right.ogg + 241.43 vend protect_right.ogg + 241.43 vstart protect_soon.ogg + 241.90 vend protect_soon.ogg + 241.90 vstart protect_up.ogg + 245.90 vend protect_up.ogg + 245.90 vstart dir_up.ogg + 246.37 vend dir_up.ogg + 248.39 vstart protect_end.ogg + 249.90 vend protect_end.ogg + 249.90 vstart hit_up.ogg + 249.90 vend hit_up.ogg + 249.90 vstart dir_right.ogg + 250.39 vend dir_right.ogg + 250.39 vstart hit_up.ogg + 253.90 vend hit_up.ogg + 253.90 vstart hit_right.ogg + 253.90 vend hit_right.ogg + 253.90 vstart dir_up.ogg + 254.38 vend dir_up.ogg + 254.38 vstart hit_right.ogg + 257.90 vend hit_right.ogg + 259.10 vstart time_3.ogg + 262.56 vend time_3.ogg + 262.56 vstart dodge_1.ogg + 264.16 vend dodge_1.ogg + 264.16 vstart restart_hint.ogg + 267.99 vend restart_hint.ogg diff --git a/research/space-polish/round2/live-B-events.jsonl b/research/space-polish/round2/live-B-events.jsonl new file mode 100644 index 00000000..b5dbf63b --- /dev/null +++ b/research/space-polish/round2/live-B-events.jsonl @@ -0,0 +1,420 @@ +{"ev":"probe_ready","t":8.400000005960464,"ta":null} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":6011.4000000059605,"ta":-0.07} +{"ev":"recstart","mime":"audio/webm;codecs=opus","t":6081.699999988079,"ta":0} +{"ev":"fetch","url":"audio/sfx/whoosh_left.ogg","status":200,"ok":true,"ms":15,"t":6096.4000000059605,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/whoosh_right.ogg","status":200,"ok":true,"ms":14,"t":6096.5,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/whoosh_up.ogg","status":200,"ok":true,"ms":14,"t":6096.5999999940395,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/whoosh_down.ogg","status":200,"ok":true,"ms":14,"t":6096.699999988079,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/alarm.ogg","status":200,"ok":true,"ms":14,"t":6096.699999988079,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/boost.ogg","status":200,"ok":true,"ms":14,"t":6096.699999988079,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/shield.ogg","status":200,"ok":true,"ms":16,"t":6098.799999982119,"ta":0.017} +{"ev":"fetch","url":"audio/sfx/shield_block.ogg","status":200,"ok":true,"ms":17,"t":6099,"ta":0.017} +{"ev":"fetch","url":"audio/sfx/dodge.ogg","status":200,"ok":true,"ms":17,"t":6099.5,"ta":0.018} +{"ev":"fetch","url":"audio/sfx/whiff.ogg","status":200,"ok":true,"ms":18,"t":6100.199999988079,"ta":0.019} +{"ev":"fetch","url":"audio/sfx/hit.ogg","status":200,"ok":true,"ms":18,"t":6100.5,"ta":0.019} +{"ev":"fetch","url":"audio/sfx/crash.ogg","status":200,"ok":true,"ms":19,"t":6101.199999988079,"ta":0.02} +{"ev":"fetch","url":"audio/voice/female/dir_left.ogg","status":200,"ok":true,"ms":24,"t":6106.299999982119,"ta":0.025} +{"ev":"fetch","url":"audio/voice/female/dir_right.ogg","status":200,"ok":true,"ms":24,"t":6106.4000000059605,"ta":0.025} +{"ev":"fetch","url":"audio/voice/female/dir_up.ogg","status":200,"ok":true,"ms":24,"t":6106.4000000059605,"ta":0.025} +{"ev":"fetch","url":"audio/voice/female/dir_down.ogg","status":200,"ok":true,"ms":24,"t":6107.4000000059605,"ta":0.026} +{"ev":"fetch","url":"audio/voice/female/hit_left.ogg","status":200,"ok":true,"ms":25,"t":6108.0999999940395,"ta":0.026} +{"ev":"fetch","url":"audio/voice/female/hit_right.ogg","status":200,"ok":true,"ms":26,"t":6109.4000000059605,"ta":0.028} +{"ev":"fetch","url":"audio/voice/female/hit_up.ogg","status":200,"ok":true,"ms":29,"t":6112.5,"ta":0.031} +{"ev":"fetch","url":"audio/voice/female/hit_down.ogg","status":200,"ok":true,"ms":31,"t":6114,"ta":0.032} +{"ev":"fetch","url":"audio/voice/female/hit_last.ogg","status":200,"ok":true,"ms":35,"t":6118.4000000059605,"ta":0.037} +{"ev":"fetch","url":"audio/voice/female/protect_left.ogg","status":200,"ok":true,"ms":37,"t":6120.799999982119,"ta":0.039} +{"ev":"fetch","url":"audio/voice/female/protect_right.ogg","status":200,"ok":true,"ms":37,"t":6120.799999982119,"ta":0.039} +{"ev":"fetch","url":"audio/voice/female/protect_up.ogg","status":200,"ok":true,"ms":37,"t":6120.9000000059605,"ta":0.039} +{"ev":"fetch","url":"audio/voice/female/protect_down.ogg","status":200,"ok":true,"ms":39,"t":6122.5999999940395,"ta":0.041} +{"ev":"fetch","url":"audio/voice/female/protect_end.ogg","status":200,"ok":true,"ms":39,"t":6122.799999982119,"ta":0.041} +{"ev":"fetch","url":"audio/voice/female/protect_soon.ogg","status":200,"ok":true,"ms":39,"t":6123,"ta":0.041} +{"ev":"fetch","url":"audio/voice/female/shield_ready.ogg","status":200,"ok":true,"ms":45,"t":6128.699999988079,"ta":0.047} +{"ev":"fetch","url":"audio/voice/female/shield_block.ogg","status":200,"ok":true,"ms":45,"t":6128.699999988079,"ta":0.047} +{"ev":"fetch","url":"audio/voice/female/feat_boost.ogg","status":200,"ok":true,"ms":45,"t":6128.799999982119,"ta":0.047} +{"ev":"fetch","url":"audio/voice/female/feat_boost_done.ogg","status":200,"ok":true,"ms":46,"t":6130.5,"ta":0.049} +{"ev":"fetch","url":"audio/voice/female/feat_shield.ogg","status":200,"ok":true,"ms":55,"t":6139.699999988079,"ta":0.058} +{"ev":"fetch","url":"audio/voice/female/feat_shield_done.ogg","status":200,"ok":true,"ms":57,"t":6141.0999999940395,"ta":0.059} +{"ev":"fetch","url":"audio/voice/female/boost_not_ready.ogg","status":200,"ok":true,"ms":57,"t":6141.0999999940395,"ta":0.059} +{"ev":"fetch","url":"audio/voice/female/ms_10.ogg","status":200,"ok":true,"ms":57,"t":6141.199999988079,"ta":0.06} +{"ev":"fetch","url":"audio/voice/female/ms_25.ogg","status":200,"ok":true,"ms":57,"t":6141.299999982119,"ta":0.06} +{"ev":"fetch","url":"audio/voice/female/ms_50.ogg","status":200,"ok":true,"ms":58,"t":6142.0999999940395,"ta":0.06} +{"ev":"fetch","url":"audio/voice/female/ms_100.ogg","status":200,"ok":true,"ms":58,"t":6142.299999982119,"ta":0.061} +{"ev":"fetch","url":"audio/voice/female/gd_hit_hint.ogg","status":200,"ok":true,"ms":59,"t":6144.0999999940395,"ta":0.062} +{"ev":"fetch","url":"audio/voice/female/gd_last_life.ogg","status":200,"ok":true,"ms":60,"t":6144.5,"ta":0.063} +{"ev":"fetch","url":"audio/voice/female/paused.ogg","status":200,"ok":true,"ms":62,"t":6147,"ta":0.065} +{"ev":"fetch","url":"audio/voice/female/menu_main.ogg","status":200,"ok":true,"ms":63,"t":6147.9000000059605,"ta":0.066} +{"ev":"fetch","url":"audio/voice/female/menu_resume.ogg","status":200,"ok":true,"ms":71,"t":6155.5,"ta":0.074} +{"ev":"fetch","url":"audio/voice/female/menu_lobby.ogg","status":200,"ok":true,"ms":77,"t":6162,"ta":0.08} +{"ev":"fetch","url":"audio/voice/female/menu_help.ogg","status":200,"ok":true,"ms":77,"t":6162.0999999940395,"ta":0.08} +{"ev":"fetch","url":"audio/voice/female/settings_hint.ogg","status":200,"ok":true,"ms":77,"t":6162.4000000059605,"ta":0.081} +{"ev":"fetch","url":"audio/voice/female/help_recap.ogg","status":200,"ok":true,"ms":78,"t":6162.5,"ta":0.081} +{"ev":"fetch","url":"audio/voice/female/drill_welcome.ogg","status":200,"ok":true,"ms":79,"t":6163.5999999940395,"ta":0.082} +{"ev":"fetch","url":"audio/voice/female/drill_rule.ogg","status":200,"ok":true,"ms":79,"t":6163.799999982119,"ta":0.082} +{"ev":"fetch","url":"audio/voice/female/second_run_ask.ogg","status":200,"ok":true,"ms":79,"t":6163.9000000059605,"ta":0.082} +{"ev":"fetch","url":"audio/voice/female/skip_hint.ogg","status":200,"ok":true,"ms":80,"t":6165,"ta":0.083} +{"ev":"vstart","url":"audio/voice/female/second_run_ask.ogg","t":6182,"dur":3.04,"ta":0.1} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":6510,"ta":0.428} +{"ev":"vibrate","pattern":"[20]","t":6874.0999999940395,"ta":0.792} +{"ev":"vend","url":"audio/voice/female/second_run_ask.ogg","t":6874.199999988079,"reason":"kill","ta":0.793} +{"ev":"fetch","url":"audio/bgm/engine.ogg","status":200,"ok":true,"ms":3,"t":6877.0999999940395,"ta":0.795} +{"ev":"start","t":7044,"sid":1,"url":"audio/bgm/engine.ogg","layer":"bgm","dur":117,"rate":1,"loop":true,"when":0,"ta":0.962} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":7843.4000000059605,"ta":1.762} +{"ev":"vibrate","pattern":"[10]","t":8194,"ta":2.112} +{"ev":"start","t":8194.5,"sid":2,"url":"audio/sfx/whiff.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":2.113} +{"ev":"start","t":8376.799999982119,"sid":3,"url":"audio/sfx/whoosh_left.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":2.295} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":9423.699999988079,"ta":3.342} +{"ev":"vibrate","pattern":"[20]","t":9786.90000000596,"ta":3.705} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":10254.299999982119,"ta":4.173} +{"ev":"vibrate","pattern":"[10]","t":10609.799999982119,"ta":4.528} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":11376.90000000596,"ta":5.295} +{"ev":"start","t":11377.09999999404,"sid":4,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":5.295} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":11794.5,"ta":5.713} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":11877,"ta":5.795} +{"ev":"start","t":11877.09999999404,"sid":5,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":5.795} +{"ev":"vibrate","pattern":"[20]","t":12042.299999982119,"ta":5.961} +{"ev":"vibrate","pattern":"[40,100,40]","t":12042.5,"ta":5.961} +{"ev":"vstart","url":"audio/voice/female/feat_shield_done.ogg","t":12043,"dur":4.64,"ta":5.961} +{"ev":"start","t":12377.199999988079,"sid":6,"url":"audio/sfx/dodge.ogg","layer":"sfx","dur":1.2,"rate":1,"loop":false,"when":0,"ta":6.296} +{"ev":"start","t":12377.40000000596,"sid":7,"url":"audio/sfx/whoosh_left.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":6.296} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":13313.799999982119,"ta":7.232} +{"ev":"vibrate","pattern":"[10]","t":13677,"ta":7.595} +{"ev":"vend","url":"audio/voice/female/feat_shield_done.ogg","t":13677.59999999404,"reason":"kill","ta":7.596} +{"ev":"vstart","url":"audio/voice/female/paused.ogg","t":13677.699999988079,"dur":0.9570975056689343,"ta":7.596} +{"ev":"fetch","url":"audio/bgm/menu.ogg","status":200,"ok":true,"ms":3,"t":13680,"ta":7.598} +{"ev":"start","t":13807.40000000596,"sid":8,"url":"audio/bgm/menu.ogg","layer":"bgm","dur":90,"rate":1,"loop":true,"when":0,"ta":7.726} +{"ev":"stop","t":14167.799999982119,"sid":1,"when":0,"ta":8.086} +{"ev":"vend","url":"audio/voice/female/paused.ogg","t":14630.40000000596,"reason":"kill","ta":8.549} +{"ev":"vstart","url":"audio/voice/female/menu_main.ogg","t":14630.59999999404,"dur":3.92,"ta":8.549} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":14681.5,"ta":8.6} +{"ev":"vibrate","pattern":"[10]","t":15043.5,"ta":8.962} +{"ev":"start","t":15043.90000000596,"sid":9,"url":"audio/bgm/engine.ogg","layer":"bgm","dur":117,"rate":1,"loop":true,"when":0,"ta":8.962} +{"ev":"stop","t":15604.09999999404,"sid":8,"when":0,"ta":9.522} +{"ev":"start","t":15844.09999999404,"sid":10,"url":"audio/sfx/whoosh_left.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":9.762} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":15942.09999999404,"ta":9.86} +{"ev":"vibrate","pattern":"[20]","t":16190.299999982119,"ta":10.109} +{"ev":"vibrate","pattern":"[40,100,40]","t":16190.299999982119,"ta":10.109} +{"ev":"vend","url":"audio/voice/female/menu_main.ogg","t":16190.299999982119,"reason":"kill","ta":10.109} +{"ev":"vstart","url":"audio/voice/female/feat_shield_done.ogg","t":16190.59999999404,"dur":4.64,"ta":10.109} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":17363,"ta":11.281} +{"ev":"vibrate","pattern":"[10]","t":17726.79999998212,"ta":11.645} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":18844.29999998212,"ta":12.763} +{"ev":"start","t":18844.40000000596,"sid":11,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":12.763} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":19151.79999998212,"ta":13.07} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":19344.09999999404,"ta":13.262} +{"ev":"start","t":19344.19999998808,"sid":12,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":13.263} +{"ev":"vibrate","pattern":"[10]","t":19509.5,"ta":13.428} +{"ev":"vend","url":"audio/voice/female/feat_shield_done.ogg","t":19831.09999999404,"reason":"kill","ta":13.749} +{"ev":"start","t":19844.29999998212,"sid":13,"url":"audio/sfx/dodge.ogg","layer":"sfx","dur":1.2,"rate":1,"loop":false,"when":0,"ta":13.763} +{"ev":"start","t":19844.29999998212,"sid":14,"url":"audio/sfx/whoosh_down.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":13.763} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":20250.09999999404,"ta":14.168} +{"ev":"vibrate","pattern":"[10]","t":20609.79999998212,"ta":14.528} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":21617.69999998808,"ta":15.536} +{"ev":"vibrate","pattern":"[10]","t":21977,"ta":15.895} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":22844.40000000596,"ta":16.763} +{"ev":"start","t":22844.5,"sid":15,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":16.763} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":23074.5,"ta":16.993} +{"ev":"vibrate","pattern":"[20]","t":23321.90000000596,"ta":17.24} +{"ev":"vibrate","pattern":"[40,100,40]","t":23321.90000000596,"ta":17.24} +{"ev":"vstart","url":"audio/voice/female/feat_shield_done.ogg","t":23322,"dur":4.64,"ta":17.24} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":23344.40000000596,"ta":17.263} +{"ev":"start","t":23344.5,"sid":16,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":17.263} +{"ev":"start","t":23844.5,"sid":17,"url":"audio/sfx/dodge.ogg","layer":"sfx","dur":1.2,"rate":1,"loop":false,"when":0,"ta":17.763} +{"ev":"start","t":23844.59999999404,"sid":18,"url":"audio/sfx/whoosh_up.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":17.763} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":24670.09999999404,"ta":18.588} +{"ev":"vibrate","pattern":"[10]","t":25025.79999998212,"ta":18.944} +{"ev":"start","t":25026.19999998808,"sid":19,"url":"audio/bgm/menu.ogg","layer":"bgm","dur":90,"rate":1,"loop":true,"when":0,"ta":18.945} +{"ev":"vend","url":"audio/voice/female/feat_shield_done.ogg","t":25026.19999998808,"reason":"kill","ta":18.945} +{"ev":"vstart","url":"audio/voice/female/paused.ogg","t":25026.19999998808,"dur":0.9570975056689343,"ta":18.945} +{"ev":"stop","t":25386.29999998212,"sid":9,"when":0,"ta":19.305} +{"ev":"vend","url":"audio/voice/female/paused.ogg","t":25983.90000000596,"reason":"kill","ta":19.902} +{"ev":"vstart","url":"audio/voice/female/menu_main.ogg","t":25984,"dur":3.92,"ta":19.902} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":26249.40000000596,"ta":20.168} +{"ev":"vibrate","pattern":"[20]","t":26496.79999998212,"ta":20.415} +{"ev":"start","t":26497,"sid":20,"url":"audio/bgm/engine.ogg","layer":"bgm","dur":117,"rate":1,"loop":true,"when":0,"ta":20.415} +{"ev":"vend","url":"audio/voice/female/menu_main.ogg","t":26874.40000000596,"reason":"kill","ta":20.793} +{"ev":"vstart","url":"audio/voice/female/feat_boost.ogg","t":26874.40000000596,"dur":3.84,"ta":20.793} +{"ev":"stop","t":27057.19999998808,"sid":19,"when":0,"ta":20.976} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":27521.09999999404,"ta":21.439} +{"ev":"vibrate","pattern":"[10]","t":27876.29999998212,"ta":21.795} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":29189,"ta":23.107} +{"ev":"vibrate","pattern":"[10]","t":29542.69999998808,"ta":23.461} +{"ev":"vend","url":"audio/voice/female/feat_boost.ogg","t":29954.09999999404,"reason":"kill","ta":23.872} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":30371.09999999404,"ta":24.289} +{"ev":"vibrate","pattern":"[20]","t":30734.69999998808,"ta":24.653} +{"ev":"vibrate","pattern":"[20]","t":30734.90000000596,"ta":24.653} +{"ev":"start","t":30735.09999999404,"sid":21,"url":"audio/sfx/boost.ogg","layer":"sfx","dur":1.8,"rate":1,"loop":false,"when":0,"ta":24.653} +{"ev":"vstart","url":"audio/voice/female/feat_boost_done.ogg","t":30735.19999998808,"dur":3.44,"ta":24.654} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":31664.69999998808,"ta":25.583} +{"ev":"vibrate","pattern":"[20]","t":32028.69999998808,"ta":25.947} +{"ev":"vend","url":"audio/voice/female/feat_boost_done.ogg","t":32028.79999998212,"reason":"kill","ta":25.947} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":33126.79999998212,"ta":27.045} +{"ev":"start","t":33235.29999998212,"sid":22,"url":"audio/sfx/whoosh_right.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":27.154} +{"ev":"vibrate","pattern":"[20]","t":33374.90000000596,"ta":27.293} +{"ev":"vibrate","pattern":"[40,100,40]","t":33374.90000000596,"ta":27.293} +{"ev":"vstart","url":"audio/voice/female/feat_shield_done.ogg","t":33375.09999999404,"dur":4.64,"ta":27.293} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":34653.09999999404,"ta":28.571} +{"ev":"vibrate","pattern":"[10]","t":35009.5,"ta":28.928} +{"ev":"start","t":35009.59999999404,"sid":23,"url":"audio/sfx/whiff.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":28.928} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":36003.69999998808,"ta":29.922} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":36235.19999998808,"ta":30.154} +{"ev":"start","t":36235.40000000596,"sid":24,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":30.154} +{"ev":"vibrate","pattern":"[10]","t":36359.40000000596,"ta":30.278} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":36735.19999998808,"ta":30.654} +{"ev":"start","t":36735.29999998212,"sid":25,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":30.654} +{"ev":"vend","url":"audio/voice/female/feat_shield_done.ogg","t":37012.29999998212,"reason":"kill","ta":30.931} +{"ev":"start","t":37235.40000000596,"sid":26,"url":"audio/sfx/dodge.ogg","layer":"sfx","dur":1.2,"rate":1,"loop":false,"when":0,"ta":31.154} +{"ev":"start","t":37235.5,"sid":27,"url":"audio/sfx/whoosh_right.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":31.154} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":37739.5,"ta":31.658} +{"ev":"vibrate","pattern":"[20]","t":37986.5,"ta":31.905} +{"ev":"vibrate","pattern":"[40,100,40]","t":37986.5,"ta":31.905} +{"ev":"vstart","url":"audio/voice/female/feat_shield_done.ogg","t":37986.59999999404,"dur":4.64,"ta":31.905} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":39226.69999998808,"ta":33.145} +{"ev":"vibrate","pattern":"[10]","t":39592.40000000596,"ta":33.511} +{"ev":"start","t":39592.5,"sid":28,"url":"audio/sfx/whiff.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":33.511} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":40235.5,"ta":34.154} +{"ev":"start","t":40235.79999998212,"sid":29,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":34.154} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":40616.09999999404,"ta":34.534} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":40735.59999999404,"ta":34.654} +{"ev":"start","t":40735.79999998212,"sid":30,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":34.654} +{"ev":"vibrate","pattern":"[10]","t":40976.19999998808,"ta":34.895} +{"ev":"start","t":40976.29999998212,"sid":31,"url":"audio/sfx/whiff.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":34.895} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":41235.5,"ta":35.154} +{"ev":"start","t":41235.59999999404,"sid":32,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":35.154} +{"ev":"vend","url":"audio/voice/female/feat_shield_done.ogg","t":41235.69999998808,"reason":"kill","ta":35.154} +{"ev":"vstart","url":"audio/voice/female/protect_right.ogg","t":41235.79999998212,"dur":5.2,"ta":35.154} +{"ev":"start","t":41236.59999999404,"sid":33,"url":"audio/sfx/whoosh_right.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":35.155} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":42125.19999998808,"ta":36.044} +{"ev":"vibrate","pattern":"[20]","t":42488.79999998212,"ta":36.407} +{"ev":"vend","url":"audio/voice/female/protect_right.ogg","t":42488.90000000596,"reason":"kill","ta":36.407} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":43472.40000000596,"ta":37.391} +{"ev":"vibrate","pattern":"[20]","t":43834.69999998808,"ta":37.753} +{"ev":"vibrate","pattern":"[20]","t":43834.79999998212,"ta":37.753} +{"ev":"start","t":43834.90000000596,"sid":34,"url":"audio/sfx/boost.ogg","layer":"sfx","dur":1.8,"rate":1,"loop":false,"when":0,"ta":37.753} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":44236.69999998808,"ta":38.155} +{"ev":"start","t":44236.90000000596,"sid":35,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":38.155} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":44669.5,"ta":38.588} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":44736.69999998808,"ta":38.655} +{"ev":"start","t":44736.90000000596,"sid":36,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":38.655} +{"ev":"vibrate","pattern":"[10]","t":45025.79999998212,"ta":38.944} +{"ev":"start","t":45236.90000000596,"sid":37,"url":"audio/sfx/dodge.ogg","layer":"sfx","dur":1.2,"rate":1,"loop":false,"when":0,"ta":39.155} +{"ev":"start","t":45237,"sid":38,"url":"audio/sfx/whoosh_left.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":39.155} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":46161.40000000596,"ta":40.08} +{"ev":"vibrate","pattern":"[10]","t":46525.69999998808,"ta":40.444} +{"ev":"start","t":46525.79999998212,"sid":39,"url":"audio/sfx/whiff.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":40.444} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":47891.19999998808,"ta":41.81} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":48237.09999999404,"ta":42.155} +{"ev":"start","t":48237.19999998808,"sid":40,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":42.156} +{"ev":"vibrate","pattern":"[10]","t":48242.09999999404,"ta":42.16} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":48737,"ta":42.655} +{"ev":"start","t":48737.09999999404,"sid":41,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":42.655} +{"ev":"start","t":49237.19999998808,"sid":42,"url":"audio/sfx/dodge.ogg","layer":"sfx","dur":1.2,"rate":1,"loop":false,"when":0,"ta":43.156} +{"ev":"start","t":49237.29999998212,"sid":43,"url":"audio/sfx/whoosh_left.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":43.156} +{"ev":"vstart","url":"audio/voice/female/feat_shield.ogg","t":51874.40000000596,"dur":2.8,"ta":45.793} +{"ev":"vend","url":"audio/voice/female/feat_shield.ogg","t":54124.09999999404,"reason":"kill","ta":48.042} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":58678.29999998212,"ta":52.597} +{"ev":"vibrate","pattern":"[20]","t":59046.5,"ta":52.965} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":59719.5,"ta":53.638} +{"ev":"vstart","url":"audio/voice/female/protect_soon.ogg","t":59874.5,"dur":1.52,"ta":53.793} +{"ev":"vibrate","pattern":"[10]","t":60075,"ta":53.993} +{"ev":"start","t":60075.09999999404,"sid":44,"url":"audio/sfx/whiff.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":53.993} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":61060.79999998212,"ta":54.979} +{"ev":"vend","url":"audio/voice/female/protect_soon.ogg","t":61112.5,"reason":"kill","ta":55.031} +{"ev":"vibrate","pattern":"[20]","t":61424,"ta":55.342} +{"ev":"vibrate","pattern":"[20]","t":61424,"ta":55.342} +{"ev":"start","t":61424.19999998808,"sid":45,"url":"audio/sfx/boost.ogg","layer":"sfx","dur":1.8,"rate":1,"loop":false,"when":0,"ta":55.343} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":62278.69999998808,"ta":56.197} +{"ev":"start","t":62374.69999998808,"sid":46,"url":"audio/sfx/whoosh_up.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":56.293} +{"ev":"vibrate","pattern":"[10]","t":62641.5,"ta":56.56} +{"ev":"start","t":62641.69999998808,"sid":47,"url":"audio/sfx/whiff.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":56.56} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":63901,"ta":57.819} +{"ev":"vibrate","pattern":"[20]","t":64264.19999998808,"ta":58.183} +{"ev":"vibrate","pattern":"[40,100,40]","t":64264.29999998212,"ta":58.183} +{"ev":"vstart","url":"audio/voice/female/boost_not_ready.ogg","t":64264.40000000596,"dur":3.04,"ta":58.183} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":64947.40000000596,"ta":58.866} +{"ev":"vibrate","pattern":"[20]","t":65194.19999998808,"ta":59.113} +{"ev":"vibrate","pattern":"[20]","t":65194.19999998808,"ta":59.113} +{"ev":"start","t":65194.40000000596,"sid":48,"url":"audio/sfx/shield.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":59.113} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":65374.69999998808,"ta":59.293} +{"ev":"start","t":65374.90000000596,"sid":49,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":59.293} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":65874.69999998808,"ta":59.793} +{"ev":"start","t":65874.79999998212,"sid":50,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":59.793} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":66068.69999998808,"ta":59.987} +{"ev":"vibrate","pattern":"[100]","t":66374.69999998808,"ta":60.293} +{"ev":"start","t":66374.90000000596,"sid":51,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":60.293} +{"ev":"start","t":66374.90000000596,"sid":52,"url":"audio/sfx/whoosh_right.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":60.293} +{"ev":"vend","url":"audio/voice/female/boost_not_ready.ogg","t":66374.90000000596,"reason":"kill","ta":60.293} +{"ev":"vstart","url":"audio/voice/female/dir_right.ogg","t":66375,"dur":0.7170975056689343,"ta":60.293} +{"ev":"vibrate","pattern":"[10]","t":66424.90000000596,"ta":60.343} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":66874.69999998808,"ta":60.793} +{"ev":"vend","url":"audio/voice/female/dir_right.ogg","t":66874.79999998212,"reason":"kill","ta":60.793} +{"ev":"vstart","url":"audio/voice/female/protect_end.ogg","t":66874.79999998212,"dur":3.6,"ta":60.793} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":67344.59999999404,"ta":61.263} +{"ev":"vibrate","pattern":"[10]","t":67707.79999998212,"ta":61.626} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":68872.90000000596,"ta":62.791} +{"ev":"vibrate","pattern":"[20]","t":69118.69999998808,"ta":63.037} +{"ev":"vibrate","pattern":"[40,100,40]","t":69118.69999998808,"ta":63.037} +{"ev":"vend","url":"audio/voice/female/protect_end.ogg","t":69118.79999998212,"reason":"kill","ta":63.037} +{"ev":"vstart","url":"audio/voice/female/feat_shield_done.ogg","t":69118.79999998212,"dur":4.64,"ta":63.037} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":69375.09999999404,"ta":63.293} +{"ev":"start","t":69375.19999998808,"sid":53,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":63.294} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":69875,"ta":63.793} +{"ev":"start","t":69875.19999998808,"sid":54,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":63.794} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":69936.5,"ta":63.855} +{"ev":"vibrate","pattern":"[10]","t":70291,"ta":64.209} +{"ev":"start","t":70291.09999999404,"sid":55,"url":"audio/sfx/whiff.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":64.209} +{"ev":"start","t":70375.09999999404,"sid":56,"url":"audio/sfx/dodge.ogg","layer":"sfx","dur":1.2,"rate":1,"loop":false,"when":0,"ta":64.293} +{"ev":"start","t":70375.19999998808,"sid":57,"url":"audio/sfx/whoosh_left.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":64.293} +{"ev":"vend","url":"audio/voice/female/feat_shield_done.ogg","t":70375.29999998212,"reason":"kill","ta":64.294} +{"ev":"vstart","url":"audio/voice/female/dir_left.ogg","t":70375.40000000596,"dur":0.39909297052154197,"ta":64.294} +{"ev":"vend","url":"audio/voice/female/dir_left.ogg","t":70771.19999998808,"reason":"kill","ta":64.689} +{"ev":"vstart","url":"audio/voice/female/shield_block.ogg","t":70771.40000000596,"dur":1.44,"ta":64.69} +{"ev":"vend","url":"audio/voice/female/shield_block.ogg","t":70771.69999998808,"reason":"kill","ta":64.69} +{"ev":"vstart","url":"audio/voice/female/protect_end.ogg","t":70771.69999998808,"dur":3.6,"ta":64.69} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":71050.90000000596,"ta":64.969} +{"ev":"vibrate","pattern":"[20]","t":71299.19999998808,"ta":65.218} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":72566.09999999404,"ta":66.484} +{"ev":"vibrate","pattern":"[20]","t":72929.40000000596,"ta":66.848} +{"ev":"vend","url":"audio/voice/female/protect_end.ogg","t":72929.40000000596,"reason":"kill","ta":66.848} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":73375.29999998212,"ta":67.294} +{"ev":"start","t":73375.5,"sid":58,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":67.294} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":73875.29999998212,"ta":67.794} +{"ev":"start","t":73875.5,"sid":59,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":67.794} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":73918.79999998212,"ta":67.837} +{"ev":"vibrate","pattern":"[10]","t":74274,"ta":68.192} +{"ev":"start","t":74274.09999999404,"sid":60,"url":"audio/sfx/whiff.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":68.192} +{"ev":"start","t":74375.40000000596,"sid":61,"url":"audio/sfx/dodge.ogg","layer":"sfx","dur":1.2,"rate":1,"loop":false,"when":0,"ta":68.294} +{"ev":"start","t":74375.59999999404,"sid":62,"url":"audio/sfx/whoosh_up.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":68.294} +{"ev":"vstart","url":"audio/voice/female/dir_up.ogg","t":74375.59999999404,"dur":0.5570975056689342,"ta":68.294} +{"ev":"vend","url":"audio/voice/female/dir_up.ogg","t":75043.40000000596,"reason":"kill","ta":68.962} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":75561,"ta":69.479} +{"ev":"vibrate","pattern":"[10]","t":75924.40000000596,"ta":69.843} +{"ev":"start","t":75924.40000000596,"sid":63,"url":"audio/sfx/whiff.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":69.843} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":76938.5,"ta":70.857} +{"ev":"vibrate","pattern":"[20]","t":77301.90000000596,"ta":71.22} +{"ev":"vibrate","pattern":"[20]","t":77301.90000000596,"ta":71.22} +{"ev":"start","t":77302,"sid":64,"url":"audio/sfx/boost.ogg","layer":"sfx","dur":1.8,"rate":1,"loop":false,"when":0,"ta":71.22} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":77375.69999998808,"ta":71.294} +{"ev":"start","t":77375.79999998212,"sid":65,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":71.294} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":77875.69999998808,"ta":71.794} +{"ev":"start","t":77875.79999998212,"sid":66,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":71.794} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":77891.59999999404,"ta":71.81} +{"ev":"vibrate","pattern":"[10]","t":78257.79999998212,"ta":72.176} +{"ev":"start","t":78257.90000000596,"sid":67,"url":"audio/sfx/whiff.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":72.176} +{"ev":"start","t":78375.69999998808,"sid":68,"url":"audio/sfx/dodge.ogg","layer":"sfx","dur":1.2,"rate":1,"loop":false,"when":0,"ta":72.294} +{"ev":"start","t":78376,"sid":69,"url":"audio/sfx/whoosh_down.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":72.294} +{"ev":"vstart","url":"audio/voice/female/dir_down.ogg","t":78376,"dur":0.39909297052154197,"ta":72.294} +{"ev":"vend","url":"audio/voice/female/dir_down.ogg","t":78758.40000000596,"reason":"kill","ta":72.677} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":79566.59999999404,"ta":73.485} +{"ev":"vibrate","pattern":"[10]","t":79924.40000000596,"ta":73.843} +{"ev":"start","t":79924.59999999404,"sid":70,"url":"audio/sfx/whiff.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":73.843} +{"ev":"vibrate","pattern":"[15]","t":80194.59999999404,"ta":74.113} +{"ev":"vstart","url":"audio/voice/female/shield_ready.ogg","t":80194.59999999404,"dur":1.28,"ta":74.113} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":81067.79999998212,"ta":74.986} +{"ev":"vibrate","pattern":"[20]","t":81314.5,"ta":75.233} +{"ev":"vibrate","pattern":"[20]","t":81314.5,"ta":75.233} +{"ev":"start","t":81314.5,"sid":71,"url":"audio/sfx/shield.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":75.233} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":81376,"ta":75.294} +{"ev":"start","t":81376,"sid":72,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":75.294} +{"ev":"start","t":81384.19999998808,"sid":73,"url":"audio/sfx/whoosh_down.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":75.303} +{"ev":"vend","url":"audio/voice/female/shield_ready.ogg","t":81384.19999998808,"reason":"kill","ta":75.303} +{"ev":"vstart","url":"audio/voice/female/dir_down.ogg","t":81384.19999998808,"dur":0.39909297052154197,"ta":75.303} +{"ev":"vend","url":"audio/voice/female/dir_down.ogg","t":81776.5,"reason":"kill","ta":75.695} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":81875.90000000596,"ta":75.794} +{"ev":"start","t":81876.09999999404,"sid":74,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":75.794} +{"ev":"vibrate","pattern":"[100]","t":82376,"ta":76.294} +{"ev":"start","t":82376,"sid":75,"url":"audio/sfx/shield_block.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":76.294} +{"ev":"vstart","url":"audio/voice/female/shield_block.ogg","t":82376.09999999404,"dur":1.44,"ta":76.294} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":82525.29999998212,"ta":76.444} +{"ev":"vibrate","pattern":"[10]","t":82890.40000000596,"ta":76.809} +{"ev":"start","t":82890.40000000596,"sid":76,"url":"audio/sfx/whiff.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":76.809} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":83063.19999998808,"ta":76.982} +{"ev":"start","t":83063.29999998212,"sid":77,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":76.982} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":83563.19999998808,"ta":77.482} +{"ev":"start","t":83563.29999998212,"sid":78,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":77.482} +{"ev":"vend","url":"audio/voice/female/shield_block.ogg","t":83610.79999998212,"reason":"kill","ta":77.529} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":84001.40000000596,"ta":77.92} +{"ev":"vibrate","pattern":"[80]","t":84063.19999998808,"ta":77.982} +{"ev":"start","t":84063.29999998212,"sid":79,"url":"audio/sfx/hit.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":77.982} +{"ev":"vstart","url":"audio/voice/female/hit_down.ogg","t":84063.40000000596,"dur":5.28,"ta":77.982} +{"ev":"start","t":84342.40000000596,"sid":80,"url":"audio/sfx/whoosh_right.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":78.261} +{"ev":"vend","url":"audio/voice/female/hit_down.ogg","t":84342.40000000596,"reason":"kill","ta":78.261} +{"ev":"vstart","url":"audio/voice/female/dir_right.ogg","t":84342.40000000596,"dur":0.7170975056689343,"ta":78.261} +{"ev":"vibrate","pattern":"[20]","t":84365.5,"ta":78.284} +{"ev":"vend","url":"audio/voice/female/dir_right.ogg","t":84365.5,"reason":"kill","ta":78.284} +{"ev":"vstart","url":"audio/voice/female/hit_down.ogg","t":84365.69999998808,"dur":5.28,"ta":78.284} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":85090.40000000596,"ta":79.009} +{"ev":"vibrate","pattern":"[10]","t":85440.59999999404,"ta":79.359} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":85996.40000000596,"ta":79.915} +{"ev":"start","t":85996.5,"sid":81,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":79.915} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":86496.40000000596,"ta":80.415} +{"ev":"start","t":86496.5,"sid":82,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":80.415} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":86834.29999998212,"ta":80.753} +{"ev":"vibrate","pattern":"[20]","t":86996.5,"ta":80.915} +{"ev":"start","t":86996.59999999404,"sid":83,"url":"audio/sfx/dodge.ogg","layer":"sfx","dur":1.2,"rate":1,"loop":false,"when":0,"ta":80.915} +{"ev":"vend","url":"audio/voice/female/hit_down.ogg","t":86996.59999999404,"reason":"kill","ta":80.915} +{"ev":"vstart","url":"audio/voice/female/ms_10.ogg","t":86996.69999998808,"dur":1.12,"ta":80.915} +{"ev":"vibrate","pattern":"[20]","t":87080.59999999404,"ta":80.999} +{"ev":"vibrate","pattern":"[40,100,40]","t":87080.59999999404,"ta":80.999} +{"ev":"vend","url":"audio/voice/female/ms_10.ogg","t":87080.59999999404,"reason":"kill","ta":80.999} +{"ev":"vstart","url":"audio/voice/female/feat_shield_done.ogg","t":87080.69999998808,"dur":4.64,"ta":80.999} +{"ev":"start","t":87250.5,"sid":84,"url":"audio/sfx/whoosh_right.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":81.169} +{"ev":"vend","url":"audio/voice/female/feat_shield_done.ogg","t":87250.5,"reason":"kill","ta":81.169} +{"ev":"vstart","url":"audio/voice/female/dir_right.ogg","t":87250.59999999404,"dur":0.7170975056689343,"ta":81.169} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":87824,"ta":81.742} +{"ev":"vend","url":"audio/voice/female/dir_right.ogg","t":87929.5,"reason":"kill","ta":81.848} +{"ev":"vibrate","pattern":"[10]","t":88173.40000000596,"ta":82.092} +{"ev":"start","t":88173.69999998808,"sid":85,"url":"audio/bgm/menu.ogg","layer":"bgm","dur":90,"rate":1,"loop":true,"when":0,"ta":82.092} +{"ev":"vstart","url":"audio/voice/female/paused.ogg","t":88173.79999998212,"dur":0.9570975056689343,"ta":82.092} +{"ev":"stop","t":88533.79999998212,"sid":20,"when":0,"ta":82.452} +{"ev":"vend","url":"audio/voice/female/paused.ogg","t":89113.5,"reason":"kill","ta":83.032} +{"ev":"vstart","url":"audio/voice/female/menu_main.ogg","t":89113.79999998212,"dur":3.92,"ta":83.032} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":89310.79999998212,"ta":83.229} +{"ev":"vibrate","pattern":"[20]","t":89558.09999999404,"ta":83.476} +{"ev":"start","t":89558.29999998212,"sid":86,"url":"audio/bgm/engine.ogg","layer":"bgm","dur":117,"rate":1,"loop":true,"when":0,"ta":83.477} +{"ev":"stop","t":90118.40000000596,"sid":85,"when":0,"ta":84.037} +{"ev":"start","t":90358.59999999404,"sid":87,"url":"audio/sfx/whoosh_right.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":84.277} +{"ev":"vend","url":"audio/voice/female/menu_main.ogg","t":90358.59999999404,"reason":"kill","ta":84.277} +{"ev":"vstart","url":"audio/voice/female/dir_right.ogg","t":90358.59999999404,"dur":0.7170975056689343,"ta":84.277} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":90740.69999998808,"ta":84.659} +{"ev":"vend","url":"audio/voice/female/dir_right.ogg","t":91017.19999998808,"reason":"kill","ta":84.936} +{"ev":"vibrate","pattern":"[10]","t":91107,"ta":85.025} +{"ev":"start","t":91107.09999999404,"sid":88,"url":"audio/sfx/whiff.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":85.025} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":92102.29999998212,"ta":86.021} +{"ev":"vibrate","pattern":"[10]","t":92457,"ta":86.375} +{"ev":"start","t":92457.09999999404,"sid":89,"url":"audio/sfx/whiff.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":86.375} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":93358.59999999404,"ta":87.277} +{"ev":"start","t":93358.69999998808,"sid":90,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":87.277} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":93647.29999998212,"ta":87.566} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":93858.59999999404,"ta":87.777} +{"ev":"start","t":93858.69999998808,"sid":91,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":87.777} +{"ev":"vibrate","pattern":"[10]","t":94006.79999998212,"ta":87.925} +{"ev":"start","t":94006.90000000596,"sid":92,"url":"audio/sfx/whiff.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":87.925} +{"ev":"vibrate","pattern":"[80]","t":94358.59999999404,"ta":88.277} +{"ev":"start","t":94358.69999998808,"sid":93,"url":"audio/sfx/hit.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":88.277} +{"ev":"vstart","url":"audio/voice/female/hit_right.ogg","t":94358.79999998212,"dur":4.8,"ta":88.277} +{"ev":"start","t":94359.40000000596,"sid":94,"url":"audio/sfx/whoosh_down.ogg","layer":"sfx","dur":2.5,"rate":1,"loop":false,"when":0,"ta":88.278} +{"ev":"vend","url":"audio/voice/female/hit_right.ogg","t":94359.5,"reason":"kill","ta":88.278} +{"ev":"vstart","url":"audio/voice/female/dir_down.ogg","t":94359.5,"dur":0.39909297052154197,"ta":88.278} +{"ev":"vend","url":"audio/voice/female/dir_down.ogg","t":94755.40000000596,"reason":"kill","ta":88.674} +{"ev":"vstart","url":"audio/voice/female/hit_right.ogg","t":94755.69999998808,"dur":4.8,"ta":88.674} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":95390.29999998212,"ta":89.309} +{"ev":"vibrate","pattern":"[10]","t":95740.29999998212,"ta":89.659} +{"ev":"start","t":95740.29999998212,"sid":95,"url":"audio/sfx/whiff.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":89.659} +{"ev":"vibrate","pattern":"[15]","t":96314.40000000596,"ta":90.233} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":96973.79999998212,"ta":90.892} +{"ev":"vibrate","pattern":"[10]","t":97323.59999999404,"ta":91.242} +{"ev":"start","t":97323.69999998808,"sid":96,"url":"audio/sfx/whiff.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":91.242} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":97359.5,"ta":91.278} +{"ev":"start","t":97359.59999999404,"sid":97,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":91.278} +{"ev":"vibrate","pattern":"[25,40,25,40,25]","t":97859.5,"ta":91.778} +{"ev":"start","t":97859.59999999404,"sid":98,"url":"audio/sfx/alarm.ogg","layer":"sfx","dur":0.9970975056689343,"rate":1,"loop":false,"when":0,"ta":91.778} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":98229,"ta":92.147} +{"ev":"vibrate","pattern":"[80]","t":98359.5,"ta":92.278} +{"ev":"vend","url":"audio/voice/female/hit_right.ogg","t":98359.90000000596,"reason":"kill","ta":92.278} +{"ev":"vibrate","pattern":"[60,40,60]","t":98359.90000000596,"ta":92.278} +{"ev":"start","t":98360.29999998212,"sid":99,"url":"audio/sfx/hit.ogg","layer":"sfx","dur":1.5,"rate":1,"loop":false,"when":0,"ta":92.279} +{"ev":"start","t":98360.29999998212,"sid":100,"url":"audio/sfx/crash.ogg","layer":"sfx","dur":3,"rate":1,"loop":false,"when":0,"ta":92.279} +{"ev":"vibrate","pattern":"[10]","t":98590.09999999404,"ta":92.508} +{"ev":"vstart","url":"audio/voice/female/menu_lobby.ogg","t":98590.40000000596,"dur":1.04,"ta":92.509} +{"ev":"stop","t":99020.09999999404,"sid":86,"when":0,"ta":92.938} +{"ev":"probe_ready","t":9.700000017881393,"ta":-6.072} diff --git a/research/space-polish/round2/live-B-transcript.md b/research/space-polish/round2/live-B-transcript.md new file mode 100644 index 00000000..8d94776a --- /dev/null +++ b/research/space-polish/round2/live-B-transcript.md @@ -0,0 +1,360 @@ +# space 实时会话 transcript + +- `[ -0.07s]` **GESTURE** tap @(195,422) +- `[ 0.00s]` REC 开始 (audio/webm;codecs=opus) +- `[ 0.10s]` VOICE ▶ second_run_ask (dur 3.04s) +- `[ 0.43s]` **GESTURE** tap @(195,422) +- `[ 0.79s]` VIBRATE [20] +- `[ 0.79s]` VOICE ■ second_run_ask (kill) +- `[ 0.96s]` BGM ♪ engine (loop) +- `[ 1.76s]` **GESTURE** swipeleft @(195,422) +- `[ 2.11s]` VIBRATE [10] +- `[ 2.11s]` SFX ♪ whiff +- `[ 2.29s]` SFX ♪ whoosh_left +- `[ 3.34s]` **GESTURE** tap @(195,422) +- `[ 3.71s]` VIBRATE [20] +- `[ 4.17s]` **GESTURE** swipeleft @(195,422) +- `[ 4.53s]` VIBRATE [10] +- `[ 5.29s]` VIBRATE [25,40,25,40,25] +- `[ 5.29s]` SFX ♪ alarm +- `[ 5.71s]` **GESTURE** doubletap @(195,422) +- `[ 5.79s]` VIBRATE [25,40,25,40,25] +- `[ 5.79s]` SFX ♪ alarm +- `[ 5.96s]` VIBRATE [20] +- `[ 5.96s]` VIBRATE [40,100,40] +- `[ 5.96s]` VOICE ▶ feat_shield_done (dur 4.64s) +- `[ 6.30s]` SFX ♪ dodge +- `[ 6.30s]` SFX ♪ whoosh_left +- `[ 7.23s]` **GESTURE** swipedown @(195,422) +- `[ 7.59s]` VIBRATE [10] +- `[ 7.60s]` VOICE ■ feat_shield_done (kill) +- `[ 7.60s]` VOICE ▶ paused (dur 0.9570975056689343s) +- `[ 7.73s]` BGM ♪ menu (loop) +- `[ 8.55s]` VOICE ■ paused (kill) +- `[ 8.55s]` VOICE ▶ menu_main (dur 3.92s) +- `[ 8.60s]` **GESTURE** swipedown @(195,422) +- `[ 8.96s]` VIBRATE [10] +- `[ 8.96s]` BGM ♪ engine (loop) +- `[ 9.76s]` SFX ♪ whoosh_left +- `[ 9.86s]` **GESTURE** doubletap @(195,422) +- `[ 10.11s]` VIBRATE [20] +- `[ 10.11s]` VIBRATE [40,100,40] +- `[ 10.11s]` VOICE ■ menu_main (kill) +- `[ 10.11s]` VOICE ▶ feat_shield_done (dur 4.64s) +- `[ 11.28s]` **GESTURE** swipeleft @(195,422) +- `[ 11.64s]` VIBRATE [10] +- `[ 12.76s]` VIBRATE [25,40,25,40,25] +- `[ 12.76s]` SFX ♪ alarm +- `[ 13.07s]` **GESTURE** swipeleft @(195,422) +- `[ 13.26s]` VIBRATE [25,40,25,40,25] +- `[ 13.26s]` SFX ♪ alarm +- `[ 13.43s]` VIBRATE [10] +- `[ 13.75s]` VOICE ■ feat_shield_done (kill) +- `[ 13.76s]` SFX ♪ dodge +- `[ 13.76s]` SFX ♪ whoosh_down +- `[ 14.17s]` **GESTURE** swipedown @(195,422) +- `[ 14.53s]` VIBRATE [10] +- `[ 15.54s]` **GESTURE** swipedown @(195,422) +- `[ 15.89s]` VIBRATE [10] +- `[ 16.76s]` VIBRATE [25,40,25,40,25] +- `[ 16.76s]` SFX ♪ alarm +- `[ 16.99s]` **GESTURE** doubletap @(195,422) +- `[ 17.24s]` VIBRATE [20] +- `[ 17.24s]` VIBRATE [40,100,40] +- `[ 17.24s]` VOICE ▶ feat_shield_done (dur 4.64s) +- `[ 17.26s]` VIBRATE [25,40,25,40,25] +- `[ 17.26s]` SFX ♪ alarm +- `[ 17.76s]` SFX ♪ dodge +- `[ 17.76s]` SFX ♪ whoosh_up +- `[ 18.59s]` **GESTURE** swipedown @(195,422) +- `[ 18.94s]` VIBRATE [10] +- `[ 18.95s]` BGM ♪ menu (loop) +- `[ 18.95s]` VOICE ■ feat_shield_done (kill) +- `[ 18.95s]` VOICE ▶ paused (dur 0.9570975056689343s) +- `[ 19.90s]` VOICE ■ paused (kill) +- `[ 19.90s]` VOICE ▶ menu_main (dur 3.92s) +- `[ 20.17s]` **GESTURE** doubletap @(195,422) +- `[ 20.41s]` VIBRATE [20] +- `[ 20.41s]` BGM ♪ engine (loop) +- `[ 20.79s]` VOICE ■ menu_main (kill) +- `[ 20.79s]` VOICE ▶ feat_boost (dur 3.84s) +- `[ 21.44s]` **GESTURE** swipeup @(195,422) +- `[ 21.80s]` VIBRATE [10] +- `[ 23.11s]` **GESTURE** swipedown @(195,422) +- `[ 23.46s]` VIBRATE [10] +- `[ 23.87s]` VOICE ■ feat_boost (kill) +- `[ 24.29s]` **GESTURE** tap @(195,422) +- `[ 24.65s]` VIBRATE [20] +- `[ 24.65s]` VIBRATE [20] +- `[ 24.65s]` SFX ♪ boost +- `[ 24.65s]` VOICE ▶ feat_boost_done (dur 3.44s) +- `[ 25.58s]` **GESTURE** tap @(195,422) +- `[ 25.95s]` VIBRATE [20] +- `[ 25.95s]` VOICE ■ feat_boost_done (kill) +- `[ 27.05s]` **GESTURE** doubletap @(195,422) +- `[ 27.15s]` SFX ♪ whoosh_right +- `[ 27.29s]` VIBRATE [20] +- `[ 27.29s]` VIBRATE [40,100,40] +- `[ 27.29s]` VOICE ▶ feat_shield_done (dur 4.64s) +- `[ 28.57s]` **GESTURE** swipeup @(195,422) +- `[ 28.93s]` VIBRATE [10] +- `[ 28.93s]` SFX ♪ whiff +- `[ 29.92s]` **GESTURE** swiperight @(195,422) +- `[ 30.15s]` VIBRATE [25,40,25,40,25] +- `[ 30.15s]` SFX ♪ alarm +- `[ 30.28s]` VIBRATE [10] +- `[ 30.65s]` VIBRATE [25,40,25,40,25] +- `[ 30.65s]` SFX ♪ alarm +- `[ 30.93s]` VOICE ■ feat_shield_done (kill) +- `[ 31.15s]` SFX ♪ dodge +- `[ 31.15s]` SFX ♪ whoosh_right +- `[ 31.66s]` **GESTURE** doubletap @(195,422) +- `[ 31.91s]` VIBRATE [20] +- `[ 31.91s]` VIBRATE [40,100,40] +- `[ 31.91s]` VOICE ▶ feat_shield_done (dur 4.64s) +- `[ 33.15s]` **GESTURE** swipeleft @(195,422) +- `[ 33.51s]` VIBRATE [10] +- `[ 33.51s]` SFX ♪ whiff +- `[ 34.15s]` VIBRATE [25,40,25,40,25] +- `[ 34.15s]` SFX ♪ alarm +- `[ 34.53s]` **GESTURE** swipeleft @(195,422) +- `[ 34.65s]` VIBRATE [25,40,25,40,25] +- `[ 34.65s]` SFX ♪ alarm +- `[ 34.90s]` VIBRATE [10] +- `[ 34.90s]` SFX ♪ whiff +- `[ 35.15s]` VIBRATE [30,50,30,50,30] +- `[ 35.15s]` SFX ♪ shield_block +- `[ 35.15s]` VOICE ■ feat_shield_done (kill) +- `[ 35.15s]` VOICE ▶ protect_right (dur 5.2s) +- `[ 35.16s]` SFX ♪ whoosh_right +- `[ 36.04s]` **GESTURE** tap @(195,422) +- `[ 36.41s]` VIBRATE [20] +- `[ 36.41s]` VOICE ■ protect_right (kill) +- `[ 37.39s]` **GESTURE** tap @(195,422) +- `[ 37.75s]` VIBRATE [20] +- `[ 37.75s]` VIBRATE [20] +- `[ 37.75s]` SFX ♪ boost +- `[ 38.16s]` VIBRATE [25,40,25,40,25] +- `[ 38.16s]` SFX ♪ alarm +- `[ 38.59s]` **GESTURE** swiperight @(195,422) +- `[ 38.66s]` VIBRATE [25,40,25,40,25] +- `[ 38.66s]` SFX ♪ alarm +- `[ 38.94s]` VIBRATE [10] +- `[ 39.16s]` SFX ♪ dodge +- `[ 39.16s]` SFX ♪ whoosh_left +- `[ 40.08s]` **GESTURE** swipeup @(195,422) +- `[ 40.44s]` VIBRATE [10] +- `[ 40.44s]` SFX ♪ whiff +- `[ 41.81s]` **GESTURE** swipeleft @(195,422) +- `[ 42.16s]` VIBRATE [25,40,25,40,25] +- `[ 42.16s]` SFX ♪ alarm +- `[ 42.16s]` VIBRATE [10] +- `[ 42.66s]` VIBRATE [25,40,25,40,25] +- `[ 42.66s]` SFX ♪ alarm +- `[ 43.16s]` SFX ♪ dodge +- `[ 43.16s]` SFX ♪ whoosh_left +- `[ 45.79s]` VOICE ▶ feat_shield (dur 2.8s) +- `[ 48.04s]` VOICE ■ feat_shield (kill) +- `[ 52.60s]` **GESTURE** tap @(195,422) +- `[ 52.97s]` VIBRATE [20] +- `[ 53.64s]` **GESTURE** swipeup @(195,422) +- `[ 53.79s]` VOICE ▶ protect_soon (dur 1.52s) +- `[ 53.99s]` VIBRATE [10] +- `[ 53.99s]` SFX ♪ whiff +- `[ 54.98s]` **GESTURE** tap @(195,422) +- `[ 55.03s]` VOICE ■ protect_soon (kill) +- `[ 55.34s]` VIBRATE [20] +- `[ 55.34s]` VIBRATE [20] +- `[ 55.34s]` SFX ♪ boost +- `[ 56.20s]` **GESTURE** swiperight @(195,422) +- `[ 56.29s]` SFX ♪ whoosh_up +- `[ 56.56s]` VIBRATE [10] +- `[ 56.56s]` SFX ♪ whiff +- `[ 57.82s]` **GESTURE** tap @(195,422) +- `[ 58.18s]` VIBRATE [20] +- `[ 58.18s]` VIBRATE [40,100,40] +- `[ 58.18s]` VOICE ▶ boost_not_ready (dur 3.04s) +- `[ 58.87s]` **GESTURE** doubletap @(195,422) +- `[ 59.11s]` VIBRATE [20] +- `[ 59.11s]` VIBRATE [20] +- `[ 59.11s]` SFX ♪ shield +- `[ 59.29s]` VIBRATE [25,40,25,40,25] +- `[ 59.29s]` SFX ♪ alarm +- `[ 59.79s]` VIBRATE [25,40,25,40,25] +- `[ 59.79s]` SFX ♪ alarm +- `[ 59.99s]` **GESTURE** swipedown @(195,422) +- `[ 60.29s]` VIBRATE [100] +- `[ 60.29s]` SFX ♪ shield_block +- `[ 60.29s]` SFX ♪ whoosh_right +- `[ 60.29s]` VOICE ■ boost_not_ready (kill) +- `[ 60.29s]` VOICE ▶ dir_right (dur 0.7170975056689343s) +- `[ 60.34s]` VIBRATE [10] +- `[ 60.79s]` VIBRATE [30,50,30,50,30] +- `[ 60.79s]` VOICE ■ dir_right (kill) +- `[ 60.79s]` VOICE ▶ protect_end (dur 3.6s) +- `[ 61.26s]` **GESTURE** swiperight @(195,422) +- `[ 61.63s]` VIBRATE [10] +- `[ 62.79s]` **GESTURE** doubletap @(195,422) +- `[ 63.04s]` VIBRATE [20] +- `[ 63.04s]` VIBRATE [40,100,40] +- `[ 63.04s]` VOICE ■ protect_end (kill) +- `[ 63.04s]` VOICE ▶ feat_shield_done (dur 4.64s) +- `[ 63.29s]` VIBRATE [25,40,25,40,25] +- `[ 63.29s]` SFX ♪ alarm +- `[ 63.79s]` VIBRATE [25,40,25,40,25] +- `[ 63.79s]` SFX ♪ alarm +- `[ 63.85s]` **GESTURE** swipeleft @(195,422) +- `[ 64.21s]` VIBRATE [10] +- `[ 64.21s]` SFX ♪ whiff +- `[ 64.29s]` SFX ♪ dodge +- `[ 64.29s]` SFX ♪ whoosh_left +- `[ 64.29s]` VOICE ■ feat_shield_done (kill) +- `[ 64.29s]` VOICE ▶ dir_left (dur 0.39909297052154197s) +- `[ 64.69s]` VOICE ■ dir_left (kill) +- `[ 64.69s]` VOICE ▶ shield_block (dur 1.44s) +- `[ 64.69s]` VOICE ■ shield_block (kill) +- `[ 64.69s]` VOICE ▶ protect_end (dur 3.6s) +- `[ 64.97s]` **GESTURE** doubletap @(195,422) +- `[ 65.22s]` VIBRATE [20] +- `[ 66.48s]` **GESTURE** tap @(195,422) +- `[ 66.85s]` VIBRATE [20] +- `[ 66.85s]` VOICE ■ protect_end (kill) +- `[ 67.29s]` VIBRATE [25,40,25,40,25] +- `[ 67.29s]` SFX ♪ alarm +- `[ 67.79s]` VIBRATE [25,40,25,40,25] +- `[ 67.79s]` SFX ♪ alarm +- `[ 67.84s]` **GESTURE** swipeup @(195,422) +- `[ 68.19s]` VIBRATE [10] +- `[ 68.19s]` SFX ♪ whiff +- `[ 68.29s]` SFX ♪ dodge +- `[ 68.29s]` SFX ♪ whoosh_up +- `[ 68.29s]` VOICE ▶ dir_up (dur 0.5570975056689342s) +- `[ 68.96s]` VOICE ■ dir_up (kill) +- `[ 69.48s]` **GESTURE** swiperight @(195,422) +- `[ 69.84s]` VIBRATE [10] +- `[ 69.84s]` SFX ♪ whiff +- `[ 70.86s]` **GESTURE** tap @(195,422) +- `[ 71.22s]` VIBRATE [20] +- `[ 71.22s]` VIBRATE [20] +- `[ 71.22s]` SFX ♪ boost +- `[ 71.29s]` VIBRATE [25,40,25,40,25] +- `[ 71.29s]` SFX ♪ alarm +- `[ 71.79s]` VIBRATE [25,40,25,40,25] +- `[ 71.79s]` SFX ♪ alarm +- `[ 71.81s]` **GESTURE** swipeleft @(195,422) +- `[ 72.18s]` VIBRATE [10] +- `[ 72.18s]` SFX ♪ whiff +- `[ 72.29s]` SFX ♪ dodge +- `[ 72.29s]` SFX ♪ whoosh_down +- `[ 72.29s]` VOICE ▶ dir_down (dur 0.39909297052154197s) +- `[ 72.68s]` VOICE ■ dir_down (kill) +- `[ 73.48s]` **GESTURE** swipeleft @(195,422) +- `[ 73.84s]` VIBRATE [10] +- `[ 73.84s]` SFX ♪ whiff +- `[ 74.11s]` VIBRATE [15] +- `[ 74.11s]` VOICE ▶ shield_ready (dur 1.28s) +- `[ 74.99s]` **GESTURE** doubletap @(195,422) +- `[ 75.23s]` VIBRATE [20] +- `[ 75.23s]` VIBRATE [20] +- `[ 75.23s]` SFX ♪ shield +- `[ 75.29s]` VIBRATE [25,40,25,40,25] +- `[ 75.29s]` SFX ♪ alarm +- `[ 75.30s]` SFX ♪ whoosh_down +- `[ 75.30s]` VOICE ■ shield_ready (kill) +- `[ 75.30s]` VOICE ▶ dir_down (dur 0.39909297052154197s) +- `[ 75.69s]` VOICE ■ dir_down (kill) +- `[ 75.79s]` VIBRATE [25,40,25,40,25] +- `[ 75.79s]` SFX ♪ alarm +- `[ 76.29s]` VIBRATE [100] +- `[ 76.29s]` SFX ♪ shield_block +- `[ 76.29s]` VOICE ▶ shield_block (dur 1.44s) +- `[ 76.44s]` **GESTURE** swiperight @(195,422) +- `[ 76.81s]` VIBRATE [10] +- `[ 76.81s]` SFX ♪ whiff +- `[ 76.98s]` VIBRATE [25,40,25,40,25] +- `[ 76.98s]` SFX ♪ alarm +- `[ 77.48s]` VIBRATE [25,40,25,40,25] +- `[ 77.48s]` SFX ♪ alarm +- `[ 77.53s]` VOICE ■ shield_block (kill) +- `[ 77.92s]` **GESTURE** tap @(195,422) +- `[ 77.98s]` VIBRATE [80] +- `[ 77.98s]` SFX ♪ hit +- `[ 77.98s]` VOICE ▶ hit_down (dur 5.28s) +- `[ 78.26s]` SFX ♪ whoosh_right +- `[ 78.26s]` VOICE ■ hit_down (kill) +- `[ 78.26s]` VOICE ▶ dir_right (dur 0.7170975056689343s) +- `[ 78.28s]` VIBRATE [20] +- `[ 78.28s]` VOICE ■ dir_right (kill) +- `[ 78.28s]` VOICE ▶ hit_down (dur 5.28s) +- `[ 79.01s]` **GESTURE** swiperight @(195,422) +- `[ 79.36s]` VIBRATE [10] +- `[ 79.92s]` VIBRATE [25,40,25,40,25] +- `[ 79.92s]` SFX ♪ alarm +- `[ 80.42s]` VIBRATE [25,40,25,40,25] +- `[ 80.42s]` SFX ♪ alarm +- `[ 80.75s]` **GESTURE** doubletap @(195,422) +- `[ 80.92s]` VIBRATE [20] +- `[ 80.92s]` SFX ♪ dodge +- `[ 80.92s]` VOICE ■ hit_down (kill) +- `[ 80.92s]` VOICE ▶ ms_10 (dur 1.12s) +- `[ 81.00s]` VIBRATE [20] +- `[ 81.00s]` VIBRATE [40,100,40] +- `[ 81.00s]` VOICE ■ ms_10 (kill) +- `[ 81.00s]` VOICE ▶ feat_shield_done (dur 4.64s) +- `[ 81.17s]` SFX ♪ whoosh_right +- `[ 81.17s]` VOICE ■ feat_shield_done (kill) +- `[ 81.17s]` VOICE ▶ dir_right (dur 0.7170975056689343s) +- `[ 81.74s]` **GESTURE** swipedown @(195,422) +- `[ 81.85s]` VOICE ■ dir_right (kill) +- `[ 82.09s]` VIBRATE [10] +- `[ 82.09s]` BGM ♪ menu (loop) +- `[ 82.09s]` VOICE ▶ paused (dur 0.9570975056689343s) +- `[ 83.03s]` VOICE ■ paused (kill) +- `[ 83.03s]` VOICE ▶ menu_main (dur 3.92s) +- `[ 83.23s]` **GESTURE** doubletap @(195,422) +- `[ 83.48s]` VIBRATE [20] +- `[ 83.48s]` BGM ♪ engine (loop) +- `[ 84.28s]` SFX ♪ whoosh_right +- `[ 84.28s]` VOICE ■ menu_main (kill) +- `[ 84.28s]` VOICE ▶ dir_right (dur 0.7170975056689343s) +- `[ 84.66s]` **GESTURE** swipeleft @(195,422) +- `[ 84.94s]` VOICE ■ dir_right (kill) +- `[ 85.03s]` VIBRATE [10] +- `[ 85.03s]` SFX ♪ whiff +- `[ 86.02s]` **GESTURE** swipeup @(195,422) +- `[ 86.38s]` VIBRATE [10] +- `[ 86.38s]` SFX ♪ whiff +- `[ 87.28s]` VIBRATE [25,40,25,40,25] +- `[ 87.28s]` SFX ♪ alarm +- `[ 87.57s]` **GESTURE** swipeleft @(195,422) +- `[ 87.78s]` VIBRATE [25,40,25,40,25] +- `[ 87.78s]` SFX ♪ alarm +- `[ 87.92s]` VIBRATE [10] +- `[ 87.92s]` SFX ♪ whiff +- `[ 88.28s]` VIBRATE [80] +- `[ 88.28s]` SFX ♪ hit +- `[ 88.28s]` VOICE ▶ hit_right (dur 4.8s) +- `[ 88.28s]` SFX ♪ whoosh_down +- `[ 88.28s]` VOICE ■ hit_right (kill) +- `[ 88.28s]` VOICE ▶ dir_down (dur 0.39909297052154197s) +- `[ 88.67s]` VOICE ■ dir_down (kill) +- `[ 88.67s]` VOICE ▶ hit_right (dur 4.8s) +- `[ 89.31s]` **GESTURE** swiperight @(195,422) +- `[ 89.66s]` VIBRATE [10] +- `[ 89.66s]` SFX ♪ whiff +- `[ 90.23s]` VIBRATE [15] +- `[ 90.89s]` **GESTURE** swipeup @(195,422) +- `[ 91.24s]` VIBRATE [10] +- `[ 91.24s]` SFX ♪ whiff +- `[ 91.28s]` VIBRATE [25,40,25,40,25] +- `[ 91.28s]` SFX ♪ alarm +- `[ 91.78s]` VIBRATE [25,40,25,40,25] +- `[ 91.78s]` SFX ♪ alarm +- `[ 92.15s]` **GESTURE** swipedown @(195,422) +- `[ 92.28s]` VIBRATE [80] +- `[ 92.28s]` VOICE ■ hit_right (kill) +- `[ 92.28s]` VIBRATE [60,40,60] +- `[ 92.28s]` SFX ♪ hit +- `[ 92.28s]` SFX ♪ crash +- `[ 92.51s]` VIBRATE [10] +- `[ 92.51s]` VOICE ▶ menu_lobby (dur 1.04s) diff --git a/research/space-polish/round2/live-B-verdicts.json b/research/space-polish/round2/live-B-verdicts.json new file mode 100644 index 00000000..22ee684c --- /dev/null +++ b/research/space-polish/round2/live-B-verdicts.json @@ -0,0 +1,533 @@ +{ + "game": "space", + "settings": { + "voice": "female", + "guide": "standard", + "speed": 1.35, + "bgm": 1 + }, + "outdir": "/home/xsl/AutoVideo/SoundGame/web/harness/live/out/space-20260914063503", + "segs": [ + { + "idx": 0, + "voiceId": "second_run_ask", + "t0": 0.1, + "t1": 0.793, + "dur": 3.04, + "expEnd": 2.352, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 1, + "voiceId": "feat_shield_done", + "t0": 5.961, + "t1": 7.596, + "dur": 4.64, + "expEnd": 9.398, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 2, + "voiceId": "paused", + "t0": 7.596, + "t1": 8.549, + "dur": 0.9570975056689343, + "expEnd": 8.305, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 3, + "voiceId": "menu_main", + "t0": 8.549, + "t1": 10.109, + "dur": 3.92, + "expEnd": 11.453, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 4, + "voiceId": "feat_shield_done", + "t0": 10.109, + "t1": 13.749, + "dur": 4.64, + "expEnd": 13.546, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 5, + "voiceId": "feat_shield_done", + "t0": 17.24, + "t1": 18.945, + "dur": 4.64, + "expEnd": 20.677, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 6, + "voiceId": "paused", + "t0": 18.945, + "t1": 19.902, + "dur": 0.9570975056689343, + "expEnd": 19.654, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 7, + "voiceId": "menu_main", + "t0": 19.902, + "t1": 20.793, + "dur": 3.92, + "expEnd": 22.806, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 8, + "voiceId": "feat_boost", + "t0": 20.793, + "t1": 23.872, + "dur": 3.84, + "expEnd": 23.637, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 9, + "voiceId": "feat_boost_done", + "t0": 24.654, + "t1": 25.947, + "dur": 3.44, + "expEnd": 27.202, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 10, + "voiceId": "feat_shield_done", + "t0": 27.293, + "t1": 30.931, + "dur": 4.64, + "expEnd": 30.73, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 11, + "voiceId": "feat_shield_done", + "t0": 31.905, + "t1": 35.154, + "dur": 4.64, + "expEnd": 35.342, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 12, + "voiceId": "protect_right", + "t0": 35.154, + "t1": 36.407, + "dur": 5.2, + "expEnd": 39.006, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 13, + "voiceId": "feat_shield", + "t0": 45.793, + "t1": 48.042, + "dur": 2.8, + "expEnd": 47.867, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 14, + "voiceId": "protect_soon", + "t0": 53.793, + "t1": 55.031, + "dur": 1.52, + "expEnd": 54.919, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 15, + "voiceId": "boost_not_ready", + "t0": 58.183, + "t1": 60.293, + "dur": 3.04, + "expEnd": 60.435, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 16, + "voiceId": "dir_right", + "t0": 60.293, + "t1": 60.793, + "dur": 0.7170975056689343, + "expEnd": 60.824, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 17, + "voiceId": "protect_end", + "t0": 60.793, + "t1": 63.037, + "dur": 3.6, + "expEnd": 63.46, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 18, + "voiceId": "feat_shield_done", + "t0": 63.037, + "t1": 64.294, + "dur": 4.64, + "expEnd": 66.474, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 19, + "voiceId": "dir_left", + "t0": 64.294, + "t1": 64.689, + "dur": 0.39909297052154197, + "expEnd": 64.59, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 20, + "voiceId": "shield_block", + "t0": 64.69, + "t1": 64.69, + "dur": 1.44, + "expEnd": 65.757, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 21, + "voiceId": "protect_end", + "t0": 64.69, + "t1": 66.848, + "dur": 3.6, + "expEnd": 67.357, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 22, + "voiceId": "dir_up", + "t0": 68.294, + "t1": 68.962, + "dur": 0.5570975056689342, + "expEnd": 68.707, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 23, + "voiceId": "dir_down", + "t0": 72.294, + "t1": 72.677, + "dur": 0.39909297052154197, + "expEnd": 72.59, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 24, + "voiceId": "shield_ready", + "t0": 74.113, + "t1": 75.303, + "dur": 1.28, + "expEnd": 75.061, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 25, + "voiceId": "dir_down", + "t0": 75.303, + "t1": 75.695, + "dur": 0.39909297052154197, + "expEnd": 75.599, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 26, + "voiceId": "shield_block", + "t0": 76.294, + "t1": 77.529, + "dur": 1.44, + "expEnd": 77.361, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 27, + "voiceId": "hit_down", + "t0": 77.982, + "t1": 78.261, + "dur": 5.28, + "expEnd": 81.893, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 28, + "voiceId": "dir_right", + "t0": 78.261, + "t1": 78.284, + "dur": 0.7170975056689343, + "expEnd": 78.792, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 29, + "voiceId": "hit_down", + "t0": 78.284, + "t1": 80.915, + "dur": 5.28, + "expEnd": 82.195, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 30, + "voiceId": "ms_10", + "t0": 80.915, + "t1": 80.999, + "dur": 1.12, + "expEnd": 81.745, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 31, + "voiceId": "feat_shield_done", + "t0": 80.999, + "t1": 81.169, + "dur": 4.64, + "expEnd": 84.436, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 32, + "voiceId": "dir_right", + "t0": 81.169, + "t1": 81.848, + "dur": 0.7170975056689343, + "expEnd": 81.7, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 33, + "voiceId": "paused", + "t0": 82.092, + "t1": 83.032, + "dur": 0.9570975056689343, + "expEnd": 82.801, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 34, + "voiceId": "menu_main", + "t0": 83.032, + "t1": 84.277, + "dur": 3.92, + "expEnd": 85.936, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 35, + "voiceId": "dir_right", + "t0": 84.277, + "t1": 84.936, + "dur": 0.7170975056689343, + "expEnd": 84.808, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 36, + "voiceId": "hit_right", + "t0": 88.277, + "t1": 88.278, + "dur": 4.8, + "expEnd": 91.833, + "truncated": true, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 37, + "voiceId": "dir_down", + "t0": 88.278, + "t1": 88.674, + "dur": 0.39909297052154197, + "expEnd": 88.574, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 38, + "voiceId": "hit_right", + "t0": 88.674, + "t1": 92.278, + "dur": 4.8, + "expEnd": 92.23, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 39, + "voiceId": "menu_lobby", + "t0": 92.509, + "t1": 92.509, + "dur": 1.04, + "expEnd": 93.279, + "truncated": true, + "reason": "session-end", + "verdict": null, + "heard": null, + "similarity": null + } + ], + "rows": [] +} \ No newline at end of file diff --git a/research/space-polish/round2/p1-blind.md b/research/space-polish/round2/p1-blind.md new file mode 100644 index 00000000..b79fc9e4 --- /dev/null +++ b/research/space-polish/round2/p1-blind.md @@ -0,0 +1,22 @@ +# P1 视障资深玩家复审:《盲航》(space polish round2) + +> 复审依据:round2/live-A-voice-timeline.txt(修后 live 事件时间轴,复跑两轮保护期结束窗)+ +> round2/sfx-spectrum-after.txt + round2/fix-evidence.md。对照 round1/p1-blind.md 的三问逐条结账。 + +### 盲航(R5 复审) +- 状态感知:3.5/5(+1.5)——保护期结束窗仍是信息密度最高的时刻,但现在**每句都送到了**: + 50 秒预告「训练护盾还剩十秒」(ta 149.8,ASR sim=1.0,完整识别)给了提前量; + protect_end 被顶断后补播完整(B 局 ta 64.69);两条被撞归因 hit_left/hit_right 被呼喊顶断后 + 各自 replay 完整播 3.5s(ta 160.79/164.78)——round1 我判的死穴「至死不知方位」闭环。 + protect_* 教学句不再七连截断(ta 102.3 sim=1.0)。扣 1.5 分在:护盾格挡确认句 + (voice/shield_block)仍会被顶断无 replay(有音效+震动兜底);gd_last_life 同样; + 对局期依然没有 status key(宪法豁免,事件反馈句已补齐主要账目)。 +- 下一步明确性:4/5(不变)——演练/菜单/呼喊链未动,归因链完整后"下一颗从哪来"不再靠猜。 +- 愿意继续玩:是 —— 归因真话兑现后,这是少数把我当成年人、又把死因讲清楚的游戏。 +- 刺耳对账:round1 我列的 alarm/dodge/shield_block/boost 四件,修后真峰值 -3.4~-3.9dBFS、 + ≥3kHz 能量全部 0%(alarm 质心 7580→593Hz)——客观清单全消;whoosh 方位提示音未动,对。 +- 动作反馈对账:加速冷却单击现在有「引擎还在冷却,稍等一下。」+ HEARTBEAT(playtest 验证, + live 资产实测加载);滑错方向有 whiff 轻叹(B 局乱按实测 3 次);激活 CONFIRM 震补齐。 + 我要求的"拒绝必须有回音"现在对加速/护盾一视同仁。 +- 遗留关注:真机人耳最后一课——alarm 换低谐波双音后,嘈杂环境的穿透力是否还够(P3 的主场), + 以及 replay 链在 1.7× 语速下的节奏是否拖脚。这两项转写给不了答案。 diff --git a/research/space-polish/round2/p2-student.md b/research/space-polish/round2/p2-student.md new file mode 100644 index 00000000..117a79e4 --- /dev/null +++ b/research/space-polish/round2/p2-student.md @@ -0,0 +1,17 @@ +# P2 时间充裕的大学生复审:《盲航》(space polish round2) + +> 复审依据同 round2 三件套。对照 round1/p2-student.md 逐条结账。 + +### 盲航(R5 复审) +- 状态感知:4/5(+1.5)——60 秒整不再是"断崖":50 秒有人提前打招呼(protect_soon), + 保护结束的宣告被顶断会补播(B 局 64.69),两条死因归因各自完整 replay(A' 局 160.79/164.78)—— + round1 那句"合格飞行员听着像嘲讽"的账清了:现在我知道自己是怎么合格下来的。 + 保护期里那句教学也终于一句是一句(102.3 完整 sim=1.0),不再是 7 遍半截复读。 + 扣 1 分:护盾挡下时的确认句偶尔还是被顶断(有音效兜底,接受但可更好)。 +- 下一步明确性:4.5/5(+0.5)——冷却中单击有「引擎还在冷却,稍等一下。」回音, + 双击护盾冷却也有同款待遇;滑错方向有 whiff 轻叹,我不再怀疑耳机坏了。 +- 愿意继续玩:是 —— 死亡从"信息没送到"变回"我菜",挫败感对味了;结算钩子本来就成立。 +- 刺耳对账:alarm 不再是指甲刮板(16kHz 峰没了,质心 593Hz),dodge 的奖励音从嘶啦变成 + 气声扫频——奖励终于像奖励。宿舍夜玩不会被舍友嫌了(P4 的诉求也顺带满足)。 +- 建议(留给下轮):护盾格挡句纳入 replay;加速生效时如果能有半句语音提示(现在只有音效+震动), + 二周目机制开局即用时的新手会更踏实。 diff --git a/research/space-polish/round2/p3-office.md b/research/space-polish/round2/p3-office.md new file mode 100644 index 00000000..26548516 --- /dev/null +++ b/research/space-polish/round2/p3-office.md @@ -0,0 +1,16 @@ +# P3 时间紧张的白领复审:《盲航》(space polish round2) + +> 复审依据同 round2 三件套。对照 round1/p3-office.md 逐条结账。 + +### 盲航(R5 复审) +- 状态感知:3.5/5(+1.5)——被打断恢复的账还了一半:50 秒预告 + 保护结束宣告补播 + + 归因 replay,让我接个电话回来还能从语音流里拼出"保护期刚结束、我刚才被撞了两下、都撞在哪边"。 + 但宪法豁免决定了对局期仍无 status key(上滑=闪避),打断后"护盾在不在/冷却几秒"还是要等 + 系统开口。这是豁免表的裁定,我不越级要求,只记账。 +- 下一步明确性:4/5(+0.5)——冷却拒绝回音补齐后,"现在能不能按"不再有静默区。 +- 愿意继续玩:是 —— 单局 60-90 秒的通勤小品定位成立,保护期后敢开第二把了。 +- 刺耳对账:alarm 穿透力是我的命门——修后 0% ≥5kHz,我在地铁里直说:**这一点需要真机验证**。 + 设计上的兜底是两档音量渐强(0.5/1.0)和 DANGER 震动同步保留,但 700/560Hz 双音在车厢底噪里 + 够不够扎出来,转写回答不了。如果不够,建议给 alarm 保留 2-4kHz 一段过渡带(现在一刀切到 3k 以下)。 + dodge/whiff 的低频化在嘈杂环境反而更稳(不跟报站声撞车)。 +- 建议:真机第一课 = 地铁环境 alarm 可辨识度;其余闭环。 diff --git a/research/space-polish/round2/p4-worker.md b/research/space-polish/round2/p4-worker.md new file mode 100644 index 00000000..f9b86ad9 --- /dev/null +++ b/research/space-polish/round2/p4-worker.md @@ -0,0 +1,16 @@ +# P4 疲惫的工人复审:《盲航》(space polish round2) + +> 复审依据同 round2 三件套。对照 round1/p4-worker.md 逐条结账。 + +### 盲航(R5 复审) +- 状态感知:4/5(+1.5)——我现在能听明白"要变天了":50 秒先说「训练护盾还剩十秒」, + 到点了那句「训练护盾关闭,接下来靠你自己了」被别的声音打断了还会重新说一遍(B 局 64.69)。 + 前两回被撞,「左边撞上的」「右边撞上的」都完整补给我了(A' 局 160.79/164.78)—— + 不再是"直接宣布罚款",是先告诉我哪块板子掉的。教学句也一句是一句,不催我。 +- 下一步明确性:4.5/5(+0.5)——我按快了、滑错了,现在有轻轻一声叹告诉我"收到了但没用", + 还有冷却的时候单击会说「引擎还在冷却,稍等一下」,我不怕手机卡了。 +- 愿意继续玩:是 —— 头一分钟有人手把手教、输了讲清楚、夜里不炸耳,够我收工后玩两把。 +- 刺耳对账:警报换成了闷闷的"嘟嘟"(700/560Hz,以前 16kHz 的尖),小音量外放不刺耳了; + 撞上那下(hit)没动,还是低频的"咣",接受。舍友那边过关了。 +- 建议:就一条——护盾挡下来的那句话("护盾挡下了撞击")有时候还是会被新陨石的声音盖掉, + 虽然"咚"一声和震动还在,但那句话能补齐就更踏实(P1 也记了这条,留给下轮)。 diff --git a/research/space-polish/round2/sfx-spectrum-after.txt b/research/space-polish/round2/sfx-spectrum-after.txt new file mode 100644 index 00000000..ab49c7c7 --- /dev/null +++ b/research/space-polish/round2/sfx-spectrum-after.txt @@ -0,0 +1,13 @@ +id dur TP dBFS DC %>3kHz %>5kHz centroid maxkHz flags +alarm 1.00 -3.50 -0.00001 0.0 0.0 593 0.56 +boost 1.80 -3.60 0.00058 0.0 0.0 114 0.06 +crash 3.00 -3.00 0.00069 1.5 1.1 170 0.03 +dodge 1.20 -3.90 0.00002 0.0 0.0 1090 0.66 +hit 1.50 -3.80 -0.00001 30.7 16.7 2351 0.50 5k+高 +shield 1.50 -3.40 0.00000 0.0 0.0 784 0.98 +shield_block 1.50 -3.90 -0.00010 0.0 0.0 1271 0.52 +whiff 0.40 -4.80 0.00001 0.0 0.0 461 0.20 +whoosh_down 2.50 -3.00 0.00016 0.2 0.1 211 0.25 +whoosh_left 2.50 -3.20 0.00004 0.1 0.0 188 0.16 +whoosh_right 2.50 -3.20 0.00004 0.1 0.0 188 0.16 +whoosh_up 2.50 -3.20 -0.00017 0.5 0.1 528 0.40 diff --git a/tools/gen_space_syn.py b/tools/gen_space_syn.py new file mode 100644 index 00000000..4e59f816 --- /dev/null +++ b/tools/gen_space_syn.py @@ -0,0 +1,250 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""《盲航》程序合成音效重制(space polish R5,research/space-polish/round1 取证结论)。 + +重制 5 件 + 新增 1 件(落 web/space/audio/sfx/): + alarm 全程最高暴露(每颗陨石两遍)→ 低谐波电子双音,5kHz 以上近零能量 + dodge 高频嘶声(-2.30dBFS / 63.6%≥3kHz)→ 中频气声扫频 + shield_block 保护期每 4s 一响 + 真峰值超标 → 柔和电涟波 + boost 真峰值 -2.70dBFS / 53%≥3kHz → 低频引擎冲刺 + shield 真峰值 -2.90dBFS 超标 → 上升 shimmer 重制 + whiff 新增:挥空/滑错方向的轻反馈(归因真话:无效手势有回音) + +one-shot QC(同 gen_cipher_syn.py 标准):去直流 + 首尾 8ms cos² + 真峰值 ≤-3dBFS +(编码后 ebur128 实测,MDCT 过冲超限自动降档重编)。 + +用法:.venv-tts/bin/python tools/gen_space_syn.py +""" +import os +import subprocess +import sys + +import numpy as np +import soundfile as sf + +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +FFMPEG = os.path.join(ROOT, "tools", "bin", "ffmpeg") +OUT = os.path.join(ROOT, "tools", "gen_space_syn_wav") +DST = os.path.join(ROOT, "web", "space", "audio", "sfx") +os.makedirs(OUT, exist_ok=True) +os.makedirs(DST, exist_ok=True) + +sr = 44100 +ONE_SHOT_TP_CEIL = -3.0 +SAMPLE_PEAK = 0.66 +FADE_N = int(sr * 0.008) + +_rng = np.random.default_rng(20260914) + + +def dc(y): + return y - np.mean(y) + + +def fade(y): + w = np.sin(np.linspace(0, np.pi / 2, FADE_N)) ** 2 + y = y.copy() + y[:FADE_N] *= w + y[-FADE_N:] *= w[::-1] + return y + + +def norm(y, peak=SAMPLE_PEAK): + m = np.max(np.abs(y)) + return (y / m * peak) if m > 0 else y + + +def stereo(y): + return np.stack([y, y], axis=1).astype(np.float32) + + +def bp_noise(n, lo, hi): + x = _rng.standard_normal(n) + X = np.fft.rfft(x) + freqs = np.fft.rfftfreq(n, 1 / sr) + mask = ((freqs >= lo) & (freqs <= hi)).astype(float) + y = np.fft.irfft(X * mask, n) + return y / (np.max(np.abs(y)) + 1e-9) + + +def sweep_noise(n, f_lo, f_hi, bw=900): + """质心随时间线性扫动的带通噪声(气声/扫频体感,无离散高频谐波)。""" + x = _rng.standard_normal(n) + X = np.fft.rfft(x) + freqs = np.fft.rfftfreq(n, 1 / sr) + t = np.arange(n) / sr + center = f_lo + (f_hi - f_lo) * np.minimum(t / (n / sr), 1.0) + # 时变带通:按块扫中心频率 + y = np.zeros(n) + blk = int(sr * 0.02) + for s in range(0, n, blk): + e = min(n, s + blk) + c = center[s:e].mean() + m = ((freqs >= max(20, c - bw)) & (freqs <= c + bw)).astype(float) + seg = np.fft.irfft(X * m, n) + y[s:e] = seg[s:e] + m = np.max(np.abs(y)) + return y / m if m > 0 else y + + +def tone(n, f, decay=0.0, harm=()): + t = np.arange(n) / sr + y = np.sin(2 * np.pi * f * t) + for h, g in harm: + y += g * np.sin(2 * np.pi * f * h * t) + if decay: + y *= np.exp(-t * decay) + return y + + +# ---------------------------------------------------------------- one-shot 渲染 +def r_alarm(): # 1.0s 电子双音警报:700/560Hz 圆角短促 beep×2,谐波收敛 <2.5kHz + n = int(sr * 1.0) + y = np.zeros(n) + for st, f in [(0.05, 700), (0.42, 560)]: + L = int(sr * 0.20) + tt = np.arange(L) / sr + beep = np.sin(2 * np.pi * f * tt) + 0.22 * np.sin(2 * np.pi * f * 2 * tt) \ + + 0.06 * np.sin(2 * np.pi * f * 3 * tt) + beep *= (1 - np.exp(-tt * 250)) * np.exp(-np.maximum(tt - 0.12, 0) * 60) + beep += bp_noise(L, 300, 2200) * np.exp(-tt * 90) * 0.10 # 电子毛边,低带 + y[int(st * sr):int(st * sr) + L] += beep + return dc(y) + + +def r_dodge(): # 1.2s 闪避成功:500→2100Hz 气声扫 + 一记软木鱼中频确认 + n = int(sr * 1.2) + t = np.arange(n) / sr + y = sweep_noise(n, 500, 2100, bw=1000) + env = (1 - np.exp(-t * 120)) * np.exp(-np.maximum(t - 0.55, 0) * 7) + y = y * env * 0.8 + L = int(sr * 0.16) + tt = np.arange(L) / sr + knock = np.sin(2 * np.pi * 740 * tt) * np.exp(-tt * 45) + knock += bp_noise(L, 400, 1800) * np.exp(-tt * 70) * 0.5 + y[int(0.06 * sr):int(0.06 * sr) + L] += knock * 0.5 + return dc(y) + + +def r_shield_block(): # 1.5s 护盾吸收:250-2300 电涟噪声衰减 + 150Hz 低频顿 + 弱 520Hz 余振 + n = int(sr * 1.5) + t = np.arange(n) / sr + rip = bp_noise(n, 250, 2300) * np.exp(-t * 4.5) + rip *= 1 + 0.5 * np.sin(2 * np.pi * 11 * t) * np.exp(-t * 3) # 涟波调制 + th = np.sin(2 * np.pi * 150 * t) * np.exp(-t * 18) * 0.6 + ring = np.sin(2 * np.pi * 520 * t) * np.exp(-t * 10) * 0.18 + y = (rip * 0.7 + th + ring) * (1 - np.exp(-t * 300)) + return dc(y) + + +def r_boost(): # 1.8s 引擎冲刺:55-90Hz 低哼 + 150-850Hz 推进噪声渐强,暗频谱 + n = int(sr * 1.8) + t = np.arange(n) / sr + rum = np.sin(2 * np.pi * 62 * t) + 0.5 * np.sin(2 * np.pi * 93 * t) + rum *= (1 - np.exp(-t * 30)) * np.exp(-np.maximum(t - 1.2, 0) * 4) + thrust = sweep_noise(n, 180, 850, bw=500) + env = np.minimum(1, t / 0.5) * np.exp(-np.maximum(t - 1.1, 0) * 5) + growl = bp_noise(n, 100, 500) * 0.5 * env + y = rum * 0.55 + (thrust * 0.55 + growl) * env + return dc(y) + + +def r_shield(): # 1.5s 护盾展开:320→980Hz 正弦爬升 + 轻 shimmer 噪声,谐波 <4kHz + n = int(sr * 1.5) + t = np.arange(n) / sr + f0 = 320 + (980 - 320) * np.minimum(t / 1.0, 1.0) ** 1.4 + ph = 2 * np.pi * np.cumsum(f0) / sr + y = np.sin(ph) * 0.7 + 0.15 * np.sin(2 * ph) + shim = bp_noise(n, 900, 3600) * 0.10 * np.minimum(1, t / 0.3) + env = (1 - np.exp(-t * 60)) * np.exp(-np.maximum(t - 1.05, 0) * 8) + return dc((y + shim) * env) + + +def r_whiff(): # 0.4s 挥空轻反馈:150-900Hz 低带噪声叹 + 200Hz 软顿(设计音量低,game 层 0.55) + n = int(sr * 0.4) + t = np.arange(n) / sr + y = bp_noise(n, 150, 900) * np.exp(-t * 14) * 0.7 + y += np.sin(2 * np.pi * 200 * t) * np.exp(-t * 30) * 0.5 + return dc(y * (1 - np.exp(-t * 400))) + + +ONE_SHOTS = { + "alarm": r_alarm, + "dodge": r_dodge, + "shield_block": r_shield_block, + "boost": r_boost, + "shield": r_shield, + "whiff": r_whiff, +} + + +# ---------------------------------------------------------------- 编码 + 真峰值校验 +def encode(wav_path, base): + for args, ext in [(["-c:a", "libvorbis", "-q:a", "3"], ".ogg"), + (["-c:a", "aac", "-b:a", "128k"], ".m4a")]: + subprocess.run([FFMPEG, "-y", "-v", "error", "-i", wav_path, + "-ar", "44100", *args, base + ext], check=True) + + +def true_peak_db(path): + r = subprocess.run([FFMPEG, "-i", path, "-af", "ebur128=peak=true", "-f", "null", "-"], + capture_output=True, text=True) + peaks = [float(line.split("Peak:")[1].strip().split()[0]) + for line in r.stderr.splitlines() if "Peak:" in line and "dBFS" in line] + return max(peaks) if peaks else float("nan") + + +def check_tp(base): + return max(true_peak_db(base + ".ogg"), true_peak_db(base + ".m4a")) + + +def spectral_report(base): + """编码后解码回读:≥3kHz/≥5kHz 能量占比(刺耳复测口径,与取证轮一致)。""" + r = subprocess.run([FFMPEG, "-v", "error", "-i", base + ".ogg", "-f", "f32le", "-ac", "1", "-ar", "44100", "-"], + capture_output=True) + y = np.frombuffer(r.stdout, dtype=np.float32) + Y = np.abs(np.fft.rfft(y * np.hanning(len(y)))) + fr = np.fft.rfftfreq(len(y), 1 / sr) + e = Y ** 2 + tot = e.sum() + 1e-12 + return e[fr >= 3000].sum() / tot * 100, e[fr >= 5000].sum() / tot * 100, fr[np.argmax(Y)] / 1000 + + +def main(): + report = [] + problems = [] + for fid, fn in ONE_SHOTS.items(): + wav_path = os.path.join(OUT, fid + ".wav") + base = os.path.join(DST, fid) + y = fade(norm(dc(fn()))) + sf.write(wav_path, stereo(y), sr) + encode(wav_path, base) + tp = check_tp(base) + if tp > ONE_SHOT_TP_CEIL: + gain = 10 ** ((ONE_SHOT_TP_CEIL - tp) / 20) * 0.98 + sf.write(wav_path, stereo(y * gain), sr) + encode(wav_path, base) + tp2 = check_tp(base) + report.append((fid, len(y) / sr, tp, f"降 {20 * np.log10(gain):.1f}dB 重编 -> {tp2:.2f}")) + tp = tp2 + else: + report.append((fid, len(y) / sr, tp, "")) + if tp > ONE_SHOT_TP_CEIL: + problems.append(f"{fid}: 真峰值 {tp:.2f} dBFS 仍超 {ONE_SHOT_TP_CEIL}") + print(f"{'id':14s} {'dur(s)':>7s} {'TP(dBFS)':>9s} {'%>3k':>7s} {'%>5k':>7s} {'peakkHz':>8s} note") + for fid, dur, tp, note in report: + e3, e5, pk = spectral_report(os.path.join(DST, fid)) + print(f"{fid:14s} {dur:7.2f} {tp:9.2f} {e3:7.1f} {e5:7.1f} {pk:8.2f} {note}") + if e5 > 15.0: + problems.append(f"{fid}: 5kHz+ 能量 {e5:.1f}% 仍偏高") + if problems: + print("PROBLEMS:") + for p in problems: + print(" ", p) + return 1 + print(f"ALL OK: {len(ONE_SHOTS)} one-shot -> {DST}") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/gen_voice_dual.py b/tools/gen_voice_dual.py index a7fb6c78..b7769608 100644 --- a/tools/gen_voice_dual.py +++ b/tools/gen_voice_dual.py @@ -319,28 +319,55 @@ SIMON_LINES = [ # H3:使用时如实报余量(替换主动重听路径的旧「用完了」绝对句)。 ("gd_chances_left1", _SIMON, "免费重听还剩一次。"), ("gd_chances_left0", _SIMON, "免费重听用完了。之后重听会花一次机会,别怕,慢慢来。"), + # ---- 状态查询(research/simon-polish round1,S1/S3/S4;input 阶段长按=问状态, + # 13 句全部整句预生成、数字分档,禁运行时拼接;不加 guide 前缀——三档 guide 全可用, + # 属玩家主动查询而非向导插播)---- + ("status_len_short", _SIMON, "这一轮很短。"), + ("status_len_mid", _SIMON, "这一轮不长不短。"), + ("status_len_long", _SIMON, "这一轮挺长。"), + ("status_len_xlong", _SIMON, "这一轮很长,稳住。"), + ("status_prog_start", _SIMON, "刚开头,一个还没对。"), + ("status_prog_early", _SIMON, "刚答了个开头。"), + ("status_prog_half", _SIMON, "答了一半左右。"), + ("status_prog_late", _SIMON, "就剩最后几个了。"), + ("status_free2", _SIMON, "免费重听还有两次。"), + ("status_free1", _SIMON, "免费重听还有一次。"), + ("status_chance2", _SIMON, "免费用完,机会还剩两次。"), + ("status_chance1", _SIMON, "免费用完,机会还剩一次。"), + ("status_out", _SIMON, "免费和机会都用完了,答错就结束。"), ] # ---------------------------------------------------------------- rhythm -# R3 重构(docs/design/03-rhythm-voice-ids.md):31 句,全表同一 instruct 常量。 +# 鼓手模式重构(docs/design/24-rhythm-voice-ids.md):41 句,全表同一 instruct +# 常量;向导层 9 句 gd_* 已在库沿用不重录(不在本表)。 _RHY = _pair("低沉醇厚的男声,像节奏游戏主持人,平稳有力", "活力清晰的年轻女声,像节奏游戏主持人,情绪饱满但不夸张") RHYTHM_LINES = [ # ---- W 组 · 开场与流程 ---- - ("welcome", _RHY, "欢迎来到节拍行者。跟着音乐,我奏一句,你跟一句。"), - ("welcome_back", _RHY, "欢迎回来。我奏一句,你跟一句。"), - ("tut_1", _RHY, "听,底鼓。在下一小节的同一个位置,单击。"), - ("tut_2", _RHY, "这次是左和右。跟着打,左滑,右滑。"), - ("tut_3", _RHY, "最后一句,三个音,中间是双击。"), + ("welcome", _RHY, "欢迎来到节拍行者。今天你是乐队的鼓手,整面屏幕都是你的鼓。"), + ("welcome_back", _RHY, "欢迎回来,鼓手。准备好了就开始。"), ("tut_done", _RHY, "很好,演出开始。"), ("tut_skip", _RHY, "跳过教学,直接开始。"), ("mid_song", _RHY, "过半了,保持。"), + # ---- Z 组 · 分区教学与区名 ---- + ("tut_map", _RHY, "先认识你的鼓。屏幕横着分三列,左边、中间、右边;竖着分两行,上面清亮,下面低沉。随便摸一摸,听到哪面鼓,我就告诉你它在哪。"), + ("tut_probe", _RHY, "摸到三个不同的地方,我们就开始。"), + ("tut_z_kick", _RHY, "下面正中间,是底鼓,你的家。先听四下数拍,然后跟着我敲。"), + ("tut_z_sides", _RHY, "左下是军鼓,右下是低嗵。一左一右,跟着打。"), + ("tut_z_patt", _RHY, "上面一排更清亮。左上踩镲,上中高嗵,右上吊镲。听这一句,三个音。"), + ("tut_fill", _RHY, "最后有一段加花,跟着我连打。"), + ("zone_tl", _RHY, "左上,踩镲。"), + ("zone_tc", _RHY, "上中,高嗵。"), + ("zone_tr", _RHY, "右上,吊镲。"), + ("zone_bl", _RHY, "左下,军鼓。"), + ("zone_bc", _RHY, "下中,底鼓。"), + ("zone_br", _RHY, "右下,低嗵。"), # ---- C 组 · 教学纠正 ---- ("retry_early", _RHY, "早了,等鼓点再出手。"), ("retry_late", _RHY, "晚了,跟着鼓点走。"), - ("retry_gesture", _RHY, "不是这个手势,再听一遍。"), + ("retry_wrong", _RHY, "敲错鼓了,再听一遍。"), ("retry_listen", _RHY, "再听一遍,跟着来。"), ("retry_skip", _RHY, "没关系,我们先走下一句。"), # ---- S 组 · 选曲与解锁 ---- @@ -359,26 +386,12 @@ RHYTHM_LINES = [ ("new_best_combo", _RHY, "新连击纪录!"), ("restart", _RHY, "单击再来一遍,右滑下一首,下滑回大厅。"), # ---- M 组 · 菜单与规则 ---- - ("rules", _RHY, "规则:我奏一句,你在下一小节原样跟打。音要对,拍点也要对。"), + ("rules", _RHY, "规则:我敲一小节鼓,你在下一小节照着敲回来。鼓要选对,拍点也要对。"), ("settings_hint", _RHY, "音色、语速、背景音乐,请回大厅修改。"), ("menu_main", _RHY, "菜单。单击切换选项,双击确认。"), ("menu_resume", _RHY, "继续演奏。"), ("menu_lobby", _RHY, "回大厅。"), ("skip_hint", _RHY, "单击可跳过旁白。"), - # ---- 向导层(docs/design/14-guide-layer.md,schemes §1.5 定稿全文)---- - ("gd_answer", _RHY, "现在跟着我打。"), - ("gd_miss", _RHY, "慢了半拍,下一小节跟上我就行。"), - # ---- 向导层 round2(docs/design/14-guide-layer.md「round2 v1.1」,synthesis §3 定稿全文)---- - ("gd_miss_early", _RHY, "抢拍了。等声音落下再滑。"), - ("gd_miss_late", _RHY, "慢了半拍。跟着节拍走。"), - ("gd_miss_wrong", _RHY, "方向不对。跟着音色滑。"), - # ---- 向导层 round3(docs/design/14-guide-layer.md「round3 v1.2」,synthesis §3 定稿全文)---- - ("gd_slow", _RHY, "我放慢一些,跟着试试。"), - ("gd_count", _RHY, "四拍之后,继续。"), - # ---- 向导层 round4(docs/design/14-guide-layer.md「round4 v1.3」,synthesis §3 定稿全文)---- - # H5:归因真话律——应答窗口无任何尝试播此句(早/晚/错分档只留给真出手的情况)。 - ("gd_miss_none", _RHY, "这拍没接。我停下的时候,就轮到你了。"), - ] # ---------------------------------------------------------------- space @@ -446,6 +459,9 @@ SPACE_LINES = [ ("settings_hint", _SPC, "音色、语速、背景音乐,请回大厅修改。"), ("paused", _SPC, "已暂停。"), ("skip_hint", _SPC, "单击可跳过旁白。"), + # ---- R5 新增(space polish round1/round2,research/space-polish/,04-space-voice-ids.md 追加节)---- + ("protect_soon", _SPC, "训练护盾还剩十秒。"), + ("boost_not_ready", _SPC, "引擎还在冷却,稍等一下。"), # ---- 向导层(docs/design/14-guide-layer.md,schemes §1.5 定稿全文)---- ("gd_hit_hint", _SPC, "被撞了。听方位,同向滑动就能拨开。"), # ---- 向导层 round2(docs/design/14-guide-layer.md「round2 v1.1」,synthesis §3 定稿全文)---- @@ -2219,16 +2235,16 @@ KEY_LINES = { ("gd_occ_dt", "这一轮,按回车是作答。"), ("gd_occ_both", "这一轮,按上方向键和回车都是作答。"), ], + # rhythm:8 对(24-rhythm-voice-ids.md 键盘变体表,措辞含数字键/方向键/空格/回车)。 "rhythm": [ - ("tut_1", "听,底鼓。在下一小节的同一个位置,按空格。"), - ("tut_2", "这次是左和右。跟着打,按左方向键,按右方向键。"), - ("tut_3", "最后一句,三个音,中间是按回车。"), + ("tut_map", "先认识你的鼓。屏幕横着分三列,左边、中间、右边;竖着分两行,上面清亮,下面低沉。按数字一键到六键,听六面鼓。"), + ("tut_probe", "按出三个不同的键,我们就开始。"), + ("tut_z_kick", "数字五,是底鼓,你的家。先听四下数拍,然后跟着我敲。"), + ("tut_z_sides", "数字四,军鼓。数字六,低嗵。一左一右,跟着打。"), + ("tut_z_patt", "上面一排更清亮。数字一踩镲,数字二高嗵,数字三吊镲。听这一句,三个音。"), ("select_hint", "左右方向键选曲目,按空格开始,按下方向键回大厅。"), ("restart", "按空格再来一遍,按右方向键下一首,按下方向键回大厅。"), ("menu_main", "菜单。按空格切换选项,按回车确认。"), - ("skip_hint", "按空格可跳过旁白。"), - ("gd_miss_early", "抢拍了。等声音落下再按。"), - ("gd_miss_wrong", "方向不对。跟着音色按方向键。"), ], "space": [ ("drill_left", "听,左边有陨石。按左方向键,把它拨开!"), diff --git a/web/harness/voice_text.json b/web/harness/voice_text.json index 55b93c22..07b8a739 100644 --- a/web/harness/voice_text.json +++ b/web/harness/voice_text.json @@ -1,1938 +1,1961 @@ { - "__key__": { + "__key__": { + "abyss": { + "dv1_teach": "到深度了。声呐静了。按空格,发一枚脉冲。", + "gd_again": "还在吗?按空格继续。", + "gd_brief": "按空格继续简报。要选择时,用左右方向键。", + "gd_continue": "按空格,继续。", + "gd_ping1": "声呐待命。按空格,发脉冲。", + "gd_ping2": "回波不会自己来。按空格。", + "p1": "管路在响。左箭头,停下来听敲管的暗号。右箭头,先带小舟上浮。", + "sys_continue_ask": "检测到你的下潜记录。空格继续上次,右箭头开始新救援。", + "sys_help": "空格继续,回车重新听。上箭头听状态,下箭头开菜单。选择时,左右箭头。", + "sys_menu": "菜单。空格切换选项,回车确认。", + "sys_skip": "听过的句子再播时,按空格跳过。" + }, + "detective": { + "cf_confirm": "就这句?空格,定下来。", + "cf_pick_line": "左右方向键,一句一句听。", + "fin_pre": "证据在手,就此结案?空格,定下来;方向键,继续查。", + "fin_who_confirm": "就指认这位?空格,定下来。", + "gd_board": "还在证词板。左右方向键,换卷宗。", + "gd_board_cf": "都听过了。按住空格,去指证。", + "gd_cf": "还在选证词。左右方向键,空格确认。", + "recap_cf": "卷宗都在耳朵里了。挑一句你不信的,按住空格指证。", + "settle_hook": "同一场雨里,还有别的案子。按空格,接新案。", + "sys_help": "方向键换卷宗,空格听取,回车重新听。按住空格指证,上键状态,下键菜单。", + "tut_confront": "按住空格,进入指证。", + "tut_d0": "先熟悉证词板。左右方向键,换卷宗。", + "tut_listen": "空格,听取当前卷宗。", + "tut_replay": "回车,重新听这一句。" + }, + "dungeon": { + "die_adv_1": "下次,前摇声响时就按回车。", + "die_adv_2": "打不过,就按住空格逃跑。", + "gd_pulse": "按空格发脉冲,听听四周。", + "gd_turn": "轮到你了。按空格挥击。", + "help_battle": "敌人前摇声响时按回车格挡,按空格挥击。打不过就按住空格逃跑。", + "help_explore": "按空格发脉冲,按住空格前进,左右方向键转身。按回车再听,上方向键查状态,下方向键开菜单。", + "settle_again": "按空格,再探一次。", + "sys_continue_ask": "检测到探窟记录。按空格继续,按右方向键重新开始。", + "sys_menu": "菜单。按空格切换,按回车确认。", + "tut_attack": "现在按空格,挥拳打它。", + "tut_d0": "先学会用耳朵看。按空格,发出声波脉冲。", + "tut_flee_hold": "想逃跑,按住空格别松手。", + "tut_menu": "按下方向键,打开菜单。", + "tut_parry": "听到它的动静,按回车格挡。", + "tut_replay": "按回车,再发一次脉冲,不要钱。", + "tut_skip": "已跳过教学。按空格发脉冲,先听听四周。", + "tut_stairs_on": "楼梯就在脚下。按空格,下潜。", + "tut_status": "按上方向键,随时听自己的状态。", + "tut_turn": "按左右方向键,可以转身。", + "tut_walk": "按住空格不放,你就往前走。" + }, + "escape": { + "again": "按空格,再来一次。按下方向键,打开菜单。", + "g1_move": "先活动一下。按任意方向键,走一小步。", + "g2_wall": "这个房间不大,四面都是墙。再按两下方向键,试试碰碰墙。", + "g3_left": "跟着我指的路走。按左方向键。", + "g4_down": "对。再按下方向键。", + "g5_inspect": "听到水声了吗?按一下空格,仔细检查这个房间。", + "g6_doubletap": "钥匙能开锁。按回车,是把物品用出去的用法。现在,按回车试试。", + "g7_goal": "找到能用这把钥匙打开的东西。需要帮助时,在原地按回车。", + "guide_blunt_down": "按一下下方向键。", + "guide_blunt_left": "按一下左方向键。", + "guide_blunt_right": "按一下右方向键。", + "guide_blunt_up": "按一下上方向键。", + "guide_wrong_down": "不是这个方向。按下方向键。", + "guide_wrong_left": "不是这个方向。按左方向键。", + "guide_wrong_right": "不是这个方向。按右方向键。", + "guide_wrong_up": "不是这个方向。按上方向键。", + "help_ops": "方向键,在房间之间移动。按空格,检查房间,或者重听房间的声音。按回车,使用物品,或者查看背包。", + "inspect_gate_ready": "电子锁的指示灯亮了,发出微弱的绿光。大门已经通电。按回车,打开它,离开这里。", + "nav_down": "按下方向键。", + "nav_left": "按左方向键。", + "nav_right": "按右方向键。", + "nav_up": "按上方向键。", + "reopen_prompt": "按上方向键,重新听一遍引导。按空格,直接开始。", + "skip_hint": "按空格可跳过旁白。", + "start_room": "你站在设施中央的房间里。方向键移动,按空格检查,按回车使用物品。", + "stuck_box_2": "去西北角的电箱房,按回车,把保险丝装进电箱。", + "stuck_cabinet_2": "去东边的铁柜房,按回车,用钥匙打开铁柜。", + "stuck_gate_2": "去东南角的大门,按回车,打开它,离开这里。", + "stuck_key_2": "去西南角的储物间,按空格检查,找到钥匙。", + "use_fail": "这里没有用得上东西的地方。换个房间试试,或者先按空格检查一下周围。" + }, + "hunt": { + "end_again": "按空格,再猎一局。", + "gd_idle": "听声音的方向,按方向键。", + "help_main": "朝声音的方向按方向键,就是出击。按空格呼喊支援,按回车旋风斩。上方向键状态,下方向键菜单。", + "room_wait": "房间已开好,等同伴到齐。按空格,立即开局。", + "sys_menu": "菜单。按空格切换,按回车确认。", + "tut_attack": "听,有狼在靠近。朝声音的方向,按方向键。", + "tut_callout": "按空格,呼喊支援,队友会来帮你。", + "tut_rule": "野兽会从八个方向围上来。声音在哪边,就按哪边方向键。", + "tut_skill": "按回车,旋风斩,清掉身边一圈。", + "tut_skill_cd": "旋风斩有八秒冷却。冷却中按回车,重新听威胁。", + "tut_status": "按上方向键,听营地状态。按下方向键,打开菜单。" + }, + "keeper": { + "gd_again": "还在吗?按空格继续。", + "gd_brief": "按空格,继续值守。要选择时,用左右方向键。", + "gd_continue": "按空格,继续。", + "p1": "他的声音在抖。左箭头,先接住这个人。右箭头,先要他的船位。", + "sys_continue_ask": "检测到你的值守记录。空格继续上次,右箭头开始新的风暴夜。", + "sys_help": "空格继续,回车重新听。上箭头听状态,下箭头开菜单。选择时,左右箭头。", + "sys_menu": "菜单。空格切换选项,回车确认。", + "sys_skip": "想跳过这句,按空格。" + }, + "radio": { + "gd_again": "还在吗?按空格继续。", + "gd_brief": "按空格继续节目。请选择的时候,按左或右方向键。", + "gd_continue": "按空格,继续。", + "gd_ring1": "热线在闪。按空格,接听。", + "gd_ring2": "灯还亮着,听众在等。按空格,接听。", + "p1": "老人在发抖。按左方向键,陪他哼那首老歌。按右方向键,冷静问他路口的路牌。", + "p2": "雨声更密了。按左方向键,留在原地陪他等巡逻队。按右方向键,转接派出所。", + "p3": "按左方向键,告诉她这趟车值得上。按右方向键,把选择还给她。", + "p4": "按左方向键,唱一段摇篮曲哄她睡。按右方向键,轻轻问她怎么了。", + "p5": "孩子的声音在抖。按左方向键,告诉她这不是她的错。按右方向键,答应她明天都会好。", + "p6": "摔门声你听见了。按左方向键,替孩子给她带句话。按右方向键,劝她回家把话说开。", + "p7": "她的呼吸平了。按左方向键,留在直播里,让全城等这个门铃。按右方向键,换垫乐,私下陪她说完。", + "p8": "方向盘比话筒危险。按左方向键,陪他聊聊闺女。按右方向键,让他立刻进服务区。", + "p9": "留言机红灯在闪,是老主播三年前没播完的那句晚安。按左方向键,替他播出去。按右方向键,照常收播。", + "sys_continue_ask": "检测到你的夜班记录。按空格继续上次,按右方向键开始新的夜晚。", + "sys_help": "按空格继续,按回车重新听。按上方向键听状态,按下方向键开菜单。请选择时,左右方向键。", + "sys_menu": "菜单。按空格切换选项,按回车确认。", + "sys_skip": "想跳过这句,按空格就行。" + }, + "rhythm": { + "tut_map": "先认识你的鼓。屏幕横着分三列,左边、中间、右边;竖着分两行,上面清亮,下面低沉。按数字一键到六键,听六面鼓。", + "tut_probe": "按出三个不同的键,我们就开始。", + "tut_z_kick": "数字五,是底鼓,你的家。先听四下数拍,然后跟着我敲。", + "tut_z_sides": "数字四,军鼓。数字六,低嗵。一左一右,跟着打。", + "tut_z_patt": "上面一排更清亮。数字一踩镲,数字二高嗵,数字三吊镲。听这一句,三个音。", + "select_hint": "左右方向键选曲目,按空格开始,按下方向键回大厅。", + "restart": "按空格再来一遍,按右方向键下一首,按下方向键回大厅。", + "menu_main": "菜单。按空格切换选项,按回车确认。" + }, + "rpg": { + "btl_lose_hint": "记住,听清前摇,按回车格挡。", + "gd_parry_miss": "前摇声起的时候按回车,才能格挡。", + "gd_stall": "想好了吗?左右方向键选择,按空格出手。", + "help_battle": "战斗中,左右方向键选招式,按空格出手。听到敌人的前摇,按回车格挡。", + "help_explore": "左右方向键切换选项,按空格确认。按回车重新听场景,按上方向键查看状态,按下方向键打开菜单。", + "shop_open": "商店。左右方向键看看货,按空格购买。", + "skip_hint": "按空格可跳过旁白。", + "sys_continue_ask": "检测到你的旅程记录。按空格继续,按右方向键开始新的旅程。", + "sys_menu": "菜单。左右方向键选择,按空格确认。", + "tut_b0": "战斗里,左右方向键选招式,按空格出手。听到这个声音,就是你的回合。先按一按方向键,试试。", + "tut_b2": "就是现在,按回车格挡!", + "tut_b3": "挡住了!轮到你了。左右方向键选攻击,按空格出剑。", + "tut_b6": "来不及格挡,就选防御。左右方向键,选防御,按空格。", + "tut_battle_2": "左右方向键切换招式,攻击、破空斩、防御、金疮药。按空格,出手。", + "tut_battle_3": "敌人出手前有一声前摇。听到前摇,马上按回车,就能格挡。", + "tut_battle_5": "记住:听清前摇,按回车格挡。开始吧!" + }, + "simon": { + "gd_economy": "记不住就按上方向键,重新听一遍。免费机会有两次,用完要扣一次机会。", + "gd_occ_both": "这一轮,按上方向键和回车都是作答。", + "gd_occ_dt": "这一轮,按回车是作答。", + "gd_occ_up": "这一轮,按上方向键是作答。", + "gd_relisten": "需要的话,按上方向键可以重新听一遍序列。", + "replay": "按空格,再来一局。", + "rules": "上行音,按上方向键。下行音,按下方向键。左边的音,按左方向键。右边的音,按右方向键。一声轻响,按空格。两声轻响,按回车。", + "rules_prompt": "按上方向键,重听规则。按下方向键,打开菜单。", + "skip_hint": "按空格可跳过旁白。", + "t1_up": "按上方向键,是这个声音。", + "t2_down": "按下方向键,是这个声音。", + "t3_left": "按左方向键,是这个声音。", + "t4_right": "按右方向键,是这个声音。", + "t5_tap": "按空格,是这个声音。", + "t6_double": "按回车,是这个声音。", + "t7_retry": "答错可以消耗机会重听。按上方向键,可以随时重听。", + "t_blunt_double": "按一下回车。", + "t_blunt_down": "按一下下方向键。", + "t_blunt_left": "按一下左方向键。", + "t_blunt_right": "按一下右方向键。", + "t_blunt_tap": "轻轻按一下空格。", + "t_blunt_up": "按一下上方向键。", + "t_wrong_double": "不是这个,按回车试试。", + "t_wrong_down": "不是这个,按下方向键试试。", + "t_wrong_left": "不是这个,按左方向键试试。", + "t_wrong_right": "不是这个,按右方向键试试。", + "t_wrong_tap": "不是这个,按空格试试。", + "t_wrong_up": "不是这个,按上方向键试试。" + }, + "space": { + "drill_down": "下面是低沉的轰隆。按下方向键!", + "drill_left": "听,左边有陨石。按左方向键,把它拨开!", + "drill_retry_down": "轰隆声在下面,按下方向键。", + "drill_retry_left": "那是左边来的,按左方向键。", + "drill_retry_right": "那是右边来的,按右方向键。", + "drill_retry_up": "声音又高又尖,是上面,按上方向键。", + "drill_right": "这次在右边。按右方向键!", + "drill_up": "上面有东西,声音又尖又高。按上方向键!", + "feat_boost": "试试按空格,引擎会短促加速,直接冲过空隙。", + "feat_shield": "按回车展开护盾,能挡下一次撞击。", + "gd_hit_hint": "被撞了。听方位,按对应方向键就能拨开。", + "help_recap": "左边来按左方向键,右边来按右方向键,上面来按上方向键,下面来按下方向键。按空格加速,按回车护盾。", + "hit_down": "下面撞上的。听到低沉的轰隆,按下方向键。", + "hit_left": "左边撞上的。听到左边的呼啸,按左方向键。", + "hit_right": "右边撞上的。听到右边的呼啸,按右方向键。", + "hit_up": "上面撞上的。听到高高的呼啸,按上方向键。", + "menu_main": "菜单。按空格切换选项,按回车确认。", + "protect_down": "训练护盾接住了。那颗在下面,听到低沉的轰隆,按下方向键。", + "protect_left": "训练护盾接住了。那颗在左边,听到左边的呼啸,按左方向键。", + "protect_right": "训练护盾接住了。那颗在右边,听到右边的呼啸,按右方向键。", + "protect_up": "训练护盾接住了。那颗在上面,听到高高的呼啸,按上方向键。", + "restart_hint": "按空格再飞一次,按下方向键回大厅。", + "second_run_ask": "按上方向键重新听演练,按空格直接出发。", + "skip_hint": "按空格可跳过旁白。" + }, + "storyline": { + "e1_dawn": "加密频道那头沉默了三秒。然后,一个你等了三十天的声音响了起来:“姐?姐!是你吗?”天亮之前,避难所的救援队打开了大门。猎狗的人,在北区的高墙下溃散了。你抱着晨晨,听见广播塔里,重新响起了音乐。后来人们说,这座城市,是从一个女人的声音开始,重新活过来的。——好结局:黎明。感谢你,陪林晚走完了这条路。按空格,可以回到故事开始的地方。", + "e2_price": "你赶在车队前面,撞进了避难所的大门。“关掉广播!关灯!猎狗来了——!”那一夜,北区守住了。探照灯熄灭的时候,晨晨从人群里扑出来抱住你,才发现你胳膊上的血,已经把半边袖子浸透了。坐标是你交出去的,命,是你抢回来的。你赢了,用一条胳膊的代价。——结局:代价。按空格,重新开始。", + "e3_alone": "你逃了。一路向南,没有回头。三天后,收音机里关于北区的广播,停了。又过了七天,你在一个废弃的加油站里,听见最后一个频段,也变成了沙沙声。你活下来了。只是从此以后的每一个夜里,你都会想起那声口哨,和你报出坐标时,自己发抖的声音。——坏结局:孤声。按空格,重新开始。", + "e4_static": "公开频道,把所有人都引来了——幸存者,还有猎狗。塔顶的风很大,你看见山下火把连成的长龙,也看见避难所方向亮起的防御火光。猎狗的刀抵上来的时候,你对着麦克风笑了:“听见了吗,晨晨?姐姐的声音,全城都听见了。”信号中断了。但那晚之后,北区,再没有人投降。——结局:静默。按空格,重新开始。", + "gd_again": "还在吗?按空格继续。", + "gd_brief": "按空格继续剧情。请选择的时候,按左右方向键。", + "gd_continue": "按空格,继续。", + "help": "操作说明。按空格:继续剧情。按回车:重听刚才的台词。按上方向键:听这段说明和当前进度。按下方向键:呼出菜单,菜单里可以重新开始。当旁白说“请选择”的时候,按左方向键或者按右方向键,做出你的决定。选择无法撤销。", + "menu": "菜单。按左方向键:重新开始整个故事。按右方向键,或者按空格:回到故事。按上方向键:听操作说明。", + "n00_intro": "大停电后的第三十天,城市陷入彻底的黑暗。没有电,没有网络,只有收音机里偶尔闪过的沙沙声,像垂死者的呼吸。你是林晚,一名前急救员。在这个故事里,你用声音活下去。请记住:按空格,继续剧情;按回车,重听上一句;按上方向键,听你的状态和帮助;按下方向键,呼出菜单。当我说“请选择”的时候,按左方向键,或者按右方向键,做出你的决定。选择一旦做出,就无法回头。现在,按空格,睁开眼睛。", + "p1": "请选择。按左方向键:先检查背包里的收音机。按右方向键:先摸黑寻找出口。", + "p2": "请选择。按左方向键:钻进旁边的通风管道。按右方向键:躺进路边的尸体堆里装死。", + "p3": "请选择。按左方向键:循着哭声过去看看。按右方向键:不去管它,直接去北区。", + "p4": "请选择。按左方向键:带上小满一起走。按右方向键:留下食物,独自上路。", + "p5": "请选择。按左方向键:走桥下的污水涵洞。按右方向键:爬桥上悬着的钢索。", + "p6": "请选择。按左方向键:交出坐标,保命要紧。按右方向键:拒绝他,想办法周旋。", + "p7": "请选择。按左方向键:追上去,警告避难所。按右方向键:自己逃命,越远越好。", + "p8": "请选择。按左方向键:用公开频道广播,让全城都听见。按右方向键:用加密频段,只发给避难所。", + "skip_hint": "按空格可跳过旁白。" + }, + "teahouse": { + "gd_brew": "还在灶上,听声动手,回车。", + "gd_serve": "客人还在堂前。上键,再听一遍他要的茶。", + "settle_night": "熄了灯,这一晚就过去了。按空格,睡下。", + "sys_help": "方向键选茶,空格定下。听水声,回车提壶;滴答密,回车出汤。上键状态,下键菜单。", + "tut_d0": "先看茶柜。左右方向键,一罐一罐听。", + "tut_serve": "茶好了。空格,端出去。", + "tut_steep": "注水,闷泡。滴答由稀到密,密起来就是将好——回车,出汤。", + "tut_tea": "空格,选定这罐茶。", + "tut_water": "灶上坐水。泡泡细密是将沸,咕嘟连片是滚透——听到细密,回车提壶。", + "upg_open": "要添置点什么?左右方向键看,空格买定。" + } + }, "abyss": { - "dv1_teach": "到深度了。声呐静了。按空格,发一枚脉冲。", - "gd_again": "还在吗?按空格继续。", - "gd_brief": "按空格继续简报。要选择时,用左右方向键。", - "gd_continue": "按空格,继续。", - "gd_ping1": "声呐待命。按空格,发脉冲。", - "gd_ping2": "回波不会自己来。按空格。", - "p1": "管路在响。左箭头,停下来听敲管的暗号。右箭头,先带小舟上浮。", - "sys_continue_ask": "检测到你的下潜记录。空格继续上次,右箭头开始新救援。", - "sys_help": "空格继续,回车重新听。上箭头听状态,下箭头开菜单。选择时,左右箭头。", - "sys_menu": "菜单。空格切换选项,回车确认。", - "sys_skip": "听过的句子再播时,按空格跳过。" + "b_go": "第一潜,找船。耳朵交给声呐。", + "b_goal": "海燕号,五个人。你的双瓶,够下四潜。", + "b_open": "风停了。我站在问海号甲板上,下面三千米,是海燕号。", + "b_rule": "规矩就一条:气不够一潜,人就必须上浮。", + "bai_a": "哈哈,救援的?我这腿,跟冷却管缠上了。", + "bai_b": "艇上的药板烧了。病舱那两个,比我悬。", + "bai_out": "腿还在!我的腿还在!走,我给你带路。", + "bai_thanks": "这片海养着一村人。这份情,我记一辈子。", + "chen_a": "你来了。小郑股骨断了,我给他固定好了。", + "chen_b": "救援钟一次带一个。我是医生,我最后走。", + "chen_last": "去吧。灯我留着,人齐了就熄。", + "chen_stay": "去吧。我守着灯,灯不灭,人就不散。", + "chen_up": "……好。小郑,等我,上面给你热粥。", + "d1_code": "是老白的暗号:腿被压住,先泄压,再撬。记住这个敲法。", + "d1_listen": "都别出声。管子那头,敲得很稳。", + "d1_log": "日志里有失事前,最后一段录音。给你,替我们收好。", + "d1_nolog": "日志可以补,人不能等。走了。", + "d1_surf": "小舟出水,第一潜收工。往返,扣三格气。", + "d1_up": "小舟,抓住我的肩锁。我们上。", + "d2_cut": "切割枪。老白,闭眼,憋气。", + "d2_flash": "火花炸了一下,虚惊。老白咳着,腿抽出来了。", + "d2_leave": "阀门交给母船。你先上,腿要紧。", + "d2_pry": "老白,忍住。先泄压,再撬。", + "d2_pry_ok": "暗号没白听。管子一松,钢梁抬起来了。", + "d2_pry_slow": "摸着找泄压阀,多费了一格气。腿,出来了。", + "d2_supply": "潜友阿凯捎来应急瓶。甲板上,粥给你温着。", + "d2_surf": "老白出水。他一直扒着舱门,往水里看。", + "d2_valve": "电池舱我陪你去。这片海不能脏。", + "d2_valve_e": "阀门关死了。两格气,换一片干净海。", + "d3_chen": "陈医官,你的手在抖。这次,听我的。", + "d3_chen_e": "陈医官出水。小郑固定在吊床上,呼吸平稳。", + "d3_promise": "四小时内,我下来。等我。", + "d3_spare": "备用瓶留下。灯,给我亮着。", + "d3_spare_e": "备用瓶挂上了,能多撑十二小时。", + "d3_surf": "病舱的人出水。海燕号的呻吟,隔着水都听得见。", + "d3_zheng": "小郑先走。陈医官,下一潜,就是你的。", + "d3_zheng_e": "小郑吊上去了。他一路,都没敢出声。", + "d4_fast": "来不及了。直浮!", + "d4_fast_e": "违规快浮。医疗舱的灯,先给你们开好。", + "d4_pick_chen": "陈医官,轮到你了。抓住,上浮。", + "d4_pick_gao": "船长,抓住我。海燕号的事,上面再说。", + "d4_pick_zheng": "小郑,吊床连人一起。走了。", + "d4_silent": "纪律就是纪律。抓住,上浮。", + "d4_slow": "逐站停,慢慢浮。规矩不能破。", + "d4_slow_e": "减压站一个个过。气瓶在跳,人稳着。", + "d4_stay_lost": "另一位,留在了倾斜的船舱。航标灯,替所有人亮着。", + "d4_surf": "最后一潜收工。问海号的甲板,从没这么亮过。", + "d4_talk": "日志我听完了。海燕号为什么沉,我会带上去。走吧。", + "d9_bell": "最后一潜。不为救人,为个交代。", + "d9_bello": "船钟出水。海燕号的声音,回家了。", + "d9_rest": "交代,留给明天的人。我去医疗舱。", + "dry_a": "气瓶用干了。立刻上浮。", + "dry_b": "气花在了人身上。人,都上来了。", + "dv1_down": "下潜开始。水会越来越黑,声音会越来越多。", + "dv1_link": "回波后面有杂音,是电台!接通了。", + "dv1_metal": "金属回波,钢板。听见这个,就是海燕号的船身。", + "dv1_teach": "到深度了。声呐静了。单击,发一枚脉冲。", + "dv2_down": "第二潜,机舱。顺着敲管的声音走。", + "dv2_found": "碎石回波后面,敲管声密了。机舱到了。", + "dv3_down": "第三潜,病舱。海燕号在倾斜,别恋战。", + "dv3_groan": "回波发闷。船体在呻吟,它撑不久了。", + "dv4_down": "最后一潜,指挥舱。海燕号,撑不住了。", + "dv4_dual": "两个人下同一潜。这趟往返,扣四格气。", + "dv4_none": "气不够一潜了。第四潜,取消。", + "dv4_slide": "它滑了!抓稳索缆,指挥舱里还有人!", + "e1_a": "五个人都在甲板上。船钟的第一声,是替这条沟敲的。", + "e1_b": "三年了,我终于敢往下看。明天,想再潜一次。", + "e2_a": "五个人都救上来了。船钟,留在了沟底。", + "e2_b": "没人怪我。可半夜醒来,总听见钟在响。", + "e3_a": "没能都带回来。可我到底下去了,敲响了那口钟。", + "e3_b": "钟声替他们,在沟底响了一声。这样,也好。", + "e4_a": "我按规矩上浮了。规矩里,没写怎么难过。", + "e4_b": "沟底很安静。安静得,像三年前那天。", + "ep_bai_no": "老白:腿打了钢钉。他说,瘸着也值。", + "ep_bai_ok": "老白:腿保住了。阀门那夜之后,见人就夸你。", + "ep_chen_lost": "陈医官:她守着灯,到最后一小时。灯,还亮着。", + "ep_chen_ok": "陈医官:回了医院。诊室里,挂着一盏海底的灯。", + "ep_gao_lost": "高船长:随海燕号留在沟底。航标灯,还亮着。", + "ep_gao_peace": "高船长:退役申请自己写的。第一行写着:数据不如人。", + "ep_gao_up": "高船长:上了岸,一直没说话。听说,他在学敲管语。", + "ep_lead": "收队了。调度台给你记一笔——他们,后来怎样了。", + "ep_trench_bell": "沟底:船钟挂在问海号桅杆上。风一过,就响一声。", + "ep_trench_deep": "沟底:很深,很静。海燕号睡在里面,像睡着了。", + "ep_zheng_lost": "小郑:吊床随船,滑进了沟底。他没来得及看日出。", + "ep_zheng_ok": "小郑:拆了石膏,第一件事,去看海。", + "ep_zhou_no": "小舟:声呐日志没了。她凭记忆,重新描了一遍海图。", + "ep_zhou_ok": "小舟:归队报告打了三页。她说,声音都记得。", + "g9_dry": "一格气都不剩了。能带的,你都带回来了。", + "g9_in": "医疗舱躺满了。你的气瓶剩多少,你比我清楚。", + "g9_knot": "三年前,也是这条沟。我按时上浮了,搭档没有。", + "gao_a": "救援员。我船上,还剩两个活人。", + "gao_b": "都带走,我最后上。这是船长的规矩。", + "gao_c": "三年前……没什么。走吧,别耽误。", + "gao_confess": "日志你拿了?里面写着。是我下令,多采了一小时。", + "gao_final": "别下来。带他们回家,就算救完了。海燕号,通话结束。", + "gao_last": "航标灯替我留着。就说,船长睡了。", + "gao_peace": "……好。这一次,听救援员的。", + "gd_again": "还在吗?单击继续。", + "gd_brief": "单击继续简报。要选择时,向左或向右滑。", + "gd_continue": "单击屏幕,继续。", + "gd_invalid": "这个手势,水里用不上。", + "gd_ping1": "声呐待命。单击,发脉冲。", + "gd_ping2": "回波不会自己来。单击。", + "gd_prog1": "滑动在这里用不上。想想调度刚说的话。", + "gd_prog2": "别乱。停一下,想想下一步。", + "oxy_crit": "氧气见底,必须上浮。", + "oxy_crit_deck": "氧气见底,一潜都下不去了。", + "oxy_full": "气瓶还足,救得动。", + "oxy_gain": "应急瓶接上了,多三格。", + "oxy_low": "氧气告急,只够最后一潜。", + "oxy_ok": "氧气还够两潜。", + "p1": "管路在响。向左滑,停下来听敲管的暗号。向右滑,先带小舟上浮。", + "p2": "小舟想回去拿声呐日志。向左滑,等她。向右滑,直接上浮。", + "p3": "钢梁压着腿。向左滑,泄压后慢慢撬。向右滑,切割枪,快切。", + "p4": "老白要去关电池舱阀门。向左滑,陪他去。向右滑,直接上浮。", + "p5": "病舱一次只能走一个。向左滑,先带陈医官。向右滑,先带小郑。", + "p6": "留守的人要空气。向左滑,留下你的备用瓶。向右滑,约定下一潜来接。", + "p7": "双人上浮。向左滑,逐站减压慢慢浮。向右滑,违规直浮,搏一把。", + "p7_chen": "气只够带一个。向左滑,带船长。向右滑,带陈医官。", + "p7_zheng": "气只够带一个。向左滑,带船长。向右滑,带小郑。", + "p8": "船长的话没说完。向左滑,把你听到的说出来。向右滑,什么都不问,拉他上浮。", + "p9": "海燕号的船钟,还挂在沉船上。向左滑,用最后的气,下去取。向右滑,进医疗舱。", + "prog_d1": "现在是第一次下潜。", + "prog_d2": "现在是第二次下潜。", + "prog_d3": "现在是第三次下潜。", + "prog_d4": "现在是最后一次下潜。", + "prog_saved1": "已经救上一个人。", + "prog_saved2": "已经救上两个人。", + "prog_saved3": "已经救上三个人。", + "prog_saved4": "已经救上四个人。", + "prog_saved5": "五个人都在甲板上了。", + "sys_continue_ask": "检测到你的下潜记录。单击继续上次,右滑开始新救援。", + "sys_help": "单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。", + "sys_menu": "菜单。单击切换选项,双击确认。", + "sys_menu_lobby": "保存并回大厅。", + "sys_menu_restart": "重新开始这次救援。", + "sys_menu_resume": "回到水下。", + "sys_new_dive": "新的一次下潜,开始了。", + "sys_settings": "音色、语速、背景音乐,请回大厅修改。", + "sys_skip": "听过的句子再播时,单击就能跳过。", + "z1_a": "……有人吗?声呐兵,小舟。我们还活着,全艇五个人。", + "z1_b": "轮机长老白困在机舱,陈医官和小郑在病舱,船长在指挥舱。", + "z1_bye": "好。上面……是不是天亮了?", + "z1_knock": "等等,你听。管子里,有人在敲。" + }, + "bridge": { + "cr_decide": "听选项,下令。", + "cr_timeout": "没来得及下令。", + "die_adv_sys": "系统离线时,别把宝押在它身上。", + "die_adv_to": "早下令,勤靠港,别硬扛。", + "die_intro": "舰体解体在即,全员撤离。", + "die_meteor": "陨石撕开了船身。", + "die_pirate": "海盗的炮火击穿了舰体。", + "die_rad": "辐射熔穿了舱壁。", + "dir_bow": "方位,舰首。", + "dir_port": "方位,左舷。", + "dir_star": "方位,右舷。", + "dir_stern": "方位,舰尾。", + "doc_aid": "幸好停了船,他们撑不了多久了。", + "doc_care": "有伤员的地方,就有我。", + "doc_ignore": "……我没有什么要说的。", + "doc_trap": "有人拿求救当诱饵,小心。", + "dock_empty": "全舰状态良好,无需整备。", + "dock_go": "启航,继续巡逻。", + "dock_open": "靠港整备。左右滑看项目,单击执行。", + "eng_fix": "修好了,再听它稳稳地转。", + "eng_gripe": "护盾不是这么用的,舰长……", + "eng_sup": "交给我,三分钟,给它救活。", + "eng_wear": "老伙计累出毛病了,让我来。", + "evt_distress": "断续三短,求救信号。", + "evt_dock": "本段结束,靠港整备。", + "evt_meteor": "碎石呼啸,陨石群。", + "evt_pirate": "敌船引擎,海盗。", + "evt_radiation": "计数急响,辐射云。", + "evt_resume": "启航,下一段巡航。", + "gd_cruise": "还在巡航。上滑,巡检全舰。", + "gd_decide": "还在等命令。左右滑,听选项。", + "gd_dock": "还在整备。左右滑,单击执行。", + "gd_invalid": "这个操作,这里用不上。", + "hint_dock3": "整备完毕,就启航。", + "intro_1": "你是巡逻舰星环号的舰长。在这条航线上,耳朵就是雷达。", + "intro_2": "全舰四个系统:引擎、护盾、扫描、武器,各守一方。", + "intro_3": "引擎在舰尾低鸣,护盾在舰首嗡响。", + "intro_4": "扫描在左舷扫掠,武器在右舷充能。", + "intro_5": "危机从哪边来,哪边先遭殃。", + "loy_aid": "医师与大副,记下了这次驰援。", + "loy_breach": "工程师心疼过载的护盾。", + "loy_evade_pirate": "大副觉得,这一躲有些窝囊。", + "loy_fight_win": "大副打得尽兴,士气高涨。", + "loy_ignore": "求救没了下文,医师很失望。", + "loy_rad": "医师在处理伤员。", + "merit_1": "功勋,寥寥。", + "merit_2": "功勋,可观。", + "merit_3": "功勋,丰厚。", + "opt_aid": "驰援,靠扫描。", + "opt_breach": "硬闯,靠护盾。", + "opt_evade": "规避机动,靠引擎。", + "opt_fight": "迎战,靠武器。", + "opt_ignore": "按兵不动,不理会。", + "opt_route_rich": "矿富航线,采得多,磨损也多。", + "opt_route_safe": "稳妥航线,采集平平,太平。", + "port_back": "返回。", + "port_open": "星港整备,功勋兑换。左右滑看,单击定。", + "port_poor": "功勋不够。", + "rate_a": "出色完成巡逻。", + "rate_b": "巡逻结束,有惊无险。", + "rate_c": "巡逻结束,遍体鳞伤。", + "rate_d": "巡逻失败,弃舰撤离。", + "rate_s": "教科书巡逻,功勋卓著。", + "recap_go": "继续航行。", + "rep_engine": "修理引擎,升一级,两资源。", + "rep_ok": "修理完成。", + "rep_open": "巡逻归来,全舰记功。剩余资源已折算功勋。", + "rep_poor": "资源不够。", + "rep_scan": "修理扫描,升一级,两资源。", + "rep_shield": "修理护盾,升一级,两资源。", + "rep_weapon": "修理武器,升一级,两资源。", + "res_ambush": "遭了伏击,舰体受创。", + "res_bad": "损失惨重。", + "res_clean": "干净利落,有惊无险。", + "res_hurt": "舰体受创。", + "res_mine": "轰开碎石,采到矿材,资源加一。", + "res_plunder": "海盗击退,缴获物资,资源加二。", + "res_rad": "全船受照。", + "res_reward": "救援成功,对方致谢,资源加二。", + "route_ask": "选择巡航航线。", + "settings_hint": "音色、语速、背景音乐,请回大厅修改。", + "settle_hook": "星港期待你的下一次巡逻。单击,返航。", + "st_doc_1": "医师,离心。", + "st_doc_2": "医师,平常。", + "st_doc_3": "医师,信赖。", + "st_eng_1": "工程师,离心。", + "st_eng_2": "工程师,平常。", + "st_eng_3": "工程师,信赖。", + "st_hull_1": "舰体,稳固。", + "st_hull_2": "舰体,带伤。", + "st_hull_3": "舰体,危急。", + "st_rp_1": "资源紧张。", + "st_rp_2": "资源够用。", + "st_rp_3": "资源充足。", + "st_seg_1": "第一巡航段。", + "st_seg_2": "第二巡航段。", + "st_seg_3": "第三巡航段。", + "st_seg_4": "第四巡航段,末段。", + "st_xo_1": "大副,离心。", + "st_xo_2": "大副,平常。", + "st_xo_3": "大副,信赖。", + "sup_doc": "医师带人抢修,舰体补回一点。", + "sup_eng": "工程师出手,系统复航了。", + "sup_none": "这个岗位,眼下没人顶上。", + "sup_xo": "大副坐上炮位,火力压制!", + "sys_continue_ask": "检测到未完成的巡逻。单击继续,右滑进星港。", + "sys_engine_dmg": "引擎,受损。", + "sys_engine_off": "引擎,离线。", + "sys_help": "巡航中,上滑巡检全舰;危机中,左右滑听选项,单击下令。下滑菜单,双击重新听。", + "sys_menu": "菜单。单击切换,双击确认。", + "sys_menu_help": "重新听帮助。", + "sys_menu_restart": "放弃本次巡逻。", + "sys_menu_resume": "回到舰桥。", + "sys_menu_save": "保存并回大厅。", + "sys_new_patrol": "新巡逻,星环号启航。", + "sys_saved": "进度已保存。", + "sys_scan_dmg": "扫描,受损。", + "sys_scan_off": "扫描,离线。", + "sys_shield_dmg": "护盾,受损。", + "sys_shield_off": "护盾,离线。", + "sys_weapon_dmg": "武器,受损。", + "sys_weapon_off": "武器,离线。", + "trap_hint": "求救码后面,有引擎声,多留心。", + "tut_after": "就是这样:听声,辨型,下令。", + "tut_aid": "驰援靠扫描。我们的扫描,稳得很。", + "tut_all_ok": "四个音都稳,全舰正常。", + "tut_crisis": "有情况。听签名音,辨认类型。", + "tut_d0": "先试巡检。向上滑,听全舰状态。", + "tut_decide": "左右滑听选项,单击下令。", + "tut_done": "教学完了。舰长,航线交给你。", + "tut_loyal": "船员的心分三档:离心、平常、信赖。上滑巡检听得到。", + "tut_skip": "已跳过教学。上滑巡检,危机时左右滑听选项。", + "upg_aegis": "应急护盾,每段首次受创减一。功勋七十。", + "upg_armor1": "加装装甲,舰体上限加一。功勋四十。", + "upg_armor2": "重型装甲,舰体上限再加一。功勋六十。", + "upg_buy": "改装完成。", + "upg_done": "这项已改装到位。", + "upg_harvest": "采集协议,每段多一份资源。功勋三十。", + "upg_spare": "备用零件,出发自带一批物资。功勋二十。", + "upg_vet": "老兵船组,开局全员忠诚加一。功勋五十。", + "xo_aid": "驰援是应该的,星环号不是过路人。", + "xo_fight": "舰长,交给我,炮位就绪!", + "xo_uneasy": "又是一路躲。舰长,弟兄们想打。", + "xo_win": "打得漂亮,这条航线够他们传一阵子。" + }, + "cipher": { + "b_chief": "四封电文,一封都不许漏。你的耳朵,是处里最值钱的东西。", + "b_goal": "今晚频道里有四封密电。每一个字,都要过你的耳朵。", + "b_open": "民国二十九年,江城。电讯处的夜班,从零点的电波声开始。", + "b_rule": "北风问候你。规矩就一条:听不清,就再听一遍。", + "book_0": "密码本,一页都不剩了。", + "book_1": "密码本,只剩最后一页。", + "book_2": "密码本,还剩两页。", + "book_3": "密码本,还剩三页。", + "cand_bay": "货船。", + "cand_day": "客车。", + "cand_hand": "今夜交接。", + "cand_land": "地点变更。", + "cand_ray": "巡逻艇。", + "cand_sand": "明晨交接。", + "cand_say": "约谈。", + "cand_sly": "内部排查。", + "cand_spy": "内线确认。", + "cand_tap": "窃听令。", + "cand_tip": "线人费。", + "cand_top": "黑名单。", + "cf_confirm": "就这个词?再单击,定下来。", + "d9_caught_e": "信号被咬住了。别回头,走水路。快。", + "d9_send": "北风,北风。处置令,今夜三时。撤。", + "d9_send_e": "收到了。你的手法,我听了一整晚。快走。", + "d9_sleep": "机关上了。雨声里,只剩挂钟。", + "d9_sleepe": "天亮之前,还有两个钟头。守住。", + "dv1_ask": "密码本第一页。三个词,哪个是它?", + "dv1_right": "货船,译对了。药品,装在货船的底舱。", + "dv1_teach": "电文进来了。先双击,把它重新听一遍。", + "dv1_teach2": "左右滑,听密码本上的候选词。单击,选定一个。", + "dv1_wrong": "不对。听清楚:B,一长,三短。", + "dv2_ask": "密码本第二页。三个词,选一个。", + "dv3_ask": "密码本第三页。三个词,选一个。", + "dv4_ask": "密码本第四页。三个词,选一个。", + "e1_a": "电波追不上我了。码头的灯,一盏一盏地灭。", + "e1_b": "新的密码本,在城外渡口等我。黎明,比想象中安静。", + "e2_a": "交了班,一切照旧。没人知道今晚频道里发生过什么。", + "e2_b": "只是北风的呼叫,到天亮也没人接。下一次,我会接吗。", + "e3_a": "我把警报拍了三遍。门开的时候,挂钟正好敲三点。", + "e3_b": "审讯室的灯,也很亮。可码头那边,一个人都没少。", + "e4_a": "两点五十九分,脚步停在门口。我把最后一页密码,塞进了炉子。", + "e4_b": "耳机还挂着。里面有一封电文,永远译不完了。", + "end_c1": "这是你在电波里挣下的第一个结局。", + "end_c2": "这是你在电波里挣下的第二个结局。", + "end_c3": "这是你在电波里挣下的第三个结局。", + "end_c4": "四个结局,都收进你的密码本了。", + "ep_hand_no": "交接:码头的灯,白亮了一夜。", + "ep_hand_ok": "交接:胶卷上了船,手很稳。", + "ep_lead": "天亮了。北风给你记了最后一笔账——今晚的事,都有了去向。", + "ep_list_no": "名单:天亮时,多了一个红圈。", + "ep_list_ok": "名单:码头连夜搬了家。卷宗里,少了一个人。", + "ep_med_no": "药品:没人接住那三箱药。船,白白过了江。", + "ep_med_ok": "药品:货船丑时靠岸,三箱药,一箱不少。", + "ep_spy_no": "处置令:差的那三个字母,差了一整条命。", + "ep_spy_ok": "处置令:你译对了它。北风,撤在你前头。", + "exp_calm": "这一晚,还没人看你第二眼。", + "exp_hot": "门外,好像有人换了岗。", + "exp_low": "处长端着茶,多看了你一眼。", + "exp_mid": "走廊里的脚步声,慢了下来。", + "g9_in": "频道要收了。最后一件事,是你自己。", + "g9_knot": "三年前,我译错了一封电。那之后,我再没见过我的上线。", + "gd_again": "还在吗?单击继续。", + "gd_brief": "单击继续值机。要选词时,向左或向右滑。", + "gd_continue": "单击屏幕,继续。", + "gd_invalid": "这个手势,值机室里用不上。", + "gd_prog1": "光切词没有用。双击,先听电文。", + "gd_prog2": "别急。停下来,把电文听完整。", + "gd_tune1": "电文在等。左右滑,听候选词。", + "gd_tune2": "双击,把电文再听一遍。再双击,会放慢。", + "hint_t1": "我教你一页:第一个字母,是 B。一长,三短。", + "hint_t2": "翻到这页:第二个字母,是 O。三长。", + "hint_t3": "翻到这页:第一个字母,是 H。四短。", + "hint_t4": "翻到这页:第二个字母,是 P。短,两长,短。", + "m2_chief": "嗯,译得很全。去吧。", + "m4_chief_a": "值机员,今晚的频道,很热闹啊。", + "m4_chief_b": "你的耳朵最好。听见什么,记得……要报。", + "m4_chief_c": "行。去睡吧,明天还有明天的事。", + "n1": "零点半。挂钟走了半圈,雨没有停。", + "n2": "一点整。处长的灯,还亮着。", + "n3": "一点三刻。雨小了,频道里很静。", + "p2": "药品船,丑时过江。向左滑,把船期报给北风。向右滑,压进值机日志。", + "p4_blind": "一封通报。向左滑,压进抽屉,谁的耳朵也别装。向右滑,按流程呈报处长。", + "p4_known": "名单上有码头。向左滑,暗号示警,让他连夜搬家。向右滑,按流程呈报处长。", + "p6": "交接在你手里。向左滑,亲自去码头跑一趟。向右滑,留书暗号,托给下一班。", + "p8_blind": "收台之前。向左滑,回一封例行电文,搅一搅水。向右滑,什么都不做。", + "p8_known": "三点之前。向左滑,拍一封假电,说北风昨夜已撤。向右滑,手离开放键器,装傻。", + "p9_blind": "北风在等答复。向左滑,开机,把今晚发出去。向右滑,例行收台。", + "p9_known": "收网之前。向左滑,开机,发最后一电。向右滑,关机,装睡到天亮。", + "prog_t1": "现在是今晚第一封电文。", + "prog_t2": "现在是第二封,内部通报。", + "prog_t3": "现在是第三封,交接电文。", + "prog_t4": "第四封,最后一封。", + "r1a_e": "收到。江上有人等你。第一封,做得稳。", + "r1a_send": "北风,北风。货船,丑时过江,接住。", + "r1b_e": "日志下面压着的,是三箱药。船,不会等你。", + "r1b_hold": "先压一压。这一船的事,得看清楚再说。", + "r2a_act": "有的字,不能落进卷宗。", + "r2a_e": "这一页,从今天起,不存在了。", + "r2b_act": "通报誊清,呈处长。", + "r2b_e": "名单进了卷宗。码头,自己多保重。", + "r3a_e": "值班室空了一刻钟。值机日志,停了一行。", + "r3a_go": "口令我背得出。今夜,我亲自去。", + "r3b_act": "暗号夹进交接簿,让雨替我跑这一趟。", + "r3b_e_no": "交接的袋子,在码头放到了天亮。", + "r3b_e_ok": "交接赶上了。袋子,连夜上了船。", + "r4a_e": "假电出了门。对家的耳朵,听得出换人了吗。", + "r4a_feed": "戴上手键。这一封,借快手七的手法。", + "r4b_act": "手,离开放键器。我只是个值机的。", + "r4b_e": "有时,什么都不做,就是做了。", + "rev_hand": "今夜交接。丑时,老码头。", + "rev_land": "地点变更。等下一封。", + "rev_sand": "明晨交接。天亮再说。", + "rev_say": "明早九时,约谈相关人员。", + "rev_sly": "即日起,排查站内三人。", + "rev_spy": "内线确认,今夜三时收网。代号,耳机。", + "rev_tap": "窃听令。今夜,有人要装耳朵。", + "rev_tip": "线人费。月底之前,有人要收钱。", + "rev_top": "黑名单。头一个代号,叫码头。", + "rx1_in": "第一封。江上船队的调度,拍得很稳。", + "rx2_in": "第二封。手法很急,是内部通报。", + "rx3_in": "第三封。很短,手法有点抖。", + "rx4_in": "第四封。最后一个手法,你听过——快手七。", + "sys_continue_ask": "检测到你的值机记录。单击继续上次,右滑开始新的夜班。", + "sys_help": "单击选定,双击重新听电文。上滑听状态,下滑开菜单。选择时,左右滑。", + "sys_menu": "菜单。单击切换选项,双击确认。", + "sys_menu_book": "翻密码本,换一个字母。", + "sys_menu_lobby": "保存并回大厅。", + "sys_menu_restart": "重新开始今晚。", + "sys_menu_resume": "回到电波里。", + "sys_new_night": "新的夜班,开始了。", + "sys_settings": "音色、语速、背景音乐,请回大厅修改。", + "sys_skip": "想跳过这句,单击就行。" }, "detective": { - "cf_confirm": "就这句?空格,定下来。", - "cf_pick_line": "左右方向键,一句一句听。", - "fin_pre": "证据在手,就此结案?空格,定下来;方向键,继续查。", - "fin_who_confirm": "就指认这位?空格,定下来。", - "gd_board": "还在证词板。左右方向键,换卷宗。", - "gd_board_cf": "都听过了。按住空格,去指证。", - "gd_cf": "还在选证词。左右方向键,空格确认。", - "recap_cf": "卷宗都在耳朵里了。挑一句你不信的,按住空格指证。", - "settle_hook": "同一场雨里,还有别的案子。按空格,接新案。", - "sys_help": "方向键换卷宗,空格听取,回车重新听。按住空格指证,上键状态,下键菜单。", - "tut_confront": "按住空格,进入指证。", - "tut_d0": "先熟悉证词板。左右方向键,换卷宗。", - "tut_listen": "空格,听取当前卷宗。", - "tut_replay": "回车,重新听这一句。" + "acc_ge": "我守了一夜门!温太太来借热水,她能作证!", + "acc_shun": "我宿在城南刘掌柜家,他全家都能作证!", + "acc_wen": "我这把年纪翻墙?先问问那墙答不答应!", + "acc_zhou": "我十点就到家了!我家婆娘能作证!", + "b_hint_c1": "试试指证:小顺说熄了灯,温太太说灯还亮着。", + "b_hint_c2": "试试指证:小顺说铜秤卖了,现场铜秤还在。", + "b_shun_1": "我走的时候,顺手熄了店堂的灯。", + "b_shun_2": "钥匙,师父贴身带着,从不离身。", + "b_shun_3": "那伤,八成是柴房劈柴砸的。铜秤早卖给收废品的了。", + "b_shun_4": "库房的货,我一件都没碰过。", + "b_shun_break_1": "匣子是我送的,可我半路折回来了……", + "b_shun_break_2": "我把棉袄反穿,弓着背,葛大爷没认出我。", + "b_shun_break_3": "库房的货,我拿过三件换了钱。他说要对账……秤砣下去的时候,他看着我。", + "b_shun_react_1": "灯?我、我走的时候明明熄了……", + "b_shun_react_2": "别问了……别问了……", + "b_zhou_1": "我对完账就回家了,夜里雨大,路上没停。", + "b_zhou_2": "钥匙?平时就挂在柴房铜钩上,十年了。", + "b_zhou_3": "柴房我常去,没什么不对劲的。", + "cf_confirm": "就这句?单击,定下来。", + "cf_diff": "这两句,说的不是一件事。", + "cf_hit": "对不上!矛盾成立,记入疑点。", + "cf_pick_line": "左右滑,一句一句听。", + "cf_same": "这两句说得一致,不矛盾。", + "cf_second": "再选与它矛盾的那份证词。", + "cf_self": "同一句证词,和自己比不出矛盾。", + "cf_start": "指证矛盾。先选第一份证词。左右滑换,单击确认。", + "fin_ask_motive": "第三问:动机是什么?", + "fin_ask_weapon": "第二问:凶器是什么?", + "fin_clear": "不在场证明成立。证据放人,回到证词板。", + "fin_mv_right": "对。库里短的东西,就是引线。", + "fin_mv_wrong": "不对。账上短的东西,才是引线。记下了。", + "fin_pre": "证据在手,就此结案?单击,定下来;滑走,继续查。", + "fin_right": "证据链闭合。周先生,你还有什么话说?", + "fin_right_b": "证据链闭合。小顺,你还有什么话说?", + "fin_start": "结案陈词。先指认真凶:四位证人,选一个。", + "fin_who_confirm": "就指认这位?单击,定下来。", + "fin_wp_right": "对。创口的铜屑,不见了的秤砣,都指向它。", + "fin_wp_wrong": "不对。铜屑不答应。记下了。", + "fo_1": "验尸报告,念给你听。", + "fo_2": "死亡时间,昨夜十点到十点半。", + "fo_3": "后脑单次钝器伤,一击毙命。创口嵌有铜屑,凶器是铜器。", + "fo_4": "死者双手干净,没有搏斗痕迹。", + "fo_5": "鞋底是干的。当夜,死者没出过后门。", + "gd_board": "还在证词板。左右滑,换卷宗。", + "gd_board_cf": "都听过了。按住屏幕,去指证。", + "gd_cf": "还在选证词。左右滑,单击确认。", + "gd_fin": "在想?左右滑选,单击定。", + "gd_invalid": "这个操作,这里用不上。", + "hint_a": "探长,还没听的卷宗,先过一遍耳朵。", + "hint_b": "探长,证词里有对不上的地方,逐句比对。", + "hint_c1": "试试指证:周先生说熄了灯,温太太说灯还亮着。", + "hint_c2": "试试指证:周先生说铜秤卖了,现场铜秤还在。", + "hint_fin": "疑点齐了。去结案陈词。", + "intro_1": "雨下了一整夜。清晨,聚宝斋后院,古董商沈万川死了。", + "intro_2": "你是专案组探长。这桩案子,归你。", + "intro_3": "卷宗六份:四位证人的证词,现场勘验,法医报告。", + "intro_w3": "周先生,管了十年的账,见人三分笑。", + "item_case": "结案陈词。", + "item_fore": "法医报告。", + "item_scene": "现场勘验。", + "item_w1": "门卫老葛的证词。", + "item_w2": "学徒小顺的证词。", + "item_w3": "账房周先生的证词。", + "item_w4": "房东温太太的证词。", + "item_who_w1": "门卫老葛。", + "item_who_w2": "学徒小顺。", + "item_who_w3": "账房周先生。", + "item_who_w4": "房东温太太。", + "mv_1": "监守自盗。", + "mv_2": "寻仇泄愤。", + "mv_3": "劫财入户。", + "rate_a": "干净利落的结案。", + "rate_b": "案子结了,卷宗上有疏漏。", + "rate_c": "案子是结了,卷宗上补丁不少。", + "rate_s": "教科书结案。四处疑点,一击即中。", + "recap_cf": "卷宗都在耳朵里了。挑一句你不信的,按住指证。", + "recap_go": "接着查。", + "sc_0": "你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。", + "sc_1": "柴房门口,沈万川面朝下倒着。后脑一处伤,现场没有凶器。", + "sc_2": "后门门闩完好,是死者自己开的门。生人叫不开这扇门。", + "sc_3": "泥地上只有进来的脚印,没有出去的。墙根的花盆,翻了一个。", + "sc_4": "库房铜秤立在架上,秤砣不见了。", + "sc_5": "柴房墙上,挂钥匙的铜钩,空着。", + "settings_hint": "音色、语速、背景音乐,请回大厅修改。", + "settle_hook": "同一场雨里,还有别的案子。单击,接新案。", + "settle_open": "案件归档。雨,停了。", + "st_asked_0": "六份卷宗,一份都没听。", + "st_asked_1": "已听一份,还有五份。", + "st_asked_2": "已听两份,还有四份。", + "st_asked_3": "已听三份,还有三份。", + "st_asked_4": "已听四份,还有两份。", + "st_asked_5": "已听五份,还有一份。", + "st_asked_6": "六份都听完了。", + "st_doubt_0": "疑点,还没有。", + "st_doubt_1": "疑点,一处。", + "st_doubt_2": "疑点,两处。", + "st_doubt_3": "疑点,三处。", + "st_doubt_4": "疑点,四处,齐了。", + "st_miss_0": "指证,一次没错。", + "st_miss_1": "指证,错过一两回。", + "st_miss_2": "指证,错了不少。", + "st_wrong": "错指一回,记档。", + "sys_continue_ask": "检测到未结的案子。单击继续,右滑换一桩新案。", + "sys_help": "左右滑换卷宗,单击听取,双击重新听。长按指证,上滑状态,下滑菜单。", + "sys_menu": "菜单。单击切换,双击确认。", + "sys_menu_cf": "去指证。", + "sys_menu_help": "重新听帮助。", + "sys_menu_restart": "重新查这桩案子。", + "sys_menu_resume": "回到证词板。", + "sys_menu_save": "保存并回大厅。", + "sys_new_case": "新案开卷。", + "sys_saved": "进度已保存。", + "tut_cf_ok": "指证就是这样。练习不算数,真矛盾要靠耳朵找。", + "tut_cf_try": "练习一次。选一份证词,单击确认;再选一份,任意一句。", + "tut_confront": "按住屏幕,进入指证。去找两句对不上的证词。", + "tut_d0": "先熟悉证词板。左右滑,换卷宗。", + "tut_done": "教学完了。开始查案。", + "tut_listen": "单击,听取当前卷宗。", + "tut_replay": "双击,重新听这一句。", + "tut_skip": "已跳过教学。左右滑换卷宗,单击听取;按住屏幕,指证矛盾。", + "tut_status": "上滑,随时听进度:问了几份,疑点几处。", + "w1_1": "昨儿夜里雨大,我守着街门,一步没敢挪窝。", + "w1_2": "九点四十,雨点子刚砸下来,小顺打着伞出的街门。", + "w1_3": "十点一刻,一位先生收着黑伞进了后巷。个儿高,微驼背。", + "w1_4": "九点五十,周账房出的街门,跟我说了声,回家。", + "w1_5": "后半夜,温太太还来门房借过一回热水。", + "w1_6": "听说店里账上短了银子,沈老板撂了话,月底清账。", + "w2_1": "夜里,师父打发我去城南,给刘掌柜送匣子。", + "w2_2": "雨太大,刘掌柜留我住的,今早才回店。", + "w2_3": "库房钥匙?师父嫌沉,平日就挂在柴房墙上的铜钩。", + "w2_4": "师父的账,向来只信周先生一个人。", + "w2_5": "后门那闩,生人叫不开。熟人来了,师父才亲自去开。", + "w2_6": "周先生常念叨,账房的活,越到夜里越清静。", + "wen_1": "雨是九点四十下的。我正收晾的衣裳,记得真真的。", + "wen_2": "十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。", + "wen_3": "刚回屋,柴房后墙咯噔一响,有人爬墙!花盆翻了一个。", + "wen_4": "吓得我蒙头半宿没睡着,天亮才敢吱声。", + "wen_5": "店里短银子的事,街坊都有耳闻。上礼拜他还摔了账本。", + "wen_6": "周账房那人,见人三分笑,账算得比谁都精。", + "wp_1": "松木劈柴。", + "wp_2": "铜秤砣。", + "wp_3": "铁门闩。", + "wp_4": "青瓷花盆。", + "z_1": "我七点进店上夜账。九点五十对完,锁了前门回家。", + "z_2": "临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。", + "z_3": "库房钥匙?沈老板贴身带着,从不离身。", + "z_4": "那伤,是松木劈柴砸的。铜秤?上个月卖给收废品的了。", + "z_5": "我到家倒头就睡,夜里的事,一概不知。", + "z_6": "你们要是不信,去问我家婆娘。", + "z_break_1": "别念了……我说。库房短的三件货,是我抵了赌债。", + "z_break_2": "他说月底清账,要报官。我求他,他不肯。", + "z_break_3": "我只想把钥匙放回去,把被盗做真。抡起秤砣的时候,他认出了我。", + "z_react_1": "灯?……许是我记岔了。人上了岁数,记性不济。", + "z_react_2": "钥匙的事……他、他有时候,也贴身带着的……", + "z_react_3": "秤!秤的事,你们别再问了……", + "z_react_4": "……随你们怎么问。我要回去了。", + "z_react_w": "铜器?……我那是顺口猜的。凶器的事,我怎么会知道。" }, "dungeon": { - "die_adv_1": "下次,前摇声响时就按回车。", - "die_adv_2": "打不过,就按住空格逃跑。", - "gd_pulse": "按空格发脉冲,听听四周。", - "gd_turn": "轮到你了。按空格挥击。", - "help_battle": "敌人前摇声响时按回车格挡,按空格挥击。打不过就按住空格逃跑。", - "help_explore": "按空格发脉冲,按住空格前进,左右方向键转身。按回车再听,上方向键查状态,下方向键开菜单。", - "settle_again": "按空格,再探一次。", - "sys_continue_ask": "检测到探窟记录。按空格继续,按右方向键重新开始。", - "sys_menu": "菜单。按空格切换,按回车确认。", - "tut_attack": "现在按空格,挥拳打它。", - "tut_d0": "先学会用耳朵看。按空格,发出声波脉冲。", - "tut_flee_hold": "想逃跑,按住空格别松手。", - "tut_menu": "按下方向键,打开菜单。", - "tut_parry": "听到它的动静,按回车格挡。", - "tut_replay": "按回车,再发一次脉冲,不要钱。", - "tut_skip": "已跳过教学。按空格发脉冲,先听听四周。", - "tut_stairs_on": "楼梯就在脚下。按空格,下潜。", - "tut_status": "按上方向键,随时听自己的状态。", - "tut_turn": "按左右方向键,可以转身。", - "tut_walk": "按住空格不放,你就往前走。" + "btl_bat": "盲眼蝠扑了过来!", + "btl_behind": "它在你背后,转身再挡。", + "btl_crab": "窟主石甲蟹,就在你面前。", + "btl_crawler": "绕行者贴上来了,小心背后!", + "btl_flee": "你甩掉了它,被抓了一下。", + "btl_flee_boss": "退路塌了,跑不掉!", + "btl_guard": "石像卫醒了!", + "btl_half_crab": "石甲蟹的甲裂了!", + "btl_half_king": "王怒了,脚步更重了!", + "btl_half_leech": "腐沼蟒暴怒了!", + "btl_kill": "它倒下了。", + "btl_king": "窟中之王,就在深处。", + "btl_leech": "窟主腐沼蟒,挡住了楼梯。", + "btl_loot_1": "战利不多。", + "btl_loot_2": "小有收获。", + "btl_loot_3": "大有收获。", + "btl_lvup": "你的拳脚更利落了。", + "btl_mush": "蘑菇怪拦住了你!", + "btl_no_turn": "它贴着你不放,不用转身。", + "btl_parried": "挡下了大半!", + "btl_rat": "窟鼠窜了出来!", + "btl_spider": "洞蛛落地了!", + "btl_swish": "挥空了,它不在你面前。", + "die_adv_1": "下次,前摇声响时就双击。", + "die_adv_2": "打不过,就按住屏幕逃跑。", + "die_adv_3": "身后有动静,先转身。", + "die_cause_1": "你被小怪拖垮了。", + "die_cause_2": "你没挡住那记重击。", + "die_cause_3": "你背后的偷袭,要了命。", + "die_intro": "你倒下了。", + "evt_armor": "换上更硬的护甲,更抗打了。", + "evt_coin_1": "捡到几枚金币。", + "evt_coin_2": "捡到一小把金币。", + "evt_coin_3": "捡到一大袋金币。", + "evt_descend": "你顺着楼梯,往下潜。", + "evt_potion": "一瓶药水,收进腰带。", + "evt_potion_full": "腰带满了,药水留在原地。", + "evt_stairs_lock": "楼梯被大东西堵住了,先赢它。", + "evt_weapon": "捡到更快的短刃,出手更狠了。", + "gd_invalid": "这个操作在这里用不上。", + "gd_pulse": "单击脉冲,听听四周。", + "gd_turn": "轮到你了。单击挥击。", + "gold_some": "带回来一点,不多。", + "help_battle": "敌人前摇声响时双击格挡,单击挥击。打不过就按住屏幕逃跑。", + "help_explore": "单击脉冲,按住前进,左右滑转身。双击再听,上滑状态,下滑菜单。", + "intro_1": "你在黑暗中醒来。这里是回声地窟。", + "intro_2": "伸手不见五指,声音就是你的眼睛。", + "meta_gold_1": "这趟没带回什么。", + "meta_gold_2": "这趟带回一些金币。", + "meta_gold_3": "这趟满载而归。", + "nav_done": "到了,就是这里。", + "nav_e": "往东。", + "nav_n": "往北。", + "nav_s": "往南。", + "nav_w": "往西。", + "settings_hint": "音色、语速、背景音乐,请回大厅修改。", + "settle_again": "单击,再探一次。", + "settle_stronger": "下个周目,你会更强。", + "settle_win_1": "你捧起了地窟之心,通关了!", + "settle_win_2": "黑暗的尽头,是光。", + "st_best_1": "你还没到过第三层。", + "st_best_2": "你最远到过中层。", + "st_best_3": "你到过最深层。", + "st_face_e": "你面朝东。", + "st_face_n": "你面朝北。", + "st_face_s": "你面朝南。", + "st_face_w": "你面朝西。", + "st_floor_1": "这是第一层。", + "st_floor_2": "这是第二层。", + "st_floor_3": "这是第三层。", + "st_floor_4": "这是第四层。", + "st_floor_5": "这是第五层。", + "st_floor_6": "这是第六层。", + "st_floor_7": "这是第七层。", + "st_gold_1": "口袋空空。", + "st_gold_2": "有些积蓄。", + "st_gold_3": "收获可观。", + "st_gold_4": "腰包鼓鼓。", + "st_hp_1": "你毫发无损。", + "st_hp_2": "你受了点伤。", + "st_hp_3": "你伤势不轻。", + "st_hp_4": "你命悬一线。", + "st_threat_both": "两边都有动静。", + "st_threat_left": "左边有脚步声。", + "st_threat_none": "附近很安静。", + "st_threat_right": "右边有脚步声。", + "stair_dir_e": "楼梯在东边。", + "stair_dir_n": "楼梯在北边。", + "stair_dir_s": "楼梯在南边。", + "stair_dir_w": "楼梯在西边。", + "stair_hint_a": "找找铁器的回声,那是楼梯。", + "stair_hint_b": "楼梯有大东西守着,先赢它。", + "sys_continue_ask": "检测到探窟记录。单击继续,右滑重新开始。", + "sys_menu": "菜单。单击切换,双击确认。", + "sys_menu_help": "重新听帮助。", + "sys_menu_restart": "重新开始本周目。", + "sys_menu_resume": "返回探索。", + "sys_menu_save": "保存并回大厅。", + "sys_new_run": "新的探窟,开始了。", + "sys_saved": "进度已保存。", + "tut_attack": "现在单击,挥拳打它。", + "tut_d0": "先学会用耳朵看。单击,发出声波脉冲。", + "tut_done": "教学完了。地窟很深,小心走。", + "tut_echo_come": "听,回声回来了。", + "tut_flee_hold": "想逃跑,按住别松手。", + "tut_front_rule": "回声回来越快,墙就越近。", + "tut_kill": "打中了,就是这样。", + "tut_menu": "下滑,打开菜单。", + "tut_mob": "前面有东西!放心,它伤不到你。", + "tut_parry": "听到它的动静,双击格挡。", + "tut_parry_miss": "没挡住也别怕,它伤不到你。", + "tut_parry_ok": "挡住了!", + "tut_replay": "双击,再发一次脉冲,不要钱。", + "tut_side_rule": "两侧的回声,发闷是墙,空旷是通路。", + "tut_skip": "已跳过教学。单击脉冲,先听听四周。", + "tut_stairs": "铁器的回声,就是下潜的楼梯。", + "tut_stairs_on": "楼梯就在脚下。单击,下潜。", + "tut_status": "上滑,随时听自己的状态。", + "tut_turn": "左滑右滑,可以转身。", + "tut_walk": "按住屏幕不放,你就往前走。", + "unlock_blade": "解锁武器,开局带着短刃。", + "unlock_echo": "解锁回声强化,侧向听得更远。", + "unlock_lead": "攒够了新的遗产。", + "unlock_none": "金币还不够,继续攒。", + "unlock_potion": "解锁行囊药,开局自带一瓶。", + "unlock_veil": "解锁护符,每层头一下减半。", + "unlock_vigor": "解锁体魄,起始更强壮。" }, "escape": { - "again": "按空格,再来一次。按下方向键,打开菜单。", - "g1_move": "先活动一下。按任意方向键,走一小步。", - "g2_wall": "这个房间不大,四面都是墙。再按两下方向键,试试碰碰墙。", - "g3_left": "跟着我指的路走。按左方向键。", - "g4_down": "对。再按下方向键。", - "g5_inspect": "听到水声了吗?按一下空格,仔细检查这个房间。", - "g6_doubletap": "钥匙能开锁。按回车,是把物品用出去的用法。现在,按回车试试。", - "g7_goal": "找到能用这把钥匙打开的东西。需要帮助时,在原地按回车。", - "guide_blunt_down": "按一下下方向键。", - "guide_blunt_left": "按一下左方向键。", - "guide_blunt_right": "按一下右方向键。", - "guide_blunt_up": "按一下上方向键。", - "guide_wrong_down": "不是这个方向。按下方向键。", - "guide_wrong_left": "不是这个方向。按左方向键。", - "guide_wrong_right": "不是这个方向。按右方向键。", - "guide_wrong_up": "不是这个方向。按上方向键。", - "help_ops": "方向键,在房间之间移动。按空格,检查房间,或者重听房间的声音。按回车,使用物品,或者查看背包。", - "inspect_gate_ready": "电子锁的指示灯亮了,发出微弱的绿光。大门已经通电。按回车,打开它,离开这里。", - "nav_down": "按下方向键。", - "nav_left": "按左方向键。", - "nav_right": "按右方向键。", - "nav_up": "按上方向键。", - "reopen_prompt": "按上方向键,重新听一遍引导。按空格,直接开始。", - "skip_hint": "按空格可跳过旁白。", - "start_room": "你站在设施中央的房间里。方向键移动,按空格检查,按回车使用物品。", - "stuck_box_2": "去西北角的电箱房,按回车,把保险丝装进电箱。", - "stuck_cabinet_2": "去东边的铁柜房,按回车,用钥匙打开铁柜。", - "stuck_gate_2": "去东南角的大门,按回车,打开它,离开这里。", - "stuck_key_2": "去西南角的储物间,按空格检查,找到钥匙。", - "use_fail": "这里没有用得上东西的地方。换个房间试试,或者先按空格检查一下周围。" + "again": "单击屏幕,再来一次。下滑,打开菜单。", + "box_fixed": "电箱运转正常,电流的嗡鸣声平稳而持续。", + "empty_1": "房间里空空荡荡,只有你自己的回声。", + "empty_2": "你伸出手,摸到的只有冰冷粗糙的墙壁。", + "empty_3": "除了远处的水滴声,这里什么都没有。", + "escape": "你扳动开关。电机轰鸣,沉重的铁门缓缓升起,刺眼的光线涌了进来。你眯起眼睛,向前迈出了第一步。自由了。你逃出来了。", + "fix_box": "你把保险丝用力按进卡座。火花一闪,嗡鸣声响起——头顶的线路恢复供电了!", + "found_key": "你蹲下身在储物架的角落里摸索,指尖碰到一个冰凉的金属物件——是一把钥匙!钥匙到手了。", + "g0_intro": "黑暗。你在废弃的地下设施里醒来,什么都想不起来。你必须找到出路。", + "g1_done": "很好,你迈出了第一步。", + "g1_move": "先活动一下。朝任意方向滑一下,走一小步。", + "g2_wall": "这个房间不大,四面都是墙。再滑两下,试试碰碰墙。", + "g3_left": "跟着我指的路走。向左滑。", + "g4_down": "对。再向下滑。", + "g5_inspect": "听到水声了吗?单击一下,仔细检查这个房间。", + "g5_key": "你摸到了一把钥匙!", + "g6_done": "对,就是这样。接下来,靠你自己了。", + "g6_doubletap": "钥匙能开锁。双击,是把物品用出去的用法。现在,双击试试。", + "g7_goal": "找到能用这把钥匙打开的东西。需要帮助时,在原地双击。", + "gd_next_fuse": "保险丝到手。接下来,去找电箱。", + "gd_room_d": "下面的房间。", + "gd_room_l": "左面的房间。", + "gd_room_r": "右面的房间。", + "gd_room_u": "上面的房间。", + "guide_blunt_down": "手指贴着屏幕,向下推一下。", + "guide_blunt_left": "手指贴着屏幕,向左推一下。", + "guide_blunt_right": "手指贴着屏幕,向右推一下。", + "guide_blunt_up": "手指贴着屏幕,向上推一下。", + "guide_offpath": "先跟我走。", + "guide_skip": "跳过引导,直接开始自由探索。", + "guide_wrong_down": "不是这个方向。向下滑。", + "guide_wrong_gesture": "不是这个操作。照我说的做。", + "guide_wrong_left": "不是这个方向。向左滑。", + "guide_wrong_right": "不是这个方向。向右滑。", + "guide_wrong_up": "不是这个方向。向上滑。", + "help_ops": "滑动,在房间之间移动。单击,检查房间,或者重听房间的声音。双击,使用物品,或者查看背包。", + "inspect_box_dead": "墙上是一只电箱,箱盖敞开着,里面的保险丝座空空如也。没有电,这里的大门永远打不开。", + "inspect_cabinet_locked": "这个房间里立着一个铁柜,柜门上挂着一把锁。也许,有什么钥匙能打开它。", + "inspect_gate": "面前是一扇沉重的铁门。门边的电子锁一片漆黑,没有任何反应。它需要电力。", + "inspect_gate_ready": "电子锁的指示灯亮了,发出微弱的绿光。大门已经通电。双击,打开它,离开这里。", + "inv_both": "你身上带着一把钥匙和一枚保险丝。", + "inv_empty": "你摸了摸身上,什么也没有。", + "inv_fuse": "你身上带着一枚保险丝。", + "inv_key": "你身上带着一把钥匙。", + "menu_back": "返回游戏。", + "menu_home": "回大厅。", + "menu_open": "菜单。", + "menu_restart": "重新开始。", + "nav_down": "向下滑。", + "nav_left": "向左滑。", + "nav_right": "向右滑。", + "nav_up": "向上滑。", + "reopen_prompt": "上滑,重新听一遍引导。单击,直接开始。", + "replay": "黑暗再次合拢。你回到了中央的房间。这一次,你会更快。", + "room_cabinet": "这个房间里,立着一个铁柜。", + "room_gate": "面前,是一扇沉重的铁门。", + "room_power": "这个房间的墙上,有一只电箱。", + "room_storage": "一间储物间。货架上堆满杂物,角落里传来水滴声。", + "skip_hint": "单击可跳过旁白。", + "start_room": "你站在设施中央的房间里。滑动移动,单击检查,双击使用物品。", + "stuck_ask": "需要帮助吗?", + "stuck_box_1": "保险丝属于电箱。有电流声的地方,就有电箱。", + "stuck_box_2": "去西北角的电箱房,双击,把保险丝装进电箱。", + "stuck_box_3": "跟我说的方向走,去电箱所在的房间。", + "stuck_cabinet_1": "钥匙就在你身上。它能打开某一把锁。", + "stuck_cabinet_2": "去东边的铁柜房,双击,用钥匙打开铁柜。", + "stuck_cabinet_3": "跟我说的方向走,去铁柜所在的房间。", + "stuck_gate_1": "电已经通了。该去找那扇铁门了。", + "stuck_gate_2": "去东南角的大门,双击,打开它,离开这里。", + "stuck_gate_3": "跟我说的方向走,去大门所在的房间。", + "stuck_key_1": "铁锈味最重的地方,值得仔细看看。", + "stuck_key_2": "去西南角的储物间,单击检查,找到钥匙。", + "stuck_key_3": "跟我说的方向走,去西南角的储物间。", + "time_band1": "你逃出来了,用时不到两分钟。了不起!", + "time_band2": "你逃出来了,用时不到五分钟。", + "time_band3": "你逃出来了,用时不到十分钟。", + "time_band4": "你逃出来了,用时超过十分钟。", + "unlock_cabinet": "钥匙插进锁孔,缓缓转动。咔哒一声,柜门开了。柜子深处,躺着一枚保险丝。保险丝到手了。", + "use_fail": "这里没有用得上东西的地方。换个房间试试,或者先单击检查一下周围。", + "wall": "那边是墙,换个方向。" }, "hunt": { - "end_again": "按空格,再猎一局。", - "gd_idle": "听声音的方向,按方向键。", - "help_main": "朝声音的方向按方向键,就是出击。按空格呼喊支援,按回车旋风斩。上方向键状态,下方向键菜单。", - "room_wait": "房间已开好,等同伴到齐。按空格,立即开局。", - "sys_menu": "菜单。按空格切换,按回车确认。", - "tut_attack": "听,有狼在靠近。朝声音的方向,按方向键。", - "tut_callout": "按空格,呼喊支援,队友会来帮你。", - "tut_rule": "野兽会从八个方向围上来。声音在哪边,就按哪边方向键。", - "tut_skill": "按回车,旋风斩,清掉身边一圈。", - "tut_skill_cd": "旋风斩有八秒冷却。冷却中按回车,重新听威胁。", - "tut_status": "按上方向键,听营地状态。按下方向键,打开菜单。" + "breach": "有野兽冲进营地了!", + "breach_heavy": "巨兽撞进营地,损伤很重!", + "danger_low": "营地危险了,一只都不能再漏!", + "end_again": "单击,再猎一局。", + "end_lose": "营地守不住了,撤退!", + "end_rank": "成绩已记入猎手榜。", + "end_win": "天亮了,营地还在。", + "gd_idle": "听声音的方向,滑过去。", + "gd_invalid": "这个操作现在用不上。", + "grade_a": "评级,A。漂亮。", + "grade_b": "评级,B。守得还行。", + "grade_c": "评级,C。险胜。", + "grade_s": "评级,S!完美的围猎。", + "help_main": "朝声音的方向滑,就是出击。单击呼喊支援,双击旋风斩。上滑状态,下滑菜单。", + "hp_band1": "营地固若金汤。", + "hp_band2": "营地受了些损伤。", + "hp_band3": "营地损毁过半。", + "hp_band4": "营地快守不住了。", + "intro_1": "夜幕降临,野兽在山林里游荡。", + "intro_2": "你们是守夜的猎人,营地就在身后。", + "kill_band0": "你还没开张。", + "kill_band1": "你小有斩获。", + "kill_band2": "你战果累累。", + "net_back": "联系恢复了,接着打。", + "net_gone": "回不去那场围猎了,回大厅。", + "net_lost": "与营地断了联系,正在重连。", + "net_to_bot": "有猎人离队,老猎手顶上。", + "npc_yan_breach": "漏了一个,都小心。", + "npc_yan_cover": "这边交给我。", + "npc_yan_greet": "我来了,这边有我。", + "npc_yan_help_ack": "撑住,我来了。", + "npc_yan_help_call": "我这侧吃紧,来个人搭把手!", + "npc_yan_kill": "拿下!", + "npc_yan_skill": "都闪开,看我的!", + "npc_yan_wave": "新一波,稳住。", + "npc_zheng_breach": "哎呀,漏了一个!", + "npc_zheng_cover": "这边我罩着。", + "npc_zheng_greet": "小筝到位,开工啦。", + "npc_zheng_help_ack": "别慌,我来了!", + "npc_zheng_help_call": "这边太多了,谁来帮一下!", + "npc_zheng_kill": "搞定!", + "npc_zheng_skill": "看我清场!", + "npc_zheng_wave": "又来一波,打起精神。", + "npc_zhou_breach": "啧,溜进去一只。", + "npc_zhou_cover": "这边交给我吧。", + "npc_zhou_greet": "老周我守着,放心。", + "npc_zhou_help_ack": "听见了,这就到。", + "npc_zhou_help_call": "我这边压不住了,来人。", + "npc_zhou_kill": "嗯,解决了。", + "npc_zhou_skill": "让让,老骨头活动活动。", + "npc_zhou_wave": "听,又来了。", + "room_start": "狩猎开始,先听声音的方向。", + "room_wait": "房间已开好,等同伴到齐。单击,立即开局。", + "settings_hint": "音色、语速、背景音乐,请回大厅修改。", + "skill_ready": "旋风斩准备好了。", + "st_wave_a": "还在头几波。", + "st_wave_b": "打到中段了。", + "st_wave_c": "最后一波了。", + "sys_menu": "菜单。单击切换,双击确认。", + "sys_menu_help": "重新听帮助。", + "sys_menu_home": "退出房间,回大厅。", + "sys_menu_resume": "回到猎场。", + "team_3": "三名猎人在守。", + "team_4": "四名猎人全在。", + "threat_few": "有野兽贴近了,听方向出手。", + "threat_many": "四周全是动静,快出手!", + "threat_none": "近处暂时没有野兽。", + "tut_attack": "听,有狼在靠近。朝声音的方向,滑一下。", + "tut_breach": "野兽冲进营地,营地就会受损。撑过五波就赢。", + "tut_callout": "单击一下,呼喊支援,队友会来帮你。", + "tut_callout_ok": "听到没,同伴回应你了。", + "tut_done": "教学完了。真正的围猎,现在开始。", + "tut_kill_ok": "好,杀掉了。就是这样。", + "tut_rule": "野兽会从八个方向围上来。声音在哪边,就往哪边滑。", + "tut_skill": "双击,旋风斩,清掉身边一圈。", + "tut_skill_cd": "旋风斩有八秒冷却。冷却中双击,重新听威胁。", + "tut_skip": "已跳过教学,开打。", + "tut_status": "上滑,听营地状态。下滑,打开菜单。", + "wave_band1": "第一波来了,别慌。", + "wave_band2": "第二波,比刚才多。", + "wave_band3": "第三波,有大家伙混在里面。", + "wave_band4": "第四波,更快,更多。", + "wave_band5": "最后一波,全来了!", + "wave_clear": "这一波,守住了。" }, "keeper": { - "gd_again": "还在吗?按空格继续。", - "gd_brief": "按空格,继续值守。要选择时,用左右方向键。", - "gd_continue": "按空格,继续。", - "p1": "他的声音在抖。左箭头,先接住这个人。右箭头,先要他的船位。", - "sys_continue_ask": "检测到你的值守记录。空格继续上次,右箭头开始新的风暴夜。", - "sys_help": "空格继续,回车重新听。上箭头听状态,下箭头开菜单。选择时,左右箭头。", - "sys_menu": "菜单。空格切换选项,回车确认。", - "sys_skip": "想跳过这句,按空格。" + "amo_a": "……有人吗……顺发号……船进水了……", + "amo_b": "白角塔!是你吗?求你,回个话!", + "amo_c": "我爷爷,四十年前也是在这片海没的。他说,白角的灯灭过一下。", + "amo_d": "塔……听得到吗?水,到膝盖了。", + "amo_e": "守塔人……塔里就你一个人?家里人不拦着你干这行?", + "amo_f": "裂了!水进得更快了。塔,告诉我怎么办!", + "amo_g": "……我爷爷,就在那七个人里。难怪他到死,都念着白角的灯。", + "amo_h": "风太大……嗯。那晚的风,一定很大。", + "b_goal": "今夜两艘货轮过境。守住灯,也守住频道。", + "b_open": "白角灯塔,风暴夜。我是今晚的守塔人。", + "b_rain": "浪拍到第七级台阶。雾角两长一短——塔在,我也在。", + "b_rule": "岸台的规矩就一条:风暴夜,灯不能灭。", + "c1_ask": "顺发号,报你的方位,报进水的速度。", + "c1_aske": "他更慌了。人没接住,数字也乱。", + "c1_asko": "方位……仪表进水了,我,我看不清……", + "c1_diary": "暗格里是祖父的日志。缺了最后一页。", + "c1_focus": "先守住这盏灯。旧账,天亮再算。", + "c1_focuse": "灯转得稳。可那句「灭过一下」,留在了你耳朵里。", + "c1_hold": "别慌。我在白角,哪儿也不去。慢慢说。", + "c1_holde": "他喘匀了。先接人,再办事。", + "c1_holdo": "……好,好。你在。我听见了。", + "c1_open": "父亲的钥匙,就在抽屉里。灯座第三级,开了。", + "c1_tune": "频道里有动静。很轻,像隔着整片海。", + "c2_back": "频道又响了。顺发号的引擎,时断时续。", + "c2_crack": "听!他那边,船板裂了!", + "c2_key": "父亲桌上那支手电,尾盖里卷着一页纸。", + "c2_shore": "岸台,记下他的船位。请渔政天亮前到。", + "c2_shoreo": "船位落在图上了。渔政的船,最快也要天亮。", + "c2_song": "跟我念:浪头过,船头抬。浪头退,船头落。", + "c2_songo": "浪头过,船头抬……真的稳了些!这口诀,谁教你的?", + "c3_dark": "你离塔的时候,发条走到了头。灯,灭过一刻钟。过境的货轮,平安。", + "c3_eye": "风眼过了。最后的浪墙,就跟在后面。", + "c3_page": "手电的尾盖旋开了。那页纸,在灯下摊平。", + "c3_wall": "浪墙起来了!就是现在!", + "c4_pass": "家里人?都在大陆。这行当,习惯了。", + "c4_passo": "哦……你也是一个人守夜。我们俩,隔着一道海。", + "c4_true": "我父亲也是守塔人。十二年前风暴夜,他出海救人,没有回来。", + "c4_trueo": "……对不起。难怪今晚,你一直都在。", + "c5_patch": "拿堵漏垫顶住裂缝。人守在电台边,我一直在。", + "c5_patcho": "顶住了!水慢下来了。我不走,守着电台。", + "c5_suit": "穿上救生衣,带上信号灯,站到甲板上去。", + "c5_suito": "穿好了。要是船散了,我就抱着它漂。", + "c6_reade": "四十年,两代人,一条规矩。今晚,轮到你选了。", + "c6_shut": "合上。守塔人的事,守塔人自己扛。", + "c7_go": "机械上满发条,灯能自己转到天亮。等着我。", + "c7_go2": "发条……我只上了半卷。快去,快回。", + "c7_hold": "顺发号,听我的。灯照着的那条道,跟我念,一步一步来。", + "c8_math": "坐标向东两百米。灯光扫过去,看见救生衣了!", + "c8_matho": "塔!你的灯扫到我啦!我在这边!", + "c8_new": "数三个浪头,借着风的角度,钻新缝!", + "c8_newo": "一个,两个,三——过去了!塔,我过来了!", + "c8_old": "走老航道。多绕半里,绕开所有的暗礁。", + "c8_oldo": "老航道……我爷爷念叨过这条道!稳了!", + "c8_song": "他爷爷传下的渔歌……在哪?再唱一遍!", + "c8_songo": "海风那个吹呀——塔!是你吗?我在这儿!", + "c9_found": "他在半路改了主意。天亮时,渔队找到了他。活着,湿透了。", + "c9_land": "顺发号过了礁缝,搁上背风湾的滩。人,站上了岸。", + "c9_return": "接驳艇回来了。两个人,一身水,一盏灯。", + "d9_keep": "那晚风太大,灯出了点故障。别再问了,孩子,回家吧。", + "d9_keepe": "这个话题,沉回了海里。天,亮了。", + "d9_tell_a": "四十年前守塔的,是我爷爷。他离灯去救自己的儿子。灯灭那刻,回澜号……对不住。", + "d9_tell_b": "我只知道,那晚守塔的是我爷爷,灯灭过一下。剩下的,我也不敢说全。", + "d9_telle": "他听完,沉默了很久。天,亮了。", + "e1_a": "天亮了。他在门厅睡熟,那页纸攥在手里。灯,亮到了最后一刻。", + "e1_b": "回澜号的账,翻开了第一页。这座塔,等了四十年。", + "e2_a": "他走的时候,天刚亮。我送到码头,什么也没说。", + "e2_b": "缺页放回灯底。有些东西,再压一代人。灯,还转着。", + "e3_a": "我把知道的,都说了。他望着海,半信半疑地点头。", + "e3_b": "碎片也是真话。剩下的,让海自己讲吧。", + "e4_a": "天亮,各自归位。他回他的港,我守我的灯。", + "e4_b": "隔着一道海,两座塔,谁也没再提那晚。", + "ep_amo_dawn": "阿澈:抱着冷藏柜漂到天亮。打那以后,出海带两台电台。", + "ep_amo_home": "阿澈:那晚之后改跑日班。他说,夜里的海,有守塔人听着。", + "ep_amo_solo": "阿澈:自己把船开上了背风湾。船主骂了船,没骂人。", + "ep_dad": "值班表上,你替十二年前那个班次签了字。老陈,收工了。", + "ep_lamp_dark": "灯塔记录簿:凌晨两点,灯灭一刻钟。那一行,你写得格外用力。", + "ep_lamp_full": "灯塔记录簿:你离塔三刻,灯自己转着。父亲的发条,说中了。", + "ep_lamp_hold": "灯塔记录簿:转灯整夜未停。你一步,也没离开过它。", + "ep_lead": "风停了。岸台给你记一笔——这一晚,后来怎样了。", + "ep_log_kept": "灯下的旧账,又压回了黑暗里。", + "ep_log_told": "灯下的旧账,今夜见了光。", + "ep_shore": "岸台晨报:风暴过境,航道平安。白角灯,正常。", + "g9_in": "风,一层一层退下去。天边,有点灰了。", + "g9_knot": "十二年了。这一晚,我总算替父亲,站完了他的班。", + "gd_again": "还在吗?单击继续。", + "gd_brief": "单击,继续值守。要选择时,向左或向右滑。", + "gd_continue": "单击屏幕,继续。", + "gd_invalid": "这个手势,塔里用不上。", + "gd_prog1": "滑动这里用不上。想想岸台刚说的话。", + "gd_prog2": "别乱。停一停,再听一遍。", + "lull_1": "岸台通报:风加到十级。第一程,过去了。", + "lull_2": "风眼凌晨过境。第二程,到顶了。", + "m6_seal": "那些旧东西,你今晚没碰过。缺页的事,你一无所知。", + "p1": "他的声音在抖。向左滑,先接住这个人。向右滑,先要他的船位。", + "p2": "他提到四十年前。向左滑,去翻灯座下的暗格。向右滑,先专心守灯。", + "p3": "他快撑不住了。向左滑,用守塔人的口诀带他稳船。向右滑,把船位报给岸台。", + "p4": "他问起你的人。向左滑,告诉他真话。向右滑,轻轻带过。", + "p5": "船在漏。向左滑,让他回舱堵漏,守住电台。向右滑,让他穿救生衣,上甲板。", + "p6": "祖父的最后一页。向左滑,今晚就读完它。向右滑,合上,塞回灯底。", + "p7": "浪墙压过来了。向左滑,给灯上满发条,驾接驳艇去接他。向右滑,守着灯,用声音引他过礁。", + "p8_boat": "海上没有灯。向左滑,循着他哼的渔歌找他。向右滑,按推算的坐标,直线搜。", + "p8_reef": "礁缝两道口。向左滑,走老航道,稳但绕远。向右滑,钻新缝,近但冒险。", + "p9a": "他问起四十年前的灯。向左滑,把缺页的事,连根说给他。向右滑,就说,那晚风太大。", + "p9b": "他问起四十年前的灯。你知道的,只有碎片。向左滑,把碎片给他。向右滑,说风太大。", + "prog_m1": "风暴起来了。今晚第一程。", + "prog_m2": "风暴到顶。第二程。", + "prog_m3": "风在退。最后一程。", + "prog_mem_f": "这是回忆:父亲的最后一晚,十二年前。", + "prog_mem_g": "这是回忆:祖父的年代,四十年前。", + "rev_c1": "唱针落下。缺的那一页,自己开了口。", + "rev_c2": "我写下这些,等一个敢看的人。那晚,我的儿子,偷了接驳艇。", + "rev_c3": "我去追他。灯,离了人。半个时辰,回澜号,七个人。", + "rev_c4": "儿子回来了。这页我撕下来,压进灯底。守塔人,不能离灯。", + "rev_c5": "风声回来了。原来那道家规,是这么来的。", + "rev_f1": "唱针又落下了。十二年前,也是这样的风。", + "rev_f2": "白角塔,我是老陈。接驳艇上两个人,都活着。", + "rev_f3": "守塔人听见了求救,就不能装没听见。等我回来。", + "rev_f4": "塔上的机械上满发条,能自己转一夜。给我留着门。", + "rev_f5": "风声回来了。那扇门,留到今天。", + "rev_g1": "唱针落下。四十年前,也是这盏灯下。", + "rev_g2": "手稳住。灯罩擦到第三遍,才算干净。", + "rev_g3": "记住,灯下压着的东西,比灯重。守塔人,替它守一辈子。", + "rev_g4": "风声回来了。爷爷,我听见了。", + "rev_teach": "听到唱针落下、风声退后,是回忆。风声回来,就是现在。", + "sys_continue_ask": "检测到你的值守记录。单击继续上次,右滑开始新的风暴夜。", + "sys_help": "单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。", + "sys_menu": "菜单。单击切换选项,双击确认。", + "sys_menu_lobby": "保存并回大厅。", + "sys_menu_restart": "重新开始今夜。", + "sys_menu_resume": "回到值守。", + "sys_new_night": "新的风暴夜,开始了。", + "sys_settings": "音色、语速、背景音乐,请回大厅修改。", + "sys_skip": "想跳过这句,单击就行。", + "tr_deep": "他把命,交给了你的声音。", + "tr_half": "他信一半,疑一半。", + "tr_thin": "今晚,他只信自己的手。", + "tru_full": "三代人的账,今夜见底了。", + "tru_one": "灯下的旧账,你翻开了一角。", + "tru_two": "祖父和父亲的事,你都翻到了。", + "tru_zero": "旧账压在灯底,你一页没翻。" }, "radio": { - "gd_again": "还在吗?按空格继续。", - "gd_brief": "按空格继续节目。请选择的时候,按左或右方向键。", - "gd_continue": "按空格,继续。", - "gd_ring1": "热线在闪。按空格,接听。", - "gd_ring2": "灯还亮着,听众在等。按空格,接听。", - "p1": "老人在发抖。按左方向键,陪他哼那首老歌。按右方向键,冷静问他路口的路牌。", - "p2": "雨声更密了。按左方向键,留在原地陪他等巡逻队。按右方向键,转接派出所。", - "p3": "按左方向键,告诉她这趟车值得上。按右方向键,把选择还给她。", - "p4": "按左方向键,唱一段摇篮曲哄她睡。按右方向键,轻轻问她怎么了。", - "p5": "孩子的声音在抖。按左方向键,告诉她这不是她的错。按右方向键,答应她明天都会好。", - "p6": "摔门声你听见了。按左方向键,替孩子给她带句话。按右方向键,劝她回家把话说开。", - "p7": "她的呼吸平了。按左方向键,留在直播里,让全城等这个门铃。按右方向键,换垫乐,私下陪她说完。", - "p8": "方向盘比话筒危险。按左方向键,陪他聊聊闺女。按右方向键,让他立刻进服务区。", - "p9": "留言机红灯在闪,是老主播三年前没播完的那句晚安。按左方向键,替他播出去。按右方向键,照常收播。", - "sys_continue_ask": "检测到你的夜班记录。按空格继续上次,按右方向键开始新的夜晚。", - "sys_help": "按空格继续,按回车重新听。按上方向键听状态,按下方向键开菜单。请选择时,左右方向键。", - "sys_menu": "菜单。按空格切换选项,按回车确认。", - "sys_skip": "想跳过这句,按空格就行。" + "b_goal": "今晚五通电话。说什么话,由你决定。", + "b_open": "午夜零点,红灯亮起。欢迎回到《今夜不眠》。", + "b_rain": "雨下了一整晚。热线灯,马上就要亮了。", + "b_rule": "台里的规矩就一条:先接住人,再接电话。", + "d9_avoid": "各位,今晚到这里。明晚零点,今夜不眠,不见不散。", + "d9_avoide": "留言机的红灯,又多亮了一夜。", + "d9_face": "师父,三年了。这句晚安,我替您播。各位,晚安。", + "d9_facee": "带子里其实只有电流声。但空着的那一秒,你说满了。", + "e1_a": "天亮了,热线灯还亮着。你们的晚安,是这座城市的心跳。", + "e1_b": "这把话筒,我总算接得住了。明晚零点,接着不眠。", + "e2_a": "今晚的热线烧得发烫。全城的失眠者,都被接住了。", + "e2_b": "只是路过留言机的时候,你还是没敢看它。红灯灭得很慢。", + "e3_a": "口碑掉了一夜。可那句迟到三年的晚安,今晚说出去了。", + "e3_b": "一个人的频道,也是频道。师父,收到了吗?", + "e4_a": "今夜不眠,静音收播。有的夜班,谁也接不住谁。", + "e4_b": "留言机还在闪。你没看它,它也没怪你。明晚再说吧。", + "ep_deer_no": "小鹿退了票。检票口的灯,记得那趟没上成的车。", + "ep_deer_ok": "小鹿上车了。她妈后来打电话说,那声妈,比奖杯值钱。", + "ep_han_no": "老韩在服务区睡了一觉。学费齐了,那首歌没放成。", + "ep_han_ok": "老韩到家了。后视镜上,多了朵小红花。", + "ep_kid_no": "糖糖后来又打来过一次。还是那句:楼下在吵。", + "ep_kid_ok": "糖糖家的门,这个月没再摔过。她说这是主播魔法。", + "ep_lead": "收播了。导播间替你记了一笔账——今晚的人都怎样了。", + "ep_wife_no": "陈姐在公车站坐到了末班车。那通电话,成了没寄出的信。", + "ep_wife_ok": "陈姐家切了蛋糕。那句「回来吧」,是我这晚听过最好的声音。", + "ep_zhou_no": "老周在便利店屋檐下坐到天亮。没出事,也没人听见他的歌。", + "ep_zhou_ok": "老周:孙子替他买了老花镜。回信说,谢谢那首歌。", + "g9_in": "五线收工。垫乐起——零点档,还剩最后一段。", + "gd_again": "还在吗?单击继续。", + "gd_brief": "单击继续节目。请选择的时候,向左或向右滑。", + "gd_continue": "单击屏幕,继续。", + "gd_invalid": "这个手势,直播间里用不上。", + "gd_ring1": "热线在闪。单击,接听。", + "gd_ring2": "灯还亮着,听众在等。单击,接听。", + "h1_a": "主播,别挂。陪我说话,我的眼皮,沉得很。", + "h1_b": "跑完这趟,闺女的学费就齐了。雨刷都快刮不动了。", + "h1_danger": "车道偏了——听!", + "h1_dango": "嘶——好险!前车急刹,我擦着护栏过去了。彻底醒了!", + "h1_echo": "对了。头通电话那位大爷,就是这片被巡逻队找到的。这城市的夜,是接着的。", + "h1_in": "五线来电。引擎声没停过——他在开车!", + "h1_stop": "听我的,前面三公里有服务区。学费急,命更急。", + "h1_stope": "他下了高速。单子黄了,人齐了。", + "h1_stopo": "行,听你的。进了服务区,我给你们放首歌听。", + "h1_talk": "说说她。开学第一天,她跟你说的头一句话,是什么?", + "h1_talke": "吓醒的,也算醒。这一趟,聊到家。", + "h1_talko": "她说,爸,我在学校给你赚了朵小红花。哈哈,哈哈……", + "k1_a": "喂……有人吗?我睡不着。", + "k1_ask": "睡不着的时候,心里是不是装着事?说给我听听。", + "k1_asko": "爸爸妈妈摔门了。是不是……我做错了什么呀。", + "k1_b": "家里灯关了。可是楼下,一直有声音。", + "k1_in": "三线来电。听呼吸,是个小孩。", + "k1_lie": "睡吧。明天一睁眼,什么都会好起来的。", + "k1_liee": "你许了个兑不了的现。孩子睡了,谎留下了。", + "k1_lieo": "真的吗?拉钩。晚安……", + "k1_lull": "闭上眼睛。风把云朵盖在被子上,月亮替你值夜班。", + "k1_lulle": "睡着了。可你没听见,她在怕什么。", + "k1_lullo": "月亮也睡了……那我也睡。", + "k1_truth": "糖糖,记住,大人的事,不是小孩的错。一个字都不是。", + "k1_truthe": "蛋糕。记下来——四线的来电,可能跟这个家有关。", + "k1_trutho": "嗯……那我睡了。他们明天,会一起给我切蛋糕吗?", + "l1_a": "主播,退票窗口十一点半就关了。我站这儿半小时了。", + "l1_b": "票是回去看我妈的。可我试镜又黄了,两手空空……", + "l1_free": "退不退,都是你的自由。夜还长,慢慢想。", + "l1_freee": "她走了。没上车,也没退票。年轻人的夜,长了点。", + "l1_freeo": "嗯……我再想想。窗口要关了,我先过去了。", + "l1_go": "你妈等的不是奖杯,是你进门喊的那声妈。", + "l1_goe": "二线收工。这句话,值一个头条。", + "l1_goo": "呜……嗯。不退了,我现在就去检票。谢谢您。", + "l1_in": "二线来电。姑娘,声音很轻,像怕吵到谁。", + "p1": "老人在发抖。向左滑,陪他哼那首老歌。向右滑,冷静问他路口的路牌。", + "p2": "雨声更密了。向左滑,留在原地陪他等巡逻队。向右滑,转接派出所。", + "p3": "向左滑,告诉她这趟车值得上。向右滑,把选择还给她。", + "p4": "向左滑,唱一段摇篮曲哄她睡。向右滑,轻轻问她怎么了。", + "p5": "孩子的声音在抖。向左滑,告诉她这不是她的错。向右滑,答应她明天都会好。", + "p6": "摔门声你听见了。向左滑,替孩子给她带句话。向右滑,劝她回家把话说开。", + "p7": "她的呼吸平了。向左滑,留在直播里,让全城等这个门铃。向右滑,换垫乐,私下陪她说完。", + "p8": "方向盘比话筒危险。向左滑,陪他聊聊闺女。向右滑,让他立刻进服务区。", + "p9": "留言机红灯在闪,是老主播三年前没播完的那句晚安。向左滑,替他播出去。向右滑,照常收播。", + "prog_c1": "现在是今晚第一通电话。", + "prog_c2": "现在是今晚第二通电话。", + "prog_c3": "现在是今晚第三通电话。", + "prog_c4": "现在是今晚第四通电话。", + "prog_c5": "现在是今晚第五通电话。", + "rep_high": "今晚的口碑,在听众里立住了。", + "rep_low": "今晚的口碑,还没立起来。", + "rep_mid": "今晚的口碑,不好不坏。", + "sys_continue_ask": "检测到你的夜班记录。单击继续上次,右滑开始新的夜晚。", + "sys_help": "单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。", + "sys_menu": "菜单。单击切换选项,双击确认。", + "sys_menu_lobby": "保存并回大厅。", + "sys_menu_restart": "重新开始今晚。", + "sys_menu_resume": "回到直播。", + "sys_new_night": "新的夜晚,开始了。", + "sys_saved": "进度已保存。", + "sys_settings": "音色、语速、背景音乐,请回大厅修改。", + "sys_skip": "想跳过这句,单击就行。", + "w1_a": "主播,我就想找个人说说。我家那口子,今晚要出远门的活儿。", + "w1_air": "陈姐,别挂。让他接电话——全城都在听。", + "w1_aire": "电话那头,传来跑步声。今晚的高光时刻。", + "w1_airo": "喂!回来吧!蛋糕要化了,孩子等着呢!", + "w1_b": "明天孩子生日!蛋糕都订好了,他人要今晚走!", + "w1_home": "吵架隔着电话吵不赢。回家吧,蛋糕别放到坏了。", + "w1_homee": "她往回走了。成不成,看他们自己的了。", + "w1_homeo": "嗯……我这就往回走。谢谢你,听我瞎嚷嚷。", + "w1_in": "四线来电。户外风声大,是位大姐。", + "w1_priv": "这里只有我们俩了。想说就说,想哭就哭。", + "w1_prive": "灯牌是你亲手关的,故事还是完整的。稳。", + "w1_privq": "呜……其实他订完蛋糕就跟我道歉了。是我,把门摔得太响。", + "w1_say": "四十分钟前,有个孩子问我们:爸妈摔门,是不是她的错。", + "w1_say2": "今天有位小朋友,还在等爸妈回家切蛋糕。", + "w1_say2e": "话递到了。就差最后一脚。", + "w1_say2o": "蛋糕……是他订的。他嘴上不说,心里都记着。", + "w1_saye": "她攥着电话,很久没出声。风都停了。", + "w1_sayo": "什么?她还没睡?这么晚了,她还醒着?", + "z1_a": "主播……我,我找不到回家的路了。", + "z1_adone": "他慌了。先接住情绪,再走流程。", + "z1_ask": "大爷,路口有什么招牌?念一个给我听听。", + "z1_asko": "招牌……雨糊住了,我眼花,看不清啊……", + "z1_b": "雨太大了。我本来,只想买副老花镜。", + "z1_bad": "说不清……我真是,说不清了……", + "z1_bade": "地址没报清就转接,雨又大。这通砸了。先稳人,再办事。", + "z1_ok1": "就这么接。记住这个手感。", + "z1_pol": "大爷,我把您转给派出所,他们马上就到。", + "z1_pole": "转接完成,地址报得清。干净利落。", + "z1_polo": "好,好。谢谢你啊,谢谢。", + "z1_ring_in": "一线来电。七十多岁,雨夜,走丢了。", + "z1_sdone": "他稳住了。老歌,比路牌管用。", + "z1_song": "大爷别急,这首歌我也会。咱们一句一句来。", + "z1_songo": "对,对!路口修车铺,天天放这首!", + "z1_stay": "哪儿也不去。我陪你,这首歌还长着呢。", + "z1_staye": "十五分钟后,巡逻灯停在路口。全城听见老人笑了。", + "z1_stayo": "好,好。有人说话,我就不怕了。" }, "rhythm": { - "gd_miss_early": "抢拍了。等声音落下再按。", - "gd_miss_wrong": "方向不对。跟着音色按方向键。", - "menu_main": "菜单。按空格切换选项,按回车确认。", - "restart": "按空格再来一遍,按右方向键下一首,按下方向键回大厅。", - "select_hint": "左右方向键选曲目,按空格开始,按下方向键回大厅。", - "skip_hint": "按空格可跳过旁白。", - "tut_1": "听,底鼓。在下一小节的同一个位置,按空格。", - "tut_2": "这次是左和右。跟着打,按左方向键,按右方向键。", - "tut_3": "最后一句,三个音,中间是按回车。" + "gd_answer": "现在跟着我打。", + "gd_count": "四拍之后,继续。", + "gd_miss": "慢了半拍,下一小节跟上我就行。", + "gd_miss_early": "抢拍了。等声音落下再滑。", + "gd_miss_late": "慢了半拍。跟着节拍走。", + "gd_miss_wrong": "方向不对。跟着音色滑。", + "gd_miss_none": "这拍没接。我停下的时候,就轮到你了。", + "gd_slow": "我放慢一些,跟着试试。", + "grade_a": "A 级!准确率超过八成五,非常出色。", + "grade_b": "B 级,准确率超过七成。不错,还能更好。", + "grade_c": "C 级,准确率不到七成。别灰心,再来一遍。", + "grade_s": "S 级!准确率超过九成五,完美演出。", + "menu_lobby": "回大厅。", + "menu_main": "菜单。单击切换选项,双击确认。", + "menu_resume": "继续演奏。", + "mid_song": "过半了,保持。", + "new_best_combo": "新连击纪录!", + "restart": "单击再来一遍,右滑下一首,下滑回大厅。", + "retry_early": "早了,等鼓点再出手。", + "retry_late": "晚了,跟着鼓点走。", + "retry_listen": "再听一遍,跟着来。", + "retry_skip": "没关系,我们先走下一句。", + "retry_wrong": "敲错鼓了,再听一遍。", + "rules": "规则:我敲一小节鼓,你在下一小节照着敲回来。鼓要选对,拍点也要对。", + "select_hint": "左右滑选曲目,单击开始,下滑回大厅。", + "settings_hint": "音色、语速、背景音乐,请回大厅修改。", + "skip_hint": "单击可跳过旁白。", + "song1_name": "第一首,启程,九十拍。", + "song2_name": "第二首,追风,一百零五拍。", + "song3_name": "第三首,星爆,一百二十拍。", + "song_locked": "这首还没解锁。上一首拿到 B 级以上就能解锁。", + "tut_done": "很好,演出开始。", + "tut_fill": "最后有一段加花,跟着我连打。", + "tut_map": "先认识你的鼓。屏幕横着分三列,左边、中间、右边;竖着分两行,上面清亮,下面低沉。随便摸一摸,听到哪面鼓,我就告诉你它在哪。", + "tut_probe": "摸到三个不同的地方,我们就开始。", + "tut_skip": "跳过教学,直接开始。", + "tut_z_kick": "下面正中间,是底鼓,你的家。先听四下数拍,然后跟着我敲。", + "tut_z_patt": "上面一排更清亮。左上踩镲,上中高嗵,右上吊镲。听这一句,三个音。", + "tut_z_sides": "左下是军鼓,右下是低嗵。一左一右,跟着打。", + "unlock_song2": "新曲目解锁,追风!", + "unlock_song3": "新曲目解锁,星爆!", + "welcome": "欢迎来到节拍行者。今天你是乐队的鼓手,整面屏幕都是你的鼓。", + "welcome_back": "欢迎回来,鼓手。准备好了就开始。", + "zone_bc": "下中,底鼓。", + "zone_bl": "左下,军鼓。", + "zone_br": "右下,低嗵。", + "zone_tc": "上中,高嗵。", + "zone_tl": "左上,踩镲。", + "zone_tr": "右上,吊镲。" }, "rpg": { - "btl_lose_hint": "记住,听清前摇,按回车格挡。", - "gd_parry_miss": "前摇声起的时候按回车,才能格挡。", - "gd_stall": "想好了吗?左右方向键选择,按空格出手。", - "help_battle": "战斗中,左右方向键选招式,按空格出手。听到敌人的前摇,按回车格挡。", - "help_explore": "左右方向键切换选项,按空格确认。按回车重新听场景,按上方向键查看状态,按下方向键打开菜单。", - "shop_open": "商店。左右方向键看看货,按空格购买。", - "skip_hint": "按空格可跳过旁白。", - "sys_continue_ask": "检测到你的旅程记录。按空格继续,按右方向键开始新的旅程。", - "sys_menu": "菜单。左右方向键选择,按空格确认。", - "tut_b0": "战斗里,左右方向键选招式,按空格出手。听到这个声音,就是你的回合。先按一按方向键,试试。", - "tut_b2": "就是现在,按回车格挡!", - "tut_b3": "挡住了!轮到你了。左右方向键选攻击,按空格出剑。", - "tut_b6": "来不及格挡,就选防御。左右方向键,选防御,按空格。", - "tut_battle_2": "左右方向键切换招式,攻击、破空斩、防御、金疮药。按空格,出手。", - "tut_battle_3": "敌人出手前有一声前摇。听到前摇,马上按回车,就能格挡。", - "tut_battle_5": "记住:听清前摇,按回车格挡。开始吧!" + "boss1_warn": "里面就是黑风寨主。你现在回去练练再来,也来得及。", + "btl_enemy_die": "敌人倒下了。", + "btl_flee": "你抽身退出了战斗。", + "btl_flee_fail": "没甩掉!它追上来了。", + "btl_half_bandit": "山贼的攻势缓了下来。", + "btl_levelup": "你的修为精进了。", + "btl_loot_big": "大获全胜,收获颇丰。", + "btl_loot_mid": "收获不少。", + "btl_loot_small": "小有收获。", + "btl_lose": "你倒下了,黑暗吞没了一切。", + "btl_lose_hint": "记住,听清前摇,双击格挡。", + "btl_noflee": "避无可避!", + "btl_noitem": "没有金疮药了。", + "btl_nomp": "内劲不足。", + "btl_start_bandit": "山贼围上来了!", + "btl_start_boss1": "黑风寨主,就在你面前。", + "btl_start_elite": "寨丁头目挡住了去路!", + "btl_start_spider": "毒蛛从树上垂了下来!", + "btl_start_wolf": "野狼拦路!", + "btl_win": "战斗胜利。", + "cmd_attack": "攻击。", + "cmd_defend": "防御。", + "cmd_item": "金疮药。", + "cmd_skill": "破空斩。", + "desc_chest": "一个枯树洞。洞里似乎藏着什么。", + "desc_chest_re": "你回到枯树洞前。", + "desc_deepwood": "密林深处。虫鸣急促,远处有狼嚎,杀气很重。", + "desc_deepwood_re": "你回到密林深处。", + "desc_fork": "岔路口。风声在左右两边,听起来不太一样。", + "desc_fork_re": "你回到岔路口。", + "desc_gate": "黑风寨门前。火把熊熊,人声嘈杂。", + "desc_hall": "聚义厅。火盆熊熊,大厅空旷,回声冰冷。", + "desc_hunter": "猎人小屋。柴火正旺,还有磨刀的声音。", + "desc_hunter_re": "你回到猎人小屋。", + "desc_path": "林间小路。风穿过树叶,脚下的落叶沙沙作响。", + "desc_path_re": "你回到林间小路。", + "desc_stream": "溪流。水声潺潺,是个歇脚的好地方。", + "desc_stream_re": "你回到溪流边。", + "desc_village": "雾口村。篝火噼啪作响,村民低声议论着林子里的土匪。", + "desc_village_re": "你回到了雾口村。", + "evt_ch1_end": "寨主倒了,但徒弟不在这里。一张字条,指向南方的腐沼。", + "evt_chest": "树洞里有两瓶金疮药,你收好了。", + "evt_gate_open": "寨门缓缓打开。", + "evt_gold15": "你在落叶下摸到十五枚金币。", + "evt_hunter_gift": "老猎人塞给你一瓶金疮药,还说商店会给你算便宜些。", + "evt_nothing": "这里什么都没有了。", + "foe_hp_high": "敌人气焰正盛。", + "foe_hp_low": "敌人撑不住了。", + "foe_hp_mid": "敌人露出疲态。", + "gd_parry_miss": "前摇声起的时候双击,才能格挡。", + "gd_stall": "想好了吗?左右滑动选择,单击出手。", + "gd_wrap_first": "回到第一个。", + "gd_wrap_last": "最后一个了。", + "help_battle": "战斗中,左右滑选招式,单击出手。听到敌人的前摇,双击格挡。", + "help_explore": "左右滑切换选项,单击确认。双击重新听场景,上滑查看状态,下滑打开菜单。", + "intro_1": "你的眼睛看不见了。但你的耳朵,比谁都灵。", + "intro_2": "黑风寨掳走了你唯一的徒弟。追进迷雾林,把他们连根拔起。", + "intro_3": "先记住,怎么用耳朵走路。", + "npc_boss1_1": "盲剑客?正好,省得挖你的眼睛。", + "npc_boss1_2": "有两下子。可惜,你听不懂死期的声音。", + "npc_boss1_die": "白无瞳……会找到你……", + "npc_elite_1": "哪儿来的瞎子,敢闯黑风寨!", + "npc_elite_die": "寨主……会替我报仇……", + "npc_elite_half": "你……你到底是什么人!", + "npc_headman_1": "外乡人,林子里不太平。这五十金,拿着防身。", + "npc_headman_2": "商店就在村里,缺什么就去看看。", + "npc_headman_3": "听说你是用耳朵走路的剑客?保重啊。", + "npc_headman_4": "救救那些被掳走的孩子吧。", + "npc_hunter_1": "站住。……哦,是个用耳朵的。", + "npc_hunter_2": "寨子里有我旧识。带上这个,别死在路上。", + "npc_hunter_3": "黑风寨主的双刀很快,听清他出刀前的动静。", + "npc_hunter_4": "去吧。让我听听,你的传说。", + "opt_assault": "强攻寨门。", + "opt_back": "返回。", + "opt_drink": "饮水休息。", + "opt_go_chest": "往左,看看树洞。", + "opt_go_deepwood": "前进,进密林深处。", + "opt_go_fork": "前进,去岔路口。", + "opt_go_gate": "前进,去寨门。", + "opt_go_hunter": "前进,去猎人小屋。", + "opt_go_path": "前进,去林间小路。", + "opt_go_stream": "往右,去溪流。", + "opt_investigate": "调查四周。", + "opt_leave": "离开。", + "opt_open_chest": "打开树洞。", + "opt_rest": "休息一晚。", + "opt_shop": "去商店。", + "opt_sneak": "绕行潜入。", + "opt_status": "查看状态。", + "opt_talk_hunter": "和老猎人谈谈。", + "settings_hint": "音色、语速、背景音乐,请回大厅修改。", + "shop_buy": "买下了。", + "shop_open": "商店。左右滑看看货,单击购买。", + "shop_owned": "这件你已经有了。", + "shop_poor": "钱不够。", + "shop_price_armor": "皮甲,八十金。", + "shop_price_potion": "金疮药,三十金。", + "shop_price_sword": "铁剑,一百金。", + "skip_hint": "单击可跳过旁白。", + "st_armor_iron": "你身着铁鳞甲。", + "st_armor_leather": "你身着皮甲。", + "st_armor_none": "你身无片甲。", + "st_gold_poor": "口袋空空。", + "st_gold_rich": "腰包鼓鼓。", + "st_gold_some": "有些积蓄。", + "st_hp_high": "你状态很好。", + "st_hp_low": "你伤势很重,命悬一线。", + "st_hp_mid": "你受了伤。", + "st_lv_high": "你已是高手。", + "st_lv_low": "你初出茅庐。", + "st_lv_mid": "你小有名气。", + "st_weapon_iron": "你手持铁剑。", + "st_weapon_none": "你赤手空拳。", + "st_weapon_steel": "你手持青钢剑。", + "st_weapon_wind": "你手持听风剑。", + "sys_continue_ask": "检测到你的旅程记录。单击继续,右滑开始新的旅程。", + "sys_drink": "溪水清冽,你喝了个饱,伤势尽消。", + "sys_menu": "菜单。左右滑选择,单击确认。", + "sys_menu_help": "重新听帮助。", + "sys_menu_resume": "继续旅程。", + "sys_menu_save": "保存并回大厅。", + "sys_new_game": "新的旅程,开始了。", + "sys_rest": "你在篝火边睡了一觉,状态全满。", + "sys_saved": "进度已保存。", + "tut_b0": "战斗里,左右滑选招式,单击出手。听到这个声音,就是你的回合。先滑一滑,试试。", + "tut_b1": "它要扑了,听前摇!", + "tut_b2": "就是现在,双击格挡!", + "tut_b2b": "挡得漂亮。", + "tut_b3": "挡住了!轮到你了。左右滑选攻击,单击出剑。", + "tut_b4": "没挡住也没关系,再来一次。", + "tut_b5": "好剑法!接下来,靠你自己了。", + "tut_b6": "来不及格挡,就选防御。左右滑,选防御,单击。", + "tut_battle_1": "第一场战斗来了。别慌,战斗是回合制:你先出手,敌人再反击。", + "tut_battle_2": "左右滑切换招式,攻击、破空斩、防御、金疮药。单击,出手。", + "tut_battle_3": "敌人出手前有一声前摇。听到前摇,马上双击,就能格挡。", + "tut_battle_4": "没把握就防御,伤害减半。金疮药可以回血。", + "tut_battle_5": "记住:听清前摇,双击格挡。开始吧!" }, "simon": { - "gd_economy": "记不住就按上方向键,重新听一遍。免费机会有两次,用完要扣一次机会。", - "gd_occ_both": "这一轮,按上方向键和回车都是作答。", - "gd_occ_dt": "这一轮,按回车是作答。", - "gd_occ_up": "这一轮,按上方向键是作答。", - "gd_relisten": "需要的话,按上方向键可以重新听一遍序列。", - "replay": "按空格,再来一局。", - "rules": "上行音,按上方向键。下行音,按下方向键。左边的音,按左方向键。右边的音,按右方向键。一声轻响,按空格。两声轻响,按回车。", - "rules_prompt": "按上方向键,重听规则。按下方向键,打开菜单。", - "skip_hint": "按空格可跳过旁白。", - "t1_up": "按上方向键,是这个声音。", - "t2_down": "按下方向键,是这个声音。", - "t3_left": "按左方向键,是这个声音。", - "t4_right": "按右方向键,是这个声音。", - "t5_tap": "按空格,是这个声音。", - "t6_double": "按回车,是这个声音。", - "t7_retry": "答错可以消耗机会重听。按上方向键,可以随时重听。", - "t_blunt_double": "按一下回车。", - "t_blunt_down": "按一下下方向键。", - "t_blunt_left": "按一下左方向键。", - "t_blunt_right": "按一下右方向键。", - "t_blunt_tap": "轻轻按一下空格。", - "t_blunt_up": "按一下上方向键。", - "t_wrong_double": "不是这个,按回车试试。", - "t_wrong_down": "不是这个,按下方向键试试。", - "t_wrong_left": "不是这个,按左方向键试试。", - "t_wrong_right": "不是这个,按右方向键试试。", - "t_wrong_tap": "不是这个,按空格试试。", - "t_wrong_up": "不是这个,按上方向键试试。" + "chance_plus": "机会加一。", + "chances_out": "重听机会用完了,小心。", + "correct": "答对了!", + "gameover": "游戏结束。", + "gd_chances_left0": "免费重听用完了。之后重听会花一次机会,别怕,慢慢来。", + "gd_chances_left1": "免费重听还剩一次。", + "gd_clear": "漂亮,过了。", + "gd_economy": "记不住就向上滑,重新听一遍。免费机会有两次,用完要扣一次机会。", + "gd_occ_both": "这一轮,向上滑和双击都是作答。", + "gd_occ_dt": "这一轮,双击是作答。", + "gd_occ_up": "这一轮,向上滑是作答。", + "gd_record": "破纪录了。", + "gd_relisten": "需要的话,向上滑可以重新听一遍序列。", + "menu_back": "返回游戏。", + "menu_home": "回大厅。", + "menu_open": "菜单。", + "menu_restart": "重新开始。", + "new_record": "新纪录!", + "relisten": "再听一遍。", + "replay": "单击屏幕,再来一局。", + "retry_use": "错了。用一次机会,再听一遍。", + "round_01": "第一轮,听好了。", + "round_02": "第二轮,听好了。", + "round_03": "第三轮,听好了。", + "round_04": "第四轮,听好了。", + "round_05": "第五轮,听好了。", + "round_06": "第六轮,听好了。", + "round_07": "第七轮,听好了。", + "round_08": "第八轮,听好了。", + "round_09": "第九轮,听好了。", + "round_10": "第十轮,听好了。", + "round_11": "第十一轮,听好了。", + "round_12": "第十二轮,听好了。", + "round_13": "第十三轮,听好了。", + "round_14": "第十四轮,听好了。", + "round_15": "第十五轮,听好了。", + "round_16": "第十六轮,听好了。", + "round_17": "第十七轮,听好了。", + "round_18": "第十八轮,听好了。", + "round_19": "第十九轮,听好了。", + "round_20": "第二十轮,听好了。", + "round_more": "新的一轮,听好了。", + "rules": "上行音,向上滑。下行音,向下滑。左边的音,向左滑。右边的音,向右滑。一声轻响,单击。两声轻响,双击。", + "rules_prompt": "上滑,重听规则。下滑,打开菜单。", + "score_band1": "一轮都没坚持下来。别灰心。", + "score_band2": "你坚持了三轮以内。", + "score_band3": "你坚持了五轮左右。", + "score_band4": "你坚持了将近十轮。", + "score_band5": "你坚持了十轮以上,很厉害。", + "score_band6": "你坚持了十五轮以上,大师级!", + "skip_hint": "单击可跳过旁白。", + "status_chance1": "免费用完,机会还剩一次。", + "status_chance2": "免费用完,机会还剩两次。", + "status_free1": "免费重听还有一次。", + "status_free2": "免费重听还有两次。", + "status_len_long": "这一轮挺长。", + "status_len_mid": "这一轮不长不短。", + "status_len_short": "这一轮很短。", + "status_len_xlong": "这一轮很长,稳住。", + "status_out": "免费和机会都用完了,答错就结束。", + "status_prog_early": "刚答了个开头。", + "status_prog_half": "答了一半左右。", + "status_prog_late": "就剩最后几个了。", + "status_prog_start": "刚开头,一个还没对。", + "t0_goal": "我会演奏一串声音,请你记住顺序,原样复现。", + "t0_welcome": "欢迎来到音序回响。先认识六种声音。", + "t1_up": "向上滑,是这个声音。", + "t2_down": "向下滑,是这个声音。", + "t3_left": "向左滑,是这个声音。", + "t4_right": "向右滑,是这个声音。", + "t5_tap": "单击,是这个声音。", + "t6_double": "双击,是这个声音。", + "t7_ready": "六种声音都记住了。后面的序列,会越来越长。", + "t7_retry": "答错可以消耗机会重听。向上滑,可以随时重听。", + "t_blunt_double": "用指尖,快速点两下屏幕。", + "t_blunt_down": "手指贴着屏幕,向下推一下。", + "t_blunt_left": "手指贴着屏幕,向左推一下。", + "t_blunt_right": "手指贴着屏幕,向右推一下。", + "t_blunt_tap": "用指尖,轻轻点一下屏幕。", + "t_blunt_up": "手指贴着屏幕,向上推一下。", + "t_ok": "对了。", + "t_skip": "跳过教学,直接开始。", + "t_try": "你试试。", + "t_wrong_double": "不是这个,双击试试。", + "t_wrong_down": "不是这个,向下滑试试。", + "t_wrong_left": "不是这个,向左滑试试。", + "t_wrong_right": "不是这个,向右滑试试。", + "t_wrong_tap": "不是这个,单击试试。", + "t_wrong_up": "不是这个,向上滑试试。", + "wrong": "错了。", + "your_turn": "轮到你了。" }, "space": { - "drill_down": "下面是低沉的轰隆。按下方向键!", - "drill_left": "听,左边有陨石。按左方向键,把它拨开!", - "drill_retry_down": "轰隆声在下面,按下方向键。", - "drill_retry_left": "那是左边来的,按左方向键。", - "drill_retry_right": "那是右边来的,按右方向键。", - "drill_retry_up": "声音又高又尖,是上面,按上方向键。", - "drill_right": "这次在右边。按右方向键!", - "drill_up": "上面有东西,声音又尖又高。按上方向键!", - "feat_boost": "试试按空格,引擎会短促加速,直接冲过空隙。", - "feat_shield": "按回车展开护盾,能挡下一次撞击。", - "gd_hit_hint": "被撞了。听方位,按对应方向键就能拨开。", - "help_recap": "左边来按左方向键,右边来按右方向键,上面来按上方向键,下面来按下方向键。按空格加速,按回车护盾。", - "hit_down": "下面撞上的。听到低沉的轰隆,按下方向键。", - "hit_left": "左边撞上的。听到左边的呼啸,按左方向键。", - "hit_right": "右边撞上的。听到右边的呼啸,按右方向键。", - "hit_up": "上面撞上的。听到高高的呼啸,按上方向键。", - "menu_main": "菜单。按空格切换选项,按回车确认。", - "protect_down": "训练护盾接住了。那颗在下面,听到低沉的轰隆,按下方向键。", - "protect_left": "训练护盾接住了。那颗在左边,听到左边的呼啸,按左方向键。", - "protect_right": "训练护盾接住了。那颗在右边,听到右边的呼啸,按右方向键。", - "protect_up": "训练护盾接住了。那颗在上面,听到高高的呼啸,按上方向键。", - "restart_hint": "按空格再飞一次,按下方向键回大厅。", - "second_run_ask": "按上方向键重新听演练,按空格直接出发。", - "skip_hint": "按空格可跳过旁白。" + "dir_down": "下!", + "dir_left": "左!", + "dir_right": "右!", + "dir_up": "上!", + "dodge_1": "只拨开几颗。", + "dodge_2": "拨开了十来颗。", + "dodge_3": "拨开了几十颗。", + "dodge_4": "拨开了一大群,漂亮。", + "drill_done": "四个方向你都会了。引擎点火,出发!", + "drill_down": "下面是低沉的轰隆。向下滑!", + "drill_good": "漂亮。", + "drill_left": "听,左边有陨石。向左滑,把它拨开!", + "drill_moveon": "没关系,跟着我,我们继续。", + "drill_retry_down": "轰隆声在下面,向下滑。", + "drill_retry_left": "那是左边来的,向左滑。", + "drill_retry_right": "那是右边来的,向右滑。", + "drill_retry_up": "声音又高又尖,是上面,向上滑。", + "drill_right": "这次在右边。向右滑!", + "drill_rule": "陨石来了,会有声音告诉你方位。", + "drill_skip": "跳过演练,直接出发。", + "drill_up": "上面有东西,声音又尖又高。向上滑!", + "drill_welcome": "欢迎登上盲航。你只有一双耳朵。", + "feat_boost": "试试单击,引擎会短促加速,直接冲过空隙。", + "feat_boost_done": "感觉到了吗?加速的时候,陨石撞不上你。", + "feat_shield": "双击展开护盾,能挡下一次撞击。", + "feat_shield_done": "护盾展开后会自动充能,好了我会告诉你。", + "gd_hit_hint": "被撞了。听方位,同向滑动就能拨开。", + "gd_last_life": "这是最后一次机会,撑住。", + "help_recap": "左边来向左滑,右边来向右滑,上面来向上滑,下面来向下滑。单击加速,双击护盾。", + "hit_down": "下面撞上的。听到低沉的轰隆,向下滑。", + "hit_last": "船体只剩最后一次了,小心!", + "hit_left": "左边撞上的。听到左边的呼啸,向左滑。", + "hit_right": "右边撞上的。听到右边的呼啸,向右滑。", + "hit_up": "上面撞上的。听到高高的呼啸,向上滑。", + "menu_help": "重新听教学要点。", + "menu_lobby": "回大厅。", + "menu_main": "菜单。单击切换选项,双击确认。", + "menu_resume": "继续飞行。", + "ms_10": "十颗了,稳。", + "ms_100": "一百颗!天空属于你。", + "ms_25": "二十五颗,老练的飞行员。", + "ms_50": "五十颗,传奇。", + "new_record": "新纪录!", + "paused": "已暂停。", + "protect_down": "训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。", + "protect_end": "训练护盾关闭。接下来,靠你自己了。", + "protect_left": "训练护盾接住了。那颗在左边,听到左边的呼啸,向左滑。", + "protect_right": "训练护盾接住了。那颗在右边,听到右边的呼啸,向右滑。", + "protect_up": "训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。", + "restart_hint": "单击再飞一次,下滑回大厅。", + "second_run_ask": "上滑重新听演练,单击直接出发。", + "settings_hint": "音色、语速、背景音乐,请回大厅修改。", + "shield_block": "护盾挡下了撞击。", + "shield_ready": "护盾充能完毕。", + "skip_hint": "单击可跳过旁白。", + "time_1": "不到三十秒,再试一次。", + "time_2": "超过三十秒,有进步。", + "time_3": "超过一分钟,合格的飞行员。", + "time_4": "超过两分钟,王牌飞行员。", + "protect_soon": "训练护盾还剩十秒。", + "boost_not_ready": "引擎还在冷却,稍等一下。" }, "storyline": { - "e1_dawn": "加密频道那头沉默了三秒。然后,一个你等了三十天的声音响了起来:“姐?姐!是你吗?”天亮之前,避难所的救援队打开了大门。猎狗的人,在北区的高墙下溃散了。你抱着晨晨,听见广播塔里,重新响起了音乐。后来人们说,这座城市,是从一个女人的声音开始,重新活过来的。——好结局:黎明。感谢你,陪林晚走完了这条路。按空格,可以回到故事开始的地方。", - "e2_price": "你赶在车队前面,撞进了避难所的大门。“关掉广播!关灯!猎狗来了——!”那一夜,北区守住了。探照灯熄灭的时候,晨晨从人群里扑出来抱住你,才发现你胳膊上的血,已经把半边袖子浸透了。坐标是你交出去的,命,是你抢回来的。你赢了,用一条胳膊的代价。——结局:代价。按空格,重新开始。", - "e3_alone": "你逃了。一路向南,没有回头。三天后,收音机里关于北区的广播,停了。又过了七天,你在一个废弃的加油站里,听见最后一个频段,也变成了沙沙声。你活下来了。只是从此以后的每一个夜里,你都会想起那声口哨,和你报出坐标时,自己发抖的声音。——坏结局:孤声。按空格,重新开始。", - "e4_static": "公开频道,把所有人都引来了——幸存者,还有猎狗。塔顶的风很大,你看见山下火把连成的长龙,也看见避难所方向亮起的防御火光。猎狗的刀抵上来的时候,你对着麦克风笑了:“听见了吗,晨晨?姐姐的声音,全城都听见了。”信号中断了。但那晚之后,北区,再没有人投降。——结局:静默。按空格,重新开始。", - "gd_again": "还在吗?按空格继续。", - "gd_brief": "按空格继续剧情。请选择的时候,按左右方向键。", - "gd_continue": "按空格,继续。", - "help": "操作说明。按空格:继续剧情。按回车:重听刚才的台词。按上方向键:听这段说明和当前进度。按下方向键:呼出菜单,菜单里可以重新开始。当旁白说“请选择”的时候,按左方向键或者按右方向键,做出你的决定。选择无法撤销。", - "menu": "菜单。按左方向键:重新开始整个故事。按右方向键,或者按空格:回到故事。按上方向键:听操作说明。", - "n00_intro": "大停电后的第三十天,城市陷入彻底的黑暗。没有电,没有网络,只有收音机里偶尔闪过的沙沙声,像垂死者的呼吸。你是林晚,一名前急救员。在这个故事里,你用声音活下去。请记住:按空格,继续剧情;按回车,重听上一句;按上方向键,听你的状态和帮助;按下方向键,呼出菜单。当我说“请选择”的时候,按左方向键,或者按右方向键,做出你的决定。选择一旦做出,就无法回头。现在,按空格,睁开眼睛。", - "p1": "请选择。按左方向键:先检查背包里的收音机。按右方向键:先摸黑寻找出口。", - "p2": "请选择。按左方向键:钻进旁边的通风管道。按右方向键:躺进路边的尸体堆里装死。", - "p3": "请选择。按左方向键:循着哭声过去看看。按右方向键:不去管它,直接去北区。", - "p4": "请选择。按左方向键:带上小满一起走。按右方向键:留下食物,独自上路。", - "p5": "请选择。按左方向键:走桥下的污水涵洞。按右方向键:爬桥上悬着的钢索。", - "p6": "请选择。按左方向键:交出坐标,保命要紧。按右方向键:拒绝他,想办法周旋。", - "p7": "请选择。按左方向键:追上去,警告避难所。按右方向键:自己逃命,越远越好。", - "p8": "请选择。按左方向键:用公开频道广播,让全城都听见。按右方向键:用加密频段,只发给避难所。", - "skip_hint": "按空格可跳过旁白。" + "e1_child": "姐姐,姐姐!天亮了!妈妈说过的,天亮了,就可以不数啦!", + "e1_dawn": "加密频道那头沉默了三秒。然后,一个你等了三十天的声音响了起来:“姐?姐!是你吗?”天亮之前,避难所的救援队打开了大门。猎狗的人,在北区的高墙下溃散了。你抱着晨晨,听见广播塔里,重新响起了音乐。后来人们说,这座城市,是从一个女人的声音开始,重新活过来的。——好结局:黎明。感谢你,陪林晚走完了这条路。单击屏幕,可以回到故事开始的地方。", + "e2_price": "你赶在车队前面,撞进了避难所的大门。“关掉广播!关灯!猎狗来了——!”那一夜,北区守住了。探照灯熄灭的时候,晨晨从人群里扑出来抱住你,才发现你胳膊上的血,已经把半边袖子浸透了。坐标是你交出去的,命,是你抢回来的。你赢了,用一条胳膊的代价。——结局:代价。单击屏幕,重新开始。", + "e3_alone": "你逃了。一路向南,没有回头。三天后,收音机里关于北区的广播,停了。又过了七天,你在一个废弃的加油站里,听见最后一个频段,也变成了沙沙声。你活下来了。只是从此以后的每一个夜里,你都会想起那声口哨,和你报出坐标时,自己发抖的声音。——坏结局:孤声。单击屏幕,重新开始。", + "e4_static": "公开频道,把所有人都引来了——幸存者,还有猎狗。塔顶的风很大,你看见山下火把连成的长龙,也看见避难所方向亮起的防御火光。猎狗的刀抵上来的时候,你对着麦克风笑了:“听见了吗,晨晨?姐姐的声音,全城都听见了。”信号中断了。但那晚之后,北区,再没有人投降。——结局:静默。单击屏幕,重新开始。", + "gd_again": "还在吗?单击继续。", + "gd_brief": "单击继续剧情。请选择的时候,左右滑动。", + "gd_continue": "轻触屏幕,继续。", + "gd_invalid": "这个操作在这里用不上。", + "help": "操作说明。单击屏幕:继续剧情。双击:重听刚才的台词。向上滑:听这段说明和当前进度。向下滑:呼出菜单,菜单里可以重新开始。当旁白说“请选择”的时候,向左滑或者向右滑,做出你的决定。选择无法撤销。", + "menu": "菜单。向左滑:重新开始整个故事。向右滑,或者单击:回到故事。向上滑:听操作说明。", + "n00_intro": "大停电后的第三十天,城市陷入彻底的黑暗。没有电,没有网络,只有收音机里偶尔闪过的沙沙声,像垂死者的呼吸。你是林晚,一名前急救员。在这个故事里,你用声音活下去。请记住:单击屏幕,继续剧情;双击,重听上一句;向上滑,听你的状态和帮助;向下滑,呼出菜单。当我说“请选择”的时候,向左滑,或者向右滑,做出你的决定。选择一旦做出,就无法回头。现在,单击屏幕,睁开眼睛。", + "n01_wake": "后脑一阵钝痛,嘴里全是铁锈味。你在废弃的地铁站里醒来,四周黑得像沉在水底。背包还压在身下,手电筒却不知去向。远处滴水的声音,一下,一下,像某种倒计时。", + "n02_linwan": "咳……咳咳……我还活着。晨晨,你在哪儿……你说过,会在北区等我。姐一定,一定找到你。", + "n03_msg": "姐,如果你听到这个,说明你还活着,太好了。听着,跟着广播塔的红色信号灯走,别相信任何自称救援队的人。北区,北区有真正的避难所。我在这儿等你。姐,一定要来。", + "n03_radio": "收音机……还好,没摔坏。等等,这是什么……这段录音,是三天前的……", + "n04_exit": "你扶着潮湿的墙,一步一步往外摸。第五十步,脚尖踢到一个硬物——是一支手电,还剩半格电。光柱劈开黑暗的那一瞬,你看见墙上用红漆刷着一行大字:别去北区。", + "n05_bcast": "北区避难所,仍在接收幸存者。重复,北区避难所,仍在接收幸存者。坐标,三、七点、五。请沿广播塔红色信号灯方向前进。", + "n05_signal": "就在这时,背包侧袋里的收音机,沙沙声忽然变得清晰。一个平稳的女声,一遍又一遍地重复着:", + "n06_whistle": "你刚走上街面,黑暗里忽然响起一声口哨。接着是第二声,第三声,从不同的方向,把你围在中间。有人的手电光,扫过你的脸。", + "n07_dog": "哟,瞧瞧,有肥羊自己送上门了。别跑啊。这片儿的路,都是我猎狗修的。想过去?行啊,把包留下,把你值钱的玩意儿留下。人嘛……也留下。", + "n08_vent": "你一矮身,钻进了通风管道。铁皮贴着脊背,窄得几乎无法呼吸。身后传来咒骂和铁棍敲击管道口的声音,越来越近,又渐渐远去。十分钟后,你从两条街外的井口爬出来,肺里像塞满了沙子。", + "n09_dead": "你屏住呼吸,把自己埋进路边冰冷的尸体堆里。手电、罐头、半瓶水,被他们一样一样摸走。有人踢了你一脚,你纹丝不动。就在他们离开时,你听见一句不该听见的话——“北区那个陷阱,今晚就收网。”", + "n10_rain": "酸雨开始下了。街面上升起细密的嘶嘶声,像无数条小蛇在游。雨幕那头,隐约传来一阵哭声——细细的,是个孩子。", + "n11_child": "哭声来自一间塌了一半的便利店。一个小男孩抱着膝盖坐在货架底下,身边躺着一个再也不会醒来的女人。他抬起头,脸上全是灰,小声说:“我叫小满。妈妈说,数到一千,她就会醒。我已经数到……数到好多个一千了。”", + "n12_take": "小满,别怕。数到一千太慢了。跟姐姐走,姐姐带你去找一座会发光的塔。抓紧我的手,别松开。", + "n13_leave": "你把仅剩的一罐罐头放在他身边,转身走进雨里。身后,孩子重新开始数数:一……二……三……你告诉自己,别回头。千万别回头。", + "n14_ignore": "哭声被你甩在身后,越来越远,最后混进雨声里,再也听不见了。你走得很快,快得像在逃跑。快一点,再快一点。你对自己说,只要到了北区,这一切就都值了。", + "n15_bridge": "两个小时后,江水拦住了去路。跨江大桥断成两截,桥身斜插进黑沉沉的江面。要去广播塔,只剩两条路:桥下的污水涵洞,黑得看不见底;或者,桥上悬着的钢索,在风里荡来荡去。", + "n16_culvert": "涵洞里,污水没到胸口,又冷又黏,带着腐烂的甜味。走到一半,水面下有什么东西,擦着你的腿滑了过去。你没有叫出声,只是走,一步,一步,直到看见洞口那点灰白的天光。", + "n16b_culvert_c": "你让小满骑在肩上,自己蹚进没到胸口的污水里。又冷又黏,带着腐烂的甜味。走到一半,水面下有什么东西擦过你的腿,小满吓得一抖,你抬手按住他的膝盖:“数数。”他小声数起来,一,二,三……数到一百七,你们看见了洞口的天光。", + "n17_cable": "钢索比想象中更滑。酸雨把它泡得发黏,你每挪一步,整根钢索就晃一下。江风从断桥的缺口灌进来,像有无数只手在水底下拽你的脚。你不往下看。你只知道,前面就是北岸。", + "n17b_cable_c": "钢索比想象中更滑。小满趴在你背上,一声不吭,两条小胳膊勒得你生疼。走到一半,钢索猛地一沉,你听见身后钢丝崩断的脆响。“闭眼。”你说。然后你用尽全身力气,向前,向前,直到膝盖磕上北岸的石头。", + "n18_dog": "啧啧啧。涵洞也拦不住你,钢索也拦不住你,命真大啊。正式认识一下——猎狗。北区广播塔底下这片,归我管。把你妹妹的坐标,还有包里剩下的东西,交出来。交出来,我让你死得体面点。", + "n19_betray": "好,好,我说。北区,避难所,坐标是……三、七点、五。拿去,都拿去。求你……放我走。", + "n20_convoy": "猎狗的车队朝北区开走了,探照灯在雨幕里划出一道道口子。你蹲在原地,胃里一阵一阵地泛酸。晨晨在北区。而刚才,是你,亲手把狼,引到了她的门口。", + "n21_redeem": "再快一点……再快一点!晨晨,等我。这一次,姐说什么,也不会再把你弄丢了!", + "n22_fight": "你往后退了半步,忽然笑了:“坐标在我脑子里。杀了我,你什么都拿不到。”猎狗愣了半秒。就是这半秒,你抓起一把沙土扬在他脸上,转身就跑。子弹擦着肩膀打进墙里,火辣辣地疼。但你在跑,你在跑——活着的感觉,从来没有这么清楚过。", + "n23_tower": "广播塔就立在头顶,红色的信号灯在雨里一闪一闪,像一颗还在跳动的心脏。塔底的中控台居然还能用。只要爬上去,你就能接入城市广播网,把警报发给北区的每一个人。问题是——用哪个频道。", + "n24_open": "所有人注意!所有人注意!我是林晚!北区避难所正在遭到袭击,重复,正在遭到袭击!能听见的人,拿起你身边能当武器的东西,去北区!救他们——也救救我们!", + "n25_secure": "北区,北区,这里是林晚。频率七点五,老规矩。猎狗带人来了,至少二十个,有车。顶住,我马上到。重复,顶住,我马上到。", + "p1": "请选择。向左滑:先检查背包里的收音机。向右滑:先摸黑寻找出口。", + "p2": "请选择。向左滑:钻进旁边的通风管道。向右滑:躺进路边的尸体堆里装死。", + "p3": "请选择。向左滑:循着哭声过去看看。向右滑:不去管它,直接去北区。", + "p4": "请选择。向左滑:带上小满一起走。向右滑:留下食物,独自上路。", + "p5": "请选择。向左滑:走桥下的污水涵洞。向右滑:爬桥上悬着的钢索。", + "p6": "请选择。向左滑:交出坐标,保命要紧。向右滑:拒绝他,想办法周旋。", + "p7": "请选择。向左滑:追上去,警告避难所。向右滑:自己逃命,越远越好。", + "p8": "请选择。向左滑:用公开频道广播,让全城都听见。向右滑:用加密频段,只发给避难所。", + "skip_hint": "单击可跳过旁白。", + "status1": "当前进度:第一幕,城南地铁站附近。你的目标:活着离开这片废墟,前往北区的广播塔,寻找妹妹林晨的下落。", + "status2": "当前进度:第二幕,酸雨笼罩的街区与断桥。你的目标:渡过江水,抵达广播塔。小心,猎狗的人,就在附近。", + "status3": "当前进度:第三幕,广播塔下。你的目标:把警报发出去,找到林晨。这是最后一段路了。" }, "teahouse": { - "gd_brew": "还在灶上,听声动手,回车。", - "gd_serve": "客人还在堂前。上键,再听一遍他要的茶。", - "settle_night": "熄了灯,这一晚就过去了。按空格,睡下。", - "sys_help": "方向键选茶,空格定下。听水声,回车提壶;滴答密,回车出汤。上键状态,下键菜单。", - "tut_d0": "先看茶柜。左右方向键,一罐一罐听。", - "tut_serve": "茶好了。空格,端出去。", - "tut_steep": "注水,闷泡。滴答由稀到密,密起来就是将好——回车,出汤。", - "tut_tea": "空格,选定这罐茶。", - "tut_water": "灶上坐水。泡泡细密是将沸,咕嘟连片是滚透——听到细密,回车提壶。", - "upg_open": "要添置点什么?左右方向键看,空格买定。" + "amb_1": "车铃一响,晚班的邮差探进头来。老规矩:茉莉花茶,要滚烫的。", + "amb_2": "门帘一挑,绣坊的阿姐收了工,想喝一盏清火的龙井。", + "amb_3": "巷口的醉汉扶着门框,含含糊糊,只嚷嚷要最浓的滇红。", + "amb_react_good": "他喝得很慢,末了多搁下两文。", + "amb_react_plain": "他喝完,点点头,搁下茶钱。", + "amb_react_wrong": "他抿了一口,搁下半盏,晃出去了。", + "bai_e_a": "明儿我把棋盘搬来,你这儿灯亮,我天天来摆谱——就当,她还在看着。", + "bai_e_b": "回去还是那间空屋子。不过睡前有盏茶垫着,梦能沉一点。", + "bai_e_c": "下个月,我搬去养老院了。这把紫砂壶,留给茶馆吧。", + "bai_enter": "小掌柜,给我的紫砂壶,留个座。", + "bai_o1": "晚饭积了食。要一盏刮油的、经得住泡的,我喝得慢。", + "bai_o2": "昨儿那盏不错。今晚想喝口陈的,越陈越好。", + "bai_o3": "就馋那口陈味。老伙计,看你的手艺了。", + "bai_r1_good": "好茶,有回甘。像我家老婆子腌的萝卜干,越嚼越有味。", + "bai_r1_plain": "嗯,茶汤尚可。人老了,舌头也钝了。", + "bai_r1_wrong": "这不是我要的那口。不怪你——是我话没说全。", + "bai_r2_good": "陈味出来了。四十年前,我跟老婆子初见,就是一盏普洱。", + "bai_r2_plain": "茶汤淡了些。故事嘛,等茶好了再说。", + "bai_r2_wrong": "……不是我惦记的那口。罢了,回家睡了。", + "brew_start": "回到灶前。", + "bridge_good": "客人把这盏茶喝得很慢,像是就着茶,把心事也喝顺了。", + "bridge_plain": "茶喝完了,客人点点头,起身。", + "bridge_wrong": "那盏茶凉在桌上,客人走的时候,没回头。", + "chapter_end": "第一章完。这条巷子的夜,你都听过了。茶馆的故事,还长。", + "close_coin_1": "今晚进账,不到十五文。", + "close_coin_2": "今晚进账,十五到二十四文。", + "close_coin_3": "今晚进账,二十五文往上。", + "close_open": "客人走尽了。收壶,打烊。", + "debt_clear": "旧账清了,秦婶把那一页翻了过去。", + "gd_brew": "还在灶上,听声动手,双击。", + "gd_close": "账报完了。单击,熄灯睡下。", + "gd_invalid": "这个操作,这里用不上。", + "gd_serve": "客人还在堂前。上滑,再听一遍他要的茶。", + "he_e_a": "学费攒齐了,明天去看闺女。老师说她考了年级前十——这盏,我慢慢喝。", + "he_e_b": "钱还差一点,再跑一个月。茶馆这盏灯,是我每晚的路标。", + "he_e_c": "我把夜班退了。闺女在电话里说:妈,钱够用。这盏茶,我喝得最慢。", + "he_enter": "师傅,门口能停车不?——哦,我是说,喝茶。", + "he_o1": "跑了一宿,眼睛发涩,脑子发木。要一盏清口的,不要浓的。", + "he_o2": "今晚不打算睡了,还要跑单。要最浓的,越浓越好。", + "he_o3": "最后一趟车收工。想要一盏柔的,收收心。", + "he_r1_good": "清亮,像拿凉水洗了把脸。今晚最后一单,稳了。", + "he_r1_plain": "一般吧,能开就行。", + "he_r1_wrong": "不是这口……算了,我还得赶路。", + "he_r2_good": "得劲儿!闺女的照片就贴在方向盘上——再跑俩月,学费就齐了。", + "he_r2_plain": "不够劲,今晚里程表怕是要难看。", + "he_r2_wrong": "淡了。算了,我赶时间。", + "hint_water": "水听两遍:泡泡细密是将沸,咕嘟连片是滚透。", + "intro_1": "巷子最深处,有一盏亮到后半夜的灯。", + "intro_2": "你接手了这家茶馆。今晚,是它易主后的头一晚。", + "intro_3": "泡茶三步:选茶、候汤、出汤。手上的事,耳朵说了算。", + "night_1": "头一晚。灯亮了,水坐上,茶馆开门。", + "night_2": "第二晚。老客们,已经认得这条巷子。", + "night_3": "第三晚。今天,是收房钱的日子。", + "night_4": "第四晚。熟客进门,都不用问位子了。", + "night_5": "第五晚。这一章的夜,快要听全了。", + "night_more": "又一夜。灯还亮着,茶还热着。", + "recap_go": "接着张罗。", + "rent_due": "今天是房钱的日子,这一回,二十文。", + "rent_ok": "房钱交清,秦婶没多话。", + "rent_short": "房钱不够,差的那几文先记在账上。秦婶撂下一句:下回一起算。", + "res_good": "这一盏,泡得地道。", + "res_plain": "这一盏,泡得中平。", + "res_wrong": "这一盏,泡岔了——不是客人今晚要的那口。", + "serve_link": "你把茶端了过去。", + "settings_hint": "音色、语速、背景音乐,请回大厅修改。", + "settle_night": "熄了灯,这一晚就过去了。单击,睡下。", + "shi_e_a": "成绩出来了,比模拟考高了四十多分!这盏茶,算我请全茶馆的!", + "shi_e_b": "考完了,心里反倒空荡荡的。去哪读书,听爸妈安排吧。", + "shi_e_c": "考砸了,茶也不对味……但至少,这儿的灯一直亮着。", + "shi_enter": "老板……还有位子吗?我背单词,背得头疼。", + "shi_o1": "想喝点香的提提神,但别太浓——喝完回家还得睡,明天早读。", + "shi_o2": "模拟考砸了,心里烧得慌。想喝口最清火的。", + "shi_o3": "考完了!今晚想喝口金贵的,犒劳自己。", + "shi_r1_good": "好香!脑子清醒了。这是我攒的早饭钱……值了。", + "shi_r1_plain": "还行吧。单词它还是不进脑子。", + "shi_r1_wrong": "有点苦……没事,我泡的方便面更苦。", + "shi_r2_good": "凉丝丝的,火气下去一半。老板,你说我还能考上吗?……算了,当我没问。", + "shi_r2_plain": "茶一般,我也一般,挺配的。", + "shi_r2_wrong": "不是这个味儿……回家还得接着刷题。", + "st_debt_1": "账上,还欠着秦婶的钱。", + "st_guest_1": "今晚第一位客人。", + "st_guest_2": "今晚第二位客人。", + "st_guest_3": "今晚第三位客人。", + "st_guest_4": "今晚第四位客人。", + "st_guest_5": "今晚第五位客人。", + "st_purse_1": "钱箱见底,不到十文。", + "st_purse_2": "钱箱周转得开,不愁明日开销。", + "st_purse_3": "手头宽裕,二十五文往上。", + "st_rep_1": "口碑还没立起来,街坊不知道巷子里有这家茶馆。", + "st_rep_2": "有了回头客,口碑立住脚了。", + "st_rep_3": "巷子口都在传你的茶,小有名气。", + "st_rep_4": "一盏难求,茶客口耳相传。", + "steep_early": "出急了,茶还睡着。这一步,偏了。", + "steep_late": "闷过了,汤要发苦。这一步,偏了。", + "steep_ok": "出汤,正好。", + "su_e_a": "我调去白天班啦,还能常来。给你带我们科的喜糖。", + "su_e_b": "还在犹豫,夜班再值一季。好在这盏茶,够我撑到天亮。", + "su_e_c": "我递了辞呈,往后去哪还没想好。但今晚茶馆的灯,我记住了。", + "su_enter": "请问……还营业吗?我刚下夜班。", + "su_o1": "胃里发凉,人空荡荡的。想要一盏暖的,别太冲,喝完好睡。", + "su_o2": "今晚换个口味,想要香的。可我还得眯一会儿才接班。", + "su_o3": "最后一晚了,明天起不用值夜班。还是头一回那种,暖的。", + "su_r1_good": "好暖……像被窝里塞了个汤婆子。谢谢你。", + "su_r1_plain": "嗯,是热乎的。今晚,凑合能睡。", + "su_r1_wrong": "这盏……有点寒。没关系,是我没说清。", + "su_r2_good": "真香啊……今夜走了位老人,家属拉着我的手道谢。这盏茶,敬他们。", + "su_r2_plain": "茶还行。今夜病房平静,平静得累人。", + "su_r2_wrong": "香气没出来……像我今晚的运气。算了。", + "sys_continue_ask": "检测到没打烊的茶馆。单击继续,右滑两次重开新店。", + "sys_help": "左右滑选茶,单击定下。听水声,双击提壶;滴答密,双击出汤。上滑状态,下滑菜单。", + "sys_menu": "菜单。单击切换,双击确认。", + "sys_menu_help": "重新听帮助。", + "sys_menu_resume": "回到堂前。", + "sys_menu_save": "保存并回大厅。", + "sys_menu_upg": "打烊置办。", + "sys_reset_ask": "重开新店?口碑和存款都从头来。再右滑一次,确认。", + "sys_saved": "进度已保存。", + "tea_dianhong": "滇红。红茶性暖,滚水冲,经得住闷,越闷越醇。", + "tea_longjing": "龙井。绿茶性鲜:水将沸就提壶,出汤要快。", + "tea_moli": "茉莉花茶。香靠滚水激:水滚透再冲,出汤要快。", + "tea_puer": "普洱。老茶经泡:滚水才泡得开,多闷一会儿更醇。", + "tea_tieguanyin": "铁观音。乌龙要滚水才醒,闷到滴答密了再出汤。", + "tea_yinzhen": "白毫银针。嫩芽金贵:水将沸就提,闷到滴答密。", + "tut_d0": "先看茶柜。左右滑,一罐一罐听。", + "tut_done": "都会了。往后每一晚,都这么泡。", + "tut_serve": "茶好了。单击,端出去。", + "tut_skip": "已跳过教学。左右滑选茶,单击选定,双击动手。", + "tut_status": "上滑,听今晚的局面:第几位客人,口碑如何;客人要的茶,上滑灶上随时再听。", + "tut_steep": "注水,闷泡。滴答由稀到密,密起来就是将好——双击,出汤。", + "tut_tea": "单击,选定这罐茶。", + "tut_water": "灶上坐水。泡泡细密是将沸,咕嘟连片是滚透——听到细密,双击提壶。", + "upg_cabinet": "茶柜扩容,十五文。往后普洱、白毫银针,都上柜。", + "upg_lock": "招牌还挂不得:口碑得十二分往上,欠账也得清。", + "upg_none": "眼下的钱和账,还置办不起。改日再说。", + "upg_open": "要添置点什么?左右滑看,单击买定。", + "upg_sign": "立一块招牌,二十文。要口碑立得住——十二分往上才挂。", + "upg_teaware": "添一副新茶具,十二文。手上更准,火候窗更宽。", + "water_early": "急了,水还没醒透。这一步,偏了。", + "water_late": "水滚老了。这一步,偏了。", + "water_ok": "正是时候。", + "zhou_e_a": "明天铺子歇一天,儿子回来帮我盘货。这盏茶,记你头上了!", + "zhou_e_b": "电话里跟儿子拌了两句嘴。没事——茶还热着,日子还长。", + "zhou_e_c": "铺子我想关了,儿子叫我过去帮工。茶馆的灯,替我多亮会儿。", + "zhou_enter": "小掌柜!老位置,还给我留着呢吧?", + "zhou_o1": "修了一天车,嗓子眼里全是机油味。就你那龙井,给我去去火。", + "zhou_o2": "今天冷。来盏顶饱的、浓的,扛饿又扛冻。", + "zhou_o3": "今晚就想要头一回那盏。一样的,再来一份。", + "zhou_r1_good": "嚯!就是这个味儿!多谢啦,小掌柜。", + "zhou_r1_plain": "嗯……还行。今天手底下,差了点意思。", + "zhou_r1_wrong": "这是我要的龙井吗?……算了算了,凑合喝。", + "zhou_r2_good": "对喽,暖到脚后跟了!跟你说——我儿子今天来电话了。", + "zhou_r2_plain": "茶是茶,水是水,差点火候。儿子的事,改天再说吧。", + "zhou_r2_wrong": "……今晚这盏不对。儿子的事,不说也罢。" } - }, - "abyss": { - "b_go": "第一潜,找船。耳朵交给声呐。", - "b_goal": "海燕号,五个人。你的双瓶,够下四潜。", - "b_open": "风停了。我站在问海号甲板上,下面三千米,是海燕号。", - "b_rule": "规矩就一条:气不够一潜,人就必须上浮。", - "bai_a": "哈哈,救援的?我这腿,跟冷却管缠上了。", - "bai_b": "艇上的药板烧了。病舱那两个,比我悬。", - "bai_out": "腿还在!我的腿还在!走,我给你带路。", - "bai_thanks": "这片海养着一村人。这份情,我记一辈子。", - "chen_a": "你来了。小郑股骨断了,我给他固定好了。", - "chen_b": "救援钟一次带一个。我是医生,我最后走。", - "chen_last": "去吧。灯我留着,人齐了就熄。", - "chen_stay": "去吧。我守着灯,灯不灭,人就不散。", - "chen_up": "……好。小郑,等我,上面给你热粥。", - "d1_code": "是老白的暗号:腿被压住,先泄压,再撬。记住这个敲法。", - "d1_listen": "都别出声。管子那头,敲得很稳。", - "d1_log": "日志里有失事前,最后一段录音。给你,替我们收好。", - "d1_nolog": "日志可以补,人不能等。走了。", - "d1_surf": "小舟出水,第一潜收工。往返,扣三格气。", - "d1_up": "小舟,抓住我的肩锁。我们上。", - "d2_cut": "切割枪。老白,闭眼,憋气。", - "d2_flash": "火花炸了一下,虚惊。老白咳着,腿抽出来了。", - "d2_leave": "阀门交给母船。你先上,腿要紧。", - "d2_pry": "老白,忍住。先泄压,再撬。", - "d2_pry_ok": "暗号没白听。管子一松,钢梁抬起来了。", - "d2_pry_slow": "摸着找泄压阀,多费了一格气。腿,出来了。", - "d2_supply": "潜友阿凯捎来应急瓶。甲板上,粥给你温着。", - "d2_surf": "老白出水。他一直扒着舱门,往水里看。", - "d2_valve": "电池舱我陪你去。这片海不能脏。", - "d2_valve_e": "阀门关死了。两格气,换一片干净海。", - "d3_chen": "陈医官,你的手在抖。这次,听我的。", - "d3_chen_e": "陈医官出水。小郑固定在吊床上,呼吸平稳。", - "d3_promise": "四小时内,我下来。等我。", - "d3_spare": "备用瓶留下。灯,给我亮着。", - "d3_spare_e": "备用瓶挂上了,能多撑十二小时。", - "d3_surf": "病舱的人出水。海燕号的呻吟,隔着水都听得见。", - "d3_zheng": "小郑先走。陈医官,下一潜,就是你的。", - "d3_zheng_e": "小郑吊上去了。他一路,都没敢出声。", - "d4_fast": "来不及了。直浮!", - "d4_fast_e": "违规快浮。医疗舱的灯,先给你们开好。", - "d4_pick_chen": "陈医官,轮到你了。抓住,上浮。", - "d4_pick_gao": "船长,抓住我。海燕号的事,上面再说。", - "d4_pick_zheng": "小郑,吊床连人一起。走了。", - "d4_silent": "纪律就是纪律。抓住,上浮。", - "d4_slow": "逐站停,慢慢浮。规矩不能破。", - "d4_slow_e": "减压站一个个过。气瓶在跳,人稳着。", - "d4_stay_lost": "另一位,留在了倾斜的船舱。航标灯,替所有人亮着。", - "d4_surf": "最后一潜收工。问海号的甲板,从没这么亮过。", - "d4_talk": "日志我听完了。海燕号为什么沉,我会带上去。走吧。", - "d9_bell": "最后一潜。不为救人,为个交代。", - "d9_bello": "船钟出水。海燕号的声音,回家了。", - "d9_rest": "交代,留给明天的人。我去医疗舱。", - "dry_a": "气瓶用干了。立刻上浮。", - "dry_b": "气花在了人身上。人,都上来了。", - "dv1_down": "下潜开始。水会越来越黑,声音会越来越多。", - "dv1_link": "回波后面有杂音,是电台!接通了。", - "dv1_metal": "金属回波,钢板。听见这个,就是海燕号的船身。", - "dv1_teach": "到深度了。声呐静了。单击,发一枚脉冲。", - "dv2_down": "第二潜,机舱。顺着敲管的声音走。", - "dv2_found": "碎石回波后面,敲管声密了。机舱到了。", - "dv3_down": "第三潜,病舱。海燕号在倾斜,别恋战。", - "dv3_groan": "回波发闷。船体在呻吟,它撑不久了。", - "dv4_down": "最后一潜,指挥舱。海燕号,撑不住了。", - "dv4_dual": "两个人下同一潜。这趟往返,扣四格气。", - "dv4_none": "气不够一潜了。第四潜,取消。", - "dv4_slide": "它滑了!抓稳索缆,指挥舱里还有人!", - "e1_a": "五个人都在甲板上。船钟的第一声,是替这条沟敲的。", - "e1_b": "三年了,我终于敢往下看。明天,想再潜一次。", - "e2_a": "五个人都救上来了。船钟,留在了沟底。", - "e2_b": "没人怪我。可半夜醒来,总听见钟在响。", - "e3_a": "没能都带回来。可我到底下去了,敲响了那口钟。", - "e3_b": "钟声替他们,在沟底响了一声。这样,也好。", - "e4_a": "我按规矩上浮了。规矩里,没写怎么难过。", - "e4_b": "沟底很安静。安静得,像三年前那天。", - "ep_bai_no": "老白:腿打了钢钉。他说,瘸着也值。", - "ep_bai_ok": "老白:腿保住了。阀门那夜之后,见人就夸你。", - "ep_chen_lost": "陈医官:她守着灯,到最后一小时。灯,还亮着。", - "ep_chen_ok": "陈医官:回了医院。诊室里,挂着一盏海底的灯。", - "ep_gao_lost": "高船长:随海燕号留在沟底。航标灯,还亮着。", - "ep_gao_peace": "高船长:退役申请自己写的。第一行写着:数据不如人。", - "ep_gao_up": "高船长:上了岸,一直没说话。听说,他在学敲管语。", - "ep_lead": "收队了。调度台给你记一笔——他们,后来怎样了。", - "ep_trench_bell": "沟底:船钟挂在问海号桅杆上。风一过,就响一声。", - "ep_trench_deep": "沟底:很深,很静。海燕号睡在里面,像睡着了。", - "ep_zheng_lost": "小郑:吊床随船,滑进了沟底。他没来得及看日出。", - "ep_zheng_ok": "小郑:拆了石膏,第一件事,去看海。", - "ep_zhou_no": "小舟:声呐日志没了。她凭记忆,重新描了一遍海图。", - "ep_zhou_ok": "小舟:归队报告打了三页。她说,声音都记得。", - "g9_dry": "一格气都不剩了。能带的,你都带回来了。", - "g9_in": "医疗舱躺满了。你的气瓶剩多少,你比我清楚。", - "g9_knot": "三年前,也是这条沟。我按时上浮了,搭档没有。", - "gao_a": "救援员。我船上,还剩两个活人。", - "gao_b": "都带走,我最后上。这是船长的规矩。", - "gao_c": "三年前……没什么。走吧,别耽误。", - "gao_confess": "日志你拿了?里面写着。是我下令,多采了一小时。", - "gao_final": "别下来。带他们回家,就算救完了。海燕号,通话结束。", - "gao_last": "航标灯替我留着。就说,船长睡了。", - "gao_peace": "……好。这一次,听救援员的。", - "gd_again": "还在吗?单击继续。", - "gd_brief": "单击继续简报。要选择时,向左或向右滑。", - "gd_continue": "单击屏幕,继续。", - "gd_invalid": "这个手势,水里用不上。", - "gd_ping1": "声呐待命。单击,发脉冲。", - "gd_ping2": "回波不会自己来。单击。", - "gd_prog1": "滑动在这里用不上。想想调度刚说的话。", - "gd_prog2": "别乱。停一下,想想下一步。", - "oxy_crit": "氧气见底,必须上浮。", - "oxy_crit_deck": "氧气见底,一潜都下不去了。", - "oxy_full": "气瓶还足,救得动。", - "oxy_gain": "应急瓶接上了,多三格。", - "oxy_low": "氧气告急,只够最后一潜。", - "oxy_ok": "氧气还够两潜。", - "p1": "管路在响。向左滑,停下来听敲管的暗号。向右滑,先带小舟上浮。", - "p2": "小舟想回去拿声呐日志。向左滑,等她。向右滑,直接上浮。", - "p3": "钢梁压着腿。向左滑,泄压后慢慢撬。向右滑,切割枪,快切。", - "p4": "老白要去关电池舱阀门。向左滑,陪他去。向右滑,直接上浮。", - "p5": "病舱一次只能走一个。向左滑,先带陈医官。向右滑,先带小郑。", - "p6": "留守的人要空气。向左滑,留下你的备用瓶。向右滑,约定下一潜来接。", - "p7": "双人上浮。向左滑,逐站减压慢慢浮。向右滑,违规直浮,搏一把。", - "p7_chen": "气只够带一个。向左滑,带船长。向右滑,带陈医官。", - "p7_zheng": "气只够带一个。向左滑,带船长。向右滑,带小郑。", - "p8": "船长的话没说完。向左滑,把你听到的说出来。向右滑,什么都不问,拉他上浮。", - "p9": "海燕号的船钟,还挂在沉船上。向左滑,用最后的气,下去取。向右滑,进医疗舱。", - "prog_d1": "现在是第一次下潜。", - "prog_d2": "现在是第二次下潜。", - "prog_d3": "现在是第三次下潜。", - "prog_d4": "现在是最后一次下潜。", - "prog_saved1": "已经救上一个人。", - "prog_saved2": "已经救上两个人。", - "prog_saved3": "已经救上三个人。", - "prog_saved4": "已经救上四个人。", - "prog_saved5": "五个人都在甲板上了。", - "sys_continue_ask": "检测到你的下潜记录。单击继续上次,右滑开始新救援。", - "sys_help": "单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。", - "sys_menu": "菜单。单击切换选项,双击确认。", - "sys_menu_lobby": "保存并回大厅。", - "sys_menu_restart": "重新开始这次救援。", - "sys_menu_resume": "回到水下。", - "sys_new_dive": "新的一次下潜,开始了。", - "sys_settings": "音色、语速、背景音乐,请回大厅修改。", - "sys_skip": "听过的句子再播时,单击就能跳过。", - "z1_a": "……有人吗?声呐兵,小舟。我们还活着,全艇五个人。", - "z1_b": "轮机长老白困在机舱,陈医官和小郑在病舱,船长在指挥舱。", - "z1_bye": "好。上面……是不是天亮了?", - "z1_knock": "等等,你听。管子里,有人在敲。" - }, - "bridge": { - "cr_decide": "听选项,下令。", - "cr_timeout": "没来得及下令。", - "die_adv_sys": "系统离线时,别把宝押在它身上。", - "die_adv_to": "早下令,勤靠港,别硬扛。", - "die_intro": "舰体解体在即,全员撤离。", - "die_meteor": "陨石撕开了船身。", - "die_pirate": "海盗的炮火击穿了舰体。", - "die_rad": "辐射熔穿了舱壁。", - "dir_bow": "方位,舰首。", - "dir_port": "方位,左舷。", - "dir_star": "方位,右舷。", - "dir_stern": "方位,舰尾。", - "doc_aid": "幸好停了船,他们撑不了多久了。", - "doc_care": "有伤员的地方,就有我。", - "doc_ignore": "……我没有什么要说的。", - "doc_trap": "有人拿求救当诱饵,小心。", - "dock_empty": "全舰状态良好,无需整备。", - "dock_go": "启航,继续巡逻。", - "dock_open": "靠港整备。左右滑看项目,单击执行。", - "eng_fix": "修好了,再听它稳稳地转。", - "eng_gripe": "护盾不是这么用的,舰长……", - "eng_sup": "交给我,三分钟,给它救活。", - "eng_wear": "老伙计累出毛病了,让我来。", - "evt_distress": "断续三短,求救信号。", - "evt_dock": "本段结束,靠港整备。", - "evt_meteor": "碎石呼啸,陨石群。", - "evt_pirate": "敌船引擎,海盗。", - "evt_radiation": "计数急响,辐射云。", - "evt_resume": "启航,下一段巡航。", - "gd_cruise": "还在巡航。上滑,巡检全舰。", - "gd_decide": "还在等命令。左右滑,听选项。", - "gd_dock": "还在整备。左右滑,单击执行。", - "gd_invalid": "这个操作,这里用不上。", - "hint_dock3": "整备完毕,就启航。", - "intro_1": "你是巡逻舰星环号的舰长。在这条航线上,耳朵就是雷达。", - "intro_2": "全舰四个系统:引擎、护盾、扫描、武器,各守一方。", - "intro_3": "引擎在舰尾低鸣,护盾在舰首嗡响。", - "intro_4": "扫描在左舷扫掠,武器在右舷充能。", - "intro_5": "危机从哪边来,哪边先遭殃。", - "loy_aid": "医师与大副,记下了这次驰援。", - "loy_breach": "工程师心疼过载的护盾。", - "loy_evade_pirate": "大副觉得,这一躲有些窝囊。", - "loy_fight_win": "大副打得尽兴,士气高涨。", - "loy_ignore": "求救没了下文,医师很失望。", - "loy_rad": "医师在处理伤员。", - "merit_1": "功勋,寥寥。", - "merit_2": "功勋,可观。", - "merit_3": "功勋,丰厚。", - "opt_aid": "驰援,靠扫描。", - "opt_breach": "硬闯,靠护盾。", - "opt_evade": "规避机动,靠引擎。", - "opt_fight": "迎战,靠武器。", - "opt_ignore": "按兵不动,不理会。", - "opt_route_rich": "矿富航线,采得多,磨损也多。", - "opt_route_safe": "稳妥航线,采集平平,太平。", - "port_back": "返回。", - "port_open": "星港整备,功勋兑换。左右滑看,单击定。", - "port_poor": "功勋不够。", - "rate_a": "出色完成巡逻。", - "rate_b": "巡逻结束,有惊无险。", - "rate_c": "巡逻结束,遍体鳞伤。", - "rate_d": "巡逻失败,弃舰撤离。", - "rate_s": "教科书巡逻,功勋卓著。", - "recap_go": "继续航行。", - "rep_engine": "修理引擎,升一级,两资源。", - "rep_ok": "修理完成。", - "rep_open": "巡逻归来,全舰记功。剩余资源已折算功勋。", - "rep_poor": "资源不够。", - "rep_scan": "修理扫描,升一级,两资源。", - "rep_shield": "修理护盾,升一级,两资源。", - "rep_weapon": "修理武器,升一级,两资源。", - "res_ambush": "遭了伏击,舰体受创。", - "res_bad": "损失惨重。", - "res_clean": "干净利落,有惊无险。", - "res_hurt": "舰体受创。", - "res_mine": "轰开碎石,采到矿材,资源加一。", - "res_plunder": "海盗击退,缴获物资,资源加二。", - "res_rad": "全船受照。", - "res_reward": "救援成功,对方致谢,资源加二。", - "route_ask": "选择巡航航线。", - "settings_hint": "音色、语速、背景音乐,请回大厅修改。", - "settle_hook": "星港期待你的下一次巡逻。单击,返航。", - "st_doc_1": "医师,离心。", - "st_doc_2": "医师,平常。", - "st_doc_3": "医师,信赖。", - "st_eng_1": "工程师,离心。", - "st_eng_2": "工程师,平常。", - "st_eng_3": "工程师,信赖。", - "st_hull_1": "舰体,稳固。", - "st_hull_2": "舰体,带伤。", - "st_hull_3": "舰体,危急。", - "st_rp_1": "资源紧张。", - "st_rp_2": "资源够用。", - "st_rp_3": "资源充足。", - "st_seg_1": "第一巡航段。", - "st_seg_2": "第二巡航段。", - "st_seg_3": "第三巡航段。", - "st_seg_4": "第四巡航段,末段。", - "st_xo_1": "大副,离心。", - "st_xo_2": "大副,平常。", - "st_xo_3": "大副,信赖。", - "sup_doc": "医师带人抢修,舰体补回一点。", - "sup_eng": "工程师出手,系统复航了。", - "sup_none": "这个岗位,眼下没人顶上。", - "sup_xo": "大副坐上炮位,火力压制!", - "sys_continue_ask": "检测到未完成的巡逻。单击继续,右滑进星港。", - "sys_engine_dmg": "引擎,受损。", - "sys_engine_off": "引擎,离线。", - "sys_help": "巡航中,上滑巡检全舰;危机中,左右滑听选项,单击下令。下滑菜单,双击重新听。", - "sys_menu": "菜单。单击切换,双击确认。", - "sys_menu_help": "重新听帮助。", - "sys_menu_restart": "放弃本次巡逻。", - "sys_menu_resume": "回到舰桥。", - "sys_menu_save": "保存并回大厅。", - "sys_new_patrol": "新巡逻,星环号启航。", - "sys_saved": "进度已保存。", - "sys_scan_dmg": "扫描,受损。", - "sys_scan_off": "扫描,离线。", - "sys_shield_dmg": "护盾,受损。", - "sys_shield_off": "护盾,离线。", - "sys_weapon_dmg": "武器,受损。", - "sys_weapon_off": "武器,离线。", - "trap_hint": "求救码后面,有引擎声,多留心。", - "tut_after": "就是这样:听声,辨型,下令。", - "tut_aid": "驰援靠扫描。我们的扫描,稳得很。", - "tut_all_ok": "四个音都稳,全舰正常。", - "tut_crisis": "有情况。听签名音,辨认类型。", - "tut_d0": "先试巡检。向上滑,听全舰状态。", - "tut_decide": "左右滑听选项,单击下令。", - "tut_done": "教学完了。舰长,航线交给你。", - "tut_loyal": "船员的心分三档:离心、平常、信赖。上滑巡检听得到。", - "tut_skip": "已跳过教学。上滑巡检,危机时左右滑听选项。", - "upg_aegis": "应急护盾,每段首次受创减一。功勋七十。", - "upg_armor1": "加装装甲,舰体上限加一。功勋四十。", - "upg_armor2": "重型装甲,舰体上限再加一。功勋六十。", - "upg_buy": "改装完成。", - "upg_done": "这项已改装到位。", - "upg_harvest": "采集协议,每段多一份资源。功勋三十。", - "upg_spare": "备用零件,出发自带一批物资。功勋二十。", - "upg_vet": "老兵船组,开局全员忠诚加一。功勋五十。", - "xo_aid": "驰援是应该的,星环号不是过路人。", - "xo_fight": "舰长,交给我,炮位就绪!", - "xo_uneasy": "又是一路躲。舰长,弟兄们想打。", - "xo_win": "打得漂亮,这条航线够他们传一阵子。" - }, - "cipher": { - "b_chief": "四封电文,一封都不许漏。你的耳朵,是处里最值钱的东西。", - "b_goal": "今晚频道里有四封密电。每一个字,都要过你的耳朵。", - "b_open": "民国二十九年,江城。电讯处的夜班,从零点的电波声开始。", - "b_rule": "北风问候你。规矩就一条:听不清,就再听一遍。", - "book_0": "密码本,一页都不剩了。", - "book_1": "密码本,只剩最后一页。", - "book_2": "密码本,还剩两页。", - "book_3": "密码本,还剩三页。", - "cand_bay": "货船。", - "cand_day": "客车。", - "cand_hand": "今夜交接。", - "cand_land": "地点变更。", - "cand_ray": "巡逻艇。", - "cand_sand": "明晨交接。", - "cand_say": "约谈。", - "cand_sly": "内部排查。", - "cand_spy": "内线确认。", - "cand_tap": "窃听令。", - "cand_tip": "线人费。", - "cand_top": "黑名单。", - "cf_confirm": "就这个词?再单击,定下来。", - "d9_caught_e": "信号被咬住了。别回头,走水路。快。", - "d9_send": "北风,北风。处置令,今夜三时。撤。", - "d9_send_e": "收到了。你的手法,我听了一整晚。快走。", - "d9_sleep": "机关上了。雨声里,只剩挂钟。", - "d9_sleepe": "天亮之前,还有两个钟头。守住。", - "dv1_ask": "密码本第一页。三个词,哪个是它?", - "dv1_right": "货船,译对了。药品,装在货船的底舱。", - "dv1_teach": "电文进来了。先双击,把它重新听一遍。", - "dv1_teach2": "左右滑,听密码本上的候选词。单击,选定一个。", - "dv1_wrong": "不对。听清楚:B,一长,三短。", - "dv2_ask": "密码本第二页。三个词,选一个。", - "dv3_ask": "密码本第三页。三个词,选一个。", - "dv4_ask": "密码本第四页。三个词,选一个。", - "e1_a": "电波追不上我了。码头的灯,一盏一盏地灭。", - "e1_b": "新的密码本,在城外渡口等我。黎明,比想象中安静。", - "e2_a": "交了班,一切照旧。没人知道今晚频道里发生过什么。", - "e2_b": "只是北风的呼叫,到天亮也没人接。下一次,我会接吗。", - "e3_a": "我把警报拍了三遍。门开的时候,挂钟正好敲三点。", - "e3_b": "审讯室的灯,也很亮。可码头那边,一个人都没少。", - "e4_a": "两点五十九分,脚步停在门口。我把最后一页密码,塞进了炉子。", - "e4_b": "耳机还挂着。里面有一封电文,永远译不完了。", - "end_c1": "这是你在电波里挣下的第一个结局。", - "end_c2": "这是你在电波里挣下的第二个结局。", - "end_c3": "这是你在电波里挣下的第三个结局。", - "end_c4": "四个结局,都收进你的密码本了。", - "ep_hand_no": "交接:码头的灯,白亮了一夜。", - "ep_hand_ok": "交接:胶卷上了船,手很稳。", - "ep_lead": "天亮了。北风给你记了最后一笔账——今晚的事,都有了去向。", - "ep_list_no": "名单:天亮时,多了一个红圈。", - "ep_list_ok": "名单:码头连夜搬了家。卷宗里,少了一个人。", - "ep_med_no": "药品:没人接住那三箱药。船,白白过了江。", - "ep_med_ok": "药品:货船丑时靠岸,三箱药,一箱不少。", - "ep_spy_no": "处置令:差的那三个字母,差了一整条命。", - "ep_spy_ok": "处置令:你译对了它。北风,撤在你前头。", - "exp_calm": "这一晚,还没人看你第二眼。", - "exp_hot": "门外,好像有人换了岗。", - "exp_low": "处长端着茶,多看了你一眼。", - "exp_mid": "走廊里的脚步声,慢了下来。", - "g9_in": "频道要收了。最后一件事,是你自己。", - "g9_knot": "三年前,我译错了一封电。那之后,我再没见过我的上线。", - "gd_again": "还在吗?单击继续。", - "gd_brief": "单击继续值机。要选词时,向左或向右滑。", - "gd_continue": "单击屏幕,继续。", - "gd_invalid": "这个手势,值机室里用不上。", - "gd_prog1": "光切词没有用。双击,先听电文。", - "gd_prog2": "别急。停下来,把电文听完整。", - "gd_tune1": "电文在等。左右滑,听候选词。", - "gd_tune2": "双击,把电文再听一遍。再双击,会放慢。", - "hint_t1": "我教你一页:第一个字母,是 B。一长,三短。", - "hint_t2": "翻到这页:第二个字母,是 O。三长。", - "hint_t3": "翻到这页:第一个字母,是 H。四短。", - "hint_t4": "翻到这页:第二个字母,是 P。短,两长,短。", - "m2_chief": "嗯,译得很全。去吧。", - "m4_chief_a": "值机员,今晚的频道,很热闹啊。", - "m4_chief_b": "你的耳朵最好。听见什么,记得……要报。", - "m4_chief_c": "行。去睡吧,明天还有明天的事。", - "n1": "零点半。挂钟走了半圈,雨没有停。", - "n2": "一点整。处长的灯,还亮着。", - "n3": "一点三刻。雨小了,频道里很静。", - "p2": "药品船,丑时过江。向左滑,把船期报给北风。向右滑,压进值机日志。", - "p4_blind": "一封通报。向左滑,压进抽屉,谁的耳朵也别装。向右滑,按流程呈报处长。", - "p4_known": "名单上有码头。向左滑,暗号示警,让他连夜搬家。向右滑,按流程呈报处长。", - "p6": "交接在你手里。向左滑,亲自去码头跑一趟。向右滑,留书暗号,托给下一班。", - "p8_blind": "收台之前。向左滑,回一封例行电文,搅一搅水。向右滑,什么都不做。", - "p8_known": "三点之前。向左滑,拍一封假电,说北风昨夜已撤。向右滑,手离开放键器,装傻。", - "p9_blind": "北风在等答复。向左滑,开机,把今晚发出去。向右滑,例行收台。", - "p9_known": "收网之前。向左滑,开机,发最后一电。向右滑,关机,装睡到天亮。", - "prog_t1": "现在是今晚第一封电文。", - "prog_t2": "现在是第二封,内部通报。", - "prog_t3": "现在是第三封,交接电文。", - "prog_t4": "第四封,最后一封。", - "r1a_e": "收到。江上有人等你。第一封,做得稳。", - "r1a_send": "北风,北风。货船,丑时过江,接住。", - "r1b_e": "日志下面压着的,是三箱药。船,不会等你。", - "r1b_hold": "先压一压。这一船的事,得看清楚再说。", - "r2a_act": "有的字,不能落进卷宗。", - "r2a_e": "这一页,从今天起,不存在了。", - "r2b_act": "通报誊清,呈处长。", - "r2b_e": "名单进了卷宗。码头,自己多保重。", - "r3a_e": "值班室空了一刻钟。值机日志,停了一行。", - "r3a_go": "口令我背得出。今夜,我亲自去。", - "r3b_act": "暗号夹进交接簿,让雨替我跑这一趟。", - "r3b_e_no": "交接的袋子,在码头放到了天亮。", - "r3b_e_ok": "交接赶上了。袋子,连夜上了船。", - "r4a_e": "假电出了门。对家的耳朵,听得出换人了吗。", - "r4a_feed": "戴上手键。这一封,借快手七的手法。", - "r4b_act": "手,离开放键器。我只是个值机的。", - "r4b_e": "有时,什么都不做,就是做了。", - "rev_hand": "今夜交接。丑时,老码头。", - "rev_land": "地点变更。等下一封。", - "rev_sand": "明晨交接。天亮再说。", - "rev_say": "明早九时,约谈相关人员。", - "rev_sly": "即日起,排查站内三人。", - "rev_spy": "内线确认,今夜三时收网。代号,耳机。", - "rev_tap": "窃听令。今夜,有人要装耳朵。", - "rev_tip": "线人费。月底之前,有人要收钱。", - "rev_top": "黑名单。头一个代号,叫码头。", - "rx1_in": "第一封。江上船队的调度,拍得很稳。", - "rx2_in": "第二封。手法很急,是内部通报。", - "rx3_in": "第三封。很短,手法有点抖。", - "rx4_in": "第四封。最后一个手法,你听过——快手七。", - "sys_continue_ask": "检测到你的值机记录。单击继续上次,右滑开始新的夜班。", - "sys_help": "单击选定,双击重新听电文。上滑听状态,下滑开菜单。选择时,左右滑。", - "sys_menu": "菜单。单击切换选项,双击确认。", - "sys_menu_book": "翻密码本,换一个字母。", - "sys_menu_lobby": "保存并回大厅。", - "sys_menu_restart": "重新开始今晚。", - "sys_menu_resume": "回到电波里。", - "sys_new_night": "新的夜班,开始了。", - "sys_settings": "音色、语速、背景音乐,请回大厅修改。", - "sys_skip": "想跳过这句,单击就行。" - }, - "detective": { - "acc_ge": "我守了一夜门!温太太来借热水,她能作证!", - "acc_shun": "我宿在城南刘掌柜家,他全家都能作证!", - "acc_wen": "我这把年纪翻墙?先问问那墙答不答应!", - "acc_zhou": "我十点就到家了!我家婆娘能作证!", - "b_hint_c1": "试试指证:小顺说熄了灯,温太太说灯还亮着。", - "b_hint_c2": "试试指证:小顺说铜秤卖了,现场铜秤还在。", - "b_shun_1": "我走的时候,顺手熄了店堂的灯。", - "b_shun_2": "钥匙,师父贴身带着,从不离身。", - "b_shun_3": "那伤,八成是柴房劈柴砸的。铜秤早卖给收废品的了。", - "b_shun_4": "库房的货,我一件都没碰过。", - "b_shun_break_1": "匣子是我送的,可我半路折回来了……", - "b_shun_break_2": "我把棉袄反穿,弓着背,葛大爷没认出我。", - "b_shun_break_3": "库房的货,我拿过三件换了钱。他说要对账……秤砣下去的时候,他看着我。", - "b_shun_react_1": "灯?我、我走的时候明明熄了……", - "b_shun_react_2": "别问了……别问了……", - "b_zhou_1": "我对完账就回家了,夜里雨大,路上没停。", - "b_zhou_2": "钥匙?平时就挂在柴房铜钩上,十年了。", - "b_zhou_3": "柴房我常去,没什么不对劲的。", - "cf_confirm": "就这句?单击,定下来。", - "cf_diff": "这两句,说的不是一件事。", - "cf_hit": "对不上!矛盾成立,记入疑点。", - "cf_pick_line": "左右滑,一句一句听。", - "cf_same": "这两句说得一致,不矛盾。", - "cf_second": "再选与它矛盾的那份证词。", - "cf_self": "同一句证词,和自己比不出矛盾。", - "cf_start": "指证矛盾。先选第一份证词。左右滑换,单击确认。", - "fin_ask_motive": "第三问:动机是什么?", - "fin_ask_weapon": "第二问:凶器是什么?", - "fin_clear": "不在场证明成立。证据放人,回到证词板。", - "fin_mv_right": "对。库里短的东西,就是引线。", - "fin_mv_wrong": "不对。账上短的东西,才是引线。记下了。", - "fin_pre": "证据在手,就此结案?单击,定下来;滑走,继续查。", - "fin_right": "证据链闭合。周先生,你还有什么话说?", - "fin_right_b": "证据链闭合。小顺,你还有什么话说?", - "fin_start": "结案陈词。先指认真凶:四位证人,选一个。", - "fin_who_confirm": "就指认这位?单击,定下来。", - "fin_wp_right": "对。创口的铜屑,不见了的秤砣,都指向它。", - "fin_wp_wrong": "不对。铜屑不答应。记下了。", - "fo_1": "验尸报告,念给你听。", - "fo_2": "死亡时间,昨夜十点到十点半。", - "fo_3": "后脑单次钝器伤,一击毙命。创口嵌有铜屑,凶器是铜器。", - "fo_4": "死者双手干净,没有搏斗痕迹。", - "fo_5": "鞋底是干的。当夜,死者没出过后门。", - "gd_board": "还在证词板。左右滑,换卷宗。", - "gd_board_cf": "都听过了。按住屏幕,去指证。", - "gd_cf": "还在选证词。左右滑,单击确认。", - "gd_fin": "在想?左右滑选,单击定。", - "gd_invalid": "这个操作,这里用不上。", - "hint_a": "探长,还没听的卷宗,先过一遍耳朵。", - "hint_b": "探长,证词里有对不上的地方,逐句比对。", - "hint_c1": "试试指证:周先生说熄了灯,温太太说灯还亮着。", - "hint_c2": "试试指证:周先生说铜秤卖了,现场铜秤还在。", - "hint_fin": "疑点齐了。去结案陈词。", - "intro_1": "雨下了一整夜。清晨,聚宝斋后院,古董商沈万川死了。", - "intro_2": "你是专案组探长。这桩案子,归你。", - "intro_3": "卷宗六份:四位证人的证词,现场勘验,法医报告。", - "intro_w3": "周先生,管了十年的账,见人三分笑。", - "item_case": "结案陈词。", - "item_fore": "法医报告。", - "item_scene": "现场勘验。", - "item_w1": "门卫老葛的证词。", - "item_w2": "学徒小顺的证词。", - "item_w3": "账房周先生的证词。", - "item_w4": "房东温太太的证词。", - "item_who_w1": "门卫老葛。", - "item_who_w2": "学徒小顺。", - "item_who_w3": "账房周先生。", - "item_who_w4": "房东温太太。", - "mv_1": "监守自盗。", - "mv_2": "寻仇泄愤。", - "mv_3": "劫财入户。", - "rate_a": "干净利落的结案。", - "rate_b": "案子结了,卷宗上有疏漏。", - "rate_c": "案子是结了,卷宗上补丁不少。", - "rate_s": "教科书结案。四处疑点,一击即中。", - "recap_cf": "卷宗都在耳朵里了。挑一句你不信的,按住指证。", - "recap_go": "接着查。", - "sc_0": "你打伞进了后院。雨水顺着瓦檐,淌成一道帘子。", - "sc_1": "柴房门口,沈万川面朝下倒着。后脑一处伤,现场没有凶器。", - "sc_2": "后门门闩完好,是死者自己开的门。生人叫不开这扇门。", - "sc_3": "泥地上只有进来的脚印,没有出去的。墙根的花盆,翻了一个。", - "sc_4": "库房铜秤立在架上,秤砣不见了。", - "sc_5": "柴房墙上,挂钥匙的铜钩,空着。", - "settings_hint": "音色、语速、背景音乐,请回大厅修改。", - "settle_hook": "同一场雨里,还有别的案子。单击,接新案。", - "settle_open": "案件归档。雨,停了。", - "st_asked_0": "六份卷宗,一份都没听。", - "st_asked_1": "已听一份,还有五份。", - "st_asked_2": "已听两份,还有四份。", - "st_asked_3": "已听三份,还有三份。", - "st_asked_4": "已听四份,还有两份。", - "st_asked_5": "已听五份,还有一份。", - "st_asked_6": "六份都听完了。", - "st_doubt_0": "疑点,还没有。", - "st_doubt_1": "疑点,一处。", - "st_doubt_2": "疑点,两处。", - "st_doubt_3": "疑点,三处。", - "st_doubt_4": "疑点,四处,齐了。", - "st_miss_0": "指证,一次没错。", - "st_miss_1": "指证,错过一两回。", - "st_miss_2": "指证,错了不少。", - "st_wrong": "错指一回,记档。", - "sys_continue_ask": "检测到未结的案子。单击继续,右滑换一桩新案。", - "sys_help": "左右滑换卷宗,单击听取,双击重新听。长按指证,上滑状态,下滑菜单。", - "sys_menu": "菜单。单击切换,双击确认。", - "sys_menu_cf": "去指证。", - "sys_menu_help": "重新听帮助。", - "sys_menu_restart": "重新查这桩案子。", - "sys_menu_resume": "回到证词板。", - "sys_menu_save": "保存并回大厅。", - "sys_new_case": "新案开卷。", - "sys_saved": "进度已保存。", - "tut_cf_ok": "指证就是这样。练习不算数,真矛盾要靠耳朵找。", - "tut_cf_try": "练习一次。选一份证词,单击确认;再选一份,任意一句。", - "tut_confront": "按住屏幕,进入指证。去找两句对不上的证词。", - "tut_d0": "先熟悉证词板。左右滑,换卷宗。", - "tut_done": "教学完了。开始查案。", - "tut_listen": "单击,听取当前卷宗。", - "tut_replay": "双击,重新听这一句。", - "tut_skip": "已跳过教学。左右滑换卷宗,单击听取;按住屏幕,指证矛盾。", - "tut_status": "上滑,随时听进度:问了几份,疑点几处。", - "w1_1": "昨儿夜里雨大,我守着街门,一步没敢挪窝。", - "w1_2": "九点四十,雨点子刚砸下来,小顺打着伞出的街门。", - "w1_3": "十点一刻,一位先生收着黑伞进了后巷。个儿高,微驼背。", - "w1_4": "九点五十,周账房出的街门,跟我说了声,回家。", - "w1_5": "后半夜,温太太还来门房借过一回热水。", - "w1_6": "听说店里账上短了银子,沈老板撂了话,月底清账。", - "w2_1": "夜里,师父打发我去城南,给刘掌柜送匣子。", - "w2_2": "雨太大,刘掌柜留我住的,今早才回店。", - "w2_3": "库房钥匙?师父嫌沉,平日就挂在柴房墙上的铜钩。", - "w2_4": "师父的账,向来只信周先生一个人。", - "w2_5": "后门那闩,生人叫不开。熟人来了,师父才亲自去开。", - "w2_6": "周先生常念叨,账房的活,越到夜里越清静。", - "wen_1": "雨是九点四十下的。我正收晾的衣裳,记得真真的。", - "wen_2": "十点二十,我出门倒垃圾。聚宝斋店堂的灯,亮着呢。", - "wen_3": "刚回屋,柴房后墙咯噔一响,有人爬墙!花盆翻了一个。", - "wen_4": "吓得我蒙头半宿没睡着,天亮才敢吱声。", - "wen_5": "店里短银子的事,街坊都有耳闻。上礼拜他还摔了账本。", - "wen_6": "周账房那人,见人三分笑,账算得比谁都精。", - "wp_1": "松木劈柴。", - "wp_2": "铜秤砣。", - "wp_3": "铁门闩。", - "wp_4": "青瓷花盆。", - "z_1": "我七点进店上夜账。九点五十对完,锁了前门回家。", - "z_2": "临走,我顺手熄了店堂的灯。那会儿,店里就剩老板。", - "z_3": "库房钥匙?沈老板贴身带着,从不离身。", - "z_4": "那伤,是松木劈柴砸的。铜秤?上个月卖给收废品的了。", - "z_5": "我到家倒头就睡,夜里的事,一概不知。", - "z_6": "你们要是不信,去问我家婆娘。", - "z_break_1": "别念了……我说。库房短的三件货,是我抵了赌债。", - "z_break_2": "他说月底清账,要报官。我求他,他不肯。", - "z_break_3": "我只想把钥匙放回去,把被盗做真。抡起秤砣的时候,他认出了我。", - "z_react_1": "灯?……许是我记岔了。人上了岁数,记性不济。", - "z_react_2": "钥匙的事……他、他有时候,也贴身带着的……", - "z_react_3": "秤!秤的事,你们别再问了……", - "z_react_4": "……随你们怎么问。我要回去了。", - "z_react_w": "铜器?……我那是顺口猜的。凶器的事,我怎么会知道。" - }, - "dungeon": { - "btl_bat": "盲眼蝠扑了过来!", - "btl_behind": "它在你背后,转身再挡。", - "btl_crab": "窟主石甲蟹,就在你面前。", - "btl_crawler": "绕行者贴上来了,小心背后!", - "btl_flee": "你甩掉了它,被抓了一下。", - "btl_flee_boss": "退路塌了,跑不掉!", - "btl_guard": "石像卫醒了!", - "btl_half_crab": "石甲蟹的甲裂了!", - "btl_half_king": "王怒了,脚步更重了!", - "btl_half_leech": "腐沼蟒暴怒了!", - "btl_kill": "它倒下了。", - "btl_king": "窟中之王,就在深处。", - "btl_leech": "窟主腐沼蟒,挡住了楼梯。", - "btl_loot_1": "战利不多。", - "btl_loot_2": "小有收获。", - "btl_loot_3": "大有收获。", - "btl_lvup": "你的拳脚更利落了。", - "btl_mush": "蘑菇怪拦住了你!", - "btl_no_turn": "它贴着你不放,不用转身。", - "btl_parried": "挡下了大半!", - "btl_rat": "窟鼠窜了出来!", - "btl_spider": "洞蛛落地了!", - "btl_swish": "挥空了,它不在你面前。", - "die_adv_1": "下次,前摇声响时就双击。", - "die_adv_2": "打不过,就按住屏幕逃跑。", - "die_adv_3": "身后有动静,先转身。", - "die_cause_1": "你被小怪拖垮了。", - "die_cause_2": "你没挡住那记重击。", - "die_cause_3": "你背后的偷袭,要了命。", - "die_intro": "你倒下了。", - "evt_armor": "换上更硬的护甲,更抗打了。", - "evt_coin_1": "捡到几枚金币。", - "evt_coin_2": "捡到一小把金币。", - "evt_coin_3": "捡到一大袋金币。", - "evt_descend": "你顺着楼梯,往下潜。", - "evt_potion": "一瓶药水,收进腰带。", - "evt_potion_full": "腰带满了,药水留在原地。", - "evt_stairs_lock": "楼梯被大东西堵住了,先赢它。", - "evt_weapon": "捡到更快的短刃,出手更狠了。", - "gd_invalid": "这个操作在这里用不上。", - "gd_pulse": "单击脉冲,听听四周。", - "gd_turn": "轮到你了。单击挥击。", - "gold_some": "带回来一点,不多。", - "help_battle": "敌人前摇声响时双击格挡,单击挥击。打不过就按住屏幕逃跑。", - "help_explore": "单击脉冲,按住前进,左右滑转身。双击再听,上滑状态,下滑菜单。", - "intro_1": "你在黑暗中醒来。这里是回声地窟。", - "intro_2": "伸手不见五指,声音就是你的眼睛。", - "meta_gold_1": "这趟没带回什么。", - "meta_gold_2": "这趟带回一些金币。", - "meta_gold_3": "这趟满载而归。", - "nav_done": "到了,就是这里。", - "nav_e": "往东。", - "nav_n": "往北。", - "nav_s": "往南。", - "nav_w": "往西。", - "settings_hint": "音色、语速、背景音乐,请回大厅修改。", - "settle_again": "单击,再探一次。", - "settle_stronger": "下个周目,你会更强。", - "settle_win_1": "你捧起了地窟之心,通关了!", - "settle_win_2": "黑暗的尽头,是光。", - "st_best_1": "你还没到过第三层。", - "st_best_2": "你最远到过中层。", - "st_best_3": "你到过最深层。", - "st_face_e": "你面朝东。", - "st_face_n": "你面朝北。", - "st_face_s": "你面朝南。", - "st_face_w": "你面朝西。", - "st_floor_1": "这是第一层。", - "st_floor_2": "这是第二层。", - "st_floor_3": "这是第三层。", - "st_floor_4": "这是第四层。", - "st_floor_5": "这是第五层。", - "st_floor_6": "这是第六层。", - "st_floor_7": "这是第七层。", - "st_gold_1": "口袋空空。", - "st_gold_2": "有些积蓄。", - "st_gold_3": "收获可观。", - "st_gold_4": "腰包鼓鼓。", - "st_hp_1": "你毫发无损。", - "st_hp_2": "你受了点伤。", - "st_hp_3": "你伤势不轻。", - "st_hp_4": "你命悬一线。", - "st_threat_both": "两边都有动静。", - "st_threat_left": "左边有脚步声。", - "st_threat_none": "附近很安静。", - "st_threat_right": "右边有脚步声。", - "stair_dir_e": "楼梯在东边。", - "stair_dir_n": "楼梯在北边。", - "stair_dir_s": "楼梯在南边。", - "stair_dir_w": "楼梯在西边。", - "stair_hint_a": "找找铁器的回声,那是楼梯。", - "stair_hint_b": "楼梯有大东西守着,先赢它。", - "sys_continue_ask": "检测到探窟记录。单击继续,右滑重新开始。", - "sys_menu": "菜单。单击切换,双击确认。", - "sys_menu_help": "重新听帮助。", - "sys_menu_restart": "重新开始本周目。", - "sys_menu_resume": "返回探索。", - "sys_menu_save": "保存并回大厅。", - "sys_new_run": "新的探窟,开始了。", - "sys_saved": "进度已保存。", - "tut_attack": "现在单击,挥拳打它。", - "tut_d0": "先学会用耳朵看。单击,发出声波脉冲。", - "tut_done": "教学完了。地窟很深,小心走。", - "tut_echo_come": "听,回声回来了。", - "tut_flee_hold": "想逃跑,按住别松手。", - "tut_front_rule": "回声回来越快,墙就越近。", - "tut_kill": "打中了,就是这样。", - "tut_menu": "下滑,打开菜单。", - "tut_mob": "前面有东西!放心,它伤不到你。", - "tut_parry": "听到它的动静,双击格挡。", - "tut_parry_miss": "没挡住也别怕,它伤不到你。", - "tut_parry_ok": "挡住了!", - "tut_replay": "双击,再发一次脉冲,不要钱。", - "tut_side_rule": "两侧的回声,发闷是墙,空旷是通路。", - "tut_skip": "已跳过教学。单击脉冲,先听听四周。", - "tut_stairs": "铁器的回声,就是下潜的楼梯。", - "tut_stairs_on": "楼梯就在脚下。单击,下潜。", - "tut_status": "上滑,随时听自己的状态。", - "tut_turn": "左滑右滑,可以转身。", - "tut_walk": "按住屏幕不放,你就往前走。", - "unlock_blade": "解锁武器,开局带着短刃。", - "unlock_echo": "解锁回声强化,侧向听得更远。", - "unlock_lead": "攒够了新的遗产。", - "unlock_none": "金币还不够,继续攒。", - "unlock_potion": "解锁行囊药,开局自带一瓶。", - "unlock_veil": "解锁护符,每层头一下减半。", - "unlock_vigor": "解锁体魄,起始更强壮。" - }, - "escape": { - "again": "单击屏幕,再来一次。下滑,打开菜单。", - "box_fixed": "电箱运转正常,电流的嗡鸣声平稳而持续。", - "empty_1": "房间里空空荡荡,只有你自己的回声。", - "empty_2": "你伸出手,摸到的只有冰冷粗糙的墙壁。", - "empty_3": "除了远处的水滴声,这里什么都没有。", - "escape": "你扳动开关。电机轰鸣,沉重的铁门缓缓升起,刺眼的光线涌了进来。你眯起眼睛,向前迈出了第一步。自由了。你逃出来了。", - "fix_box": "你把保险丝用力按进卡座。火花一闪,嗡鸣声响起——头顶的线路恢复供电了!", - "found_key": "你蹲下身在储物架的角落里摸索,指尖碰到一个冰凉的金属物件——是一把钥匙!钥匙到手了。", - "g0_intro": "黑暗。你在废弃的地下设施里醒来,什么都想不起来。你必须找到出路。", - "g1_done": "很好,你迈出了第一步。", - "g1_move": "先活动一下。朝任意方向滑一下,走一小步。", - "g2_wall": "这个房间不大,四面都是墙。再滑两下,试试碰碰墙。", - "g3_left": "跟着我指的路走。向左滑。", - "g4_down": "对。再向下滑。", - "g5_inspect": "听到水声了吗?单击一下,仔细检查这个房间。", - "g5_key": "你摸到了一把钥匙!", - "g6_done": "对,就是这样。接下来,靠你自己了。", - "g6_doubletap": "钥匙能开锁。双击,是把物品用出去的用法。现在,双击试试。", - "g7_goal": "找到能用这把钥匙打开的东西。需要帮助时,在原地双击。", - "gd_next_fuse": "保险丝到手。接下来,去找电箱。", - "gd_room_d": "下面的房间。", - "gd_room_l": "左面的房间。", - "gd_room_r": "右面的房间。", - "gd_room_u": "上面的房间。", - "guide_blunt_down": "手指贴着屏幕,向下推一下。", - "guide_blunt_left": "手指贴着屏幕,向左推一下。", - "guide_blunt_right": "手指贴着屏幕,向右推一下。", - "guide_blunt_up": "手指贴着屏幕,向上推一下。", - "guide_offpath": "先跟我走。", - "guide_skip": "跳过引导,直接开始自由探索。", - "guide_wrong_down": "不是这个方向。向下滑。", - "guide_wrong_gesture": "不是这个操作。照我说的做。", - "guide_wrong_left": "不是这个方向。向左滑。", - "guide_wrong_right": "不是这个方向。向右滑。", - "guide_wrong_up": "不是这个方向。向上滑。", - "help_ops": "滑动,在房间之间移动。单击,检查房间,或者重听房间的声音。双击,使用物品,或者查看背包。", - "inspect_box_dead": "墙上是一只电箱,箱盖敞开着,里面的保险丝座空空如也。没有电,这里的大门永远打不开。", - "inspect_cabinet_locked": "这个房间里立着一个铁柜,柜门上挂着一把锁。也许,有什么钥匙能打开它。", - "inspect_gate": "面前是一扇沉重的铁门。门边的电子锁一片漆黑,没有任何反应。它需要电力。", - "inspect_gate_ready": "电子锁的指示灯亮了,发出微弱的绿光。大门已经通电。双击,打开它,离开这里。", - "inv_both": "你身上带着一把钥匙和一枚保险丝。", - "inv_empty": "你摸了摸身上,什么也没有。", - "inv_fuse": "你身上带着一枚保险丝。", - "inv_key": "你身上带着一把钥匙。", - "menu_back": "返回游戏。", - "menu_home": "回大厅。", - "menu_open": "菜单。", - "menu_restart": "重新开始。", - "nav_down": "向下滑。", - "nav_left": "向左滑。", - "nav_right": "向右滑。", - "nav_up": "向上滑。", - "reopen_prompt": "上滑,重新听一遍引导。单击,直接开始。", - "replay": "黑暗再次合拢。你回到了中央的房间。这一次,你会更快。", - "room_cabinet": "这个房间里,立着一个铁柜。", - "room_gate": "面前,是一扇沉重的铁门。", - "room_power": "这个房间的墙上,有一只电箱。", - "room_storage": "一间储物间。货架上堆满杂物,角落里传来水滴声。", - "skip_hint": "单击可跳过旁白。", - "start_room": "你站在设施中央的房间里。滑动移动,单击检查,双击使用物品。", - "stuck_ask": "需要帮助吗?", - "stuck_box_1": "保险丝属于电箱。有电流声的地方,就有电箱。", - "stuck_box_2": "去西北角的电箱房,双击,把保险丝装进电箱。", - "stuck_box_3": "跟我说的方向走,去电箱所在的房间。", - "stuck_cabinet_1": "钥匙就在你身上。它能打开某一把锁。", - "stuck_cabinet_2": "去东边的铁柜房,双击,用钥匙打开铁柜。", - "stuck_cabinet_3": "跟我说的方向走,去铁柜所在的房间。", - "stuck_gate_1": "电已经通了。该去找那扇铁门了。", - "stuck_gate_2": "去东南角的大门,双击,打开它,离开这里。", - "stuck_gate_3": "跟我说的方向走,去大门所在的房间。", - "stuck_key_1": "铁锈味最重的地方,值得仔细看看。", - "stuck_key_2": "去西南角的储物间,单击检查,找到钥匙。", - "stuck_key_3": "跟我说的方向走,去西南角的储物间。", - "time_band1": "你逃出来了,用时不到两分钟。了不起!", - "time_band2": "你逃出来了,用时不到五分钟。", - "time_band3": "你逃出来了,用时不到十分钟。", - "time_band4": "你逃出来了,用时超过十分钟。", - "unlock_cabinet": "钥匙插进锁孔,缓缓转动。咔哒一声,柜门开了。柜子深处,躺着一枚保险丝。保险丝到手了。", - "use_fail": "这里没有用得上东西的地方。换个房间试试,或者先单击检查一下周围。", - "wall": "那边是墙,换个方向。" - }, - "hunt": { - "breach": "有野兽冲进营地了!", - "breach_heavy": "巨兽撞进营地,损伤很重!", - "danger_low": "营地危险了,一只都不能再漏!", - "end_again": "单击,再猎一局。", - "end_lose": "营地守不住了,撤退!", - "end_rank": "成绩已记入猎手榜。", - "end_win": "天亮了,营地还在。", - "gd_idle": "听声音的方向,滑过去。", - "gd_invalid": "这个操作现在用不上。", - "grade_a": "评级,A。漂亮。", - "grade_b": "评级,B。守得还行。", - "grade_c": "评级,C。险胜。", - "grade_s": "评级,S!完美的围猎。", - "help_main": "朝声音的方向滑,就是出击。单击呼喊支援,双击旋风斩。上滑状态,下滑菜单。", - "hp_band1": "营地固若金汤。", - "hp_band2": "营地受了些损伤。", - "hp_band3": "营地损毁过半。", - "hp_band4": "营地快守不住了。", - "intro_1": "夜幕降临,野兽在山林里游荡。", - "intro_2": "你们是守夜的猎人,营地就在身后。", - "kill_band0": "你还没开张。", - "kill_band1": "你小有斩获。", - "kill_band2": "你战果累累。", - "net_back": "联系恢复了,接着打。", - "net_gone": "回不去那场围猎了,回大厅。", - "net_lost": "与营地断了联系,正在重连。", - "net_to_bot": "有猎人离队,老猎手顶上。", - "npc_yan_breach": "漏了一个,都小心。", - "npc_yan_cover": "这边交给我。", - "npc_yan_greet": "我来了,这边有我。", - "npc_yan_help_ack": "撑住,我来了。", - "npc_yan_help_call": "我这侧吃紧,来个人搭把手!", - "npc_yan_kill": "拿下!", - "npc_yan_skill": "都闪开,看我的!", - "npc_yan_wave": "新一波,稳住。", - "npc_zheng_breach": "哎呀,漏了一个!", - "npc_zheng_cover": "这边我罩着。", - "npc_zheng_greet": "小筝到位,开工啦。", - "npc_zheng_help_ack": "别慌,我来了!", - "npc_zheng_help_call": "这边太多了,谁来帮一下!", - "npc_zheng_kill": "搞定!", - "npc_zheng_skill": "看我清场!", - "npc_zheng_wave": "又来一波,打起精神。", - "npc_zhou_breach": "啧,溜进去一只。", - "npc_zhou_cover": "这边交给我吧。", - "npc_zhou_greet": "老周我守着,放心。", - "npc_zhou_help_ack": "听见了,这就到。", - "npc_zhou_help_call": "我这边压不住了,来人。", - "npc_zhou_kill": "嗯,解决了。", - "npc_zhou_skill": "让让,老骨头活动活动。", - "npc_zhou_wave": "听,又来了。", - "room_start": "狩猎开始,先听声音的方向。", - "room_wait": "房间已开好,等同伴到齐。单击,立即开局。", - "settings_hint": "音色、语速、背景音乐,请回大厅修改。", - "skill_ready": "旋风斩准备好了。", - "st_wave_a": "还在头几波。", - "st_wave_b": "打到中段了。", - "st_wave_c": "最后一波了。", - "sys_menu": "菜单。单击切换,双击确认。", - "sys_menu_help": "重新听帮助。", - "sys_menu_home": "退出房间,回大厅。", - "sys_menu_resume": "回到猎场。", - "team_3": "三名猎人在守。", - "team_4": "四名猎人全在。", - "threat_few": "有野兽贴近了,听方向出手。", - "threat_many": "四周全是动静,快出手!", - "threat_none": "近处暂时没有野兽。", - "tut_attack": "听,有狼在靠近。朝声音的方向,滑一下。", - "tut_breach": "野兽冲进营地,营地就会受损。撑过五波就赢。", - "tut_callout": "单击一下,呼喊支援,队友会来帮你。", - "tut_callout_ok": "听到没,同伴回应你了。", - "tut_done": "教学完了。真正的围猎,现在开始。", - "tut_kill_ok": "好,杀掉了。就是这样。", - "tut_rule": "野兽会从八个方向围上来。声音在哪边,就往哪边滑。", - "tut_skill": "双击,旋风斩,清掉身边一圈。", - "tut_skill_cd": "旋风斩有八秒冷却。冷却中双击,重新听威胁。", - "tut_skip": "已跳过教学,开打。", - "tut_status": "上滑,听营地状态。下滑,打开菜单。", - "wave_band1": "第一波来了,别慌。", - "wave_band2": "第二波,比刚才多。", - "wave_band3": "第三波,有大家伙混在里面。", - "wave_band4": "第四波,更快,更多。", - "wave_band5": "最后一波,全来了!", - "wave_clear": "这一波,守住了。" - }, - "keeper": { - "amo_a": "……有人吗……顺发号……船进水了……", - "amo_b": "白角塔!是你吗?求你,回个话!", - "amo_c": "我爷爷,四十年前也是在这片海没的。他说,白角的灯灭过一下。", - "amo_d": "塔……听得到吗?水,到膝盖了。", - "amo_e": "守塔人……塔里就你一个人?家里人不拦着你干这行?", - "amo_f": "裂了!水进得更快了。塔,告诉我怎么办!", - "amo_g": "……我爷爷,就在那七个人里。难怪他到死,都念着白角的灯。", - "amo_h": "风太大……嗯。那晚的风,一定很大。", - "b_goal": "今夜两艘货轮过境。守住灯,也守住频道。", - "b_open": "白角灯塔,风暴夜。我是今晚的守塔人。", - "b_rain": "浪拍到第七级台阶。雾角两长一短——塔在,我也在。", - "b_rule": "岸台的规矩就一条:风暴夜,灯不能灭。", - "c1_ask": "顺发号,报你的方位,报进水的速度。", - "c1_aske": "他更慌了。人没接住,数字也乱。", - "c1_asko": "方位……仪表进水了,我,我看不清……", - "c1_diary": "暗格里是祖父的日志。缺了最后一页。", - "c1_focus": "先守住这盏灯。旧账,天亮再算。", - "c1_focuse": "灯转得稳。可那句「灭过一下」,留在了你耳朵里。", - "c1_hold": "别慌。我在白角,哪儿也不去。慢慢说。", - "c1_holde": "他喘匀了。先接人,再办事。", - "c1_holdo": "……好,好。你在。我听见了。", - "c1_open": "父亲的钥匙,就在抽屉里。灯座第三级,开了。", - "c1_tune": "频道里有动静。很轻,像隔着整片海。", - "c2_back": "频道又响了。顺发号的引擎,时断时续。", - "c2_crack": "听!他那边,船板裂了!", - "c2_key": "父亲桌上那支手电,尾盖里卷着一页纸。", - "c2_shore": "岸台,记下他的船位。请渔政天亮前到。", - "c2_shoreo": "船位落在图上了。渔政的船,最快也要天亮。", - "c2_song": "跟我念:浪头过,船头抬。浪头退,船头落。", - "c2_songo": "浪头过,船头抬……真的稳了些!这口诀,谁教你的?", - "c3_dark": "你离塔的时候,发条走到了头。灯,灭过一刻钟。过境的货轮,平安。", - "c3_eye": "风眼过了。最后的浪墙,就跟在后面。", - "c3_page": "手电的尾盖旋开了。那页纸,在灯下摊平。", - "c3_wall": "浪墙起来了!就是现在!", - "c4_pass": "家里人?都在大陆。这行当,习惯了。", - "c4_passo": "哦……你也是一个人守夜。我们俩,隔着一道海。", - "c4_true": "我父亲也是守塔人。十二年前风暴夜,他出海救人,没有回来。", - "c4_trueo": "……对不起。难怪今晚,你一直都在。", - "c5_patch": "拿堵漏垫顶住裂缝。人守在电台边,我一直在。", - "c5_patcho": "顶住了!水慢下来了。我不走,守着电台。", - "c5_suit": "穿上救生衣,带上信号灯,站到甲板上去。", - "c5_suito": "穿好了。要是船散了,我就抱着它漂。", - "c6_reade": "四十年,两代人,一条规矩。今晚,轮到你选了。", - "c6_shut": "合上。守塔人的事,守塔人自己扛。", - "c7_go": "机械上满发条,灯能自己转到天亮。等着我。", - "c7_go2": "发条……我只上了半卷。快去,快回。", - "c7_hold": "顺发号,听我的。灯照着的那条道,跟我念,一步一步来。", - "c8_math": "坐标向东两百米。灯光扫过去,看见救生衣了!", - "c8_matho": "塔!你的灯扫到我啦!我在这边!", - "c8_new": "数三个浪头,借着风的角度,钻新缝!", - "c8_newo": "一个,两个,三——过去了!塔,我过来了!", - "c8_old": "走老航道。多绕半里,绕开所有的暗礁。", - "c8_oldo": "老航道……我爷爷念叨过这条道!稳了!", - "c8_song": "他爷爷传下的渔歌……在哪?再唱一遍!", - "c8_songo": "海风那个吹呀——塔!是你吗?我在这儿!", - "c9_found": "他在半路改了主意。天亮时,渔队找到了他。活着,湿透了。", - "c9_land": "顺发号过了礁缝,搁上背风湾的滩。人,站上了岸。", - "c9_return": "接驳艇回来了。两个人,一身水,一盏灯。", - "d9_keep": "那晚风太大,灯出了点故障。别再问了,孩子,回家吧。", - "d9_keepe": "这个话题,沉回了海里。天,亮了。", - "d9_tell_a": "四十年前守塔的,是我爷爷。他离灯去救自己的儿子。灯灭那刻,回澜号……对不住。", - "d9_tell_b": "我只知道,那晚守塔的是我爷爷,灯灭过一下。剩下的,我也不敢说全。", - "d9_telle": "他听完,沉默了很久。天,亮了。", - "e1_a": "天亮了。他在门厅睡熟,那页纸攥在手里。灯,亮到了最后一刻。", - "e1_b": "回澜号的账,翻开了第一页。这座塔,等了四十年。", - "e2_a": "他走的时候,天刚亮。我送到码头,什么也没说。", - "e2_b": "缺页放回灯底。有些东西,再压一代人。灯,还转着。", - "e3_a": "我把知道的,都说了。他望着海,半信半疑地点头。", - "e3_b": "碎片也是真话。剩下的,让海自己讲吧。", - "e4_a": "天亮,各自归位。他回他的港,我守我的灯。", - "e4_b": "隔着一道海,两座塔,谁也没再提那晚。", - "ep_amo_dawn": "阿澈:抱着冷藏柜漂到天亮。打那以后,出海带两台电台。", - "ep_amo_home": "阿澈:那晚之后改跑日班。他说,夜里的海,有守塔人听着。", - "ep_amo_solo": "阿澈:自己把船开上了背风湾。船主骂了船,没骂人。", - "ep_dad": "值班表上,你替十二年前那个班次签了字。老陈,收工了。", - "ep_lamp_dark": "灯塔记录簿:凌晨两点,灯灭一刻钟。那一行,你写得格外用力。", - "ep_lamp_full": "灯塔记录簿:你离塔三刻,灯自己转着。父亲的发条,说中了。", - "ep_lamp_hold": "灯塔记录簿:转灯整夜未停。你一步,也没离开过它。", - "ep_lead": "风停了。岸台给你记一笔——这一晚,后来怎样了。", - "ep_log_kept": "灯下的旧账,又压回了黑暗里。", - "ep_log_told": "灯下的旧账,今夜见了光。", - "ep_shore": "岸台晨报:风暴过境,航道平安。白角灯,正常。", - "g9_in": "风,一层一层退下去。天边,有点灰了。", - "g9_knot": "十二年了。这一晚,我总算替父亲,站完了他的班。", - "gd_again": "还在吗?单击继续。", - "gd_brief": "单击,继续值守。要选择时,向左或向右滑。", - "gd_continue": "单击屏幕,继续。", - "gd_invalid": "这个手势,塔里用不上。", - "gd_prog1": "滑动这里用不上。想想岸台刚说的话。", - "gd_prog2": "别乱。停一停,再听一遍。", - "lull_1": "岸台通报:风加到十级。第一程,过去了。", - "lull_2": "风眼凌晨过境。第二程,到顶了。", - "m6_seal": "那些旧东西,你今晚没碰过。缺页的事,你一无所知。", - "p1": "他的声音在抖。向左滑,先接住这个人。向右滑,先要他的船位。", - "p2": "他提到四十年前。向左滑,去翻灯座下的暗格。向右滑,先专心守灯。", - "p3": "他快撑不住了。向左滑,用守塔人的口诀带他稳船。向右滑,把船位报给岸台。", - "p4": "他问起你的人。向左滑,告诉他真话。向右滑,轻轻带过。", - "p5": "船在漏。向左滑,让他回舱堵漏,守住电台。向右滑,让他穿救生衣,上甲板。", - "p6": "祖父的最后一页。向左滑,今晚就读完它。向右滑,合上,塞回灯底。", - "p7": "浪墙压过来了。向左滑,给灯上满发条,驾接驳艇去接他。向右滑,守着灯,用声音引他过礁。", - "p8_boat": "海上没有灯。向左滑,循着他哼的渔歌找他。向右滑,按推算的坐标,直线搜。", - "p8_reef": "礁缝两道口。向左滑,走老航道,稳但绕远。向右滑,钻新缝,近但冒险。", - "p9a": "他问起四十年前的灯。向左滑,把缺页的事,连根说给他。向右滑,就说,那晚风太大。", - "p9b": "他问起四十年前的灯。你知道的,只有碎片。向左滑,把碎片给他。向右滑,说风太大。", - "prog_m1": "风暴起来了。今晚第一程。", - "prog_m2": "风暴到顶。第二程。", - "prog_m3": "风在退。最后一程。", - "prog_mem_f": "这是回忆:父亲的最后一晚,十二年前。", - "prog_mem_g": "这是回忆:祖父的年代,四十年前。", - "rev_c1": "唱针落下。缺的那一页,自己开了口。", - "rev_c2": "我写下这些,等一个敢看的人。那晚,我的儿子,偷了接驳艇。", - "rev_c3": "我去追他。灯,离了人。半个时辰,回澜号,七个人。", - "rev_c4": "儿子回来了。这页我撕下来,压进灯底。守塔人,不能离灯。", - "rev_c5": "风声回来了。原来那道家规,是这么来的。", - "rev_f1": "唱针又落下了。十二年前,也是这样的风。", - "rev_f2": "白角塔,我是老陈。接驳艇上两个人,都活着。", - "rev_f3": "守塔人听见了求救,就不能装没听见。等我回来。", - "rev_f4": "塔上的机械上满发条,能自己转一夜。给我留着门。", - "rev_f5": "风声回来了。那扇门,留到今天。", - "rev_g1": "唱针落下。四十年前,也是这盏灯下。", - "rev_g2": "手稳住。灯罩擦到第三遍,才算干净。", - "rev_g3": "记住,灯下压着的东西,比灯重。守塔人,替它守一辈子。", - "rev_g4": "风声回来了。爷爷,我听见了。", - "rev_teach": "听到唱针落下、风声退后,是回忆。风声回来,就是现在。", - "sys_continue_ask": "检测到你的值守记录。单击继续上次,右滑开始新的风暴夜。", - "sys_help": "单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。", - "sys_menu": "菜单。单击切换选项,双击确认。", - "sys_menu_lobby": "保存并回大厅。", - "sys_menu_restart": "重新开始今夜。", - "sys_menu_resume": "回到值守。", - "sys_new_night": "新的风暴夜,开始了。", - "sys_settings": "音色、语速、背景音乐,请回大厅修改。", - "sys_skip": "想跳过这句,单击就行。", - "tr_deep": "他把命,交给了你的声音。", - "tr_half": "他信一半,疑一半。", - "tr_thin": "今晚,他只信自己的手。", - "tru_full": "三代人的账,今夜见底了。", - "tru_one": "灯下的旧账,你翻开了一角。", - "tru_two": "祖父和父亲的事,你都翻到了。", - "tru_zero": "旧账压在灯底,你一页没翻。" - }, - "radio": { - "b_goal": "今晚五通电话。说什么话,由你决定。", - "b_open": "午夜零点,红灯亮起。欢迎回到《今夜不眠》。", - "b_rain": "雨下了一整晚。热线灯,马上就要亮了。", - "b_rule": "台里的规矩就一条:先接住人,再接电话。", - "d9_avoid": "各位,今晚到这里。明晚零点,今夜不眠,不见不散。", - "d9_avoide": "留言机的红灯,又多亮了一夜。", - "d9_face": "师父,三年了。这句晚安,我替您播。各位,晚安。", - "d9_facee": "带子里其实只有电流声。但空着的那一秒,你说满了。", - "e1_a": "天亮了,热线灯还亮着。你们的晚安,是这座城市的心跳。", - "e1_b": "这把话筒,我总算接得住了。明晚零点,接着不眠。", - "e2_a": "今晚的热线烧得发烫。全城的失眠者,都被接住了。", - "e2_b": "只是路过留言机的时候,你还是没敢看它。红灯灭得很慢。", - "e3_a": "口碑掉了一夜。可那句迟到三年的晚安,今晚说出去了。", - "e3_b": "一个人的频道,也是频道。师父,收到了吗?", - "e4_a": "今夜不眠,静音收播。有的夜班,谁也接不住谁。", - "e4_b": "留言机还在闪。你没看它,它也没怪你。明晚再说吧。", - "ep_deer_no": "小鹿退了票。检票口的灯,记得那趟没上成的车。", - "ep_deer_ok": "小鹿上车了。她妈后来打电话说,那声妈,比奖杯值钱。", - "ep_han_no": "老韩在服务区睡了一觉。学费齐了,那首歌没放成。", - "ep_han_ok": "老韩到家了。后视镜上,多了朵小红花。", - "ep_kid_no": "糖糖后来又打来过一次。还是那句:楼下在吵。", - "ep_kid_ok": "糖糖家的门,这个月没再摔过。她说这是主播魔法。", - "ep_lead": "收播了。导播间替你记了一笔账——今晚的人都怎样了。", - "ep_wife_no": "陈姐在公车站坐到了末班车。那通电话,成了没寄出的信。", - "ep_wife_ok": "陈姐家切了蛋糕。那句「回来吧」,是我这晚听过最好的声音。", - "ep_zhou_no": "老周在便利店屋檐下坐到天亮。没出事,也没人听见他的歌。", - "ep_zhou_ok": "老周:孙子替他买了老花镜。回信说,谢谢那首歌。", - "g9_in": "五线收工。垫乐起——零点档,还剩最后一段。", - "gd_again": "还在吗?单击继续。", - "gd_brief": "单击继续节目。请选择的时候,向左或向右滑。", - "gd_continue": "单击屏幕,继续。", - "gd_invalid": "这个手势,直播间里用不上。", - "gd_ring1": "热线在闪。单击,接听。", - "gd_ring2": "灯还亮着,听众在等。单击,接听。", - "h1_a": "主播,别挂。陪我说话,我的眼皮,沉得很。", - "h1_b": "跑完这趟,闺女的学费就齐了。雨刷都快刮不动了。", - "h1_danger": "车道偏了——听!", - "h1_dango": "嘶——好险!前车急刹,我擦着护栏过去了。彻底醒了!", - "h1_echo": "对了。头通电话那位大爷,就是这片被巡逻队找到的。这城市的夜,是接着的。", - "h1_in": "五线来电。引擎声没停过——他在开车!", - "h1_stop": "听我的,前面三公里有服务区。学费急,命更急。", - "h1_stope": "他下了高速。单子黄了,人齐了。", - "h1_stopo": "行,听你的。进了服务区,我给你们放首歌听。", - "h1_talk": "说说她。开学第一天,她跟你说的头一句话,是什么?", - "h1_talke": "吓醒的,也算醒。这一趟,聊到家。", - "h1_talko": "她说,爸,我在学校给你赚了朵小红花。哈哈,哈哈……", - "k1_a": "喂……有人吗?我睡不着。", - "k1_ask": "睡不着的时候,心里是不是装着事?说给我听听。", - "k1_asko": "爸爸妈妈摔门了。是不是……我做错了什么呀。", - "k1_b": "家里灯关了。可是楼下,一直有声音。", - "k1_in": "三线来电。听呼吸,是个小孩。", - "k1_lie": "睡吧。明天一睁眼,什么都会好起来的。", - "k1_liee": "你许了个兑不了的现。孩子睡了,谎留下了。", - "k1_lieo": "真的吗?拉钩。晚安……", - "k1_lull": "闭上眼睛。风把云朵盖在被子上,月亮替你值夜班。", - "k1_lulle": "睡着了。可你没听见,她在怕什么。", - "k1_lullo": "月亮也睡了……那我也睡。", - "k1_truth": "糖糖,记住,大人的事,不是小孩的错。一个字都不是。", - "k1_truthe": "蛋糕。记下来——四线的来电,可能跟这个家有关。", - "k1_trutho": "嗯……那我睡了。他们明天,会一起给我切蛋糕吗?", - "l1_a": "主播,退票窗口十一点半就关了。我站这儿半小时了。", - "l1_b": "票是回去看我妈的。可我试镜又黄了,两手空空……", - "l1_free": "退不退,都是你的自由。夜还长,慢慢想。", - "l1_freee": "她走了。没上车,也没退票。年轻人的夜,长了点。", - "l1_freeo": "嗯……我再想想。窗口要关了,我先过去了。", - "l1_go": "你妈等的不是奖杯,是你进门喊的那声妈。", - "l1_goe": "二线收工。这句话,值一个头条。", - "l1_goo": "呜……嗯。不退了,我现在就去检票。谢谢您。", - "l1_in": "二线来电。姑娘,声音很轻,像怕吵到谁。", - "p1": "老人在发抖。向左滑,陪他哼那首老歌。向右滑,冷静问他路口的路牌。", - "p2": "雨声更密了。向左滑,留在原地陪他等巡逻队。向右滑,转接派出所。", - "p3": "向左滑,告诉她这趟车值得上。向右滑,把选择还给她。", - "p4": "向左滑,唱一段摇篮曲哄她睡。向右滑,轻轻问她怎么了。", - "p5": "孩子的声音在抖。向左滑,告诉她这不是她的错。向右滑,答应她明天都会好。", - "p6": "摔门声你听见了。向左滑,替孩子给她带句话。向右滑,劝她回家把话说开。", - "p7": "她的呼吸平了。向左滑,留在直播里,让全城等这个门铃。向右滑,换垫乐,私下陪她说完。", - "p8": "方向盘比话筒危险。向左滑,陪他聊聊闺女。向右滑,让他立刻进服务区。", - "p9": "留言机红灯在闪,是老主播三年前没播完的那句晚安。向左滑,替他播出去。向右滑,照常收播。", - "prog_c1": "现在是今晚第一通电话。", - "prog_c2": "现在是今晚第二通电话。", - "prog_c3": "现在是今晚第三通电话。", - "prog_c4": "现在是今晚第四通电话。", - "prog_c5": "现在是今晚第五通电话。", - "rep_high": "今晚的口碑,在听众里立住了。", - "rep_low": "今晚的口碑,还没立起来。", - "rep_mid": "今晚的口碑,不好不坏。", - "sys_continue_ask": "检测到你的夜班记录。单击继续上次,右滑开始新的夜晚。", - "sys_help": "单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。", - "sys_menu": "菜单。单击切换选项,双击确认。", - "sys_menu_lobby": "保存并回大厅。", - "sys_menu_restart": "重新开始今晚。", - "sys_menu_resume": "回到直播。", - "sys_new_night": "新的夜晚,开始了。", - "sys_saved": "进度已保存。", - "sys_settings": "音色、语速、背景音乐,请回大厅修改。", - "sys_skip": "想跳过这句,单击就行。", - "w1_a": "主播,我就想找个人说说。我家那口子,今晚要出远门的活儿。", - "w1_air": "陈姐,别挂。让他接电话——全城都在听。", - "w1_aire": "电话那头,传来跑步声。今晚的高光时刻。", - "w1_airo": "喂!回来吧!蛋糕要化了,孩子等着呢!", - "w1_b": "明天孩子生日!蛋糕都订好了,他人要今晚走!", - "w1_home": "吵架隔着电话吵不赢。回家吧,蛋糕别放到坏了。", - "w1_homee": "她往回走了。成不成,看他们自己的了。", - "w1_homeo": "嗯……我这就往回走。谢谢你,听我瞎嚷嚷。", - "w1_in": "四线来电。户外风声大,是位大姐。", - "w1_priv": "这里只有我们俩了。想说就说,想哭就哭。", - "w1_prive": "灯牌是你亲手关的,故事还是完整的。稳。", - "w1_privq": "呜……其实他订完蛋糕就跟我道歉了。是我,把门摔得太响。", - "w1_say": "四十分钟前,有个孩子问我们:爸妈摔门,是不是她的错。", - "w1_say2": "今天有位小朋友,还在等爸妈回家切蛋糕。", - "w1_say2e": "话递到了。就差最后一脚。", - "w1_say2o": "蛋糕……是他订的。他嘴上不说,心里都记着。", - "w1_saye": "她攥着电话,很久没出声。风都停了。", - "w1_sayo": "什么?她还没睡?这么晚了,她还醒着?", - "z1_a": "主播……我,我找不到回家的路了。", - "z1_adone": "他慌了。先接住情绪,再走流程。", - "z1_ask": "大爷,路口有什么招牌?念一个给我听听。", - "z1_asko": "招牌……雨糊住了,我眼花,看不清啊……", - "z1_b": "雨太大了。我本来,只想买副老花镜。", - "z1_bad": "说不清……我真是,说不清了……", - "z1_bade": "地址没报清就转接,雨又大。这通砸了。先稳人,再办事。", - "z1_ok1": "就这么接。记住这个手感。", - "z1_pol": "大爷,我把您转给派出所,他们马上就到。", - "z1_pole": "转接完成,地址报得清。干净利落。", - "z1_polo": "好,好。谢谢你啊,谢谢。", - "z1_ring_in": "一线来电。七十多岁,雨夜,走丢了。", - "z1_sdone": "他稳住了。老歌,比路牌管用。", - "z1_song": "大爷别急,这首歌我也会。咱们一句一句来。", - "z1_songo": "对,对!路口修车铺,天天放这首!", - "z1_stay": "哪儿也不去。我陪你,这首歌还长着呢。", - "z1_staye": "十五分钟后,巡逻灯停在路口。全城听见老人笑了。", - "z1_stayo": "好,好。有人说话,我就不怕了。" - }, - "rhythm": { - "gd_answer": "现在跟着我打。", - "gd_count": "四拍之后,继续。", - "gd_miss": "慢了半拍,下一小节跟上我就行。", - "gd_miss_early": "抢拍了。等声音落下再滑。", - "gd_miss_late": "慢了半拍。跟着节拍走。", - "gd_miss_none": "这拍没接。我停下的时候,就轮到你了。", - "gd_miss_wrong": "方向不对。跟着音色滑。", - "gd_slow": "我放慢一些,跟着试试。", - "grade_a": "A 级!准确率超过八成五,非常出色。", - "grade_b": "B 级,准确率超过七成。不错,还能更好。", - "grade_c": "C 级,准确率不到七成。别灰心,再来一遍。", - "grade_s": "S 级!准确率超过九成五,完美演出。", - "menu_lobby": "回大厅。", - "menu_main": "菜单。单击切换选项,双击确认。", - "menu_resume": "继续演奏。", - "mid_song": "过半了,保持。", - "new_best_combo": "新连击纪录!", - "restart": "单击再来一遍,右滑下一首,下滑回大厅。", - "retry_early": "早了,等鼓点再出手。", - "retry_gesture": "不是这个手势,再听一遍。", - "retry_late": "晚了,跟着鼓点走。", - "retry_listen": "再听一遍,跟着来。", - "retry_skip": "没关系,我们先走下一句。", - "rules": "规则:我奏一句,你在下一小节原样跟打。音要对,拍点也要对。", - "select_hint": "左右滑选曲目,单击开始,下滑回大厅。", - "settings_hint": "音色、语速、背景音乐,请回大厅修改。", - "skip_hint": "单击可跳过旁白。", - "song1_name": "第一首,启程,九十拍。", - "song2_name": "第二首,追风,一百零五拍。", - "song3_name": "第三首,星爆,一百二十拍。", - "song_locked": "这首还没解锁。上一首拿到 B 级以上就能解锁。", - "tut_1": "听,底鼓。在下一小节的同一个位置,单击。", - "tut_2": "这次是左和右。跟着打,左滑,右滑。", - "tut_3": "最后一句,三个音,中间是双击。", - "tut_done": "很好,演出开始。", - "tut_skip": "跳过教学,直接开始。", - "unlock_song2": "新曲目解锁,追风!", - "unlock_song3": "新曲目解锁,星爆!", - "welcome": "欢迎来到节拍行者。跟着音乐,我奏一句,你跟一句。", - "welcome_back": "欢迎回来。我奏一句,你跟一句。" - }, - "rpg": { - "boss1_warn": "里面就是黑风寨主。你现在回去练练再来,也来得及。", - "btl_enemy_die": "敌人倒下了。", - "btl_flee": "你抽身退出了战斗。", - "btl_flee_fail": "没甩掉!它追上来了。", - "btl_half_bandit": "山贼的攻势缓了下来。", - "btl_levelup": "你的修为精进了。", - "btl_loot_big": "大获全胜,收获颇丰。", - "btl_loot_mid": "收获不少。", - "btl_loot_small": "小有收获。", - "btl_lose": "你倒下了,黑暗吞没了一切。", - "btl_lose_hint": "记住,听清前摇,双击格挡。", - "btl_noflee": "避无可避!", - "btl_noitem": "没有金疮药了。", - "btl_nomp": "内劲不足。", - "btl_start_bandit": "山贼围上来了!", - "btl_start_boss1": "黑风寨主,就在你面前。", - "btl_start_elite": "寨丁头目挡住了去路!", - "btl_start_spider": "毒蛛从树上垂了下来!", - "btl_start_wolf": "野狼拦路!", - "btl_win": "战斗胜利。", - "cmd_attack": "攻击。", - "cmd_defend": "防御。", - "cmd_item": "金疮药。", - "cmd_skill": "破空斩。", - "desc_chest": "一个枯树洞。洞里似乎藏着什么。", - "desc_chest_re": "你回到枯树洞前。", - "desc_deepwood": "密林深处。虫鸣急促,远处有狼嚎,杀气很重。", - "desc_deepwood_re": "你回到密林深处。", - "desc_fork": "岔路口。风声在左右两边,听起来不太一样。", - "desc_fork_re": "你回到岔路口。", - "desc_gate": "黑风寨门前。火把熊熊,人声嘈杂。", - "desc_hall": "聚义厅。火盆熊熊,大厅空旷,回声冰冷。", - "desc_hunter": "猎人小屋。柴火正旺,还有磨刀的声音。", - "desc_hunter_re": "你回到猎人小屋。", - "desc_path": "林间小路。风穿过树叶,脚下的落叶沙沙作响。", - "desc_path_re": "你回到林间小路。", - "desc_stream": "溪流。水声潺潺,是个歇脚的好地方。", - "desc_stream_re": "你回到溪流边。", - "desc_village": "雾口村。篝火噼啪作响,村民低声议论着林子里的土匪。", - "desc_village_re": "你回到了雾口村。", - "evt_ch1_end": "寨主倒了,但徒弟不在这里。一张字条,指向南方的腐沼。", - "evt_chest": "树洞里有两瓶金疮药,你收好了。", - "evt_gate_open": "寨门缓缓打开。", - "evt_gold15": "你在落叶下摸到十五枚金币。", - "evt_hunter_gift": "老猎人塞给你一瓶金疮药,还说商店会给你算便宜些。", - "evt_nothing": "这里什么都没有了。", - "foe_hp_high": "敌人气焰正盛。", - "foe_hp_low": "敌人撑不住了。", - "foe_hp_mid": "敌人露出疲态。", - "gd_parry_miss": "前摇声起的时候双击,才能格挡。", - "gd_stall": "想好了吗?左右滑动选择,单击出手。", - "gd_wrap_first": "回到第一个。", - "gd_wrap_last": "最后一个了。", - "help_battle": "战斗中,左右滑选招式,单击出手。听到敌人的前摇,双击格挡。", - "help_explore": "左右滑切换选项,单击确认。双击重新听场景,上滑查看状态,下滑打开菜单。", - "intro_1": "你的眼睛看不见了。但你的耳朵,比谁都灵。", - "intro_2": "黑风寨掳走了你唯一的徒弟。追进迷雾林,把他们连根拔起。", - "intro_3": "先记住,怎么用耳朵走路。", - "npc_boss1_1": "盲剑客?正好,省得挖你的眼睛。", - "npc_boss1_2": "有两下子。可惜,你听不懂死期的声音。", - "npc_boss1_die": "白无瞳……会找到你……", - "npc_elite_1": "哪儿来的瞎子,敢闯黑风寨!", - "npc_elite_die": "寨主……会替我报仇……", - "npc_elite_half": "你……你到底是什么人!", - "npc_headman_1": "外乡人,林子里不太平。这五十金,拿着防身。", - "npc_headman_2": "商店就在村里,缺什么就去看看。", - "npc_headman_3": "听说你是用耳朵走路的剑客?保重啊。", - "npc_headman_4": "救救那些被掳走的孩子吧。", - "npc_hunter_1": "站住。……哦,是个用耳朵的。", - "npc_hunter_2": "寨子里有我旧识。带上这个,别死在路上。", - "npc_hunter_3": "黑风寨主的双刀很快,听清他出刀前的动静。", - "npc_hunter_4": "去吧。让我听听,你的传说。", - "opt_assault": "强攻寨门。", - "opt_back": "返回。", - "opt_drink": "饮水休息。", - "opt_go_chest": "往左,看看树洞。", - "opt_go_deepwood": "前进,进密林深处。", - "opt_go_fork": "前进,去岔路口。", - "opt_go_gate": "前进,去寨门。", - "opt_go_hunter": "前进,去猎人小屋。", - "opt_go_path": "前进,去林间小路。", - "opt_go_stream": "往右,去溪流。", - "opt_investigate": "调查四周。", - "opt_leave": "离开。", - "opt_open_chest": "打开树洞。", - "opt_rest": "休息一晚。", - "opt_shop": "去商店。", - "opt_sneak": "绕行潜入。", - "opt_status": "查看状态。", - "opt_talk_hunter": "和老猎人谈谈。", - "settings_hint": "音色、语速、背景音乐,请回大厅修改。", - "shop_buy": "买下了。", - "shop_open": "商店。左右滑看看货,单击购买。", - "shop_owned": "这件你已经有了。", - "shop_poor": "钱不够。", - "shop_price_armor": "皮甲,八十金。", - "shop_price_potion": "金疮药,三十金。", - "shop_price_sword": "铁剑,一百金。", - "skip_hint": "单击可跳过旁白。", - "st_armor_iron": "你身着铁鳞甲。", - "st_armor_leather": "你身着皮甲。", - "st_armor_none": "你身无片甲。", - "st_gold_poor": "口袋空空。", - "st_gold_rich": "腰包鼓鼓。", - "st_gold_some": "有些积蓄。", - "st_hp_high": "你状态很好。", - "st_hp_low": "你伤势很重,命悬一线。", - "st_hp_mid": "你受了伤。", - "st_lv_high": "你已是高手。", - "st_lv_low": "你初出茅庐。", - "st_lv_mid": "你小有名气。", - "st_weapon_iron": "你手持铁剑。", - "st_weapon_none": "你赤手空拳。", - "st_weapon_steel": "你手持青钢剑。", - "st_weapon_wind": "你手持听风剑。", - "sys_continue_ask": "检测到你的旅程记录。单击继续,右滑开始新的旅程。", - "sys_drink": "溪水清冽,你喝了个饱,伤势尽消。", - "sys_menu": "菜单。左右滑选择,单击确认。", - "sys_menu_help": "重新听帮助。", - "sys_menu_resume": "继续旅程。", - "sys_menu_save": "保存并回大厅。", - "sys_new_game": "新的旅程,开始了。", - "sys_rest": "你在篝火边睡了一觉,状态全满。", - "sys_saved": "进度已保存。", - "tut_b0": "战斗里,左右滑选招式,单击出手。听到这个声音,就是你的回合。先滑一滑,试试。", - "tut_b1": "它要扑了,听前摇!", - "tut_b2": "就是现在,双击格挡!", - "tut_b2b": "挡得漂亮。", - "tut_b3": "挡住了!轮到你了。左右滑选攻击,单击出剑。", - "tut_b4": "没挡住也没关系,再来一次。", - "tut_b5": "好剑法!接下来,靠你自己了。", - "tut_b6": "来不及格挡,就选防御。左右滑,选防御,单击。", - "tut_battle_1": "第一场战斗来了。别慌,战斗是回合制:你先出手,敌人再反击。", - "tut_battle_2": "左右滑切换招式,攻击、破空斩、防御、金疮药。单击,出手。", - "tut_battle_3": "敌人出手前有一声前摇。听到前摇,马上双击,就能格挡。", - "tut_battle_4": "没把握就防御,伤害减半。金疮药可以回血。", - "tut_battle_5": "记住:听清前摇,双击格挡。开始吧!" - }, - "simon": { - "chance_plus": "机会加一。", - "chances_out": "重听机会用完了,小心。", - "correct": "答对了!", - "gameover": "游戏结束。", - "gd_chances_left0": "免费重听用完了。之后重听会花一次机会,别怕,慢慢来。", - "gd_chances_left1": "免费重听还剩一次。", - "gd_clear": "漂亮,过了。", - "gd_economy": "记不住就向上滑,重新听一遍。免费机会有两次,用完要扣一次机会。", - "gd_occ_both": "这一轮,向上滑和双击都是作答。", - "gd_occ_dt": "这一轮,双击是作答。", - "gd_occ_up": "这一轮,向上滑是作答。", - "gd_record": "破纪录了。", - "gd_relisten": "需要的话,向上滑可以重新听一遍序列。", - "menu_back": "返回游戏。", - "menu_home": "回大厅。", - "menu_open": "菜单。", - "menu_restart": "重新开始。", - "new_record": "新纪录!", - "relisten": "再听一遍。", - "replay": "单击屏幕,再来一局。", - "retry_use": "错了。用一次机会,再听一遍。", - "round_01": "第一轮,听好了。", - "round_02": "第二轮,听好了。", - "round_03": "第三轮,听好了。", - "round_04": "第四轮,听好了。", - "round_05": "第五轮,听好了。", - "round_06": "第六轮,听好了。", - "round_07": "第七轮,听好了。", - "round_08": "第八轮,听好了。", - "round_09": "第九轮,听好了。", - "round_10": "第十轮,听好了。", - "round_11": "第十一轮,听好了。", - "round_12": "第十二轮,听好了。", - "round_13": "第十三轮,听好了。", - "round_14": "第十四轮,听好了。", - "round_15": "第十五轮,听好了。", - "round_16": "第十六轮,听好了。", - "round_17": "第十七轮,听好了。", - "round_18": "第十八轮,听好了。", - "round_19": "第十九轮,听好了。", - "round_20": "第二十轮,听好了。", - "round_more": "新的一轮,听好了。", - "rules": "上行音,向上滑。下行音,向下滑。左边的音,向左滑。右边的音,向右滑。一声轻响,单击。两声轻响,双击。", - "rules_prompt": "上滑,重听规则。下滑,打开菜单。", - "score_band1": "一轮都没坚持下来。别灰心。", - "score_band2": "你坚持了三轮以内。", - "score_band3": "你坚持了五轮左右。", - "score_band4": "你坚持了将近十轮。", - "score_band5": "你坚持了十轮以上,很厉害。", - "score_band6": "你坚持了十五轮以上,大师级!", - "skip_hint": "单击可跳过旁白。", - "t0_goal": "我会演奏一串声音,请你记住顺序,原样复现。", - "t0_welcome": "欢迎来到音序回响。先认识六种声音。", - "t1_up": "向上滑,是这个声音。", - "t2_down": "向下滑,是这个声音。", - "t3_left": "向左滑,是这个声音。", - "t4_right": "向右滑,是这个声音。", - "t5_tap": "单击,是这个声音。", - "t6_double": "双击,是这个声音。", - "t7_ready": "六种声音都记住了。后面的序列,会越来越长。", - "t7_retry": "答错可以消耗机会重听。向上滑,可以随时重听。", - "t_blunt_double": "用指尖,快速点两下屏幕。", - "t_blunt_down": "手指贴着屏幕,向下推一下。", - "t_blunt_left": "手指贴着屏幕,向左推一下。", - "t_blunt_right": "手指贴着屏幕,向右推一下。", - "t_blunt_tap": "用指尖,轻轻点一下屏幕。", - "t_blunt_up": "手指贴着屏幕,向上推一下。", - "t_ok": "对了。", - "t_skip": "跳过教学,直接开始。", - "t_try": "你试试。", - "t_wrong_double": "不是这个,双击试试。", - "t_wrong_down": "不是这个,向下滑试试。", - "t_wrong_left": "不是这个,向左滑试试。", - "t_wrong_right": "不是这个,向右滑试试。", - "t_wrong_tap": "不是这个,单击试试。", - "t_wrong_up": "不是这个,向上滑试试。", - "wrong": "错了。", - "your_turn": "轮到你了。" - }, - "space": { - "dir_down": "下!", - "dir_left": "左!", - "dir_right": "右!", - "dir_up": "上!", - "dodge_1": "只拨开几颗。", - "dodge_2": "拨开了十来颗。", - "dodge_3": "拨开了几十颗。", - "dodge_4": "拨开了一大群,漂亮。", - "drill_done": "四个方向你都会了。引擎点火,出发!", - "drill_down": "下面是低沉的轰隆。向下滑!", - "drill_good": "漂亮。", - "drill_left": "听,左边有陨石。向左滑,把它拨开!", - "drill_moveon": "没关系,跟着我,我们继续。", - "drill_retry_down": "轰隆声在下面,向下滑。", - "drill_retry_left": "那是左边来的,向左滑。", - "drill_retry_right": "那是右边来的,向右滑。", - "drill_retry_up": "声音又高又尖,是上面,向上滑。", - "drill_right": "这次在右边。向右滑!", - "drill_rule": "陨石来了,会有声音告诉你方位。", - "drill_skip": "跳过演练,直接出发。", - "drill_up": "上面有东西,声音又尖又高。向上滑!", - "drill_welcome": "欢迎登上盲航。你只有一双耳朵。", - "feat_boost": "试试单击,引擎会短促加速,直接冲过空隙。", - "feat_boost_done": "感觉到了吗?加速的时候,陨石撞不上你。", - "feat_shield": "双击展开护盾,能挡下一次撞击。", - "feat_shield_done": "护盾展开后会自动充能,好了我会告诉你。", - "gd_hit_hint": "被撞了。听方位,同向滑动就能拨开。", - "gd_last_life": "这是最后一次机会,撑住。", - "help_recap": "左边来向左滑,右边来向右滑,上面来向上滑,下面来向下滑。单击加速,双击护盾。", - "hit_down": "下面撞上的。听到低沉的轰隆,向下滑。", - "hit_last": "船体只剩最后一次了,小心!", - "hit_left": "左边撞上的。听到左边的呼啸,向左滑。", - "hit_right": "右边撞上的。听到右边的呼啸,向右滑。", - "hit_up": "上面撞上的。听到高高的呼啸,向上滑。", - "menu_help": "重新听教学要点。", - "menu_lobby": "回大厅。", - "menu_main": "菜单。单击切换选项,双击确认。", - "menu_resume": "继续飞行。", - "ms_10": "十颗了,稳。", - "ms_100": "一百颗!天空属于你。", - "ms_25": "二十五颗,老练的飞行员。", - "ms_50": "五十颗,传奇。", - "new_record": "新纪录!", - "paused": "已暂停。", - "protect_down": "训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。", - "protect_end": "训练护盾关闭。接下来,靠你自己了。", - "protect_left": "训练护盾接住了。那颗在左边,听到左边的呼啸,向左滑。", - "protect_right": "训练护盾接住了。那颗在右边,听到右边的呼啸,向右滑。", - "protect_up": "训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。", - "restart_hint": "单击再飞一次,下滑回大厅。", - "second_run_ask": "上滑重新听演练,单击直接出发。", - "settings_hint": "音色、语速、背景音乐,请回大厅修改。", - "shield_block": "护盾挡下了撞击。", - "shield_ready": "护盾充能完毕。", - "skip_hint": "单击可跳过旁白。", - "time_1": "不到三十秒,再试一次。", - "time_2": "超过三十秒,有进步。", - "time_3": "超过一分钟,合格的飞行员。", - "time_4": "超过两分钟,王牌飞行员。" - }, - "storyline": { - "e1_child": "姐姐,姐姐!天亮了!妈妈说过的,天亮了,就可以不数啦!", - "e1_dawn": "加密频道那头沉默了三秒。然后,一个你等了三十天的声音响了起来:“姐?姐!是你吗?”天亮之前,避难所的救援队打开了大门。猎狗的人,在北区的高墙下溃散了。你抱着晨晨,听见广播塔里,重新响起了音乐。后来人们说,这座城市,是从一个女人的声音开始,重新活过来的。——好结局:黎明。感谢你,陪林晚走完了这条路。单击屏幕,可以回到故事开始的地方。", - "e2_price": "你赶在车队前面,撞进了避难所的大门。“关掉广播!关灯!猎狗来了——!”那一夜,北区守住了。探照灯熄灭的时候,晨晨从人群里扑出来抱住你,才发现你胳膊上的血,已经把半边袖子浸透了。坐标是你交出去的,命,是你抢回来的。你赢了,用一条胳膊的代价。——结局:代价。单击屏幕,重新开始。", - "e3_alone": "你逃了。一路向南,没有回头。三天后,收音机里关于北区的广播,停了。又过了七天,你在一个废弃的加油站里,听见最后一个频段,也变成了沙沙声。你活下来了。只是从此以后的每一个夜里,你都会想起那声口哨,和你报出坐标时,自己发抖的声音。——坏结局:孤声。单击屏幕,重新开始。", - "e4_static": "公开频道,把所有人都引来了——幸存者,还有猎狗。塔顶的风很大,你看见山下火把连成的长龙,也看见避难所方向亮起的防御火光。猎狗的刀抵上来的时候,你对着麦克风笑了:“听见了吗,晨晨?姐姐的声音,全城都听见了。”信号中断了。但那晚之后,北区,再没有人投降。——结局:静默。单击屏幕,重新开始。", - "gd_again": "还在吗?单击继续。", - "gd_brief": "单击继续剧情。请选择的时候,左右滑动。", - "gd_continue": "轻触屏幕,继续。", - "gd_invalid": "这个操作在这里用不上。", - "help": "操作说明。单击屏幕:继续剧情。双击:重听刚才的台词。向上滑:听这段说明和当前进度。向下滑:呼出菜单,菜单里可以重新开始。当旁白说“请选择”的时候,向左滑或者向右滑,做出你的决定。选择无法撤销。", - "menu": "菜单。向左滑:重新开始整个故事。向右滑,或者单击:回到故事。向上滑:听操作说明。", - "n00_intro": "大停电后的第三十天,城市陷入彻底的黑暗。没有电,没有网络,只有收音机里偶尔闪过的沙沙声,像垂死者的呼吸。你是林晚,一名前急救员。在这个故事里,你用声音活下去。请记住:单击屏幕,继续剧情;双击,重听上一句;向上滑,听你的状态和帮助;向下滑,呼出菜单。当我说“请选择”的时候,向左滑,或者向右滑,做出你的决定。选择一旦做出,就无法回头。现在,单击屏幕,睁开眼睛。", - "n01_wake": "后脑一阵钝痛,嘴里全是铁锈味。你在废弃的地铁站里醒来,四周黑得像沉在水底。背包还压在身下,手电筒却不知去向。远处滴水的声音,一下,一下,像某种倒计时。", - "n02_linwan": "咳……咳咳……我还活着。晨晨,你在哪儿……你说过,会在北区等我。姐一定,一定找到你。", - "n03_msg": "姐,如果你听到这个,说明你还活着,太好了。听着,跟着广播塔的红色信号灯走,别相信任何自称救援队的人。北区,北区有真正的避难所。我在这儿等你。姐,一定要来。", - "n03_radio": "收音机……还好,没摔坏。等等,这是什么……这段录音,是三天前的……", - "n04_exit": "你扶着潮湿的墙,一步一步往外摸。第五十步,脚尖踢到一个硬物——是一支手电,还剩半格电。光柱劈开黑暗的那一瞬,你看见墙上用红漆刷着一行大字:别去北区。", - "n05_bcast": "北区避难所,仍在接收幸存者。重复,北区避难所,仍在接收幸存者。坐标,三、七点、五。请沿广播塔红色信号灯方向前进。", - "n05_signal": "就在这时,背包侧袋里的收音机,沙沙声忽然变得清晰。一个平稳的女声,一遍又一遍地重复着:", - "n06_whistle": "你刚走上街面,黑暗里忽然响起一声口哨。接着是第二声,第三声,从不同的方向,把你围在中间。有人的手电光,扫过你的脸。", - "n07_dog": "哟,瞧瞧,有肥羊自己送上门了。别跑啊。这片儿的路,都是我猎狗修的。想过去?行啊,把包留下,把你值钱的玩意儿留下。人嘛……也留下。", - "n08_vent": "你一矮身,钻进了通风管道。铁皮贴着脊背,窄得几乎无法呼吸。身后传来咒骂和铁棍敲击管道口的声音,越来越近,又渐渐远去。十分钟后,你从两条街外的井口爬出来,肺里像塞满了沙子。", - "n09_dead": "你屏住呼吸,把自己埋进路边冰冷的尸体堆里。手电、罐头、半瓶水,被他们一样一样摸走。有人踢了你一脚,你纹丝不动。就在他们离开时,你听见一句不该听见的话——“北区那个陷阱,今晚就收网。”", - "n10_rain": "酸雨开始下了。街面上升起细密的嘶嘶声,像无数条小蛇在游。雨幕那头,隐约传来一阵哭声——细细的,是个孩子。", - "n11_child": "哭声来自一间塌了一半的便利店。一个小男孩抱着膝盖坐在货架底下,身边躺着一个再也不会醒来的女人。他抬起头,脸上全是灰,小声说:“我叫小满。妈妈说,数到一千,她就会醒。我已经数到……数到好多个一千了。”", - "n12_take": "小满,别怕。数到一千太慢了。跟姐姐走,姐姐带你去找一座会发光的塔。抓紧我的手,别松开。", - "n13_leave": "你把仅剩的一罐罐头放在他身边,转身走进雨里。身后,孩子重新开始数数:一……二……三……你告诉自己,别回头。千万别回头。", - "n14_ignore": "哭声被你甩在身后,越来越远,最后混进雨声里,再也听不见了。你走得很快,快得像在逃跑。快一点,再快一点。你对自己说,只要到了北区,这一切就都值了。", - "n15_bridge": "两个小时后,江水拦住了去路。跨江大桥断成两截,桥身斜插进黑沉沉的江面。要去广播塔,只剩两条路:桥下的污水涵洞,黑得看不见底;或者,桥上悬着的钢索,在风里荡来荡去。", - "n16_culvert": "涵洞里,污水没到胸口,又冷又黏,带着腐烂的甜味。走到一半,水面下有什么东西,擦着你的腿滑了过去。你没有叫出声,只是走,一步,一步,直到看见洞口那点灰白的天光。", - "n16b_culvert_c": "你让小满骑在肩上,自己蹚进没到胸口的污水里。又冷又黏,带着腐烂的甜味。走到一半,水面下有什么东西擦过你的腿,小满吓得一抖,你抬手按住他的膝盖:“数数。”他小声数起来,一,二,三……数到一百七,你们看见了洞口的天光。", - "n17_cable": "钢索比想象中更滑。酸雨把它泡得发黏,你每挪一步,整根钢索就晃一下。江风从断桥的缺口灌进来,像有无数只手在水底下拽你的脚。你不往下看。你只知道,前面就是北岸。", - "n17b_cable_c": "钢索比想象中更滑。小满趴在你背上,一声不吭,两条小胳膊勒得你生疼。走到一半,钢索猛地一沉,你听见身后钢丝崩断的脆响。“闭眼。”你说。然后你用尽全身力气,向前,向前,直到膝盖磕上北岸的石头。", - "n18_dog": "啧啧啧。涵洞也拦不住你,钢索也拦不住你,命真大啊。正式认识一下——猎狗。北区广播塔底下这片,归我管。把你妹妹的坐标,还有包里剩下的东西,交出来。交出来,我让你死得体面点。", - "n19_betray": "好,好,我说。北区,避难所,坐标是……三、七点、五。拿去,都拿去。求你……放我走。", - "n20_convoy": "猎狗的车队朝北区开走了,探照灯在雨幕里划出一道道口子。你蹲在原地,胃里一阵一阵地泛酸。晨晨在北区。而刚才,是你,亲手把狼,引到了她的门口。", - "n21_redeem": "再快一点……再快一点!晨晨,等我。这一次,姐说什么,也不会再把你弄丢了!", - "n22_fight": "你往后退了半步,忽然笑了:“坐标在我脑子里。杀了我,你什么都拿不到。”猎狗愣了半秒。就是这半秒,你抓起一把沙土扬在他脸上,转身就跑。子弹擦着肩膀打进墙里,火辣辣地疼。但你在跑,你在跑——活着的感觉,从来没有这么清楚过。", - "n23_tower": "广播塔就立在头顶,红色的信号灯在雨里一闪一闪,像一颗还在跳动的心脏。塔底的中控台居然还能用。只要爬上去,你就能接入城市广播网,把警报发给北区的每一个人。问题是——用哪个频道。", - "n24_open": "所有人注意!所有人注意!我是林晚!北区避难所正在遭到袭击,重复,正在遭到袭击!能听见的人,拿起你身边能当武器的东西,去北区!救他们——也救救我们!", - "n25_secure": "北区,北区,这里是林晚。频率七点五,老规矩。猎狗带人来了,至少二十个,有车。顶住,我马上到。重复,顶住,我马上到。", - "p1": "请选择。向左滑:先检查背包里的收音机。向右滑:先摸黑寻找出口。", - "p2": "请选择。向左滑:钻进旁边的通风管道。向右滑:躺进路边的尸体堆里装死。", - "p3": "请选择。向左滑:循着哭声过去看看。向右滑:不去管它,直接去北区。", - "p4": "请选择。向左滑:带上小满一起走。向右滑:留下食物,独自上路。", - "p5": "请选择。向左滑:走桥下的污水涵洞。向右滑:爬桥上悬着的钢索。", - "p6": "请选择。向左滑:交出坐标,保命要紧。向右滑:拒绝他,想办法周旋。", - "p7": "请选择。向左滑:追上去,警告避难所。向右滑:自己逃命,越远越好。", - "p8": "请选择。向左滑:用公开频道广播,让全城都听见。向右滑:用加密频段,只发给避难所。", - "skip_hint": "单击可跳过旁白。", - "status1": "当前进度:第一幕,城南地铁站附近。你的目标:活着离开这片废墟,前往北区的广播塔,寻找妹妹林晨的下落。", - "status2": "当前进度:第二幕,酸雨笼罩的街区与断桥。你的目标:渡过江水,抵达广播塔。小心,猎狗的人,就在附近。", - "status3": "当前进度:第三幕,广播塔下。你的目标:把警报发出去,找到林晨。这是最后一段路了。" - }, - "teahouse": { - "amb_1": "车铃一响,晚班的邮差探进头来。老规矩:茉莉花茶,要滚烫的。", - "amb_2": "门帘一挑,绣坊的阿姐收了工,想喝一盏清火的龙井。", - "amb_3": "巷口的醉汉扶着门框,含含糊糊,只嚷嚷要最浓的滇红。", - "amb_react_good": "他喝得很慢,末了多搁下两文。", - "amb_react_plain": "他喝完,点点头,搁下茶钱。", - "amb_react_wrong": "他抿了一口,搁下半盏,晃出去了。", - "bai_e_a": "明儿我把棋盘搬来,你这儿灯亮,我天天来摆谱——就当,她还在看着。", - "bai_e_b": "回去还是那间空屋子。不过睡前有盏茶垫着,梦能沉一点。", - "bai_e_c": "下个月,我搬去养老院了。这把紫砂壶,留给茶馆吧。", - "bai_enter": "小掌柜,给我的紫砂壶,留个座。", - "bai_o1": "晚饭积了食。要一盏刮油的、经得住泡的,我喝得慢。", - "bai_o2": "昨儿那盏不错。今晚想喝口陈的,越陈越好。", - "bai_o3": "就馋那口陈味。老伙计,看你的手艺了。", - "bai_r1_good": "好茶,有回甘。像我家老婆子腌的萝卜干,越嚼越有味。", - "bai_r1_plain": "嗯,茶汤尚可。人老了,舌头也钝了。", - "bai_r1_wrong": "这不是我要的那口。不怪你——是我话没说全。", - "bai_r2_good": "陈味出来了。四十年前,我跟老婆子初见,就是一盏普洱。", - "bai_r2_plain": "茶汤淡了些。故事嘛,等茶好了再说。", - "bai_r2_wrong": "……不是我惦记的那口。罢了,回家睡了。", - "brew_start": "回到灶前。", - "bridge_good": "客人把这盏茶喝得很慢,像是就着茶,把心事也喝顺了。", - "bridge_plain": "茶喝完了,客人点点头,起身。", - "bridge_wrong": "那盏茶凉在桌上,客人走的时候,没回头。", - "chapter_end": "第一章完。这条巷子的夜,你都听过了。茶馆的故事,还长。", - "close_coin_1": "今晚进账,不到十五文。", - "close_coin_2": "今晚进账,十五到二十四文。", - "close_coin_3": "今晚进账,二十五文往上。", - "close_open": "客人走尽了。收壶,打烊。", - "debt_clear": "旧账清了,秦婶把那一页翻了过去。", - "gd_brew": "还在灶上,听声动手,双击。", - "gd_close": "账报完了。单击,熄灯睡下。", - "gd_invalid": "这个操作,这里用不上。", - "gd_serve": "客人还在堂前。上滑,再听一遍他要的茶。", - "he_e_a": "学费攒齐了,明天去看闺女。老师说她考了年级前十——这盏,我慢慢喝。", - "he_e_b": "钱还差一点,再跑一个月。茶馆这盏灯,是我每晚的路标。", - "he_e_c": "我把夜班退了。闺女在电话里说:妈,钱够用。这盏茶,我喝得最慢。", - "he_enter": "师傅,门口能停车不?——哦,我是说,喝茶。", - "he_o1": "跑了一宿,眼睛发涩,脑子发木。要一盏清口的,不要浓的。", - "he_o2": "今晚不打算睡了,还要跑单。要最浓的,越浓越好。", - "he_o3": "最后一趟车收工。想要一盏柔的,收收心。", - "he_r1_good": "清亮,像拿凉水洗了把脸。今晚最后一单,稳了。", - "he_r1_plain": "一般吧,能开就行。", - "he_r1_wrong": "不是这口……算了,我还得赶路。", - "he_r2_good": "得劲儿!闺女的照片就贴在方向盘上——再跑俩月,学费就齐了。", - "he_r2_plain": "不够劲,今晚里程表怕是要难看。", - "he_r2_wrong": "淡了。算了,我赶时间。", - "hint_water": "水听两遍:泡泡细密是将沸,咕嘟连片是滚透。", - "intro_1": "巷子最深处,有一盏亮到后半夜的灯。", - "intro_2": "你接手了这家茶馆。今晚,是它易主后的头一晚。", - "intro_3": "泡茶三步:选茶、候汤、出汤。手上的事,耳朵说了算。", - "night_1": "头一晚。灯亮了,水坐上,茶馆开门。", - "night_2": "第二晚。老客们,已经认得这条巷子。", - "night_3": "第三晚。今天,是收房钱的日子。", - "night_4": "第四晚。熟客进门,都不用问位子了。", - "night_5": "第五晚。这一章的夜,快要听全了。", - "night_more": "又一夜。灯还亮着,茶还热着。", - "recap_go": "接着张罗。", - "rent_due": "今天是房钱的日子,这一回,二十文。", - "rent_ok": "房钱交清,秦婶没多话。", - "rent_short": "房钱不够,差的那几文先记在账上。秦婶撂下一句:下回一起算。", - "res_good": "这一盏,泡得地道。", - "res_plain": "这一盏,泡得中平。", - "res_wrong": "这一盏,泡岔了——不是客人今晚要的那口。", - "serve_link": "你把茶端了过去。", - "settings_hint": "音色、语速、背景音乐,请回大厅修改。", - "settle_night": "熄了灯,这一晚就过去了。单击,睡下。", - "shi_e_a": "成绩出来了,比模拟考高了四十多分!这盏茶,算我请全茶馆的!", - "shi_e_b": "考完了,心里反倒空荡荡的。去哪读书,听爸妈安排吧。", - "shi_e_c": "考砸了,茶也不对味……但至少,这儿的灯一直亮着。", - "shi_enter": "老板……还有位子吗?我背单词,背得头疼。", - "shi_o1": "想喝点香的提提神,但别太浓——喝完回家还得睡,明天早读。", - "shi_o2": "模拟考砸了,心里烧得慌。想喝口最清火的。", - "shi_o3": "考完了!今晚想喝口金贵的,犒劳自己。", - "shi_r1_good": "好香!脑子清醒了。这是我攒的早饭钱……值了。", - "shi_r1_plain": "还行吧。单词它还是不进脑子。", - "shi_r1_wrong": "有点苦……没事,我泡的方便面更苦。", - "shi_r2_good": "凉丝丝的,火气下去一半。老板,你说我还能考上吗?……算了,当我没问。", - "shi_r2_plain": "茶一般,我也一般,挺配的。", - "shi_r2_wrong": "不是这个味儿……回家还得接着刷题。", - "st_debt_1": "账上,还欠着秦婶的钱。", - "st_guest_1": "今晚第一位客人。", - "st_guest_2": "今晚第二位客人。", - "st_guest_3": "今晚第三位客人。", - "st_guest_4": "今晚第四位客人。", - "st_guest_5": "今晚第五位客人。", - "st_purse_1": "钱箱见底,不到十文。", - "st_purse_2": "钱箱周转得开,不愁明日开销。", - "st_purse_3": "手头宽裕,二十五文往上。", - "st_rep_1": "口碑还没立起来,街坊不知道巷子里有这家茶馆。", - "st_rep_2": "有了回头客,口碑立住脚了。", - "st_rep_3": "巷子口都在传你的茶,小有名气。", - "st_rep_4": "一盏难求,茶客口耳相传。", - "steep_early": "出急了,茶还睡着。这一步,偏了。", - "steep_late": "闷过了,汤要发苦。这一步,偏了。", - "steep_ok": "出汤,正好。", - "su_e_a": "我调去白天班啦,还能常来。给你带我们科的喜糖。", - "su_e_b": "还在犹豫,夜班再值一季。好在这盏茶,够我撑到天亮。", - "su_e_c": "我递了辞呈,往后去哪还没想好。但今晚茶馆的灯,我记住了。", - "su_enter": "请问……还营业吗?我刚下夜班。", - "su_o1": "胃里发凉,人空荡荡的。想要一盏暖的,别太冲,喝完好睡。", - "su_o2": "今晚换个口味,想要香的。可我还得眯一会儿才接班。", - "su_o3": "最后一晚了,明天起不用值夜班。还是头一回那种,暖的。", - "su_r1_good": "好暖……像被窝里塞了个汤婆子。谢谢你。", - "su_r1_plain": "嗯,是热乎的。今晚,凑合能睡。", - "su_r1_wrong": "这盏……有点寒。没关系,是我没说清。", - "su_r2_good": "真香啊……今夜走了位老人,家属拉着我的手道谢。这盏茶,敬他们。", - "su_r2_plain": "茶还行。今夜病房平静,平静得累人。", - "su_r2_wrong": "香气没出来……像我今晚的运气。算了。", - "sys_continue_ask": "检测到没打烊的茶馆。单击继续,右滑两次重开新店。", - "sys_help": "左右滑选茶,单击定下。听水声,双击提壶;滴答密,双击出汤。上滑状态,下滑菜单。", - "sys_menu": "菜单。单击切换,双击确认。", - "sys_menu_help": "重新听帮助。", - "sys_menu_resume": "回到堂前。", - "sys_menu_save": "保存并回大厅。", - "sys_menu_upg": "打烊置办。", - "sys_reset_ask": "重开新店?口碑和存款都从头来。再右滑一次,确认。", - "sys_saved": "进度已保存。", - "tea_dianhong": "滇红。红茶性暖,滚水冲,经得住闷,越闷越醇。", - "tea_longjing": "龙井。绿茶性鲜:水将沸就提壶,出汤要快。", - "tea_moli": "茉莉花茶。香靠滚水激:水滚透再冲,出汤要快。", - "tea_puer": "普洱。老茶经泡:滚水才泡得开,多闷一会儿更醇。", - "tea_tieguanyin": "铁观音。乌龙要滚水才醒,闷到滴答密了再出汤。", - "tea_yinzhen": "白毫银针。嫩芽金贵:水将沸就提,闷到滴答密。", - "tut_d0": "先看茶柜。左右滑,一罐一罐听。", - "tut_done": "都会了。往后每一晚,都这么泡。", - "tut_serve": "茶好了。单击,端出去。", - "tut_skip": "已跳过教学。左右滑选茶,单击选定,双击动手。", - "tut_status": "上滑,听今晚的局面:第几位客人,口碑如何;客人要的茶,上滑灶上随时再听。", - "tut_steep": "注水,闷泡。滴答由稀到密,密起来就是将好——双击,出汤。", - "tut_tea": "单击,选定这罐茶。", - "tut_water": "灶上坐水。泡泡细密是将沸,咕嘟连片是滚透——听到细密,双击提壶。", - "upg_cabinet": "茶柜扩容,十五文。往后普洱、白毫银针,都上柜。", - "upg_lock": "招牌还挂不得:口碑得十二分往上,欠账也得清。", - "upg_none": "眼下的钱和账,还置办不起。改日再说。", - "upg_open": "要添置点什么?左右滑看,单击买定。", - "upg_sign": "立一块招牌,二十文。要口碑立得住——十二分往上才挂。", - "upg_teaware": "添一副新茶具,十二文。手上更准,火候窗更宽。", - "water_early": "急了,水还没醒透。这一步,偏了。", - "water_late": "水滚老了。这一步,偏了。", - "water_ok": "正是时候。", - "zhou_e_a": "明天铺子歇一天,儿子回来帮我盘货。这盏茶,记你头上了!", - "zhou_e_b": "电话里跟儿子拌了两句嘴。没事——茶还热着,日子还长。", - "zhou_e_c": "铺子我想关了,儿子叫我过去帮工。茶馆的灯,替我多亮会儿。", - "zhou_enter": "小掌柜!老位置,还给我留着呢吧?", - "zhou_o1": "修了一天车,嗓子眼里全是机油味。就你那龙井,给我去去火。", - "zhou_o2": "今天冷。来盏顶饱的、浓的,扛饿又扛冻。", - "zhou_o3": "今晚就想要头一回那盏。一样的,再来一份。", - "zhou_r1_good": "嚯!就是这个味儿!多谢啦,小掌柜。", - "zhou_r1_plain": "嗯……还行。今天手底下,差了点意思。", - "zhou_r1_wrong": "这是我要的龙井吗?……算了算了,凑合喝。", - "zhou_r2_good": "对喽,暖到脚后跟了!跟你说——我儿子今天来电话了。", - "zhou_r2_plain": "茶是茶,水是水,差点火候。儿子的事,改天再说吧。", - "zhou_r2_wrong": "……今晚这盏不对。儿子的事,不说也罢。" - } } \ No newline at end of file diff --git a/web/space/audio/sfx/alarm.m4a b/web/space/audio/sfx/alarm.m4a index 3b6fe69a..0f6f4187 100644 Binary files a/web/space/audio/sfx/alarm.m4a and b/web/space/audio/sfx/alarm.m4a differ diff --git a/web/space/audio/sfx/alarm.ogg b/web/space/audio/sfx/alarm.ogg index 069746b8..1416e8d8 100644 Binary files a/web/space/audio/sfx/alarm.ogg and b/web/space/audio/sfx/alarm.ogg differ diff --git a/web/space/audio/sfx/boost.m4a b/web/space/audio/sfx/boost.m4a index 8e8e6985..749e4d10 100644 Binary files a/web/space/audio/sfx/boost.m4a and b/web/space/audio/sfx/boost.m4a differ diff --git a/web/space/audio/sfx/boost.ogg b/web/space/audio/sfx/boost.ogg index fc40612f..e73585f8 100644 Binary files a/web/space/audio/sfx/boost.ogg and b/web/space/audio/sfx/boost.ogg differ diff --git a/web/space/audio/sfx/dodge.m4a b/web/space/audio/sfx/dodge.m4a index 054e1eee..68399d57 100644 Binary files a/web/space/audio/sfx/dodge.m4a and b/web/space/audio/sfx/dodge.m4a differ diff --git a/web/space/audio/sfx/dodge.ogg b/web/space/audio/sfx/dodge.ogg index 44d47418..8c774dd1 100644 Binary files a/web/space/audio/sfx/dodge.ogg and b/web/space/audio/sfx/dodge.ogg differ diff --git a/web/space/audio/sfx/shield.m4a b/web/space/audio/sfx/shield.m4a index b061a5c0..09db78bc 100644 Binary files a/web/space/audio/sfx/shield.m4a and b/web/space/audio/sfx/shield.m4a differ diff --git a/web/space/audio/sfx/shield.ogg b/web/space/audio/sfx/shield.ogg index 50449844..be89e1bc 100644 Binary files a/web/space/audio/sfx/shield.ogg and b/web/space/audio/sfx/shield.ogg differ diff --git a/web/space/audio/sfx/shield_block.m4a b/web/space/audio/sfx/shield_block.m4a index f245c111..c2cbf88e 100644 Binary files a/web/space/audio/sfx/shield_block.m4a and b/web/space/audio/sfx/shield_block.m4a differ diff --git a/web/space/audio/sfx/shield_block.ogg b/web/space/audio/sfx/shield_block.ogg index ff49d3a1..e3294e39 100644 Binary files a/web/space/audio/sfx/shield_block.ogg and b/web/space/audio/sfx/shield_block.ogg differ diff --git a/web/space/audio/sfx/whiff.m4a b/web/space/audio/sfx/whiff.m4a new file mode 100644 index 00000000..364234f4 Binary files /dev/null and b/web/space/audio/sfx/whiff.m4a differ diff --git a/web/space/audio/sfx/whiff.ogg b/web/space/audio/sfx/whiff.ogg new file mode 100644 index 00000000..608a7b46 Binary files /dev/null and b/web/space/audio/sfx/whiff.ogg differ diff --git a/web/space/audio/voice/female/boost_not_ready.m4a b/web/space/audio/voice/female/boost_not_ready.m4a new file mode 100644 index 00000000..fe09a78a Binary files /dev/null and b/web/space/audio/voice/female/boost_not_ready.m4a differ diff --git a/web/space/audio/voice/female/boost_not_ready.ogg b/web/space/audio/voice/female/boost_not_ready.ogg new file mode 100644 index 00000000..8ccdc594 Binary files /dev/null and b/web/space/audio/voice/female/boost_not_ready.ogg differ diff --git a/web/space/audio/voice/female/protect_soon.m4a b/web/space/audio/voice/female/protect_soon.m4a new file mode 100644 index 00000000..f48cd747 Binary files /dev/null and b/web/space/audio/voice/female/protect_soon.m4a differ diff --git a/web/space/audio/voice/female/protect_soon.ogg b/web/space/audio/voice/female/protect_soon.ogg new file mode 100644 index 00000000..2ac78ff5 Binary files /dev/null and b/web/space/audio/voice/female/protect_soon.ogg differ diff --git a/web/space/audio/voice/male/boost_not_ready.m4a b/web/space/audio/voice/male/boost_not_ready.m4a new file mode 100644 index 00000000..d0d407a3 Binary files /dev/null and b/web/space/audio/voice/male/boost_not_ready.m4a differ diff --git a/web/space/audio/voice/male/boost_not_ready.ogg b/web/space/audio/voice/male/boost_not_ready.ogg new file mode 100644 index 00000000..b05d2d34 Binary files /dev/null and b/web/space/audio/voice/male/boost_not_ready.ogg differ diff --git a/web/space/audio/voice/male/protect_soon.m4a b/web/space/audio/voice/male/protect_soon.m4a new file mode 100644 index 00000000..3670902a Binary files /dev/null and b/web/space/audio/voice/male/protect_soon.m4a differ diff --git a/web/space/audio/voice/male/protect_soon.ogg b/web/space/audio/voice/male/protect_soon.ogg new file mode 100644 index 00000000..c5bbc79c Binary files /dev/null and b/web/space/audio/voice/male/protect_soon.ogg differ diff --git a/web/space/game.js b/web/space/game.js index 38373597..bcb6d7bf 100644 --- a/web/space/game.js +++ b/web/space/game.js @@ -68,6 +68,24 @@ * 第二个 play 漏杀前一个 → 双管线并播 + ScriptProcessor 节点永久泄漏(live 探针 * 实录 dir_up/hit_down 交替抽读百余次)。本层 voice 播放全部经 _voicePlay 串行门 * (等上次令牌落位再发下一次)+ 对局语音全量 prewarm 缓存热,引擎零改动。 + * + * R5(space polish round1/round2,research/space-polish/): + * - **刺耳重合成**:alarm/dodge/shield_block/boost/shield 五件程序合成重制 + * (tools/gen_space_syn.py,真峰值≤-3dBFS、≥3kHz 能量近零),新增 sfx/whiff。 + * - **归因真话·接力补 replay**(live A t+151-163:保护期结束 8 秒三连撞, + * hit_left/hit_down 被 spawn 呼喊零毫秒顶断,玩家至死不知方位):呼喊维持 + * 生存优先裁定不变,但 hit_/protect_end 起播时登记 _defendedId, + * 呼喊播完的 onComplete 发现登记未清除(=被顶断)→ queue 接 replay, + * 保证每句归因/保护期结束宣告完整送达(含 hit_last 排队其后)。 + * - **保护期 protect_* 去重**:6.96s 教学句对 4.0s 刷怪间隔互相截到 4.0s + * (live A 保护期 7 连 TRUNCATED),改为上一句在播即跳过(shield_block 音 + + * WARNING 震不变),每句教学完整播完。 + * - **加速冷却拒绝**(P1/P2/P4:冷却中单击全静默):_deny 共用去抖 + * (heartbeat + voice/boost_not_ready 新句),护盾拒绝同路径(原句不变)。 + * - **protect_soon**:50s 预告"训练护盾还剩十秒"(queue 不顶句),保护期结束 + * 前给反应慢的玩家提前量;菜单/分批引入打断由 _rearmRunTimers 补播。 + * - **激活确认震动**:boost/shield 激活补 CONFIRM 震(04 §5 承诺,此前漏装); + * 挥空/滑错方向补 sfx/whiff 轻叹(0.55 音量,引擎 swipe 震动已有)。 */ import { Game } from '../engine/game.js'; import { Guide } from '../engine/guide.js'; @@ -88,7 +106,7 @@ const DODGE_GRACE_MS = 250; // 判定宽限:spawn 前/撞击点后各让 25 const ALARM_LEAD_MS = 1000; // 撞击前多久开始警报(两档:1s / 0.5s) const SHIELD_DURATION_MS = 6000; const SHIELD_COOLDOWN_MS = 15000; // round4 R1:30s→15s(冷却过长 + 失败零反馈是 P1) -const SHIELD_DENY_DEBOUNCE_MS = 4000; // 护盾不可用应答(语音+震动)去抖 +const DENY_DEBOUNCE_MS = 4000; // R5:护盾/加速不可用应答(语音+震动)共用去抖 const BOOST_DURATION_MS = 1800; const BOOST_COOLDOWN_MS = 3000; const RAMP_MS = 120000; // 难度爬升到满所需时长(保护期后起算) @@ -98,6 +116,7 @@ const PROTECT_SPAWN_MS = 4000; const BARE_GRACE_METEORS = 3; // 保护期结束后前 N 颗裸飞陨石保持保护期节奏(round4 R1 不断崖) const MENU_CALM_MS = 800; // 下滑开菜单冷静期:最近判定后 N ms 内下滑=躲避意图(round2 R2 误暂停修复) const DRILL_APPROACH_MS = 4500; // 演练陨石逼近(慢速、无伤害) +const PROTECT_SOON_MS = 50000; // R5:保护期还剩 10s 预告(protect_soon) const BOOST_INTRO_MS = 20000; // 单击引入时刻 const SHIELD_INTRO_MS = 45000; // 双击引入时刻 const FEATURE_WAIT_MS = 8000; // 分批引入等待玩家操作上限 @@ -157,6 +176,7 @@ export class SpaceGame extends Game { this.runStart = 0; this.protectionUntil = 0; this._protectAnnounced = false; + this._protectSoonAnnounced = false; // R5:50s 预告已播标记 this.swipes = []; this.obstacles = new Set(); this.drillOb = null; @@ -169,9 +189,11 @@ export class SpaceGame extends Game { this.featureKind = null; this._menuIdx = 0; this._bareCount = 0; // 保护期结束后已刷裸飞陨石数(断崖过渡用) - this._shieldDenyAt = -Infinity; // 护盾不可用应答去抖时间戳 + this._denyAt = -Infinity; // 护盾/加速不可用应答共用去抖时间戳(R5) this._hitLastPending = false; // hits===2 时 hit_last 待接播标记(呼喊接力用) this._hitLastPlaying = false; // hit_last 在播标记(警告链呼喊抑制用,round2 R2) + this._defendedId = null; // R5:归因/保护结束句防顶断 replay 登记 + this._protectSaying = false; // R5:protect_* 教学句在播标记(去重用) this._lastResolveAt = -Infinity; // 最近一次陨石判定时刻(下滑开菜单冷静期,round2 R2) // F6:警报去重 / danger 去抖时间戳(soft/loud 分档 + danger 全局) this._alarmSoftAt = -Infinity; @@ -185,14 +207,15 @@ export class SpaceGame extends Game { this.audio.prewarm([ 'sfx/whoosh_left', 'sfx/whoosh_right', 'sfx/whoosh_up', 'sfx/whoosh_down', 'sfx/alarm', 'sfx/boost', 'sfx/shield', 'sfx/shield_block', - 'sfx/dodge', 'sfx/hit', 'sfx/crash', + 'sfx/dodge', 'sfx/hit', 'sfx/crash', 'sfx/whiff', // 对局期可能并发的语音全量预热(voice 播放安全门配套:缓存热 = 令牌落位 // 只需数个 microtask,门内零等待):方向呼喊/归因/保护/护盾/引入/里程碑/向导 'voice/dir_left', 'voice/dir_right', 'voice/dir_up', 'voice/dir_down', 'voice/hit_left', 'voice/hit_right', 'voice/hit_up', 'voice/hit_down', 'voice/hit_last', 'voice/protect_left', 'voice/protect_right', 'voice/protect_up', 'voice/protect_down', - 'voice/protect_end', 'voice/shield_ready', 'voice/shield_block', + 'voice/protect_end', 'voice/protect_soon', 'voice/shield_ready', 'voice/shield_block', 'voice/feat_boost', 'voice/feat_boost_done', 'voice/feat_shield', 'voice/feat_shield_done', + 'voice/boost_not_ready', 'voice/ms_10', 'voice/ms_25', 'voice/ms_50', 'voice/ms_100', 'voice/gd_hit_hint', 'voice/gd_last_life', 'voice/paused', 'voice/menu_main', 'voice/menu_resume', 'voice/menu_lobby', @@ -365,6 +388,7 @@ export class SpaceGame extends Game { // 单击/双击引入教学仅首局(标记在实例上,重开不再调度,第 2 局起机制开局即用) if (!this.boostIntroDone) this._after(BOOST_INTRO_MS, () => this._beginFeature('boost')); if (!this.shieldIntroDone) this._after(SHIELD_INTRO_MS, () => this._beginFeature('shield')); + this._after(PROTECT_SOON_MS, () => this._announceProtectionSoon()); // R5:50s 预告 this._after(PROTECTION_MS, () => this._announceProtectionEnd()); } @@ -378,6 +402,7 @@ export class SpaceGame extends Game { case 'up': case 'left': case 'right': this.swipes.push({ dir: g, t: now }); this._trimSwipes(now); + this._whiffIfUnmatched(g); break; case 'down': // 下滑冲突折中:有下方陨石悬置时是闪避,否则呼出菜单。 @@ -388,6 +413,7 @@ export class SpaceGame extends Game { if ([...this.obstacles].some((ob) => ob.dir === 'down')) { this.swipes.push({ dir: g, t: now }); this._trimSwipes(now); + this._whiffIfUnmatched(g); } else if (now - this._lastResolveAt > MENU_CALM_MS) { this._openMenu(); } @@ -401,6 +427,10 @@ export class SpaceGame extends Game { this.boostUntil = now + BOOST_DURATION_MS; this.boostReadyAt = now + BOOST_COOLDOWN_MS; this.audio.play('sfx/boost'); + vibrate('confirm'); // R5:激活确认(04 §5 承诺,此前漏装) + } else if (this.boostIntroDone) { + // R5:冷却中单击必须有回音(P1/P2/P4:冷却零反馈是动作盲区) + this._deny(now, 'voice/boost_not_ready'); } break; case 'doubletap': @@ -409,25 +439,38 @@ export class SpaceGame extends Game { this.shieldUpUntil = now + SHIELD_DURATION_MS; this.shieldReadyAt = now + SHIELD_COOLDOWN_MS; this.audio.play('sfx/shield'); + vibrate('confirm'); // R5:激活确认(04 §5 承诺,此前漏装) this._scheduleShieldReady(); } else { - this._shieldDeny(now); // 不可用必须有回音(round4 R1:panic 双击零反馈是 P1) + this._deny(now, 'voice/feat_shield_done'); // 不可用必须有回音(round4 R1:panic 双击零反馈是 P1) } break; } } /** - * 护盾不可用(未引入/充能中)的即时应答:现成句 feat_shield_done - * ("会自动充能,好了我会告诉你"语义正合)+ HEARTBEAT 震,4s 去抖防连刷。 - * 注:voice_text.json 无"护盾还没好"专用句,复用此句属 round4 R1 裁定。 + * R5:无效手势轻反馈(归因真话)。滑向没有任何悬置陨石的方向 = 挥空—— + * 引擎 swipe 识别震动已有("收到了"),这里补一声轻叹("但这下没用"), + * 与成功闪避的 dodge 音形成对偶,避免玩家怀疑输入失灵。音量压低不抢戏。 */ - _shieldDeny(now) { - if (now - this._shieldDenyAt < SHIELD_DENY_DEBOUNCE_MS) return; - this._shieldDenyAt = now; + _whiffIfUnmatched(dir) { + if (![...this.obstacles].some((ob) => ob.dir === dir)) { + this.audio.play('sfx/whiff', { volume: 0.55 }); + } + } + + /** + * 护盾/加速不可用(未引入/充能中)的即时应答:HEARTBEAT 震 + 语音提示, + * 4s 共用去抖防连刷(R5 起护盾/加速同路径,仅语音 id 不同)。 + * 护盾句复用 feat_shield_done("会自动充能,好了我会告诉你"语义正合,round4 R1 裁定); + * 加速句用新句 boost_not_ready("引擎还在冷却,稍等一下。",R5)。 + * 警告链在播时排队到链尾,不顶断"最后一命"(round2 R2)。 + */ + _deny(now, voiceId) { + if (now - this._denyAt < DENY_DEBOUNCE_MS) return; + this._denyAt = now; vibrate('heartbeat'); - // 警告链在播时排队到链尾,不顶断"最后一命"(round2 R2) - this.audio.play('voice/feat_shield_done', this._warnActive() ? { queue: true } : undefined); + this.audio.play(voiceId, this._warnActive() ? { queue: true } : undefined); } /** 护盾充能完毕播报 + PICKUP 震动(若仍在这一局)。语音排队播,不顶 protect_end/归因句。 */ @@ -469,12 +512,14 @@ export class SpaceGame extends Game { this.boostUntil = now + BOOST_DURATION_MS; this.boostReadyAt = now + BOOST_COOLDOWN_MS; this.audio.play('sfx/boost'); + vibrate('confirm'); // R5:激活确认(04 §5) this._speak(['voice/feat_boost_done']); this._endFeature(); } else { this.shieldUpUntil = now + SHIELD_DURATION_MS; this.shieldReadyAt = now + SHIELD_COOLDOWN_MS; this.audio.play('sfx/shield'); + vibrate('confirm'); // R5:激活确认(04 §5) this._speak(['voice/feat_shield_done']); this._endFeature(); // _endFeature → _rearmRunTimers 会按 shieldReadyAt 重排充能播报 } @@ -506,6 +551,15 @@ export class SpaceGame extends Game { if (remain <= 0) this._announceProtectionEnd(); // 已过期,立即补播 else this._after(remain, () => this._announceProtectionEnd()); } + // R5:50s 预告补播(菜单/分批引入打断后的恢复) + if (!this._protectSoonAnnounced) { + const soonRemain = this.runStart + PROTECT_SOON_MS - now; + if (soonRemain <= 0) { + if (this.protectionUntil > now) this._announceProtectionSoon(); + } else { + this._after(soonRemain, () => this._announceProtectionSoon()); + } + } if (this.shieldReadyAt > now) { this._scheduleShieldReady(this.shieldReadyAt - now); } @@ -515,12 +569,52 @@ export class SpaceGame extends Game { // ---------------- 保护期 ---------------- + /** R5:50s 预告(保护期还剩 10 秒)。queue 不顶在播教学句;被打断由 _rearmRunTimers 补播。 */ + _announceProtectionSoon() { + if (this._protectSoonAnnounced) return; + if (this.phase !== 'playing') return; // 菜单/分批引入中,恢复时补播 + this._protectSoonAnnounced = true; + this.audio.play('voice/protect_soon', { queue: true }); + } + + /** R5:保护结束宣告走防顶断登记(live A t+151.6:被 spawn 呼喊顶得只剩 0.5s)。 */ _announceProtectionEnd() { if (this._protectAnnounced) return; if (this.phase !== 'playing') return; // 菜单/分批引入中,恢复时由 _rearmRunTimers 补播 this._protectAnnounced = true; vibrate('warning'); - this.audio.play('voice/protect_end'); + this._defendVoice('voice/protect_end'); + } + + /** + * R5 防顶断登记:生存语义长句(hit_/protect_end)起播时登记 id; + * 自然播完/被跳过 → onComplete 清除登记(= 完好送达); + * 被 spawn 呼喊顶断 → 登记残留,呼喊播完的 onComplete 走 _replayDefended + * queue 接 replay(呼喊生存优先裁定不变,句子保证完整送达一次)。 + */ + _defendVoice(id, onDone) { + this._defendedId = id; + this.audio.play(id, { + onComplete: () => { + if (this._defendedId === id) this._defendedId = null; + if (onDone) onDone(); + }, + }); + } + + /** R5:呼喊播完时发现登记残留(= 顶断了生存句)→ queue 接 replay,不顶新威胁信息。 + * @returns {boolean} 是否发生了 replay(发生了则 hit_last 由 replay 播完接力,不必此刻 drain) */ + _replayDefended() { + const id = this._defendedId; + if (!id) return false; + this._defendedId = null; + if (id.startsWith('voice/hit_')) { + // 归因 replay 播完仍要接"最后一命"(语义链:先因后果) + this.audio.play(id, { queue: true, onComplete: () => this._drainHitLast() }); + } else { + this.audio.play(id, { queue: true }); + } + return true; } // ---------------- 陨石调度 ---------------- @@ -562,7 +656,9 @@ export class SpaceGame extends Game { // 被下一颗的呼喊顶断(live B5:高速段警告刚起播就被顶没);归因在播期间呼喊 // 保留生存优先级(顶断 → 接力,低延迟警告路径不变)。 if (impactAt > this.protectionUntil && !this._hitLastPlaying) { - this.audio.play(`voice/dir_${dir}`, { onComplete: () => this._drainHitLast() }); + // onComplete 双职责(R5):① 顶断了归因/保护结束句 → queue 接 replay(replay 播完 + // 自行接力 hit_last);② 呼喊接力(round4 R1):无 replay 时 hit_last 挂起直接接播。 + this.audio.play(`voice/dir_${dir}`, { onComplete: () => { if (!this._replayDefended()) this._drainHitLast(); } }); } // 警报两档渐强,DANGER 震动同步叠加。 // F6(round2):警报音效同 600ms 窗口去重(双陨石同时逼近只起一波警报, @@ -625,7 +721,13 @@ export class SpaceGame extends Game { if (this._inProtection()) { this.audio.play('sfx/shield_block'); vibrate('warning'); - this.audio.play(`voice/protect_${ob.dir}`); + // R5 去重:6.96s 教学句对 4.0s 刷怪间隔(live A 保护期 7 连 TRUNCATED, + // 每句都截在同一个字上)——上一句在播即跳过,保证每句完整送达; + // 被跳过的那次仍有 shield_block 音 + WARNING 震落位。 + if (!this._protectSaying) { + this._protectSaying = true; + this.audio.play(`voice/protect_${ob.dir}`, { onComplete: () => { this._protectSaying = false; } }); + } return; } // 5) 实打实撞上:HIT 震动 + 归因语音(第 2 次加"只剩最后一次") @@ -642,15 +744,16 @@ export class SpaceGame extends Game { // 顶断路径:归因被呼喊顶掉 → 呼喊播完的 onComplete(_spawnObstacle 挂的) // → _drainHitLast 接播。重开/回大厅由 _resetRunState 清挂起。 if (this.hits === 2) this._hitLastPending = true; - this.audio.play(`voice/hit_${ob.dir}`, { - onComplete: () => { - if (this.hits === 1) { - // 第 1 次受击补指令式 gd_hit_hint(hit_ 已归因方位,这句补 - // "该怎么拨",onceKey 同局一次) - this.guide.error({ voice: 'gd_hit_hint', onceKey: 'space_hit_hint', skipHaptic: true }); - } - this._drainHitLast(); - }, + // R5:归因句走防顶断登记(_defendVoice)——被 spawn 呼喊顶断时由呼喊 + // onComplete 走 _replayDefended 补 replay(live A t+155.13/159.13: + // hit_left/hit_down 零毫秒被杀,玩家至死不知方位)。 + this._defendVoice(`voice/hit_${ob.dir}`, () => { + if (this.hits === 1) { + // 第 1 次受击补指令式 gd_hit_hint(hit_ 已归因方位,这句补 + // "该怎么拨",onceKey 同局一次) + this.guide.error({ voice: 'gd_hit_hint', onceKey: 'space_hit_hint', skipHaptic: true }); + } + this._drainHitLast(); }); } } diff --git a/web/space/test/playtest.mjs b/web/space/test/playtest.mjs index 9b70a3f5..d6eccd70 100644 --- a/web/space/test/playtest.mjs +++ b/web/space/test/playtest.mjs @@ -3,7 +3,9 @@ * + 边界断言)与 §7(全局通用断言),以及本轮改动(状态 BGM / skipVoice / skip_hint)、 * §11 round4-live 修复(方向呼喊提前到 spawn / 闪避窗口=呼啸全程 / 护盾 15s+不可用应答 / * 保护期断崖过渡 / hit_last 呼喊接力 / feat 教学仅首局),以及 round2 R2 修复 - * (下滑开菜单冷静期防误暂停 / 暂停恢复缓冲 / 回大厅收尾流程 / 警告链呼喊抑制+坠毁掐断)。 + * (下滑开菜单冷静期防误暂停 / 暂停恢复缓冲 / 回大厅收尾流程 / 警告链呼喊抑制+坠毁掐断), + * 以及 R5 space polish 修复(research/space-polish/:归因防顶断 replay / protect_* 去重 / + * protect_soon 50s 预告 / 加速冷却拒绝 boost_not_ready / 激活 CONFIRM 震 / whiff 挥空音)。 * * 用法:tools/node/bin/node web/space/test/playtest.mjs * @@ -179,6 +181,7 @@ function makeHarness() { const voices = (plays) => plays.filter((p) => p.id.startsWith('voice/')).map((p) => p.id); const lastVoice = (plays) => voices(plays).at(-1); const vibrated = (pat) => vibrations.some((v) => Array.isArray(v) && v.join() === pat); +const confirmCount = () => vibrations.filter((v) => Array.isArray(v) && v.join() === '20').length; try { // ====================================================================== @@ -267,6 +270,21 @@ try { assert(!plays.some((p) => p.t >= t0 && p.id.startsWith('voice/dir_')), '撞击点落在保护期内的陨石 spawn 不播 dir_(§11:protect 长句教学优先)'); + // -- R5:protect_* 去重——上一句教学在播时新吸收只发 shield_block 音 + WARNING 震, + // 不再互截(live A 保护期 7 连 TRUNCATED 修复) -- + const protectVoiceCount = voices(plays).filter((id) => id.startsWith('voice/protect_')).length; + const shieldBlockCount = plays.filter((p) => p.id === 'sfx/shield_block').length; + game.obstacles.clear(); + const obP2 = { dir: 'right', impactAt: clock.now + 100 }; + game.obstacles.add(obP2); + game._after(100, () => game._resolve(obP2)); + await advance(150); + assert(game.hits === 0, 'R5 去重吸收仍不掉血(训练护盾)'); + assert(voices(plays).filter((id) => id.startsWith('voice/protect_')).length === protectVoiceCount, + 'protect_* 在播时新吸收跳过语音(R5 去重,每句教学完整播完)'); + assert(plays.filter((p) => p.id === 'sfx/shield_block').length === shieldBlockCount + 1, + '去重吸收仍有 shield_block 音落位'); + // -- §5.3 第 20s 单击引入(feat_boost 可跳) -- await advance(t0 + 20000 - clock.now); assert(game.phase === 'feature' && game.featureKind === 'boost', '第 20s 暂停刷怪教单击'); @@ -279,6 +297,7 @@ try { assert(game.boostUntil > clock.now, '旁白已跳后单击 → boost 生效(§5.3)'); assert(game.phase === 'playing', '分批引入结束恢复 playing'); assert(lastVoice(plays) === 'voice/feat_boost_done', 'feat_boost_done 确认句'); + assert(confirmCount() >= 1, '加速激活 CONFIRM 震(R5 兑现 04 §5)'); // 加速增益期间的撞击算冲过空隙 game.obstacles.clear(); @@ -293,6 +312,7 @@ try { assert(game.phase === 'feature' && game.featureKind === 'shield', '第 45s 教双击护盾'); game.onGesture('doubletap'); await tick(); assert(game.shieldUpUntil > clock.now, '双击 → 护盾生效(§5.3)'); + assert(confirmCount() >= 2, '护盾激活 CONFIRM 震(R5 兑现 04 §5)'); assert(game.shieldReadyAt === clock.now + 15000, '护盾充能 15s 锁定(§11 改口,原 30s)'); assert(game.phase === 'playing', '护盾引入结束恢复 playing'); @@ -325,12 +345,37 @@ try { // -- §5.4 保护解除播报 -- await advance(t0 + 60050 - clock.now); assert(game._protectAnnounced && voices(plays).includes('voice/protect_end'), '60s 保护解除播报'); + assert(game._protectSoonAnnounced && voices(plays).includes('voice/protect_soon'), + '50s 保护期预告 protect_soon(R5:给反应慢的玩家 10s 提前量)'); // -- 边界:护盾充能完毕播报,且只播一次(回归:曾双重调度播两次) -- await advance(game.shieldReadyAt - clock.now + 50); assert(voices(plays).filter((id) => id === 'voice/shield_ready').length === 1, 'shield_ready 充能完毕播报恰好一次'); assert(vibrated('15'), '护盾就绪 PICKUP 震动'); + await advance(2000); // 静场起点 + { // 排队的 protect_soon/protect_end/shield_ready 串行播完(虚拟时钟下语音门有落位延迟, + // 轮询等待而非固定 advance——拒绝用例需要 voice 真正空闲) + let guard = 0; + while (audio.isVoicePlaying() && guard++ < 20) await advance(300); + } + assert(!audio.isVoicePlaying(), '静场:排队的状态句播完,拒绝用例需 voice 空闲'); + + // -- R5:加速冷却拒绝(归因真话:冷却单击必须有回音,此前全静默) -- + const notReadyCount = () => voices(plays).filter((id) => id === 'voice/boost_not_ready').length; + const denyVoiceBefore = notReadyCount(); + const confirmBefore = confirmCount(); + game.onGesture('tap'); await tick(); // voice 空闲 → 加速直接生效 + assert(game.boostUntil > clock.now, 'R5 用例前置:加速激活'); + assert(confirmCount() === confirmBefore + 1, '对局期加速激活 CONFIRM 震(R5)'); + const boostUntilLocked = game.boostUntil; + game.onGesture('tap'); await tick(); // 冷却中(3s)→ 拒绝 + assert(game.boostUntil === boostUntilLocked, '冷却中单击不重置加速'); + assert(notReadyCount() === denyVoiceBefore + 1, '加速冷却拒绝播报 boost_not_ready(R5)'); + assert(vibrated('40,100,40'), '加速冷却拒绝 HEARTBEAT 震(R5)'); + game.onGesture('tap'); await tick(); + assert(notReadyCount() === denyVoiceBefore + 1, '加速冷却拒绝 4s 去抖(连刷不重播)'); + await advance(3100); // 冷却结束,后续用例不受影响 // -- §5.4/§11 正常闪避 3 颗(同向滑;§11 起窗口=呼啸全程,此处仍在撞击前 800ms 出手) -- // 同循环验证 §11 断崖过渡(裸飞第 1~3 颗逼近固定 4.0s)与方向呼喊时机(spawn 同窗) @@ -378,6 +423,7 @@ try { naturalSpawn(); const obH1 = [...game.obstacles].at(-1); game.onGesture('right'); // 反向 + assert(plays.some((p) => p.id === 'sfx/whiff'), '滑错方向有挥空轻叹(R5 归因真话:无效手势有回音)'); await advance(obH1.impactAt - clock.now + 50); assert(game.hits === 1, '反向滑不判闪避,撞击 hits=1'); assert(lastVoice(plays) === 'voice/hit_left', 'hit_ 归因方向与来袭一致'); @@ -402,11 +448,20 @@ try { const obNext = [...game.obstacles].at(-1); await tick(); assert(h.voiceStarts.at(-1).id === 'voice/dir_left', '下一颗 spawn 呼喊顶断归因(生存优先级)'); - await advance(1300); // 呼喊播完 → onComplete 接力 → hit_last 自动接播 + assert(game._defendedId === 'voice/hit_right', '归因被顶断后登记残留(R5 防顶断登记)'); + // R5:登记残留 → 呼喊播完的 onComplete 走 _replayDefended queue 补 replay(归因完整送达)。 + // 虚拟时钟下语音门有落位延迟,用轮询等 replay/接播事件而非固定 advance 步长。 + const hitRightStarts = () => h.voiceStarts.filter((v) => v.id === 'voice/hit_right').length; + let guard = 0; + while (hitRightStarts() < 2 && guard++ < 16) await advance(300); + assert(hitRightStarts() === 2, '归因被呼喊顶断后补 replay(R5:玩家不再丢失方位归因)'); + assert(game._defendedId === null, 'replay 后登记清除'); + while (h.voiceStarts.at(-1).id !== 'voice/hit_last' && guard++ < 32) await advance(300); assert(h.voiceStarts.at(-1).id === 'voice/hit_last', - '归因被呼喊顶断后 hit_last 仍接播(§11:最后一命不再被静默吞掉)'); + '归因 replay 播完接播 hit_last(§11:最后一命不再被静默吞掉,R5 先因后果)'); assert(game._hitLastPending === false, 'hit_last 接播后挂起标记清除'); assert(game._hitLastPlaying === true, 'hit_last 在播标记置位(round2 R2)'); + game.obstacles.delete(obNext); // R5:replay 多耗一个呼喊周期,提前摘除防其撞击点坠毁干扰抑制用例 // round2 R2:hit_last 在播期间新刷陨石的 spawn 呼喊被抑制(警告播完前不被顶断) const shoutMark2 = h.voiceStarts.length; randQueue.push(0.5); // up @@ -415,14 +470,14 @@ try { await tick(); assert(!h.voiceStarts.slice(shoutMark2).some((v) => v.id === 'voice/dir_up'), 'hit_last 在播期间 spawn 不播方向呼喊(round2 R2:警告播完前不被顶断)'); - await advance(1300); // hit_last 播完 → 呼喊抑制解除 + game.obstacles.delete(obNext2); // 立即摘除(后续轮询等待会越过其撞击点) + let guard2 = 0; + while (game._hitLastPlaying && guard2++ < 16) await advance(300); assert(game._hitLastPlaying === false, 'hit_last 播完在播标记清除'); randQueue.push(0.5); // up:链后再刷陨石,方向呼喊恢复 naturalSpawn(); await tick(); assert(h.voiceStarts.at(-1).id === 'voice/dir_up', '警告链结束后方向呼喊恢复(round2 R2)'); - game.obstacles.delete(obNext); - game.obstacles.delete(obNext2); game.obstacles.clear(); game.swipes = []; // -- 边界:里程碑 dodges=10 播 ms_10 --