feat(new8/batch1): 两款新 RPG《不眠频率》radio +《回声地窟》dungeon 全套(多agent流水线:策划→资产→开发→测试→玩家R1→修复→R2)
- 程序章程 research/new8/00-program.md(8款概念/回合协议/验收门/进度账) - 设计:docs/design/15-radio.md+voice-ids(132句,6状态9抉择4结局,电话滤波资产侧带通)/16-dungeon.md+voice-ids(125句,脉冲回声/7层seed生成/三档战斗/元进度遗产) - 资产:TTS 970文件(GPU flock串行)+ Mureka BGM 8首 $0.24(台账 mureka_log.md)+ 程序合成 sfx(含预pan侧墙/开口、phone_ring铃声、amb_cave呼吸层、turn_tick)+ 终检 check_all_assets 8游戏全绿 - radio:game.js+playtest 221断言(4结局矩阵/pendingChoice盲玩公平/RING两级看门狗/菜单循环/存档schema) - dungeon:game.js+playtest 1610断言(seed全网格回声一致性/学期零死/格挡80%/死亡归因真话/元进度/菜单冻结/上滑5段状态链) - 引擎修复:audio.js _playVoice 加载竞态补杀 token(R1真机71分钟语音风暴根因)+ 同id 3s窗口≥5次熔断保险丝 + gesture.js 长按boost事件门(+66行,9套件回归全绿) - 大厅:新增 radio/dungeon 卡片 + GAMES 数组 - harness:sessions/radio.mjs+dungeon.mjs(主线+压力双剧本)+ transcribe 注册 + voice_text.json 刷新(8游戏704句)+ 13号文档 §20 登记 - R1 存档:4人设评审×2游戏 + 真机试玩报告×2(radio 5/5愿意玩;dungeon 0/4→确诊风暴)+ synthesis×2 + 转写8份 - R2 修复:radio F1-F5(看门狗补挂/rep_low改词重录/真铃声/ASK续玩语义/链末跳过保护)+ dungeon D0-1..D1-6(风暴根治/回声真实性/密度下限+呼吸层/导航最短路/菜单关闭反馈/金币档同账本)+ 实现核对登记
This commit is contained in:
@@ -19,6 +19,8 @@
|
||||
| rhythm | Uncle_Fu | Vivian | female 沿用原解说音色 |
|
||||
| space | Uncle_Fu | Serena | female 沿用原导航音色 |
|
||||
| rpg | Uncle_Fu | Serena | 旁白;NPC 单音色平铺(见 rpg 章节) |
|
||||
| radio | Uncle_Fu(HOST)/Dylan(PROD) | Serena(HOST)/Vivian(PROD) | 双性别行同性别双 speaker(VOICE_SPK 逐句覆盖);NPC 单音色平铺 5 音色+逐人带通(见 radio 章节) |
|
||||
| dungeon | Uncle_Fu | Serena | 旁白全表统一 instruct,无 NPC |
|
||||
|
||||
关于 Ryan:冒烟测试样本在 `tools/samples/ryan_zh_*.wav`(3 条中文句)。Ryan 是英语母语音色(见 `env.d/tts.md`),项目已有中文发音投诉(反馈⑥),男声统一采用中文母语的 Uncle_Fu;如需换成 Ryan,改 `tools/gen_voice_dual.py` 的 `SPEAKERS` 表重跑即可。
|
||||
|
||||
@@ -89,6 +91,30 @@
|
||||
- bgm(6,Mureka):`village battle boss ending`(R4)+ R6 新增 `menu`(菜单 pad)与 `explore`(探索轻垫乐,10 文档 §7 恢复,volume 0.35);90s 无缝循环;`amb_*` 由游戏层手动 loop 接 sfx 总线
|
||||
- 再生成方法见 `web/rpg/gen/README.md`
|
||||
|
||||
### radio《不眠频率》(批次 1 新游戏,叙事模式,台词依据 `docs/design/15-radio-voice-ids.md`)
|
||||
|
||||
- voice 双性别版(male/ 与 female/ 各 103 条):**HOST 主播** 29 条(male=Uncle_Fu「低沉温和的中年男声,深夜电台主播,沉稳亲切,有磁性」/ female=Serena「温暖清晰的年轻女声,深夜电台主播,沉稳亲切,不甜腻」:开场 `b_open b_rain`、主播句 `z1_* l1_* k1_* w1_* h1_*` 主播行、心结 `d9_face d9_avoid`、结局 `e1–e4_a/b`)+ **PROD 导播/系统/向导** 74 条(male=Dylan / female=Vivian,instruct「贴近耳机的低语男/女声,年轻电台导播,冷静克制」:`gd_* sys_* prog_c1–5 rep_*`、导播行、抉择提示 `p1–p9`、尾声 `ep_*`)。同性别双 speaker 逐句覆盖见 `tools/gen_voice_dual.py` 的 `VOICE_SPK["radio"]`(同场景高频对话的两者永不同 speaker)。
|
||||
- voice NPC 平铺(29 条,落 `voice/` 根,引擎平铺回退;**转码带通**见下):老周 7 条(z1_*,Uncle_Fu·苍老沙哑)、小鹿 4 条(l1_*,Serena·哭腔倔强)、糖糖 6 条(k1_*,Vivian·稚嫩童声)、陈姐 7 条(w1_*,Vivian·疲惫沙哑中年)、老韩 5 条(h1_*,Eric·沙哑粗犷司机)。
|
||||
- **通话滤波(资产侧,15-radio.md §6.2)**:convert 转码时按来电者逐档 ffmpeg 带通+轻压缩(老周 500-2800 / 小鹿 400-3400 / 糖糖 450-3000 / 陈姐 420-3100 / 老韩 300-3400 Hz,均 `acompressor threshold=-20dB ratio=3`);参数在 `tools/gen_voice_dual.py` 的 `NPC_BANDPASS`,未滤波原声保留在 staging `tools/gen_voice_dual_wav/radio/npc/` 可重滤/回退。HOST/PROD 不滤波。**待人工试听**:滤波句可读性抽检,不可读句按「宁窄勿脏」回退未滤波原声(staging 重转即可)。
|
||||
- sfx(2,SYN 程序合成):`ui_confirm ui_menu`(`web/radio/gen/gen_sfx.py`,全局 storyline 先例同款双音/软音)。**缺失 13 件 SA3**(HF token 未配置,本轮跳过):`onair_sting phone_ring line_connect line_drop amb_studio amb_rain_city amb_station amb_kid_room arg_muffled amb_street_rain amb_cab brake_screech tape_static`。
|
||||
- bgm(4,Mureka $0.12):`onair bridge ending`(-20 LUFS)+ `menu`(menu pad,-24 LUFS,10 文档 §1.2);90.00s 无缝循环;后处理脚本 `web/radio/gen/gen_bgm.sh`。
|
||||
- 合计 241 ogg + 241 m4a(每游戏音频 = 235 voice + 2 sfx + 4 bgm);台词/生成/终检走 `tools/gen_voice_dual.py --game radio` 与 `tools/check_all_assets.py`。
|
||||
|
||||
### dungeon《回声地窟》(批次 1 新游戏,Roguelike 模式,台词依据 `docs/design/16-dungeon-voice-ids.md`)
|
||||
|
||||
- voice 双性别版(male/ 与 female/ 各 125 条,无 NPC——怪物不说话):male=Uncle_Fu「低沉醇厚的男声,像探窟向导,沉稳有力」/ female=Serena「平静清晰的女声,像探窟向导,沉稳可信」,两常量全表统一。分组:序章/标题 4、教学 DRILL 19、系统/菜单/状态 35、探索事件 9、战斗 30、卡关/看门狗/纠错 14、结算/元进度 14。
|
||||
- sfx(19 文件,全 SYN 程序合成,`web/dungeon/gen/gen_sfx.py`):`pulse`(声波脉冲)、材质尾音 `mat_stone/door/stair/water`、**预 pan 立体声** `side_wall_l/r side_open_l/r`(mono 源 + ffmpeg pan 派生,能量只在单声道,极性脚本断言)、移动 `step_own step_turn bump`、拾取 `coin potion gear`、战斗 `atk_swing parry hurt`、`levelup`(D 小调五声上行钟声琶音)。**缺失 24 文件 SA3**(HF token 未配置,本轮跳过):`echo_1–4 stairs_down mob_step_{small,bug,heavy}_l/c/r tel_{small,bug,heavy}(_l/r 派生) atk_hit enemy_die`(SA3 单声道源 + pan 派生工艺见 16-dungeon.md §9.2)。
|
||||
- bgm(4,Mureka $0.12):`menu explore battle boss`(全部 -20 LUFS,16-dungeon.md §9.1);90.00s 无缝循环;battle/boss 的 bpm 仅为 prompt 特征词、无节拍网格玩法,未跑 bpm_precise;后处理脚本 `web/dungeon/gen/gen_bgm.sh`。
|
||||
- 合计 273 ogg + 273 m4a(250 voice + 19 sfx + 4 bgm);台词/生成/终检走 `tools/gen_voice_dual.py --game dungeon` 与 `tools/check_all_assets.py`。
|
||||
|
||||
### 批次 1 资产账(2026-09-01)
|
||||
|
||||
- radio 132 句(双性别 103 ×2 + NPC 平铺 29)= 235 voice 资产;dungeon 125 句 ×2 = 250。两游戏合计 970 文件(ogg+m4a)。
|
||||
- GPU 串行(flock):radio male/female/npc 与 dungeon male/female 共 5 轮,`--check` 全绿(无时长离群/短句)。
|
||||
- Mureka 8 任务 $0.24(台账见 `tools/mureka_log.md` 2026-09-01 节),全部一次成功。
|
||||
- 音色分配表新增:radio(双性别 HOST=Uncle_Fu/Serena + PROD=Dylan/Vivian 双配对 + NPC 平铺 5 音色)、dungeon(Uncle_Fu/Serena)。
|
||||
- sfx 真峰值(逐声道解码回读)全部 ≤ -3dBFS、|直流| ≤ 0.001、无边界爆豆(源 8ms cos² 淡入淡出 + 垫音 + hp30 工艺,`web/<game>/gen/gen_sfx.py` 内建 QC)。
|
||||
|
||||
## 响度与爆音标准(R6 起)
|
||||
|
||||
- sfx one-shot:峰值归一 **-3dBFS**(真峰值经 ogg 解码回读校验,见 round6-report §1);首尾 8ms cos² 淡入淡出;去直流。
|
||||
|
||||
@@ -744,3 +744,17 @@
|
||||
- **引擎回归**:gesture.js 改动 opt-in(immediateTap 默认 false 零行为
|
||||
变化);6 个 playtest 全绿(escape 140 / rpg 188 / simon / space 152 /
|
||||
storyline / rhythm 141)+ guide.test 122 断言全绿。
|
||||
|
||||
## 20. 新游戏登记:《不眠频率》(radio) 与《回声地窟》(dungeon)(new8 批次 1)
|
||||
|
||||
两款新 RPG 的断言清单与实现核对**住各自设计文档**(断言条目随轮次在原地维护):
|
||||
|
||||
- radio:[15-radio.md](15-radio.md) §测试(playtest 清单)+ 文末「实现核对」(193 断言逐条 ✅/合并/舍弃)。
|
||||
要点:4 结局矩阵路径、pendingChoice 盲玩公平、C3 埋线索/C4 消费差分、rep 剧本验算、
|
||||
RING 看门狗两级不同句(gd_ring1/gd_ring2)、模态菜单循环-确认-关闭不丢节点、中断复述、存档 schema。
|
||||
- dungeon:[16-dungeon.md](16-dungeon.md) §测试 + 文末「实现核对」(1277 断言逐条)。
|
||||
要点:固定 seed 网格复现+不变式、回声调度全扫描(echo_1..4 延迟/音量/材质/pan)、DRILL 九步、
|
||||
学期零死、格挡 80%/逃跑必成挨一下/Boss 拒逃、死亡归因真话(3 死因矩阵)、元进度遗产解锁、
|
||||
菜单暂停冻结、上滑 5 段状态链。
|
||||
|
||||
R1 起每轮的增量断言(修复回归)在各自设计文档的轮次小节追加,不在本文件重复。
|
||||
|
||||
@@ -0,0 +1,230 @@
|
||||
# 15b · 《不眠频率》(radio) 语音台词表(voice ids,录音依据)
|
||||
|
||||
> **给音频总监的录制说明**
|
||||
> - **双性别组**(主播 HOST + 导播/系统 PROD,103 句):落 `web/radio/audio/voice/female|male/<id>.{ogg,m4a}`,两性别 id 集合完全一致。
|
||||
> - **HOST(主播=玩家)**:female = `Serena`,instruct 常量 `温暖清晰的年轻女声,深夜电台主播,沉稳亲切,不甜腻`;male = `Uncle_Fu`,instruct 常量 `低沉温和的中年男声,深夜电台主播,沉稳亲切,有磁性`。
|
||||
> - **PROD(导播/系统音/向导 gd_*)**:female = `Vivian`,instruct 常量 `贴近耳机的低语女声,年轻电台导播,冷静克制`;male = `Dylan`,instruct 常量 `贴近耳机的低语男声,年轻电台导播,冷静克制`。
|
||||
> - 区分度设计:主播(播音腔,对外广播)与导播(贴耳低语,只进你耳机)共用 speaker 池但**不同 speaker 配对**——female 侧主播 Serena / 导播 Vivian、male 侧主播 Uncle_Fu / 导播 Dylan,同场景高频对话的两者永不同 speaker。
|
||||
> - **NPC 平铺组**(29 句):单音色、**不做双性别**,平铺落 `web/radio/audio/voice/<id>.{ogg,m4a}`(引擎平铺回退命中),转码时按 §通话滤波 加带通。NPC 共 5 人(≤5 约束),同一角色 speaker+instruct 恒定,区分度风险逐个标注:
|
||||
> | 角色 | speaker | instruct 常量 | 区分度风险 |
|
||||
> |---|---|---|---|
|
||||
> | 老周(75 岁走丢老人) | `Uncle_Fu` | `苍老沙哑的男声,七十五岁,疲惫害怕,带着雨夜的颤抖` | **中**:与 male 主播同 speaker,靠年龄感 instruct + 电话滤波(500-2800Hz)区分,请试听确认 |
|
||||
> | 小鹿(想退票的年轻人) | `Serena` | `年轻女声,倔强,带着哭腔,疲惫` | **中**:与 female 主播同 speaker,靠哭腔 instruct + 电话滤波区分,请试听确认 |
|
||||
> | 糖糖(失眠的孩子) | `Vivian` | `稚嫩童声,八岁小女孩,困倦,胆怯` | **低**:与 female 导播同 speaker,童声 vs 成年低语,且从不同场 |
|
||||
> | 陈姐(争吵的夫妻·妻) | `Vivian` | `疲惫沙哑的中年女声,四十五岁,强撑着平静` | **低**:与糖糖/导播同 speaker 不同 instruct,三者从不同场,请试听确认 |
|
||||
> | 老韩(雨夜司机) | `Eric` | `沙哑粗犷的中年男声,货车司机,困倦强撑` | **低**:male 侧唯一 Eric |
|
||||
> - **通话滤波(转码侧)**:NPC 全部走带通(参数见 15-radio.md §6.2:老周 500-2800 / 小鹿 400-3400 / 糖糖 450-3000 / 陈姐 420-3100 / 老韩 300-3400,均 + 轻压缩);HOST/PROD 不滤波。试听不可读的句子回退未滤波原声(宁窄勿脏)。
|
||||
> - **称呼规则**:来电者对主播的称呼一律中性(「主播」「您」),**全表禁用**「闺女/小哥/叔叔/阿姨/大姐头」类性别化称呼(主播性别随用户设置变化);「大姐/姑娘」仅可作来电者的**自称或被导播描述**。
|
||||
> - **数字规避**:序号/口碑全部分档整句(prog_c1..c5、rep_*);句内数字(十一点半、三公里、四十分钟前)写死在整句里,禁止运行时拼接。
|
||||
> - **禁语速词**:instruct 不含任何语速描述(引擎 SoundTouch 变速);NPC 句靠短句+逗号停顿实现「语速放缓」听感。
|
||||
> - 管线:`tools/gen_voice_dual.py` 照录(SPEAKERS 表需新增 radio 行);多音字自查见文末注记。
|
||||
|
||||
## G0 组 · 系统/向导/状态(PROD 双性别 ×24)
|
||||
|
||||
| id | 台词全文 | 触发 |
|
||||
|---|---|---|
|
||||
| `gd_brief` | 单击继续节目。请选择的时候,向左或向右滑。 | 开场链最前(full 档,F8 先例) |
|
||||
| `gd_continue` | 单击屏幕,继续。 | 叙事链末静默看门狗第 1 级(full 25s / standard 13s) |
|
||||
| `gd_again` | 还在吗?单击继续。 | 看门狗第 2 级(50s / 30s),新句不逐字重播 |
|
||||
| `gd_invalid` | 这个手势,直播间里用不上。 | 无效手势(error 震,idle-only,同局限次) |
|
||||
| `gd_ring1` | 热线在闪。单击,接听。 | RING 静默 10s(第 1 级) |
|
||||
| `gd_ring2` | 灯还亮着,听众在等。单击,接听。 | RING 静默 25s(第 2 级,**必须与第 1 级不同句**) |
|
||||
| `sys_help` | 单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。 | 上滑帮助 / 菜单内上滑 |
|
||||
| `sys_menu` | 菜单。单击切换选项,双击确认。 | 下滑呼出模态菜单 |
|
||||
| `sys_menu_resume` | 回到直播。 | 菜单项 |
|
||||
| `sys_menu_restart` | 重新开始今晚。 | 菜单项 |
|
||||
| `sys_menu_lobby` | 保存并回大厅。 | 菜单项(确认后跳转前播) |
|
||||
| `sys_settings` | 音色、语速、背景音乐,请回大厅修改。 | 菜单内设置提示 |
|
||||
| `sys_skip` | 想跳过这句,单击就行。 | 开场每局一次(skip_hint 先例) |
|
||||
| `sys_continue_ask` | 检测到你的夜班记录。单击继续上次,右滑开始新的夜晚。 | 有存档进游戏 |
|
||||
| `sys_new_night` | 新的夜晚,开始了。 | 新夜班开始 / 菜单重开 |
|
||||
| `sys_saved` | 进度已保存。 | 存档写入后 |
|
||||
| `prog_c1` | 现在是今晚第一通电话。 | 上滑状态链(按当前通号选播) |
|
||||
| `prog_c2` | 现在是今晚第二通电话。 | 同上 |
|
||||
| `prog_c3` | 现在是今晚第三通电话。 | 同上 |
|
||||
| `prog_c4` | 现在是今晚第四通电话。 | 同上 |
|
||||
| `prog_c5` | 现在是今晚第五通电话。 | 同上 |
|
||||
| `rep_high` | 今晚的口碑,在听众里立住了。 | 口碑跨入 ≥5 档(BRIDGE 被动播报) |
|
||||
| `rep_mid` | 今晚的口碑,不好不坏。 | 口碑回落 1-4 档 |
|
||||
| `rep_low` | 今晚的口碑,还没立起来。 | 口碑 ≤0 档(零起步语义,R2 F2 改词:rep=0 开播前不再读成「砸了」;附 warning 震动) |
|
||||
|
||||
## G1 组 · 开场(双性别 ×4)
|
||||
|
||||
| id | 声部 | 台词全文 | 触发 |
|
||||
|---|---|---|---|
|
||||
| `b_open` | 主播 | 午夜零点,红灯亮起。欢迎回到《今夜不眠》。 | INTRO(配 sfx/onair_sting) |
|
||||
| `b_rain` | 主播 | 雨下了一整晚。热线灯,马上就要亮了。 | INTRO |
|
||||
| `b_rule` | 导播 | 台里的规矩就一条:先接住人,再接电话。 | INTRO(一句规矩,P4) |
|
||||
| `b_goal` | 导播 | 今晚五通电话。说什么话,由你决定。 | INTRO,随后第一声铃 |
|
||||
|
||||
## C1 组 · 第一通·老周(走丢的老人)(双性别 13 + 老周平铺 7 = 20)
|
||||
|
||||
| id | 声部 | 台词全文 | 触发 |
|
||||
|---|---|---|---|
|
||||
| `z1_ring_in` | 导播 | 一线来电。七十多岁,雨夜,走丢了。 | 接听后线路引入(配 line_connect) |
|
||||
| `z1_a` | 老周 | 主播……我,我找不到回家的路了。 | 通话主干 |
|
||||
| `z1_b` | 老周 | 雨太大了。我本来,只想买副老花镜。 | 通话主干(垫 amb_rain_city) |
|
||||
| `p1` | 导播 | 老人在发抖。向左滑,陪他哼那首老歌。向右滑,冷静问他路口的路牌。 | 抉择提示(播完即可选) |
|
||||
| `z1_song` | 主播 | 大爷别急,这首歌我也会。咱们一句一句来。 | p1 左(称呼「大爷」指对方,中性合规) |
|
||||
| `z1_songo` | 老周 | 对,对!路口修车铺,天天放这首! | p1 左·反应(正反馈:声音稳住) |
|
||||
| `z1_sdone` | 导播 | 他稳住了。老歌,比路牌管用。 | p1 左·收 |
|
||||
| `z1_ask` | 主播 | 大爷,路口有什么招牌?念一个给我听听。 | p1 右 |
|
||||
| `z1_asko` | 老周 | 招牌……雨糊住了,我眼花,看不清啊…… | p1 右·反应(慌) |
|
||||
| `z1_adone` | 导播 | 他慌了。先接住情绪,再走流程。 | p1 右·收(即时纠偏,非归因) |
|
||||
| `p2` | 导播 | 雨声更密了。向左滑,留在原地陪他等巡逻队。向右滑,转接派出所。 | 抉择提示 |
|
||||
| `z1_stay` | 主播 | 哪儿也不去。我陪你,这首歌还长着呢。 | p2 左 |
|
||||
| `z1_stayo` | 老周 | 好,好。有人说话,我就不怕了。 | p2 左·反应 |
|
||||
| `z1_staye` | 导播 | 十五分钟后,巡逻灯停在路口。全城听见老人笑了。 | p2 左·收(数字整句内嵌) |
|
||||
| `z1_pol` | 主播 | 大爷,我把您转给派出所,他们马上就到。 | p2 右(p1=左 时) |
|
||||
| `z1_polo` | 老周 | 好,好。谢谢你啊,谢谢。 | p2 右·反应 |
|
||||
| `z1_pole` | 导播 | 转接完成,地址报得清。干净利落。 | p2 右·收(p1=左 时) |
|
||||
| `z1_bad` | 老周 | 说不清……我真是,说不清了…… | p2 右(仅 p1=右 时,替代 z1_polo/z1_pole 前段) |
|
||||
| `z1_bade` | 导播 | 地址没报清就转接,雨又大。这通砸了。先稳人,再办事。 | 归因句(真话律:指向玩家实际两连选) |
|
||||
| `z1_ok1` | 导播 | 就这么接。记住这个手感。 | 首通成功收尾确认(全局一次,成功后无其他教学) |
|
||||
|
||||
## C2 组 · 第二通·小鹿(想退票的年轻人)(双性别 6 + 小鹿平铺 4 = 10)
|
||||
|
||||
| id | 声部 | 台词全文 | 触发 |
|
||||
|---|---|---|---|
|
||||
| `l1_in` | 导播 | 二线来电。姑娘,声音很轻,像怕吵到谁。 | 接听引入(「姑娘」描述来电者,合规) |
|
||||
| `l1_a` | 小鹿 | 主播,退票窗口十一点半就关了。我站这儿半小时了。 | 通话主干(垫 amb_station) |
|
||||
| `l1_b` | 小鹿 | 票是回去看我妈的。可我试镜又黄了,两手空空…… | 通话主干 |
|
||||
| `p3` | 导播 | 向左滑,告诉她这趟车值得上。向右滑,把选择还给她。 | 抉择提示 |
|
||||
| `l1_go` | 主播 | 你妈等的不是奖杯,是你进门喊的那声妈。 | p3 左 |
|
||||
| `l1_goo` | 小鹿 | 呜……嗯。不退了,我现在就去检票。谢谢您。 | p3 左·反应 |
|
||||
| `l1_goe` | 导播 | 二线收工。这句话,值一个头条。 | p3 左·收 |
|
||||
| `l1_free` | 主播 | 退不退,都是你的自由。夜还长,慢慢想。 | p3 右 |
|
||||
| `l1_freeo` | 小鹿 | 嗯……我再想想。窗口要关了,我先过去了。 | p3 右·反应 |
|
||||
| `l1_freee` | 导播 | 她走了。没上车,也没退票。年轻人的夜,长了点。 | p3 右·收 |
|
||||
|
||||
## C3 组 · 第三通·糖糖(失眠的孩子)(双性别 10 + 糖糖平铺 6 = 16)
|
||||
|
||||
| id | 声部 | 台词全文 | 触发 |
|
||||
|---|---|---|---|
|
||||
| `k1_in` | 导播 | 三线来电。听呼吸,是个小孩。 | 接听引入 |
|
||||
| `k1_a` | 糖糖 | 喂……有人吗?我睡不着。 | 通话主干(垫 amb_kid_room) |
|
||||
| `k1_b` | 糖糖 | 家里灯关了。可是楼下,一直有声音。 | 通话主干(**配 sfx/arg_muffled 线索音**) |
|
||||
| `p4` | 导播 | 向左滑,唱一段摇篮曲哄她睡。向右滑,轻轻问她怎么了。 | 抉择提示 |
|
||||
| `k1_lull` | 主播 | 闭上眼睛。风把云朵盖在被子上,月亮替你值夜班。 | p4 左(错过线索路线) |
|
||||
| `k1_lullo` | 糖糖 | 月亮也睡了……那我也睡。 | p4 左·反应 |
|
||||
| `k1_lulle` | 导播 | 睡着了。可你没听见,她在怕什么。 | p4 左·收(诚实复盘,非惩罚) |
|
||||
| `k1_ask` | 主播 | 睡不着的时候,心里是不是装着事?说给我听听。 | p4 右(置 heardArgument=true) |
|
||||
| `k1_asko` | 糖糖 | 爸爸妈妈摔门了。是不是……我做错了什么呀。 | p4 右·反应 |
|
||||
| `p5` | 导播 | 孩子的声音在抖。向左滑,告诉她这不是她的错。向右滑,答应她明天都会好。 | 抉择提示(仅 p4=右 可达) |
|
||||
| `k1_truth` | 主播 | 糖糖,记住,大人的事,不是小孩的错。一个字都不是。 | p5 左 |
|
||||
| `k1_trutho` | 糖糖 | 嗯……那我睡了。他们明天,会一起给我切蛋糕吗? | p5 左·反应 |
|
||||
| `k1_truthe` | 导播 | 蛋糕。记下来——四线的来电,可能跟这个家有关。 | p5 左·收(flag 预告) |
|
||||
| `k1_lie` | 主播 | 睡吧。明天一睁眼,什么都会好起来的。 | p5 右(善意谎言) |
|
||||
| `k1_lieo` | 糖糖 | 真的吗?拉钩。晚安…… | p5 右·反应 |
|
||||
| `k1_liee` | 导播 | 你许了个兑不了的现。孩子睡了,谎留下了。 | p5 右·收(诚实复盘) |
|
||||
|
||||
## C4 组 · 第四通·陈姐(争吵的夫妻)(双性别 13 + 陈姐平铺 7 = 20)
|
||||
|
||||
| id | 声部 | 台词全文 | 触发 |
|
||||
|---|---|---|---|
|
||||
| `w1_in` | 导播 | 四线来电。户外风声大,是位大姐。 | 接听引入(垫 amb_street_rain) |
|
||||
| `w1_a` | 陈姐 | 主播,我就想找个人说说。我家那口子,今晚要出远门的活儿。 | 通话主干 |
|
||||
| `w1_b` | 陈姐 | 明天孩子生日!蛋糕都订好了,他人要今晚走! | 通话主干 |
|
||||
| `p6` | 导播 | 摔门声你听见了。向左滑,替孩子给她带句话。向右滑,劝她回家把话说开。 | 抉择提示(固定文本,两条件路线共用) |
|
||||
| `w1_say` | 主播 | 四十分钟前,有个孩子问我们:爸妈摔门,是不是她的错。 | p6 左·**条件 heardArgument=true** |
|
||||
| `w1_sayo` | 陈姐 | 什么?她还没睡?这么晚了,她还醒着? | w1_say·反应 |
|
||||
| `w1_saye` | 导播 | 她攥着电话,很久没出声。风都停了。 | w1_say·收 |
|
||||
| `w1_say2` | 主播 | 今天有位小朋友,还在等爸妈回家切蛋糕。 | p6 左·**条件 heardArgument=false** |
|
||||
| `w1_say2o` | 陈姐 | 蛋糕……是他订的。他嘴上不说,心里都记着。 | w1_say2·反应 |
|
||||
| `w1_say2e` | 导播 | 话递到了。就差最后一脚。 | w1_say2·收 |
|
||||
| `p7` | 导播 | 她的呼吸平了。向左滑,留在直播里,让全城等这个门铃。向右滑,换垫乐,私下陪她说完。 | 抉择提示(仅 p6=左 可达) |
|
||||
| `w1_air` | 主播 | 陈姐,别挂。让他接电话——全城都在听。 | p7 左(留在直播) |
|
||||
| `w1_airo` | 陈姐 | 喂!回来吧!蛋糕要化了,孩子等着呢! | p7 左·反应(对电话那头喊) |
|
||||
| `w1_aire` | 导播 | 电话那头,传来跑步声。今晚的高光时刻。 | p7 左·收 |
|
||||
| `w1_priv` | 主播 | 这里只有我们俩了。想说就说,想哭就哭。 | p7 右(换垫乐私聊) |
|
||||
| `w1_privq` | 陈姐 | 呜……其实他订完蛋糕就跟我道歉了。是我,把门摔得太响。 | p7 右·反应 |
|
||||
| `w1_prive` | 导播 | 灯牌是你亲手关的,故事还是完整的。稳。 | p7 右·收 |
|
||||
| `w1_home` | 主播 | 吵架隔着电话吵不赢。回家吧,蛋糕别放到坏了。 | p6 右(本通结束,无 p7) |
|
||||
| `w1_homeo` | 陈姐 | 嗯……我这就往回走。谢谢你,听我瞎嚷嚷。 | p6 右·反应 |
|
||||
| `w1_homee` | 导播 | 她往回走了。成不成,看他们自己的了。 | p6 右·收 |
|
||||
|
||||
## C5 组 · 第五通·老韩(雨夜司机·高潮)(双性别 8 + 老韩平铺 5 = 13)
|
||||
|
||||
| id | 声部 | 台词全文 | 触发 |
|
||||
|---|---|---|---|
|
||||
| `h1_in` | 导播 | 五线来电。引擎声没停过——他在开车! | 接听引入(垫 amb_cab) |
|
||||
| `h1_a` | 老韩 | 主播,别挂。陪我说话,我的眼皮,沉得很。 | 通话主干 |
|
||||
| `h1_b` | 老韩 | 跑完这趟,闺女的学费就齐了。雨刷都快刮不动了。 | 通话主干(「闺女」指其女儿,合规) |
|
||||
| `p8` | 导播 | 方向盘比话筒危险。向左滑,陪他聊聊闺女。向右滑,让他立刻进服务区。 | 抉择提示 |
|
||||
| `h1_talk` | 主播 | 说说她。开学第一天,她跟你说的头一句话,是什么? | p8 左 |
|
||||
| `h1_talko` | 老韩 | 她说,爸,我在学校给你赚了朵小红花。哈哈,哈哈…… | p8 左·反应 |
|
||||
| `h1_danger` | 导播 | 车道偏了——听! | 危机拍(**前 2s 起 brake_screech 渐强 + danger 签名同窗**) |
|
||||
| `h1_dango` | 老韩 | 嘶——好险!前车急刹,我擦着护栏过去了。彻底醒了! | 危机拍·化解 |
|
||||
| `h1_talke` | 导播 | 吓醒的,也算醒。这一趟,聊到家。 | p8 左·收 |
|
||||
| `h1_stop` | 主播 | 听我的,前面三公里有服务区。学费急,命更急。 | p8 右 |
|
||||
| `h1_stopo` | 老韩 | 行,听你的。进了服务区,我给你们放首歌听。 | p8 右·反应 |
|
||||
| `h1_stope` | 导播 | 他下了高速。单子黄了,人齐了。 | p8 右·收 |
|
||||
| `h1_echo` | 导播 | 对了。头通电话那位大爷,就是这片被巡逻队找到的。这城市的夜,是接着的。 | 插播回响(**条件 bond_zhou=true**,queue) |
|
||||
|
||||
## D9 组 · 签收抉择(心结)(双性别 6)
|
||||
|
||||
| id | 声部 | 台词全文 | 触发 |
|
||||
|---|---|---|---|
|
||||
| `g9_in` | 导播 | 五线收工。垫乐起——零点档,还剩最后一段。 | C5 后 BRIDGE→签收(配 bgm/bridge) |
|
||||
| `p9` | 导播 | 留言机红灯在闪,是老主播三年前没播完的那句晚安。向左滑,替他播出去。向右滑,照常收播。 | 抉择提示(39 字,全表最长句) |
|
||||
| `d9_face` | 主播 | 师父,三年了。这句晚安,我替您播。各位,晚安。 | p9 左(knot=解;配 tape_static) |
|
||||
| `d9_facee` | 导播 | 带子里其实只有电流声。但空着的那一秒,你说满了。 | p9 左·收(老主播不配音,电流声留白) |
|
||||
| `d9_avoid` | 主播 | 各位,今晚到这里。明晚零点,今夜不眠,不见不散。 | p9 右 |
|
||||
| `d9_avoide` | 导播 | 留言机的红灯,又多亮了一夜。 | p9 右·收(开环钩子) |
|
||||
|
||||
## EP 组 · 结局与尾声回响(双性别 19;结局 8 + 回响 11)
|
||||
|
||||
| id | 声部 | 台词全文 | 触发 |
|
||||
|---|---|---|---|
|
||||
| `e1_a` | 主播 | 天亮了,热线灯还亮着。你们的晚安,是这座城市的心跳。 | 结局 e1(rep≥5 且直面)主句 |
|
||||
| `e1_b` | 主播 | 这把话筒,我总算接得住了。明晚零点,接着不眠。 | e1 收(钩子) |
|
||||
| `e2_a` | 主播 | 今晚的热线烧得发烫。全城的失眠者,都被接住了。 | 结局 e2(rep≥5 且回避)主句 |
|
||||
| `e2_b` | 主播 | 只是路过留言机的时候,你还是没敢看它。红灯灭得很慢。 | e2 收(钩子) |
|
||||
| `e3_a` | 主播 | 口碑掉了一夜。可那句迟到三年的晚安,今晚说出去了。 | 结局 e3(rep<5 且直面)主句 |
|
||||
| `e3_b` | 主播 | 一个人的频道,也是频道。师父,收到了吗? | e3 收(钩子) |
|
||||
| `e4_a` | 主播 | 今夜不眠,静音收播。有的夜班,谁也接不住谁。 | 结局 e4(rep<5 且回避)主句 |
|
||||
| `e4_b` | 主播 | 留言机还在闪。你没看它,它也没怪你。明晚再说吧。 | e4 收(钩子;含 e4 复盘,不另配归因句) |
|
||||
| `ep_lead` | 导播 | 收播了。导播间替你记了一笔账——今晚的人都怎样了。 | 结局链后尾声引入 |
|
||||
| `ep_zhou_ok` | 导播 | 老周:孙子替他买了老花镜。回信说,谢谢那首歌。 | 尾声(bond_zhou=1) |
|
||||
| `ep_zhou_no` | 导播 | 老周在便利店屋檐下坐到天亮。没出事,也没人听见他的歌。 | 尾声(bond_zhou=0) |
|
||||
| `ep_deer_ok` | 导播 | 小鹿上车了。她妈后来打电话说,那声妈,比奖杯值钱。 | 尾声(bond_deer=1) |
|
||||
| `ep_deer_no` | 导播 | 小鹿退了票。检票口的灯,记得那趟没上成的车。 | 尾声(bond_deer=0) |
|
||||
| `ep_kid_ok` | 导播 | 糖糖家的门,这个月没再摔过。她说这是主播魔法。 | 尾声(bond_kid=1) |
|
||||
| `ep_kid_no` | 导播 | 糖糖后来又打来过一次。还是那句:楼下在吵。 | 尾声(bond_kid=0) |
|
||||
| `ep_wife_ok` | 导播 | 陈姐家切了蛋糕。那句「回来吧」,是我这晚听过最好的声音。 | 尾声(bond_wife=1) |
|
||||
| `ep_wife_no` | 导播 | 陈姐在公车站坐到了末班车。那通电话,成了没寄出的信。 | 尾声(bond_wife=0) |
|
||||
| `ep_han_ok` | 导播 | 老韩到家了。后视镜上,多了朵小红花。 | 尾声(bond_han=1) |
|
||||
| `ep_han_no` | 导播 | 老韩在服务区睡了一觉。学费齐了,那首歌没放成。 | 尾声(bond_han=0) |
|
||||
|
||||
---
|
||||
|
||||
**合计:132 句**(GPU 预算 ≤170 ✓)
|
||||
- 双性别 103 句(HOST 21 + PROD 82)×2 性别 = 206 文件;
|
||||
- NPC 平铺 29 句(老周 7 / 小鹿 4 / 糖糖 6 / 陈姐 7 / 老韩 5)= 29 文件;
|
||||
- 合计 235 条音频 ×2 格式(ogg+m4a)= **470 文件**。
|
||||
- 每结局专属台词齐备:e1/e2/e3/e4 各 2 句(ep 组前 8 行)+ 尾声回响 11 句共用。
|
||||
- 每局实走抉择 8-9 个(p5 仅 p4=右、p7 仅 p6=左 可达),抉择提示 p1..p9 共 9 个。
|
||||
|
||||
## 多音字 / 发音风险自查注记
|
||||
|
||||
| 风险词 | 处理 |
|
||||
|---|---|
|
||||
| 重听 | 全表写「重新听」(sys_help),无「重听」字样 |
|
||||
| 切(qiē/qiè) | 「切垫乐」写「换垫乐」(p7);「切蛋糕」「切了蛋糕」为正确常用读法,保留 |
|
||||
| 挣(zhēng/zhèng) | 「挣钱」写「赚了朵小红花」(h1_talko) |
|
||||
| 巷(xiàng/hàng) | 全表不用「巷」,写「路口」 |
|
||||
| 答录机(dā lù jī) | 全表用「留言机」,规避 |
|
||||
| 颤(chàn) | 台词侧用「发抖」(z1_a 触发/语境、instruct 描述不受影响,instruct 不进语音) |
|
||||
| 哄(hōng/hǒng) | 「哄她睡」为 hǒng 常用读法,保留,试听确认 |
|
||||
| 宿/血/露/降/率/传(zhuàn 义) | 全表未使用 |
|
||||
| 了(le/liǎo)、还(hái/huán)、得(de/děi) | 常规句式常见读法,逐句人工试听项(z1_staye「听见了」、l1_goe 等) |
|
||||
| 数字 | 句内数字全部写死(十一点半/十五分钟/三公里/四十分钟前/零点),序号用分档整句(prog_c1..c5) |
|
||||
|
||||
## 台词侧自查
|
||||
|
||||
- 单句 ≤40 字:全表最长 = p9(37 字),次长 sys_help(26 字)✓;NPC 句平均 ≤18 字(P4 语速感靠短句+逗号,不用 instruct 语速词)✓。
|
||||
- NPC ≤5 人、speaker+instruct 恒定、区分度风险逐个标注 ✓。
|
||||
- 称呼合规:来电者对主播只用「主播/您/谢谢你」,性别化称呼仅指向来电者自身或第三方 ✓。
|
||||
- 每个结局(e1..e4)专属主句+钩子各 2 句齐备,尾声救/错过双线齐备 ✓。
|
||||
- 归因真话律:负向收尾句(z1_bade/k1_lulle/k1_liee/ep_*_no/e4_b)全部指向玩家实际选择,无假归因句 ✓。
|
||||
- 向导 gd_* 6 句(gd_brief/gd_continue/gd_again/gd_invalid/gd_ring1/gd_ring2)符合 14 号 §6 台词规范(一句一义、无重复句式、单句 ≤15 字)✓。
|
||||
@@ -0,0 +1,477 @@
|
||||
# 15 · 《不眠频率》(radio) — 深夜电台热线叙事 RPG 设计文档
|
||||
|
||||
> **给开发的实现要点摘要**
|
||||
> 1. 叙事模式(声命线范式):节点链 onComplete 串行 + seqToken 打断作废 + pendingChoice 缓存;复制 `web/storyline/` 结构起步,状态机用 6 宏状态(INTRO/RING/ONAIR/BRIDGE/ENDING + MENU 覆盖层)。
|
||||
> 2. 手势零豁免:全部走全局默认映射(单击=继续/接听/跳句、双击=重听、左右滑=抉择、上滑=状态、下滑=模态菜单 §5.2 约定、长按=引擎快进)。
|
||||
> 3. 台词依据 [15-radio-voice-ids.md](15-radio-voice-ids.md)(132 句:双性别 103 + 平铺 NPC 29);NPC 人声电话滤波在**资产侧** ffmpeg 带通(storyline n03_msg 先例),引擎零改动。
|
||||
> 4. 向导层:storyline 同款看门狗节奏 + RING 专用两级新句提示;`gd_ring1/gd_ring2` 为本游戏新增 gd_* 资产。
|
||||
> 5. 章程任务 N1(research/new8/00-program.md):单局 15-25 分钟、9 抉择点、4 结局、分支局部化。
|
||||
|
||||
## 1. 概述
|
||||
|
||||
- **一句话**:你是午夜档电台热线主播「今夜不眠」,直播间里一晚接进五个来电——你说什么话、接不接、转不转接,改变五个陌生人的夜晚,也改变你自己。
|
||||
- **题材(声音即世界)**:全部叙事靠电话音质感(每位来电者一种滤波声)、电台垫乐、直播间环境音呈现——来电者永远不露面,只有声音;「声音即存在」与纯音频载体天然同构。
|
||||
- **单局**:一个完整夜班(一条抉择路径)15-22 分钟;五个来电共享主干,分歧点局部化在每通电话内部;9 个抉择点(单局实走 8-9 个),4 结局。
|
||||
- **核心循环**:接听 → 听 → 抉择(左=走心介入 / 右=克制程序)→ 结果与口碑结算 → 幕间喘息 → 下一通。跨来电积累「今晚状态」(听众口碑 + 各来电好感),收播前一个抉择决定你自己的心结是否解开。
|
||||
|
||||
## 2. 状态机
|
||||
|
||||
### 2.1 状态列表
|
||||
|
||||
| 状态 | 内容 | BGM | guide.state |
|
||||
|---|---|---|---|
|
||||
| `INTRO` | 开场链:台标口播 + 一句规矩 + 今晚目标 | `bgm/onair` | explore |
|
||||
| `RING` | 热线接入:铃声循环,等待单击接听 | `bgm/onair`(不切) | 无新签名(turn cue 承担) |
|
||||
| `ONAIR` | 通话叙事:对白链 + 抉择点 + 结果 | `bgm/onair` | explore;抉择点=choice |
|
||||
| `BRIDGE` | 幕间:口碑跨档播报(如有)+ 喘息垫乐,自动链 | `bgm/bridge` | settle |
|
||||
| `ENDING` | 结局链 + 尾声回响(epilogue),结算态 | `bgm/ending` | settle |
|
||||
| `MENU` | 模态覆盖层(任意叙事态下滑呼出,暂停一切链) | `bgm/menu` | menu |
|
||||
|
||||
### 2.2 转移图(文本)
|
||||
|
||||
```
|
||||
┌─────────────── 结算单击=新夜班 ───────────────┐
|
||||
▼ │
|
||||
INTRO ──链完──> RING(c1) ──单击接听──> ONAIR(c1) ──链完──> BRIDGE ──┤→ RING(c2)
|
||||
│铃声循环/看门狗两级,无超时惩罚 │ …(c3,c4 同型)…
|
||||
└────────────────────────────────────────────────┘
|
||||
ONAIR(c5) ──链完──> BRIDGE ──链完──> SIGNOFF
|
||||
│
|
||||
└──> ◆p9 抉择 ──> d9 结果链 ──> ENDING(e1..e4 + ep 回响链)
|
||||
|
||||
任意叙事态(INTRO/RING/ONAIR/BRIDGE/ENDING):下滑 → MENU(模态)
|
||||
MENU:单击=循环切换选项 → 双击=确认执行 → 上滑=帮助 → 下滑/「回到直播」项=关闭回原状态(重播当前节点)
|
||||
```
|
||||
|
||||
- INTRO/RING/ONAIR/BRIDGE/ENDING 均为节点链驱动(storyline playNode 模式);`SIGNOFF` 是 ONAIR 的最后一个节点组(◆p9),不单设状态。
|
||||
- BRIDGE 自动链 ≤12s:口碑跨档则播 rep_*(播报真实档位,账目真实),随后直接进下一通 RING。
|
||||
- MENU 打开时 `guide.disarm()` + 取消一切看门狗/自动链;关闭后重播当前节点(局面复述,storyline closeMenu 先例)。
|
||||
|
||||
### 2.3 每状态手势映射(6+2 全覆盖,零豁免)
|
||||
|
||||
| 手势 | INTRO | RING | ONAIR | BRIDGE | ENDING | MENU |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 上滑 | 帮助+状态,随后重播当前段 | 状态播报(第几通+口碑档),留在 RING | 帮助+状态,随后重播当前节点 | 帮助+状态,自动链继续 | 帮助+状态(结局名+口碑) | 帮助(sys_help) |
|
||||
| 下滑 | 模态菜单 | 模态菜单 | 模态菜单 | 模态菜单 | 模态菜单 | 关闭菜单 |
|
||||
| 左滑 | 无效 → error 震+gd_invalid | 无效 → gd_invalid | 抉择=左(走心) | 无效 → gd_invalid | 无效 → gd_invalid | 无效 → error 震 |
|
||||
| 右滑 | 无效 → gd_invalid | 无效 → gd_invalid | 抉择=右(克制);存档询问态=新夜班 | 无效 → gd_invalid | 无效 → gd_invalid | 无效 → error 震 |
|
||||
| 单击 | 播放中=跳过本句;链末=进 RING | **接听** | 播放中=跳过本句(p* 不可跳);链末=继续 | 跳过本句(自动链) | **再来一局**(新夜班) | 循环切换选项 |
|
||||
| 双击 | 重听当前段 | 重听上一通话的收尾句 | 重听当前节点台词(含抉择提示) | 重听幕间链 | 重听结局链 | **确认执行**(菜单约定覆盖重听) |
|
||||
| 长按 | 引擎接管:旁白临时 1.7×(12 号 §2.2,叙事类不豁免) | 同左 | 同左 | 同左 | 同左 | 同左(快进菜单语音) |
|
||||
| 长按松开 | 引擎接管:恢复 settings.speed | 同左 | 同左 | 同左 | 同左 | 同左 |
|
||||
|
||||
- 豁免登记:**无**。六个基础手势全部符合全局宪法默认语义(单击=确认/继续/**接听**,宪法 §5.1 原文即含「接听」);菜单走 §5.2 R3 模态约定(单击循环+双击确认),不引用 rpg 探索态豁免。
|
||||
- 抉择 prompt(voice/p1..p9)播放中单击不可跳、左右滑缓存 `pendingChoice` 播完即生效(storyline 盲玩公平先例)。
|
||||
- 无效手势零静默:所有「无效」格均有 error 震 + gd_invalid(onceKey 同局限次,F1.4 idle-only:语音在播时跳过语音只发震)。
|
||||
|
||||
## 3. 抉择树
|
||||
|
||||
### 3.1 全局骨架(来电共享主干,分歧局部化)
|
||||
|
||||
```
|
||||
INTRO: b_open → b_rain → b_rule → b_goal ──> 铃①
|
||||
【C1 老周·走丢的老人】教学通 · 2 抉择 ──> BRIDGE ──> 铃②
|
||||
【C2 小鹿·想退票的年轻人】单抉择 · 呼吸口 ──> BRIDGE ──> 铃③
|
||||
【C3 糖糖·失眠的孩子】2 抉择 · 埋 heardArgument ──> BRIDGE ──> 铃④
|
||||
【C4 陈姐·争吵的夫妻】2 抉择 · 消费 heardArgument ──> BRIDGE ──> 铃⑤
|
||||
【C5 老韩·雨夜司机】高潮 · 1 抉择 + 危机脚本拍 ──> 签收 ◆p9(心结)──> ENDING
|
||||
```
|
||||
|
||||
分支纪律:**每通电话内部分支、通话末尾收敛**到导播收尾句 → BRIDGE;跨来电只传三个数据(rep 数值、bond 好感、heardArgument 布尔),不生成组合节点。最坏路径与最好路径节点数相同。
|
||||
|
||||
### 3.2 分通结构(◆=抉择点,〔〕=条件差分)
|
||||
|
||||
```
|
||||
【C1 老周】
|
||||
铃① → z1_ring_in → z1_a → z1_b → ◆p1
|
||||
├左 哼老歌: z1_song → z1_songo → z1_sdone ─┐
|
||||
└右 问路牌: z1_ask → z1_asko → z1_adone ───┤
|
||||
▼
|
||||
◆p2
|
||||
├左 陪他等: z1_stay → z1_stayo → z1_staye ─┐
|
||||
└右 转接: z1_pol → z1_polo → z1_pole ────┤ (仅 p1=右 时 p2=右 改走 z1_bad → z1_bade 归因)
|
||||
▼
|
||||
z1_ok1(首通确认,全局一次)→ BRIDGE
|
||||
|
||||
【C2 小鹿】
|
||||
铃② → l1_in → l1_a → l1_b → ◆p3
|
||||
├左 劝上车: l1_go → l1_goo → l1_goe ──┐
|
||||
└右 还自由: l1_free → l1_freeo → l1_freee ─┴→ BRIDGE
|
||||
|
||||
【C3 糖糖】
|
||||
铃③ → k1_in → k1_a → k1_b(垫 arg_muffled 争吵声)→ ◆p4
|
||||
├左 哄睡: k1_lull → k1_lullo → k1_lulle ──────────────┐(错过线索,本通结束)
|
||||
└右 问她: k1_ask → k1_asko → ◆p5 │
|
||||
├左 真话: k1_truth → k1_trutho → k1_truthe ────────┤(heardArgument=true)
|
||||
└右 谎言: k1_lie → k1_lieo → k1_liee ──────────────┴→ BRIDGE
|
||||
|
||||
【C4 陈姐】
|
||||
铃④ → w1_in → w1_a → w1_b → ◆p6
|
||||
├左 替孩子带话:〔heardArgument ? w1_say 组 : w1_say2 组〕→ ◆p7
|
||||
│ ├左 留在直播: w1_air → w1_airo → w1_aire ─┐
|
||||
│ └右 换垫乐私聊: w1_priv → w1_privq → w1_prive ─┤
|
||||
└右 劝她回家: w1_home → w1_homeo → w1_homee ──────────┴→ BRIDGE(右路本通结束,无 p7)
|
||||
|
||||
【C5 老韩】高潮
|
||||
铃⑤ → h1_in → h1_a → h1_b → ◆p8
|
||||
├左 陪聊闺女: h1_talk → h1_talko → 【危机拍: danger 签名+brake_screech(前置2s)】
|
||||
│ → h1_danger → h1_dango → h1_talke ─┐
|
||||
└右 服务区: h1_stop → h1_stopo → h1_stope ────────┤
|
||||
〔bond_zhou=true 时插播 h1_echo 回响句〕 ▼
|
||||
BRIDGE → g9_in → ◆p9
|
||||
├左 直面(播出老主播的晚安): d9_face → d9_facee → knot=解
|
||||
└右 回避(照常收播): d9_avoid → d9_avoide
|
||||
▼
|
||||
ENDING: e*_a → e*_b(按 rep×knot 四选一)→ ep_lead → ep_<caller>×5(按 bond 选播)
|
||||
```
|
||||
|
||||
### 3.3 分支局部化说明
|
||||
|
||||
- 跨来电状态只有三个标量:`rep`(数值)、`heardArgument`(布尔)、`bond`(5 个 0/1)。没有任何「来电 i 的分支 × 来电 j 的分支」组合节点。
|
||||
- 唯一的跨来电内容差分:C4 的 w1_say/w1_say2 两组(由 heardArgument 选播)与 C5 的 h1_echo 插播句(由 bond_zhou 选播)——都是**节点内选播**,不改树形。
|
||||
- 树规模:132 句台词、约 60 个节点,任一路径实走 8-9 个抉择点(C3 左路/ C4 右路各少一个)。
|
||||
|
||||
### 3.4 四结局达成条件
|
||||
|
||||
| 结局 | 条件 | 主题 | 开环钩子 |
|
||||
|---|---|---|---|
|
||||
| e1 天亮之前 | rep ≥ 5 且 p9=左(直面) | 城市有了心跳,话筒接住了 | 「明晚零点,接着不眠」 |
|
||||
| e2 热线常亮 | rep ≥ 5 且 p9=右(回避) | 满座夜班,留言机红灯未看 | 红灯「灭得很慢」 |
|
||||
| e3 一个人的频道 | rep < 5 且 p9=左(直面) | 夜班难,但晚安说出去了 | 「师父,收到了吗」 |
|
||||
| e4 静音 | rep < 5 且 p9=右(回避) | 谁也接不住谁的夜班 | 「明晚再说吧」 |
|
||||
|
||||
- 尾声回响(P2 回响感):epilogue 对 5 个来电者各播一句 bond ? 救到的后续 : 错过的后续(ep_zhou/deer/kid/wife/han_ok/no),玩家每晚的救与错过都被点名。
|
||||
|
||||
## 4. 数值设计
|
||||
|
||||
### 4.1 变量
|
||||
|
||||
| 变量 | 类型 | 初值 | 说明 |
|
||||
|---|---|---|---|
|
||||
| `rep`(听众口碑) | int | 0 | 抉择与结果积累,收播时结算档位 |
|
||||
| `knot`(心结) | bool | false | 仅由 p9=左 置 true |
|
||||
| `bond_zhou/deer/kid/wife/han` | 0/1 | 0 | 只影响尾声回响选播,不影响结局 |
|
||||
| `heardArgument` | bool | false | p4=右 置 true,C4 消费 |
|
||||
| `nights` / `endings{}` | int / map | — | 重玩计数与结局收集(存档展示用) |
|
||||
|
||||
### 4.2 抉择计分表(左=走心 / 右=克制)
|
||||
|
||||
| 抉择 | 左(走心) | 右(克制) | 备注 |
|
||||
|---|---|---|---|
|
||||
| p1 哼歌/问路 | +1 | 0 | 左路老周稳住(首个正反馈) |
|
||||
| p2 陪等/转接 | +2(p1=左)/ +1(p1=右) | +1(p1=左)/ **-1(p1=右,砸)** | 唯一负分组合,触发归因句 |
|
||||
| p3 劝上车/还自由 | +2 | +1 | 两个选项都是体面的(教学后建立信任) |
|
||||
| p4 问她/哄睡 | +1,heardArgument=true | 0 | 左=倾听,右=敷衍即错过线索 |
|
||||
| p5 真话/善意谎言 | +1 | 0 | p5 仅 p4=右 可达 |
|
||||
| p6 替孩子带话/劝回家 | +2(heardArgument)/ +1(否则) | +0(本通结束) | |
|
||||
| p7 留在直播/换垫乐 | +2 | +1 | p7 仅 p6=左 可达 |
|
||||
| p8 陪聊/服务区 | +1(含危机拍) | 0 | 两路都活着(P4 零死亡) |
|
||||
| p9 直面/回避 | knot=解 | knot=未解 | 不动 rep |
|
||||
|
||||
### 4.3 阈值与导向
|
||||
|
||||
- 收播结算:`rep ≥ 5` = 高口碑(e1/e2),`rep < 5` = 低口碑(e3/e4)。
|
||||
- 理论上限 12、全克制路径 0;「多数走心 + 容忍 1-2 次失误」落在 5-8 档——阈值 5 把「今晚是否立住」压在玩家自己的重量上,而非单点失误。
|
||||
- 口碑跨档被动播报(BRIDGE):进入 ≥5 区间播 rep_high、跌回 1-4 播 rep_mid、≤0 播 rep_low——分档整句、账目真实(A4 资源账目律)。
|
||||
- 归因真话律落地:每个负向结果节点(z1_bade、k1_lulle、k1_liee、e4 链)的导播收尾句必须指向玩家的**实际选择**(「地址没报清就转接」「你没听见她在怕什么」),禁止「运气不好」类假归因;成功路径不播任何补救教学(A5)。
|
||||
|
||||
## 5. 音频三层映射
|
||||
|
||||
### 5.1 BGM(状态→曲目,Mureka instrumental,4 首 ≈ $0.12)
|
||||
|
||||
| 状态 | 曲目 | 切换 | Mureka prompt 草稿(英文,seamless loop) |
|
||||
|---|---|---|---|
|
||||
| INTRO/RING/ONAIR | `bgm/onair` | 开局淡入 800ms,全夜班不切;语音 duck 引擎自理 | "Midnight radio broadcast music bed, warm lo-fi neo-soul chords, soft vinyl crackle, gentle night-drive groove with brushed drums, intimate late-night host mood, no vocals, seamless loop, 60-90 seconds" |
|
||||
| BRIDGE | `bgm/bridge` | crossfade 800ms 进;进下一通 RING 淡回 onair 600ms | "Radio interlude pad, sparse felt piano notes over warm analog drone, distant rain mood, lonely but safe, no drums, no vocals, seamless loop, 60-90 seconds" |
|
||||
| MENU | `bgm/menu` | crossfade 500ms 进;关菜单淡回原状态曲 800ms | "Late-night radio studio menu pad, warm minor pad with faint tape hiss, static harmony, very sparse, no vocals, seamless loop, 60-90 seconds" + 共性后缀(10 号 §8) |
|
||||
| ENDING | `bgm/ending` | p9 结果链播完后淡入 1500ms | "Dawn sign-off theme, soft piano and warm strings, hopeful sunrise after a long night shift, gentle resolution, no vocals, seamless loop, 60-90 seconds" |
|
||||
|
||||
- `bgm=0` 时全部静默(引擎约定);menu pad 与 onair 同调性优先。
|
||||
|
||||
### 5.2 SFX 清单(Stable Audio 3,one-shot 真峰值 ≤-3dBFS;amb 循环由游戏层 buffer.loop 实现,escape amb 先例)
|
||||
|
||||
| id | 用途 | Stable Audio prompt(英文) |
|
||||
|---|---|---|
|
||||
| `sfx/onair_sting` | 红灯亮起台标 sting(INTRO/重开) | "Short broadcast on-air light sting, warm chime with vintage radio click, 1 second" |
|
||||
| `sfx/phone_ring` | 热线铃(RING 循环体,每遍 ≥4s 间隔) | "Old studio telephone bell, two-strike bright metallic ring, clean" |
|
||||
| `sfx/line_connect` | 接听咔哒+线路接通音 | "Telephone line connect click and short dial tone fade, subtle" |
|
||||
| `sfx/line_drop` | 挂断/转接忙音 | "Telephone hang-up click with short busy tone, soft" |
|
||||
| `sfx/amb_studio` | 直播间底噪 loop(调音台嗡+空调) | "Quiet radio studio room tone, console hum and soft air conditioning, seamless loop" |
|
||||
| `sfx/amb_rain_city` | C1 老人侧:街道雨夜 loop | "Heavy rain on city street at night, distant traffic hiss, seamless loop" |
|
||||
| `sfx/amb_station` | C2 小鹿侧:深夜车站 loop | "Empty train station hall at night, distant echo and rolling suitcase, seamless loop" |
|
||||
| `sfx/amb_kid_room` | C3 糖糖侧:儿童房 loop | "Quiet child bedroom at night, soft lamp buzz, muffled house silence, seamless loop" |
|
||||
| `sfx/arg_muffled` | C3 线索音:闷住的争吵+摔门(信息承载,k1_b 时起) | "Muffled argument behind a door, dull thud of door slam, indistinct voices, 4 seconds" |
|
||||
| `sfx/amb_street_rain` | C4 陈姐侧:公车站雨 loop | "Rain at an empty bus stop at night, distant wet road traffic, seamless loop" |
|
||||
| `sfx/amb_cab` | C5 老韩侧:车内 loop(引擎+雨刷节奏) | "Inside a moving truck cab at night, steady engine hum, rhythmic windshield wipers, rain outside, seamless loop" |
|
||||
| `sfx/brake_screech` | C5 危机拍:急刹+护栏摩擦 | "Sudden brake screech on wet asphalt, brief tire friction, 2 seconds" |
|
||||
| `sfx/tape_static` | p9 直面:留言机电流声 | "Old cassette tape static and tape hiss with a click stop, 3 seconds" |
|
||||
| `sfx/ui_confirm` | 菜单/接听确认(程序合成兜底) | —(程序合成,同全局先例) |
|
||||
| `sfx/ui_menu` | 菜单呼出(程序合成兜底) | —(程序合成) |
|
||||
|
||||
- C3/C4 的 amb 是**信息层**:arg_muffled 在 k1_b 起播 2-3 次,玩家听没听见由 p4 抉择兑现(声音即世界)。
|
||||
- 预警窗纪律:h1_danger 前 2s 先起 brake 渐强(L2 前置预警),danger 签名与 brake 同窗。
|
||||
|
||||
### 5.3 Voice 划分(详见 15-radio-voice-ids.md)
|
||||
|
||||
| 组 | 声部 | 落位 | 数量 |
|
||||
|---|---|---|---|
|
||||
| 主播(你)HOST | 双性别(female=Serena / male=Uncle_Fu + HOST instruct 常量) | `voice/female|male/` | 21 句 |
|
||||
| 导播/系统/向导 PROD | 双性别(female=Vivian / male=Dylan + PROD instruct 常量) | `voice/female|male/` | 82 句 |
|
||||
| 来电者 NPC ×5 | 平铺单音色(老周=Uncle_Fu / 小鹿=Serena / 糖糖=Vivian / 陈姐=Vivian / 老韩=Eric),**不做双性别** | `voice/` 根(平铺回退命中)+ 电话滤波转码 | 29 句 |
|
||||
|
||||
- NPC ≤5 个约束满足;玩家自己的声音跟随全局 `settings.voice`(男/女主播皆可代入),导播耳语是向导人设(L4 角色化系统声)。
|
||||
- 合计 132 句(≤170 GPU 预算);音频文件 = 103×2 + 29 = 235 条(×2 格式 = 470 文件)。
|
||||
|
||||
## 6. 来电音质感设计(声音即世界的实现)
|
||||
|
||||
### 6.1 引擎能力边界(对照 web-engine-api.md)
|
||||
|
||||
| 能力 | 引擎现状 | 方案 |
|
||||
|---|---|---|
|
||||
| voice 运行时 EQ/滤波 | ❌ voice 链 = SoundTouch → gain → voiceBus,无滤波插入点 | **资产侧转码滤波**(storyline n03_msg/n05_bcast 的 convert.sh 带通先例):ffmpeg `highpass + lowpass + 压缩器` 逐来电者定档 |
|
||||
| voice 逐句声像/空间定位 | ❌ voice 单声道总线 | 不使用;空间感交给 sfx amb(sfx 资产内 pan,escape amb 先例) |
|
||||
| sfx 循环 | sfx 即发即弃,无 loop 选项 | 游戏层 `buffer.loop=true` 或 onEnded 重触发(escape amb_loop 先例) |
|
||||
| 语音 duck 垫乐 | ✅ 内置(duck 20%,300ms) | 直接依赖 |
|
||||
| 运行时混响/失真(「信号变差」差分) | ❌ | 降级:用 amb 响度强弱 + 台词停顿节奏表达,不做动态滤波 |
|
||||
| 变速不变调 | ✅ SoundTouch(settings.speed + 长按 1.7×) | 直接依赖 |
|
||||
|
||||
### 6.2 每位来电者的声音签名(资产侧 ffmpeg 参数)
|
||||
|
||||
| 来电者 | 滤波档 | 质感设计 | 背景 amb(sfx 层) |
|
||||
|---|---|---|---|
|
||||
| 老周 | highpass 500 + lowpass 2800 + 轻压缩 | 老旧手机,窄而颤抖 | amb_rain_city |
|
||||
| 小鹿 | highpass 400 + lowpass 3400 | 车站手机,干净偏冷 | amb_station |
|
||||
| 糖糖 | highpass 450 + lowpass 3000 | 家用座机,小而近 | amb_kid_room + arg_muffled |
|
||||
| 陈姐 | highpass 420 + lowpass 3100 | 户外手机,风噪 | amb_street_rain |
|
||||
| 老韩 | highpass 300 + lowpass 3400 | 车载蓝牙,宽而轰 | amb_cab |
|
||||
|
||||
- **可读性底线**(L2 反模式「写实但不可读」):滤波保持在语音可懂频带内,宁窄勿脏;QC 试听不可读的句子回退**未滤波原声**——叙事不破,只损失质感(显式降级方案,不阻塞管线)。
|
||||
- 主播/导播人声**不滤波**(直播间级音质);「电话里的人」与「身边的人」靠这一层音质差立住,无需任何视觉。
|
||||
|
||||
## 7. 向导层接入
|
||||
|
||||
### 7.1 状态签名 earcon / turn cue
|
||||
|
||||
| 时机 | 向导动作 | 说明 |
|
||||
|---|---|---|
|
||||
| INTRO 进入 | `guide.state('explore')` | 叙事态签名 |
|
||||
| 每个抉择点 p* 起播 | `guide.state('choice')` | 选项句本身即 turn cue(播完当刻 choiceArmed 即真,W2 契约零插播) |
|
||||
| RING 铃响 | `guide.turn({haptic:true})`(无语音) | 铃声+turn 签名=「轮到你接听」;首次铃前 b_goal 已口播规矩 |
|
||||
| BRIDGE 进入 | `guide.state('settle')` | 喘息/结算签名 |
|
||||
| ENDING 进入 | `guide.state('settle')` | 同上 |
|
||||
| MENU 打开 | `guide.state('menu')` | 菜单签名 |
|
||||
| C5 危机拍 | `guide.state('danger')` | 全局唯一 danger 使用点(刹车前 2s,与 brake_screech 同窗) |
|
||||
| 无效手势 | `guide.error({voice:'gd_invalid', onceKey})` | error 震 + full 档语音,idle-only(F1.4) |
|
||||
|
||||
- earcon 词表:只用全项目统一 8 音(menu/explore/battle/choice/settle/danger/turn/nudge),**零新增**;battle 本游戏不用。开场台词自然教 3 个最高频签名(铃=接听、短促提示音=轮到你选择、上滑/下滑口令);settle/menu 首遇即学;逐签名口播教学列 v2 候选(14 号 §4 同款)。
|
||||
|
||||
### 7.2 看门狗参数(秒;任何手势经 guide.disarm 复位;guide=off 全不挂)
|
||||
|
||||
| 等待点 | full 档 | standard 档 | 级别内容 | 礼仪 |
|
||||
|---|---|---|---|---|
|
||||
| RING 无接听 | [10, 25] | [10, 25](onEscalate 游戏层补播) | ① gd_ring1「热线在闪。单击,接听。」② gd_ring2「灯还亮着,听众在等。」 | **两级不同句**(绝不逐字重播);两级用尽只剩铃声循环,永不惩罚 |
|
||||
| ONAIR/INTRO/BRIDGE 叙事链末等待 | [25, 50] | [13, 30](同 storyline P2-3 先例) | ① gd_continue ② gd_again | storyline F1.1 同款,两级后彻底静默 |
|
||||
| 抉择点 p* 播完无操作 | [25, 50] | [25, 50] | 重播**当前 p* 提示句本身**(复述选项=合法帮助,13 号 §16 N3 先例) | 两级后静默;空点单击=重挂计时 |
|
||||
| ENDING 结算等待 | [25, 50] | [13, 30] | gd_continue / gd_again | 结算单击即重开,不阻拦 |
|
||||
|
||||
- 向导插播一律 `queue:true`,绝不顶掉在播对白;error/watchdog 类语音 idle-only(在播则跳过且过期丢弃,F1.4)。
|
||||
- 单句语音看门狗(资产缺失兜底):30s 超时且 `isVoicePlaying()===false` 才自动续链,长句续约不掐(storyline N1 先例照抄)。
|
||||
|
||||
## 8. 存档设计
|
||||
|
||||
### 8.1 进度 data 结构(PUT /api/progress {game:'radio'})
|
||||
|
||||
```json
|
||||
{
|
||||
"schema": 1,
|
||||
"updatedAt": "2026-09-01T12:00:00Z",
|
||||
"summary": "第3通·失眠的孩子 · 口碑+2 · 结局1/4",
|
||||
"phase": "ONAIR",
|
||||
"node": "k1_asko",
|
||||
"rep": 2,
|
||||
"knot": false,
|
||||
"heardArgument": true,
|
||||
"bond": { "zhou": 1, "deer": 1, "kid": 0, "wife": 0, "han": 0 },
|
||||
"endings": { "e2": true },
|
||||
"nights": 3
|
||||
}
|
||||
```
|
||||
|
||||
- 写入时机:每通电话 RING 进入、每个抉择结算后、ENDING 进入、菜单「保存并回大厅」。
|
||||
- 断点续玩:登录/本地读到存档 → `sys_continue_ask`(单击=继续上次 / 右滑=新夜班);继续 = 恢复 phase+node 并**重播当前节点链** = 一句话局面复述(L5:恢复成本游戏承担);重进 ≤5s 可玩。
|
||||
- summary 字符串格式:进行中 `第N通·<来电者> · 口碑±X · 结局K/4`;已收播 `已收播·<结局名> · 结局K/4`(大厅卡片直接显示,人话)。
|
||||
|
||||
## 9. playtest 断言清单(登记 13 号文档 radio 节,格式同 §1)
|
||||
|
||||
**关键路径**(E1 全程,≤60 次手势):
|
||||
1. 启动遮罩点按 → INTRO 链(b_open 起,voice 层有播放记录)→ 链完自动进 RING(c1),turn 事件与铃声断言。
|
||||
2. RING 单击接听 → ONAIR(c1):p1 左 → p2 左 → z1_ok1 → BRIDGE(rep 断言 +1+2=3)→ RING(c2)。
|
||||
3. 依序走 p3 左 / p4 右 / p5 左 / p6 左 / p7 左 / p8 左(断言每步后 rep 与 §4.2 一致;p4 右后 `heardArgument === true` 且 C4 播 w1_say 组)。
|
||||
4. p9 左 → knot=true → ENDING(e1):结局链 + ep_lead + 5 条 ep_*_ok → 结算态单击重开回 INTRO。
|
||||
|
||||
**边界断言**:
|
||||
- **四结局可达**:剧本 B(路径同上但 p9 右)→ e2;剧本 C(p1右 p2左 p3右 p4右 p5右 p6右 p8右 p9左,rep=3)→ e3;剧本 D(p1右 p2右 p3右 p4左 p6右 p8右 p9右,rep=0)→ e4;各局 rep 终值与设计表一致。
|
||||
- **双击重听**:ONAIR/ENDING 播完态双击 → 当前节点链同 id 序列重播;重播期间单击=跳本句(nodeId 不变),播完回原等待态。
|
||||
- **菜单返回不丢节点**:ONAIR 中下滑开菜单 → 上滑听帮助 → 双击「回到直播」→ phase/node 不变、当前节点重播;菜单内单击循环顺序 = [回到直播, 重新开始今晚, 保存并回大厅];确认回大厅 → sys_menu_lobby 播出且 PUT/localStorage 有最新 data。
|
||||
- **中断复述**:杀进程重进(存档 node=k1_asko)→ sys_continue_ask → 单击 → 重播该节点链;上滑播 sys_help+prog_c*+rep_* 链(顺序断言)。
|
||||
- **看门狗**:RING 快进 10s → gd_ring1、25s → gd_ring2(断言第二级 id ≠ 第一级 id,绝不逐字重播;两级后仅铃声);ONAIR 链末 25s/50s → gd_continue/gd_again;p* 播完 25s/50s → 当前 p* 重播两次后静默;`settings.guide='off'` 时全程零定时器零向导事件。
|
||||
- **pendingChoice**:p* 播放中左右滑 → 播完立即生效(不丢、不重复)。
|
||||
- **p* 不可跳**:p* 播放中单击 → 不跳句(PROMPT_RE 门)。
|
||||
- **idle-only**:向导 gd_* 在对白在播时被跳过且不再补播(F1.4 契约);queue 句排在当前句后(在播句不被截断)。
|
||||
- **归因真话**:剧本 D 中 z1_bade 播出(含真实归因);剧本 A 全程无任何归因/补救句(成功不教学)。
|
||||
- **资产缺失**:屏蔽任意 voice 资产 → 30s 看门狗自动续链到结局,不卡死。
|
||||
- **数字规范**:prog_*/rep_* 全部整句,转写审计无运行时拼接碎片。
|
||||
- **坏音质降级**:滤波资产缺失时原声可播(回退路径不断链)。
|
||||
|
||||
**失败即不通过**:任何等待 >5s 无声(静默死局);无效手势零反馈;结局计数与 §3.4 不符。
|
||||
|
||||
## 10. 难度 / 节奏曲线
|
||||
|
||||
| 段 | 内容 | 目标时长 | 设计目标 |
|
||||
|---|---|---|---|
|
||||
| 开场 | 台标 + 一句规矩 + 第一声铃 | 1.5-2 min | 首输入 <60s(链 ~30s 后铃响即接听);规矩一句讲完(P4) |
|
||||
| C1 老周 | 教学通:2 个二选一,条条有出路 | ~3.5 min | **首个正反馈 ≤3 min**(p1 左 → 老周声音稳住 + 导播确认);唯一 -1 组合不扣资源(学习期零惩罚) |
|
||||
| C2 小鹿 | 单抉择重话术 | ~2.5 min | 节奏呼吸口;建立「两个选项都体面」的信任 |
|
||||
| C3 糖糖 | 双抉择 + amb 线索埋设 | ~3.5 min | 环境音首次承载剧情(声音即世界);错过线索可被尾声点名 |
|
||||
| C4 陈姐 | 最复杂:2 抉择 + 条件差分 | ~4 min | 情感高潮;选项句最长(p7 ≤40s 播完) |
|
||||
| C5 老韩 | 高潮:危机拍(danger+急刹,前置 2s 预警) | ~4 min | 紧张峰值但零死亡、零倒计时(P4);h1_echo 兑现 C1 回响 |
|
||||
| 签收+结局 | p9 + 结局链 + 5 句回响 | ~3 min | 心结抉择 + epilogue 回响感(P2);开环钩子拉下一局 |
|
||||
|
||||
- 合计 ≈ 21-22 min(15-25 min 达标);每 30-60s 一个反馈颗粒(导播短句/结果句/口碑档),无沉默尴尬期(P3)。
|
||||
- 难度曲线 = 信息复杂度(1 抉择 → 条件差分 → 双方对峙 → 生死时速),操作复杂度恒定(永远二选一)——P4「规则一遍听懂」由恒定操作面保证。
|
||||
|
||||
## 11. 自检清单
|
||||
|
||||
| # | 硬约束 | 落地 | ✓ |
|
||||
|---|---|---|---|
|
||||
| 1 | FTUE 首输入 <60s | INTRO 链 ~30s 后第一声铃即接听(§10) | ☐ |
|
||||
| 2 | FTUE 首个正反馈 ≤3min | p1 左 outcome ~2.5min(z1_songo+z1_sdone) | ☐ |
|
||||
| 3 | 学习期零惩罚 | C1 全组合不扣资源;RING 不接听无超时惩罚 | ☐ |
|
||||
| 4 | 失败三问归因 + 归因真话律 | z1_bade/k1_liee/e4 链指向实际选择;§4.3 禁假归因 | ☐ |
|
||||
| 5 | 手势宪法(6 手势默认语义,零豁免) | §2.3 全覆盖;单击=确认/继续/接听、菜单走 §5.2 模态约定 | ☐ |
|
||||
| 6 | 长按豁免显式登记 | 无豁免:长按=引擎快进(12 号叙事类不豁免),§2.3 登记在案 | ☐ |
|
||||
| 7 | 向导层:状态签名/turn cue/看门狗 | §7.1/§7.2;RING 两级**不同句**,绝不逐字重播 | ☐ |
|
||||
| 8 | 插播一律 queue 不顶对白;纠错 idle-only 过期丢弃 | §7.2(F1.4 契约) | ☐ |
|
||||
| 9 | 提示永不逐字重复 | gd_ring1≠gd_ring2;gd_continue→gd_again;抉择点复述 p* 为 13 号 §16 先例 | ☐ |
|
||||
| 10 | 成功后不灌补救教学 | 归因句只挂负向结果(§9 断言) | ☐ |
|
||||
| 11 | 单次播报 ≤3 选项 | 全部抉择恒 2 选项 | ☐ |
|
||||
| 12 | 并发声流 ≤2 | voice+amb 两流;无第二 voice 通道 | ☐ |
|
||||
| 13 | earcon ≤7 个、显式教一次、语义靠语音 | 只用统一 8 音中的 6 个(battle 不用),零新增;选项内容全语音 | ☐ |
|
||||
| 14 | 台词一句一文件整句、≤40 字、数字分档整句、无运行时拼接 | voice-ids 全表 ≤39 字;prog/rep 分档整句 | ☐ |
|
||||
| 15 | 多音字规避(重新听)、同游戏同 instruct 常量、无语速词 | voice-ids 头部注记与 instruct 常量表 | ☐ |
|
||||
| 16 | P1:可打断/重听、status key、菜单规整、不当白痴 | skipVoice/doubletap/上滑状态链/模态菜单;成功零重复教学 | ☐ |
|
||||
| 17 | P2:头 3 分钟见效、结局回响 | C1 即时改变对方情绪;ep_* 救/错过点名 | ☐ |
|
||||
| 18 | P3:单手免视、一句话复述局面、3min 反馈颗粒 | 全手势免视;重进重播当前节点;BRIDGE 口碑播报 | ☐ |
|
||||
| 19 | P4:规则一遍懂、高容错、无高压倒计时、NPC 语速感 | 一句规矩;零死亡零倒计时;NPC 句 ≤18 字+逗号停顿(不用 instruct 语速词,禁令遵守) | ☐ |
|
||||
| 20 | 抉择树 4 结局可走通 | §9 剧本 A-D 四条实路径 + rep 断言 | ☐ |
|
||||
| 21 | 单局 15-25 min | §10 曲线 ≈21-22 min | ☐ |
|
||||
| 22 | 分支不爆炸 | 跨来电仅 3 标量;树 ~60 节点固定深度(§3.3) | ☐ |
|
||||
| 23 | 台词 ≤170 句、NPC ≤5 | 132 句 / 5 个来电者(voice-ids 账目) | ☐ |
|
||||
| 24 | 引擎边界诚实 | §6.1 能力表:做不到的写明资产侧/降级方案 | ☐ |
|
||||
|
||||
---
|
||||
|
||||
## 实现核对(测试 agent 登记)
|
||||
|
||||
> 断言实现:`web/radio/test/playtest.mjs`,193 条,`tools/node/bin/node web/radio/test/playtest.mjs`
|
||||
> 退出码 0 全绿。会话剧本:`web/harness/sessions/radio.mjs`(`session` 主线完整弧线 +
|
||||
> `sessionStress` 乱按压力),经 `tools/node/bin/node web/harness/transcribe.mjs radio
|
||||
> [--session sessionStress]` 跑通(transcribe.mjs 已登记 radio/支持 `--session` 选剧本)。
|
||||
> 回归:六游戏 playtest + guide.test 全绿不受影响。
|
||||
|
||||
### §9 关键路径逐条
|
||||
|
||||
| # | 断言 | 状态 |
|
||||
|---|---|---|
|
||||
| 1 | 遮罩点按 → INTRO 链(b_open 起)→ 链完自动进 RING(c1),turn 事件与铃声 | ✅已断言(INTRO 四句逐句计数 + turn 事件 + phone_ring 循环) |
|
||||
| 2 | 单击接听 → p1 左 → p2 左 → z1_ok1 → BRIDGE(rep=1+2=3)→ RING(c2) | ✅已断言 |
|
||||
| 3 | p3 左/p4 右/p5 左/p6 左/p7 左/p8 左逐点 rep 与 §4.2 一致;p4 右 heardArgument=true 且 C4 播 w1_say 组 | ✅已断言 |
|
||||
| 4 | p9 左 → knot=true → ENDING(e1) + ep_lead + 5 条 ep_*_ok → 结算单击重开回 INTRO | ✅已断言(含手势预算 55≤60) |
|
||||
|
||||
### §9 边界断言逐条
|
||||
|
||||
| 断言 | 状态 |
|
||||
|---|---|
|
||||
| 四结局可达(剧本 B→e2 / C→e3 / D→e4,rep 终值与设计表一致) | ✅已断言(另补剧本 E:全左但 p4 左 → heardArgument=false → C4 播 w1_say2 组、rep=9,补齐 w1_say/w1_say2 双差分覆盖;剧本 C/D 额外断言带话差分不播与 ep_deer_no) |
|
||||
| 双击重听:ONAIR 播完态/ENDING 播完态同 id 序列重播,重播期间单击=跳句 | ✅已断言 |
|
||||
| 菜单返回不丢节点;单击循环顺序 [回到直播, 重新开始今晚, 保存并回大厅];确认回大厅播 sys_menu_lobby 且 localStorage 有最新 data | ✅已断言(含报名 queue 零截断顺序断言) |
|
||||
| 中断复述:存档 node=k1_asko → sys_continue_ask → 单击恢复 → 重播节点链;上滑 sys_help→prog_c3→rep_mid 顺序 | ✅已断言(另补 ASK 右滑=新夜班) |
|
||||
| 看门狗:RING 10s/25s 两级不同句、两级后仅铃声;ONAIR 链末 25s/50s gd_continue/gd_again;p* 25s/50s 复述两级后静默;ENDING 25s/50s;guide=off 全程零定时器零向导语音 | ✅已断言(full 档事件钩子计数,choice 签名 ×9) |
|
||||
| pendingChoice:p* 播放中滑动感存、播完即生效(不丢不重复) | ✅已断言 |
|
||||
| p* 不可跳(PROMPT_RE 门) | ✅已断言 |
|
||||
| idle-only:对白在播时纠错跳过且不占 onceKey(F1.4);queue 句不顶在播句 | ✅已断言(skipped 事件 + 补播对照 + 菜单报名顺序) |
|
||||
| 归因真话:剧本 D 播 z1_bade;剧本 A/E 全程零归因/补救句 | ✅已断言(含 k1_lulle/k1_liee 挂点) |
|
||||
| 资产缺失:屏蔽 voice → 30s 看门狗续链到结局不卡死 | ✅已断言 |
|
||||
| 数字规范:prog_*/rep_*/gd_ring* 分档整句字面量、无运行时拼接 | ✅已断言(静态审计) |
|
||||
| 坏音质降级:滤波资产缺失回退原声 | 合并(回退是资产侧转码工序,代码无分支;NPC 性别目录→平铺回退由静态审计覆盖) |
|
||||
| 失败即不通过(>5s 无声死局 / 无效手势零反馈 / 结局计数与 §3.4 不符) | ✅已断言(无效手势 error 震逐次计数;四结局矩阵即计数核对) |
|
||||
|
||||
### 本轮修复的实现 bug(web/radio/game.js)
|
||||
|
||||
1. **ONAIR 叙事链末不等待(规格 vs 实现最大偏差)**:`_onNodeSeqDone` 无条件 `advance(node.next)`,
|
||||
节点表的 `auto:true` 标志(INTRO 链/危机拍/签收链/p9 结果链)从未被读取——与 §2.3「链末=继续」、
|
||||
§7.2 ONAIR 链末看门狗行、§9「ONAIR 链末 25s/50s」及文件头注释均不符。修复:仅 `node.auto` 或
|
||||
`@x` 过场转移自动衔接,其余 ONAIR 叙事节点链末等待单击并挂 gd_continue/gd_again 看门狗。
|
||||
2. **longpress 误报无效**:gesture.js 把 longpress/longpressend/tapcancel 派发进 onGesture,RING/
|
||||
BRIDGE/ENDING/MENU/ASK 的 default 分支把它们当无效手势报 gd_invalid/error 震——§2.3 长按行是
|
||||
「引擎接管快进」,全状态合法。修复:仅 left/right(ASK 另含 up/down/doubletap)报无效。
|
||||
3. **菜单单击循环的引擎队列竞态**:`audio.play(item, {queue:true})` 在引擎 `_finishVoice` 中先跑
|
||||
onComplete(游戏链播下一句)后 shift 队列,排队报名会把 sys_menu→sys_menu_resume 链播句顶掉。
|
||||
修复:菜单报名改游戏侧 `_menuQueue` + `_drainMenuQueue()` 排水,当前报名播完接播、零截断。
|
||||
4. **RING 双击首通不报无效**:INTRO 链节点完成会写 `lastCloser`,首通双击重听了 b_goal 而未按开发
|
||||
注记「首通前无上一通 → 无效手势零静默」报错。修复:`callN <= 1` 时报无效。
|
||||
5. **ENDING 上滑缺口碑**:§2.3 ENDING 上滑=「帮助+状态(结局名+口碑)」,原实现只播 sys_help+结局
|
||||
主句。修复:链尾补 `TIER_VOICES[tierOf(rep)]`。
|
||||
6. **stop() 后中断链复活**:被 stopVoice 掐断的 `_playSeq` 链可经 30s 单句看门狗「资产缺失」路径续链,
|
||||
已拆除实例会走到 enterRing 留下无人接听的永久铃声定时器。修复:stop() 先 `seqToken++` 作废在途链。
|
||||
7. **newNight 不清抉择武装**:菜单重开/结算重开到新夜班首链起播前,choiceArmed/pendingChoice 残留,
|
||||
窗口期手势会在旧节点上误抉择。修复:newNight() 显式清零。
|
||||
8. **_ringOnce 双链防护**:closeMenu(RING)/_resume 直接调 _ringOnce 不清旧计时器,可能双铃声链。
|
||||
修复:_ringOnce 先 clearTimeout 旧 ringTimer。
|
||||
|
||||
### 规格歧义 / 实现取舍(登记不改设计)
|
||||
|
||||
- §4.2 表「p4 问她/哄睡」选项列序与 §3.2 树形(左=哄睡/右=问她)相反,实现按 §3.2 + p4 提示句原文
|
||||
(game.js 已注记);断言按 §9 口径(p4 右 → heardArgument=true,+1)。
|
||||
- `sys_saved`(15b G0 组,触发=存档写入后)未接线:自动存档每局 ≥7 次,逐次播报会持续打断节目流;
|
||||
菜单「保存并回大厅」已有 sys_menu_lobby 确认句。列遗留(如需可挂菜单「重新开始今晚」确认后)。
|
||||
- INTRO 上滑=「帮助+状态」:开播前无通号/口碑可报,实现只播 sys_help 后重播当前段(RING 起状态链完整)。
|
||||
- 存档 data 在 §8.1 字段外增加 `call`/`ending`/`lastCloser`(断点续玩与 RING 双击需要,超集兼容)。
|
||||
- ASK 右滑新夜班的 `nights` 按新实例计数(不继承被拒绝存档的 nights),与结算重开 +1 口径不一致,
|
||||
无游戏性影响,列遗留。
|
||||
|
||||
### 资产生产缺口(列遗留,本轮不修)
|
||||
|
||||
- §5.2 SFX 15 件中 **12 件 Stable Audio 3 条目未产出**(`gen/gen_sfx.py` 头注:HF token 未配置跳过):
|
||||
onair_sting / phone_ring / line_connect / line_drop / amb_rain_city / amb_station / amb_kid_room /
|
||||
arg_muffled / amb_street_rain / amb_cab / brake_screech / tape_static。缺失走引擎 console.error
|
||||
静默降级(§6.1 降级方案),玩法与断言不受阻;playtest 静态审计锁定「缺失集合 ⊆ 该清单」,
|
||||
资产补齐后断言自动收敛。已产出:ui_confirm / ui_menu(程序合成)+ 132 句 voice + 4 首 bgm
|
||||
(ogg+m4a 双格式零缺失,见静态审计)。
|
||||
|
||||
## R2 修复回归(round1 synthesis F1-F5 + V1/V2,2026-09-02)
|
||||
|
||||
> 证据源:research/new8/radio/round1/{synthesis,live-player}.md。断言全部落在
|
||||
> `web/radio/test/playtest.mjs`「R2 修复回归」块 + 主路径/看门狗/静态审计改断;
|
||||
> **playtest 断言总数 R1=193 → R2=221(+28)**,全绿。
|
||||
|
||||
| 项 | 修复(文件 → 行为) | 回归断言(✅=已断言) |
|
||||
|---|---|---|
|
||||
| F1 (P1) | `game.js`:`onGesture` 入口 `guide.disarm()` 拆掉等待态看门狗后,无效手势/引擎接管手势分支按态立即重挂——ONAIR/INTRO 链末(`_inStoryWait()` 与 `_onNodeSeqDone` 等待分支同口径)、ASK 空闲、RING 空闲(`_rearmRingWatchdog`)、ENDING 结算态;BRIDGE 本无 guide 看门狗(restTimer 为游戏层),不涉及 | ✅ 链末等待中发无效手势,gd_continue 25s 整准点、gd_again 50s 整准点(旧实现 34.2s 零事件);✅ RING 无效手势后 gd_ring1 仍 10s 准点;✅ ASK 无效手势后看门狗仍 25s 准点 |
|
||||
| F2 (P4/P2) | 台词表两处同步改词(先 `docs/design/15-radio-voice-ids.md` 后 `tools/gen_voice_dual.py`,两表一致):`rep_low`「今晚的口碑,有点砸了。」→「今晚的口碑,还没立起来。」(零起步语义,与 rep_high「在听众里立住了」同尺度;rep=0 开播前不再读成「砸了」);重生成 `voice/{male,female}/rep_low.{ogg,m4a}`(m=1.92s / f=2.32s,`--only rep_low` → `--convert` → `check_all_assets` radio 242+242 全过:双格式配对、零 0 字节、全可解码、性别目录 id 一致) | ✅ 静态审计锁定 rep_low 字面量存在;live 转写复验归 R2 协议第 2 步(重新生成转写) |
|
||||
| F3 (P2) | `gen/gen_sfx.py` 增加 `phone_ring` 程序合成:440+480Hz 柔和双音一响 1.8s + 静默 3.4s = 5.2s 循环周期烘进文件(≥4s);无缝 loop 工艺 = 逐声道去直流、**不做首尾淡化**(`save_loop`)、解码回读校验真峰值 ≤-3dBFS(ogg -3.87 / m4a -3.84dBFS)+ 循环头/尾样本 ≤-60dBFS 边界静音;落 `audio/sfx/phone_ring.{ogg,m4a}`。`game.js` RING 接循环垫:引擎 sfx 层无 loop/stop → 游戏侧经 ctx 起循环 BufferSource 持句柄(`_ringSrc`,guide earcon 同款直用总线),接听/菜单/重开 `_stopRing` 即停;移除定时重触发(`ringTimer`/`ringJitterMs`/`RING_INTERVAL_MS`) | ✅ 进 RING 循环垫起播且挂起态虚拟时钟可空闲(零重触发定时器,可复现);✅ 单击接听循环垫即停不拖尾;✅ RING 无效手势不拆铃声垫;✅ 两级铃看门狗用尽后循环垫仍在(永不惩罚);✅ 静态审计 phone_ring 出待补清单(Stable Audio 待补 12→11 件) |
|
||||
| F4 (P2) | `game.js`:断点续玩恢复后的首句播完再武装跳句——`_resume()` 置 `_resumeGuard`,`_playSeq` 消费为 `_skipLockId`(恢复链首句),该句播完/链完/被新链顶掉即解锁;ONAIR 与 ENDING(live 陷阱场景)两态 tap 生效 | ✅ 恢复后首句(w1_say / e4_a)播完前单击不跳句;✅ 首句播完后跳句重新武装(w1_sayo / e4_b 被正常跳过,链照常走) |
|
||||
| F5 (P2) | `game.js`:链末句跳过保护——`_isTailSentence()`:当前句为本节点末句且节点把控制权交出(链末等待单击 / `@x` 过场转移 / 直入抉择提示)时屏蔽「跳过本句」;自动链中段(b_open/b_rain、危机拍)与 w1_say 组前两句跳句自由保留。与 F1 同提交复核链末状态机:`_inStoryWait` 与 `_onNodeSeqDone` 口径一致 | ✅ 交接抉择提示前的末句(w1_saye)单击不可跳、完整播出后照常交接 p7;✅ @ending 过场前末句(d9_facee,live 被吃掉的点题句)单击不可跳、完整播出后自动进 ENDING(e1) |
|
||||
| V1 | 复核结论:pendingChoice 生效时序无 bug(W2 契约实现正确),按裁定补显式断言关案 | ✅ p* 播放中连点不跳句、不清缓存、不提前生效(rep 未动);✅ 播中再滑覆盖缓存(最后一次为准);✅ 生效时序 = p1 播完 → ui_confirm 结算音 → 结果句;✅ 缓存恰好生效一次(rep=1、缓存清空、不丢不重复) |
|
||||
| V2 | 复核结论:菜单逻辑无缺失(三项循环 + 回绕正确),按裁定补全项循环断言关案。注:菜单为 3 项(sys_menu + sys_menu_resume/restart/lobby,15-radio.md §实现核对「菜单单击循环顺序」口径)——任务书所写「4 项/sys_menu_save」对应菜单标题句 + 3 菜单项;「保存并回大厅」确认句即 `sys_menu_lobby`(无 sys_menu_save 资产) | ✅ 单击循环两个整周期逐项可达(resume→restart→lobby→resume→restart→lobby,第三项不再缺席)、6 次回绕模 3 无漂移;✅ 双击确认「保存并回大厅」→ sys_menu_lobby 播出 + leaving 置位 + 存档落盘 |
|
||||
|
||||
V3(arg_muffled/brake_screech 等 11 件 SA3 资产)维持「等待 HF token」,接线代码已备,不在本轮。
|
||||
|
||||
### 遗留(R2 收尾时需协同)
|
||||
|
||||
- `web/harness/voice_text.json` 的 `rep_low` 期望文本仍是旧词「有点砸了」(harness 归属协议/
|
||||
转写侧,本轮改动手清单之外):R2 协议第 2 步重新生成转写前需同步为新词「还没立起来」,
|
||||
否则 live 复测该句会 MISMATCH。
|
||||
- dungeon 款全量回归本轮 FAIL:另一 agent 并行改动 `web/engine/{audio,gesture}.js` 与
|
||||
`web/dungeon/**` 进行中(失败点为 dungeon 网格/侧墙与 tut 旁白断言,与 radio 无关);
|
||||
radio与其余 6 款全绿。
|
||||
@@ -0,0 +1,179 @@
|
||||
# 16b · 《回声地窟》语音台词表(voice ids,录音依据)
|
||||
|
||||
> **给音频总监的录制说明**
|
||||
> - **全部旁白,无 NPC**:本作怪物不说话,无角色音(主设计 §1/§9.3)。125 句双性别。**female = Serena,male = Uncle_Fu**(沿用 R1 分配惯例)。落 `web/dungeon/audio/voice/female|male/<id>.{ogg,m4a}`。
|
||||
> - female instruct 常量:`平静清晰的女声,像探窟向导,沉稳可信`
|
||||
> - male instruct 常量:`低沉醇厚的男声,像探窟向导,沉稳有力`
|
||||
> - 两常量全表统一(含教学/战斗/结算),禁止句级变体。
|
||||
> - 数字规避:层数(7 句)/血量(4 档)/金币(4 档)/面朝(4 句)/威胁(4 句)/战利(3 档)/死因(3 档)/元进度(3 档)全部分档整句,无运行时拼接。
|
||||
> - 多音字自查:全表无「血」「重(chóng/zhòng 歧义句)」「爪」「挨」「壳」「栅」;「重听」一律写「重新听」;「重新」为规范 sanctioned 常用词(sys_menu_help / sys_menu_restart)保留。「回声回来越快」已去掉助词「得」。余留风险 2 处已标注:`btl_bat` 的「蝠」(读 fú,试听异常则整句改「盲眼蝙蝠扑了过来」);`unlock_potion` 的「行囊」(xíng náng 固定词,试听确认)。
|
||||
> - 向导/卡关通道句(gd_*、stair_*、nav_*):trigger 见表;接线纪律按 14 号文档——watchdog/纠错句 idle-only、onceKey 同局限次、向导插播一律 queue:true;开发轮次须将本表 gd_* 条目登记进 14 号文档增补。
|
||||
> - 管线:`tools/gen_voice_dual.py` 照录(--game dungeon);生成后 `--convert` 落盘 + `tools/check_all_assets.py` 终检(双格式配对、双性别集合一致)。
|
||||
|
||||
## A 组 · 序章/标题(旁白 ×4)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `intro_1` | 你在黑暗中醒来。这里是回声地窟。 | 新周目开场 1 |
|
||||
| `intro_2` | 伸手不见五指,声音就是你的眼睛。 | 新周目开场 2 |
|
||||
| `sys_continue_ask` | 检测到探窟记录。单击继续,右滑重新开始。 | 有存档进游戏(TITLE) |
|
||||
| `sys_new_run` | 新的探窟,开始了。 | 新周目开始 |
|
||||
|
||||
## T 组 · 教学演练 DRILL(旁白 ×19)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `tut_d0` | 先学会用耳朵看。单击,发出声波脉冲。 | D1 前(首次脉冲引导) |
|
||||
| `tut_echo_come` | 听,回声回来了。 | D1 首次回声后 |
|
||||
| `tut_front_rule` | 回声回来越快,墙就越近。 | D2(正前距离规则) |
|
||||
| `tut_side_rule` | 两侧的回声,发闷是墙,空旷是通路。 | D3(侧向规则) |
|
||||
| `tut_walk` | 按住屏幕不放,你就往前走。 | D4 |
|
||||
| `tut_turn` | 左滑右滑,可以转身。 | D5 |
|
||||
| `tut_replay` | 双击,再发一次脉冲,不要钱。 | D6(重发免费) |
|
||||
| `tut_status` | 上滑,随时听自己的状态。 | D7 |
|
||||
| `tut_menu` | 下滑,打开菜单。 | D7 |
|
||||
| `tut_mob` | 前面有东西!放心,它伤不到你。 | D8 遭遇教学怪前(真话:ATK0) |
|
||||
| `tut_parry` | 听到它的动静,双击格挡。 | D8 前摇前 |
|
||||
| `tut_parry_ok` | 挡住了! | D8 格挡成功(成功只给新短句) |
|
||||
| `tut_parry_miss` | 没挡住也别怕,它伤不到你。 | D8 格挡失败 |
|
||||
| `tut_attack` | 现在单击,挥拳打它。 | D8 你的回合 |
|
||||
| `tut_kill` | 打中了,就是这样。 | D8 击杀 |
|
||||
| `tut_stairs` | 铁器的回声,就是下潜的楼梯。 | D9 |
|
||||
| `tut_stairs_on` | 楼梯就在脚下。单击,下潜。 | 首次踏上楼梯格 |
|
||||
| `tut_done` | 教学完了。地窟很深,小心走。 | DRILL 完成 |
|
||||
| `tut_skip` | 已跳过教学。单击脉冲,先听听四周。 | 下滑跳过教学 |
|
||||
|
||||
## S 组 · 系统/菜单/状态(旁白 ×35)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `sys_saved` | 进度已保存。 | 存档写入后 |
|
||||
| `sys_menu` | 菜单。单击切换,双击确认。 | 下滑呼出菜单 |
|
||||
| `sys_menu_resume` | 返回探索。 | 菜单项 |
|
||||
| `sys_menu_save` | 保存并回大厅。 | 菜单项 |
|
||||
| `sys_menu_help` | 重新听帮助。 | 菜单项 |
|
||||
| `sys_menu_restart` | 重新开始本周目。 | 菜单项 |
|
||||
| `help_explore` | 单击脉冲,按住前进,左右滑转身。双击再听,上滑状态,下滑菜单。 | 帮助(探索) |
|
||||
| `help_battle` | 敌人前摇声响时双击格挡,单击挥击。打不过就按住屏幕逃跑。 | 帮助(战斗) |
|
||||
| `settings_hint` | 音色、语速、背景音乐,请回大厅修改。 | 菜单内 |
|
||||
| `st_floor_1` | 这是第一层。 | 上滑状态链 / 进层 |
|
||||
| `st_floor_2` | 这是第二层。 | 同上 |
|
||||
| `st_floor_3` | 这是第三层。 | 同上 |
|
||||
| `st_floor_4` | 这是第四层。 | 同上 |
|
||||
| `st_floor_5` | 这是第五层。 | 同上 |
|
||||
| `st_floor_6` | 这是第六层。 | 同上 |
|
||||
| `st_floor_7` | 这是第七层。 | 同上 |
|
||||
| `st_hp_1` | 你毫发无损。 | 血量 >75% |
|
||||
| `st_hp_2` | 你受了点伤。 | 50~75% |
|
||||
| `st_hp_3` | 你伤势不轻。 | 25~50% |
|
||||
| `st_hp_4` | 你命悬一线。 | ≤25%(danger earcon + warning 震,降档才播) |
|
||||
| `st_gold_1` | 口袋空空。 | 元进度总金币 <50 |
|
||||
| `st_gold_2` | 有些积蓄。 | 50~200 |
|
||||
| `st_gold_3` | 收获可观。 | 200~600 |
|
||||
| `st_gold_4` | 腰包鼓鼓。 | >600 |
|
||||
| `st_face_e` | 你面朝东。 | 上滑状态链(绝对方位) |
|
||||
| `st_face_s` | 你面朝南。 | 同上 |
|
||||
| `st_face_w` | 你面朝西。 | 同上 |
|
||||
| `st_face_n` | 你面朝北。 | 同上 |
|
||||
| `st_threat_none` | 附近很安静。 | 上滑威胁段(相对方位,只报左右) |
|
||||
| `st_threat_left` | 左边有脚步声。 | 左侧 5 格内有怪 |
|
||||
| `st_threat_right` | 右边有脚步声。 | 右侧 5 格内有怪 |
|
||||
| `st_threat_both` | 两边都有动静。 | 两侧皆有 |
|
||||
| `st_best_1` | 你还没到过第三层。 | TITLE 元进度·最深层数档 1 |
|
||||
| `st_best_2` | 你到过中层。 | 档 2(最深 3-5 层) |
|
||||
| `st_best_3` | 你到过最深层。 | 档 3(最深 ≥6 层) |
|
||||
|
||||
## E 组 · 探索事件(旁白 ×9)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `evt_coin_1` | 捡到几枚金币。 | 金币堆·小 |
|
||||
| `evt_coin_2` | 捡到一小把金币。 | 金币堆·中 |
|
||||
| `evt_coin_3` | 捡到一大袋金币。 | 金币堆·大 |
|
||||
| `evt_potion` | 一瓶药水,收进腰带。 | 拾取药水(腰带空) |
|
||||
| `evt_potion_full` | 腰带满了,药水留在原地。 | 已有药再拾(药不消失) |
|
||||
| `evt_weapon` | 捡到更快的短刃,出手更狠了。 | 武器掉落(自动装备) |
|
||||
| `evt_armor` | 换上更硬的护甲,更抗打了。 | 护甲掉落(自动装备) |
|
||||
| `evt_stairs_lock` | 楼梯被大东西堵住了,先赢它。 | 窟主未清时踏上楼梯格 |
|
||||
| `evt_descend` | 你顺着楼梯,往下潜。 | 下潜(DESCEND) |
|
||||
|
||||
## B 组 · 战斗(旁白 ×30)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `btl_bat` | 盲眼蝠扑了过来! | 遭遇盲眼蝠 |
|
||||
| `btl_rat` | 窟鼠窜了出来! | 遭遇窟鼠 |
|
||||
| `btl_mush` | 蘑菇怪拦住了你! | 遭遇蘑菇怪 |
|
||||
| `btl_crab` | 窟主石甲蟹,就在你面前。 | 遭遇窟主(L3) |
|
||||
| `btl_crawler` | 绕行者贴上来了,小心背后! | 遭遇绕行者(教学绕位威胁) |
|
||||
| `btl_spider` | 洞蛛落地了! | 遭遇洞蛛 |
|
||||
| `btl_leech` | 窟主腐沼蟒,挡住了楼梯。 | 遭遇窟主(L6) |
|
||||
| `btl_guard` | 石像卫醒了! | 遭遇石像卫 |
|
||||
| `btl_king` | 窟中之王,就在深处。 | 遭遇终 Boss(L7) |
|
||||
| `btl_parried` | 挡下了大半! | 格挡成功(减伤 80%) |
|
||||
| `btl_behind` | 它在你背后,转身再挡。 | 未面对攻击源挨打(归因真话) |
|
||||
| `btl_swish` | 挥空了,它不在你面前。 | 挥击落空(归因真话) |
|
||||
| `btl_no_turn` | 它贴着你不放,不用转身。 | 缠斗怪时转身(每场 1 次,之后仅 error 震) |
|
||||
| `btl_kill` | 它倒下了。 | 击杀 |
|
||||
| `btl_loot_1` | 战利不多。 | 战利档 1 |
|
||||
| `btl_loot_2` | 小有收获。 | 战利档 2 |
|
||||
| `btl_loot_3` | 大有收获。 | 战利档 3 |
|
||||
| `btl_lvup` | 你的拳脚更利落了。 | 每击杀 4 只攻击升档 |
|
||||
| `btl_flee` | 你甩掉了它,被抓了一下。 | 逃跑成功(真话:撤退挨一下) |
|
||||
| `btl_flee_boss` | 退路塌了,跑不掉! | Boss 战逃跑拒绝(真话) |
|
||||
| `btl_half_crab` | 石甲蟹的甲裂了! | 窟主半血(阶段转换信号) |
|
||||
| `btl_half_leech` | 腐沼蟒暴怒了! | 窟主半血 |
|
||||
| `btl_half_king` | 王怒了,脚步更重了! | 终 Boss 半血(二阶段) |
|
||||
| `die_intro` | 你倒下了。 | 死亡链首句 |
|
||||
| `die_cause_1` | 你被小怪拖垮了。 | 死因:普通怪连续失血(真话) |
|
||||
| `die_cause_2` | 你没挡住那记重击。 | 死因:重击未格挡(真话) |
|
||||
| `die_cause_3` | 你背后的偷袭,要了命。 | 死因:背刺(真话) |
|
||||
| `die_adv_1` | 下次,前摇声响时就双击。 | 建议:全程格挡数为 0 |
|
||||
| `die_adv_2` | 打不过,就按住屏幕逃跑。 | 建议:逃跑 0 次且死于连续战 |
|
||||
| `die_adv_3` | 身后有动静,先转身。 | 建议:死于背刺 |
|
||||
|
||||
## G 组 · 卡关/看门狗/纠错(旁白 ×14)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `gd_pulse` | 单击脉冲,听听四周。 | 探索看门狗第 1 级(10s,full 档,idle-only) |
|
||||
| `gd_turn` | 轮到你了。单击挥击。 | 战斗回合看门狗第 1 级(15s) |
|
||||
| `gd_invalid` | 这个操作在这里用不上。 | 无效手势纠错(onceKey 同局限 1 次,之后仅 error 震) |
|
||||
| `stair_hint_a` | 找找铁器的回声,那是楼梯。 | 卡关 L1 暗示(60s,楼梯未找到) |
|
||||
| `stair_hint_b` | 楼梯有大东西守着,先赢它。 | 卡关 L1 暗示(窟主未清) |
|
||||
| `stair_dir_e` | 楼梯在东边。 | 卡关 L2 明示(120s,绝对方位) |
|
||||
| `stair_dir_s` | 楼梯在南边。 | 同上 |
|
||||
| `stair_dir_w` | 楼梯在西边。 | 同上 |
|
||||
| `stair_dir_n` | 楼梯在北边。 | 同上 |
|
||||
| `nav_e` | 往东。 | 卡关 L3 带路(180s,导航模式逐步播) |
|
||||
| `nav_s` | 往南。 | 同上 |
|
||||
| `nav_w` | 往西。 | 同上 |
|
||||
| `nav_n` | 往北。 | 同上 |
|
||||
| `nav_done` | 到了,就是这里。 | 带路抵达楼梯 |
|
||||
|
||||
## M 组 · 结算/元进度(旁白 ×14)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `meta_gold_1` | 这趟没带回什么。 | 死亡/通关结算·金币入账档 1 |
|
||||
| `meta_gold_2` | 这趟带回一些金币。 | 档 2 |
|
||||
| `meta_gold_3` | 这趟满载而归。 | 档 3 |
|
||||
| `settle_stronger` | 下个周目,你会更强。 | 结算钩子句(开环) |
|
||||
| `settle_win_1` | 你捧起了地窟之心,通关了! | 通关 1 |
|
||||
| `settle_win_2` | 黑暗的尽头,是光。 | 通关 2 |
|
||||
| `settle_again` | 单击,再探一次。 | 结算尾(重开入口 ≤2s) |
|
||||
| `unlock_lead` | 攒够了新的遗产。 | 新周目开场·有新解锁时 |
|
||||
| `unlock_potion` | 解锁行囊药,开局自带一瓶。 | 遗产播报(90 金) |
|
||||
| `unlock_vigor` | 解锁体魄,起始更强壮。 | 遗产播报(150 金) |
|
||||
| `unlock_veil` | 解锁护符,每层头一下减半。 | 遗产播报(220 金) |
|
||||
| `unlock_echo` | 解锁回声强化,侧向听得更远。 | 遗产播报(300 金) |
|
||||
| `unlock_blade` | 解锁武器,开局带着短刃。 | 遗产播报(450 金) |
|
||||
| `unlock_none` | 金币还不够,继续攒。 | TITLE 元进度·距下一解锁尚远 |
|
||||
|
||||
---
|
||||
|
||||
**合计:125 句 ×2 性别 = 250 条音频**(×2 格式 = 500 文件;无 NPC 平铺件)。死亡结算链 =
|
||||
`die_intro → die_cause_X → die_adv_Y → st_floor_N(复用)→ meta_gold_X → settle_stronger → settle_again`;
|
||||
通关链 = `settle_win_1 → settle_win_2 → meta_gold_X → unlock 段 → settle_again`;
|
||||
上滑局面复述链 = `st_floor_N → st_hp_X → st_gold_X → st_face_X → st_threat_X`。
|
||||
主设计触发逻辑对照 [16-dungeon.md](16-dungeon.md) §4-§11;资产规模核对见其 §9。
|
||||
@@ -0,0 +1,577 @@
|
||||
# 16 · 《回声地窟》完整设计(dungeon / Echo Cavern)
|
||||
|
||||
> **给开发者的实现要点摘要**
|
||||
> 1. 听声辨位 Roguelike:网格地窟 + 面朝转向。**单击=声波脉冲**(回声"看"地形:正前距离 4 档×材质 4 种,左右侧 墙/开口 2 档,预 pan 立体声资产),**按住=前进、左右滑=转身**(豁免登记见 §2),双击=重发脉冲(免费重听)、上滑=状态、下滑=菜单(三件套不豁免)。战斗是 rpg 式回合制(前摇双击格挡),Boss 战加入绕位(脚步声报方位、转身对准才打得到)。
|
||||
> 2. 方位全程降维 ≤4:探索报前/左/右三向(身后不报,转身即查),战斗相对方位只有面前/左/右/背后。回声=静态地形、脚步=动态怪物、播报=绝对方位——三套信息由同一 `grid` 单源生成,机制上不可能互相矛盾。
|
||||
> 3. 单局=一命一局,7 层满通约 24 分钟;死了重开但金币进元进度("遗产"5 项永久强化,死亡不清档)。学习期零惩罚:L1 怪 ATK=0、L2 ATK=1,学期内不可能死;药水自动喝;撞墙无伤;无任何倒计时。
|
||||
> 4. 随机性全走种子 PRNG(mulberry32,`opts.seed` 可注入,playtest 传固定 seed 复现);回声/脚步全部用「预生成 sfx 资产 + setTimeout 调度 + volume」实现,不用引擎外实时节点(playtest 虚拟时钟可断言)。
|
||||
> 5. 台词表 [16-dungeon-voice-ids.md](16-dungeon-voice-ids.md)(125 句 ×2 性别,无 NPC——怪物不说话);本作向导句 gd_* 需在开发轮次登记进 14 号文档增补(§6 纪律:queue:true、idle-only、onceKey)。
|
||||
> 6. 规模对标 escape+rpg 折中:单文件 game.js 预计 900-1100 行,bgm 4 + sfx ~34 + voice 125×2。
|
||||
|
||||
---
|
||||
|
||||
## 1. 概述
|
||||
|
||||
- **一句话**:你是盲眼探窟者,单击发出声波脉冲、用回声"看"每次都不同的地窟,听脚步辨怪,逐层下潜,死了带着金币重来、越死越强。
|
||||
- **题材**:黑暗洞窟探险。核心命题「伸手不见五指,声音就是你的眼睛」——题材与纯音频互为 justification,与《剑与声》的"耳即眼"呼应但玩法完全不同:rpg 是选项列表 RPG,本作是**空间探索型 roguelike**(方法论 §4.1:状态层重点=方位参数映射+撞墙归因+目标方向信标)。
|
||||
- **为什么适合纯音频**:回声定位本来就是"用声音看空间"——视觉游戏的 minimap 在这里天然就是一段回声;黑暗=无画面是叙事设定而非技术妥协。移动/转身/距离全部可离散化(≤4 方位×4 距离档),不需要连续角度(文献结论:方位降维 ≤4)。
|
||||
- **单局**:一命一局,出生到死亡/通关。7 层,满通约 24 分钟,普通玩家死于 4-6 层(约 14-19 分钟)。死亡结算 ≤15s 必答归因三问,金币入元进度,**死亡不清档位进度**。
|
||||
- **与现有 6 游戏的关系**:空间感承接 escape(网格+带路提示),回合战斗承接 rpg(前摇格挡),演练教学承接 space(D 步逐项实操),元进度为本作新增系统(8 款新模式探索点的核心增量)。
|
||||
|
||||
## 2. 手势映射与豁免登记
|
||||
|
||||
### 2.1 探索态(EXPLORE / DRILL / DESCEND)
|
||||
|
||||
| 手势 | 作用 | 反馈 |
|
||||
|---|---|---|
|
||||
| 单击 | **发出声波脉冲**(核心动词,1.2s 冷却防连打糊声流) | sfx/pulse + 调度回声组(§3) |
|
||||
| 按住(longpress,450ms 起) | **前进**:按住朝面朝方向连续走(每格 0.5s),松开(longpressend)即停;撞墙自动停 | 每格 step_own + swipe 震;撞墙 bump + 停,**无伤** |
|
||||
| 左滑 | 左转 90°(面朝逆时针 N→W→S→E) | step_turn + swipe 震 |
|
||||
| 右滑 | 右转 90° | step_turn + swipe 震 |
|
||||
| 双击 | **重发脉冲**(免费重听回声,不消耗任何资源、无冷却惩罚) | 同单击(宪法"双击=重听"的本作落地:线索=回声) |
|
||||
| 上滑 | 状态播报链:层 → 血量档 → 金币档(元进度总账)→ 面朝 → 周围威胁 | 5 段链播 |
|
||||
| 下滑 | 模态菜单(§2.4) | menu earcon |
|
||||
|
||||
### 2.2 战斗态(BATTLE)
|
||||
|
||||
| 手势 | 作用 | 反馈 |
|
||||
|---|---|---|
|
||||
| 单击 | 挥击:怪在你面前才命中;不在(Boss/绕位怪换位后)= 挥空 | atk_swing→命中 atk_hit / 挥空 + `btl_swish`(归因真话) |
|
||||
| 双击 | **格挡**:仅敌方前摇音窗口内(1.2s)有效;面对攻击来源减伤 80%,未面对 0%(背后挨刀) | parry / hurt + hit 震 |
|
||||
| 左滑/右滑 | 转身(只对绕位怪/Boss 有意义;缠斗怪时无效) | step_turn / 纠错(§10) |
|
||||
| 按住 | **尝试逃跑**:普通怪必成、但撤退挨一下(真实掉血);Boss 战拒绝 | `btl_flee` / `btl_flee_boss` |
|
||||
| 上滑 | 战斗状态:我方血量档 → 敌方血量档 →(Boss/绕位战)它的当前方位 | 3 段链播 |
|
||||
| 下滑 | 模态菜单(战斗暂停,回合制无实时流,无需 count-in) | menu earcon |
|
||||
|
||||
### 2.3 标题态(TITLE)/ 结算态(SETTLE)
|
||||
|
||||
| 手势 | TITLE | SETTLE |
|
||||
|---|---|---|
|
||||
| 单击 | 继续(有存档)/ 开始探窟(无存档) | 再来一局(新周目,重掷 seed) |
|
||||
| 右滑 | 放弃当前周目,重掷新周目(元进度保留) | —(无效,纠错) |
|
||||
| 双击 | 重听 continue_ask / 元进度播报 | 重听结算链 |
|
||||
| 上滑 | 元进度播报:金币档 → 最深层数档 → 遗产清单(已解锁各一句)→ `unlock_none`(不够时) | 重听元进度段 |
|
||||
| 下滑 | 菜单(帮助/返回两项) | 菜单 |
|
||||
| 按住/左右滑 | 无效(error 震 + `gd_invalid`) | 同左 |
|
||||
|
||||
### 2.4 模态菜单(遵守 00 文档 §5.2 全球约定,无豁免)
|
||||
|
||||
下滑呼出 → 单击循环切换(每切播项名)→ 双击确认 → 上滑=帮助 → 下滑=关闭。打开即暂停(战斗回合制天然可暂停)。选项:返回探索(战斗态同)→ 保存并回大厅 → 重新听帮助 → 重新开始本周目。
|
||||
|
||||
### 2.5 豁免登记(必须显式)
|
||||
|
||||
| # | 豁免条目 | 理由(先例) |
|
||||
|---|---|---|
|
||||
| E1 | 单击=脉冲(非"确认/继续") | 核心动词必须是最快手势;脉冲是"检查"类非即时操作,300ms tap 延迟无碍(escape 单击=检查同款) |
|
||||
| E2 | 左右滑=转身、按住=前进(探索态四向滑+长按被玩法占用) | 网格移动玩法(escape 四向滑=移动先例);上下滑让位给不可豁免的状态/菜单三件套,前进改绑长按——"按住就走"零认知负荷(P4),单手免视(P3) |
|
||||
| E3 | 对局期 `audio.setRateBoostEnabled(false)`(探索/战斗/教学),菜单/结算恢复 true | 长按=移动是潜在玩法输入,长按快进必须豁免(rhythm/space 对局期豁免先例) |
|
||||
| E4 | 战斗态下滑=菜单保留,但菜单在战斗内语义为暂停 | 回合制,菜单即暂停,无并发压力;不沿用 rpg"战斗态下滑=逃跑"豁免(本作逃跑绑长按,更贴"转身就跑"直觉) |
|
||||
|
||||
教学(DRILL)中逐条讲清 E1/E2/E4 的偏离(tut_* 句),符合 §5.4"偏离必须在开场交互教学中讲清"。longpressend 仅作停走信号,不承载第二语义;不开启 immediateTap(无 tapcancel 路径)。
|
||||
|
||||
## 3. 核心动词:声波脉冲与回声定位
|
||||
|
||||
### 3.1 声学编码(全在引擎能力内)
|
||||
|
||||
| 维度 | 编码 | 实现 |
|
||||
|---|---|---|
|
||||
| 正前距离 | 4 档:贴身(1格)/近(2格)/中(3-4格)/远(5+格) | 脉冲后 setTimeout 调度 `echo_1..4`,延迟 0.25/0.50/0.80/1.10s,volume 0.9/0.7/0.5/0.35 |
|
||||
| 正前材质 | 4 种:石墙/木门/铁梯(楼梯)/水 | 回声到达后 +120ms 播材质尾音 `mat_stone/door/stair/water`(0.2s 短音色) |
|
||||
| 左右侧 | 2 档:墙(闷)/开口(空旷回灵) | 脉冲后 +0.35s 同时播 `side_wall_l/r` 或 `side_open_l/r`(**预 pan 立体声资产**:能量只在一个声道,引擎 play() 无实时 pan,space whoosh_left/right 同工艺) |
|
||||
| 身后 | **不报** | 刻意降维:回声只照面前和两侧,转身即查(教学句 tut_side_rule 讲明规则;不报≠信息矛盾) |
|
||||
|
||||
- 节点说明:**不用引擎外实时 WebAudio 节点**(playtest mock 只 mock bufferSource/gain)。全部=预渲染 sfx 资产 + `play()` volume + setTimeout 调度——虚拟时钟下回声调度可精确断言。
|
||||
- 降级方案:若 SA3 立体声分离度不达标,侧向回声改 SYN 程序合成(直接写立体声 AudioBuffer 的 L/R 通道数据,管线能力内);材质尾音全部 SYN 可兜底。
|
||||
- 频带分离防糊:己方脚步/怪物脚步=低频(100-300Hz),脉冲+回声=中频(800Hz-2kHz),BGM 垫底——探索期并发声流 ≤2(你的动作反馈 + 怪物脚步)恒成立。
|
||||
- 脉冲冷却 1.2s:防连打;双击重发不受额外惩罚(P1"回声可重听且免费")。冷却期单击/双击 → 仅 error 震(无语音惩罚)。
|
||||
|
||||
### 3.2 三套信息自洽(P1 专项,机制级保证)
|
||||
|
||||
| 信息 | 声源 | 内容 | 坐标系 |
|
||||
|---|---|---|---|
|
||||
| 回声 | 脉冲触发 | 静态地形(墙/门/楼梯/水 + 距离) | 相对(前/左/右) |
|
||||
| 怪物脚步 | 怪物移动即播(每步,间隔 1.5-2.5s) | 动态威胁(左右 pan + 距离档音量;背后=中央音量减半,转身后恢复=方位反馈) | 相对(左/前/右/后) |
|
||||
| 播报 | 上滑/事件 | 层数/血量/金币/面朝(绝对)/威胁(相对左右) | 面朝=绝对,其余=相对 |
|
||||
|
||||
三者全部由同一 `game._floor.grid` 与怪物位置**单源查询**生成,无独立状态;模板句固定(方位句 4 句、威胁句 4 句)。回声永不报怪物、脚步永不报地形——语义域零重叠。威胁播报只报左右不报背后(同回声降维,规则在教学讲明)。
|
||||
|
||||
## 4. 状态机
|
||||
|
||||
### 4.1 状态列表
|
||||
|
||||
`TITLE / DRILL / EXPLORE / BATTLE / MENU(overlay) / DESCEND / SETTLE`。MENU 是挂起 overlay(记录返回态),其余为正交主态。
|
||||
|
||||
### 4.2 转移图
|
||||
|
||||
```
|
||||
start ──> TITLE ──单击(有档)──> EXPLORE(恢复存档+局面复述)
|
||||
│ │单击(无档) │
|
||||
│ ├─────> DRILL(仅首次) ──完成/下滑跳过──> EXPLORE(L1)
|
||||
│ └右滑=重掷新周目 ──────────────┘(已学过教学,直达)
|
||||
v
|
||||
EXPLORE <──────────────┐
|
||||
│ 走进怪格/怪走进格 │ 胜利(原地)
|
||||
v │
|
||||
BATTLE ────────────────┘
|
||||
│ HP≤0
|
||||
v
|
||||
SETTLE(死亡) <── EXPLORE(第7层终Boss胜=通关SETTLE)
|
||||
│单击
|
||||
v
|
||||
TITLE(元进度入账后)
|
||||
|
||||
EXPLORE ──踏上楼梯格+单击──> DESCEND ──> EXPLORE(floor+1)
|
||||
EXPLORE/BATTLE ──下滑──> MENU ──返回──> 原状态
|
||||
```
|
||||
|
||||
DESCEND 演出:stairs_down 轰隆 + `evt_descend` + 下一层生成 + `st_floor_N`,约 5s。
|
||||
|
||||
### 4.3 每状态手势映射总表
|
||||
|
||||
| 手势 | TITLE | DRILL | EXPLORE | BATTLE | MENU | SETTLE |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 单击 | 继续/开始 | 步骤作答 | 脉冲 | 挥击 | 循环切项 | 再来一局 |
|
||||
| 双击 | 重听 | 步骤作答(D6) | 重发脉冲 | 格挡(前摇窗口) | 确认执行 | 重听结算 |
|
||||
| 左滑 | error | 步骤作答(D5) | 左转 | 转身(绕位怪有效) | 上一项 | error |
|
||||
| 右滑 | 重掷新周目 | 步骤作答(D5) | 右转 | 转身(绕位怪有效) | 下一项 | error |
|
||||
| 上滑 | 元进度 | 状态(教学后可用) | 状态链 | 战斗状态链 | 帮助 | 重听元进度段 |
|
||||
| 下滑 | 菜单 | 跳过教学 | 菜单 | 菜单(暂停) | 关闭 | 菜单 |
|
||||
| 长按 | error | 步骤作答(D4) | 前进 | 尝试逃跑 | — | error |
|
||||
| 长按松开 | — | 停 | 停 | — | — | — |
|
||||
|
||||
无效手势一律 error 震;full 档语音纠错 `gd_invalid`(onceKey 同局限 1 次,之后仅 error 震)。idle-only:纠错/看门狗语音在播时跳过(引擎 guide 已实现)。
|
||||
|
||||
## 5. 教学编排(DRILL,首局内嵌于第 1 层)
|
||||
|
||||
每步=一句短旁白→一次实操→反馈;做错重教同一步(**新短句**,不逐字重播)≤2 次后自动演示通过(不卡流程,space 先例)。教学寄生局内:DRILL 就在 L1 地图起点房内进行,D8 的教学怪是 L1 两只怪之一。全程可下滑跳过(`tut_skip`),跳过标志存进度,二周目不再进 DRILL。
|
||||
|
||||
| 步 | 旁白 | 等待动作 | 通过条件/反馈 |
|
||||
|---|---|---|---|
|
||||
| D0 | intro_1+intro_2+tut_d0 | 单击 | confirm 震 |
|
||||
| D1 | — | 单击 | pulse+回声组 + `tut_echo_come`。**首输入≤60s 达成点(≈t+15s)** |
|
||||
| D2 | tut_front_rule | 单击继续 | 纯听规则句 |
|
||||
| D3 | tut_side_rule | 单击继续 | 纯听规则句 |
|
||||
| D4 | tut_walk | 按住走 ≥2 格 | 脚步声(撞墙也算过,bump+`那边是墙`由既有 bump 路径播) |
|
||||
| D5 | tut_turn | 左滑+右滑各 1 | 转身声 |
|
||||
| D6 | tut_replay | 双击 | echo 重播 + `tut_echo_come` 复用 |
|
||||
| D7 | tut_status + tut_menu | 上滑(状态链播)→ 下滑开菜单→再关 | 两键各一次 |
|
||||
| D8 | tut_mob → 走向教学怪触发战斗(盲眼蝠 ATK=0)→ tut_parry →(前摇)双击 | 格挡成/败都继续:成功 `tut_parry_ok`,失败 `tut_parry_miss` | 然后 tut_attack → 单击挥击至击杀 `tut_kill`。**首正反馈≤3min 达成点** |
|
||||
| D9 | tut_stairs | 脉冲听到铁器回声后自行走到楼梯 | 踏上楼梯格 `tut_stairs_on` → 单击下潜 → EXPLORE |
|
||||
|
||||
D9 后不再教学;上滑=状态链随时可查。生成约束(教学局 L1,优先于随机):起点房前方 2 格内保证有墙(D1 回声演示)、起点房门口固定一只盲眼蝠(D8)、房内 1 处金币(拾取体验)。
|
||||
|
||||
FTUE 核对:遮罩点按→D0 三句(~8s)→D1 首次脉冲 ≈ t+15s(<60s ✓);首个正反馈=教学战胜利 ≈ t+2min(≤3min ✓);学习期 L1-2 怪 ATK 0/1(死亡不可能 ✓)。
|
||||
|
||||
## 6. 地窟生成
|
||||
|
||||
### 6.1 seed 用法
|
||||
|
||||
```
|
||||
rng(floor) = mulberry32((seed ^ (floor * 0x9E3779B9)) >>> 0) // 每层独立子种子
|
||||
```
|
||||
|
||||
- `opts.seed` 可注入(playtest 传 42);正式局 `seed = Math.floor(Math.random()*1e9)`(开局掷一次,存入 run)。同 seed → L1..L7 全部可复现。
|
||||
- 生成步骤(每层):① 尺寸定表(§6.2)→ ② 放 3-6 个矩形房间(2×2~3×4,不重叠)→ ③ L 型走廊按 MST 顺序连通全房间 → ④ 起点房=第 1 房中心,楼梯房=BFS 距起点最远房间中心,楼梯格=其中心 → ⑤ 宝物撒入房间格 → ⑥ 怪物放在 BFS 距起点 ≥3 格的格位(开局安全区)。
|
||||
- 复现断言口径:同 seed 两次构造 → grid/怪物/宝物/楼梯逐格相等(测试读 `game._floor` 重算不变式,**不写魔法坐标**)。
|
||||
|
||||
### 6.2 层规格与难度曲线
|
||||
|
||||
| 层 | 尺寸 | 怪物(型×数) | 宝物 | 目标用时 | 累计 |
|
||||
|---|---|---|---|---|---|
|
||||
| 1 教学 | 7×7 | 盲眼蝠×2(ATK0) | 金币×1 | 3.0 | 3.0 |
|
||||
| 2 | 7×7 | 窟鼠×3 | 金币×1+药水×1 | 3.0 | 6.0 |
|
||||
| 3 窟主 | 9×9 | 蘑菇怪×3 + 窟主石甲蟹 | 金币×1+短刃 | 3.5 | 9.5 |
|
||||
| 4 | 9×9 | 绕行者×2+洞蛛×2 | 金币×1+皮甲 | 3.5 | 13.0 |
|
||||
| 5 | 11×11 | 洞蛛×3+绕行者×2 | 金币×1+药水×1 | 3.5 | 16.5 |
|
||||
| 6 窟主 | 11×11 | 洞蛛×2+绕行者×2 + 窟主腐沼蟒 | 金币×1+阔刃 | 3.5 | 20.0 |
|
||||
| 7 终局 | 11×11 | 石像卫×3 + 窟中之王 | 金币×1 | 4.0 | 24.0 |
|
||||
|
||||
- 窟主守楼梯格:未击败时踏上楼梯格播 `evt_stairs_lock`(楼梯不可用);击败后解锁。终 Boss 击败=通关。
|
||||
- 敌型见 §7.2 表。每层开场氛围:`st_floor_N` + 层 BGM 不变(探索曲统一),深度感靠 `evt_descend` 与怪物构成。
|
||||
|
||||
## 7. 遭遇与战斗
|
||||
|
||||
### 7.1 遭遇
|
||||
|
||||
- 全**明雷**:怪物脚步声持续可闻(rpg 暗雷教训——纯音频里突袭没有信息缓冲)。你走进怪格或怪走进你格 → `btl_start_<mob>` + battle earcon + BGM 切换。
|
||||
- 遭遇瞬间自动"面对"怪物(播报名即=它在面前)。怪移动的脚步:每步播 `mob_step_<class>_<l|c|r>`,pan 按相对方位(左/前/右),**背后用中央资产音量减半**;距离档音量 ≤2 格 0.9 / 3-4 格 0.6 / 5-8 格 0.35 / 更远不播。距离 ≤2 格加 heartbeat 震(威胁前置预警窗,方法论 L2)。
|
||||
|
||||
### 7.2 回合时序(实现契约)
|
||||
|
||||
```
|
||||
进 BATTLE → 玩家回合(guide.turn) → 单击挥击/长按逃跑/转身 → 结算
|
||||
→ 若怪活:怪行动(绕位怪先移动:脚步报新方位;缠斗怪原地)→ 攻击前摇 1.2s(tel_* 音)
|
||||
→ 前摇内双击=格挡判定(面对攻击源:×0.2 / 未面对:×1.0)→ 受击/格挡音+震
|
||||
→ 玩家 HP≤25% 且腰带有药 → 自动喝药(potion 音+播报)
|
||||
→ 回到玩家回合。HP≤0 → 死亡归因链 → SETTLE
|
||||
```
|
||||
|
||||
- 缠斗怪(蝠/鼠/菇/蛛):不绕位,恒正面,左右滑无效(`btl_no_turn` 纠错,每场 1 次)。
|
||||
- 绕位怪(绕行者/石像卫):每 2 回合移动到 左/右/背后 之一(脚步 pan 报位),攻击前摇随其方位(tel 派生 pan 变体);`btl_behind` 在背后挨刀时播(归因真话)。
|
||||
- Boss(石甲蟹/腐沼蟒/窟中之王):绕位+高血,半血播 `btl_half_*` + ATK+1(王二阶段)。Boss 战长按逃跑拒绝(`btl_flee_boss`)。
|
||||
- 格挡判定与 rpg 一致绑双击(规避 tap 300ms 延迟);窗口外双击=error 震不生效。
|
||||
|
||||
### 7.3 逃跑
|
||||
|
||||
长按 = 尝试逃跑:普通怪/绕位怪**必成**(无 RNG,P4 友好),撤退挨一下(掉血=怪 ATK,真实账目),落回探索态、怪留在原格;拉开距离后脚步声自然远去。Boss 拒绝。逃跑无次数限制(容错拉满,代价=掉血+丢进攻回合)。
|
||||
|
||||
### 7.4 掉落与元进度
|
||||
|
||||
- 战斗胜利:金币入账 + `btl_loot_1..3`(按单场所得 3 档)+ 概率掉药水/装备(§6.2 宝物表为拾取点,怪掉落仅金币)。
|
||||
- 每击杀 4 只 atkLv+1,播 `btl_lvup`("这层我变强了"的即时成长,P2 钩子)。
|
||||
- **元进度(遗产)**:金币永续累计(meta.gold),死亡/通关结算入账,不清档。5 项解锁(下一局开场自动生效+播报):
|
||||
|
||||
| 遗产 | 价格(金币) | 效果 |
|
||||
|---|---|---|
|
||||
| unlock_potion 行囊药 | 90 | 开局自带 1 瓶腰带药 |
|
||||
| unlock_vigor 体魄 | 150 | 起始 maxHp 20→26 |
|
||||
| unlock_veil 护符 | 220 | 每层首次受击减半 |
|
||||
| unlock_echo 回声强化 | 300 | 侧向回声加报距离档(墙闷/开口各 2 档→按远近换 2 组资产音量) |
|
||||
| unlock_blade 武器 | 450 | 开局自带短刃(atk+1) |
|
||||
|
||||
- 经济核算:一局 40-120 金(怪 3-15/只 + 堆 10-30 + 窟主 50-80)→ 约 2-5 局解锁一项,死亡有可见成长(P2「下周目你会更强」)。
|
||||
|
||||
## 8. 数值表
|
||||
|
||||
### 8.1 玩家与敌人
|
||||
|
||||
```
|
||||
maxHp = 20 (+vigor 6);atk = 2 + atkLv(0..4, 每4杀+1) + 武器(0..2)
|
||||
dmg = max(0, atk - 敌def) ;敌打你 = max(0, 敌atk - 甲) × 格挡系数(0.2/1.0)
|
||||
格挡钳制:擦伤 min 0;L1-2 怪 ATK 0-1 → 学期零惩罚
|
||||
```
|
||||
|
||||
| 敌型 | 层 | HP | ATK | 行为 | 脚步音色类 | 掉金币 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 盲眼蝠 | 1 | 4 | 0 | 缠斗 | small | 3 |
|
||||
| 窟鼠 | 2 | 6 | 1 | 缠斗 | small | 5 |
|
||||
| 蘑菇怪 | 3 | 8 | 2 | 缠斗 | bug | 8 |
|
||||
| 窟主·石甲蟹 | 3 | 20 | 3 | Boss 绕位 | heavy | 50 |
|
||||
| 绕行者 | 4 | 10 | 2 | 绕位 | bug | 10 |
|
||||
| 洞蛛 | 5 | 12 | 3 | 缠斗 | bug | 12 |
|
||||
| 窟主·腐沼蟒 | 6 | 26 | 4 | Boss 绕位 | heavy | 80 |
|
||||
| 石像卫 | 7 | 16 | 4 | 绕位 | heavy | 15 |
|
||||
| 窟中之王 | 7 | 36 | 5→6 | Boss 绕位 | heavy | 通关 |
|
||||
|
||||
装备(拾取即自动装备,仅播报不管理):短刃 atk+1(L3 起)、阔刃 atk+2(L6 起)、皮甲 敌伤-1(L4 起)。药水:腰带限 1 瓶,HP≤25% 自动喝(回 40% maxHp,向上取整)。
|
||||
|
||||
平衡校验:L1 atk2 打蝠 2 刀;L3 atk3+短刃=4 打蟹 5 刀、蟹打裸装 3/下 vs 20HP+药 → 不格挡危险、会格挡稳过;L7 atk2+3+2=7 打王 6 刀、王打 5-6/下 vs 26HP → 必须格挡+药,Boss 战有真实技巧收益。
|
||||
|
||||
## 9. 音频三层
|
||||
|
||||
### 9.1 BGM(4 首,Mureka,-20 LUFS,ogg+m4a,无缝循环)
|
||||
|
||||
| id | 状态映射 | Mureka prompt(英文) |
|
||||
|---|---|---|
|
||||
| bgm/menu | TITLE / MENU / SETTLE(结算 volume 0.5) | "Dark cavern ambient pad, deep sub drone with distant water drips, calm and mysterious, no drums, no vocals, seamless loop" |
|
||||
| bgm/explore | DRILL / EXPLORE / DESCEND | "Dark cave exploration ambient, low ominous drone, sparse echoing sonar-like pings, slow dripping rhythm, tense but calm, no vocals, seamless loop" |
|
||||
| bgm/battle | BATTLE 普通怪 | "Tense dungeon battle music, pounding tribal drums 95 bpm, dissonant low stabs, claustrophobic urgency, no vocals, seamless loop" |
|
||||
| bgm/boss | BATTLE 窟主/终 Boss | "Epic dark cavern boss theme, heavy drums 115 bpm, low brass swells, rising dread, no vocals, seamless loop" |
|
||||
|
||||
切换全部走引擎 crossfade;语音 duck 20% 引擎自动。danger 不切 BGM(guide danger earcon + heartbeat 震 + st_hp_4 承担)。
|
||||
|
||||
### 9.2 SFX(~34 个;SA3=Stable Audio 3,SYN=程序合成;全部双格式、真峰值 ≤-3dBFS)
|
||||
|
||||
| 类别 | id | 方式 | prompt 草稿 / 说明 |
|
||||
|---|---|---|---|
|
||||
| 脉冲 | `pulse` | SYN | 180→60Hz 正弦扫频+噪声瞬态,0.15s,中频突出 |
|
||||
| 正前回声 | `echo_1..4` | SA3 | "close stone wall echo slap-back, bright, short, dry"(2:"mid distance cave echo, moderate tail" 3:"far cave echo, darker longer" 4:"very far cavern echo, long dark tail, huge space") |
|
||||
| 材质尾音 | `mat_stone` `mat_door` `mat_stair` `mat_water` | SYN | 闷石敲/空心木咚/金属当啷/水滴湿滑,各 0.2-0.25s |
|
||||
| 侧向回声 | `side_wall_l/r` `side_open_l/r` | SYN | 立体声文件:能量只在 L 或 R 声道;闷哒 vs 空旷回灵(SA3 不达标时程序写 L/R 通道兜底) |
|
||||
| 移动 | `step_own` `step_turn` `bump` | SYN | 单步/拖步转身/撞墙闷响 |
|
||||
| 拾取 | `coin` `potion` `gear` | SYN | 金币叮当/喝药咕咚/换装金属轻响 |
|
||||
| 转层 | `stairs_down` | SA3 | "descending old metal stairs, deep cavern reverb" |
|
||||
| 怪物脚步 | `mob_step_small_l/c/r` `mob_step_bug_l/c/r` `mob_step_heavy_l/c/r` | SA3 ×3 + ffmpeg pan 派生 ×6 | "small beast skittering steps, dry";"insect chitin crawling clicks";"heavy armored thudding steps"——各生成 1 条单声道,派生左/中/右三份 |
|
||||
| 攻击前摇 | `tel_small` `tel_bug` `tel_heavy`(+派生 l/r) | SA3 | 小怪扑击嘶声/虫肢节摩擦/重怪蓄力重踏低吼 |
|
||||
| 战斗 | `atk_swing` `atk_hit` `parry` `hurt` `enemy_die` | SYN/SA3 | 挥拳风声(SYN)/击中甲壳钝响/格挡亮叮(SYN)/受击闷击(SYN)/倒地(SA3) |
|
||||
| 升档 | `levelup` | SYN | 上行钟声琶音(内容音,允许) |
|
||||
|
||||
monsters 脚步 pan 派生工艺:`ffmpeg -i in.ogg -af "stereotools=mlev=0.7:sbal=-.8" out_l.ogg` 等三向派生,省 SA3 任务数(SA3 实际 ~14 个)。
|
||||
|
||||
### 9.3 voice
|
||||
|
||||
125 句 ×2 性别(Serena / Uncle_Fu),无 NPC(怪物不说话,遭遇靠 `btl_start_*` 报名)。分组、台词、触发全表见 [16-dungeon-voice-ids.md](16-dungeon-voice-ids.md)。数字全分档整句(层 7 句、血量 4、金币 4、面朝 4、威胁 4、战利 3、死因 3、元进度 3),无运行时拼接。
|
||||
|
||||
## 10. 向导层接入(engine/guide.js,本作不新增 earcon 词表)
|
||||
|
||||
### 10.1 状态签名(进入状态时播)
|
||||
|
||||
| 状态 | guide.state() | 时点 |
|
||||
|---|---|---|
|
||||
| TITLE / MENU | `menu` | 进标题、开菜单 |
|
||||
| DRILL / EXPLORE / DESCEND | `explore` | 进教学、进探索、下楼完成 |
|
||||
| BATTLE | `battle` | 遭遇即播(与 btl_start_* 同点) |
|
||||
| SETTLE | `settle` | 死亡/通关结算进入 |
|
||||
| danger | `danger` | 血量首次 ≤25%(每层 1 次)+ Boss 半血 |
|
||||
|
||||
choice 签名本作不使用(无抉择态;菜单是 menu)。菜单回绕不播 wrap 句(菜单 ≤4 项,循环成本低,省台词预算)。
|
||||
|
||||
### 10.2 turn cue 与看门狗
|
||||
|
||||
| 等待点 | arm | at | say(full 档;L2 级一律纯 nudge,绝不逐字重播) |
|
||||
|---|---|---|---|
|
||||
| BATTLE 玩家回合(每回合) | guide.turn | — | turn earcon + confirm 震 |
|
||||
| BATTLE 玩家回合无操作 | watchdog | [15s, 30s] | `gd_turn` / null |
|
||||
| EXPLORE 静止 | watchdog | [10s, 25s] | `gd_pulse` / null |
|
||||
| DRILL 每步等待 | watchdog | [8s] | 无语音,纯 nudge(教学句不重播) |
|
||||
|
||||
### 10.3 卡关三级提示(EXPLORE,escape 先例;"无操作时长"计时,任何有效手势重置)
|
||||
|
||||
进展事件=拾取/战斗胜利/踏上楼梯格/击败窟主/下潜。无进展 60/120/180s →:
|
||||
|
||||
| 级 | 内容 | 附带 |
|
||||
|---|---|---|
|
||||
| L1 暗示 | 楼梯未找到 → `stair_hint_a`;窟主未清 → `stair_hint_b` | warning 震 |
|
||||
| L2 明示 | `stair_dir_e/s/w/n`(绝对方位;与上滑面朝句同坐标系,自洽) | warning 震 |
|
||||
| L3 带路 | 进入导航模式:每步播 `nav_e/s/w/n`,抵达播 `nav_done`;此后每 60s 重复直至进展 | warning 震 |
|
||||
|
||||
提示到点遇语音在播 → 入待播队列(escape round2 礼仪),玩家操作即作废未播级别。纠错句 idle-only + 过期丢弃(引擎已实现)。
|
||||
|
||||
## 11. 存档设计
|
||||
|
||||
```json
|
||||
{
|
||||
"schema": 1, "game": "dungeon", "updatedAt": 0,
|
||||
"summary": "第3层 · 伤势不轻 · 金币268 · 遗产2/5",
|
||||
"meta": { "gold": 268, "unlocks": ["potion", "vigor"], "bestFloor": 5, "runs": 7, "kills": 23 },
|
||||
"run": {
|
||||
"seed": 42, "floor": 3, "pos": [5, 2], "face": "E",
|
||||
"hp": 11, "atkLv": 2, "weapon": 1, "armor": 0, "potion": 1,
|
||||
"veilUsedFloor": false, "killsRun": 9, "looted": [], "cleared": [], "parries": 4
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **summary 生成规则**:`第{floor}层 · {血量档名} · 金币{meta.gold} · 遗产{unlocks.length}/5`;死亡后 run=null,summary=`深处归来 · 金币{gold} · 遗产{n}/5`。
|
||||
- 保存时机:拾取/战斗结算/下潜/菜单"保存并回大厅"/死亡结算。localStorage + PUT 服务器(00 文档 §4)。
|
||||
- 读取:有 run → TITLE 播 `sys_continue_ask`,单击继续 → 恢复 `run` + 重放该层 seed 生成 + **局面复述链**(st_floor+st_hp+st_face+st_threat,≤5s 可操作);右滑 = 重掷新周目(run 清空重掷 seed,meta 保留)。无 run 单击 = 新周目(meta.unlocks 生效播报后进 DRILL/EXPLORE)。
|
||||
- 归因真话依据:`parries`(全程格挡数)、lastHit 记录(击杀者类型/是否背刺/是否未格挡)在死亡结算选 `die_cause_*` 与 `die_adv_*`,句必须与真实行为对应。
|
||||
|
||||
## 12. playtest 断言清单(登记 13 号文档新增 §dungeon;mock 机制对齐 web/rpg/test/playtest.mjs)
|
||||
|
||||
**关键路径**(seed=42,首周目 L1→L3 窟主,≤260 手势):
|
||||
1. 启动 → TITLE(无存档)→ 单击 → DRILL:D0..D9 逐步断言 voice 序(tut_d0→…→tut_done)与 drillStep 递进;D1 断言 pulse 与 echo 播出;D4 长按断言 pos 前进 ≥2;D8 乱按/不格挡断言 HP 不降(教学怪 ATK=0);下滑跳过教学路径断言(二周目不再进 DRILL)。
|
||||
2. **seed 复现**:`opts.seed=42` 两次构造 → `_floor.grid`、楼梯/怪物/宝物坐标逐格相等;L1 尺寸 ===7;起点安全区(怪 BFS 距离 ≥3)。
|
||||
3. **脉冲回声信息正确**:起点面朝 'N',按 grid 计算正前墙距 → 断言 echo_N 于脉冲后对应延迟±50ms 播出、volume 档正确、材质尾音 id 正确;左右侧向 side_* id 与 grid 一致;遍历 seed=42 的 L1 全网格 ×3 面向抽查 ≥30 组(回声编码 === grid 真值);**双击重发**断言资源零消耗且回声 id 与上次一致(未移动时)。
|
||||
4. 拾取:走到金币格 → coin 音 + meta.gold 增加且 st_gold 档位相应跳档;药水满腰带 → evt_potion_full 且药留在原地。
|
||||
5. 战斗路径(L2 窟鼠):进入 BATTLE → 回合流转(玩家回合 turn→敌前摇→结算循环);前摇内双击 → 敌伤 ×0.2(HP 差值断言);窗口外双击 → error 震、全额伤;长按逃跑 → 必成且 HP 真实减 ATK、怪留原格;击杀 → loot 档句 + meta.gold 入账。
|
||||
6. 下潜:踏上楼梯格 → sys 提示句 → 单击 → DESCEND → floor=2 且 grid 由 floorSeed 重生成(再断言复现)。
|
||||
7. **死亡与元进度**:L3 窟主战挂机至死 → 归因链序 `die_intro → die_cause_*(与 lastHit 真实来源一致,Boss 重击 → die_cause_2)→ die_adv_*(按 parries=0 → die_adv_1)→ st_floor_3`;断言 meta.gold = 死亡前+本局所得、`bestFloor` 更新;单击 → TITLE → 新周目 seed≠42、meta.unlocks 按金币阈值播 unlock_* 且起始 maxHp 生效(vigor)。
|
||||
8. 菜单/帮助:探索下滑 → 模态菜单(单击循环播项名、双击确认、上滑=help、下滑=关闭);"保存并回大厅" → PUT 断言 data.summary 命中生成规则。
|
||||
9. **中断复述**:存档重进 → sys_continue_ask → 单击继续 → 落在存档点 → 自动局面复述链(st_floor→st_hp→st_face→st_threat 顺序断言);上滑同链可重放。
|
||||
|
||||
**边界断言**:
|
||||
- 学习期零惩罚:L1 全怪 ATK===0、L2 ≤1(读表断言);L1 全程乱按 HP 不变。
|
||||
- 撞墙:长按顶墙 → bump + pos 不变 + HP 不变。
|
||||
- 方位自洽:任意格转身后重脉冲 → 左右 side_* 与 grid 随面朝交换;身后方向从不产生回声资产。
|
||||
- 怪物脚步:怪每步播 mob_step_<class>_<pan>,pan/音量档与相对方位、距离一致(含背后=中央减半口径)。
|
||||
- 绕位怪背刺:未转身挨打 → 全额伤 + `btl_behind`;转身后格挡 → ×0.2。
|
||||
- 缠斗怪左右滑 → `btl_no_turn`(每场 1 次)+ error 震。
|
||||
- 自动喝药:HP≤25% 且有药 → HP 回升档 + potion 音;无药时不播不炸。
|
||||
- 卡关三级:无操作快进 60/120/180s → stair_hint_* → stair_dir_* → nav_* 链;任意进展事件后重置分级;提示在语音在播时排队不顶句。
|
||||
- 看门狗:探索 10s/25s、战斗回合 15s/30s 逐级触发且第 2 级纯 nudge 无语音。
|
||||
- 脉冲冷却 1.2s:冷却期单击/双击 → error 震、无 echo。
|
||||
- 屏蔽任意 voice 资产:流程不卡死(看门狗兜底推进)。
|
||||
- guide=off:全静、零定时器(全局既定契约)。
|
||||
- 资产齐套:voice 双性别目录 id 集合一致、sfx/bgm 双格式(assetExists 口径)。
|
||||
|
||||
**失败即不通过**:死亡归因句与真实死因不符(归因假话);同 seed 两次生成不一致;教学怪造成 HP 损失;双击重发扣资源;回声编码与 grid 矛盾。
|
||||
|
||||
## 13. 节奏曲线与单局核算
|
||||
|
||||
- 每层节奏:进层签名句(5s) → 探索(脉冲-移动循环,2-3 分钟)→ 1-3 场战斗(每场 40-60s,窟主 90s)→ 拾取 1-3 处 → 楼梯。每 30-60s 一个奖励点(金币/击杀升档/装备),满足方法论 L5。
|
||||
- 满通 24.0 分钟(§6.2 累计列);普通玩家死于 L4-6 → 单局约 14-19 分钟;二周目起(遗产加持)更深。首局若速死(L2-3,~8 分钟)由元进度钩子拉重开——roguelike 死亡结算 ≤15s 且必带「下周目更强」,重开入口单击 ≤2s(A4/L5)。
|
||||
- 无任何倒计时(P4);高手速度感=长按连走+免听完整回声直走(P2),脉冲冷却不限制移动。
|
||||
|
||||
## 14. 自检清单
|
||||
|
||||
| # | 硬约束 | 自检 |
|
||||
|---|---|---|
|
||||
| 1 | FTUE 首输入 <60s | D1 首次脉冲 ≈t+15s ✓(§5) |
|
||||
| 2 | 首个正反馈 ≤3min | D8 教学战胜利 ≈t+2min;L1 首金币 ≈t+2.5min ✓ |
|
||||
| 3 | 学习期零惩罚 | L1 怪 ATK=0、L2 ≤1,学期内死亡不可能;撞墙无伤;格挡失败无额外惩罚 ✓ |
|
||||
| 4 | 失败三问归因 + 真话律 | 死亡链 die_cause_*/die_adv_* 按 lastHit 与 parries 真实选择;挥空/背刺/逃跑挨打均有真话句 ✓(§12 失败即不通过项锁定) |
|
||||
| 5 | 手势宪法三件套不豁免 | 上滑=状态、下滑=菜单、双击=重听(重发脉冲) 全状态保留 ✓;移动/脉冲偏离已登记 E1-E4 且教学讲清 ✓ |
|
||||
| 6 | 向导层 | 签名 5 态(不新增 earcon);turn cue 每回合;看门狗 [10/25][15/30]s 第 2 级纯 nudge;卡关 60/120/180 三级不报答案(带路只给方向);纠错 idle-only ✓(§10) |
|
||||
| 7 | 方法论反模式 | 提示永不逐字重播(L2 级纯音频);成功后只给新短句肯定;单次播报 ≤3 选项(菜单逐项);并发声流 ≤2(频带分离+冷却);语义靠语音、earcon 用引擎统一词表 ✓ |
|
||||
| 8 | 方位降维 ≤4 | 回声前/左/右(身后不报);战斗面前/左/右/背后;无连续角度 ✓ |
|
||||
| 9 | 台词规范 | 一句一文件整句;全部 ≤25 字(<40 上限);数字全分档整句;"重听"写"重新听"、"重发"写"再发一次";同游戏同 instruct 常量;无语速词 ✓(voice-ids 注记) |
|
||||
| 10 | P1 视障评委 | 双击免费重发脉冲;status key 全状态可用;方位/威胁模板句固定;归因真话;可打断/长按快进/2.2 档语速引擎既有;绝不当白痴(不简化深度:绕位/Boss/元进度保留)✓ |
|
||||
| 11 | P3 通勤 | 单手免视全手势可达;上滑一句话复述局面(层/血量/面朝/威胁);任意时刻菜单存档退出;死亡不清 meta ✓ |
|
||||
| 12 | P4 工人 | 教学逐字跟练+失败 2 次自动过;容错高(ATK0 怪/自动喝药/必成逃跑);无倒计时;零新手势(复用 swipe/tap/longpress)✓ |
|
||||
| 13 | P2 大学生 | 元进度结算「下周目你会更强」;击杀升档+装备即时成长;长按连走速度感;死亡重开入口 ≤2s ✓ |
|
||||
| 14 | seed 可复现 | floorSeed 派生公式 + opts.seed 注入 + 复现断言(§6.1/§12.2),与 playtest 种子 PRNG/强制队列/虚拟时钟机制兼容 ✓ |
|
||||
| 15 | 三套信息自洽 | 单源 grid 查询;回声=静态地形/脚步=动态怪物/播报=绝对面朝,模板句固定,语义域零重叠 ✓(§3.2) |
|
||||
| 16 | 引擎能力边界 | 无实时 pan(预 pan 资产);无引擎外节点(setTimeout+volume 调度);tap 300ms 延迟规避(格挡绑双击);30MB 预算内 ✓ |
|
||||
|
||||
---
|
||||
|
||||
## 实现核对(测试 agent,2026-09-02)
|
||||
|
||||
> 测试载体:`web/dungeon/test/playtest.mjs`(mock 层+虚拟时钟照 `web/rpg/test/playtest.mjs`,
|
||||
> 1277 断言全绿,`tools/node/bin/node web/dungeon/test/playtest.mjs` 退出码 0);
|
||||
> 会话剧本 `web/harness/sessions/dungeon.mjs`(`session` 主线弧线 + `sessionStress` 乱按压力,
|
||||
> 经 `web/harness/transcribe.mjs dungeon [--session sessionStress]` 跑通,全程零资产缺失、零死锁)。
|
||||
|
||||
### §12 关键路径
|
||||
|
||||
| # | 断言 | 结果 |
|
||||
|---|---|---|
|
||||
| 1 | 启动→TITLE→DRILL:D0..D9 逐步 voice 序(intro_1/2+tut_d0→…→tut_done)与 drillStep 递进;D1 pulse+echo;D4 长按 pos ≥2;D8 乱按 HP 不降;下滑跳过+二周目不再进 DRILL | ✅(场景 2;D2 错手势重教、D3 连错 2 次自动通过、D8 乱按 80 手势 HP=20 一并覆盖) |
|
||||
| 2 | seed=42 两次构造 grid/怪/宝/楼梯逐格相等;L1 尺寸 7;起点安全区 BFS≥3(教学局非门怪 ≥4) | ✅(场景 1:7 层全查 + 实流 `_floor` 与纯函数一致) |
|
||||
| 3 | 回声编码 === grid 真值:全地板格 ×4 面向扫描(≥30 组),echo_N 延迟/音量、材质尾音 +120ms、侧向 +350ms 预 pan 资产 L/R;双击重发零消耗且编码一致 | ✅(场景 2:104 组合全扫,代表组精确到 0ms;身后不报=恰两路侧向) |
|
||||
| 4 | 拾取:coin 音+meta.gold+金币档跳档(45+堆≥55→st_gold_2);药水满腰带 evt_potion_full 且药留原地 | ✅(场景 4) |
|
||||
| 5 | 战斗:单击命中、缠斗 btl_no_turn 每场 1 次、前摇内双击 ×0.2(钩子 atk=10 → 伤 2)、窗口外/不格挡全额、长按逃跑必成挨一下怪留原格、击杀 loot 档+meta.gold | ✅(场景 5) |
|
||||
| 6 | 下潜:踏上楼梯 sys 提示→单击→DESCEND→floor=2 且 grid 重生成复现 | ✅(场景 2) |
|
||||
| 7 | 死亡与元进度:归因链序+真话、meta.gold 入账、bestFloor/runs、遗产购置播报、新周目 seed 重掷+继承(vigor 26/potion 1) | ✅(场景 6a/6b/6c 三种死因矩阵) |
|
||||
| 8 | 菜单:单击循环/双击确认/上滑帮助/下滑关闭;「保存并回大厅」→ sys_saved → `'../'`;summary 生成规则 | ✅(场景 7 + 场景 2 D7) |
|
||||
| 9 | 中断复述:sys_continue_ask→单击→st_floor→st_hp→st_face→st_threat 有序;上滑同链可重放 | ✅(场景 8) |
|
||||
|
||||
### §12 边界断言
|
||||
|
||||
| 断言 | 结果 |
|
||||
|---|---|
|
||||
| 学习期零惩罚:L1 全怪 ATK=0、L2 ≤1(读 `_battle.atk`);L1 乱按 HP 不变 | ✅ |
|
||||
| 撞墙:bump + pos 不变 + HP 不变 | ✅ |
|
||||
| 方位自洽:转身后重脉冲左右 side 随面朝交换(含全扫描 4 面向) | ✅ |
|
||||
| 怪物脚步:pan/音量档(0.9/0.6/0.35)、背后中央减半(1 格 0.45、6 格 0.175)、>8 格不播、≤2 格 heartbeat | ✅ |
|
||||
| 绕位怪:每 2 回合换位(右→后→左确定性轮换)、脚步报位、背刺 btl_behind+全额、转身追击命中、转身后格挡 ×0.2 | ✅ |
|
||||
| 缠斗怪左右滑 → btl_no_turn(每场 1 次)+ error 震 | ✅ |
|
||||
| 自动喝药:HP≤25% 有药 → 回 40% maxHp(ceil)+ potion 音+档播报;Boss 半血 ATK+1 + btl_half_*;Boss 逃跑拒绝 btl_flee_boss | ✅ |
|
||||
| 卡关三级 60/120/180s:stair_hint_a→stair_dir_*→nav_* + 导航每步播方向 + nav_done;进展重置分级(重置后从 L1 重新触发);语音在播入队不顶句、操作作废、未播级别可重新触发 | ✅(场景 9) |
|
||||
| 看门狗:探索 10s gd_pulse、战斗 15s gd_turn(guide=full);DRILL 8s 纯 nudge 无语音 | ✅(场景 10) |
|
||||
| 脉冲冷却 1.2s:冷却期单击仅 error 震、无第二次回声 | ✅ |
|
||||
| 屏蔽任意 voice:遭遇报名/下潜旁白被屏蔽 → guard 兜底推进不卡死 | ✅(场景 11) |
|
||||
| guide=off:30s 空闲零播放、零定时器 | ✅ |
|
||||
| 资产齐套:voice 双性别 125 句集合一致、sfx/bgm 双格式、game.js 静态引用展开全存在、运行期零缺失 | ✅ |
|
||||
| E3:对局期 setRateBoostEnabled(false)(DRILL/EXPLORE/BATTLE/DESCEND)、TITLE/MENU/SETTLE 恢复 true | ✅(rateLog 断言) |
|
||||
| E4:菜单=暂停——探索游走冻结、战斗前摇剩余窗口冻结、恢复恰结算一次(无重复回合) | ✅(场景 7;前摇内下滑原本不可达,见 bug ⑧) |
|
||||
|
||||
**§12 失败即不通过项**:死亡归因真话(cause/adv 与 `_deathInfo.lastHit` 一致,三种死因矩阵验证)、同 seed 两次生成一致、教学怪零伤害、双击重发零消耗、回声编码与 grid 一致——全部锁定 ✅。
|
||||
|
||||
### 与设计文档的偏差(记录不大改)
|
||||
|
||||
1. **归因句粒度**:台词表死因仅 3 档(小怪拖垮/Boss 重击/背刺),无「指认具体怪 A」整句资产;真话律落地为 `_deathInfo.lastHit.type` 与 cause 档位一致(playtest 断言 `lastHit.type==='crab'/'rat'/behind` ↔ die_cause_2/1/3)。资产表内不存在更细句子,不算偏差。
|
||||
2. **战斗上滑第 2 段**:§2.2「敌方血量档」以 `btl_half_*`(半血阶段句)近似——台词表无 foe_hp_* 分档资产。
|
||||
3. **§5 D4「撞墙也算过」**:实现额外把 D4 自动面向东侧 2 格走道+边界,保证 ≥2 格可达成(生成约束注释已写明)。
|
||||
4. **L1 安全区**:非门怪 BFS≥4(严于规格 ≥3),避免 D4/D8 演练路径撞上第二只怪,注释已写明。
|
||||
5. **die_adv 兜底**:挡过且跑过(parries>0 && flees>0)死于非背刺 → die_adv_1(建议句非过去事实句,规格未覆盖该象限,取最无风险句)。
|
||||
6. **格挡成功播 `btl_parried`**:规格表 B 组 trigger=「格挡成功(减伤 80%)」,原实现该资产死引用,已接线(见 bug ②)。
|
||||
|
||||
### 修过的 bug(web/dungeon/game.js)
|
||||
|
||||
1. **归因真话律**:`run.parries++` 原在双击瞬间计(背对双击也计),歪曲 die_adv 选句依据——改为仅结算判成「面对且格挡成功」时计数。
|
||||
2. **`voice/btl_parried` 死资产**:格挡成功(减伤 80%)从不播报——接线进 `_enemyResolve` 反馈链。
|
||||
3. **卡关提示「未播级别计入 shown」**:入待播队列即标已提示,被玩家操作作废后该级永不重触发(违反 §10.3/escape round2 礼仪)——改为真正播出才计入,另加待播去重。
|
||||
4. **终局层 L3 带路死路**:`_navRouteVoices`/`_navSpeakStep` 只查 `stairs`,L7 无楼梯致导航哑火——回退 `stairs || throne`(与 L2 明示同口径)。
|
||||
5. **SETTLE 双击=重听结算链**:原只重播 `settle_again` 尾句——存 `_settleChain` 整链重放(§2.3)。
|
||||
6. **DRILL D1 无看门狗**:`_drillEnter(1)` 无分支——补 `_drillWatchdog(1)`(§10.2 教学每步 [8s])。
|
||||
7. **DRILL D8 上滑=做错**:§4.3 状态键「教学后可用」(D7 已教)——D8 补 up→状态链。
|
||||
8. **E4 豁免半实现**:战斗前摇(telegraph)内下滑走 error 分支、菜单打不开,`_menuPause` 冻结机制不可达——前摇内补 `down→_openMenu()`,战斗任意时刻可暂停。
|
||||
|
||||
### 遗留 TODO
|
||||
|
||||
- 教学期 L1 游走静默:DRILL 内非教学怪不游走(`_startMobs` 仅 EXPLORE 调用),设计未明确,维持现状(D9 后下潜即恢复)。
|
||||
- 木门/水材质(mat_door/mat_water):生成器不产出,资产与编码路径已备(`_echoScan` 注释),待未来层型。
|
||||
- `meta.runs` 不统计 TITLE 右滑放弃的周目(仅死亡/通关计入);规格未明确。
|
||||
- 会话剧本主线弧在随机图极小概率把窟主打死(玩家成长超预期时)——剧本有「没死就继续走」兜底分支,不影响零死锁承诺。
|
||||
|
||||
### R2 修复回归(2026-09-02,D0-1..D0-3 + D1-1..D1-6 结构修复轮)
|
||||
|
||||
> 证据源:research/new8/dungeon/round1/(synthesis + live-player + p1-blind)。本轮只修结构不加新内容;
|
||||
> 引擎侧按产品裁定允许改动(web/engine/audio.js、gesture.js)。回归:8 套 playtest + guide.test 全绿
|
||||
> (dungeon 1277→**1610** 断言;escape 140 / radio 221 / rhythm 141 / rpg 188 / simon 132 / space 155 /
|
||||
> storyline 82 / guide 122,0 失败,radio 在并行修复中仍全绿)。
|
||||
|
||||
#### D0-1 语音抢占死循环(P0)
|
||||
|
||||
- **根因(引擎级竞态,非 DRILL 泄漏本身)**:`WebAudioEngine._playVoice` 的「顶掉当前对白」检查在
|
||||
`await this._load(id)` **之前**,而 `this._voice = token` 在其后无条件赋值——同一 tick 双调度语音
|
||||
(教学 D1:反馈句 `tut_echo_come` 裸 `_speak` + `_drillPass` 立即 `_speakGuarded` 下一句指令)在加载
|
||||
竞速后,输家的 token 被静默顶号:**ScriptProcessorNode 永远无人 disconnect(僵尸节点空转抽 buffer)**,
|
||||
其 endTimer 亦因 `_finishVoice` 的 token 校验提前 return 而永不清理。R1 live 证据完全吻合:t=130.2s
|
||||
D1 首脉冲后 tut_echo_come 僵尸节点持续抽读,探针按「voice buffer 被抽读」记段 → 71 分钟 35,745 次
|
||||
「播放」99.7% 被「掐死」、nav_n↔tut_echo_come 互掐 33,297 次;跳教学二周目 0 抢占(无 D1 双调度)。
|
||||
- **修**:① `audio.js _playVoice` 在 await 之后、赋值之前补杀当前 token(顶掉语义在加载完成后复核,
|
||||
后到者胜、败者必被杀);② 游戏 D1/D6 反馈句并入 `_speakGuarded` 推进链(消灭同 tick 双 play 的源头),
|
||||
`_drillDone`/`_drillSkip` 收尾显式 `guide.disarm()`;③ **全线风暴保险丝**(`audio.js play()` voice 入口):
|
||||
同一 voiceId 3s 窗口内被调度 ≥5 次 → 丢弃后续并 console.error(每 id 一次)。
|
||||
- **断言**:`保险丝:同 id 3s 窗口内前 4 次调度放行 / 第 5 次起丢弃 / 其他 id 不受累 / 窗口滑出恢复 /
|
||||
只作用于 voice 层`(真实 WebAudioEngine 单元断言,场景 12A);`D1: 反馈句与下一步指令句串行`(场景 2);
|
||||
`纯探索 60s 零操作语音调度有上界(≤3 句;R1 风暴同期 >2000 句)`(场景 12C)。
|
||||
|
||||
#### D0-2 回声信息真实性(P0)
|
||||
|
||||
- **根因**:① 侧向 `_sideScan` 把「整条侧射线到边界全通」才判开口——房间/走廊地型恒为假 → side_open
|
||||
两局 40+ 脉冲 0 次、能走的方向报墙;② 站在楼梯格上脉冲走射线扫描(楼梯在脚下不在面前)→ mat_stair
|
||||
0 兑现,教学「铁器=楼梯」成谎言(P1 专项:165 脉冲 0 铁器,含站在楼梯上 t+142.2)。
|
||||
- **修**:回声与 grid 单源重接——侧向第一格地板=开口(§3.1「墙=闷/开口=空旷」2 档口径,墙保留射线距离);
|
||||
`_echoScan` 站楼梯格 → 贴身(dist1)铁器回声。
|
||||
- **断言**:场景 2 D9 全扫描(全地板格 × 4 面向真脉冲)truthScan 同步更新;场景 12B **全网格一致性**:
|
||||
seed=42 L1..L7 每格 × 4 面向 `_echoScan`/`_sideScan` 与测试侧独立真值逐格相等(≥200 格)+
|
||||
`全网格存在侧向开口(R1 全程 0 次 → 现扫到 N 格次)` + 各层站楼梯=贴身铁器。转写复核:主线局
|
||||
mat_stair/side_open 均稳定出现。
|
||||
|
||||
#### D0-3 探索内容真空(P0)
|
||||
|
||||
- **① 密度下限**:`_fillMainPathDensity`——start→楼梯(终局=王座)最短路(BFS 距离梯度回溯,确定性)
|
||||
每 ≤12 格必有内容遭遇,超限段中点补本层已有普通怪型(不加新怪种,≤8 只,安全区口径不变)。
|
||||
断言:场景 1 各层 `主路径内容密度(最长真空 ≤12 格)` + 构成 ⊇ 规格表。
|
||||
- **② 探索呼吸层**:新 SYN 资产 `sfx/amb_cave`(gen_sfx.py:45-320Hz 带通空气声 + 4 整周期/10s 呼吸
|
||||
LFO + 两粒远处水滴;10s 无缝循环源:去直流、环回交叉淡化、**不首尾淡化**,解码回读 ogg -4.20dBFS /
|
||||
m4a -4.00dBFS、|直流|≤0.001、循环接缝 -25dB(rel peak);20 文件 ×2 格式全过 QC)。接线:EXPLORE 静默
|
||||
≥20s(无手势无人声)播 amb_cave(volume 0.35,20s 节奏不连播)。guide=off 契约不变(环境垫属内容层,
|
||||
场景 4 的零播放断言已按此口径更新并加 amb 专项断言)。
|
||||
- **③ 下潜演出**:游戏代码本身完好(playtest 场景 2 一直断言 stairs_down→evt_descend→st_floor_N 通过);
|
||||
R1 转写零演出为**剧本伪影**:(a) navigate 按 1 格/按建模,但 harness `waitVirtual(120)` 在虚拟时钟会
|
||||
越过 +500ms 步进计时器(advance 至少推进到下一到期定时器)致每按多走 1+ 格、永远踩不准楼梯格;
|
||||
(b) D9 用 `pulse:false` 违反「玩家靠耳朵」红线且无到站重试。修:navigate 立即松开(恰 1 格)+ `until:
|
||||
'stairs'` 到站口径 + 逐层验证的下潜循环(tapDescend 只在真踩楼梯时出手,DRILL D9 同样受理)。
|
||||
复核:主线转写两次运行弧线完全一致(两次下潜全套演出:stairs_down→evt_descend→st_floor_N)。
|
||||
- **④ 卡关计时器**:计时与分级 R1 live 已证完好(64s/120s/180s 准时);转写 350s 未触发系剧本持续手势
|
||||
重置 lastAct(§10.3 口径「任何有效手势重置」)+ 上句的导航伪影。断言:场景 12C `卡关 L1 暗示 60s 自然
|
||||
触发(纯探索、无 hook)`。
|
||||
|
||||
#### D1 级修复
|
||||
|
||||
- **D1-1 菜单关闭无回执**:live 复核实为「关了但零反馈,下次下滑又重开」——路由本身无恙。修:`_closeMenu`
|
||||
补状态签名 earcon(回 EXPLORE/DRILL=explore、BATTLE=battle、SETTLE=settle、TITLE=menu)。断言:场景 10
|
||||
`菜单关闭播回程状态签名(menu → explore)`。
|
||||
- **D1-2 D9 看门狗兜底**:`_drillWatchdog9()`(8s nudge、30s 升级播 stair_hint_a——自寻路步必须有救援);
|
||||
D9 每次手势后重挂(onGesture 的 disarm 会清掉它,而 D9 的脉冲/转身不推进步骤)。断言:场景 10 两级触发
|
||||
+ 升级句。
|
||||
- **D1-3 导航指墙 + 蘑菇软封锁**:① 带路改为**最短路第一步方向**(`_navFirstStepDir`:从目标反向 BFS 取
|
||||
梯度下降邻格),逐步校正;同向 ≥1.5s 才提醒(改向必播)——既不指墙也不撞全线保险丝(导航句同 id 连发
|
||||
会计熔断)。断言:场景 9 `带路方向与 grid 最短路一致 + 第一步必可通行 + 节流单测(同向连呼 3 次只播 1)`。
|
||||
② 蘑菇/所有游走怪**相邻即扑击接战**(`_mobStep` 移动后与玩家正交相邻 → `_encounter`),杜绝 R1 L3
|
||||
「贴身绕圈、堵格不开战」35 分钟软封锁。断言:场景 12C 相邻怪必然开战。
|
||||
- **D1-4 战斗结束 BGM**:教学战胜利/逃跑回 DRILL 的两条路径原先不切回 bgm/explore(只有菜单关闭路径恢复
|
||||
——R1 转写 t=35.8 起战斗鼓点泡全程的组成因素之一)。两条路径补 `bgm/explore` 淡入。断言:场景 5 胜利/
|
||||
逃跑后 `lastBgmEntry === bgm/explore`。
|
||||
- **D1-5 金币档**:SETTLE(`_die`/`_settleWin`)原用 run 金币自设阈值(<20/<60),TITLE 用
|
||||
`_goldBand(meta.gold)`(<50/≤200/≤600)——同一句 id 两套口径(live:SETTLE meta_gold_3 vs TITLE
|
||||
meta_gold_2)。统一为同一分档函数同一账本(遗产购置后的 meta.gold)。断言:场景 6a `SETTLE 金币档 =
|
||||
_goldBand(meta.gold)`。
|
||||
- **D1-6 三件**:① 长按 boost 闪跳——E3 豁免期快进本就不生效,但 gesture.js 仍外发
|
||||
`soundgame:longpress(+end)` 窗口事件(仪器记为 boost on→off 闪跳):`setRateBoostEnabled` 现同步经
|
||||
`setLongpressBoostEventsEnabled` 抑制窗口事件(游戏手势回调不受影响)。② D7「菜单被系统自动收」经 live
|
||||
事件流复核为风暴伪影(菜单开场链 sys_menu→首项名被僵尸节点反复重放,被听成自动执行 sys_menu_resume)
|
||||
——D0-1 修复即愈,无额外代码;playtest 场景 2 已有「菜单保持打开直到玩家下滑关闭」断言。③ 战斗回合
|
||||
15s 无操作播合成回执 `sfx/turn_tick`(880Hz 木鱼族,gen_sfx.py,-3.87dBFS)——standard 档无 gd_turn
|
||||
语音也有「还到你」的确认。断言:场景 10 turn_tick + 引擎豁免事件抑制(rateLog 既有断言不受影响)。
|
||||
|
||||
#### 伪影修正(web/harness/sessions/dungeon.mjs)
|
||||
|
||||
- 「元进度不兑现」关案依据 + 三处剧本脱轨根因:① `waitVirtual(120)` 虚拟时钟越表多走(见 D0-3③);
|
||||
② tapDescend 不受理 DRILL(D9 最后一击点不响);③ 单发 navigate+tapDescend 无重试,任何被怪打断即脱轨
|
||||
——逐层验证下潜循环修复。另修 navigate 中「走位途中被扑→长按按到战斗里=瞬间逃跑」(R1 live btl_flee×9
|
||||
的剧本同款)。复核:主线转写 2 次弧线逐句一致(含归因链与金币档);压力转写 2 次均零死锁走到死亡-重开。
|
||||
|
||||
#### R2 新增/变更断言口径登记
|
||||
|
||||
- 场景 1:怪物构成由「逐字相等」放宽为「⊇ 规格表 + 补怪限本层怪种 ≤8」(密度下限所需)。
|
||||
- 场景 4:`guide=off 30s 零播放`改为「零语音/零向导播放,唯 amb_cave 按呼吸层口径除外」(内容层 vs
|
||||
向导层切分)+ 呼吸层节奏/重置断言。
|
||||
- 场景 9:L3 带路从「整段先东西后南北 + 每步必播」改为「最短路首步 + 改向必播/同向 1.5s 节流」
|
||||
(§10.3 L3 口径的听感与保险丝友好修订)。
|
||||
- 台词/资产表:无新增 voice;新增 sfx `amb_cave`、`turn_tick`(SYN,双格式,QC 数字见上)。
|
||||
@@ -0,0 +1,85 @@
|
||||
# 新 8 款纯音频 RPG 开发计划(Program Charter)
|
||||
|
||||
> 状态:进行中 | 启动:2026-09-01 | 上级文档:[HANDOVER](../../HANDOVER.md)、[研究章程](../00-charter.md)
|
||||
> 用户指令:再开发 8 款纯音频 RPG(不限题材);4 款用「声命线」叙事模式,4 款探索其他模式;
|
||||
> 单局 15-30 分钟;每款 ≥6 轮多 agent 迭代;验收用研究章程门槛;节奏 = 2 款一批流水线。
|
||||
|
||||
## 1. 角色与流水线(多 agent 交互迭代)
|
||||
|
||||
制作人(主 agent)统筹以下五个角色,每轮全员过一遍:
|
||||
|
||||
| 角色 | 职责 | 承载 |
|
||||
|---|---|---|
|
||||
| 产品 | 概念定位、验收标准、轮次裁定(P0 必修清单) | 主 agent + 本文档 |
|
||||
| 策划 | 设计文档:状态机/手势映射/台词表(voice-ids)/BGM 映射/难度曲线 | 策划 subagent,产出 `docs/design/2X-*.md` |
|
||||
| 开发 | game.js + gen 脚本 + 资产生成 + 大厅/服务器接入 | 开发 subagent,遵守 `docs/web-engine-api.md` |
|
||||
| 测试 | playtest.mjs 断言 + guide.test + 资产终检 + 语法校验全绿 | 测试 subagent |
|
||||
| 玩家 | live 试玩(真实混音+ASR 判定)+ 4 人设代理评审 + 愿意继续玩投票 | live 管线 + 玩家 subagent ×4 |
|
||||
|
||||
迭代回合协议(每款游戏,round K = 1..6+):
|
||||
|
||||
1. **开发**:K=1 首次实现;K>1 修复上轮 P0/P1 清单。
|
||||
2. **测试**:playtest/guide/资产三绿才可进入玩家评审。
|
||||
3. **玩家·live 试玩**:经 `web/harness/live/control.mjs` 打 ≥2 个会话(主线路 + 随机/乱按压力线),产出 events/transcript/verdicts。
|
||||
4. **玩家·人设评审**:P1 视障评委 / P2 大学生 / P3 白领通勤 / P4 工人(人设卡见 [personas](../04-playtests/personas.md))各写一份评审(格式同研究项目:状态感知 x/5、下一步明确性 x/5、愿意继续玩、P0 问题、建议 ≤3)。
|
||||
5. **产品·synthesis**:汇总 P0(必修)/P1(尽量修)/P2/P3,裁定进入下一轮的修复清单;记录于 `roundK/synthesis.md`。
|
||||
|
||||
**批次验收门**(连续 2 轮达成才算过):每款游戏 ≥6 轮; charter 门槛 = ≥3/4 人设愿意继续玩 且无 P0 级状态混淆(不知道在哪/该做什么/为何失败)。
|
||||
|
||||
## 2. 8 款游戏概念(产品定稿 v1)
|
||||
|
||||
命名规范:slug = 目录名(`web/<slug>/`);设计文档 `docs/design/15..22-<slug>.md`;
|
||||
迭代记录 `research/new8/<slug>/roundK/`。
|
||||
|
||||
### 叙事模式 4 款(声命线范式:章节推进 + 左右滑抉择 + 多结局;全部「声音即世界」题材)
|
||||
|
||||
| # | 代号/slug | 题材 | 一句话 | 模式要点 |
|
||||
|---|---|---|---|---|
|
||||
| N1 | 不眠频率 `radio` | 深夜电台热线 | 你是午夜档接线主播,一晚五个来电,每通电话的命运由你接话的方式改变 | 电话音质叙事;跨来电的「夜班状态」影响结局;4 结局 |
|
||||
| N2 | 深海回音 `abyss` | 深海救援 | 你是深潜救援员,声呐里是被困潜艇的船员;氧气在倒数,每次下潜都是抉择 | 声呐/通讯双通道;氧气=全局压力计时;船员生死分支;4 结局 |
|
||||
| N3 | 暗码 `cipher` | 1940 密战 | 你是双重间谍报务员,截获的每封密电都要你决定「怎么译、报不报」 | 电文解码小局嵌叙事;身份暴露度=隐藏资源;4 结局 |
|
||||
| N4 | 守塔人 `keeper` | 孤岛灯塔 | 风暴夜,无线电里逐渐靠近的求救声,牵出灯塔家族三代秘密 | 单一夜晚时间轴;回忆插叙(音色区分);3-4 结局 |
|
||||
|
||||
### 其他模式 4 款(玩法核心各不相同,全部角色扮演)
|
||||
|
||||
| # | 代号/slug | 模式 | 一句话 | 模式要点 |
|
||||
|---|---|---|---|---|
|
||||
| X1 | 回声地窟 `dungeon` | 听声辨位 Roguelike | 单击发声波脉冲听回声「看」地图,听脚步辨怪,逐层下降,死了重来 | 程序生成楼层;回声定位是核心动词;元进度解锁;死亡=新周目 |
|
||||
| X2 | 雨夜专案 `detective` | 本格推理 | 你是专案组探长:问询、比对证词、指证矛盾,锁定真凶 | 证词库+对质机制;声纹/细节辨谎;结案评级 S-C |
|
||||
| X3 | 深夜茶馆 `teahouse` | 经营养成 | 你接手一家深夜茶馆,客人的故事随你泡的茶展开,攒口碑升级店铺 | 多晚连续剧结构;菜单/服务抉择影响客流;店铺成长线 |
|
||||
| X4 | 星环舰长 `bridge` | 舰桥指挥 | 你是巡逻舰舰长:多系统方位音管理 + 危机抉择 + 船员忠诚 | 四象限系统状态(引擎/护盾/扫描/武器);危机事件卡;舰船升级 |
|
||||
|
||||
批次划分(每批 1 叙事 + 1 新模式,两种风险都早暴露):
|
||||
|
||||
- **批次 1**:N1 `radio` + X1 `dungeon`(打样批次,沉淀管线模板)
|
||||
- **批次 2**:N2 `abyss` + X2 `detective`
|
||||
- **批次 3**:N3 `cipher` + X3 `teahouse`
|
||||
- **批次 4**:N4 `keeper` + X4 `bridge`
|
||||
|
||||
## 3. 全局硬约束(策划/开发必读)
|
||||
|
||||
1. 手势宪法:[00-global-ux](../../docs/design/00-global-ux.md);向导层:[14-guide-layer](../../docs/design/14-guide-layer.md)(新台词必须同步其 §6 规范)。
|
||||
2. 引擎 API:[docs/web-engine-api.md](../../docs/web-engine-api.md);新游戏复制 `web/template/` 起步。
|
||||
3. 资产管线:台词先进 `docs/design/2X-*-voice-ids.md`(id+全文+instruct),再进 `tools/gen_voice_dual.py` 台词表;两表必须一致;改资产必跑 `tools/check_all_assets.py`。
|
||||
4. 语音生产:GPU 串行(`flock .gpu.lock`);多音字避坑与 instruct 规范见 [asset-manifest](../../docs/audio/asset-manifest.md);单句 ≤40 字自动拆句。
|
||||
5. BGM:Mureka instrumental $0.03/任务(2 候选),程序预算上限 **$2.00** 整个项目;prompt 用英文 + seamless loop;节奏类必须 `tools/bpm_precise.py` 实测;台账记 `tools/mureka_log.md`。
|
||||
6. 音效:Stable Audio 3(需 HF token,环境已就绪)+ 程序合成兜底;one-shot 真峰值 ≤-3dBFS;MDCT 过冲坑见 [asset-pipeline](../../docs/asset-pipeline.md)。
|
||||
7. 服务器存档:进度 data 必带 `summary` 字符串;注册/登录/进度 API 见 `web/server/README.md`。
|
||||
8. 试玩测试:playtest 一律 `settings.set({guide:'off'})` 验纯玩法;向导行为断言只住 guide.test.mjs;断言清单先登记 [13-playtest-criteria](../../docs/design/13-playtest-criteria.md) 对应章节。
|
||||
9. 每局 15-30 分钟:叙事款按「一条完整抉择路径 15-25 分钟」设计(分支重玩覆盖其余结局);模式款按「单局/单周目 15-25 分钟」设计。
|
||||
10. 每轮迭代记录齐套:`research/new8/<slug>/roundK/{p1..p4,synthesis}.md` + live 产物目录;synthesis 的 P0 清单必须逐条带入下一轮修复。
|
||||
|
||||
## 4. 批次进度账
|
||||
|
||||
| 批次 | 游戏 | 设计 | 资产 | 开发 | R1..R6 | 验收 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 1 | radio | ☑ | ☑ | ☑ | R1 ☑(5/5 愿意玩,P0=0)→ R2 修复中 | ☐ |
|
||||
| 1 | dungeon | ☑ | ☑ | ☑ | R1 ☑(0/4 拒绝,语音风暴 P0)→ R2 结构修复中 | ☐ |
|
||||
| 2 | abyss | ☐ | ☐ | ☐ | ☐ | ☐ |
|
||||
| 2 | detective | ☐ | ☐ | ☐ | ☐ | ☐ |
|
||||
| 3 | cipher | ☐ | ☐ | ☐ | ☐ | ☐ |
|
||||
| 3 | teahouse | ☐ | ☐ | ☐ | ☐ | ☐ |
|
||||
| 4 | keeper | ☐ | ☐ | ☐ | ☐ | ☐ |
|
||||
| 4 | bridge | ☐ | ☐ | ☐ | ☐ | ☐ |
|
||||
|
||||
> 概念代号在策划阶段可改易读的正式名称;slug 不变。
|
||||
@@ -0,0 +1,84 @@
|
||||
# 批次 1 资产报告:radio《不眠频率》+ dungeon《回声地窟》
|
||||
|
||||
> 音频资产管线 agent 产出 · 2026-09-02 · 覆盖任务书 A(语音)/ B(BGM)/ C(音效)/ D(收尾)。
|
||||
> 总耗时 ≈ **35 分钟**(00:47–01:21,含 2 轮 GPU TTS 串行、8 个 Mureka 任务、全部 QC 与文档)。
|
||||
|
||||
## 1. 语音(TTS,GPU flock 串行)
|
||||
|
||||
| 项 | radio | dungeon |
|
||||
|---|---|---|
|
||||
| 台词句数 | 132(双性别 103 + NPC 平铺 29) | 125(×2 性别,无 NPC) |
|
||||
| 生成文件 | 103×2 + 29 = 235 条 ×2 格式 = 470 文件 | 250 条 ×2 格式 = 500 文件 |
|
||||
| speaker | HOST=Uncle_Fu/Serena,PROD=Dylan/Vivian(VOICE_SPK 逐句覆盖,同性别双音色) | 全表 Uncle_Fu/Serena,单一 instruct 常量 |
|
||||
| `--check` | ALL OK(无时长离群/短句) | ALL OK |
|
||||
|
||||
- 台词表进入 `tools/gen_voice_dual.py`(新增 radio/dungeon),**由一次性提取脚本直接解析两份 voice-ids 设计文档生成**,并做了二次闭环校验(重解析文档 vs 脚本内表格逐字 diff)——台词全文与文档一字不差。
|
||||
- NPC 平铺按 rpg 先例写入 `NPCS["radio"]`(id, speaker, instruct, 台词),staging 走 `<game>/npc/`,convert 落 `web/radio/audio/voice/<id>.*`。
|
||||
- `extract_voice_text.py` 已刷新 `web/harness/voice_text.json`:games=8,radio 132 条、dungeon 125 条。
|
||||
- **文档内矛盾检查**:无重复 id、无超 40 字(汉字口径,与文档自查注记一致;p7/p9 含标点 41/43 字,走章程 §3.4 自动拆句机制,0.12s 句间停顿)。发现一处**文档头部账目笔误**(不影响管线,未改文档):15-radio-voice-ids.md 头注「HOST 21 + PROD 82」与逐行表不符,逐行表实数 HOST 29 + PROD 74(总数 103 一致)。
|
||||
- **radio 电话音质感(资产侧带通,15-radio.md §6.2)**:convert 转码时按来电者逐档 `highpass+lowpass+轻压缩`(老周 500-2800 / 小鹿 400-3400 / 糖糖 450-3000 / 陈姐 420-3100 / 老韩 300-3400 Hz,均 acompressor threshold=-20dB ratio=3 attack=10 release=150);已验证滤波生效(NPC 高频带能量 ≈ 未滤波 HOST 的 1/4,时长与 staging 完全一致);ogg+m4a 双格式均从同一滤波链转出。未滤波原声保留在 `tools/gen_voice_dual_wav/radio/npc/`(不入库)。
|
||||
|
||||
## 2. BGM(Mureka API)
|
||||
|
||||
8 首全部一次成功,无重试;**总花费 $0.24(预算 $0.30 内,台账见 `tools/mureka_log.md` 2026-09-01 节,项目累计 $0.87/$2.00)**。
|
||||
|
||||
| 曲目 | task id | 选用 choice | 候选时长 | 响度目标 |
|
||||
|---|---|---|---|---|
|
||||
| radio onair | 158551062544386 | 158551165370369 | 135.5/201.2s | -20 LUFS |
|
||||
| radio bridge | 158551207313409 | 158551341465604 | 211.2/225.1s | -20 LUFS |
|
||||
| radio menu | 158551383277574 | 158551500914690 | 188.6/222.0s | **-24 LUFS**(menu pad,10 文档 §1.2) |
|
||||
| radio ending | 158551538401281 | 158551630872578 | 202.0/189.2s | -20 LUFS |
|
||||
| dungeon menu | 158551678976001 | 158551817322499 | 162.8/177.8s | -20 LUFS(16-dungeon.md §9.1) |
|
||||
| dungeon explore | 158551855333377 | 158551978868739 | 177.0/209.8s | -20 LUFS |
|
||||
| dungeon battle | 158552010457089 | 158552169709569 | 186.4/225.9s | -20 LUFS |
|
||||
| dungeon boss | 158552209555457 | 158552331321345 | 149.5/202.3s | -20 LUFS |
|
||||
|
||||
- 选用原则:拿不准选时长更接近 90s 的候选(仅 radio ending 选候选 1)。
|
||||
- 后处理(脚本入库 `web/{radio,dungeon}/gen/gen_bgm.sh`,可复现):首个强 onset(silenceremove -35dB)→ 93s 裁剪 → 首尾 3s acrossfade(tri) 无缝循环 → loudnorm(TP=-2/LRA=11)→ 44.1kHz → ogg q3 + m4a 128k。**成品全部 90.00s**,mean -20.4~-24.7dB,循环接缝差值与在库 BGM 同量级。
|
||||
- 无节奏关键曲目,未跑 bpm_precise(dungeon battle/boss 的 bpm 仅为 prompt 特征词)。
|
||||
|
||||
## 3. 音效(SYN 程序合成;SA3 全部跳过)
|
||||
|
||||
- `web/radio/gen/gen_sfx.py`:`ui_confirm ui_menu`(storyline 全局先例同款),2 文件 ×2 格式。
|
||||
- `web/dungeon/gen/gen_sfx.py`:19 文件 ×2 格式 = 17 id(`pulse`、材质尾音 4、**预 pan 立体声 `side_wall_l/r side_open_l/r`**(mono 源 + ffmpeg `pan` 派生,脚本断言极性:能量只在目标声道)、`step_own step_turn bump coin potion gear atk_swing parry hurt levelup`)。
|
||||
- **QC(解码回读法,全部通过)**:逐声道真峰值 ≤ -3dBFS(修复:硬 pan 立体声不能按声道均值测,否则漏检超限;AAC/MDCT 过冲按实测迭代补 volume);|直流| ≤ 0.001(与在库 91 件 sfx 基线一致;修复:源去直流 + 8ms cos² 淡入淡出 + 前后垫 60/120ms 静音 + highpass=f=30 抑制编解码直流再生);无首尾爆豆。最终 42 文件全绿。
|
||||
- 可复现:两个 gen 脚本入库,一键重出全部 ogg+m4a;staging(`web/<game>/gen/staging/`、`tools/bgm_post_wav/`)已加入 .gitignore 不入库。
|
||||
|
||||
## 4. 缺失资产清单(SA3 待 HF token,本轮全部跳过、未尝试生成)
|
||||
|
||||
**radio(13 件)**:`onair_sting phone_ring line_connect line_drop amb_studio amb_rain_city amb_station amb_kid_room arg_muffled amb_street_rain amb_cab brake_screech tape_static`(15-radio.md §5.2;prompt 草稿在表内,token 就绪后按 gen_rpg_sfx.sh 工艺补产)。
|
||||
|
||||
**dungeon(24 文件 = 13 个 SA3 源 + 11 个 pan 派生)**:`echo_1 echo_2 echo_3 echo_4 stairs_down atk_hit enemy_die mob_step_small mob_step_bug mob_step_heavy`(+各 l/c/r 三份派生)`tel_small tel_bug tel_heavy`(+各 l/r 派生)(16-dungeon.md §9.2;mono 源 → `stereotools`/`pan` 派生工艺同表注)。
|
||||
|
||||
**SA3 缺失影响评估**:radio 的 amb/线索音缺失时游戏层按「资产缺失回退路径」静默降级(设计 §9 断言已有屏蔽资产的兜底断言);dungeon 回声/脚步是核心动词,**开发联调前建议先补产 dungeon 的 SA3 条目**(或临时用 SYN 兜底:side_* 已有 SYN 版,echo/mat 可参考 §9.2 降级条款程序合成)。
|
||||
|
||||
## 5. check_all_assets 结果(radio/dungeon 已入 GAMES 列表)
|
||||
|
||||
```
|
||||
| 游戏 | ogg | m4a | 0字节 | 解码失败 | voice male/female id 一致 |
|
||||
| radio | 241 | 241 | 0 | 0 | ✅ 各 103(平铺 29 个角色/NPC 句,豁免) |
|
||||
| dungeon | 273 | 273 | 0 | 0 | ✅ 各 125 |
|
||||
结论:全部通过(8 游戏全绿,exit=0)
|
||||
```
|
||||
|
||||
radio ogg 构成 = 103+103 双性别 + 29 平铺 NPC + 2 sfx + 4 bgm;dungeon = 125+125 + 19 sfx + 4 bgm。
|
||||
|
||||
## 6. 遗留问题 / 待办
|
||||
|
||||
1. **SA3 token**:环境未配置(env.d/sfx.sh 无有效 HF token),radio 13 + dungeon 24 件 sfx 待补产(清单见 §4,prompt 均已在设计文档定稿)。
|
||||
2. **人工试听两处**:① radio NPC 带通句可读性抽检(不可读回退未滤波原声,staging 重转即可,管线已支持);② 多音字风险句(15-radio-voice-ids.md 文末注记:h1_dango「嘶」、k1_lullo、d9_face 等;16b:btl_bat「蝠」、unlock_potion「行囊」)。
|
||||
3. **文档笔误待策划改**:15-radio-voice-ids.md 头注「HOST 21 + PROD 82」应为「HOST 29 + PROD 74」(总数 103 不变,不影响任何资产)。
|
||||
4. radio 无「大姐/姑娘」自称合规、gd_* 两级不同句等台词侧设计约束均已在表内落实,开发接线时按 §7.2 看门狗表取用即可。
|
||||
5. 红线遵守:GPU 全程 flock 串行(radio → dungeon 两轮,无并行);Mureka $0.24 ≤ $0.30 且每笔记账;未改 web/engine/、未写任何 game.js/index.html/test;key 未入任何入库文件(mureka.sh 本就被 gitignore)。
|
||||
|
||||
## 7. 产出物索引
|
||||
|
||||
| 类型 | 路径 |
|
||||
|---|---|
|
||||
| 台词表(入库) | `tools/gen_voice_dual.py`(radio/dungeon 表 + SPEAKERS + VOICE_SPK + NPC_BANDPASS) |
|
||||
| voice 成品 | `web/{radio,dungeon}/audio/voice/{male,female}/`(+ radio 平铺 `voice/<id>.*`) |
|
||||
| bgm 成品 + 脚本 | `web/{radio,dungeon}/audio/bgm/`;`web/{radio,dungeon}/gen/gen_bgm.sh` |
|
||||
| sfx 成品 + 脚本 | `web/{radio,dungeon}/audio/sfx/`;`web/{radio,dungeon}/gen/gen_sfx.py` |
|
||||
| 期望文本映射 | `web/harness/voice_text.json`(games=8) |
|
||||
| 台账/总账 | `tools/mureka_log.md`(2026-09-01 节);`docs/audio/asset-manifest.md`(radio/dungeon 章节) |
|
||||
| staging(不入库) | `tools/gen_voice_dual_wav/{radio,dungeon}/`、`web/<game>/gen/staging/`、`tools/bgm_post_wav/`、`tools/mureka_out/` |
|
||||
@@ -0,0 +1,125 @@
|
||||
# 《回声地窟》全拟真试玩报告 — 老陈(细心的盲盒 Roguelike 老手)+ 急躁压力局
|
||||
|
||||
## 基本信息
|
||||
|
||||
- 身份:老陈,34 岁,Roguelike 玩家,认真跟教学、脉冲探路、爱听完整句旁白;另一局换急性子表弟小飞(1.7x 语速、乱按狂点、菜单开了就乱按)代打压力局。
|
||||
- 设置:
|
||||
- 局 A(新手主线):`voice=male, speed=normal, bgm=normal, guide=full`,两个会话(主会话 + 死亡结算续会话),共约 84 分钟真实时间。
|
||||
- 局 B(急躁压力):`voice=female, speed=1.7, bgm=normal, guide=standard`,三段会话共约 7 分钟乱按。
|
||||
- 手势统计:
|
||||
- 局 A 共 424 次(tap 89 / longpress 261 / 双向 swipes 59 / doubletap 9 / swipeup 9 / swipedown 3,另 1 次 longpressend 被控制台拒收);局 B 共 273 次随机乱按。
|
||||
- 最深层:**第 3 层**(局 A,死于 L3 蘑菇怪之手;L1 教学层 + L2 完整走完)。
|
||||
- 结局:局 A 走完 教学→探索→战斗→下潜→**死亡归因三问→元进度入账→SETTLE→TITLE** 全闭环;局 B 未死亡(HP 1 满血乱按),两次误触「保存并回大厅」退到大厅、一次误启动了别的游戏。
|
||||
- 报错:全程无 fetch 失败、无资产 404、无页面崩溃;但局 A 主会话的语音引擎被一个抢占死循环污染到**全程 35745 次语音播放里 35611 次被掐死(99.7%)**(详见 P0)。
|
||||
|
||||
## 局 A 体验叙述(第一人称,新手主线)
|
||||
|
||||
**0:00–1:20 教学开场,一切正常。** 解锁单击后 TITLE 播 `sys_new_run`「新的探窟,开始了。」、`intro_1`「你在黑暗中醒来。这里是回声地窟。」、`intro_2`「伸手不见五指,声音就是你的眼睛。」、`tut_d0`「先学会用耳朵看。单击,发出声波脉冲。」——四句全部完整、清晰。我单击作答 D0,confirm 震动干净利落。这是我全场唯一听到完整句子的 30 秒。
|
||||
|
||||
**1:20 D1 脉冲演示 = 灾难开始。** t=130.0s 我按下教学要求的单击:脉冲 `pulse` 正常、回声组正常(echo_2 近墙 0.5s 后到、mat_stone 材质尾音、side_wall 左右预 pan 都在),但紧接着 `tut_echo_come`(「听,回声回来了。」)和下一步旁白 `tut_front_rule`(「回声回来越快,墙就越近。」)开始**互相掐架**——事件流里 `vend reason=preempt` 连环爆发,最密时 0.09 秒一轮,ASR 听到的是两句话交错的碎渣:「越生回来越快」「大了就」。从这一秒起,直到 71 分钟后我关掉页面,**这个循环再也没有真正停止过**。
|
||||
|
||||
**1:20–12:00 教学步进全靠猜。** D2 到 D9 每一步的旁白(tut_side_rule / tut_walk / tut_turn / tut_replay / tut_status / tut_menu / tut_mob / tut_parry / tut_attack / tut_stairs)全部在开播 0~0.3 秒内被 tut_echo_come 掐死,我只能靠设计文档和步骤反馈(震动音色、回声、脚步)猜该做什么。D4 长按走 2 格+撞墙、D5 左右滑转身、D6 双击免费重发、D7 上滑状态链——这些**动作反馈本身都正常**,但状态链五段播报(st_floor_1→st_hp_1→st_gold_1→st_face_e→威胁)每段只剩 0.2 秒渣音。D7 我按教学下滑开菜单,结果单击把菜单项切到了「保存并回大厅」,吓得我以为要退局——好在教学步骤完成时菜单被自动收掉了。
|
||||
|
||||
**12:00 教学战能打,但听不见教什么。** 教学蝠撞进我格子触发战斗(btl_bat + battle BGM + 心跳震动预警都到位),我挥击 2 刀杀死它(atk_swing/atk_hit/enemy_die/coin 清脆悦耳)。但 tut_parry「前摇声响时双击」的教学句我一句都没听成——第一次格挡练习直接失败(双击到晚了,好在 ATK=0 无伤)。
|
||||
|
||||
**12:00–25:00 D9 找楼梯:教学唯一有答案的一步,没有任何兜底。** 脉冲听到铁器回声(echo_3+mat_stair 的金属音色真的很好认)之前,我在 7×7 的 L1 里蛇形摸了半天。设计里 DRILL 每步 8 秒该有 nudge 震动——我静置 72 秒,**事件流一条都没有**。找到楼梯、单击下潜(stairs_down 轰隆+evt_descend+st_floor_2),全程语音照旧被碾碎,但我确认自己下到 L2 了。
|
||||
|
||||
**25:00–45:00 L2:真正的战斗体验(如果能听见的话)。** 三只窟鼠,全部主动撞进我格子(明雷脚步 mob_step_small + 距离音量 + ≤2 格心跳震动的威胁预警做得好)。我打死了三只(每只 3 刀),学会了:挥击命中 atk_hit 手感扎实;前摇 tel_small 1.2 秒窗口内双击=格挡——我的反应全靠手动计时,第一次成功卡进窗口是在 L3 才做到的。中途两次长按误触**逃跑**(设计:逃跑必成但挨一下),hurt 音+掉血真实入账。上滑查状态链确认面朝、金币档跳档(st_gold_1→st_gold_2),结构完全正确。
|
||||
|
||||
**45:00–58:00 L2 找楼梯:卡关救援系统在正常走表,但说的每句话都被杀。** 我故意静置测试:64 秒后 `stair_hint_a` 准时触发(带 [30,50,30,50,30] 警告震),再 60 秒 `stair_dir_e`(楼梯在东)准时升级——**计时和分级完全按设计工作**,但提示语音 14 次尝试全部 0~0.3 秒被掐死,作为盲人玩家我一个字都没收到。最后我靠读事件流里的 `stair_dir_e` 才知道方向——真人玩家在这里只能靠瞎撞。带路模式(180 秒)也触发了:nav_e→nav_n 每步报方向,同样全部碎成渣。
|
||||
|
||||
**58:00–75:00 L3:地图还在,我的耐心没了。** 下潜到 L3(evt_descend+st_floor_3)。三只蘑菇怪在左右踱步,我脉冲探路时发现三件事对不上:侧向回声永远说两侧是「墙」(side_open 整场一次没出现过,哪怕我明明能往"墙"的方向走成功);带路导航咬定北边(nav_n)而北边实测撞墙;出生点脉冲说前方墙在 5 格开外(echo_4)实际 1-2 步就撞。我在这张图上绕了半个多小时,后来复盘事件流才发现真相:**那 13 场蘑菇战全都发生了**(btl_mush ×13),但我每次长按走路都直接变成了「逃跑」——btl_flee ×9,其中一次挨了真实的 2 点伤害。我在不知情的情况下被放血到重伤档(st_hp_3),然后被蘑菇群「贴身绕圈、堵住格子、就是不进格开战」的走位软封锁在原地——我朝它走只 bump,它绕着我转永不接战。
|
||||
|
||||
**75:00–84:00 死亡与元进度:全场最完整的一段体验。** 我写了脚本接管操作,终于和蘑菇硬碰硬打了一场:挥击命中、它的前摇、我格挡失败挨刀(hurt+[80] 震),再两刀把它打死(enemy_die+coin+btl_kill+btl_loot_2)。第二只蘑菇接战,我血量只剩个位数,两回合后倒地——**死亡归因链一字不差地播完**(这一段因为页面重启过、抢占循环不在,所以全句清晰):
|
||||
|
||||
- `die_intro`(你倒下了……)
|
||||
- `die_cause_1`「你被小怪拖垮了。」——**真话**,确实是蘑菇怪连续失血致死
|
||||
- `die_adv_1`「下次,前摇声响时就双击。」——**真话**,我全程格挡成功数为 0
|
||||
- `st_floor_3`(第 3 层)→ `meta_gold_3`「这趟满载而归。」→ `settle_stronger`「下个周目,你会更强。」→ `settle_again`「单击,再探一次。」
|
||||
|
||||
单击重开入口确实 ≤2 秒。回到 TITLE 上滑元进度播报:`meta_gold_2`(带回一些金币)→ `st_best_2`「你到过中层」(档2=3-5 层,我到过第 3 层,分档正确)→ `unlock_none`。金币入账、最深层数更新、遗产未达解锁线,全部如实播报。这一段的设计完成度是全场最高的。
|
||||
|
||||
## 局 B 体验叙述(急躁压力:female / 1.7x / standard)
|
||||
|
||||
小飞拿到残局(L3 重伤档存档)直接单击**开了新周目**(教学跳过标志生效,直接 EXPLORE L1,这点很顺)。然后开始乱按轰炸,三段会话共 273 次随机手势:
|
||||
|
||||
- **乱按打得死怪**:L1 教学蝠在纯粹乱点中被拍死(btl_bat→enemy_die→btl_kill→btl_loot_1),乱滑转身被 `btl_no_turn` 正确拒绝(+纠错震动)。
|
||||
- **两次误退局**:菜单是下滑呼出的,呼出之后下滑**关不掉**(详见 P1-1),乱点循环菜单项时双击很容易砸在「保存并回大厅」上——两段会话各误退局一次(sys_saved→回大厅),其中一次退到大厅后随机点击**把别的游戏点开了**(事件流里出现 b_rain / z1_ring_in / n00_intro 等他家台词)。
|
||||
- **1.7x 语速的转写惨案**(仪器侧记,不算游戏 bug):「你面朝南」→「一面长」sim 0.29、「保存并回大厅」→「保则命为大师」sim 0.33、「检测到探窟记录」→「检测的探污记录,救花出新看」0.55。
|
||||
- **没有死锁、没有叠音**:乱按全程语音保持严格串行(二周目不进教学,抢占循环不在),BGM 切换、回合流转、菜单循环全部没卡死。局 B 最大的问题是那个菜单(P1-1),不是稳定性。
|
||||
|
||||
## 问题清单
|
||||
|
||||
### P0(破坏核心体验的系统性缺陷)
|
||||
|
||||
1. **教学 D1 通过后,`tut_echo_come` 与一切语音进入无限抢占循环,污染整个页面生命周期**
|
||||
- 证据:局 A 主会话 events.jsonl:`vend reason=preempt` 共 **35,611 次**,占全部语音播放(35,745 次)的 **99.7%**;71 分钟里只有开场 4 句(sys_new_run / intro_1 / intro_2 / tut_d0)完整播完。
|
||||
- 起点:t=130.2s(D1 首次脉冲通过、tut_echo_come 首播被抢那一刻)。此后教学旁白、上滑状态链五段、菜单项名、战斗报名(btl_bat/btl_mush/btl_rat)、卡关提示三级、带路导航、下潜旁白、死亡链——**每一条都被掐成 0~0.3 秒碎渣**,ASR 听到的是两句话的交错残片(「越生回来越快」「大了就」)。
|
||||
- 主凶配对:nav_n ↔ tut_echo_come 互掐 **33,297 次**——带路模式的重复播报计时器与教学残留反馈互相触发,越滚越凶。
|
||||
- 反证:同设置的二周目会话(教学跳过)**0 次抢占**,所有语音严格串行——污染源锁定在 DRILL。
|
||||
- 玩家视角:这是一款纯音频游戏,而我在 71 分钟里实际上处于**失聪状态**,全靠震动、音效音色和文档预读通关。
|
||||
|
||||
### P1(功能失效/设计违约)
|
||||
|
||||
1. **探索态菜单下滑关不掉(违反设计 §2.4「下滑=关闭」)**
|
||||
- 确定性复测:局 B 第三会话,swipedown 打开菜单(menu earcon)后,再发 3 次 swipedown 全部零响应(无语音、无音效、无关闭);期间左右滑还在轮流切菜单项(这部分符合设计)。
|
||||
- 而教学 DRILL 态打开的菜单下滑能正常关(局 A D7 验证:bgm 切回 explore+返回音)——同一手势两种状态行为不一致。
|
||||
- 后果:菜单唯一可靠出口是双击确认「返回探索」,但菜单项循环**没有任何位置播报**,盲手玩家不知道选择器在哪;局 B 两分钟内两次双击误落在「保存并回大厅」直接退局,退到大厅后乱点还会误开别的游戏。
|
||||
2. **侧向回声恒报「墙」,side_open 全场从未出现**
|
||||
- 证据:两局合计 40+ 次脉冲,`side_open_l/r` 出现次数为 **0**,`side_wall_l/r` 每次成对出现;两处行为级反证:L2 面朝北时左侧(西)报「墙」、向西行走成功;带路指示的北向开口沿途所有脉冲仍报「墙」。
|
||||
- 设计承诺「回声编码===grid 真值」在侧向维度不成立——「伸手不见五指,声音就是眼睛」的眼睛撒谎了。
|
||||
3. **教学 D9(找楼梯)无任何兜底,DRILL watchdog 缺失**
|
||||
- 证据:D9 状态下静置 72 秒,事件流零输出(设计 §10.2 教学每步 [8s] 应有纯 nudge 震动,一个 vibrate 事件都没有)。D9 又恰好是唯一要求玩家自行寻路的步骤——找不到铁器回声的新手没有任何救援。
|
||||
4. **L3 导航三重奏集体失真 + 蘑菇「堵格不开战」软封锁**
|
||||
- nav_n 长时间指向实测撞墙的北向(带路模式可信度崩塌);L3 出生点脉冲 echo_4(5+ 格)实际 1-2 步撞墙;同一方向 1 分钟内先「通 2 格」后「即撞」。
|
||||
- 蘑菇群贴身绕圈:我走过去只 bump(不触发战斗),它永不走进我格;13 场战斗全部由「我长按走路撞进它」无声开启,而我的下一步长按又立刻变成逃跑(btl_flee ×9)——在不知情中被「撤退挨一下」放血。L3 我耗了 35 分钟没找到 Boss,最终是靠脚本化战斗补完的死亡。
|
||||
|
||||
### P2(不适/可疑)
|
||||
|
||||
1. 卡关三级提示的**计时与分级完全正确**(64s→stair_hint_a、120s→stair_dir_e、180s→nav 带路,警告震 [30,50,30,50,30] 每级都到),但内容 100% 被 P0 掐死——救援体系形同虚设(P0 修复后此条大概率自动痊愈)。
|
||||
2. 元进度播报语义疑点:SETTLE 链说 `meta_gold_3`「这趟满载而归」,随后 TITLE 上滑同一元进度段说 `meta_gold_2`「这趟带回一些金币」——两处「这趟」的档位不一致(st_best 分档经台词表核对无 bug)。
|
||||
3. 每次长按都伴随 boost on→150ms→off(E3 豁免应在对局期禁用快进,实现变成每次长按闪一下,无害但可疑)。
|
||||
4. 教学步进完成时 D7 的菜单被系统自动收掉(sys_menu_resume 未经我操作)——与「下滑手动关闭」的教学目标矛盾(玩家可能根本没学会关菜单,局 B 的乱象与此相关)。
|
||||
5. 我方回合 15 秒无操作只震不说(standard 档 gd_turn 缺席是设计使然),配合 P0 留下的悬挂语音死寂,体感像死机。
|
||||
|
||||
### P3(建议)
|
||||
|
||||
1. 抢占战争平息后会留下悬挂语音(vstart 无 vend)+ 数分钟完全死寂——哪怕 P0 修了,也建议给引擎加"语音空转超时自愈"。
|
||||
2. 长按在手势宪法里同时是「前进」「逃跑」「教学作答」三种语义,战斗边界模糊时(L3 静默接战)极易误逃;建议逃跑改为长按+明确音效前摇。
|
||||
3. 局 B 大厅乱点会无确认启动其他游戏——虽是大厅层问题,dungeon 的「保存并回大厅」把玩家送进这个环境,建议回大厅后给一句「你在大厅」的定位。
|
||||
4. harness 侧记:longpress 为固定 600ms(约 1 格/次)、无独立 longpressend 手势类型,长按行走在 live 测试里非常笨重;1.7x+短句是 ASR 盲区(「你面朝南」→「一面长」sim 0.29),自动化验收需人工复核。
|
||||
|
||||
## 做得好的地方(实话实说)
|
||||
|
||||
- **死亡归因真话律完美**:死因句(小怪拖垮)、建议句(0 格挡)与实际行为逐字对应——这是全游戏最严苛的承诺,兑现了。
|
||||
- **回声定位本体(前向维度)是真的能玩**:echo_1..4 延迟/音量分档+材质尾音(mat_stair 金属回声一眼可辨)引导我在 L1/L2 正确找到楼梯与金币,撞墙 bump 与回声距离一致(L3 的漂移除外)。
|
||||
- **战斗音效链全部清晰**:atk_swing/atk_hit/enemy_die/coin/tel_small/hurt/parry 各司其职;回合制状态机经历 100+ 回合、13+ 场战斗零死锁。
|
||||
- **中断复述链与状态链结构满分**:继续存档后 st_floor→st_hp→st_face→st_threat 顺序与设计逐字吻合;上滑五段链(层/血/金/面朝/威胁)结构完整。
|
||||
- **元进度闭环成立**:死亡→金币入账→最深层数更新→遗产解锁判定(unlock_none)→「下个周目你会更强」→单击 2 秒重开。
|
||||
- **学习期零惩罚兑现**:L1 蝠 ATK=0(我 80+ 次乱按无伤)、L2 鼠 ATK=1,撞墙无伤,逃跑必成。
|
||||
- **教学跳过标志生效**:二周目直接 EXPLORE 不再进 DRILL,且顺带避开了 P0(讽刺的是不教学反而听得见)。
|
||||
- 双击免费重发脉冲、脉冲 1.2s 冷却防糊、怪物明雷脚步三档音量+心跳预警,全部按设计工作。
|
||||
|
||||
## 玩家情绪时间线
|
||||
|
||||
- 0:00 进场,开场四句完整清晰:「这游戏声音真舒服」
|
||||
- 1:20 第一次脉冲,两句教学开始互相掐:「……它刚才说什么?」
|
||||
- 2:00–12:00 靠震动猜教学:「我这简直是在玩盲文版」
|
||||
- 12:00 杀死教学蝠,音效爽:「打是打得挺爽,就是没人告诉我怎么格挡」
|
||||
- 15:00–25:00 L1 找楼梯,静置 72 秒毫无声息:「喂,说句话啊」
|
||||
- 25:00–45:00 L2 三杀,战斗手感上头:「鼠鼠我呀今天全灭」
|
||||
- 45:00 卡关提示触发但半句听不见:「求你了把话说完」
|
||||
- 58:00–75:00 L3 导航指墙+侧向回声撒谎+蘑菇堵门:「这图是不是在跟我开玩笑」
|
||||
- 75:00 硬碰硬杀掉第一只蘑菇:「终于像场正经战斗了!」
|
||||
- 79:00 死亡归因三问一字不落:「……这是我今天听到的第一句完整的人话」
|
||||
- 84:00 元进度入账,「下个周目你会更强」:「行,冲着这句我愿意再来」
|
||||
|
||||
## 如果只能改 3 件事
|
||||
|
||||
1. **杀掉 tut_echo_come 的无限重发(P0)**:D1 通过反馈播一次就该销毁;顺带给语音引擎加"同一 id 连续 N 次 preempt 强制静默"的自愈保险丝。这一个修复能让教学、状态链、卡关提示、带路、菜单播报全部复活。
|
||||
2. **修探索态菜单的下滑关闭 + 给菜单项加位置播报**:现在的菜单对盲手玩家是个只能进不能出的口袋,出口全靠双击赌运气,赌输就退局。
|
||||
3. **让侧向回声和带路导航说真话**:side_open 按设计触发、nav 方向与碰撞一致、L3 出生点前向距离校准——方位信息是这游戏的生命,三个子系统一起失信比任何单点 bug 都致命。
|
||||
|
||||
## 一句话裁决
|
||||
|
||||
**修好那个让游戏失聪 71 分钟的语音抢占死循环之后,我愿意立刻再来一局——地窟的骨头(战斗、回声、元进度、归因真话)是真的好,但现在它一边给我引路一边捂着我的耳朵。**
|
||||
@@ -0,0 +1,23 @@
|
||||
# P1 视障资深玩家评审:《回声地窟》(R1)
|
||||
|
||||
> 评审依据:research/new8/dungeon/round1/transcript-main.md(新手完整弧线,3630 行全读)+ transcript-stress.md(乱按压力局)。
|
||||
> 说明:转写里的【状态】行我按「转写器注记」处理,不算我耳朵听到的;我听到的只有 ▶ 语音、♪ 音效/BGM、〰 震动。
|
||||
|
||||
### 回声地窟
|
||||
- 状态感知:2/5 —— 教学期和战斗期我清楚得像装了内耳坐标:教学一句一做(t+6.4「单击,发出声波脉冲」→t+8.5 脉冲+回声组;t+18.6 按住走、t+19.1 转身、t+22.1 双击免费重发),战斗里每回合有 turn 签名+确认震(main t+45.5/t+51.0),遇敌必报名(t+35.8「盲眼蝠扑了过来!」+battle 签名+战鼓),上滑五段链齐活:层/血/金/面朝/威胁(main t+405.8-414.3、stress t+27.2-33.5)。但主线局——新手真正要走的弧线——t+55.2 之后到 t+405.8 之间没有一句语音,整整 350 秒;期间两次下楼零演出(t+142.2、t+273.8:无下楼声、无「往下潜」、无「这是第X层」,对照压力局同一动作全套都有:t+72.8-77.0、t+105.8-107.9);BGM 自 t+35.8 进战斗曲后 370 秒无一次切换记录,我在空走廊里被战鼓泡了六分钟(压力局同流程 BGM 切了 8 次);t+405 的「新周目」没有标题、没有过场、没有「新的探窟」宣告——上一秒我还在第三层走廊走路,下一秒就是「这是第一层」。我不知道我在哪,一半时间也不知道现在是什么局。
|
||||
- 下一步明确性:2/5 —— 教学期与战斗期是教科书级:「现在单击,挥拳打它」(t+43.4)、「楼梯就在脚下。单击,下潜。」(stress t+72.3/t+104.4)、战斗发呆 15 秒就有看门狗「轮到你了。单击挥击。」(stress t+166.5/t+231.0)。可主线局 L2/L3:t+143-273 与 t+274-405 各约 130 秒无拾取、无战斗、无楼梯,设计承诺的 60/120/180 秒三级卡关提示两局一次都没响(stair_hint/stair_dir/nav 全为 0);我唯一的导航依据是教学句「铁器的回声,就是下潜的楼梯」(t+55.2),而主线局 165 颗脉冲里铁器尾音出现 0 次——我按规矩听铁器,铁器从头到尾没出过声,只能瞎走。
|
||||
- 愿意继续玩:否 —— 就 R1 而言,「听声辨位」在主线局里退化成一台双态节拍机:350 秒零事件零语音、下楼无声、战斗曲泡全程,我找不到继续按下去的理由;但压力局证明骨架能跑通(战斗、pan、心跳、归因、元进度都在),一致性修好我愿意复审。
|
||||
- P0 问题:
|
||||
1. 不知道自己在哪:主线局两次下楼零反馈(t+142.2、t+273.8),层数变化全靠猜;战斗曲 370 秒不退(t+35.8 后再无任何 BGM 切换记录),「听见 BGM 就知道我在什么状态」这条状态签名彻底失效。
|
||||
2. 不知道该做什么:主线局两段 130 秒无进展期间,60/120/180 秒三级提示全程哑火;「铁器=楼梯」的教学规矩在 165 颗脉冲里 0 次兑现,教学一结束我的导航线索就归零。
|
||||
3. 账目对不上:压力局本局四场胜仗、四回战利入袋(t+55.3、t+131.6、t+168.6、t+233.1 的 coin 音+「战利不多/小有收获」),死亡结算却报「这趟没带回什么。」(t+272.1)——「死亡金币入元进度」的账我核对不出来;主线局 t+405.8 新周目宣称遗产生效(仅存于注记),我耳朵里没有任何遗产播报,上滑还报「口袋空空」(t+410.0)。另外教学承诺的撞墙归因句(「那边是墙」)两局 8 次 bump 全是纯音效,一次没播过(main t+19.6;stress t+13.7、t+69.6 等)。
|
||||
- 建议:
|
||||
1. 先修「同一动作两种反馈」:下楼演出(下楼声+「往下潜」+「这是第X层」+探索曲回切)在主线局被整个吞了两次,战斗 BGM 六分钟不退——让主线局和压力局听起来像同一个游戏,这是我最基本的续命条件。
|
||||
2. 把回声谱系喂饱:主线局 165 颗脉冲里铁器尾音 0 次、空旷侧回声 0 次、教学期后正面回声只剩「贴身 1 格墙」和「3-4 格墙」两档横跳;把楼梯/房间/开口的声学样本放回常规探索路径,并让三级卡关提示真正开火——现在这套信息量撑不起「辨位」两个字。
|
||||
3. 把元进度做成听得见的账:死亡结算报清「这趟带回什么档」,新周目开场播遗产生效——roguelike 让我死得值的那口气,全押在这笔账上;顺带把撞墙归因句接上,别让教学句开空头支票。
|
||||
|
||||
#### 回声/脚步/播报三套信息一致性(专项,Shades of Doom 老兵的最狠检查)
|
||||
- 回声 vs 教学语音:矛盾(主线局)。t+55.2 刚教完「铁器的回声,就是下潜的楼梯」,此后 165 颗脉冲零次铁器尾音——包括我站在楼梯上(t+142.2 的回声组是 echo_1+mat_stone)和下楼那一刻(t+273.8 同样 mat_stone);mat_stair 直到压力局 t+239.9/244.9 才第一次响。资产在、触发看局——这比干脆没有更糟,因为它让教学句变成了谎言。
|
||||
- 回声 vs 空间本身:信息量不足以支撑「辨位」。全程 step_turn 483 次 vs step_own 482 次——转身声和脚步声一样多,每格移动伴两声拖步转身音(t+300.5 等全程如此,我听不出这是走路还是跳舞);两侧行向回声 330 次全部是「墙」,教学第二课「空旷是通路」(t+16.5)教的空旷侧回声两局 0 次出现;正面回声教学期之后只在 echo_1/echo_3 两态间抖动。SoD 的墙有材质、远近、回响的连续谱系,这里我听到的不是一片地窟,是一个两态节拍器——我建不成任何空间模型,只能靠「撞了就换边」的穷举。
|
||||
- 脚步 vs 播报(威胁层):压力局内自洽且出色——窟鼠脚步从右(t+80.9 small_r)到中(t+83.5 small_c)逼近、≤2 格 heartbeat 跟进(t+82.6)、遭遇「窟鼠窜了出来!」(t+84.7)与脚步收敛严丝合缝;缠斗怪纠错「它贴着你不放,不用转身。」(t+86.8)与行为一致;死亡归因「你没挡住那记重击。」(t+269.9)与我全程不格挡的行为严格对账——这三条我认,是真功夫。但主线局 L2 配 3 只怪、L3 配 3+1 只,260 秒里怪物脚步 0 次(mob_step 仅教学期 3 次)——怪物层在主线局整体缺席,与「全明雷、脚步持续可闻」的规矩直接矛盾。同一个引擎,两局两个世界。
|
||||
- 播报内部:上滑五段链模板固定、四段齐整(层/血/金/面朝/威胁,t+405.8-414.3),这句我要表扬;但「口袋空空」与「遗产生效」在同一个新周目里同屏出现(t+410.0 vs 注记),口袋账和遗产账的区别没有任何一句解释——播报层先把自己的账本理清楚。另:菜单两局都只验证过第一项「返回探索。」(main t+32.2、stress t+35.6),循环后三项从未露脸,与 radio 同款的完整性存疑。
|
||||
@@ -0,0 +1,20 @@
|
||||
# P2 · 时间充裕的大学生 评审——《回声地窟》(R1)
|
||||
|
||||
> 视角:23:30,宿舍躺床,戴耳机,音量正常。基于转写信息流代入;主线转写的动作是剧本注入的,但「我耳朵里听到了什么」就是下面这些。
|
||||
|
||||
### 回声地窟
|
||||
- 状态感知:3/5 —— 教学期满分:每次操作都有即时回执(t=8.5 首次脉冲后侧墙左右+回声+材质尾音一组、t=40.1 前摇里双击秒回「挡住了!」、t=86.8 乱转身有「它贴着你不放,不用转身。」纠错),上滑状态链五段齐全(第二周目 t=405.8-414.3:层/血/金币/面朝/威胁)。但两个硬伤把它拖到 3 分:① t=35.8 战斗 BGM 响起之后,直到 t=416 收工再也没有切回探索曲的记录(t=142.2 进第二层、t=274.2 进第三层、t=405.8 新周目,状态行全标 BGM=bgm/battle)——我在空无一人的走廊里独走了六分多钟,耳机里一直是战斗鼓点,音乐在骗我「在打架」,脚步在说「空无一人」,我对「现在是什么处境」的感知被 BGM 带偏了整整一局;② L2/L3 探索段(t=142.6-273.8、t=274.2-404)除了我自己的脚步和脉冲,没有任何别的声源——没怪脚步、没拾取、没遭遇,这层「有什么」我完全感知不到,因为(听起来)它什么都没有。
|
||||
- 下一步明确性:3/5 —— 教学期指哪打哪,每步一句话+一次实操(t=6.4 脉冲、t=18.6 按住走、t=22.1 双击免费重发、t=24.2 上滑状态),D9 教了我「铁器的回声,就是下潜的楼梯」(t=55.2)。出了教学就露馅:目标只教过那一次,之后找楼梯全靠瞎撞——L1 出口我摸了约 85 秒(t=58.7-141.7 连续四十次「按住-松开」),L2 摸了约 130 秒(t=142.6-273.8);脉冲回声只有「近墙/中墙+两侧发闷」,没有「离楼梯越来越近」的梯度,我永远不知道自己是热是冷。更糊涂的是主线两次下楼(t=142.2、t=273.8)都没播「楼梯就在脚下。单击,下潜」(压力场 t=72.3、t=104.4 有这句)——我甚至说不清自己是怎么下的楼。卡关三级提示(60/120/180 秒)在我全程保持移动时一次没触发过,说明它兜不住「在动但全是无效移动」这种真卡关。
|
||||
- 愿意继续玩:否(就本轮转写的体验)—— 头 90 秒是惊艳的,之后六分钟空走廊+错乱的战斗鼓点,把「想再探一层」的念头磨没了;单局都没听完,遑论下一局。BGM 修掉、楼层填上内容,我愿意给第二次机会。
|
||||
- P0 问题:
|
||||
1. 「死了金币进遗产、越死越强」这个核心承诺,在两份转写里没有一次被声音兑现过:压力场一路叮当捡了三次钱(t=131.6、t=168.6、t=233.1 的 coin 音+「小有收获。」),t=267.8 倒下,结算却播「这趟没带回什么。」(t=272.1);主线第二周目上滑还是「口袋空空。」(t=410.0)。钱去哪了?要么死亡没入账、要么播报档在说谎——这是我开下一局的唯一理由,它现在是哑的。
|
||||
2. 主线这条「新手完整弧线」中段是空的:t=51.0 教学战击杀之后到收工,再无一场战斗、一次拾取、一个怪脚步,说好的窟主石甲蟹一次没露面(对照压力场 t=264.5 是有的),L2/L3 各约 130 秒纯脉冲-走路循环。8 分钟的体验里 6 分钟是空层——不管这是剧本绕开了内容还是楼层把内容摆得太偏,对躺床的我都是同一句话:这游戏后半段没东西。
|
||||
3. t=35.8 起战斗 BGM 永不切回探索曲(此后全程零 bgm/explore 切换记录)。BGM 在这游戏里是状态信号,信号错了六分钟就是状态感知事故。
|
||||
- 建议:
|
||||
1. 让探索层「活」起来,也让脉冲「会指路」:全程 L1-L3 材质尾音只有 mat_stone 一种(t=8.5 到 t=404),侧向永远是「发闷」,门、水、空腔一次没出现过;脉冲除了「近墙/中墙」得能回答「楼梯近了吗」——渐近梯度、或者楼梯铁器声可远闻,都行。这是决定我会不会玩到第三层的头号因素。
|
||||
2. 修 BGM 状态回归,战斗曲只属于「有怪的时候」;顺带把「踏上楼梯格」的播报在主线路径里补稳(对照 t=72.3 有、t=142.2/t=273.8 无)。
|
||||
3. 把元进度做成听得见的承诺:死亡结算播「带回了 X 枚金币,离下一件遗产还差 Y」,解锁时开场播报遗产名(设计里有,转写里没响过)。标题页那句「你还没到过第三层。」(压力场 t=2.1)是全游戏最勾我的钩子——照这个思路把金币线也补上。
|
||||
|
||||
#### 元进度钩子评估
|
||||
- 死后结算想不想立刻开下一局:节奏上,想,非常想——t=267.8「你倒下了。」→ t=269.9/272.1 归因「你没挡住那记重击。」「下次,前摇声响时就双击。」(我全程乱挥不格挡,骂得字字属实)→ t=274.2 已经在开新局。从死到重开约 7 秒,零摩擦、归因真话、不羞辱人,这个死亡-重开手感是全游戏做得最好的部分,比多数商业 roguelike 的结算爽快。内容上,不想——结算只告诉我「没带回什么」「你到过中层」,没有任何「下一局你会更强」的可听证据:没金币入账、没遗产播报、新局上滑还是「口袋空空」(t=410.0)。钩子的形状搭好了,钩尖是钝的。
|
||||
- 「脉冲回声」这个核心动词新鲜吗:点子非常新鲜——「单击=喊一声、用回声快慢看距离」是我没玩过的核心动词,t=8.5 第一次听到完整回声组(左墙闷响+右墙闷响+回声+石头尾音)时真的起鸡皮疙瘩,这就是我要的「设计感」。但新鲜感衰减太快:L1-L3 每一次脉冲的读数都坍缩成「前方 1 格或 3-4 格石墙+两侧发闷」(t=142.6-273.8 那 130 秒里就是 echo_1/echo_3 交替+mat_stone 循环),教学里承诺的「空旷是通路」(t=16.5)我全场没等到过一次「空旷」,材质四选一实际只出过一种。同一个动词循环十分钟没有新读数,就从「声呐魔法」退化成「打卡」——动词本身 5 分,这轮的读数丰富度 2 分。
|
||||
@@ -0,0 +1,22 @@
|
||||
# P3 评审:《回声地窟》(dungeon)— 时间紧张的白领
|
||||
|
||||
> 视角:32 岁,地铁单程 25 分钟,站立单手持机,嘈杂车厢,只玩过消消乐,反应不快。依据 R1 两份转写(新手完整弧线 + 乱按压力局)代入「真机听到这些」。
|
||||
|
||||
### 回声地窟
|
||||
- 状态感知:2/5 —— 教学段很清楚(每步都有人声带着做,t=6.4-55.2s),上滑复述链也好用(新周目 t=405.8-414.3s 五句话报清层/血/钱/朝向/威胁)。但主线局从 t=55.2s 教学战胜利之后,到 t=405.4s,整整 350 秒没有任何一句人声:我在第几层只能靠猜——两次下潜(t=142.6s、t=274.2s)都是一声不吭就换了层,转写里「这是第二层」这类报层句一句没出现(压力局 t=77.0s 反而有);「第三层——窟主的地界」(t=274.2s)我只从状态注释里知道,耳朵里听到的还是同两种回声轮流响。地铁里我早就迷失了。
|
||||
- 下一步明确性:2/5 —— 教学教我「铁器的回声,就是下潜的楼梯」(t=55.2s),可我之后走了 158 次脉冲、6 分钟,铁器回声一次都没听到过(全篇 mat_stair 出现 0 次),楼梯全是瞎撞上的(t=142.2s、t=273.8s 单击就下去了,之前毫无预兆)。设计里说好的卡关三级提示(无进展 60/120/180s 给方向)在主线 350 秒无进展期间一次都没来。压力局倒是有「楼梯就在脚下。单击,下潜。」(t=72.3s、t=104.4s)——说明系统存在,但主线局它对我失灵了。我不知道该往哪走,也没人告诉我。
|
||||
- 愿意继续玩:否 —— 教学之后 6 分钟只听到「贴身/中距」两种石墙回声轮流响,没怪、没宝、没目标、没提示,我在嘈杂车厢里熬不到第二层就会退出。
|
||||
- P0 问题:
|
||||
1. 不知道自己在哪+该做什么(双重):主线 t=55.2s→t=405.4s 共 350 秒——0 句人声、0 场战斗、0 次拾取、0 次楼梯提示;教学承诺的目标线索「铁器的回声」全篇 0 次出现,卡关提示 0 次触发。
|
||||
2. 不知道发生了什么:两次下潜(t=142.6s、t=274.2s)无任何语音预告就进了下一层,我以为游戏坏了。
|
||||
3. 核心卖点没兑现:设计说 L2 有 3 只窟鼠、L3 有蘑菇怪和窟主,主线 6 分钟里怪物脚步一声都没有——「听声辨位」在教学战后完全没上场,我不知道这游戏除了听墙还能干嘛。
|
||||
- 建议:≤3 条,按对「我愿意玩下去」的影响排序
|
||||
1. 给探索段装上「节拍器」:楼梯加持续可闻的方向性铁器叮当,或把卡关提示阈值从 60/120/180s 压到 30-45s——主线那种 350 秒无反馈的真空,一次都不能有。
|
||||
2. 进层必须报层、上楼梯前必须提示(压力局 t=77.0s「这是第二层」、t=72.3s「楼梯就在脚下」证明句子都有,主线没播就是触发条件有洞),顺带把下潜做成「踏上楼梯格→立刻报」,别让我盲点。
|
||||
3. 每 60-90 秒塞一个正反馈(金币、怪、拾取都行):教学的热度在 t=51s 到顶,之后全凉了;我在地铁上要的是每半分钟有点事发生。
|
||||
|
||||
#### 认知负荷评估
|
||||
- 脉冲-回声-移动-战斗的规则量对我超不超载:探索面 6 个手势(单击脉冲/按住走/左右滑转身/双击重发/上滑状态/下滑菜单)——不超载,单击和按住是我零学习成本的动作;真正的新概念只有一个「回声越快墙越近」,一句就懂(t=8.5s)。战斗面就吃力了:单击挥、双击格挡(还只有敌方前摇 1.2 秒窗口内才算)、按住逃跑、绕位怪还得转身对准——「在特定的 1.2 秒里双击」这种时机概念,对只玩过消消乐的我是全新技能。压力局证明了我这号人实战的真实水平:三次蘑菇怪(t=123.7/140.3/204.8s)我全是硬挥不格挡,靠血厚换赢;石甲蟹一刀就把我送走了(t=267.8s)。规则量本身不超载,超载的是「时机」。
|
||||
- 教学一遍能不能懂:能。10 步每步一句旁白+一次实操,10 秒内一个动作;乱按局里我全程乱摸,t=74.9s 也照样从教学里滚出来了,做错还有人哄「没挡住也别怕,它伤不到你」(t=45.6s),不骂人。格挡这个概念教学教了(t=38.0s),但我这种人是「听懂了、实战用不上」——建议实战头两场小怪也放宽格挡窗口,或前摇音更吵一点逼我注意。
|
||||
- 死一次损失大不大:很小,我输得起。压力局 t=267.8s 倒下 → 归因两句话(「你没挡住那记重击」「下次,前摇声响时就双击」t=269.9-272.1s)→ 元进度入账(「这趟没带回什么」「你到过中层」)→ t=274.2s 已经在新周目里了,前后约 7 秒,金币不清。死亡不羞辱人、重开零成本,这套我给满分。
|
||||
- 附带一条通勤实感:按住=前进意味着拇指要持续压着屏幕——我单手扶着扶手站在晃动的车厢里,一个刹车我就松手了,起步还得重新按;比起点按,长按在地铁里更容易被打断。不算 P0,但确实影响我「顺手玩两把」。
|
||||
@@ -0,0 +1,22 @@
|
||||
# P4(疲惫的工人)R1 评审 —— 《回声地窟》
|
||||
|
||||
> 45 岁,工地收工,宿舍 21:00,外放小音量,游戏经验少。
|
||||
> 依据:research/new8/dungeon/round1/transcript-main.md(新手完整弧线)+ transcript-stress.md(乱按压力局)。全部按「我真机听到这些」代入。
|
||||
|
||||
### 回声地窟
|
||||
- 状态感知:3/5 —— 教学那几分钟啥都清楚:上滑报层报血报口袋(t=24.2-28.5「这是第一层。你毫发无损。口袋空空。」),压力局下楼也有人报「这是第二层」(t=77.0)。出了教学就迷糊:主线里我按了下潜,却没听见报层,只听见自己的回声(t=142.2-142.6,对比压力局 t=77.0 有人报),底下是第几层全靠猜;我脸朝哪、血剩多少,全得自己记得上滑问。黑地里「咚咚」的心跳震(压力局 t=39.0)和打仗时的警报(t=208.1)没人告诉我是啥意思。最后我都「命悬一线」了(压力局 t=264.5),自己压根不知道。
|
||||
- 下一步明确性:3/5 —— 教学一步一句指哪打哪(t=6.4「单击,发出声波脉冲」、t=18.6「按住屏幕不放,你就往前走」),打仗也有人喊「轮到你了。单击挥击」(压力局 t=166.5)。可找楼梯这件事从头到尾没人帮我:主线 t=59-141 打完教学怪后,我在第一层瞎撞了八十多秒、几十回「脉冲—转身—挪一格」,它一声不吭;后来才咂摸出来,指路提示是看我「手停没停」才给的——我手一直动,它就一直当我不卡(t=142.6-272、t=275-403 两整层也一样)。
|
||||
- 愿意继续玩:否 —— 教学那几分钟又暖又安全,可出了教学就是一个人在黑地里一格一格数脚步,好几分钟没人搭理我,末了还稀里糊涂撞上大个子三秒就躺了(压力局 t=264.5-267.8)。下了工再熬这个,顶不住。
|
||||
- P0 问题:
|
||||
- 死得莫名其妙:压力局 t=264.5 走着走着「窟主石甲蟹,就在你面前」,它没说这位多厉害、我该打该跑,t=267.8 我就「你倒下了」。躺下之前我一直当它是个普通怪——三秒钟,连怕都没来得及怕。
|
||||
- 不知道该做什么、还要走多久:主线 t=142.6-272(一层)加 t=275-403(又一层),七八分钟全是同一个「脉冲—回声—挪一格」,中途没有金币、没有怪、没有一句话,我不知道楼梯在哪、这层还有多远。手不停,指路提示就永远不来。
|
||||
- 建议:
|
||||
1. 我一路走也得有人指路:别光看手停不停(主线 t=59-141、t=142-272 两段长走就是证据),走了几十步没上楼梯,就隔一会儿提一句楼梯大概朝哪。这一条最要命——我两眼一抹黑地走,比干活还累。
|
||||
2. 打不过的先打招呼:窟主这类大头目,撞见时除了报名(压力局 t=264.5),添一句「这位不好惹,打不过趁早跑」;心跳震和危险警报(t=208.1)也该在教学里讲一遍是啥意思,别让我听着警报干发慌。
|
||||
3. 挪路别那么干,账也要对上:两三分钟没拾没仗就给点动静,金币声、一句旁白都行——主线第二层我走了一整层颗粒无收;还有压力局我明明打了三场「小有收获」(t=233.1),死了却说「这趟没带回什么」(t=272.1),这账对不上,我犯嘀咕。
|
||||
|
||||
#### 容错核算
|
||||
- 教学跟得上吗:跟得上,是我玩过最贴心的开头。一句短语配一个动作(t=6.4 单击、t=18.6 按住走、t=19.1 左右滑转身、t=22.1 双击「不要钱」),t=8.5 我人生第一声脉冲就发出去了;做错了它换新句子重教,不发火(压力局 t=45.6「没挡住也别怕,它伤不到你。」);教学怪真咬不动我,压力局里我乱按一气,血一滴没掉。就是有几样没教:心跳震、警报声、打仗时咋知道自己剩多少血。
|
||||
- 死一次多惨、会不会骂我:不骂,还支招。压力局 t=269.9「你没挡住那记重击」、t=272.1「下次,前摇声响时就双击」,末了还给句「你到过中层」(t=274.2),单击一下立马重开(t=276.3 就回到第一层)。惨度不高,就是死得太突然(t=264.5 撞见、t=267.8 躺下),突然到我都不好怪自己。
|
||||
- 黑暗里乱走有没有惩罚过重:没有惩罚。撞墙就是一声闷响(主线 t=19.6、压力局 t=67.3),不掉血不骂人;跑路必成,代价明码标价——挨一下(压力局 t=88.9「你甩掉了它,被抓了一下。」)。乱走真正亏的不是罚,是白费腿:走半天啥也没有,也没个消息。
|
||||
- 整体玩下来累不累:累。头一分钟教学舒坦,之后主线 t=142 起到 t=403,四分多钟全是同一种回声翻来覆去听,分不清这格跟那格有啥两样;而且打完教学怪以后,那打仗的鼓点一直没停过(主线 t=142.6 起状态里 BGM 一直是 bgm/battle,对比压力局 t=91.1 打完就切回探索曲),鼓点绷着、事又没有,人更乏。俺工地上一天人声嘈杂,睡前想听个动静,可不想听四分钟一样的「咚……咚」。
|
||||
@@ -0,0 +1,43 @@
|
||||
# R1 Synthesis —《回声地窟》(dungeon)
|
||||
|
||||
> 产品裁定 | 证据源:4 人设评审(全拒,状态感知 2-3/5)+ 真机试玩报告(live-player.md,会话 dungeon-20260902*×6)+ 转写(transcript-main/stress.md)+ 产品只读根因排查
|
||||
|
||||
## 1. R1 裁决
|
||||
|
||||
| 评审方 | 状态感知 | 下一步明确 | 愿意继续玩 |
|
||||
|---|---|---|---|
|
||||
| P1 视障评委 | 2/5 | 2/5 | **否** |
|
||||
| P2 大学生 | 3/5 | 3/5 | **否**(头 90 秒惊艳) |
|
||||
| P3 白领 | 2/5 | 2/5 | **否** |
|
||||
| P4 工人 | 3/5 | 3/5 | **否** |
|
||||
| 真机玩家 | — | — | **有条件是**(修掉失聪循环「立刻再来一局」) |
|
||||
|
||||
**结论:0/4 拒绝,dungeon R1 不达标,但被真机玩家确认「战斗、回声、归因真话是真的好」——问题集中在探索期体验与一个灾难级语音循环,属于可修复的结构性问题,不是玩法核心不成立。** R2 = 结构修复轮(本轮不许加新内容)。
|
||||
|
||||
## 2. R2 修复清单(裁定必修)
|
||||
|
||||
### P0 级
|
||||
- **D0-1(live P0)语音抢占死循环**:教学 D1 后 `tut_echo_come` 与导航提示无限互抢(nav_n↔tut_echo_come 33,297 次;主会话 35,745 次播放 99.7% 被掐死,71 分钟只听全 4 句;跳教学的二周目 0 抢占 → 污染源锁定 DRILL 泄漏)。
|
||||
修:① DRILL 完成必须注销全部教学再调度器;② 引擎侧风暴保险丝:同 id 短窗内重复调度超阈值即熔断并 console.error(guide/nav 通用,改 web/engine/ 需全量回归)——产品裁定:**允许改引擎**,这是全线保险。
|
||||
- **D0-2(P1 专节+live P1②)回声信息真实性**:`mat_stair` 只在预载清单、零调用点 →「铁器=楼梯」教学承诺 165 次脉冲 0 兑现;侧向 `side_open` 全程 0 次(侧向恒报墙,两处行为级反证)。
|
||||
修:回声调度与 grid 单源重接(楼梯=铁器回声、侧向开口播 side_open),加全网格回声一致性断言。
|
||||
- **D0-3(P3/P4 转写 t≈142-405)探索期内容真空**:教学后 350s 零人声零战斗零拾取、两次下潜零演出、卡关提示未触发。
|
||||
修(结构,不加新资产):① 生成器保证主路径 N 步内必有内容遭遇(密度下限);② 探索「呼吸层」:静默超 20s 播环境短句/远机音(现有 evt/amb id 内选用,不够则程序合成 amb);③ 下潜加演出(stairs_down + 一句楼层播报已有资产,接线);④ 卡关计时器复核(为何 350s 未触发——疑似被 D0-1 风暴饿死,修 D0-1 后复测再定)。
|
||||
|
||||
### P1 级(本轮必修)
|
||||
- **D1-1(live)**:探索态菜单下滑关不掉(DRILL 态却能关;违反设计 §2.4)。
|
||||
- **D1-2(live)**:教学 D9 无看门狗无兜底(静置 72s 零事件)。
|
||||
- **D1-3(live)**:L3 导航指墙 + 前向回声距离漂移 + 蘑菇「堵格不开战」软封锁(35 分钟未达 Boss)。
|
||||
- **D1-4(P2 转写+产品根因)**:战斗结束不切回 `bgm/explore`(restore 只在菜单关闭路径)。
|
||||
- **D1-5(live P2)**:SETTLE 与 TITLE 金币档播报不一致(3 vs 2)。
|
||||
- **D1-6(live P2)**:长按 boost 闪跳;D7 菜单被系统自动收掉与教学目标矛盾;回合 15s 静默像死机(加回合音确认)。
|
||||
|
||||
### 伪影澄清(不改游戏,记档)
|
||||
- 「元进度不兑现」(P2 转写 t=272/410):**live 实测元进度入账与 TITLE 播报全部正确**(meta_gold_3/st_best_2)→ 判定为虚拟会话剧本伪影(剧本拾取与游戏结算路径不一致)。dev 复核 sessions/dungeon.mjs 的拾取路径后关案。
|
||||
- 仪器:harness longpress 固定 600ms;ASR 1.7x 短句盲区(记入 R2 协议,评测时以 events 为准)。
|
||||
- SA3 缺失 24 件(脚步/环境类部分由 SYN 兜底):等 HF token,不影响本轮结构修复。
|
||||
|
||||
## 3. R2 轮次协议
|
||||
1. dev 修 D0-1..D0-3 + D1-1..D1-6(含引擎保险丝,需全量 9 套件回归)→ playtest 全绿 + 新增断言(回声一致性全网格、教学后 60s 内必有事件、菜单关闭、风暴熔断单元断言)。
|
||||
2. 重新生成主线+压力转写;live 复测 2 局(重点:教学后 10 分钟内零抢占风暴、探索期静默 ≤20s、菜单可关)。
|
||||
3. 人设复审:全员 4 人设复评(R1 全拒,必须全员翻案或给出修复后新结论;目标 R2 至少 P3/P4 翻正)。
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,673 @@
|
||||
# 试玩转写:《dungeon》
|
||||
|
||||
> 本文件是「玩家感知日志」:一位新手玩家的整局体验转写。语音列出了玩家听到的每句话全文,
|
||||
> 音效/BGM/震动按发生时间列出。「静默」段 = 玩家什么也听不到。手势是剧本注入的(模拟真人手部动作),
|
||||
> 非最优操作:包含犹豫、误操作与乱试。语音时长按语速估算(±20%),仅供节奏参考。
|
||||
t+ 0.0s (玩家点开游戏,轻触屏幕开始)
|
||||
t+ 0.0s ♫ BGM 切换 → bgm/menu
|
||||
t+ 0.0s ♪ 向导音:menu(系统界面)
|
||||
t+ 0.0s 【状态】标题页乱划 标题页:单击开始探窟,上滑听元进度(BGM=bgm/menu,语速1)
|
||||
t+ 0.0s ▶ 语音:「这趟没带回什么。」
|
||||
t+ 2.1s ▶ 语音:「你还没到过第三层。」
|
||||
t+ 2.1s 【状态】标题页乱划 标题页:单击开始探窟,上滑听元进度(语音播放中,语速1)
|
||||
t+ 2.1s ▶ 语音:「新的探窟,开始了。」
|
||||
t+ 4.2s ♫ BGM 切换 → bgm/explore
|
||||
t+ 4.2s ♪ 向导音:explore(探索/安全)
|
||||
t+ 4.2s ▶ 语音:「你在黑暗中醒来。这里是回声地窟。」
|
||||
t+ 4.2s 【状态】教学里乱按一气,旁白说到哪按到哪 教学演练第 1 步,跟着旁白做(语音播放中,语速1)
|
||||
t+ 4.2s ♪ 音效 sfx/pulse
|
||||
t+ 4.2s ▶ 语音:「听,回声回来了。」
|
||||
t+ 4.2s ▶ 语音:「回声回来越快,墙就越近。」
|
||||
t+ 4.6s ♪ 音效 sfx/side_wall_l
|
||||
t+ 4.6s ♪ 音效 sfx/side_wall_r
|
||||
t+ 4.7s ♪ 音效 sfx/echo_2
|
||||
t+ 4.7s ▶ 语音:「两侧的回声,发闷是墙,空旷是通路。」
|
||||
t+ 4.9s ♪ 音效 sfx/mat_stone
|
||||
t+ 6.4s ♪ 音效 sfx/step_turn
|
||||
t+ 6.4s ▶ 语音:「按住屏幕不放,你就往前走。」
|
||||
t+ 8.5s 〰 震动:error(做错了:两连短震)
|
||||
t+ 12.2s ♪ 音效 sfx/step_own
|
||||
t+ 12.2s 〰 震动:swipe(滑动识别)
|
||||
t+ 12.7s ♪ 音效 sfx/step_own
|
||||
t+ 12.7s ▶ 语音:「左滑右滑,可以转身。」
|
||||
t+ 12.7s 〰 震动:swipe(滑动识别)
|
||||
t+ 13.2s ♪ 音效 sfx/step_own
|
||||
t+ 13.7s ♪ 音效 sfx/bump
|
||||
t+ 13.2s 〰 震动:swipe(滑动识别)
|
||||
t+ 14.4s 〰 震动:error(做错了:两连短震)
|
||||
t+ 14.9s ♪ 音效 sfx/step_turn
|
||||
t+ 20.7s ♪ 音效 sfx/step_turn
|
||||
t+ 24.2s ♪ 音效 sfx/step_turn
|
||||
t+ 24.2s ▶ 语音:「双击,再发一次脉冲,不要钱。」
|
||||
t+ 24.2s 〰 震动:error(做错了:两连短震)
|
||||
t+ 26.4s ♪ 音效 sfx/pulse
|
||||
t+ 26.4s ▶ 语音:「听,回声回来了。」
|
||||
t+ 26.4s ▶ 语音:「上滑,随时听自己的状态。」
|
||||
t+ 26.7s ♪ 音效 sfx/side_wall_l
|
||||
t+ 26.7s ♪ 音效 sfx/side_wall_r
|
||||
t+ 27.2s ♪ 音效 sfx/echo_3
|
||||
t+ 27.2s ▶ 语音:「这是第一层。」
|
||||
t+ 27.3s ♪ 音效 sfx/mat_stone
|
||||
t+ 29.3s ▶ 语音:「你毫发无损。」
|
||||
t+ 31.4s ▶ 语音:「口袋空空。」
|
||||
t+ 33.5s ▶ 语音:「你面朝南。」
|
||||
t+ 33.5s ♫ BGM 切换 → bgm/menu
|
||||
t+ 33.5s ♪ 向导音:menu(系统界面)
|
||||
t+ 33.5s ▶ 语音:「菜单。单击切换,双击确认。」
|
||||
t+ 35.6s ▶ 语音:「返回探索。」
|
||||
t+ 35.6s ♫ BGM 切换 → bgm/explore
|
||||
t+ 35.6s ♪ 音效 sfx/step_turn
|
||||
t+ 35.6s ▶ 语音:「前面有东西!放心,它伤不到你。」
|
||||
t+ 36.8s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 38.0s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 39.0s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 39.0s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 39.2s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 39.2s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 40.2s ♫ BGM 切换 → bgm/battle(淡入 400ms)
|
||||
t+ 40.2s ♪ 向导音:battle(战斗/对抗)
|
||||
t+ 40.2s ▶ 语音:「盲眼蝠扑了过来!」
|
||||
t+ 42.3s ▶ 语音:「听到它的动静,双击格挡。」
|
||||
t+ 44.4s ♪ 音效 sfx/tel_small
|
||||
t+ 44.4s 〰 震动:beat(节拍点)
|
||||
t+ 45.6s ▶ 语音:「没挡住也别怕,它伤不到你。」
|
||||
t+ 47.7s ▶ 语音:「现在单击,挥拳打它。」
|
||||
t+ 49.8s ♪ 向导音:turn(轮到你)
|
||||
t+ 49.8s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】单击,抡空也打
|
||||
|
||||
t+ 49.8s ♪ 音效 sfx/atk_swing
|
||||
t+ 49.8s ♪ 音效 sfx/atk_hit
|
||||
t+ 49.8s ♪ 音效 sfx/tel_small
|
||||
t+ 49.8s 〰 震动:beat(节拍点)
|
||||
t+ 51.0s ▶ 语音:「没挡住也别怕,它伤不到你。」
|
||||
t+ 53.2s ▶ 语音:「现在单击,挥拳打它。」
|
||||
t+ 55.3s ♪ 向导音:turn(轮到你)
|
||||
t+ 55.3s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】单击,抡空也打
|
||||
|
||||
t+ 55.3s ♪ 音效 sfx/atk_swing
|
||||
t+ 55.3s ♪ 音效 sfx/atk_hit
|
||||
t+ 55.3s ♪ 音效 sfx/enemy_die
|
||||
t+ 55.3s ♪ 音效 sfx/coin
|
||||
t+ 55.3s ▶ 语音:「打中了,就是这样。」
|
||||
t+ 55.3s 〰 震动:success(成功长震)
|
||||
t+ 57.4s ▶ 语音:「战利不多。」
|
||||
t+ 59.5s ▶ 语音:「铁器的回声,就是下潜的楼梯。」
|
||||
t+ 63.0s ♪ 音效 sfx/step_turn
|
||||
t+ 67.3s ♪ 音效 sfx/bump
|
||||
t+ 67.5s ♪ 音效 sfx/step_turn
|
||||
t+ 67.5s ♪ 音效 sfx/step_own
|
||||
t+ 67.5s 〰 震动:swipe(滑动识别)
|
||||
t+ 68.0s ♪ 音效 sfx/step_own
|
||||
t+ 68.0s 〰 震动:swipe(滑动识别)
|
||||
t+ 68.5s ♪ 音效 sfx/step_turn
|
||||
t+ 68.5s ♪ 音效 sfx/pulse
|
||||
t+ 68.9s ♪ 音效 sfx/side_wall_l
|
||||
t+ 68.9s ♪ 音效 sfx/side_wall_r
|
||||
t+ 69.0s ♪ 音效 sfx/echo_2
|
||||
t+ 69.0s ♪ 音效 sfx/step_turn
|
||||
t+ 69.1s ♪ 音效 sfx/mat_stone
|
||||
t+ 69.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 69.1s ♪ 音效 sfx/step_turn
|
||||
t+ 69.1s ♪ 音效 sfx/step_own
|
||||
t+ 69.1s 〰 震动:swipe(滑动识别)
|
||||
t+ 69.6s ♪ 音效 sfx/bump
|
||||
t+ 69.6s ♪ 音效 sfx/step_turn
|
||||
t+ 69.6s ♪ 音效 sfx/step_own
|
||||
t+ 69.6s 〰 震动:swipe(滑动识别)
|
||||
t+ 70.1s ♪ 音效 sfx/step_own
|
||||
t+ 70.1s 〰 震动:swipe(滑动识别)
|
||||
t+ 70.6s ♪ 音效 sfx/pulse
|
||||
t+ 71.0s ♪ 音效 sfx/side_wall_l
|
||||
t+ 71.0s ♪ 音效 sfx/side_wall_r
|
||||
t+ 71.1s ♪ 音效 sfx/echo_2
|
||||
t+ 71.1s ♪ 音效 sfx/step_turn
|
||||
t+ 71.3s ♪ 音效 sfx/mat_stone
|
||||
t+ 71.3s ♪ 音效 sfx/step_turn
|
||||
t+ 71.3s ♪ 音效 sfx/step_own
|
||||
t+ 71.3s 〰 震动:swipe(滑动识别)
|
||||
t+ 71.8s ♪ 音效 sfx/bump
|
||||
t+ 71.8s ♪ 音效 sfx/step_turn
|
||||
t+ 71.8s ♪ 音效 sfx/step_own
|
||||
t+ 71.8s 〰 震动:swipe(滑动识别)
|
||||
t+ 72.3s ♪ 音效 sfx/step_own
|
||||
t+ 72.3s ▶ 语音:「楼梯就在脚下。单击,下潜。」
|
||||
t+ 72.3s 〰 震动:swipe(滑动识别)
|
||||
t+ 72.8s ♪ 音效 sfx/stairs_down
|
||||
t+ 72.8s ▶ 语音:「你顺着楼梯,往下潜。」
|
||||
t+ 74.9s ▶ 语音:「教学完了。地窟很深,小心走。」
|
||||
t+ 77.0s ▶ 语音:「这是第二层。」
|
||||
t+ 79.1s ♫ BGM 切换 → bgm/explore
|
||||
t+ 79.1s ♪ 向导音:explore(探索/安全)
|
||||
t+ 79.1s 【状态】总算从教学里滚出来了(可能跳了课,可能一路错过来的) 第 2 层黑暗里:单击发脉冲用回声看路,按住前进,左右滑转身,上滑状态,下滑菜单(BGM=bgm/explore,语速1)
|
||||
|
||||
#### 【玩家动作】手痒连点三下脉冲
|
||||
|
||||
t+ 79.1s ♪ 音效 sfx/pulse
|
||||
t+ 79.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 79.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 79.5s ♪ 音效 sfx/side_wall_l
|
||||
t+ 79.5s ♪ 音效 sfx/side_wall_r
|
||||
t+ 80.2s ♪ 音效 sfx/echo_4
|
||||
t+ 80.3s ♪ 音效 sfx/mat_stone
|
||||
t+ 80.9s ♪ 音效 sfx/mob_step_small_r
|
||||
|
||||
#### 【玩家动作】手痒连点三下脉冲
|
||||
|
||||
t+ 80.9s ♪ 音效 sfx/pulse
|
||||
t+ 80.9s 〰 震动:error(做错了:两连短震)
|
||||
t+ 80.9s 〰 震动:error(做错了:两连短震)
|
||||
t+ 80.9s ♪ 音效 sfx/mob_step_small_r
|
||||
t+ 80.9s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 81.1s ♪ 音效 sfx/mob_step_small_r
|
||||
t+ 81.2s ♪ 音效 sfx/side_wall_l
|
||||
t+ 81.2s ♪ 音效 sfx/side_wall_r
|
||||
t+ 82.0s ♪ 音效 sfx/echo_4
|
||||
t+ 82.1s ♪ 音效 sfx/mat_stone
|
||||
t+ 82.5s ♪ 音效 sfx/mob_step_small_r
|
||||
|
||||
#### 【玩家动作】手痒连点三下脉冲
|
||||
|
||||
t+ 82.5s ♪ 音效 sfx/pulse
|
||||
t+ 82.5s 〰 震动:error(做错了:两连短震)
|
||||
t+ 82.5s 〰 震动:error(做错了:两连短震)
|
||||
t+ 82.6s ♪ 音效 sfx/mob_step_small_r
|
||||
t+ 82.9s ♪ 音效 sfx/side_wall_l
|
||||
t+ 82.9s ♪ 音效 sfx/side_wall_r
|
||||
t+ 82.6s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 83.5s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 83.6s ♪ 音效 sfx/echo_4
|
||||
t+ 83.7s ♪ 音效 sfx/mat_stone
|
||||
t+ 84.1s ♪ 音效 sfx/pulse
|
||||
t+ 84.5s ♪ 音效 sfx/side_wall_l
|
||||
t+ 84.5s ♪ 音效 sfx/side_wall_r
|
||||
t+ 84.7s ♫ BGM 切换 → bgm/battle(淡入 400ms)
|
||||
t+ 84.7s ♪ 向导音:battle(战斗/对抗)
|
||||
t+ 84.7s ▶ 语音:「窟鼠窜了出来!」
|
||||
t+ 86.8s ♪ 向导音:turn(轮到你)
|
||||
t+ 86.8s 〰 震动:confirm(轻点确认)
|
||||
t+ 86.8s ▶ 语音:「它贴着你不放,不用转身。」
|
||||
t+ 86.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 88.9s ♪ 音效 sfx/hurt
|
||||
t+ 88.9s ▶ 语音:「你甩掉了它,被抓了一下。」
|
||||
t+ 88.9s 〰 震动:hit(受击重震)
|
||||
t+ 91.1s ♫ BGM 切换 → bgm/explore
|
||||
t+ 91.1s ♪ 向导音:explore(探索/安全)
|
||||
t+ 91.1s ♪ 音效 sfx/pulse
|
||||
t+ 91.4s ♪ 音效 sfx/side_wall_l
|
||||
t+ 91.4s ♪ 音效 sfx/side_wall_r
|
||||
t+ 91.9s 〰 震动:error(做错了:两连短震)
|
||||
t+ 92.2s ♪ 音效 sfx/echo_4
|
||||
t+ 92.3s ♪ 音效 sfx/mat_stone
|
||||
t+ 93.0s ♪ 音效 sfx/mob_step_small_r
|
||||
t+ 93.2s ♪ 音效 sfx/mob_step_small_r
|
||||
t+ 93.4s ♪ 音效 sfx/mob_step_small_r
|
||||
t+ 93.2s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 94.9s ♪ 音效 sfx/mob_step_small_r
|
||||
t+ 94.9s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 94.9s ♪ 音效 sfx/step_turn
|
||||
t+ 95.1s ♪ 音效 sfx/mob_step_small_l
|
||||
t+ 95.1s ♪ 音效 sfx/step_own
|
||||
t+ 95.1s 〰 震动:swipe(滑动识别)
|
||||
t+ 95.5s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 95.5s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 96.1s ♪ 音效 sfx/pulse
|
||||
t+ 96.4s ♪ 音效 sfx/side_wall_l
|
||||
t+ 96.4s ♪ 音效 sfx/side_wall_r
|
||||
t+ 96.9s ♪ 音效 sfx/echo_3
|
||||
t+ 97.0s ♪ 音效 sfx/mat_stone
|
||||
t+ 97.2s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 97.2s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 97.8s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 97.2s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 99.1s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 99.1s ♪ 音效 sfx/step_turn
|
||||
t+ 99.1s ♪ 音效 sfx/mob_step_small_r
|
||||
t+ 100.3s ♪ 音效 sfx/mob_step_small_r
|
||||
t+ 100.3s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 100.3s ♪ 音效 sfx/step_own
|
||||
t+ 100.3s 〰 震动:swipe(滑动识别)
|
||||
t+ 100.8s ♪ 音效 sfx/step_own
|
||||
t+ 100.8s 〰 震动:swipe(滑动识别)
|
||||
t+ 100.9s ♪ 音效 sfx/mob_step_small_l
|
||||
t+ 101.1s ▶ 语音:「这是第二层。」
|
||||
t+ 101.3s ♪ 音效 sfx/mob_step_small_r
|
||||
t+ 101.8s ♪ 音效 sfx/mob_step_small_r
|
||||
t+ 101.8s ♪ 音效 sfx/pulse
|
||||
t+ 102.2s ♪ 音效 sfx/side_wall_l
|
||||
t+ 102.2s ♪ 音效 sfx/side_wall_r
|
||||
t+ 102.3s ♪ 音效 sfx/echo_2
|
||||
t+ 102.4s ♪ 音效 sfx/mat_stone
|
||||
t+ 102.7s ♪ 音效 sfx/mob_step_small_l
|
||||
t+ 102.7s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 103.2s ▶ 语音:「你毫发无损。」
|
||||
t+ 103.4s ♪ 音效 sfx/mob_step_small_r
|
||||
t+ 104.0s ♪ 音效 sfx/mob_step_small_r
|
||||
t+ 104.0s ♪ 音效 sfx/step_turn
|
||||
t+ 104.4s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 104.4s ♪ 音效 sfx/step_own
|
||||
t+ 104.4s ▶ 语音:「楼梯就在脚下。单击,下潜。」
|
||||
t+ 104.4s 〰 震动:swipe(滑动识别)
|
||||
t+ 104.9s ♪ 音效 sfx/bump
|
||||
t+ 105.8s ♪ 音效 sfx/mob_step_small_r
|
||||
t+ 105.8s 〰 震动:heartbeat(心跳/倒计时)
|
||||
|
||||
#### 【玩家动作】正好站在楼梯上——单击下潜
|
||||
|
||||
t+ 105.8s ♪ 音效 sfx/stairs_down
|
||||
t+ 105.8s ▶ 语音:「你顺着楼梯,往下潜。」
|
||||
t+ 107.9s ▶ 语音:「这是第三层。」
|
||||
t+ 110.0s ♪ 向导音:explore(探索/安全)
|
||||
|
||||
#### 【玩家动作】手痒连点三下脉冲
|
||||
|
||||
t+ 110.0s ♪ 音效 sfx/pulse
|
||||
t+ 110.0s 〰 震动:error(做错了:两连短震)
|
||||
t+ 110.0s 〰 震动:error(做错了:两连短震)
|
||||
t+ 110.4s ♪ 音效 sfx/side_wall_l
|
||||
t+ 110.4s ♪ 音效 sfx/side_wall_r
|
||||
t+ 110.5s ♪ 音效 sfx/echo_2
|
||||
t+ 110.7s ♪ 音效 sfx/mat_stone
|
||||
t+ 111.8s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 111.8s ♪ 音效 sfx/pulse
|
||||
t+ 112.1s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 112.1s ♪ 音效 sfx/side_wall_l
|
||||
t+ 112.1s ♪ 音效 sfx/side_wall_r
|
||||
t+ 112.3s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 112.3s ♪ 音效 sfx/echo_2
|
||||
t+ 112.4s ♪ 音效 sfx/mat_stone
|
||||
t+ 112.3s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 113.9s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 113.9s ♪ 音效 sfx/step_turn
|
||||
t+ 114.2s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 114.2s ♪ 音效 sfx/step_own
|
||||
t+ 114.2s 〰 震动:swipe(滑动识别)
|
||||
t+ 114.4s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 114.4s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 114.7s ♪ 音效 sfx/pulse
|
||||
t+ 115.1s ♪ 音效 sfx/side_wall_l
|
||||
t+ 115.1s ♪ 音效 sfx/side_wall_r
|
||||
t+ 115.5s ♪ 音效 sfx/echo_3
|
||||
t+ 115.6s ♪ 音效 sfx/mat_stone
|
||||
t+ 116.0s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 116.2s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 116.2s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 117.8s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 117.8s ♪ 音效 sfx/step_turn
|
||||
t+ 117.8s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 118.2s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 118.2s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 118.2s ♪ 音效 sfx/bump
|
||||
t+ 119.7s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 120.0s ♪ 音效 sfx/pulse
|
||||
t+ 120.1s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 120.3s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 120.3s ♪ 音效 sfx/echo_1
|
||||
t+ 120.4s ♪ 音效 sfx/side_wall_l
|
||||
t+ 120.4s ♪ 音效 sfx/side_wall_r
|
||||
t+ 120.4s ♪ 音效 sfx/mat_stone
|
||||
t+ 120.1s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 121.4s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 121.8s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 122.0s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 122.0s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 122.0s ♪ 音效 sfx/step_turn
|
||||
t+ 123.7s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 123.7s ♪ 音效 sfx/step_own
|
||||
t+ 123.7s 〰 震动:swipe(滑动识别)
|
||||
t+ 123.7s ♫ BGM 切换 → bgm/battle(淡入 400ms)
|
||||
t+ 123.7s ♪ 向导音:battle(战斗/对抗)
|
||||
t+ 123.7s ▶ 语音:「蘑菇怪拦住了你!」
|
||||
t+ 125.9s ♪ 向导音:turn(轮到你)
|
||||
t+ 125.9s 〰 震动:confirm(轻点确认)
|
||||
t+ 125.9s 【状态】乱打:不格挡、逃不掉(Boss),一直挥拳 战斗中:你的血量毫发无损,等你出手(单击挥击,按住屏幕逃跑)(BGM=bgm/battle,语速1)
|
||||
|
||||
#### 【玩家动作】咬牙单击——挡不住了也要打
|
||||
|
||||
t+ 125.9s ♪ 音效 sfx/atk_swing
|
||||
t+ 125.9s ♪ 音效 sfx/atk_hit
|
||||
t+ 125.9s ♪ 音效 sfx/tel_bug
|
||||
t+ 125.9s 〰 震动:beat(节拍点)
|
||||
t+ 127.1s ♪ 音效 sfx/hurt
|
||||
t+ 127.1s ♪ 向导音:turn(轮到你)
|
||||
t+ 127.1s 〰 震动:hit(受击重震)
|
||||
t+ 127.1s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】喘一口气,再挥
|
||||
|
||||
|
||||
#### 【玩家动作】咬牙单击——挡不住了也要打
|
||||
|
||||
t+ 127.6s ♪ 音效 sfx/atk_swing
|
||||
t+ 127.6s ♪ 音效 sfx/atk_hit
|
||||
t+ 127.6s ♪ 音效 sfx/tel_bug
|
||||
t+ 127.6s 〰 震动:beat(节拍点)
|
||||
t+ 128.8s ♪ 音效 sfx/hurt
|
||||
t+ 128.8s ♪ 向导音:turn(轮到你)
|
||||
t+ 128.8s 〰 震动:hit(受击重震)
|
||||
t+ 128.8s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】喘一口气,再挥
|
||||
|
||||
|
||||
#### 【玩家动作】咬牙单击——挡不住了也要打
|
||||
|
||||
t+ 129.8s ♪ 音效 sfx/atk_swing
|
||||
t+ 129.8s ♪ 音效 sfx/atk_hit
|
||||
t+ 129.8s ♪ 音效 sfx/tel_bug
|
||||
t+ 129.8s 〰 震动:beat(节拍点)
|
||||
t+ 131.0s ♪ 音效 sfx/hurt
|
||||
t+ 131.0s ♪ 向导音:turn(轮到你)
|
||||
t+ 131.0s 〰 震动:hit(受击重震)
|
||||
t+ 131.0s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】喘一口气,再挥
|
||||
|
||||
|
||||
#### 【玩家动作】咬牙单击——挡不住了也要打
|
||||
|
||||
t+ 131.6s ♪ 音效 sfx/atk_swing
|
||||
t+ 131.6s ♪ 音效 sfx/atk_hit
|
||||
t+ 131.6s ♪ 音效 sfx/enemy_die
|
||||
t+ 131.6s ♪ 音效 sfx/coin
|
||||
t+ 131.6s ▶ 语音:「它倒下了。」
|
||||
t+ 131.6s 〰 震动:success(成功长震)
|
||||
t+ 133.7s ▶ 语音:「小有收获。」
|
||||
t+ 135.9s ♫ BGM 切换 → bgm/explore
|
||||
t+ 135.9s ♪ 向导音:explore(探索/安全)
|
||||
t+ 135.9s ♪ 音效 sfx/step_turn
|
||||
t+ 136.7s ♪ 音效 sfx/pulse
|
||||
t+ 137.0s ♪ 音效 sfx/echo_1
|
||||
t+ 137.1s ♪ 音效 sfx/side_wall_l
|
||||
t+ 137.1s ♪ 音效 sfx/side_wall_r
|
||||
t+ 137.1s ♪ 音效 sfx/mat_stone
|
||||
t+ 137.6s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 137.6s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 138.3s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 139.4s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 139.4s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 139.4s ♪ 音效 sfx/step_turn
|
||||
t+ 140.3s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 140.3s ♪ 音效 sfx/step_own
|
||||
t+ 140.3s ♫ BGM 切换 → bgm/battle(淡入 400ms)
|
||||
t+ 140.3s ♪ 向导音:battle(战斗/对抗)
|
||||
t+ 140.3s ▶ 语音:「蘑菇怪拦住了你!」
|
||||
t+ 140.3s 〰 震动:swipe(滑动识别)
|
||||
t+ 142.4s ♪ 向导音:turn(轮到你)
|
||||
t+ 142.4s 〰 震动:confirm(轻点确认)
|
||||
t+ 142.4s 【状态】乱打:不格挡、逃不掉(Boss),一直挥拳 战斗中:你的血量受了点伤,等你出手(单击挥击,按住屏幕逃跑)(BGM=bgm/battle,语速1)
|
||||
|
||||
#### 【玩家动作】咬牙单击——挡不住了也要打
|
||||
|
||||
t+ 142.4s ♪ 音效 sfx/atk_swing
|
||||
t+ 142.4s ♪ 音效 sfx/atk_hit
|
||||
t+ 142.4s ♪ 音效 sfx/tel_bug
|
||||
t+ 142.4s 〰 震动:beat(节拍点)
|
||||
t+ 143.6s ♪ 音效 sfx/hurt
|
||||
t+ 143.6s ♪ 向导音:turn(轮到你)
|
||||
t+ 143.6s 〰 震动:hit(受击重震)
|
||||
t+ 143.6s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】喘一口气,再挥
|
||||
|
||||
|
||||
#### 【玩家动作】咬牙单击——挡不住了也要打
|
||||
|
||||
t+ 150.3s ♪ 音效 sfx/atk_swing
|
||||
t+ 150.3s ♪ 音效 sfx/atk_hit
|
||||
t+ 150.3s ♪ 音效 sfx/tel_bug
|
||||
t+ 150.3s 〰 震动:beat(节拍点)
|
||||
t+ 151.5s ♪ 音效 sfx/hurt
|
||||
t+ 151.5s ♪ 向导音:turn(轮到你)
|
||||
t+ 151.5s 〰 震动:hit(受击重震)
|
||||
t+ 151.5s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】喘一口气,再挥
|
||||
|
||||
t+ 166.5s ♪ 向导音:nudge(看门狗轻提醒)
|
||||
t+ 166.5s ▶ 向导语音:「轮到你了。单击挥击。」
|
||||
|
||||
#### 【玩家动作】咬牙单击——挡不住了也要打
|
||||
|
||||
t+ 166.5s ♪ 音效 sfx/atk_swing
|
||||
t+ 166.5s ♪ 音效 sfx/atk_hit
|
||||
t+ 166.5s ♪ 音效 sfx/tel_bug
|
||||
t+ 166.5s 〰 震动:beat(节拍点)
|
||||
t+ 167.7s ♪ 音效 sfx/hurt
|
||||
t+ 167.7s ♪ 向导音:turn(轮到你)
|
||||
t+ 167.7s 〰 震动:hit(受击重震)
|
||||
t+ 167.7s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】喘一口气,再挥
|
||||
|
||||
|
||||
#### 【玩家动作】咬牙单击——挡不住了也要打
|
||||
|
||||
t+ 168.6s ♪ 音效 sfx/atk_swing
|
||||
t+ 168.6s ♪ 音效 sfx/atk_hit
|
||||
t+ 168.6s ♪ 音效 sfx/enemy_die
|
||||
t+ 168.6s ♪ 音效 sfx/coin
|
||||
t+ 168.6s ▶ 语音:「它倒下了。」
|
||||
t+ 168.6s 〰 震动:success(成功长震)
|
||||
t+ 170.8s ▶ 语音:「小有收获。」
|
||||
t+ 172.9s ♫ BGM 切换 → bgm/explore
|
||||
t+ 172.9s ♪ 向导音:explore(探索/安全)
|
||||
t+ 172.9s ♪ 音效 sfx/pulse
|
||||
t+ 173.1s ♪ 音效 sfx/echo_1
|
||||
t+ 173.2s ♪ 音效 sfx/side_wall_l
|
||||
t+ 173.2s ♪ 音效 sfx/side_wall_r
|
||||
t+ 173.2s ♪ 音效 sfx/mat_stone
|
||||
t+ 174.9s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 174.9s ♪ 音效 sfx/step_turn
|
||||
t+ 177.3s ♪ 音效 sfx/step_own
|
||||
t+ 177.3s 〰 震动:swipe(滑动识别)
|
||||
t+ 177.8s ♪ 音效 sfx/step_own
|
||||
t+ 177.8s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】手痒连点三下脉冲
|
||||
|
||||
t+ 178.3s ♪ 音效 sfx/pulse
|
||||
t+ 178.3s 〰 震动:error(做错了:两连短震)
|
||||
t+ 178.3s 〰 震动:error(做错了:两连短震)
|
||||
t+ 178.6s ♪ 音效 sfx/side_wall_l
|
||||
t+ 178.6s ♪ 音效 sfx/side_wall_r
|
||||
t+ 179.4s ♪ 音效 sfx/echo_4
|
||||
t+ 179.5s ♪ 音效 sfx/mat_stone
|
||||
t+ 179.5s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 181.3s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 181.3s ♪ 音效 sfx/pulse
|
||||
t+ 181.7s ♪ 音效 sfx/side_wall_l
|
||||
t+ 181.7s ♪ 音效 sfx/side_wall_r
|
||||
t+ 182.4s ♪ 音效 sfx/echo_4
|
||||
t+ 182.5s ♪ 音效 sfx/mat_stone
|
||||
t+ 183.5s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 183.5s ♪ 音效 sfx/step_turn
|
||||
t+ 185.4s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 185.4s ♪ 音效 sfx/bump
|
||||
t+ 187.7s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 190.1s ♪ 音效 sfx/mob_step_bug_c
|
||||
|
||||
#### 【玩家动作】手痒连点三下脉冲
|
||||
|
||||
t+ 190.1s ♪ 音效 sfx/pulse
|
||||
t+ 190.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 190.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 190.3s ♪ 音效 sfx/echo_1
|
||||
t+ 190.4s ♪ 音效 sfx/side_wall_l
|
||||
t+ 190.4s ♪ 音效 sfx/side_wall_r
|
||||
t+ 190.4s ♪ 音效 sfx/mat_stone
|
||||
t+ 192.3s ♪ 音效 sfx/mob_step_bug_c
|
||||
|
||||
#### 【玩家动作】手痒连点三下脉冲
|
||||
|
||||
t+ 192.3s ♪ 音效 sfx/pulse
|
||||
t+ 192.3s 〰 震动:error(做错了:两连短震)
|
||||
t+ 192.3s 〰 震动:error(做错了:两连短震)
|
||||
t+ 192.5s ♪ 音效 sfx/echo_1
|
||||
t+ 192.6s ♪ 音效 sfx/side_wall_l
|
||||
t+ 192.6s ♪ 音效 sfx/side_wall_r
|
||||
t+ 192.7s ♪ 音效 sfx/mat_stone
|
||||
t+ 194.2s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 194.2s ♪ 音效 sfx/pulse
|
||||
t+ 194.4s ♪ 音效 sfx/echo_1
|
||||
t+ 194.5s ♪ 音效 sfx/side_wall_l
|
||||
t+ 194.5s ♪ 音效 sfx/side_wall_r
|
||||
t+ 194.6s ♪ 音效 sfx/mat_stone
|
||||
t+ 196.5s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 196.5s ♪ 音效 sfx/step_turn
|
||||
t+ 197.9s ♪ 音效 sfx/step_own
|
||||
t+ 197.9s 〰 震动:swipe(滑动识别)
|
||||
t+ 198.4s ♪ 音效 sfx/step_own
|
||||
t+ 198.4s 〰 震动:swipe(滑动识别)
|
||||
t+ 198.6s ♪ 音效 sfx/mob_step_bug_r
|
||||
|
||||
#### 【玩家动作】手痒连点三下脉冲
|
||||
|
||||
t+ 198.9s ♪ 音效 sfx/pulse
|
||||
t+ 198.9s 〰 震动:error(做错了:两连短震)
|
||||
t+ 198.9s 〰 震动:error(做错了:两连短震)
|
||||
t+ 199.2s ♪ 音效 sfx/side_wall_l
|
||||
t+ 199.2s ♪ 音效 sfx/side_wall_r
|
||||
t+ 199.7s ♪ 音效 sfx/echo_3
|
||||
t+ 199.8s ♪ 音效 sfx/mat_stone
|
||||
t+ 200.7s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 200.7s ♪ 音效 sfx/pulse
|
||||
t+ 201.1s ♪ 音效 sfx/side_wall_l
|
||||
t+ 201.1s ♪ 音效 sfx/side_wall_r
|
||||
t+ 201.5s ♪ 音效 sfx/echo_3
|
||||
t+ 201.6s ♪ 音效 sfx/mat_stone
|
||||
t+ 202.2s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 202.9s ♪ 音效 sfx/step_turn
|
||||
t+ 204.3s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 204.3s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 204.3s ♪ 音效 sfx/step_own
|
||||
t+ 204.3s 〰 震动:swipe(滑动识别)
|
||||
t+ 204.8s ♪ 音效 sfx/step_own
|
||||
t+ 204.8s ♫ BGM 切换 → bgm/battle(淡入 400ms)
|
||||
t+ 204.8s ♪ 向导音:battle(战斗/对抗)
|
||||
t+ 204.8s ▶ 语音:「蘑菇怪拦住了你!」
|
||||
t+ 204.8s 〰 震动:swipe(滑动识别)
|
||||
t+ 205.3s 【状态】乱打:不格挡、逃不掉(Boss),一直挥拳 战斗播报中,先听着(语音播放中,语速1)
|
||||
t+ 206.9s ♪ 向导音:turn(轮到你)
|
||||
t+ 206.9s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】咬牙单击——挡不住了也要打
|
||||
|
||||
t+ 206.9s ♪ 音效 sfx/atk_swing
|
||||
t+ 206.9s ♪ 音效 sfx/atk_hit
|
||||
t+ 206.9s ♪ 音效 sfx/tel_bug
|
||||
t+ 206.9s 〰 震动:beat(节拍点)
|
||||
t+ 208.1s ♪ 音效 sfx/hurt
|
||||
t+ 208.1s ♪ 向导音:danger(危险)
|
||||
t+ 208.1s ♪ 向导音:turn(轮到你)
|
||||
t+ 208.1s 〰 震动:hit(受击重震)
|
||||
t+ 208.1s 〰 震动:warning(警告三连震)
|
||||
t+ 208.1s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】喘一口气,再挥
|
||||
|
||||
|
||||
#### 【玩家动作】咬牙单击——挡不住了也要打
|
||||
|
||||
t+ 214.8s ♪ 音效 sfx/atk_swing
|
||||
t+ 214.8s ♪ 音效 sfx/atk_hit
|
||||
t+ 214.8s ♪ 音效 sfx/tel_bug
|
||||
t+ 214.8s 〰 震动:beat(节拍点)
|
||||
t+ 216.0s ♪ 音效 sfx/hurt
|
||||
t+ 216.0s ♪ 向导音:turn(轮到你)
|
||||
t+ 216.0s 〰 震动:hit(受击重震)
|
||||
t+ 216.0s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】喘一口气,再挥
|
||||
|
||||
t+ 231.0s ♪ 向导音:nudge(看门狗轻提醒)
|
||||
t+ 231.0s ▶ 向导语音:「轮到你了。单击挥击。」
|
||||
|
||||
#### 【玩家动作】咬牙单击——挡不住了也要打
|
||||
|
||||
t+ 231.0s ♪ 音效 sfx/atk_swing
|
||||
t+ 231.0s ♪ 音效 sfx/atk_hit
|
||||
t+ 231.0s ♪ 音效 sfx/tel_bug
|
||||
t+ 231.0s 〰 震动:beat(节拍点)
|
||||
t+ 232.2s ♪ 音效 sfx/hurt
|
||||
t+ 232.2s ♪ 向导音:turn(轮到你)
|
||||
t+ 232.2s 〰 震动:hit(受击重震)
|
||||
t+ 232.2s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】喘一口气,再挥
|
||||
|
||||
|
||||
#### 【玩家动作】咬牙单击——挡不住了也要打
|
||||
|
||||
t+ 233.1s ♪ 音效 sfx/atk_swing
|
||||
t+ 233.1s ♪ 音效 sfx/atk_hit
|
||||
t+ 233.1s ♪ 音效 sfx/enemy_die
|
||||
t+ 233.1s ♪ 音效 sfx/coin
|
||||
t+ 233.1s ▶ 语音:「它倒下了。」
|
||||
t+ 233.1s 〰 震动:success(成功长震)
|
||||
t+ 235.3s ▶ 语音:「小有收获。」
|
||||
t+ 237.4s ▶ 语音:「你的拳脚更利落了。」
|
||||
t+ 239.5s ♫ BGM 切换 → bgm/explore
|
||||
t+ 239.5s ♪ 向导音:explore(探索/安全)
|
||||
|
||||
#### 【玩家动作】手痒连点三下脉冲
|
||||
|
||||
t+ 239.5s ♪ 音效 sfx/pulse
|
||||
t+ 239.5s 〰 震动:error(做错了:两连短震)
|
||||
t+ 239.5s 〰 震动:error(做错了:两连短震)
|
||||
t+ 239.7s ♪ 音效 sfx/echo_1
|
||||
t+ 239.8s ♪ 音效 sfx/side_wall_l
|
||||
t+ 239.8s ♪ 音效 sfx/side_wall_r
|
||||
t+ 239.9s ♪ 音效 sfx/mat_stair
|
||||
|
||||
#### 【玩家动作】手痒连点三下脉冲
|
||||
|
||||
t+ 244.5s ♪ 音效 sfx/pulse
|
||||
t+ 244.5s 〰 震动:error(做错了:两连短震)
|
||||
t+ 244.5s 〰 震动:error(做错了:两连短震)
|
||||
t+ 244.7s ♪ 音效 sfx/echo_1
|
||||
t+ 244.8s ♪ 音效 sfx/side_wall_l
|
||||
t+ 244.8s ♪ 音效 sfx/side_wall_r
|
||||
t+ 244.9s ♪ 音效 sfx/mat_stair
|
||||
t+ 249.5s ♪ 音效 sfx/step_turn
|
||||
t+ 254.5s ♪ 音效 sfx/pulse
|
||||
t+ 254.8s ♪ 音效 sfx/side_wall_l
|
||||
t+ 254.8s ♪ 音效 sfx/side_wall_r
|
||||
t+ 255.0s ♪ 音效 sfx/echo_2
|
||||
t+ 255.1s ♪ 音效 sfx/mat_stone
|
||||
t+ 259.5s ♪ 音效 sfx/step_turn
|
||||
t+ 264.5s ♪ 音效 sfx/step_own
|
||||
t+ 264.5s ♫ BGM 切换 → bgm/boss(淡入 400ms)
|
||||
t+ 264.5s ♪ 向导音:battle(战斗/对抗)
|
||||
t+ 264.5s ▶ 语音:「窟主石甲蟹,就在你面前。」
|
||||
t+ 264.5s 〰 震动:swipe(滑动识别)
|
||||
t+ 266.6s ♪ 向导音:turn(轮到你)
|
||||
t+ 266.6s 〰 震动:confirm(轻点确认)
|
||||
t+ 266.6s 【状态】乱打:不格挡、逃不掉(Boss),一直挥拳 战斗中:你的血量命悬一线,等你出手(单击挥击,按住屏幕逃跑)(BGM=bgm/boss,语速1)
|
||||
|
||||
#### 【玩家动作】咬牙单击——挡不住了也要打
|
||||
|
||||
t+ 266.6s ♪ 音效 sfx/atk_swing
|
||||
t+ 266.6s ♪ 音效 sfx/atk_hit
|
||||
t+ 266.6s ♪ 音效 sfx/tel_heavy
|
||||
t+ 266.6s 〰 震动:beat(节拍点)
|
||||
t+ 267.8s ♪ 音效 sfx/hurt
|
||||
t+ 267.8s ♫ BGM 切换 → bgm/menu
|
||||
t+ 267.8s ♪ 向导音:settle(结算)
|
||||
t+ 267.8s ▶ 语音:「你倒下了。」
|
||||
t+ 267.8s 〰 震动:hit(受击重震)
|
||||
t+ 267.8s 〰 震动:hit(受击重震)
|
||||
t+ 267.8s 【状态】乱打也被归因得明明白白,元进度照单全收 结算:死亡归因与元进度入账,单击再探一次(语音播放中,语速1)
|
||||
t+ 269.9s ▶ 语音:「你没挡住那记重击。」
|
||||
t+ 272.1s ▶ 语音:「下次,前摇声响时就双击。」
|
||||
t+ 272.1s ♪ 向导音:menu(系统界面)
|
||||
t+ 272.1s ▶ 语音:「这趟没带回什么。」
|
||||
t+ 274.2s ▶ 语音:「你到过中层。」
|
||||
t+ 274.2s ▶ 语音:「新的探窟,开始了。」
|
||||
t+ 276.3s ♫ BGM 切换 → bgm/explore
|
||||
t+ 276.3s ♪ 向导音:explore(探索/安全)
|
||||
t+ 276.3s ▶ 语音:「这是第一层。」
|
||||
t+ 276.3s 【状态】第二周目照样开局,压力测试全程零死锁,收工 第 1 层黑暗里:单击发脉冲用回声看路,按住前进,左右滑转身,上滑状态,下滑菜单(语音播放中,语速1)
|
||||
@@ -0,0 +1,867 @@
|
||||
# 试玩转写:《dungeon》
|
||||
|
||||
> 本文件是「玩家感知日志」:一位新手玩家的整局体验转写。语音列出了玩家听到的每句话全文,
|
||||
> 音效/BGM/震动按发生时间列出。「静默」段 = 玩家什么也听不到。手势是剧本注入的(模拟真人手部动作),
|
||||
> 非最优操作:包含犹豫、误操作与乱试。语音时长按语速估算(±20%),仅供节奏参考。
|
||||
t+ 0.0s (玩家点开游戏,轻触屏幕开始)
|
||||
t+ 0.0s ♫ BGM 切换 → bgm/menu
|
||||
t+ 0.0s ♪ 向导音:menu(系统界面)
|
||||
t+ 0.0s 【状态】盲眼探窟者睁开了耳朵,准备下窟 标题页:单击开始探窟,上滑听元进度(BGM=bgm/menu,语速1)
|
||||
|
||||
#### 【玩家动作】单击,开始
|
||||
|
||||
t+ 0.0s ▶ 语音:「新的探窟,开始了。」
|
||||
t+ 2.1s ♫ BGM 切换 → bgm/explore
|
||||
t+ 2.1s ♪ 向导音:explore(探索/安全)
|
||||
t+ 2.1s ▶ 语音:「你在黑暗中醒来。这里是回声地窟。」
|
||||
t+ 2.1s 【状态】教学开始:三句开场白 教学演练第 0 步,跟着旁白做(语音播放中,语速1)
|
||||
t+ 4.2s ▶ 语音:「伸手不见五指,声音就是你的眼睛。」
|
||||
t+ 6.4s ▶ 语音:「先学会用耳朵看。单击,发出声波脉冲。」
|
||||
|
||||
#### 【玩家动作】单击回应「先学会用耳朵看」
|
||||
|
||||
|
||||
#### 【玩家动作】单击——人生第一声脉冲
|
||||
|
||||
t+ 8.5s ♪ 音效 sfx/pulse
|
||||
t+ 8.5s ▶ 语音:「听,回声回来了。」
|
||||
t+ 8.8s ♪ 音效 sfx/side_open_l
|
||||
t+ 8.8s ♪ 音效 sfx/side_open_r
|
||||
t+ 9.0s ♪ 音效 sfx/echo_2
|
||||
t+ 9.1s ♪ 音效 sfx/mat_stone
|
||||
t+ 10.6s ▶ 语音:「回声回来越快,墙就越近。」
|
||||
t+ 10.6s 【状态】回声回来了,听墙的距离 教学演练第 2 步,跟着旁白做(语音播放中,语速1)
|
||||
|
||||
#### 【玩家动作】单击继续
|
||||
|
||||
t+ 12.7s ▶ 语音:「两侧的回声,发闷是墙,空旷是通路。」
|
||||
|
||||
#### 【玩家动作】单击继续(侧向规则听完了)
|
||||
|
||||
t+ 14.8s ♪ 音效 sfx/step_turn
|
||||
t+ 14.8s ▶ 语音:「按住屏幕不放,你就往前走。」
|
||||
|
||||
#### 【玩家动作】按住屏幕不放——脚步声起,往前走
|
||||
|
||||
t+ 14.8s ♪ 音效 sfx/step_own
|
||||
t+ 14.8s 〰 震动:swipe(滑动识别)
|
||||
t+ 15.3s ♪ 音效 sfx/step_own
|
||||
t+ 15.3s ▶ 语音:「左滑右滑,可以转身。」
|
||||
t+ 15.8s ♪ 音效 sfx/bump
|
||||
t+ 15.3s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】松开,停下
|
||||
|
||||
|
||||
#### 【玩家动作】左滑,转身
|
||||
|
||||
t+ 16.5s ♪ 音效 sfx/step_turn
|
||||
|
||||
#### 【玩家动作】右滑,转回来
|
||||
|
||||
t+ 17.5s ♪ 音效 sfx/step_turn
|
||||
t+ 17.5s ▶ 语音:「双击,再发一次脉冲,不要钱。」
|
||||
|
||||
#### 【玩家动作】双击——再发一次脉冲,不要钱
|
||||
|
||||
t+ 17.5s ♪ 音效 sfx/pulse
|
||||
t+ 17.5s ▶ 语音:「听,回声回来了。」
|
||||
t+ 17.7s ♪ 音效 sfx/echo_1
|
||||
t+ 17.8s ♪ 音效 sfx/side_wall_l
|
||||
t+ 17.8s ♪ 音效 sfx/side_wall_r
|
||||
t+ 17.8s ♪ 音效 sfx/mat_stone
|
||||
t+ 19.6s ▶ 语音:「上滑,随时听自己的状态。」
|
||||
t+ 21.7s ▶ 语音:「下滑,打开菜单。」
|
||||
|
||||
#### 【玩家动作】上滑,听自己的状态
|
||||
|
||||
t+ 21.7s ▶ 语音:「这是第一层。」
|
||||
t+ 23.8s ▶ 语音:「你毫发无损。」
|
||||
t+ 25.9s ▶ 语音:「口袋空空。」
|
||||
t+ 28.1s ▶ 语音:「你面朝东。」
|
||||
|
||||
#### 【玩家动作】下滑,打开菜单
|
||||
|
||||
t+ 28.1s ♫ BGM 切换 → bgm/menu
|
||||
t+ 28.1s ♪ 向导音:menu(系统界面)
|
||||
t+ 28.1s ▶ 语音:「菜单。单击切换,双击确认。」
|
||||
t+ 30.2s ▶ 语音:「返回探索。」
|
||||
|
||||
#### 【玩家动作】再下滑,关上菜单
|
||||
|
||||
t+ 30.2s ♪ 向导音:explore(探索/安全)
|
||||
t+ 30.2s ♫ BGM 切换 → bgm/explore
|
||||
t+ 30.2s ♪ 音效 sfx/step_turn
|
||||
t+ 30.2s ♪ 音效 sfx/step_turn
|
||||
t+ 30.2s ▶ 语音:「前面有东西!放心,它伤不到你。」
|
||||
t+ 30.2s 【状态】「前面有东西!放心,它伤不到你」——等它扑上来 教学演练第 8 步,跟着旁白做(语音播放中,语速1)
|
||||
t+ 31.4s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 32.6s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 32.6s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 33.5s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 33.5s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 33.8s ♫ BGM 切换 → bgm/battle(淡入 400ms)
|
||||
t+ 33.8s ♪ 向导音:battle(战斗/对抗)
|
||||
t+ 33.8s ▶ 语音:「盲眼蝠扑了过来!」
|
||||
t+ 33.8s 【状态】教学怪扑到了面前 战斗播报中,先听着(语音播放中,语速1)
|
||||
t+ 35.9s ▶ 语音:「听到它的动静,双击格挡。」
|
||||
t+ 38.0s ♪ 音效 sfx/tel_small
|
||||
t+ 38.0s 〰 震动:beat(节拍点)
|
||||
|
||||
#### 【玩家动作】听到它的动静——双击,格挡
|
||||
|
||||
t+ 38.0s ♪ 音效 sfx/parry
|
||||
t+ 38.0s 〰 震动:confirm(轻点确认)
|
||||
t+ 39.2s ▶ 语音:「挡住了!」
|
||||
t+ 41.3s ▶ 语音:「现在单击,挥拳打它。」
|
||||
t+ 43.5s ♪ 向导音:turn(轮到你)
|
||||
t+ 43.5s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】单击挥拳,两拳放倒它
|
||||
|
||||
t+ 43.5s ♪ 音效 sfx/atk_swing
|
||||
t+ 43.5s ♪ 音效 sfx/atk_hit
|
||||
t+ 43.5s ♪ 音效 sfx/tel_small
|
||||
t+ 43.5s 〰 震动:beat(节拍点)
|
||||
t+ 43.9s ♪ 音效 sfx/parry
|
||||
t+ 43.9s 〰 震动:confirm(轻点确认)
|
||||
t+ 44.7s ▶ 语音:「挡住了!」
|
||||
t+ 46.8s ▶ 语音:「现在单击,挥拳打它。」
|
||||
t+ 48.9s ♪ 向导音:turn(轮到你)
|
||||
t+ 48.9s 〰 震动:confirm(轻点确认)
|
||||
t+ 48.9s ♪ 音效 sfx/atk_swing
|
||||
t+ 48.9s ♪ 音效 sfx/atk_hit
|
||||
t+ 48.9s ♪ 音效 sfx/enemy_die
|
||||
t+ 48.9s ♪ 音效 sfx/coin
|
||||
t+ 48.9s ▶ 语音:「打中了,就是这样。」
|
||||
t+ 48.9s 〰 震动:success(成功长震)
|
||||
t+ 51.0s ▶ 语音:「战利不多。」
|
||||
t+ 53.1s ♫ BGM 切换 → bgm/explore(淡入 400ms)
|
||||
t+ 53.1s ▶ 语音:「铁器的回声,就是下潜的楼梯。」
|
||||
t+ 53.1s 【状态】教学战获胜——「打中了,就是这样」 教学演练第 9 步,跟着旁白做(语音播放中,语速1)
|
||||
|
||||
#### 【玩家动作】单击,听听楼梯的铁器回声
|
||||
|
||||
t+ 53.1s ♪ 音效 sfx/pulse
|
||||
t+ 53.5s ♪ 音效 sfx/side_wall_l
|
||||
t+ 53.5s ♪ 音效 sfx/side_wall_r
|
||||
t+ 54.2s ♪ 音效 sfx/echo_4
|
||||
t+ 54.4s ♪ 音效 sfx/mat_stone
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 56.7s ♪ 音效 sfx/pulse
|
||||
t+ 57.0s ♪ 音效 sfx/side_wall_l
|
||||
t+ 57.0s ♪ 音效 sfx/side_wall_r
|
||||
t+ 57.8s ♪ 音效 sfx/echo_4
|
||||
t+ 57.9s ♪ 音效 sfx/mat_stone
|
||||
t+ 60.9s ♪ 音效 sfx/step_own
|
||||
t+ 60.9s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 61.1s ♪ 音效 sfx/pulse
|
||||
t+ 61.5s ♪ 音效 sfx/side_open_l
|
||||
t+ 61.5s ♪ 音效 sfx/side_open_r
|
||||
t+ 62.2s ♪ 音效 sfx/echo_4
|
||||
t+ 62.4s ♪ 音效 sfx/mat_stone
|
||||
t+ 69.1s ♪ 向导音:nudge(看门狗轻提醒)
|
||||
t+ 69.1s ♪ 向导音:watchdog(看门狗升级)
|
||||
t+ 69.1s ♪ 音效 sfx/step_turn
|
||||
t+ 77.1s ♪ 向导音:nudge(看门狗轻提醒)
|
||||
t+ 77.1s ♪ 向导音:watchdog(看门狗升级)
|
||||
t+ 77.1s ♪ 音效 sfx/step_own
|
||||
t+ 77.1s ♪ 音效 sfx/coin
|
||||
t+ 77.1s ▶ 语音:「捡到一大袋金币。」
|
||||
t+ 77.1s 〰 震动:swipe(滑动识别)
|
||||
t+ 77.1s 〰 震动:pickup(获得)
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 77.6s ♪ 音效 sfx/pulse
|
||||
t+ 77.9s ♪ 音效 sfx/echo_1
|
||||
t+ 78.0s ♪ 音效 sfx/side_wall_l
|
||||
t+ 78.0s ♪ 音效 sfx/side_open_r
|
||||
t+ 78.0s ♪ 音效 sfx/mat_stone
|
||||
t+ 85.6s ♪ 向导音:nudge(看门狗轻提醒)
|
||||
t+ 85.6s ♪ 向导音:watchdog(看门狗升级)
|
||||
t+ 85.6s ♪ 音效 sfx/step_turn
|
||||
t+ 93.6s ♪ 向导音:nudge(看门狗轻提醒)
|
||||
t+ 93.6s ♪ 向导音:watchdog(看门狗升级)
|
||||
t+ 93.6s ♪ 音效 sfx/step_own
|
||||
t+ 93.6s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 94.1s ♪ 音效 sfx/pulse
|
||||
t+ 94.5s ♪ 音效 sfx/side_open_l
|
||||
t+ 94.5s ♪ 音效 sfx/side_open_r
|
||||
t+ 94.9s ♪ 音效 sfx/echo_3
|
||||
t+ 95.1s ♪ 音效 sfx/mat_stone
|
||||
t+ 102.1s ♪ 向导音:nudge(看门狗轻提醒)
|
||||
t+ 102.1s ♪ 向导音:watchdog(看门狗升级)
|
||||
t+ 102.1s ♪ 音效 sfx/step_turn
|
||||
t+ 110.1s ♪ 向导音:nudge(看门狗轻提醒)
|
||||
t+ 110.1s ♪ 向导音:watchdog(看门狗升级)
|
||||
t+ 110.1s ♪ 音效 sfx/step_own
|
||||
t+ 110.1s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 110.6s ♪ 音效 sfx/pulse
|
||||
t+ 110.9s ♪ 音效 sfx/echo_1
|
||||
t+ 111.0s ♪ 音效 sfx/side_wall_l
|
||||
t+ 111.0s ♪ 音效 sfx/side_open_r
|
||||
t+ 111.0s ♪ 音效 sfx/mat_stone
|
||||
t+ 118.6s ♪ 向导音:nudge(看门狗轻提醒)
|
||||
t+ 118.6s ♪ 向导音:watchdog(看门狗升级)
|
||||
t+ 118.6s ♪ 音效 sfx/step_turn
|
||||
t+ 126.6s ♪ 向导音:nudge(看门狗轻提醒)
|
||||
t+ 126.6s ♪ 向导音:watchdog(看门狗升级)
|
||||
t+ 126.6s ♪ 音效 sfx/step_own
|
||||
t+ 126.6s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 127.1s ♪ 音效 sfx/pulse
|
||||
t+ 127.5s ♪ 音效 sfx/side_open_l
|
||||
t+ 127.5s ♪ 音效 sfx/side_open_r
|
||||
t+ 127.9s ♪ 音效 sfx/echo_3
|
||||
t+ 128.1s ♪ 音效 sfx/mat_stone
|
||||
t+ 135.1s ♪ 向导音:nudge(看门狗轻提醒)
|
||||
t+ 135.1s ♪ 向导音:watchdog(看门狗升级)
|
||||
t+ 135.1s ♪ 音效 sfx/step_own
|
||||
t+ 135.1s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 135.6s ♪ 音效 sfx/pulse
|
||||
t+ 136.0s ♪ 音效 sfx/side_open_l
|
||||
t+ 136.0s ♪ 音效 sfx/side_open_r
|
||||
t+ 136.1s ♪ 音效 sfx/echo_2
|
||||
t+ 136.3s ♪ 音效 sfx/mat_stone
|
||||
t+ 143.6s ♪ 向导音:nudge(看门狗轻提醒)
|
||||
t+ 143.6s ♪ 向导音:watchdog(看门狗升级)
|
||||
t+ 143.6s ♪ 音效 sfx/step_turn
|
||||
t+ 151.6s ♪ 向导音:nudge(看门狗轻提醒)
|
||||
t+ 151.6s ♪ 向导音:watchdog(看门狗升级)
|
||||
t+ 151.6s ♪ 音效 sfx/step_own
|
||||
t+ 151.6s ▶ 语音:「楼梯就在脚下。单击,下潜。」
|
||||
t+ 151.6s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】踏上楼梯格——「楼梯就在脚下」
|
||||
|
||||
|
||||
#### 【玩家动作】铁器就在脚下——单击,下潜
|
||||
|
||||
t+ 152.1s ♪ 音效 sfx/stairs_down
|
||||
t+ 152.1s ▶ 语音:「你顺着楼梯,往下潜。」
|
||||
t+ 154.3s ▶ 语音:「教学完了。地窟很深,小心走。」
|
||||
t+ 156.4s ▶ 语音:「这是第二层。」
|
||||
t+ 158.5s ♪ 向导音:explore(探索/安全)
|
||||
t+ 158.5s 【状态】教学完了。第二层,真正的地窟从这里开始 第 2 层黑暗里:单击发脉冲用回声看路,按住前进,左右滑转身,上滑状态,下滑菜单(BGM=bgm/explore,语速1)
|
||||
|
||||
#### 【玩家动作】单击脉冲,探一探第 2 层
|
||||
|
||||
t+ 158.5s ♪ 音效 sfx/pulse
|
||||
t+ 158.8s ♪ 音效 sfx/side_open_l
|
||||
t+ 158.8s ♪ 音效 sfx/side_wall_r
|
||||
t+ 159.3s ♪ 音效 sfx/echo_3
|
||||
t+ 159.4s ♪ 音效 sfx/mat_stone
|
||||
t+ 160.9s ♪ 音效 sfx/mob_step_small_l
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 160.9s ♪ 音效 sfx/pulse
|
||||
t+ 160.9s ♪ 音效 sfx/mob_step_small_l
|
||||
t+ 160.9s ♪ 音效 sfx/mob_step_small_l
|
||||
t+ 161.3s ♪ 音效 sfx/side_open_l
|
||||
t+ 161.3s ♪ 音效 sfx/side_wall_r
|
||||
t+ 161.7s ♪ 音效 sfx/echo_3
|
||||
t+ 161.8s ♪ 音效 sfx/mat_stone
|
||||
t+ 162.5s ♪ 音效 sfx/mob_step_small_l
|
||||
t+ 162.6s ♪ 音效 sfx/mob_step_small_l
|
||||
t+ 162.9s ♪ 音效 sfx/mob_step_small_l
|
||||
t+ 162.5s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 163.5s ♪ 音效 sfx/step_turn
|
||||
t+ 164.1s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 164.1s ♪ 音效 sfx/step_own
|
||||
t+ 164.1s 〰 震动:swipe(滑动识别)
|
||||
t+ 164.1s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 164.4s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 164.4s ♫ BGM 切换 → bgm/battle(淡入 400ms)
|
||||
t+ 164.4s ♪ 向导音:battle(战斗/对抗)
|
||||
t+ 164.4s ▶ 语音:「窟鼠窜了出来!」
|
||||
t+ 164.4s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 166.6s ♪ 向导音:turn(轮到你)
|
||||
t+ 166.6s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】单击,挥击
|
||||
|
||||
t+ 166.6s ♪ 音效 sfx/atk_swing
|
||||
t+ 166.6s ♪ 音效 sfx/atk_hit
|
||||
t+ 166.6s ♪ 音效 sfx/tel_small
|
||||
t+ 166.6s 〰 震动:beat(节拍点)
|
||||
t+ 167.8s ♪ 音效 sfx/hurt
|
||||
t+ 167.8s ♪ 向导音:turn(轮到你)
|
||||
t+ 167.8s 〰 震动:hit(受击重震)
|
||||
t+ 167.8s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】单击,挥击
|
||||
|
||||
t+ 167.8s ♪ 音效 sfx/atk_swing
|
||||
t+ 167.8s ♪ 音效 sfx/atk_hit
|
||||
t+ 167.8s ♪ 音效 sfx/tel_small
|
||||
t+ 167.8s 〰 震动:beat(节拍点)
|
||||
|
||||
#### 【玩家动作】前摇声响——双击,格挡
|
||||
|
||||
t+ 168.5s ♪ 音效 sfx/parry
|
||||
t+ 168.5s 〰 震动:confirm(轻点确认)
|
||||
t+ 169.0s ▶ 语音:「挡下了大半!」
|
||||
t+ 171.1s ♪ 向导音:turn(轮到你)
|
||||
t+ 171.1s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】单击,挥击
|
||||
|
||||
t+ 171.1s ♪ 音效 sfx/atk_swing
|
||||
t+ 171.1s ♪ 音效 sfx/atk_hit
|
||||
t+ 171.1s ♪ 音效 sfx/enemy_die
|
||||
t+ 171.1s ♪ 音效 sfx/coin
|
||||
t+ 171.1s ▶ 语音:「它倒下了。」
|
||||
t+ 171.1s 〰 震动:success(成功长震)
|
||||
t+ 173.2s ▶ 语音:「战利不多。」
|
||||
t+ 175.3s ♫ BGM 切换 → bgm/explore
|
||||
t+ 175.3s ♪ 向导音:explore(探索/安全)
|
||||
t+ 177.3s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 177.4s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 177.4s ♫ BGM 切换 → bgm/battle(淡入 400ms)
|
||||
t+ 177.4s ♪ 向导音:battle(战斗/对抗)
|
||||
t+ 177.4s ▶ 语音:「窟鼠窜了出来!」
|
||||
t+ 177.4s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 179.5s ♪ 向导音:turn(轮到你)
|
||||
t+ 179.5s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】单击,挥击
|
||||
|
||||
t+ 179.5s ♪ 音效 sfx/atk_swing
|
||||
t+ 179.5s ♪ 音效 sfx/atk_hit
|
||||
t+ 179.5s ♪ 音效 sfx/tel_small
|
||||
t+ 179.5s 〰 震动:beat(节拍点)
|
||||
t+ 180.7s ♪ 音效 sfx/hurt
|
||||
t+ 180.7s ♪ 向导音:turn(轮到你)
|
||||
t+ 180.7s 〰 震动:hit(受击重震)
|
||||
t+ 180.7s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】单击,挥击
|
||||
|
||||
t+ 180.7s ♪ 音效 sfx/atk_swing
|
||||
t+ 180.7s ♪ 音效 sfx/atk_hit
|
||||
t+ 180.7s ♪ 音效 sfx/tel_small
|
||||
t+ 180.7s 〰 震动:beat(节拍点)
|
||||
|
||||
#### 【玩家动作】前摇声响——双击,格挡
|
||||
|
||||
t+ 181.5s ♪ 音效 sfx/parry
|
||||
t+ 181.5s 〰 震动:confirm(轻点确认)
|
||||
t+ 181.9s ▶ 语音:「挡下了大半!」
|
||||
t+ 184.0s ♪ 向导音:turn(轮到你)
|
||||
t+ 184.0s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】单击,挥击
|
||||
|
||||
t+ 184.0s ♪ 音效 sfx/atk_swing
|
||||
t+ 184.0s ♪ 音效 sfx/atk_hit
|
||||
t+ 184.0s ♪ 音效 sfx/enemy_die
|
||||
t+ 184.0s ♪ 音效 sfx/coin
|
||||
t+ 184.0s ▶ 语音:「它倒下了。」
|
||||
t+ 184.0s 〰 震动:success(成功长震)
|
||||
t+ 186.1s ▶ 语音:「战利不多。」
|
||||
t+ 188.2s ♫ BGM 切换 → bgm/explore
|
||||
t+ 188.2s ♪ 向导音:explore(探索/安全)
|
||||
t+ 190.1s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 192.2s ♪ 音效 sfx/mob_step_small_c
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 192.2s ♪ 音效 sfx/pulse
|
||||
t+ 192.5s ♪ 音效 sfx/side_open_l
|
||||
t+ 192.5s ♪ 音效 sfx/side_open_r
|
||||
t+ 193.3s ♪ 音效 sfx/echo_4
|
||||
t+ 193.4s ♪ 音效 sfx/mat_stone
|
||||
t+ 194.2s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 194.2s ♪ 音效 sfx/step_turn
|
||||
t+ 196.5s ♪ 音效 sfx/mob_step_small_r
|
||||
t+ 196.5s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 196.5s ♪ 音效 sfx/step_own
|
||||
t+ 196.5s ♪ 音效 sfx/coin
|
||||
t+ 196.5s ▶ 语音:「捡到一大袋金币。」
|
||||
t+ 196.5s 〰 震动:swipe(滑动识别)
|
||||
t+ 196.5s 〰 震动:pickup(获得)
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 197.0s ♪ 音效 sfx/pulse
|
||||
t+ 197.3s ♪ 音效 sfx/echo_1
|
||||
t+ 197.4s ♪ 音效 sfx/side_open_l
|
||||
t+ 197.4s ♪ 音效 sfx/side_open_r
|
||||
t+ 197.4s ♪ 音效 sfx/mat_stone
|
||||
t+ 198.3s ♪ 音效 sfx/mob_step_small_r
|
||||
t+ 198.3s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 200.5s ♪ 音效 sfx/mob_step_small_r
|
||||
t+ 200.5s ♫ BGM 切换 → bgm/battle(淡入 400ms)
|
||||
t+ 200.5s ♪ 向导音:battle(战斗/对抗)
|
||||
t+ 200.5s ▶ 语音:「窟鼠窜了出来!」
|
||||
t+ 200.5s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 202.7s ♪ 向导音:turn(轮到你)
|
||||
t+ 202.7s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】单击,挥击
|
||||
|
||||
t+ 204.6s ♪ 音效 sfx/atk_swing
|
||||
t+ 204.6s ♪ 音效 sfx/atk_hit
|
||||
t+ 204.6s ♪ 音效 sfx/tel_small
|
||||
t+ 204.6s 〰 震动:beat(节拍点)
|
||||
t+ 205.8s ♪ 音效 sfx/hurt
|
||||
t+ 205.8s ♪ 向导音:turn(轮到你)
|
||||
t+ 205.8s 〰 震动:hit(受击重震)
|
||||
t+ 205.8s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】单击,挥击
|
||||
|
||||
t+ 205.8s ♪ 音效 sfx/atk_swing
|
||||
t+ 205.8s ♪ 音效 sfx/atk_hit
|
||||
t+ 205.8s ♪ 音效 sfx/tel_small
|
||||
t+ 205.8s 〰 震动:beat(节拍点)
|
||||
|
||||
#### 【玩家动作】前摇声响——双击,格挡
|
||||
|
||||
t+ 206.6s ♪ 音效 sfx/parry
|
||||
t+ 206.6s 〰 震动:confirm(轻点确认)
|
||||
t+ 207.0s ▶ 语音:「挡下了大半!」
|
||||
t+ 209.1s ♪ 向导音:turn(轮到你)
|
||||
t+ 209.1s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】单击,挥击
|
||||
|
||||
t+ 209.1s ♪ 音效 sfx/atk_swing
|
||||
t+ 209.1s ♪ 音效 sfx/atk_hit
|
||||
t+ 209.1s ♪ 音效 sfx/enemy_die
|
||||
t+ 209.1s ♪ 音效 sfx/coin
|
||||
t+ 209.1s ▶ 语音:「它倒下了。」
|
||||
t+ 209.1s 〰 震动:success(成功长震)
|
||||
t+ 211.2s ▶ 语音:「战利不多。」
|
||||
t+ 213.3s ▶ 语音:「你的拳脚更利落了。」
|
||||
t+ 215.5s ♫ BGM 切换 → bgm/explore
|
||||
t+ 215.5s ♪ 向导音:explore(探索/安全)
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 220.5s ♪ 音效 sfx/pulse
|
||||
t+ 220.7s ♪ 音效 sfx/echo_1
|
||||
t+ 220.8s ♪ 音效 sfx/side_open_l
|
||||
t+ 220.8s ♪ 音效 sfx/side_open_r
|
||||
t+ 220.8s ♪ 音效 sfx/mat_stone
|
||||
t+ 225.5s ♪ 音效 sfx/step_turn
|
||||
t+ 230.5s ♪ 音效 sfx/step_own
|
||||
t+ 230.5s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 231.0s ♪ 音效 sfx/pulse
|
||||
t+ 231.3s ♪ 音效 sfx/side_wall_l
|
||||
t+ 231.3s ♪ 音效 sfx/side_open_r
|
||||
t+ 231.5s ♪ 音效 sfx/echo_2
|
||||
t+ 231.6s ♪ 音效 sfx/mat_stair
|
||||
t+ 235.5s ♪ 音效 sfx/step_own
|
||||
t+ 235.5s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 236.0s ♪ 音效 sfx/pulse
|
||||
t+ 236.2s ♪ 音效 sfx/echo_1
|
||||
t+ 236.3s ♪ 音效 sfx/side_wall_l
|
||||
t+ 236.3s ♪ 音效 sfx/side_open_r
|
||||
t+ 236.3s ♪ 音效 sfx/mat_stair
|
||||
t+ 240.5s ♪ 音效 sfx/step_own
|
||||
t+ 240.5s ▶ 语音:「楼梯就在脚下。单击,下潜。」
|
||||
t+ 240.5s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】铁器就在脚下——单击,下潜
|
||||
|
||||
t+ 241.0s ♪ 音效 sfx/stairs_down
|
||||
t+ 241.0s ▶ 语音:「你顺着楼梯,往下潜。」
|
||||
t+ 243.1s ▶ 语音:「这是第三层。」
|
||||
t+ 243.1s 【状态】第三层——窟主的地界 顺着楼梯,往下潜……(语音播放中,语速1)
|
||||
|
||||
#### 【玩家动作】脉冲听路,朝楼梯摸过去
|
||||
|
||||
t+ 245.2s ♪ 向导音:explore(探索/安全)
|
||||
t+ 247.0s ♪ 音效 sfx/mob_step_bug_r
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 247.0s ♪ 音效 sfx/pulse
|
||||
t+ 247.2s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 247.3s ♪ 音效 sfx/side_open_l
|
||||
t+ 247.3s ♪ 音效 sfx/side_open_r
|
||||
t+ 247.5s ♪ 音效 sfx/echo_2
|
||||
t+ 247.6s ♪ 音效 sfx/mat_stone
|
||||
t+ 247.6s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 249.2s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 249.2s ♪ 音效 sfx/step_turn
|
||||
t+ 249.5s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 249.5s ♪ 音效 sfx/step_turn
|
||||
t+ 250.0s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 250.0s ♪ 音效 sfx/step_own
|
||||
t+ 250.0s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 250.5s ♪ 音效 sfx/pulse
|
||||
t+ 250.9s ♪ 音效 sfx/side_wall_l
|
||||
t+ 250.9s ♪ 音效 sfx/side_wall_r
|
||||
t+ 251.1s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 251.1s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 251.6s ♪ 音效 sfx/echo_4
|
||||
t+ 251.7s ♪ 音效 sfx/mat_stone
|
||||
t+ 251.8s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 252.6s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 252.6s ♪ 音效 sfx/step_own
|
||||
t+ 252.6s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 253.1s ♪ 音效 sfx/pulse
|
||||
t+ 253.2s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 253.4s ♪ 音效 sfx/side_open_l
|
||||
t+ 253.4s ♪ 音效 sfx/side_wall_r
|
||||
t+ 254.2s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 254.2s ♪ 音效 sfx/echo_4
|
||||
t+ 254.3s ♪ 音效 sfx/mat_stone
|
||||
t+ 254.4s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 255.2s ♪ 音效 sfx/step_turn
|
||||
t+ 255.3s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 256.0s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 256.0s ♪ 音效 sfx/step_own
|
||||
t+ 256.0s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 256.5s ♪ 音效 sfx/pulse
|
||||
t+ 256.6s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 256.9s ♪ 音效 sfx/side_wall_l
|
||||
t+ 256.9s ♪ 音效 sfx/side_open_r
|
||||
t+ 257.0s ♪ 音效 sfx/echo_2
|
||||
t+ 257.1s ♪ 音效 sfx/mat_stone
|
||||
t+ 257.5s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 257.7s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 258.1s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 259.2s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 259.2s ♪ 音效 sfx/step_own
|
||||
t+ 259.2s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 259.7s ♪ 音效 sfx/pulse
|
||||
t+ 260.0s ♪ 音效 sfx/echo_1
|
||||
t+ 260.1s ♪ 音效 sfx/side_wall_l
|
||||
t+ 260.1s ♪ 音效 sfx/side_open_r
|
||||
t+ 260.1s ♪ 音效 sfx/mat_stone
|
||||
t+ 260.2s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 260.4s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 261.6s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 261.6s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 262.0s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 262.0s ♪ 音效 sfx/step_turn
|
||||
t+ 262.3s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 262.3s ♪ 音效 sfx/step_own
|
||||
t+ 262.3s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 262.8s ♪ 音效 sfx/pulse
|
||||
t+ 263.2s ♪ 音效 sfx/side_open_l
|
||||
t+ 263.2s ♪ 音效 sfx/side_open_r
|
||||
t+ 263.6s ♪ 音效 sfx/echo_3
|
||||
t+ 263.7s ♪ 音效 sfx/mat_stone
|
||||
t+ 264.0s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 264.0s ♫ BGM 切换 → bgm/battle(淡入 400ms)
|
||||
t+ 264.0s ♪ 向导音:battle(战斗/对抗)
|
||||
t+ 264.0s ▶ 语音:「蘑菇怪拦住了你!」
|
||||
t+ 266.1s ♪ 向导音:turn(轮到你)
|
||||
t+ 266.1s 〰 震动:confirm(轻点确认)
|
||||
t+ 266.1s ▶ 语音:「它贴着你不放,不用转身。」
|
||||
t+ 266.1s 〰 震动:error(做错了:两连短震)
|
||||
|
||||
#### 【玩家动作】单击,挥击
|
||||
|
||||
t+ 266.3s ♪ 音效 sfx/atk_swing
|
||||
t+ 266.3s ♪ 音效 sfx/atk_hit
|
||||
t+ 266.3s ♪ 音效 sfx/tel_bug
|
||||
t+ 266.3s 〰 震动:beat(节拍点)
|
||||
t+ 267.5s ♪ 音效 sfx/hurt
|
||||
t+ 267.5s ♪ 向导音:turn(轮到你)
|
||||
t+ 267.5s 〰 震动:hit(受击重震)
|
||||
t+ 267.5s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】单击,挥击
|
||||
|
||||
t+ 267.5s ♪ 音效 sfx/atk_swing
|
||||
t+ 267.5s ♪ 音效 sfx/atk_hit
|
||||
t+ 267.5s ♪ 音效 sfx/tel_bug
|
||||
t+ 267.5s 〰 震动:beat(节拍点)
|
||||
|
||||
#### 【玩家动作】前摇声响——双击,格挡
|
||||
|
||||
t+ 268.2s ♪ 音效 sfx/parry
|
||||
t+ 268.2s 〰 震动:confirm(轻点确认)
|
||||
t+ 268.7s ▶ 语音:「挡下了大半!」
|
||||
t+ 270.9s ♪ 向导音:turn(轮到你)
|
||||
t+ 270.9s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】单击,挥击
|
||||
|
||||
t+ 272.4s ♪ 音效 sfx/atk_swing
|
||||
t+ 272.4s ♪ 音效 sfx/atk_hit
|
||||
t+ 272.4s ♪ 音效 sfx/enemy_die
|
||||
t+ 272.4s ♪ 音效 sfx/coin
|
||||
t+ 272.4s ▶ 语音:「它倒下了。」
|
||||
t+ 272.4s 〰 震动:success(成功长震)
|
||||
t+ 274.5s ▶ 语音:「小有收获。」
|
||||
t+ 276.6s ♫ BGM 切换 → bgm/explore
|
||||
t+ 276.6s ♪ 向导音:explore(探索/安全)
|
||||
t+ 278.8s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 278.9s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 280.9s ♪ 音效 sfx/mob_step_bug_l
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 280.9s ♪ 音效 sfx/pulse
|
||||
t+ 281.1s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 281.3s ♪ 音效 sfx/side_open_l
|
||||
t+ 281.3s ♪ 音效 sfx/side_open_r
|
||||
t+ 281.7s ♪ 音效 sfx/echo_3
|
||||
t+ 281.8s ♪ 音效 sfx/mat_stone
|
||||
t+ 281.1s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 282.8s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 282.8s ♫ BGM 切换 → bgm/battle(淡入 400ms)
|
||||
t+ 282.8s ♪ 向导音:battle(战斗/对抗)
|
||||
t+ 282.8s ▶ 语音:「蘑菇怪拦住了你!」
|
||||
t+ 282.8s 〰 震动:heartbeat(心跳/倒计时)
|
||||
t+ 284.9s ♪ 向导音:turn(轮到你)
|
||||
t+ 284.9s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】单击,挥击
|
||||
|
||||
t+ 284.9s ♪ 音效 sfx/atk_swing
|
||||
t+ 284.9s ♪ 音效 sfx/atk_hit
|
||||
t+ 284.9s ♪ 音效 sfx/tel_bug
|
||||
t+ 284.9s 〰 震动:beat(节拍点)
|
||||
t+ 286.1s ♪ 音效 sfx/hurt
|
||||
t+ 286.1s ♪ 向导音:turn(轮到你)
|
||||
t+ 286.1s 〰 震动:hit(受击重震)
|
||||
t+ 286.1s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】单击,挥击
|
||||
|
||||
t+ 286.1s ♪ 音效 sfx/atk_swing
|
||||
t+ 286.1s ♪ 音效 sfx/atk_hit
|
||||
t+ 286.1s ♪ 音效 sfx/tel_bug
|
||||
t+ 286.1s 〰 震动:beat(节拍点)
|
||||
t+ 287.3s ♪ 音效 sfx/hurt
|
||||
t+ 287.3s ♪ 向导音:turn(轮到你)
|
||||
t+ 287.3s 〰 震动:hit(受击重震)
|
||||
t+ 287.3s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】单击,挥击
|
||||
|
||||
t+ 287.3s ♪ 音效 sfx/atk_swing
|
||||
t+ 287.3s ♪ 音效 sfx/atk_hit
|
||||
t+ 287.3s ♪ 音效 sfx/enemy_die
|
||||
t+ 287.3s ♪ 音效 sfx/coin
|
||||
t+ 287.3s ▶ 语音:「它倒下了。」
|
||||
t+ 287.3s 〰 震动:success(成功长震)
|
||||
t+ 289.5s ▶ 语音:「小有收获。」
|
||||
t+ 291.6s ♫ BGM 切换 → bgm/explore
|
||||
t+ 291.6s ♪ 向导音:explore(探索/安全)
|
||||
t+ 293.6s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 295.7s ♪ 音效 sfx/mob_step_bug_l
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 295.7s ♪ 音效 sfx/pulse
|
||||
t+ 296.0s ♪ 音效 sfx/side_open_l
|
||||
t+ 296.0s ♪ 音效 sfx/side_open_r
|
||||
t+ 296.5s ♪ 音效 sfx/echo_3
|
||||
t+ 296.6s ♪ 音效 sfx/mat_stone
|
||||
t+ 297.3s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 299.1s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 299.1s ♪ 音效 sfx/step_turn
|
||||
t+ 300.7s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 300.7s ♪ 音效 sfx/step_own
|
||||
t+ 300.7s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 301.2s ♪ 音效 sfx/pulse
|
||||
t+ 301.6s ♪ 音效 sfx/side_wall_l
|
||||
t+ 301.6s ♪ 音效 sfx/side_wall_r
|
||||
t+ 302.0s ♪ 音效 sfx/echo_3
|
||||
t+ 302.2s ♪ 音效 sfx/mat_stone
|
||||
t+ 302.5s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 304.4s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 304.4s ♪ 音效 sfx/step_own
|
||||
t+ 304.4s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 304.9s ♪ 音效 sfx/pulse
|
||||
t+ 305.3s ♪ 音效 sfx/side_open_l
|
||||
t+ 305.3s ♪ 音效 sfx/side_open_r
|
||||
t+ 305.7s ♪ 音效 sfx/echo_3
|
||||
t+ 305.8s ♪ 音效 sfx/mat_stone
|
||||
t+ 306.8s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 309.2s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 309.2s ♪ 音效 sfx/step_turn
|
||||
t+ 310.9s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 310.9s ♪ 音效 sfx/step_own
|
||||
t+ 310.9s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 311.4s ♪ 音效 sfx/pulse
|
||||
t+ 311.7s ♪ 音效 sfx/side_wall_l
|
||||
t+ 311.7s ♪ 音效 sfx/side_wall_r
|
||||
t+ 311.9s ♪ 音效 sfx/echo_2
|
||||
t+ 312.0s ♪ 音效 sfx/mat_stair
|
||||
t+ 312.6s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 314.5s ♪ 音效 sfx/mob_step_bug_r
|
||||
t+ 314.5s ♪ 音效 sfx/step_own
|
||||
t+ 314.5s 〰 震动:swipe(滑动识别)
|
||||
|
||||
#### 【玩家动作】单击发脉冲,听回声辨路
|
||||
|
||||
t+ 315.0s ♪ 音效 sfx/pulse
|
||||
t+ 315.3s ♪ 音效 sfx/echo_1
|
||||
t+ 315.4s ♪ 音效 sfx/side_open_l
|
||||
t+ 315.4s ♪ 音效 sfx/side_open_r
|
||||
t+ 315.4s ♪ 音效 sfx/mat_stair
|
||||
t+ 316.8s ♪ 音效 sfx/mob_step_bug_c
|
||||
t+ 319.1s ♪ 音效 sfx/mob_step_bug_l
|
||||
t+ 319.1s ♪ 音效 sfx/step_own
|
||||
t+ 319.1s ♫ BGM 切换 → bgm/boss(淡入 400ms)
|
||||
t+ 319.1s ♪ 向导音:battle(战斗/对抗)
|
||||
t+ 319.1s ▶ 语音:「窟主石甲蟹,就在你面前。」
|
||||
t+ 319.1s 〰 震动:swipe(滑动识别)
|
||||
t+ 321.3s ♪ 向导音:turn(轮到你)
|
||||
t+ 321.3s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】咬牙单击——挡不住了也要打
|
||||
|
||||
t+ 321.3s ♪ 音效 sfx/atk_swing
|
||||
t+ 321.3s ♪ 音效 sfx/atk_hit
|
||||
t+ 321.3s ♪ 音效 sfx/tel_heavy
|
||||
t+ 321.3s 〰 震动:beat(节拍点)
|
||||
t+ 322.5s ♪ 音效 sfx/hurt
|
||||
t+ 322.5s ♪ 向导音:turn(轮到你)
|
||||
t+ 322.5s 〰 震动:hit(受击重震)
|
||||
t+ 322.5s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】喘一口气,再挥
|
||||
|
||||
|
||||
#### 【玩家动作】咬牙单击——挡不住了也要打
|
||||
|
||||
t+ 329.1s ♪ 音效 sfx/atk_swing
|
||||
t+ 329.1s ♪ 音效 sfx/atk_hit
|
||||
t+ 329.1s ♪ 音效 sfx/mob_step_heavy_r
|
||||
t+ 329.1s ♪ 音效 sfx/tel_heavy_r
|
||||
t+ 329.1s 〰 震动:beat(节拍点)
|
||||
t+ 330.3s ♪ 音效 sfx/hurt
|
||||
t+ 330.3s ♪ 向导音:danger(危险)
|
||||
t+ 330.3s ♪ 向导音:turn(轮到你)
|
||||
t+ 330.3s 〰 震动:hit(受击重震)
|
||||
t+ 330.3s 〰 震动:warning(警告三连震)
|
||||
t+ 330.3s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】喘一口气,再挥
|
||||
|
||||
t+ 345.3s ♪ 向导音:nudge(看门狗轻提醒)
|
||||
t+ 345.3s ▶ 向导语音:「轮到你了。单击挥击。」
|
||||
t+ 345.3s ♪ 音效 sfx/turn_tick
|
||||
|
||||
#### 【玩家动作】咬牙单击——挡不住了也要打
|
||||
|
||||
t+ 345.3s ♪ 音效 sfx/atk_swing
|
||||
t+ 345.3s ▶ 语音:「挥空了,它不在你面前。」
|
||||
t+ 347.5s ♪ 音效 sfx/tel_heavy_r
|
||||
t+ 347.5s 〰 震动:beat(节拍点)
|
||||
t+ 348.7s ♪ 音效 sfx/hurt
|
||||
t+ 348.7s ♪ 向导音:turn(轮到你)
|
||||
t+ 348.7s 〰 震动:hit(受击重震)
|
||||
t+ 348.7s 〰 震动:confirm(轻点确认)
|
||||
|
||||
#### 【玩家动作】喘一口气,再挥
|
||||
|
||||
|
||||
#### 【玩家动作】咬牙单击——挡不住了也要打
|
||||
|
||||
t+ 351.3s ♪ 音效 sfx/atk_swing
|
||||
t+ 351.3s ▶ 语音:「挥空了,它不在你面前。」
|
||||
t+ 353.5s ♪ 音效 sfx/mob_step_heavy_c
|
||||
t+ 353.5s ♪ 音效 sfx/tel_heavy
|
||||
t+ 353.5s 〰 震动:beat(节拍点)
|
||||
t+ 354.7s ♪ 音效 sfx/hurt
|
||||
t+ 354.7s ♫ BGM 切换 → bgm/menu
|
||||
t+ 354.7s ♪ 向导音:settle(结算)
|
||||
t+ 354.7s ▶ 语音:「你倒下了。」
|
||||
t+ 354.7s 〰 震动:hit(受击重震)
|
||||
t+ 354.7s 〰 震动:hit(受击重震)
|
||||
t+ 354.7s 【状态】倒下了。死亡归因链:死于谁、哪里没做好、带走了多少金币 结算:死亡归因与元进度入账,单击再探一次(语音播放中,语速1)
|
||||
|
||||
#### 【玩家动作】听完归因三问和「下个周目,你会更强」
|
||||
|
||||
t+ 356.8s ▶ 语音:「你背后的偷袭,要了命。」
|
||||
t+ 358.9s ▶ 语音:「身后有动静,先转身。」
|
||||
t+ 361.0s ▶ 语音:「这是第三层。」
|
||||
t+ 363.1s ▶ 语音:「这趟带回一些金币。」
|
||||
t+ 365.3s ▶ 语音:「下个周目,你会更强。」
|
||||
|
||||
#### 【玩家动作】单击——再探一次
|
||||
|
||||
t+ 365.3s ♪ 向导音:menu(系统界面)
|
||||
|
||||
#### 【玩家动作】单击,开始新周目
|
||||
|
||||
t+ 365.3s ▶ 语音:「新的探窟,开始了。」
|
||||
t+ 367.4s ♫ BGM 切换 → bgm/explore
|
||||
t+ 367.4s ♪ 向导音:explore(探索/安全)
|
||||
t+ 367.4s ▶ 语音:「这是第一层。」
|
||||
t+ 367.4s 【状态】新周目直落探索:遗产生效,不用再上课 第 1 层黑暗里:单击发脉冲用回声看路,按住前进,左右滑转身,上滑状态,下滑菜单(语音播放中,语速1)
|
||||
|
||||
#### 【玩家动作】上滑,听新周目的局面复述
|
||||
|
||||
t+ 367.4s ▶ 语音:「这是第一层。」
|
||||
t+ 369.0s ♪ 音效 sfx/mob_step_small_c
|
||||
t+ 369.0s ♪ 音效 sfx/mob_step_small_l
|
||||
t+ 369.5s ▶ 语音:「你毫发无损。」
|
||||
t+ 370.8s ♪ 音效 sfx/mob_step_small_l
|
||||
t+ 371.3s ♪ 音效 sfx/mob_step_small_l
|
||||
t+ 371.6s ▶ 语音:「有些积蓄。」
|
||||
t+ 373.0s ♪ 音效 sfx/mob_step_small_l
|
||||
t+ 373.5s ♪ 音效 sfx/mob_step_small_l
|
||||
t+ 373.7s ▶ 语音:「你面朝北。」
|
||||
t+ 374.8s ♪ 音效 sfx/mob_step_small_l
|
||||
|
||||
#### 【玩家动作】单击脉冲,听听熟悉的回声
|
||||
|
||||
t+ 374.8s ♪ 音效 sfx/pulse
|
||||
t+ 375.1s ♪ 音效 sfx/side_open_l
|
||||
t+ 375.1s ♪ 音效 sfx/side_open_r
|
||||
t+ 375.3s ♪ 音效 sfx/echo_2
|
||||
t+ 375.4s ♪ 音效 sfx/mat_stone
|
||||
t+ 375.7s ♪ 音效 sfx/mob_step_small_l
|
||||
t+ 375.9s ▶ 语音:「左边有脚步声。」
|
||||
t+ 377.0s ♪ 音效 sfx/mob_step_small_l
|
||||
t+ 377.4s 【状态】第二周目短程收尾——死亡-重开循环跑通,收工 第 1 层黑暗里:单击发脉冲用回声看路,按住前进,左右滑转身,上滑状态,下滑菜单(语音播放中,语速1)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,120 @@
|
||||
# 《不眠频率》R1 全拟真试玩报告 — 老墨(失眠的电台制作人)与他闺女墨墨(手比耳朵快的19岁)
|
||||
|
||||
## 基本信息
|
||||
|
||||
同一台"手机"两个用户,两局都真打完(live harness:真 chromium + SenseVoice ASR 听游戏实况,非 mock)。
|
||||
|
||||
**局 A(老墨·新手主线)**
|
||||
- 身份:45 岁电台制作人人设,第一次玩纯音频游戏,认真听完关键句再动手,全晚走心(多左滑)。
|
||||
- 设置:`voice=male, speed=1.0, bgm=1.0, guide=full`
|
||||
- 时长/手势:墙钟 26.5 分钟(含我在幕间发呆的时间),51 个手势(tap 41 / 左滑 8 / 右滑 1 / 上滑 1)
|
||||
- 结局:**e1「天亮之前」**(rep=12,p9 左滑直面),尾声 5 位来电者全救到版 ep_*_ok 逐条点名
|
||||
- 报错:非资产类 console.error = 0;无死锁、无状态错乱
|
||||
|
||||
**局 B(墨墨·急性子压力)**
|
||||
- 身份:19 岁女儿抢过手机,语音播一半就戳、不等提示狂按、开菜单就关、四处乱滑,抉择全走克制(右滑)路线。
|
||||
- 设置:`voice=female, speed=1.7, bgm=1.0, guide=standard`
|
||||
- 时长/手势:墙钟 18.3 分钟,83 个手势(tap 58 / 右滑 12 / 下滑 4 / 左滑 3 / 上滑 2 / 双击 2 / 长按 2)
|
||||
- 结局:**e4「静音」**(rep=0,p9 右滑回避),尾声 5 位来电者全错过版 ep_*_no——「有的夜班,谁也接不住谁」
|
||||
- 报错:非资产类 console.error = 0;18 段语音提前被杀**全部可归因到玩家自己的 tap 跳句**(逐段核对 vend 时长),无一局是游戏自残
|
||||
- 意外彩蛋:局 B 开局实测了**断点续玩 ASK 流程**(局 A 存档导致,见 P2-3)
|
||||
|
||||
---
|
||||
|
||||
## 局 A 体验叙述(老墨,第一人称)
|
||||
|
||||
解锁遮罩那一指下去,t=5.3s 听到「新的夜晚,开始了」(sys_new_night),紧接着 t=7.4s 一句操作口令「单击屏幕继续,双击重新听……」(gd_brief,full 档专属前置),然后台标口播 b_open——**我后来核对了事件流,解锁那一下 tap 并没有像我在别的游戏里遇到的那样被当成"跳过旁白",开场每一句都足时播完了**。这份"第一指头不吞你的开场白"的克制,让我对它先有了好感。
|
||||
|
||||
t=34.8s,第一通热线来了。没有铃声——只有一下短震。我当时愣了三秒:铃呢?10 秒后 t=44.9s 导播耳语补上来「热线在闪。单击,接听。」(gd_ring1)。后来看事件才知道铃声资产(sfx/phone_ring)整个 404 了,RING 状态前 10 秒是纯静默+一下震动(见 P2-1)。作为盲玩者,是向导把我捞起来的。
|
||||
|
||||
接通老周(z1_ring_in「一线来电。七十多岁,雨夜,走丢了。」)。抉择点 p1 的选项句我听的是全文:「老人在发抖。向左滑,陪他哼那首老歌。向右滑,冷静问他路口的路牌。」——ASR 转写 similarity **1.0**,一字不差。我当时在句末磨蹭了太久,这句提示被**原句复播了两次**(t=498.0、523.0,25s/50s 两级看门狗),复播的是完整选项句而非干巴巴的"快选啊",这个细节让我不烦;而且复播两级之后彻底安静,我 t=533.1 的左滑照样生效——选择权一直在我这。左滑,t=533.6s 老周跟着我哼起来(z1_song,similarity 0.97),t=674s「对,对!路口修车铺,天天放这首!」(z1_songo)——第一个正反馈到手,他声音真的稳住了。
|
||||
|
||||
p2 我继续左滑「留在原地陪他等」。t=745.2s 幕间响起今晚第一句口碑播报:「今晚的口碑,不好不坏。」(rep_mid,1.0)——账是真的(p1 左 +1、p2 左 +2,rep=3,低→中跨档才播)。第二通小鹿,p3 左滑「这趟车值得上」,t=845.1s 那句「你妈等的不是奖杯,是你进门喊的那声妈。」(l1_go,**1.0**)是我整晚最喜欢的一句台词;紧接着 t=865.8s「今晚的口碑,在听众里立住了。」(rep_high)——rep=5,跨高档,播报又对了一次。
|
||||
|
||||
第三通糖糖,我在 k1_b 里听到了「家里灯关了。可是楼下,一直有声音。」(similarity 1.0),但设计里说这句下面应该垫着**闷住的争吵声**(arg_muffled)——那层环境音从头到尾没出现(资产缺失,见 P2-2)。我选了右滑「轻轻问她怎么了」,t=959.8s「爸爸妈妈摔门了。是不是……我做错了什么呀。」(k1_asko,1.0)——值了。p5 我左滑说了真话:「大人的事,不是小孩的错。一个字都不是。」(k1_truth,0.97)。但在这里我吃了自己第一次亏:k1_trutho 声明 10.96 秒,我 8.4 秒就点了继续,尾巴「他们明天,会一起给我切蛋糕吗?」被我自己掐了(ASR 如实记 TRUNCATED)——而下一句导播的「蛋糕。记下来——」直接应在了那个我没听到的词上。跳句是设计好的自由,但尾句没保护,急性子会像我一样错过钩子(见 P2-4)。
|
||||
|
||||
第四通陈姐是全晚最打动我的验证:p6 左滑「替孩子带话」之后,游戏播的不是泛泛的劝和,而是 t=1140.3s「四十分钟前,有个孩子问我们:爸妈摔门,是不是她的错。」(w1_say 组)——**我在第三通"问出来"的那句话,被原封不动带进了第四通**。heardArgument 条件差分不是写在文档里的,是我亲耳听到的。
|
||||
|
||||
第五通老韩,我左滑陪他聊闺女。聊天中途 t=1334.8s 先是一下不寻常的长震(danger 震动签名 [25,40,25,40,25]),2 秒后 t=1336.9s「车道偏了——听!」(h1_danger),然后「嘶——好险!前车急刹,我擦着护栏过去了。彻底醒了!」(h1_dango,0.92)。危机拍是自动流,戏剧自己走完不等人,节奏对。挂电话前老韩补了一句 t=1351.8s「对了。头通电话那位大爷,就是这片被巡逻队找到的。这城市的夜,是接着的。」(h1_echo,**1.0**)——我对老周的陪伴,半晚之后在另一个陌生人嘴里回来了。
|
||||
|
||||
签收抉择 p9:「留言机红灯在闪,是老主播三年前没播完的那句晚安。向左滑,替他播出去。」我在句末磨蹭到提示句被原样复播了一次(t=1402.4),复播完又过了 12.8 秒才左滑。t=1425.5s「师父,三年了。这句晚安,我替您播。各位,晚安。」(d9_face,0.85)。结局 e1:t=1435.3s「天亮了,热线灯还亮着。你们的晚安,是这座城市的心跳。」,t=1443.1s「这把话筒,我总算接得住了。明晚零点,接着不眠。」然后导播替我记账(ep_lead),五个人一个一个点名:老周有了老花镜、小鹿上车了、糖糖家的门这个月没再摔过、陈姐家切了蛋糕、老韩后视镜上多了朵小红花(ep_*_ok 五连,similarity 0.90-1.0)。「明晚零点,接着不眠」——我现在就想再值一班。
|
||||
|
||||
收尾我顺手验了结算态上滑:sys_help(1.0)→ 重播结局主句 → rep_high,帮助+结局+口碑三件套齐活。
|
||||
|
||||
## 局 B 体验叙述(墨墨,第一人称)
|
||||
|
||||
我上来就捅了一指头——结果听到的是「检测到你的夜班记录。单击继续上次,右滑开始新的夜晚。」(sys_continue_ask),后半句还没听完就被我下一戳掐了,然后我就被**扔回了昨晚的结局链**,e1_a 一句「太亮了,热线灯还亮着」地又播了一遍。想开新局?右滑。可我一个手比脑子快的急性子,谁听得见那句被掐掉的规则(见 P2-3)。
|
||||
|
||||
行吧,那我就在这个结局画面里发泄:左滑——error 震(零静默,可以);双击——居然把结局链给我重播了(合理,重听);下滑——菜单开了,「菜单。单击切换选项,双击确认。回到直播。」,再一下下滑又关上了,节目无缝接回去;长按——引擎里 BOOST 灯闪了一下(我按得太短)。全部有回应,没有一次装死。
|
||||
|
||||
终于点到「再来一局」。新夜班 INTRO 我自然是一个字不让它说完:b_open「午夜零点,红灯亮起。欢迎回——」只剩 0.43 秒;b_rule 被我从 1.87 秒处掐断后,转写器把残句听成了「还有优惠券就是要现金」(similarity 0.08,这个是仪器幻听,不算它)。1.7 倍速下的女声干脆利落,倒是很配我。
|
||||
|
||||
第一通铃,我先用双击试探(首通没有上一通,正确吃了 error 震,没接起来),上滑听状态:「现在是今晚第一通电话。」「今晚的口碑,有点砸了。」(prog_c1+rep_low,新夜班口碑归零,账对)。然后单击接听,一路狂戳。
|
||||
|
||||
规矩我很快摸出来了:**播放中单击=跳句,但抉择提示句(p*)戳不动**。我在 p1 播到一半时戳了一下——只有一下震动,句子照常播完;紧接着右滑「冷静问他路牌」,这一滑在句子里就被记下了,句尾一落 UI 音响起、结果句无缝接上。我前前后后在 p1/p3/p6/p8 四个提示句里都这么干过,**四次 mid-prompt 戳全部无效化、三次 mid-prompt 滑全部缓存生效**——没有一次吞我的选择,也没有一次让我抢跑成功。公平。
|
||||
|
||||
p1 右+p2 右的代价来得很快:老周在「说不清……我真是,说不清了……」里崩溃(z1_bad,1.0),然后导播一句**「地址没报清就转接,雨又大。这通砸了。先稳人,再办事。」**(z1_bade)——骂的是我刚才干的事,一个字不冤枉。这游戏的负反馈不甩锅,服。
|
||||
|
||||
中途我干过一次真正捞着东西的操作:一句对白播完后我随手左滑,错误震响完,然后……**游戏就没声了**。我以为它死机了,搁了半分多钟,什么"还在吗"都没等到,直到我自己再戳一下才继续(t=445.4→479.6,整整 34.2 秒静默,见 P1-1)。慢性子老墨永远遇不到这个坑,但我保证急性子天天踩。
|
||||
|
||||
后面我把五通全用克制路线走完:小鹿「把选择还给她」(她自己走了);糖糖我偷懒选了左滑哄睡——结果结算句直接点名「睡着了。可你没听见,她在怕什么。」(k1_lulle)——又是不冤枉的账;陈姐被我劝回了家;老韩听我的进了服务区,「单子黄了,人齐了」。这次没有危机拍、没有老韩提老周——我这一晚没陪过任何人,游戏就真的什么都不给我回响。
|
||||
|
||||
p9 右滑「照常收播」。「今夜不眠,静音收播。有的夜班,谁也接不住谁。」(e4_a)「留言机还在闪。你没看它,它也没怪你。明晚再说吧。」(e4_b)。尾声导播的账本上,五个人全是错过版(ep_*_no)。这个结局憋得我难受——**难受说明它成立**。最后我戳了一下结算画面,「新的夜晚,开始了」——重开正常,我这才心满意足地把手机扔下。
|
||||
|
||||
---
|
||||
|
||||
## 测量局限与证据口径(先说清楚)
|
||||
|
||||
- 转写(ASR)对 ≤6 字短句和大语速是重灾区:局 B(1.7x 女声)103 条有效语音段里 MISMATCH 30 条(29%),最低把 z1_adone 之外的残句听成「还有优惠券就是要现金」(similarity 0.08)。**凡 events 层显示足时播放、仅转写不像的,一律不算游戏问题**。
|
||||
- 采信为引擎级证据的只有两类:`vend` 提前于 `dur/speed`(TRUNCATED 事件层证据)、应答窗口完全无事件(SILENCE)。本报告所有 TRUNCATED 已逐条归因:**23 段全部由玩家 tap 造成(跳句/接听抢占),0 段由游戏自身造成**。
|
||||
- 本报告 t= 均为该局"解锁单击后秒数"(事件时基),与 ASR 转写时间轴存在约 5 秒固定偏移,引用转写时只取 heard/expected 文本与 similarity。
|
||||
|
||||
## 问题清单
|
||||
|
||||
### P0(卡死/死锁/状态混乱/游戏自残截断)
|
||||
|
||||
无。两局共 198 段语音全部串行零叠音;菜单开关、上滑状态、双击重听、无效手势、危机拍自动流、重开,全部状态正确;两局各自打到设计表对应的结局(e1:rep=12;e4:rep=0,账目与 §4.2 分毫不差);无一处游戏自身截断在播语音。
|
||||
|
||||
### P1(体验断裂)
|
||||
|
||||
1. **等待态做一个无效手势,"还在吗"看门狗就被拆掉且不再补挂 → 之后无限期静默**
|
||||
- 复现:局 B t=440.9 一句话播完进入链末等待(standard 档承诺 13s/30s 两级提示)→ t=445.4 我滑了一个无效的左滑(正确响了 error 震 [60,40,60])→ **此后 34.2 秒(t=445.4→479.6)事件流里除我下一次 tap 外零事件**:本应在 t≈454s 响的 gd_continue 永远没来,本应在 t≈471s 响的 gd_again 也没来。
|
||||
- 对比证据:同样在等待态,菜单关闭/上滑状态后的等待看门狗都正常补挂(局 B t=502.5 等待后 t=515.6/532.6 两级准点,误差 0.1s);RING 态的上滑/双击分支显式重挂铃看门狗——唯独叙事态的无效手势分支不补。
|
||||
- 影响:盲玩玩家遇到它的体验就是"游戏死了"。它不是死锁(tap 仍有效),但把"永不静默死局"的承诺打了个洞。代码侧佐证(只读参考,未改动):`web/radio/game.js` `onGesture()` 对任何手势先 `guide.disarm()`,而 ONAIR/INTRO 左右滑无效分支报完 error 即 return,无补挂动作。
|
||||
|
||||
### P2(不适/设计意图缺席)
|
||||
|
||||
1. **RING 状态前 10 秒几乎全静默**:`sfx/phone_ring` 404(12 个缺失 SFX 之一),铃声循环无声,进入 RING 只有一记短震 [20],要等 10 秒 gd_ring1 才有声音提示。局 A 我这个"新手"在第一通铃前足足愣了 10 秒。资产缺口属已知遗留,但对免视玩家这就是接电话的本体反馈。
|
||||
2. **"声音即世界"的两处招牌设计因资产缺失缺席**:`arg_muffled`(C3 糖糖家闷住的争吵声,信息层)与 `brake_screech`(C5 危机拍 2 秒前置预警)均 404。后果:①糖糖通里"楼下一直有声音"只剩台词,p4「问她还哄睡」的抉择失去环境音依据;②老韩危机拍只剩危险长震+台词自带预警,设计的"刹车声渐强 2 秒"完全没有。5 个来电者侧环境音(amb_*)同样全缺,五通电话的"地方感"只靠导播一句口播撑着。
|
||||
3. **断点续玩 ASK 的单击语义陷阱**:有存档时重进,「单击继续上次」会把已打完的玩家直接扔回昨晚的**结局链重播**(局 B t=0→155s 我被迫听完了整段 e1)。要开新局得右滑,而急性子恰恰最可能把那句规则掐掉(我就掐了)。同一个"单击",在结算态是"再来一局(开新)"、在 ASK 是"继续上次(回旧)"——语义相反,全靠一句容易被跳掉的话撑着。
|
||||
4. **链末最后一句无跳过保护,抢跑必吃关键尾句**:单击身兼"跳过本句"与"继续",无法区分。局 A 我自认是慢性子,仍三次吃掉尾巴:k1_trutho 的「会一起给我切蛋糕吗?」(蛋糕伏笔没了,下句"蛋糕。记下来——"接了个空)、w1_a 尾巴、d9_facee 的点题句「但空着的那一秒,你说满了」;局 B 的 d9_avoide「又多亮了一夜」同样没逃掉。建议对节点末句加 0.5-1s 保护窗或屏蔽末句跳过。
|
||||
|
||||
### P3(建议)
|
||||
|
||||
1. p* 抉择提示句播放中单击虽不可跳,但每次都给一记 [20] 确认震动(两局共 5 次)——手感上像"点上了",实际什么都没发生。建议改成不震,或播一句极短提示「听完这句再滑」。
|
||||
2. 看门狗与 tap 存在小竞态:局 A t=462.7 我单击后 0.4s,gd_continue 仍响了一声随即被 p1 提示句掐成 0.01s 的气口。tap 应立即作废已排队的向导句。
|
||||
3. rep_low 口碑句设计注释带 warning 震,两局 B 在 RING 上滑听到 rep_low 两次(t=198.5、497.5)均未见额外警示震(只有上滑本身的 [10])。若是只在幕间播报时震,建议补齐;否则删注释。
|
||||
4. (对应 P1-1 的修法)无效手势处理完应重挂当前等待态的看门狗,而不是任其保持静默。
|
||||
5. harness 侧记录:长按手势固定 600ms,boost 只能体验约 0.1s,快进玩法本轮无法充分压测(工具局限,非游戏问题);字符串 "1.7" 传参会被归一化为 1.0,需传数值或 `faster`。
|
||||
|
||||
## 亮点(让我愿意玩下去的东西)
|
||||
|
||||
- **零叠音、零状态错乱的执行底盘**:198 段语音严格串行;菜单里乱点循环、关掉后节点完整复述;上滑状态链(sys_help→prog_cN→rep 档)在 RING/ONAIR/ENDING 三态语义都对;双击重听、无效手势零静默(局 B 9 次全有 error 震)。
|
||||
- **抉择公平性是玩出来的,不是宣传出来的**:p* 播放中单击 4+1 次全部不可跳;mid-prompt 左右滑 3 次全部缓存、播完即生效不丢不重复;选项句等待态复播两级都是完整选项句(合法帮助),复播完仍安静等你,绝不倒计时逼命。
|
||||
- **账目真实得可怕**:两局 rep 轨迹(0→3 mid→5 high / 0→-1→0)与设计表逐点一致,跨档播报只在真的跨档时出现;heardArgument 让糖糖的话原样出现在陈姐通里;bond_zhou 让老韩替老周谢我;负向选择换来的是指名道姓的归因句(z1_bade、k1_lulle),正向选择不灌一句教程。
|
||||
- **四结局两头已见其二**:e1 的「明晚零点,接着不眠」和 e4 的「明晚再说吧」是两种真实的夜班——后者的难受恰恰证明这个抉择系统有牙齿。
|
||||
- **向导节奏可靠**:两局 RING 10s/25s、full 25s/50s、standard 13s/30s、抉择点 25s/50s、结算态两级,实测误差 ≤0.2s,且从不逐字重复(gd_ring1≠gd_ring2、gd_continue≠gd_again)。
|
||||
- 手势面 6 个从头用到尾零新增学习成本,全程无画面盲玩可通——它对"纯音频游戏"这个承诺是认真的。
|
||||
|
||||
## 一句话裁决
|
||||
|
||||
**愿意**——两晚零死锁打穿 e1/e4 两个都成立的结局,我想再值一班去把老韩那句「单子黄了,人齐了」换成危机拍版本;但求先把"无效手势吃掉还在吗"这根盲玩保险丝接回去,再把铃声和争吵声还给这个只有耳朵的世界。
|
||||
|
||||
---
|
||||
|
||||
### 附:产物与证据文件
|
||||
|
||||
- 局 A:`/home/xsl/SoundGame/web/harness/live/out/radio-20260902072135/`(events.jsonl 94 语音段/51 手势、verdicts.json 157 行、transcript.md、mix.webm)
|
||||
- 局 B:`/home/xsl/SoundGame/web/harness/live/out/radio-20260902074921/`(events.jsonl 104 语音段/83 手势、verdicts.json 158 行、transcript.md、mix.webm)
|
||||
- 引用行为代码(只读):`/home/xsl/SoundGame/web/radio/game.js`(NODES 表 L61-166、onGesture L328-339、_onStoryGesture L404+、enterEnding L744)
|
||||
- 引擎级 TRUNCATED 全清单:局 A 5 段 / 局 B 18 段,全部由玩家 tap 造成(详见上文口径),本报告未采信任何"游戏自残式截断"叙事。
|
||||
@@ -0,0 +1,28 @@
|
||||
# P1 视障资深玩家评审:《不眠频率》(R1)
|
||||
|
||||
> 评审依据:research/new8/radio/round1/transcript-main.md(主线一局)+ transcript-stress.md(乱按压力一局)。
|
||||
> 我按「真机听到这些」代入。两局转写开头 t+0.0 各有一批「资产缺失→静默」警告块(约 48 行,同一份清单重复五遍),
|
||||
> 与后文同名音效正常发声自相矛盾(onair_sting 在 t+2.1 照响、phone_ring 在 t+14.8 照响),我判定那是转写器的资产盘点
|
||||
> 附注而非我耳朵听到的东西,按实际发声行为评审;若真机真缺开局 sting 与铃声,开场 15 秒就是哑的,那属 P0,真机必须先确认。
|
||||
|
||||
### 不眠频率
|
||||
- 状态感知:4.5/5 —— 整个夜班我几乎每秒都知道自己在哪:每通来电开头有「一线来电/二线来电」报名(main t+14.8、t+97.3),铃响必带 turn 签名+确认震(t+14.8),幕间口碑只在跨档时播报(main t+92.2「不好不坏」、t+122.5「在听众里立住了」;未跨档的 t+158.6、t+197.4 只有垫乐不硬灌——该播的播、不该播的闭嘴,这本账我很服气);上滑随手报「第几通+口碑档」(main t+56.7-58.8),压力局被灌了 199 次无效手势、进出菜单 38 次,每次关菜单都重播当前句给我落位(stress t+119.7→123.8),全程没迷过路。扣的 0.5 在两处:一是我什么都没做就被报「今晚的口碑,有点砸了」(main t+58.8 / stress t+21.2,rep=0 读成「砸了」,听着像我在开播前就搞砸了这晚);二是上滑状态链把固定帮助句垫在状态前面,我每次查状态都要先交六秒过路费才轮到正题。
|
||||
- 下一步明确性:5/5 —— 开场 30 秒把三件事一次讲清(t+2.1 单击继续、左右滑抉择;t+6.4 单击跳句;t+10.6 台规),第一声铃 t+14.8 就到;每个抉择句自带方向和内容(t+52.5「向左滑,陪他哼那首老歌。向右滑,冷静问他路口的路牌」);我听完帮助后游戏自动把选项重念一遍(main t+60.9),不让我带着问情做决定;链末发呆 25 秒有看门狗兜底(main t+42.0「单击屏幕,继续。」)。全程没有一秒我不知道该干什么。
|
||||
- 愿意继续玩:是 —— 这是少有的把我当成年人的叙事游戏:可跳句、可重听、状态随手查、失败归因到我的原话,我愿意为下一夜的五通电话买单。
|
||||
- P0 问题:无(两局转写范围内)。失败可归因这条我专门去压力局找茬:三个负向结果全部指向我真实的嘴——t+521.5「她走了。没上车,也没退票」(我刚说了「把选择还给她」)、t+696.1「你许了个兑不了的现」(我选了善意谎言);e2 结局的五条尾声我逐人对账(stress t+1066.8-1075.2):老周救到(我 p1 陪他哼歌)、小鹿退票(我 p3 右)、糖糖没接住(我 p5 谎言)、陈姐末班车(我 p6 右劝回)、老韩到家(我 p8 陪聊)——一句不差,账目真实到我想起立鼓掌。
|
||||
- 建议:
|
||||
1. 菜单完整性存疑:压力局 38 次逛菜单加主线局 1 次,我每次只听到「回到直播。」「重新开始今晚。」两项(main t+65.2/67.3;stress t+115.4/117.6 等二十余处),设计账面上的第三项「保存并回大厅」38 次循环里一次没露过脸。要么它不存在——那我的存档退出入口就没了,是功能洞;要么它在循环第三格而我永远够不着。真机第一件事:把菜单三项听全。
|
||||
2. 上滑状态链重排并截短:状态(第几通+口碑)放最前,操作口令截短或只留在菜单里——压力局里这条逐字相同的帮助链重复了 15 次以上,信息密度对 75 档语速的用户是浪费生命。
|
||||
3. 开局口碑档措辞:rep=0 别读「有点砸了」,给一句「台子刚开,口碑还没立起来」类的空档句。零点刚开播就听见自己「砸了」,晦气,也容易让新手误判自己已经做错了什么。
|
||||
|
||||
#### 听觉惯例符合度(逐条核对我的特别检查项)
|
||||
- 语音可打断:过。开场明说「想跳过这句,单击就行」(t+6.4);向导纠错 idle-only,对白在播时不顶(stress t+17.0 同一句纠错第二次被标注跳过未播,只留 error 震——纪律执行得干净)。
|
||||
- 语音可重听:过。双击重听在压力局实测(t+105.2→t+109.3 当前句原样重播);抉择点在我查完状态后自动复述选项(main t+60.9),这是「复述选项=合法帮助」的正确打开方式。
|
||||
- 等待有无声:过。全程最长一段等待 25 秒(main t+17.0-42.0),垫乐未断,25 秒整看门狗一句话兜底(t+42.0);BRIDGE 有专属垫乐;没有一次超过 5 秒的真死寂。
|
||||
- 失败可归因:过,见 P0。且归因句只挂负向结果:主线局全程零教学零归因,只有 t+90.1「就这么接。记住这个手感。」这种把我当同行的肯定——没人把我当白痴,这一条本作满分。
|
||||
- 菜单列表导航规整:半过。口令规整(「菜单。单击切换选项,双击确认。」t+63.1),关菜单必重播当前节点不丢位(stress t+119.7→123.8);但第三项缺席嫌疑见建议 1,列表完整性未证实。
|
||||
- 提示永不逐字重复:过(系统侧)。看门狗只出场过第一级(main t+42.0),RING 两级不同句的规矩没被逼出来(铃一响我就接了,gd_ring2 未验证);用户主动上滑导致的帮助句逐字重复属于自找,不罚游戏,但建议截短。
|
||||
- 账目真实:过。主线 rep 轨迹可从播报反推并与分档句对上(t+92.2=3 分「不好不坏」、t+122.5 跨 5 分「立住了」、压力局 p2 右 p3 右后 t+1005.1「立住了」同样分档准确);尾声逐人回响与五通实际选择一一对应。
|
||||
- 语速上限/长按快进:未验证。两局加起来长按一次都没出现,全程语速 1 档。我的 75 档耳朵能不能把长按 1.7× 快进真正揉出来,转写给不了答案——这是本作对我唯一悬而未决的生死线,真机第一课就是它。
|
||||
- status key:过。上滑=帮助+状态+重播当前节点,任何叙事态可用;压力局乱按 199 次之后我依然随时能报出「第几通+口碑」,这套锚没被乱流冲垮过。
|
||||
- 双击确认(菜单约定):过。单击循环+双击确认+上滑帮助+下滑关闭的行为与口令一致,无一次循环跳字或误确认。
|
||||
@@ -0,0 +1,18 @@
|
||||
# P2 · 时间充裕的大学生 评审——《不眠频率》(R1)
|
||||
|
||||
> 视角:23:30,宿舍躺床,戴耳机,音量正常。以下全部基于转写呈现的信息流代入(转写语音时长为估算,±20%,我主要看相对节奏和「我听到了什么」)。
|
||||
|
||||
### 不眠频率
|
||||
- 状态感知:4/5 —— 全程清楚自己夜班的哪个位置:每通电话报线明确(t=14.8「一线来电。七十多岁,雨夜,走丢了。」、t=127.6「三线来电」),上滑随时能听「第几通+口碑档」(t=54.6-60.9 整条帮助+状态链),幕间口碑档位随选择真实变化(t=92.2「不好不坏」→t=122.5「在听众里立住了」),菜单/幕间/结局 BGM 各不相同、一听就知道换了场景(t=63.1 menu、t=92.2 bridge、t=249.4 ending)。扣一分:① 开局上滑听状态,我一个选择都还没做,就听到「今晚的口碑,有点砸了」(t=58.8),那一瞬间我真心以为自己已经搞砸了什么;② t=17.0 电话接通、导播报完线之后突然没声,我躺了 25 秒不知道通话是还在继续还是结束了(t=42.0 才有看门狗「单击屏幕,继续。」捞我)。
|
||||
- 下一步明确性:4/5 —— 抉择点永远把两个选项连着手势方向念出来(t=52.5「向左滑,陪他哼那首老歌。向右滑,冷静问他路口的路牌。」),等久了还会自动复述当前选项(t=60.9),菜单自我解说(t=63.1「菜单。单击切换选项,双击确认。」),这套是我玩过的音频叙事里最清楚的。扣分:① 全程没有一句话教过「铃响了单击=接听」,我是拿 t=2.1「单击继续节目」连蒙带猜的,运气好第一下就点对了(t=14.8);② 叙事链末没有即时的「该你点了」信号,只有 25 秒后的看门狗(t=17.0→42.0),第一次撞上时我是真不知道该干嘛。
|
||||
- 愿意继续玩:是 —— 台词是真的有设计感:C3 听见的吵架闷响在 C4 变成我替孩子带的话(t=132.9 → t=177.8「四十分钟前,有个孩子问我们:爸妈摔门,是不是她的错。」),这种「我的选择长出了下文」的回环,我这套原神/粥游培养出来的口味就吃这个。
|
||||
- P0 问题:开局状态播报在骗我——t=58.8(压力场 t=21.2 同):我刚上滑想看看系统长什么样,还没做任何抉择,听到的却是「今晚的口碑,有点砸了」。我第一反应是「完了我开局是不是得罪人了」,实际上那只是 rep=0 的默认档。新玩家第一次查状态就被判了「砸了」,这属于「不知道自己在哪(现状被误报)」的具体时刻。
|
||||
- 建议:
|
||||
1. 通话进行中让对白自动续流,单击只留给「跳过」和「抉择」——我是躺在床上「听一档深夜节目」,不是在「翻页读故事」。t=17.0 接通后 25 秒没人说话(t=42.0 看门狗才来),对睡前场景是致命的:我差点就此睡着关机。这是「我愿不愿意连着开几晚」的头号变量。
|
||||
2. 口碑首档措辞改中性,比如「今晚还没开张」——账目可以诚实,但别让零分默认档听起来像差评。
|
||||
3. 收播时口播一句收集进度(比如「这是你的第一夜·『天亮之前』。四种夜晚,还有三种没听过」)——四份转写里从头到尾没有任何一句结局计数播报,「4 结局」这个重玩理由我只在设计文档里知道,游戏自己一个字没提。
|
||||
|
||||
#### 睡前躺床体验
|
||||
- 头 3 分钟节奏:好。t=0 就有人声(「新的夜晚,开始了。」)不哑场,t=2.1 两句话教完核心手势,t=14.8 第一声铃响我就能动手——动手点在 15 秒内。首个正反馈来得很快:t=71.5 选了陪老周哼歌,t=77.7「他稳住了。老歌,比路牌管用。」——开播一分多钟我就体验到「我的一句话改变了陌生人的一夜」,这个首胜含金量比大多数手游开场高。唯一硌牙的就是 t=17.0-42.0 那段「接通了却没人说话」的静默。
|
||||
- 故事钩子:立住了。「台里的规矩就一条:先接住人,再接电话」(t=10.6)一句话把世界观和玩法都讲了。全场最佳是跨来电的回环设计:C3 里我听见楼下的闷响吵架(t=132.9 arg_muffled),选择问她(t=139.3),到 C4 这件事变成我递出去的话(t=177.8),C5 还补一刀「头通电话那位大爷,就是这片被巡逻队找到的。这城市的夜,是接着的」(t=235.8)——五个陌生人的夜真的互相咬合。C5 刹车危机拍(t=223.4 danger 音+急刹,先声 2 秒)吓得我清醒但没被吓弃。p9 那句「带子里其实只有电流声。但空着的那一秒,你说满了」(t=247.2)是我这周听过的最好的台词。说教味基本没有:压力场里选了善意谎言,也只给一句账目式的「你许了个兑不了的现」(stress t=696.1),算轻微爹味,可忍。
|
||||
- 结局后想不想开下一局:想,但有限。e1 尾声把今晚每个人的下落逐句点到我头上(t=255.7-264.2,五句回响全对得上我的选择),收得漂亮;压力场对照跑出 e2,「只是路过留言机的时候,你还是没敢看它。红灯灭得很慢」(stress t=1062.5),证明四个结局是真文案差异、不是换标题,这点我验过了,值得给第二次机会。我会为 e3/e4 再开 1-2 局(特别想听低口碑+回避的「静音」能有多丧)。但大概第三局就到头:没有周目成长、没有新机制,二周目和一周目的玩法完全一样,纯当广播剧二刷——对时间充裕的我可以,对大多数人只值一晚。
|
||||
@@ -0,0 +1,18 @@
|
||||
# P3 评审:《不眠频率》(radio)— 时间紧张的白领
|
||||
|
||||
> 视角:32 岁,地铁单程 25 分钟,站立单手持机,嘈杂车厢,只玩过消消乐。依据 R1 两份转写(主线 + 乱按压力局)代入「真机听到这些」。
|
||||
|
||||
### 不眠频率
|
||||
- 状态感知:4.5/5 —— 全程知道自己在第几通、口碑什么档:上滑一句话「现在是今晚第一通电话。今晚的口碑,有点砸了。」(t=56.7-58.8s),而且听完自动把选项重播一遍(t=60.9s),我在地铁里漏听了也不慌。扣 0.5 分:乱按局 t=688.9-691.0s,二选一的提示句刚起就被我误触的上滑帮助链顶掉,紧接着结果直接播(「睡吧。明天一睁眼」t=691.0s)——那一瞬间我不知道自己刚选了什么。另外转写 t=0.0s 一次列了 12 个音效资产缺失告警(含 phone_ring),虽然 t=14.8s 铃声实际响了,但如果真机真缺铃声,「该接听了」就只剩 turn 音+轻震,站着的我可能注意不到。
|
||||
- 下一步明确性:5/5 —— 没有一秒不知道该干嘛:开场 15 秒内第一声铃就响(t=14.8s),教学句 t=2.1s 就讲了「单击继续节目,选择时左右滑」;链末等我会提醒(压力局多处「单击屏幕,继续」),选不清可以双击重听、上滑复述。全程等待最长的一段是我自己走神(t=17.0-44.1s),25 秒后看门狗一句话把我捞回来——不是游戏的锅。
|
||||
- 愿意继续玩:是 —— 一通电话 35-60 秒就是一个完整小故事,一整晚主线 4 分半打完(t=0-266.3s),正好两站地铁,睡前摸鱼也塞得下。
|
||||
- P0 问题:乱按局 t=688.9-691.0s——抉择提示句在播时我误滑动,选项话没念完结果就出了,我不知道自己选了什么、为什么这个结果(主线局未出现,但地铁里我恰恰是那个会乱按的人)。其余无。
|
||||
- 建议:≤3 条,按对「我愿意玩下去」的影响排序
|
||||
1. 误触的代价太啰嗦:压力局里每乱碰一次就整段重念「单击继续,双击重新听。上滑听状态……」(t=44.5/57.1/67.5/77.9/88.4/98.8s……一字不差重复了十几次),我早会了还念,还把老周的台词往后推。建议教学口令只在开场念,之后上滑只报「第 N 通+口碑」两句。
|
||||
2. 抉择提示句在播时误滑动会静默缓存、播完即生效,遇上我紧接着又上滑就会变成 t=688.9s 那种「选项没听完就出结果」——建议结果句前垫半句「你刚才选了右」之类的回执。
|
||||
3. 菜单太好误开(压力局逛了 38 次菜单),关菜单还会把当前整句来电重播一遍(如 t=503.9s 重播「退不退,都是你的自由」)——关菜单建议不重播全句,只「叮」一声回到等待。
|
||||
|
||||
#### 通勤场景压力测试
|
||||
- 单手能玩吗:能。全部操作就是单击/双击/左右滑/上滑/下滑,没有长按依赖,扶着扶手用拇指够了;全程不需要我出声(怕出声这点满分)。
|
||||
- 一通电话是不是完整小乐趣:是。每通 30-60 秒自带起承转合(如 C1:来电 t=14.8s → 二选一 t=52.5s → 「全城听见老人笑了」t=87.9s),幕间垫乐只有 3-5 秒(t=92.2→97.3s),无沉默尴尬期;一整晚 4 分半≈两个站距,被打断就当下车,损失最多半通电话。
|
||||
- 被打断后上滑复述够不够:够,而且是我最喜欢的设计。上滑给我「第几通+口碑档」,然后自动把卡住的选项原句重播(主线 t=54.6-63.1s 完整演示),我一句话就捡回局面;就算错过 C3 糖糖那句关键话(t=141.4s),C4 带话时导播会原样转述「四十分钟前,有个孩子问我们……」(t=177.8s)——信息不靠我记性。吵车厢里听不清关键句,双击重听也在(教学 t=2.1s 讲过)。
|
||||
@@ -0,0 +1,21 @@
|
||||
# P4(疲惫的工人)R1 评审 —— 《不眠频率》
|
||||
|
||||
> 45 岁,工地收工,宿舍 21:00,外放小音量,游戏经验少。
|
||||
> 依据:research/new8/radio/round1/transcript-main.md(主线)+ transcript-stress.md(乱按压力局)。全部按「我真机听到这些」代入。
|
||||
|
||||
### 不眠频率
|
||||
- 状态感知:4/5 —— 全程都知道自己在第几通、电话里是谁:导播每通开头都报名(t=14.8「一线来电。七十多岁,雨夜,走丢了。」),上滑能听「现在是今晚第一通电话」(t=56.7),我在菜单里逛一圈回来,它还把刚才那句重播给我(t=69.4),不怕丢地方。扣的一分:t=58.8 我一个字还没说,上滑却听见「今晚的口碑,有点砸了」——我愣了半天,不知道自己啥时候砸的。
|
||||
- 下一步明确性:5/5 —— 开场就把家什教齐了(t=2.1「单击继续节目……向左或向右滑」,t=6.4「想跳过这句,单击就行」),每个关口都把两个选项明明白白念给我(t=52.5、t=79.8、t=243.0);我走神 25 秒,它也只轻轻说一句「单击屏幕,继续」(t=42.0),不催命。没出现过不知道该干嘛的时刻。
|
||||
- 愿意继续玩:是 —— 规矩一遍就懂,做错不骂人还夸我,收播时五个人的下落一句句念给我听(t=255.7-264.2),像干完活有人递了碗热水。
|
||||
- P0 问题:
|
||||
- 「还没干活先说我砸了」:t=58.8(压力局 t=21.2、t=48.8 一模一样)我还没做任何选择,上滑状态就是「今晚的口碑,有点砸了」。我不知道自己错在哪,像没上工先挨了顿批。后来琢磨着大概是「零分」的意思——可零分咋张嘴就是「砸」呢,开播前该说句「还没开张」这样的中性话才对。
|
||||
- 建议:
|
||||
1. 口碑 0 档在开播前别念「砸了」,换句中性的(证据 t=58.8)。第一晚就听人说我不行,怪丧气的。
|
||||
2. 头一声铃响之前补一句「铃一响,单击接听」。我这两局都是瞎蒙着点对的(t=14.8 铃响时没人提前说过「接听」俩字,教这句话的提醒得等我干耗 10 秒才来)。
|
||||
3. 乱按的时候,头一回它还张嘴:「这个手势,直播间里用不上」(压力局 t=17.0),往后就只剩「哒哒」两下空震(压力局 t=98.8 一次连震四下,t=176.1 也是四下)。隔一阵子麻烦再用嘴说一次哪儿错了,光震我猜不着。
|
||||
|
||||
#### 累了一天还能玩吗
|
||||
- 规矩是不是一遍讲清:是。t=10.6 一句「台里的规矩就一条:先接住人,再接电话」,加上 t=2.1 的单击和左右滑,统共三句话,往后五通电话没再添一条新规矩。每句都短,喘着气也记得住。
|
||||
- 来电者说话会不会太快听不清:不会。一句一句来,句与句之间都留着缝(t=17.0 老人第一句、t=48.2 第二句,中间空好几秒);我走神 25 秒(t=17.0-42.0),它不掐不跳,回来照样接得上。
|
||||
- 做错选择后游戏有没有让我难受:主线我全挑的走心那条,没挨过一句重话。压力局我对糖糖撒了个善意的谎,它说「你许了个兑不了的现。孩子睡了,谎留下了」(t=696.1),尾声还补一刀「糖糖后来又打来过一次。还是那句:楼下在吵」(t=1071.0)。没骂我,句句都对着我自己干的事说,就是听完心里沉了一会儿。这不算难受,算分寸。
|
||||
- 第一通电话打完有没有「我干得不错」的暖反馈:有,还是两回。t=77.7「他稳住了。老歌,比路牌管用」,挂电话前又一句「就这么接。记住这个手感」(t=90.1)——像老师傅瞅了眼我的活,点了点头。压力局里我头通选了转接派出所,它也说「地址报得清。干净利落」(t=359.9),没挑我做得不够暖心。
|
||||
@@ -0,0 +1,37 @@
|
||||
# R1 Synthesis —《不眠频率》(radio)
|
||||
|
||||
> 产品裁定 | 证据源:4 人设评审(p1-blind/p2-student/p3-office/p4-worker)+ 真机试玩报告(live-player.md,会话 radio-20260902072*/0749*)+ 转写(transcript-main/stress.md)
|
||||
|
||||
## 1. R1 裁决
|
||||
|
||||
| 评审方 | 状态感知 | 下一步明确 | 愿意继续玩 |
|
||||
|---|---|---|---|
|
||||
| P1 视障评委 | 4.5/5 | 5/5 | **是** |
|
||||
| P2 大学生 | 4/5 | 4/5 | **是** |
|
||||
| P3 白领 | 4.5/5 | 5/5 | **是** |
|
||||
| P4 工人 | 4/5 | 5/5 | **是** |
|
||||
| 真机玩家(老墨/墨墨) | — | — | **是**(附修复条件) |
|
||||
|
||||
**结论:5/5 愿意玩,P0 = 0。radio 是批次 1 的达标样板。** 真机两局打出 e1(rep=12 与设计表吻合)与 e4(rep=0 全克制),结局矩阵、跨来电差分(heardArgument/bond)、pendingChoice 盲玩公平、归因真话句全部现场命中。R2 进入打磨轮。
|
||||
|
||||
## 2. R2 修复清单(按裁定优先级)
|
||||
|
||||
### F 类(本轮必修)
|
||||
- **F1 (P1,live t=445.4)**:链末等待态的无效手势会**拆掉看门狗且不补挂** → 34.2s 承诺落空静默。修:无效手势不重置/不拆除链末看门狗(或拆后立即重挂)。
|
||||
- **F2 (P4/P2,转写 t=58.8)**:开播前口碑 0 档播「有点砸了」——档位文案与账目不符(0 ≠ 负)。修:rep 档位文案改「零起步」语义或调阈值映射。
|
||||
- **F3 (P2,live)**:RING 态铃声静默(ring 音效在 SA3 缺失清单)。修:程序合成 ring 循环垫上(可复现脚本),SA3 到位后可替换。
|
||||
- **F4 (P2,live)**:ASK 态断点续玩后单击语义陷阱(单击=跳句 vs 确认)。修:续玩恢复后的第一句播完再武装跳句。
|
||||
- **F5 (P2,live)**:链末句无跳过保护(玩家跳句后链末判定错位)。修:与 F1 同一提交内复核链末状态机。
|
||||
|
||||
### V 类(复核后定夺,可能为伪影)
|
||||
- **V1 (P3,stress 转写 t=688.9)**:「选项句没念完结果就出」。live 实测 pendingChoice 现场命中正常 → 疑为 stress 剧本快速滑动踩到缓存生效边界。dev 在 pendingChoice 生效时序上加断言(播完才生效)后关案;若复现升 P1。
|
||||
- **V2 (P1,stress 转写)**:菜单循环 38 次未见第三项「保存并回大厅」。live 未复现;菜单语音/逻辑静态审计无缺失。dev 用 playtest 增加菜单全项循环断言后关案。
|
||||
- **V3**:`arg_muffled`/`brake_screech` 两处「声音即世界」设计缺席 = SA3 资产未生成(缺 13 件)。**等待 HF token**;到位即补,接线代码已备。
|
||||
|
||||
### 仪器改进(不属游戏,记入 R2 协议)
|
||||
- harness `/session` 会把 `"speed":"1.7"` 字符串归一为 1.0:R2 起压力局传数值 1.7 或 `faster`(live-player.md P3-5)。
|
||||
|
||||
## 3. R2 轮次协议
|
||||
1. dev 修 F1-F5 + V1/V2 断言 → playtest 全绿(断言增量登记 15-radio.md)。
|
||||
2. 重新生成主线+压力转写;live 复测 1 局(验证 F1/F3 现场修复)。
|
||||
3. 人设复审:P1(看门狗/菜单)+ P3(stress 场景)两人设快速复审,其余 R3 全员复评。
|
||||
@@ -0,0 +1,284 @@
|
||||
# 试玩转写:《radio》
|
||||
|
||||
> 本文件是「玩家感知日志」:一位新手玩家的整局体验转写。语音列出了玩家听到的每句话全文,
|
||||
> 音效/BGM/震动按发生时间列出。「静默」段 = 玩家什么也听不到。手势是剧本注入的(模拟真人手部动作),
|
||||
> 非最优操作:包含犹豫、误操作与乱试。语音时长按语速估算(±20%),仅供节奏参考。
|
||||
t+ 0.0s (玩家点开游戏,轻触屏幕开始)
|
||||
t+ 0.0s ♫ BGM 切换 → bgm/onair
|
||||
t+ 0.0s ♪ 向导音:explore(探索/安全)
|
||||
t+ 0.0s ▶ 语音:「新的夜晚,开始了。」
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/onair_sting → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/phone_ring → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_connect → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_drop → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_rain_city → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_station → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_kid_room → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/arg_muffled → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_street_rain → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_cab → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/brake_screech → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/tape_static → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/onair_sting → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/phone_ring → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_connect → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_drop → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_rain_city → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_station → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_kid_room → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/arg_muffled → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_street_rain → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_cab → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/brake_screech → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/tape_static → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/onair_sting → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/phone_ring → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_connect → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_drop → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_rain_city → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_station → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_kid_room → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/arg_muffled → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_street_rain → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_cab → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/brake_screech → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/tape_static → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/onair_sting → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/phone_ring → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_connect → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_drop → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_rain_city → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_station → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_kid_room → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/arg_muffled → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_street_rain → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_cab → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/brake_screech → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/tape_static → 玩家此刻听到的是静默
|
||||
t+ 2.1s ♪ 音效 sfx/onair_sting
|
||||
t+ 2.1s ▶ 向导语音:「单击继续节目。请选择的时候,向左或向右滑。」
|
||||
t+ 4.2s ▶ 语音:「午夜零点,红灯亮起。欢迎回到《今夜不眠》。」
|
||||
t+ 6.4s ▶ 语音:「想跳过这句,单击就行。」
|
||||
t+ 8.5s ▶ 语音:「雨下了一整晚。热线灯,马上就要亮了。」
|
||||
t+ 10.6s ▶ 语音:「台里的规矩就一条:先接住人,再接电话。」
|
||||
t+ 12.7s ▶ 语音:「今晚五通电话。说什么话,由你决定。」
|
||||
t+ 14.8s ♪ 向导音:turn(轮到你)
|
||||
t+ 14.8s ♪ 音效 sfx/phone_ring
|
||||
t+ 14.8s 〰 震动:confirm(轻点确认)
|
||||
t+ 14.8s 【状态】开场口令和台标播完了,第一通电话响了 第 一 通电话打进来:单击接听(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】铃一响就接——接听是单击
|
||||
|
||||
t+ 14.8s ♪ 音效 sfx/amb_rain_city
|
||||
t+ 14.8s ♪ 音效 sfx/line_connect
|
||||
t+ 14.8s ▶ 语音:「一线来电。七十多岁,雨夜,走丢了。」
|
||||
t+ 14.8s 【状态】线路接通了 第 一 通通话中,正在听对方说话(语音播放中,语速1)
|
||||
t+ 17.0s 【状态】导播报完线,老人开口了 对方说完了,等我接话(第 一 通):单击继续(BGM=bgm/onair,语速1)
|
||||
t+ 17.0s ……… 静默 25s(听到一半走了神,在想老人的老花镜) ………
|
||||
t+ 42.0s ♪ 向导音:nudge(看门狗轻提醒)
|
||||
t+ 42.0s ▶ 向导语音:「单击屏幕,继续。」
|
||||
t+ 44.1s 【状态】听到一声轻响和「单击屏幕,继续」,马上点 对方说完了,等我接话(第 一 通):单击继续(BGM=bgm/onair,语速1)
|
||||
t+ 44.1s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 48.2s ▶ 语音:「雨太大了。我本来,只想买副老花镜。」
|
||||
t+ 52.5s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 52.5s ▶ 语音:「老人在发抖。向左滑,陪他哼那首老歌。向右滑,冷静问他路口的路牌。」
|
||||
|
||||
#### 【玩家动作】老人在发抖,我陪他哼那首老歌——但先上滑听一遍操作和进度
|
||||
|
||||
t+ 54.6s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 56.7s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 58.8s ▶ 语音:「今晚的口碑,有点砸了。」
|
||||
t+ 60.9s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 60.9s ▶ 语音:「老人在发抖。向左滑,陪他哼那首老歌。向右滑,冷静问他路口的路牌。」
|
||||
t+ 63.1s 【状态】听完帮助+状态链,游戏自动重播了选项 「请选择」念完了(第 一 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】下滑看看菜单有什么
|
||||
|
||||
t+ 63.1s ♪ 音效 sfx/ui_menu
|
||||
t+ 63.1s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 63.1s ♪ 向导音:menu(系统界面)
|
||||
t+ 63.1s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 65.2s ▶ 语音:「回到直播。」
|
||||
t+ 67.3s 【状态】菜单里,切一项听听 菜单里,当前项「回到直播」:单击切换,双击确认,上滑帮助,下滑关闭(BGM=bgm/menu,语速1)
|
||||
t+ 67.3s ▶ 语音:「重新开始今晚。」
|
||||
|
||||
#### 【玩家动作】听完了,下滑关闭菜单,回到选项
|
||||
|
||||
t+ 69.4s ♪ 音效 sfx/ui_confirm
|
||||
t+ 69.4s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 69.4s ♪ 向导音:explore(探索/安全)
|
||||
t+ 69.4s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 69.4s ▶ 语音:「老人在发抖。向左滑,陪他哼那首老歌。向右滑,冷静问他路口的路牌。」
|
||||
t+ 71.5s 【状态】选项念完了,做决定 「请选择」念完了(第 一 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】老人在发抖,我陪他哼那首老歌
|
||||
|
||||
t+ 71.5s ♪ 音效 sfx/ui_confirm
|
||||
t+ 71.5s ▶ 语音:「大爷别急,这首歌我也会。咱们一句一句来。」
|
||||
t+ 73.7s ▶ 语音:「对,对!路口修车铺,天天放这首!」
|
||||
t+ 77.7s ▶ 语音:「他稳住了。老歌,比路牌管用。」
|
||||
t+ 79.8s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 79.8s ▶ 语音:「雨声更密了。向左滑,留在原地陪他等巡逻队。向右滑,转接派出所。」
|
||||
t+ 82.0s 【状态】选项念完了,做决定 「请选择」念完了(第 一 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】留在原地陪他等巡逻队
|
||||
|
||||
t+ 82.0s ♪ 音效 sfx/ui_confirm
|
||||
t+ 82.0s ▶ 语音:「哪儿也不去。我陪你,这首歌还长着呢。」
|
||||
t+ 84.1s ▶ 语音:「好,好。有人说话,我就不怕了。」
|
||||
t+ 87.9s ▶ 语音:「十五分钟后,巡逻灯停在路口。全城听见老人笑了。」
|
||||
t+ 90.1s ▶ 语音:「就这么接。记住这个手感。」
|
||||
t+ 92.2s ♪ 向导音:settle(结算)
|
||||
t+ 92.2s ♪ 音效 sfx/line_drop
|
||||
t+ 92.2s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+ 92.2s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 94.3s 【状态】幕间,口碑播报和垫乐,等下一通 幕间喘息,垫乐播放中,马上接下一通(BGM=bgm/bridge,语速1)
|
||||
t+ 97.3s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+ 97.3s ♪ 向导音:turn(轮到你)
|
||||
t+ 97.3s ♪ 音效 sfx/phone_ring
|
||||
t+ 97.3s 〰 震动:confirm(轻点确认)
|
||||
t+ 97.3s 【状态】第 二 通电话响了,接 第 二 通电话打进来:单击接听(BGM=bgm/onair,语速1)
|
||||
t+ 97.3s ♪ 音效 sfx/amb_station
|
||||
t+ 97.3s ♪ 音效 sfx/line_connect
|
||||
t+ 97.3s ▶ 语音:「二线来电。姑娘,声音很轻,像怕吵到谁。」
|
||||
t+ 99.4s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 105.3s ▶ 语音:「票是回去看我妈的。可我试镜又黄了,两手空空……」
|
||||
t+ 110.9s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 110.9s ▶ 语音:「向左滑,告诉她这趟车值得上。向右滑,把选择还给她。」
|
||||
t+ 113.0s 【状态】选项念完了,做决定 「请选择」念完了(第 二 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】小鹿妈妈等的是那声「妈」,劝她上车
|
||||
|
||||
t+ 113.0s ♪ 音效 sfx/ui_confirm
|
||||
t+ 113.0s ▶ 语音:「你妈等的不是奖杯,是你进门喊的那声妈。」
|
||||
t+ 115.1s ▶ 语音:「呜……嗯。不退了,我现在就去检票。谢谢您。」
|
||||
t+ 120.3s ▶ 语音:「二线收工。这句话,值一个头条。」
|
||||
t+ 122.5s ♪ 向导音:settle(结算)
|
||||
t+ 122.5s ♪ 音效 sfx/line_drop
|
||||
t+ 122.5s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+ 122.5s ▶ 语音:「今晚的口碑,在听众里立住了。」
|
||||
t+ 124.6s 【状态】幕间,口碑播报和垫乐,等下一通 幕间喘息,垫乐播放中,马上接下一通(BGM=bgm/bridge,语速1)
|
||||
t+ 127.6s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+ 127.6s ♪ 向导音:turn(轮到你)
|
||||
t+ 127.6s ♪ 音效 sfx/phone_ring
|
||||
t+ 127.6s 〰 震动:confirm(轻点确认)
|
||||
t+ 127.6s 【状态】第 三 通电话响了,接 第 三 通电话打进来:单击接听(BGM=bgm/onair,语速1)
|
||||
t+ 127.6s ♪ 音效 sfx/amb_kid_room
|
||||
t+ 127.6s ♪ 音效 sfx/line_connect
|
||||
t+ 127.6s ▶ 语音:「三线来电。听呼吸,是个小孩。」
|
||||
t+ 129.7s ▶ 语音:「喂……有人吗?我睡不着。」
|
||||
t+ 132.9s ♪ 音效 sfx/arg_muffled
|
||||
t+ 132.9s ▶ 语音:「家里灯关了。可是楼下,一直有声音。」
|
||||
t+ 137.2s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 137.2s ▶ 语音:「向左滑,唱一段摇篮曲哄她睡。向右滑,轻轻问她怎么了。」
|
||||
t+ 139.3s 【状态】选项念完了,做决定 「请选择」念完了(第 三 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】糖糖像是憋着事,我轻轻问她怎么了
|
||||
|
||||
t+ 139.3s ♪ 音效 sfx/ui_confirm
|
||||
t+ 139.3s ▶ 语音:「睡不着的时候,心里是不是装着事?说给我听听。」
|
||||
t+ 141.4s ▶ 语音:「爸爸妈妈摔门了。是不是……我做错了什么呀。」
|
||||
t+ 146.6s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 146.6s ▶ 语音:「孩子的声音在抖。向左滑,告诉她这不是她的错。向右滑,答应她明天都会好。」
|
||||
t+ 148.7s 【状态】选项念完了,做决定 「请选择」念完了(第 三 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】告诉她这不是她的错——大人的事不算在孩子头上
|
||||
|
||||
t+ 148.7s ♪ 音效 sfx/ui_confirm
|
||||
t+ 148.7s ▶ 语音:「糖糖,记住,大人的事,不是小孩的错。一个字都不是。」
|
||||
t+ 150.8s ▶ 语音:「嗯……那我睡了。他们明天,会一起给我切蛋糕吗?」
|
||||
t+ 156.5s ▶ 语音:「蛋糕。记下来——四线的来电,可能跟这个家有关。」
|
||||
t+ 158.6s ♪ 向导音:settle(结算)
|
||||
t+ 158.6s ♪ 音效 sfx/line_drop
|
||||
t+ 158.6s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+ 158.6s 【状态】幕间,口碑播报和垫乐,等下一通 幕间喘息,垫乐播放中,马上接下一通(BGM=bgm/bridge,语速1)
|
||||
t+ 161.6s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+ 161.6s ♪ 向导音:turn(轮到你)
|
||||
t+ 161.6s ♪ 音效 sfx/phone_ring
|
||||
t+ 161.6s 〰 震动:confirm(轻点确认)
|
||||
t+ 161.6s 【状态】第 四 通电话响了,接 第 四 通电话打进来:单击接听(BGM=bgm/onair,语速1)
|
||||
t+ 161.6s ♪ 音效 sfx/amb_street_rain
|
||||
t+ 161.6s ♪ 音效 sfx/line_connect
|
||||
t+ 161.6s ▶ 语音:「四线来电。户外风声大,是位大姐。」
|
||||
t+ 163.7s ▶ 语音:「主播,我就想找个人说说。我家那口子,今晚要出远门的活儿。」
|
||||
t+ 170.5s ▶ 语音:「明天孩子生日!蛋糕都订好了,他人要今晚走!」
|
||||
t+ 175.6s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 175.6s ▶ 语音:「摔门声你听见了。向左滑,替孩子给她带句话。向右滑,劝她回家把话说开。」
|
||||
t+ 177.8s 【状态】选项念完了,做决定 「请选择」念完了(第 四 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】陈姐听见孩子问话了,我把话带回去
|
||||
|
||||
t+ 177.8s ♪ 音效 sfx/ui_confirm
|
||||
t+ 177.8s ▶ 语音:「四十分钟前,有个孩子问我们:爸妈摔门,是不是她的错。」
|
||||
t+ 179.9s ▶ 语音:「什么?她还没睡?这么晚了,她还醒着?」
|
||||
t+ 184.4s ▶ 语音:「她攥着电话,很久没出声。风都停了。」
|
||||
t+ 186.5s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 186.5s ▶ 语音:「她的呼吸平了。向左滑,留在直播里,让全城等这个门铃。向右滑,换垫乐,私下陪她说完。」
|
||||
t+ 188.6s 【状态】选项念完了,做决定 「请选择」念完了(第 四 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】留在直播里,让全城等这声门铃
|
||||
|
||||
t+ 188.6s ♪ 音效 sfx/ui_confirm
|
||||
t+ 188.6s ▶ 语音:「陈姐,别挂。让他接电话——全城都在听。」
|
||||
t+ 190.8s ▶ 语音:「喂!回来吧!蛋糕要化了,孩子等着呢!」
|
||||
t+ 195.3s ▶ 语音:「电话那头,传来跑步声。今晚的高光时刻。」
|
||||
t+ 197.4s ♪ 向导音:settle(结算)
|
||||
t+ 197.4s ♪ 音效 sfx/line_drop
|
||||
t+ 197.4s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+ 197.4s 【状态】幕间,口碑播报和垫乐,等下一通 幕间喘息,垫乐播放中,马上接下一通(BGM=bgm/bridge,语速1)
|
||||
t+ 200.4s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+ 200.4s ♪ 向导音:turn(轮到你)
|
||||
t+ 200.4s ♪ 音效 sfx/phone_ring
|
||||
t+ 200.4s 〰 震动:confirm(轻点确认)
|
||||
t+ 200.4s 【状态】第 五 通电话响了,接 第 五 通电话打进来:单击接听(BGM=bgm/onair,语速1)
|
||||
t+ 200.4s ♪ 音效 sfx/amb_cab
|
||||
t+ 200.4s ♪ 音效 sfx/line_connect
|
||||
t+ 200.4s ▶ 语音:「五线来电。引擎声没停过——他在开车!」
|
||||
t+ 202.5s ▶ 语音:「主播,别挂。陪我说话,我的眼皮,沉得很。」
|
||||
t+ 207.5s ▶ 语音:「跑完这趟,闺女的学费就齐了。雨刷都快刮不动了。」
|
||||
t+ 213.1s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 213.1s ▶ 语音:「方向盘比话筒危险。向左滑,陪他聊聊闺女。向右滑,让他立刻进服务区。」
|
||||
t+ 215.2s 【状态】选项念完了,做决定 「请选择」念完了(第 五 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】老韩眼皮在打架,我陪他聊聊闺女
|
||||
|
||||
t+ 215.2s ♪ 音效 sfx/ui_confirm
|
||||
t+ 215.2s ▶ 语音:「说说她。开学第一天,她跟你说的头一句话,是什么?」
|
||||
t+ 217.4s ▶ 语音:「她说,爸,我在学校给你赚了朵小红花。哈哈,哈哈……」
|
||||
t+ 223.4s ♪ 向导音:danger(危险)
|
||||
t+ 223.4s ♪ 音效 sfx/brake_screech
|
||||
t+ 223.4s 〰 震动:danger(危险逼近)
|
||||
t+ 225.4s ▶ 语音:「车道偏了——听!」
|
||||
t+ 227.6s ▶ 语音:「嘶——好险!前车急刹,我擦着护栏过去了。彻底醒了!」
|
||||
t+ 233.6s ▶ 语音:「吓醒的,也算醒。这一趟,聊到家。」
|
||||
t+ 235.8s ▶ 语音:「对了。头通电话那位大爷,就是这片被巡逻队找到的。这城市的夜,是接着的。」
|
||||
t+ 237.9s ♪ 向导音:settle(结算)
|
||||
t+ 237.9s ♪ 音效 sfx/line_drop
|
||||
t+ 237.9s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+ 237.9s 【状态】幕间,口碑播报和垫乐,等下一通 幕间喘息,垫乐播放中,马上接下一通(BGM=bgm/bridge,语速1)
|
||||
t+ 240.9s ▶ 语音:「五线收工。垫乐起——零点档,还剩最后一段。」
|
||||
t+ 243.0s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+ 243.0s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 243.0s ▶ 语音:「留言机红灯在闪,是老主播三年前没播完的那句晚安。向左滑,替他播出去。向右滑,照常收播。」
|
||||
t+ 245.1s 【状态】选项念完了,做决定 「请选择」念完了(第 五 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】留言机红灯在闪——直面它,替老主播把晚安播出去
|
||||
|
||||
t+ 245.1s ♪ 音效 sfx/ui_confirm
|
||||
t+ 245.1s ♪ 音效 sfx/tape_static
|
||||
t+ 245.1s ▶ 语音:「师父,三年了。这句晚安,我替您播。各位,晚安。」
|
||||
t+ 247.2s ▶ 语音:「带子里其实只有电流声。但空着的那一秒,你说满了。」
|
||||
t+ 249.4s ♪ 向导音:settle(结算)
|
||||
t+ 249.4s ♫ BGM 切换 → bgm/ending(淡入 1500ms)
|
||||
t+ 249.4s ▶ 语音:「天亮了,热线灯还亮着。你们的晚安,是这座城市的心跳。」
|
||||
t+ 251.5s ▶ 语音:「这把话筒,我总算接得住了。明晚零点,接着不眠。」
|
||||
t+ 253.6s ▶ 语音:「收播了。导播间替你记了一笔账——今晚的人都怎样了。」
|
||||
t+ 255.7s ▶ 语音:「老周:孙子替他买了老花镜。回信说,谢谢那首歌。」
|
||||
t+ 257.8s ▶ 语音:「小鹿上车了。她妈后来打电话说,那声妈,比奖杯值钱。」
|
||||
t+ 260.0s ▶ 语音:「糖糖家的门,这个月没再摔过。她说这是主播魔法。」
|
||||
t+ 262.1s ▶ 语音:「陈姐家切了蛋糕。那句「回来吧」,是我这晚听过最好的声音。」
|
||||
t+ 264.2s ▶ 语音:「老韩到家了。后视镜上,多了朵小红花。」
|
||||
t+ 266.3s 【状态】结局链走完,五条回响一句句点到我今晚的每一次选择 结局和五条回响都听完了。单击再来一局,下滑开菜单(BGM=bgm/ending,语速1)
|
||||
|
||||
#### 【玩家动作】听完尾声那笔账——今晚的人都接住了,会话结束(E1 天亮之前)
|
||||
|
||||
@@ -0,0 +1,851 @@
|
||||
# 试玩转写:《radio》
|
||||
|
||||
> 本文件是「玩家感知日志」:一位新手玩家的整局体验转写。语音列出了玩家听到的每句话全文,
|
||||
> 音效/BGM/震动按发生时间列出。「静默」段 = 玩家什么也听不到。手势是剧本注入的(模拟真人手部动作),
|
||||
> 非最优操作:包含犹豫、误操作与乱试。语音时长按语速估算(±20%),仅供节奏参考。
|
||||
t+ 0.0s (玩家点开游戏,轻触屏幕开始)
|
||||
t+ 0.0s ♫ BGM 切换 → bgm/onair
|
||||
t+ 0.0s ♪ 向导音:explore(探索/安全)
|
||||
t+ 0.0s ▶ 语音:「新的夜晚,开始了。」
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/onair_sting → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/phone_ring → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_connect → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_drop → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_rain_city → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_station → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_kid_room → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/arg_muffled → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_street_rain → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_cab → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/brake_screech → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/tape_static → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/onair_sting → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/phone_ring → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_connect → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_drop → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_rain_city → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_station → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_kid_room → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/arg_muffled → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_street_rain → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_cab → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/brake_screech → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/tape_static → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/onair_sting → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/phone_ring → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_connect → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_drop → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_rain_city → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_station → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_kid_room → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/arg_muffled → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_street_rain → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_cab → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/brake_screech → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/tape_static → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/onair_sting → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/phone_ring → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_connect → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_drop → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_rain_city → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_station → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_kid_room → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/arg_muffled → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_street_rain → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_cab → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/brake_screech → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/tape_static → 玩家此刻听到的是静默
|
||||
t+ 2.1s ♪ 音效 sfx/onair_sting
|
||||
t+ 2.1s ▶ 向导语音:「单击继续节目。请选择的时候,向左或向右滑。」
|
||||
t+ 4.2s ▶ 语音:「午夜零点,红灯亮起。欢迎回到《今夜不眠》。」
|
||||
t+ 6.4s ▶ 语音:「想跳过这句,单击就行。」
|
||||
t+ 8.5s ▶ 语音:「雨下了一整晚。热线灯,马上就要亮了。」
|
||||
t+ 10.6s ▶ 语音:「台里的规矩就一条:先接住人,再接电话。」
|
||||
t+ 12.7s ▶ 语音:「今晚五通电话。说什么话,由你决定。」
|
||||
t+ 14.8s ♪ 向导音:turn(轮到你)
|
||||
t+ 14.8s ♪ 音效 sfx/phone_ring
|
||||
t+ 14.8s 〰 震动:confirm(轻点确认)
|
||||
t+ 14.8s ♪ 音效 sfx/amb_rain_city
|
||||
t+ 14.8s ♪ 音效 sfx/line_connect
|
||||
t+ 14.8s ▶ 语音:「一线来电。七十多岁,雨夜,走丢了。」
|
||||
t+ 17.0s ▶ 向导语音:「这个手势,直播间里用不上。」
|
||||
t+ 17.0s 〰 震动:error(做错了:两连短震)
|
||||
t+ 17.0s ▶ 向导语音(对白在播,本句按 idle-only 跳过未播):「这个手势,直播间里用不上。」
|
||||
t+ 17.0s 〰 震动:error(做错了:两连短震)
|
||||
t+ 17.0s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 19.1s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 21.2s ▶ 语音:「今晚的口碑,有点砸了。」
|
||||
t+ 23.3s ♪ 音效 sfx/amb_rain_city
|
||||
t+ 23.3s ♪ 音效 sfx/line_connect
|
||||
t+ 23.3s ▶ 语音:「一线来电。七十多岁,雨夜,走丢了。」
|
||||
t+ 25.4s ♪ 音效 sfx/ui_menu
|
||||
t+ 25.4s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 25.4s ♪ 向导音:menu(系统界面)
|
||||
t+ 25.4s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 27.6s ▶ 语音:「回到直播。」
|
||||
t+ 29.7s ▶ 语音:「重新开始今晚。」
|
||||
t+ 31.8s ♪ 音效 sfx/ui_confirm
|
||||
t+ 31.8s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 31.8s ♪ 向导音:explore(探索/安全)
|
||||
t+ 31.8s ♪ 音效 sfx/amb_rain_city
|
||||
t+ 31.8s ♪ 音效 sfx/line_connect
|
||||
t+ 31.8s ▶ 语音:「一线来电。七十多岁,雨夜,走丢了。」
|
||||
t+ 33.9s 〰 震动:error(做错了:两连短震)
|
||||
t+ 33.9s ▶ 语音:「一线来电。七十多岁,雨夜,走丢了。」
|
||||
t+ 36.0s 〰 震动:error(做错了:两连短震)
|
||||
t+ 36.0s 〰 震动:error(做错了:两连短震)
|
||||
t+ 36.0s ♪ 音效 sfx/ui_menu
|
||||
t+ 36.0s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 36.0s ♪ 向导音:menu(系统界面)
|
||||
t+ 36.0s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 38.2s ▶ 语音:「回到直播。」
|
||||
t+ 40.3s ▶ 语音:「重新开始今晚。」
|
||||
t+ 42.4s ♪ 音效 sfx/ui_confirm
|
||||
t+ 42.4s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 42.4s ♪ 向导音:explore(探索/安全)
|
||||
t+ 42.4s ♪ 音效 sfx/amb_rain_city
|
||||
t+ 42.4s ♪ 音效 sfx/line_connect
|
||||
t+ 42.4s ▶ 语音:「一线来电。七十多岁,雨夜,走丢了。」
|
||||
t+ 44.5s 〰 震动:error(做错了:两连短震)
|
||||
t+ 44.5s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 46.6s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 48.8s ▶ 语音:「今晚的口碑,有点砸了。」
|
||||
t+ 50.9s ♪ 音效 sfx/amb_rain_city
|
||||
t+ 50.9s ♪ 音效 sfx/line_connect
|
||||
t+ 50.9s ▶ 语音:「一线来电。七十多岁,雨夜,走丢了。」
|
||||
t+ 53.0s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 57.1s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 59.2s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 61.3s ▶ 语音:「今晚的口碑,有点砸了。」
|
||||
t+ 63.4s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 67.5s 〰 震动:error(做错了:两连短震)
|
||||
t+ 67.5s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 69.6s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 71.8s ▶ 语音:「今晚的口碑,有点砸了。」
|
||||
t+ 73.9s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 77.9s 〰 震动:error(做错了:两连短震)
|
||||
t+ 77.9s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 80.1s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 82.2s ▶ 语音:「今晚的口碑,有点砸了。」
|
||||
t+ 84.3s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 88.4s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 90.5s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 92.6s ▶ 语音:「今晚的口碑,有点砸了。」
|
||||
t+ 94.7s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 98.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 98.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 98.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 98.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 98.8s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 100.9s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 103.1s ▶ 语音:「今晚的口碑,有点砸了。」
|
||||
t+ 105.2s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 109.3s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 113.3s ♪ 音效 sfx/ui_menu
|
||||
t+ 113.3s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 113.3s ♪ 向导音:menu(系统界面)
|
||||
t+ 113.3s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 115.4s ▶ 语音:「回到直播。」
|
||||
t+ 117.6s ▶ 语音:「重新开始今晚。」
|
||||
t+ 119.7s ♪ 音效 sfx/ui_confirm
|
||||
t+ 119.7s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 119.7s ♪ 向导音:explore(探索/安全)
|
||||
t+ 119.7s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 123.8s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 127.8s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 130.0s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 132.1s ▶ 语音:「今晚的口碑,有点砸了。」
|
||||
t+ 134.2s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 138.3s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 140.4s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 142.5s ▶ 语音:「今晚的口碑,有点砸了。」
|
||||
t+ 144.6s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 148.7s 〰 震动:error(做错了:两连短震)
|
||||
t+ 148.7s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 152.8s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 156.9s ▶ 语音:「雨太大了。我本来,只想买副老花镜。」
|
||||
t+ 161.2s ▶ 语音:「雨太大了。我本来,只想买副老花镜。」
|
||||
t+ 165.5s ♪ 音效 sfx/ui_menu
|
||||
t+ 165.5s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 165.5s ♪ 向导音:menu(系统界面)
|
||||
t+ 165.5s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 167.6s ▶ 语音:「回到直播。」
|
||||
t+ 169.7s ▶ 语音:「重新开始今晚。」
|
||||
t+ 171.8s ♪ 音效 sfx/ui_confirm
|
||||
t+ 171.8s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 171.8s ♪ 向导音:explore(探索/安全)
|
||||
t+ 171.8s ▶ 语音:「雨太大了。我本来,只想买副老花镜。」
|
||||
t+ 176.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 176.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 176.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 176.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 176.1s ▶ 语音:「雨太大了。我本来,只想买副老花镜。」
|
||||
t+ 180.4s ♪ 音效 sfx/ui_menu
|
||||
t+ 180.4s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 180.4s ♪ 向导音:menu(系统界面)
|
||||
t+ 180.4s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 182.5s ▶ 语音:「回到直播。」
|
||||
t+ 184.7s ▶ 语音:「重新开始今晚。」
|
||||
t+ 186.8s ♪ 音效 sfx/ui_confirm
|
||||
t+ 186.8s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 186.8s ♪ 向导音:explore(探索/安全)
|
||||
t+ 186.8s ▶ 语音:「雨太大了。我本来,只想买副老花镜。」
|
||||
t+ 191.1s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 191.1s ▶ 语音:「老人在发抖。向左滑,陪他哼那首老歌。向右滑,冷静问他路口的路牌。」
|
||||
t+ 193.2s ♪ 音效 sfx/ui_confirm
|
||||
t+ 193.2s ▶ 语音:「大爷别急,这首歌我也会。咱们一句一句来。」
|
||||
t+ 195.3s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 197.4s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 199.6s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 201.7s ▶ 语音:「大爷别急,这首歌我也会。咱们一句一句来。」
|
||||
t+ 203.8s ♪ 音效 sfx/ui_menu
|
||||
t+ 203.8s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 203.8s ♪ 向导音:menu(系统界面)
|
||||
t+ 203.8s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 205.9s ▶ 语音:「回到直播。」
|
||||
t+ 208.0s ▶ 语音:「重新开始今晚。」
|
||||
t+ 210.2s ♪ 音效 sfx/ui_confirm
|
||||
t+ 210.2s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 210.2s ♪ 向导音:explore(探索/安全)
|
||||
t+ 210.2s ▶ 语音:「大爷别急,这首歌我也会。咱们一句一句来。」
|
||||
t+ 212.3s 〰 震动:error(做错了:两连短震)
|
||||
t+ 212.3s ♪ 音效 sfx/ui_menu
|
||||
t+ 212.3s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 212.3s ♪ 向导音:menu(系统界面)
|
||||
t+ 212.3s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 214.4s ▶ 语音:「回到直播。」
|
||||
t+ 216.5s ▶ 语音:「重新开始今晚。」
|
||||
t+ 218.6s ♪ 音效 sfx/ui_confirm
|
||||
t+ 218.6s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 218.6s ♪ 向导音:explore(探索/安全)
|
||||
t+ 218.6s ▶ 语音:「大爷别急,这首歌我也会。咱们一句一句来。」
|
||||
t+ 220.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 220.8s ▶ 语音:「对,对!路口修车铺,天天放这首!」
|
||||
t+ 224.8s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 226.9s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 229.1s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 231.2s ▶ 语音:「对,对!路口修车铺,天天放这首!」
|
||||
t+ 235.3s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 237.4s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 239.5s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 241.6s ▶ 语音:「对,对!路口修车铺,天天放这首!」
|
||||
t+ 245.7s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 247.8s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 249.9s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 252.1s ▶ 语音:「对,对!路口修车铺,天天放这首!」
|
||||
t+ 256.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 256.1s ♪ 音效 sfx/ui_menu
|
||||
t+ 256.1s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 256.1s ♪ 向导音:menu(系统界面)
|
||||
t+ 256.1s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 258.3s ▶ 语音:「回到直播。」
|
||||
t+ 260.4s ▶ 语音:「重新开始今晚。」
|
||||
t+ 262.5s ♪ 音效 sfx/ui_confirm
|
||||
t+ 262.5s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 262.5s ♪ 向导音:explore(探索/安全)
|
||||
t+ 262.5s ▶ 语音:「对,对!路口修车铺,天天放这首!」
|
||||
t+ 266.6s 〰 震动:error(做错了:两连短震)
|
||||
t+ 266.6s ▶ 语音:「他稳住了。老歌,比路牌管用。」
|
||||
t+ 268.7s 〰 震动:error(做错了:两连短震)
|
||||
t+ 268.7s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 270.8s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 272.9s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 275.0s ▶ 语音:「他稳住了。老歌,比路牌管用。」
|
||||
t+ 277.2s 〰 震动:error(做错了:两连短震)
|
||||
t+ 277.2s 〰 震动:error(做错了:两连短震)
|
||||
t+ 277.2s 〰 震动:error(做错了:两连短震)
|
||||
t+ 277.2s ▶ 语音:「他稳住了。老歌,比路牌管用。」
|
||||
t+ 279.3s ♪ 音效 sfx/ui_menu
|
||||
t+ 279.3s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 279.3s ♪ 向导音:menu(系统界面)
|
||||
t+ 279.3s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 281.4s ▶ 语音:「回到直播。」
|
||||
t+ 283.5s ▶ 语音:「重新开始今晚。」
|
||||
t+ 285.6s ♪ 音效 sfx/ui_confirm
|
||||
t+ 285.6s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 285.6s ♪ 向导音:explore(探索/安全)
|
||||
t+ 285.6s ▶ 语音:「他稳住了。老歌,比路牌管用。」
|
||||
t+ 287.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 287.8s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 289.9s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 292.0s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 294.1s ▶ 语音:「他稳住了。老歌,比路牌管用。」
|
||||
t+ 296.2s ▶ 语音:「他稳住了。老歌,比路牌管用。」
|
||||
t+ 298.4s ♪ 音效 sfx/ui_menu
|
||||
t+ 298.4s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 298.4s ♪ 向导音:menu(系统界面)
|
||||
t+ 298.4s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 300.5s ▶ 语音:「回到直播。」
|
||||
t+ 302.6s ▶ 语音:「重新开始今晚。」
|
||||
t+ 304.7s ♪ 音效 sfx/ui_confirm
|
||||
t+ 304.7s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 304.7s ♪ 向导音:explore(探索/安全)
|
||||
t+ 304.7s ▶ 语音:「他稳住了。老歌,比路牌管用。」
|
||||
t+ 306.8s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 306.8s ▶ 语音:「雨声更密了。向左滑,留在原地陪他等巡逻队。向右滑,转接派出所。」
|
||||
t+ 309.0s ♪ 音效 sfx/ui_confirm
|
||||
t+ 309.0s ▶ 语音:「大爷,我把您转给派出所,他们马上就到。」
|
||||
t+ 311.1s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 313.2s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 315.3s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 317.4s ▶ 语音:「大爷,我把您转给派出所,他们马上就到。」
|
||||
t+ 319.6s 〰 震动:error(做错了:两连短震)
|
||||
t+ 319.6s 〰 震动:error(做错了:两连短震)
|
||||
t+ 319.6s ♪ 音效 sfx/ui_menu
|
||||
t+ 319.6s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 319.6s ♪ 向导音:menu(系统界面)
|
||||
t+ 319.6s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 321.7s ▶ 语音:「回到直播。」
|
||||
t+ 323.8s ▶ 语音:「重新开始今晚。」
|
||||
t+ 325.9s ♪ 音效 sfx/ui_confirm
|
||||
t+ 325.9s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 325.9s ♪ 向导音:explore(探索/安全)
|
||||
t+ 325.9s ▶ 语音:「大爷,我把您转给派出所,他们马上就到。」
|
||||
t+ 328.0s ♪ 音效 sfx/ui_menu
|
||||
t+ 328.0s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 328.0s ♪ 向导音:menu(系统界面)
|
||||
t+ 328.0s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 330.2s ▶ 语音:「回到直播。」
|
||||
t+ 332.3s ▶ 语音:「重新开始今晚。」
|
||||
t+ 334.4s ♪ 音效 sfx/ui_confirm
|
||||
t+ 334.4s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 334.4s ♪ 向导音:explore(探索/安全)
|
||||
t+ 334.4s ▶ 语音:「大爷,我把您转给派出所,他们马上就到。」
|
||||
t+ 336.5s ▶ 语音:「大爷,我把您转给派出所,他们马上就到。」
|
||||
t+ 338.6s 〰 震动:error(做错了:两连短震)
|
||||
t+ 338.6s ♪ 音效 sfx/ui_menu
|
||||
t+ 338.6s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 338.6s ♪ 向导音:menu(系统界面)
|
||||
t+ 338.6s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 340.8s ▶ 语音:「回到直播。」
|
||||
t+ 342.9s ▶ 语音:「重新开始今晚。」
|
||||
t+ 345.0s ♪ 音效 sfx/ui_confirm
|
||||
t+ 345.0s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 345.0s ♪ 向导音:explore(探索/安全)
|
||||
t+ 345.0s ▶ 语音:「大爷,我把您转给派出所,他们马上就到。」
|
||||
t+ 347.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 347.1s ▶ 语音:「好,好。谢谢你啊,谢谢。」
|
||||
t+ 350.3s ♪ 音效 sfx/ui_menu
|
||||
t+ 350.3s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 350.3s ♪ 向导音:menu(系统界面)
|
||||
t+ 350.3s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 352.4s ▶ 语音:「回到直播。」
|
||||
t+ 354.6s ▶ 语音:「重新开始今晚。」
|
||||
t+ 356.7s ♪ 音效 sfx/ui_confirm
|
||||
t+ 356.7s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 356.7s ♪ 向导音:explore(探索/安全)
|
||||
t+ 356.7s ▶ 语音:「好,好。谢谢你啊,谢谢。」
|
||||
t+ 359.9s ▶ 语音:「转接完成,地址报得清。干净利落。」
|
||||
t+ 362.0s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 364.1s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 366.2s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 368.3s ▶ 语音:「转接完成,地址报得清。干净利落。」
|
||||
t+ 370.5s ▶ 语音:「就这么接。记住这个手感。」
|
||||
t+ 372.6s ♪ 向导音:settle(结算)
|
||||
t+ 372.6s ♪ 音效 sfx/line_drop
|
||||
t+ 372.6s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+ 372.6s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 377.7s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+ 377.7s ♪ 向导音:turn(轮到你)
|
||||
t+ 377.7s ♪ 音效 sfx/phone_ring
|
||||
t+ 377.7s 〰 震动:confirm(轻点确认)
|
||||
t+ 377.7s ♪ 音效 sfx/amb_station
|
||||
t+ 377.7s ♪ 音效 sfx/line_connect
|
||||
t+ 377.7s ▶ 语音:「二线来电。姑娘,声音很轻,像怕吵到谁。」
|
||||
t+ 379.8s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 385.7s 〰 震动:error(做错了:两连短震)
|
||||
t+ 385.7s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 387.8s ▶ 语音:「现在是今晚第二通电话。」
|
||||
t+ 389.9s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 392.0s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 397.9s ♪ 音效 sfx/ui_menu
|
||||
t+ 397.9s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 397.9s ♪ 向导音:menu(系统界面)
|
||||
t+ 397.9s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 400.0s ▶ 语音:「回到直播。」
|
||||
t+ 402.1s ▶ 语音:「重新开始今晚。」
|
||||
t+ 404.2s ♪ 音效 sfx/ui_confirm
|
||||
t+ 404.2s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 404.2s ♪ 向导音:explore(探索/安全)
|
||||
t+ 404.2s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 410.1s ♪ 音效 sfx/ui_menu
|
||||
t+ 410.1s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 410.1s ♪ 向导音:menu(系统界面)
|
||||
t+ 410.1s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 412.2s ▶ 语音:「回到直播。」
|
||||
t+ 414.3s ▶ 语音:「重新开始今晚。」
|
||||
t+ 416.5s ♪ 音效 sfx/ui_confirm
|
||||
t+ 416.5s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 416.5s ♪ 向导音:explore(探索/安全)
|
||||
t+ 416.5s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 422.3s 〰 震动:error(做错了:两连短震)
|
||||
t+ 422.3s 〰 震动:error(做错了:两连短震)
|
||||
t+ 422.3s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 424.4s ▶ 语音:「现在是今晚第二通电话。」
|
||||
t+ 426.6s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 428.7s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 434.5s ♪ 音效 sfx/ui_menu
|
||||
t+ 434.5s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 434.5s ♪ 向导音:menu(系统界面)
|
||||
t+ 434.5s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 436.6s ▶ 语音:「回到直播。」
|
||||
t+ 438.8s ▶ 语音:「重新开始今晚。」
|
||||
t+ 440.9s ♪ 音效 sfx/ui_confirm
|
||||
t+ 440.9s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 440.9s ♪ 向导音:explore(探索/安全)
|
||||
t+ 440.9s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 446.7s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 452.6s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 454.7s ▶ 语音:「现在是今晚第二通电话。」
|
||||
t+ 456.8s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 459.0s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 464.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 464.8s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 466.9s ▶ 语音:「现在是今晚第二通电话。」
|
||||
t+ 469.0s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 471.2s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 477.0s ▶ 语音:「票是回去看我妈的。可我试镜又黄了,两手空空……」
|
||||
t+ 482.7s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 482.7s ▶ 语音:「向左滑,告诉她这趟车值得上。向右滑,把选择还给她。」
|
||||
t+ 484.8s ♪ 音效 sfx/ui_confirm
|
||||
t+ 484.8s ▶ 语音:「退不退,都是你的自由。夜还长,慢慢想。」
|
||||
t+ 486.9s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 489.0s ▶ 语音:「现在是今晚第二通电话。」
|
||||
t+ 491.1s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 493.3s ▶ 语音:「退不退,都是你的自由。夜还长,慢慢想。」
|
||||
t+ 495.4s ▶ 语音:「退不退,都是你的自由。夜还长,慢慢想。」
|
||||
t+ 497.5s ♪ 音效 sfx/ui_menu
|
||||
t+ 497.5s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 497.5s ♪ 向导音:menu(系统界面)
|
||||
t+ 497.5s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 499.6s ▶ 语音:「回到直播。」
|
||||
t+ 501.7s ▶ 语音:「重新开始今晚。」
|
||||
t+ 503.9s ♪ 音效 sfx/ui_confirm
|
||||
t+ 503.9s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 503.9s ♪ 向导音:explore(探索/安全)
|
||||
t+ 503.9s ▶ 语音:「退不退,都是你的自由。夜还长,慢慢想。」
|
||||
t+ 506.0s ♪ 音效 sfx/ui_menu
|
||||
t+ 506.0s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 506.0s ♪ 向导音:menu(系统界面)
|
||||
t+ 506.0s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 508.1s ▶ 语音:「回到直播。」
|
||||
t+ 510.2s ▶ 语音:「重新开始今晚。」
|
||||
t+ 512.3s ♪ 音效 sfx/ui_confirm
|
||||
t+ 512.3s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 512.3s ♪ 向导音:explore(探索/安全)
|
||||
t+ 512.3s ▶ 语音:「退不退,都是你的自由。夜还长,慢慢想。」
|
||||
t+ 514.5s ▶ 语音:「退不退,都是你的自由。夜还长,慢慢想。」
|
||||
t+ 516.6s ▶ 语音:「嗯……我再想想。窗口要关了,我先过去了。」
|
||||
t+ 521.5s 〰 震动:error(做错了:两连短震)
|
||||
t+ 521.5s ▶ 语音:「她走了。没上车,也没退票。年轻人的夜,长了点。」
|
||||
t+ 523.7s ♪ 向导音:settle(结算)
|
||||
t+ 523.7s ♪ 音效 sfx/line_drop
|
||||
t+ 523.7s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+ 526.7s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+ 526.7s ♪ 向导音:turn(轮到你)
|
||||
t+ 526.7s ♪ 音效 sfx/phone_ring
|
||||
t+ 526.7s 〰 震动:confirm(轻点确认)
|
||||
t+ 526.7s ♪ 音效 sfx/amb_kid_room
|
||||
t+ 526.7s ♪ 音效 sfx/line_connect
|
||||
t+ 526.7s ▶ 语音:「三线来电。听呼吸,是个小孩。」
|
||||
t+ 528.8s ▶ 语音:「喂……有人吗?我睡不着。」
|
||||
t+ 532.0s ▶ 语音:「喂……有人吗?我睡不着。」
|
||||
t+ 535.2s ▶ 语音:「喂……有人吗?我睡不着。」
|
||||
t+ 538.3s 〰 震动:error(做错了:两连短震)
|
||||
t+ 538.3s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 540.5s ▶ 语音:「现在是今晚第三通电话。」
|
||||
t+ 542.6s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 544.7s ▶ 语音:「喂……有人吗?我睡不着。」
|
||||
t+ 547.9s ♪ 音效 sfx/ui_menu
|
||||
t+ 547.9s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 547.9s ♪ 向导音:menu(系统界面)
|
||||
t+ 547.9s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 550.0s ▶ 语音:「回到直播。」
|
||||
t+ 552.1s ▶ 语音:「重新开始今晚。」
|
||||
t+ 554.2s ♪ 音效 sfx/ui_confirm
|
||||
t+ 554.2s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 554.2s ♪ 向导音:explore(探索/安全)
|
||||
t+ 554.2s ▶ 语音:「喂……有人吗?我睡不着。」
|
||||
t+ 557.4s ▶ 语音:「喂……有人吗?我睡不着。」
|
||||
t+ 560.6s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 562.7s ▶ 语音:「现在是今晚第三通电话。」
|
||||
t+ 564.9s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 567.0s ▶ 语音:「喂……有人吗?我睡不着。」
|
||||
t+ 570.2s ♪ 音效 sfx/arg_muffled
|
||||
t+ 570.2s ▶ 语音:「家里灯关了。可是楼下,一直有声音。」
|
||||
t+ 574.5s ♪ 音效 sfx/ui_menu
|
||||
t+ 574.5s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 574.5s ♪ 向导音:menu(系统界面)
|
||||
t+ 574.5s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 576.6s ▶ 语音:「回到直播。」
|
||||
t+ 578.7s ▶ 语音:「重新开始今晚。」
|
||||
t+ 580.8s ♪ 音效 sfx/ui_confirm
|
||||
t+ 580.8s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 580.8s ♪ 向导音:explore(探索/安全)
|
||||
t+ 580.8s ♪ 音效 sfx/arg_muffled
|
||||
t+ 580.8s ▶ 语音:「家里灯关了。可是楼下,一直有声音。」
|
||||
t+ 585.1s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 587.2s ▶ 语音:「现在是今晚第三通电话。」
|
||||
t+ 587.3s ♪ 音效 sfx/arg_muffled
|
||||
t+ 589.4s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 591.5s ♪ 音效 sfx/arg_muffled
|
||||
t+ 591.5s ▶ 语音:「家里灯关了。可是楼下,一直有声音。」
|
||||
t+ 595.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 595.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 595.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 595.8s ▶ 语音:「家里灯关了。可是楼下,一直有声音。」
|
||||
t+ 598.0s ♪ 音效 sfx/arg_muffled
|
||||
t+ 600.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 600.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 600.1s ♪ 音效 sfx/ui_menu
|
||||
t+ 600.1s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 600.1s ♪ 向导音:menu(系统界面)
|
||||
t+ 600.1s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 602.2s ▶ 语音:「回到直播。」
|
||||
t+ 604.3s ▶ 语音:「重新开始今晚。」
|
||||
t+ 606.4s ♪ 音效 sfx/ui_confirm
|
||||
t+ 606.4s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 606.4s ♪ 向导音:explore(探索/安全)
|
||||
t+ 606.4s ♪ 音效 sfx/arg_muffled
|
||||
t+ 606.4s ▶ 语音:「家里灯关了。可是楼下,一直有声音。」
|
||||
t+ 610.7s 〰 震动:error(做错了:两连短震)
|
||||
t+ 610.7s 〰 震动:error(做错了:两连短震)
|
||||
t+ 610.7s ♪ 音效 sfx/ui_menu
|
||||
t+ 610.7s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 610.7s ♪ 向导音:menu(系统界面)
|
||||
t+ 610.7s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 612.9s ▶ 语音:「回到直播。」
|
||||
t+ 615.0s ▶ 语音:「重新开始今晚。」
|
||||
t+ 617.1s ♪ 音效 sfx/ui_confirm
|
||||
t+ 617.1s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 617.1s ♪ 向导音:explore(探索/安全)
|
||||
t+ 617.1s ♪ 音效 sfx/arg_muffled
|
||||
t+ 617.1s ▶ 语音:「家里灯关了。可是楼下,一直有声音。」
|
||||
t+ 621.4s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 623.5s ▶ 语音:「现在是今晚第三通电话。」
|
||||
t+ 623.6s ♪ 音效 sfx/arg_muffled
|
||||
t+ 625.6s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 627.8s ♪ 音效 sfx/arg_muffled
|
||||
t+ 627.8s ▶ 语音:「家里灯关了。可是楼下,一直有声音。」
|
||||
t+ 632.0s ♪ 音效 sfx/ui_menu
|
||||
t+ 632.0s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 632.0s ♪ 向导音:menu(系统界面)
|
||||
t+ 632.0s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 634.2s ▶ 语音:「回到直播。」
|
||||
t+ 636.3s ▶ 语音:「重新开始今晚。」
|
||||
t+ 638.4s ♪ 音效 sfx/ui_confirm
|
||||
t+ 638.4s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 638.4s ♪ 向导音:explore(探索/安全)
|
||||
t+ 638.4s ♪ 音效 sfx/arg_muffled
|
||||
t+ 638.4s ▶ 语音:「家里灯关了。可是楼下,一直有声音。」
|
||||
t+ 642.7s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 642.7s ▶ 语音:「向左滑,唱一段摇篮曲哄她睡。向右滑,轻轻问她怎么了。」
|
||||
t+ 644.8s ♪ 音效 sfx/ui_confirm
|
||||
t+ 644.8s ▶ 语音:「睡不着的时候,心里是不是装着事?说给我听听。」
|
||||
t+ 646.9s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 649.1s ▶ 语音:「现在是今晚第三通电话。」
|
||||
t+ 651.2s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 653.3s ▶ 语音:「睡不着的时候,心里是不是装着事?说给我听听。」
|
||||
t+ 655.4s ▶ 语音:「爸爸妈妈摔门了。是不是……我做错了什么呀。」
|
||||
t+ 660.6s ♪ 音效 sfx/ui_menu
|
||||
t+ 660.6s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 660.6s ♪ 向导音:menu(系统界面)
|
||||
t+ 660.6s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 662.7s ▶ 语音:「回到直播。」
|
||||
t+ 664.9s ▶ 语音:「重新开始今晚。」
|
||||
t+ 667.0s ♪ 音效 sfx/ui_confirm
|
||||
t+ 667.0s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 667.0s ♪ 向导音:explore(探索/安全)
|
||||
t+ 667.0s ▶ 语音:「爸爸妈妈摔门了。是不是……我做错了什么呀。」
|
||||
t+ 672.2s 〰 震动:error(做错了:两连短震)
|
||||
t+ 672.2s 〰 震动:error(做错了:两连短震)
|
||||
t+ 672.2s ▶ 语音:「爸爸妈妈摔门了。是不是……我做错了什么呀。」
|
||||
t+ 677.3s ♪ 音效 sfx/ui_menu
|
||||
t+ 677.3s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 677.3s ♪ 向导音:menu(系统界面)
|
||||
t+ 677.3s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 679.5s ▶ 语音:「回到直播。」
|
||||
t+ 681.6s ▶ 语音:「重新开始今晚。」
|
||||
t+ 683.7s ♪ 音效 sfx/ui_confirm
|
||||
t+ 683.7s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 683.7s ♪ 向导音:explore(探索/安全)
|
||||
t+ 683.7s ▶ 语音:「爸爸妈妈摔门了。是不是……我做错了什么呀。」
|
||||
t+ 688.9s 〰 震动:error(做错了:两连短震)
|
||||
t+ 688.9s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 688.9s ▶ 语音:「孩子的声音在抖。向左滑,告诉她这不是她的错。向右滑,答应她明天都会好。」
|
||||
t+ 691.0s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 691.0s ♪ 音效 sfx/ui_confirm
|
||||
t+ 691.0s ▶ 语音:「睡吧。明天一睁眼,什么都会好起来的。」
|
||||
t+ 693.1s ▶ 语音:「真的吗?拉钩。晚安……」
|
||||
t+ 696.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 696.1s ▶ 语音:「你许了个兑不了的现。孩子睡了,谎留下了。」
|
||||
t+ 698.2s ♪ 向导音:settle(结算)
|
||||
t+ 698.2s ♪ 音效 sfx/line_drop
|
||||
t+ 698.2s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+ 701.2s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+ 701.2s ♪ 向导音:turn(轮到你)
|
||||
t+ 701.2s ♪ 音效 sfx/phone_ring
|
||||
t+ 701.2s 〰 震动:confirm(轻点确认)
|
||||
t+ 701.2s ♪ 音效 sfx/amb_street_rain
|
||||
t+ 701.2s ♪ 音效 sfx/line_connect
|
||||
t+ 701.2s ▶ 语音:「四线来电。户外风声大,是位大姐。」
|
||||
t+ 703.3s ▶ 语音:「四线来电。户外风声大,是位大姐。」
|
||||
t+ 705.5s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 707.6s ▶ 语音:「现在是今晚第四通电话。」
|
||||
t+ 709.7s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 711.8s ♪ 音效 sfx/amb_street_rain
|
||||
t+ 711.8s ♪ 音效 sfx/line_connect
|
||||
t+ 711.8s ▶ 语音:「四线来电。户外风声大,是位大姐。」
|
||||
t+ 713.9s 〰 震动:error(做错了:两连短震)
|
||||
t+ 713.9s ♪ 音效 sfx/ui_menu
|
||||
t+ 713.9s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 713.9s ♪ 向导音:menu(系统界面)
|
||||
t+ 713.9s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 716.1s ▶ 语音:「回到直播。」
|
||||
t+ 718.2s ▶ 语音:「重新开始今晚。」
|
||||
t+ 720.3s ♪ 音效 sfx/ui_confirm
|
||||
t+ 720.3s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 720.3s ♪ 向导音:explore(探索/安全)
|
||||
t+ 720.3s ♪ 音效 sfx/amb_street_rain
|
||||
t+ 720.3s ♪ 音效 sfx/line_connect
|
||||
t+ 720.3s ▶ 语音:「四线来电。户外风声大,是位大姐。」
|
||||
t+ 722.4s ▶ 语音:「四线来电。户外风声大,是位大姐。」
|
||||
t+ 724.5s ▶ 语音:「四线来电。户外风声大,是位大姐。」
|
||||
t+ 726.7s ▶ 语音:「主播,我就想找个人说说。我家那口子,今晚要出远门的活儿。」
|
||||
t+ 733.4s ▶ 语音:「主播,我就想找个人说说。我家那口子,今晚要出远门的活儿。」
|
||||
t+ 740.1s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 742.3s ▶ 语音:「现在是今晚第四通电话。」
|
||||
t+ 744.4s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 746.5s ▶ 语音:「主播,我就想找个人说说。我家那口子,今晚要出远门的活儿。」
|
||||
t+ 753.2s ▶ 语音:「主播,我就想找个人说说。我家那口子,今晚要出远门的活儿。」
|
||||
t+ 760.0s ▶ 语音:「明天孩子生日!蛋糕都订好了,他人要今晚走!」
|
||||
t+ 765.2s 〰 震动:error(做错了:两连短震)
|
||||
t+ 765.2s 〰 震动:error(做错了:两连短震)
|
||||
t+ 765.2s 〰 震动:error(做错了:两连短震)
|
||||
t+ 765.2s ▶ 语音:「明天孩子生日!蛋糕都订好了,他人要今晚走!」
|
||||
t+ 770.4s ▶ 语音:「明天孩子生日!蛋糕都订好了,他人要今晚走!」
|
||||
t+ 775.5s ♪ 音效 sfx/ui_menu
|
||||
t+ 775.5s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 775.5s ♪ 向导音:menu(系统界面)
|
||||
t+ 775.5s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 777.7s ▶ 语音:「回到直播。」
|
||||
t+ 779.8s ▶ 语音:「重新开始今晚。」
|
||||
t+ 781.9s ♪ 音效 sfx/ui_confirm
|
||||
t+ 781.9s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 781.9s ♪ 向导音:explore(探索/安全)
|
||||
t+ 781.9s ▶ 语音:「明天孩子生日!蛋糕都订好了,他人要今晚走!」
|
||||
t+ 787.1s ▶ 语音:「明天孩子生日!蛋糕都订好了,他人要今晚走!」
|
||||
t+ 792.3s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 794.4s ▶ 语音:「现在是今晚第四通电话。」
|
||||
t+ 796.5s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 798.6s ▶ 语音:「明天孩子生日!蛋糕都订好了,他人要今晚走!」
|
||||
t+ 803.8s ▶ 语音:「明天孩子生日!蛋糕都订好了,他人要今晚走!」
|
||||
t+ 809.0s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 809.0s ▶ 语音:「摔门声你听见了。向左滑,替孩子给她带句话。向右滑,劝她回家把话说开。」
|
||||
t+ 811.1s ♪ 音效 sfx/ui_confirm
|
||||
t+ 811.1s ▶ 语音:「吵架隔着电话吵不赢。回家吧,蛋糕别放到坏了。」
|
||||
t+ 813.3s ♪ 音效 sfx/ui_menu
|
||||
t+ 813.3s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 813.3s ♪ 向导音:menu(系统界面)
|
||||
t+ 813.3s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 815.4s ▶ 语音:「回到直播。」
|
||||
t+ 817.5s ▶ 语音:「重新开始今晚。」
|
||||
t+ 819.6s ♪ 音效 sfx/ui_confirm
|
||||
t+ 819.6s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 819.6s ♪ 向导音:explore(探索/安全)
|
||||
t+ 819.6s ▶ 语音:「吵架隔着电话吵不赢。回家吧,蛋糕别放到坏了。」
|
||||
t+ 821.7s 〰 震动:error(做错了:两连短震)
|
||||
t+ 821.7s 〰 震动:error(做错了:两连短震)
|
||||
t+ 821.7s 〰 震动:error(做错了:两连短震)
|
||||
t+ 821.7s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 823.9s ▶ 语音:「现在是今晚第四通电话。」
|
||||
t+ 826.0s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 828.1s ▶ 语音:「吵架隔着电话吵不赢。回家吧,蛋糕别放到坏了。」
|
||||
t+ 830.2s 〰 震动:error(做错了:两连短震)
|
||||
t+ 830.2s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 832.3s ▶ 语音:「现在是今晚第四通电话。」
|
||||
t+ 834.5s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 836.6s ▶ 语音:「吵架隔着电话吵不赢。回家吧,蛋糕别放到坏了。」
|
||||
t+ 838.7s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 843.7s 〰 震动:error(做错了:两连短震)
|
||||
t+ 843.7s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 845.8s ▶ 语音:「现在是今晚第四通电话。」
|
||||
t+ 847.9s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 850.0s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 855.0s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 857.1s ▶ 语音:「现在是今晚第四通电话。」
|
||||
t+ 859.2s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 861.3s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 866.3s ♪ 音效 sfx/ui_menu
|
||||
t+ 866.3s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 866.3s ♪ 向导音:menu(系统界面)
|
||||
t+ 866.3s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 868.4s ▶ 语音:「回到直播。」
|
||||
t+ 870.5s ▶ 语音:「重新开始今晚。」
|
||||
t+ 872.7s ♪ 音效 sfx/ui_confirm
|
||||
t+ 872.7s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 872.7s ♪ 向导音:explore(探索/安全)
|
||||
t+ 872.7s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 877.6s 〰 震动:error(做错了:两连短震)
|
||||
t+ 877.6s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 879.8s ▶ 语音:「现在是今晚第四通电话。」
|
||||
t+ 881.9s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 884.0s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 889.0s 〰 震动:error(做错了:两连短震)
|
||||
t+ 889.0s 〰 震动:error(做错了:两连短震)
|
||||
t+ 889.0s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 893.9s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 898.9s ♪ 音效 sfx/ui_menu
|
||||
t+ 898.9s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 898.9s ♪ 向导音:menu(系统界面)
|
||||
t+ 898.9s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 901.0s ▶ 语音:「回到直播。」
|
||||
t+ 903.1s ▶ 语音:「重新开始今晚。」
|
||||
t+ 905.2s ♪ 音效 sfx/ui_confirm
|
||||
t+ 905.2s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 905.2s ♪ 向导音:explore(探索/安全)
|
||||
t+ 905.2s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 910.2s ♪ 音效 sfx/ui_menu
|
||||
t+ 910.2s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 910.2s ♪ 向导音:menu(系统界面)
|
||||
t+ 910.2s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 912.3s ▶ 语音:「回到直播。」
|
||||
t+ 914.4s ▶ 语音:「重新开始今晚。」
|
||||
t+ 916.6s ♪ 音效 sfx/ui_confirm
|
||||
t+ 916.6s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 916.6s ♪ 向导音:explore(探索/安全)
|
||||
t+ 916.6s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 921.5s ♪ 音效 sfx/ui_menu
|
||||
t+ 921.5s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 921.5s ♪ 向导音:menu(系统界面)
|
||||
t+ 921.5s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 923.7s ▶ 语音:「回到直播。」
|
||||
t+ 925.8s ▶ 语音:「重新开始今晚。」
|
||||
t+ 927.9s ♪ 音效 sfx/ui_confirm
|
||||
t+ 927.9s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 927.9s ♪ 向导音:explore(探索/安全)
|
||||
t+ 927.9s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 932.9s ▶ 语音:「她往回走了。成不成,看他们自己的了。」
|
||||
t+ 935.0s ♪ 向导音:settle(结算)
|
||||
t+ 935.0s ♪ 音效 sfx/line_drop
|
||||
t+ 935.0s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+ 938.0s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+ 938.0s ♪ 向导音:turn(轮到你)
|
||||
t+ 938.0s ♪ 音效 sfx/phone_ring
|
||||
t+ 938.0s 〰 震动:confirm(轻点确认)
|
||||
t+ 938.0s ♪ 音效 sfx/amb_cab
|
||||
t+ 938.0s ♪ 音效 sfx/line_connect
|
||||
t+ 938.0s ▶ 语音:「五线来电。引擎声没停过——他在开车!」
|
||||
t+ 940.1s ♪ 音效 sfx/ui_menu
|
||||
t+ 940.1s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 940.1s ♪ 向导音:menu(系统界面)
|
||||
t+ 940.1s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 942.2s ▶ 语音:「回到直播。」
|
||||
t+ 944.3s ▶ 语音:「重新开始今晚。」
|
||||
t+ 946.5s ♪ 音效 sfx/ui_confirm
|
||||
t+ 946.5s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 946.5s ♪ 向导音:explore(探索/安全)
|
||||
t+ 946.5s ♪ 音效 sfx/amb_cab
|
||||
t+ 946.5s ♪ 音效 sfx/line_connect
|
||||
t+ 946.5s ▶ 语音:「五线来电。引擎声没停过——他在开车!」
|
||||
t+ 948.6s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 950.7s ▶ 语音:「现在是今晚第五通电话。」
|
||||
t+ 952.8s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 954.9s ♪ 音效 sfx/amb_cab
|
||||
t+ 954.9s ♪ 音效 sfx/line_connect
|
||||
t+ 954.9s ▶ 语音:「五线来电。引擎声没停过——他在开车!」
|
||||
t+ 957.1s ♪ 音效 sfx/ui_menu
|
||||
t+ 957.1s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 957.1s ♪ 向导音:menu(系统界面)
|
||||
t+ 957.1s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 959.2s ▶ 语音:「回到直播。」
|
||||
t+ 961.3s ▶ 语音:「重新开始今晚。」
|
||||
t+ 963.4s ♪ 音效 sfx/ui_confirm
|
||||
t+ 963.4s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 963.4s ♪ 向导音:explore(探索/安全)
|
||||
t+ 963.4s ♪ 音效 sfx/amb_cab
|
||||
t+ 963.4s ♪ 音效 sfx/line_connect
|
||||
t+ 963.4s ▶ 语音:「五线来电。引擎声没停过——他在开车!」
|
||||
t+ 965.5s ♪ 音效 sfx/ui_menu
|
||||
t+ 965.5s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 965.5s ♪ 向导音:menu(系统界面)
|
||||
t+ 965.5s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 967.7s ▶ 语音:「回到直播。」
|
||||
t+ 969.8s ▶ 语音:「重新开始今晚。」
|
||||
t+ 971.9s ♪ 音效 sfx/ui_confirm
|
||||
t+ 971.9s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 971.9s ♪ 向导音:explore(探索/安全)
|
||||
t+ 971.9s ♪ 音效 sfx/amb_cab
|
||||
t+ 971.9s ♪ 音效 sfx/line_connect
|
||||
t+ 971.9s ▶ 语音:「五线来电。引擎声没停过——他在开车!」
|
||||
t+ 974.0s ▶ 语音:「主播,别挂。陪我说话,我的眼皮,沉得很。」
|
||||
t+ 979.0s ▶ 语音:「跑完这趟,闺女的学费就齐了。雨刷都快刮不动了。」
|
||||
t+ 984.6s 〰 震动:error(做错了:两连短震)
|
||||
t+ 984.6s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 986.7s ▶ 语音:「现在是今晚第五通电话。」
|
||||
t+ 988.9s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 991.0s ▶ 语音:「跑完这趟,闺女的学费就齐了。雨刷都快刮不动了。」
|
||||
t+ 996.6s 〰 震动:error(做错了:两连短震)
|
||||
t+ 996.6s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 996.6s ▶ 语音:「方向盘比话筒危险。向左滑,陪他聊聊闺女。向右滑,让他立刻进服务区。」
|
||||
t+ 998.7s ♪ 音效 sfx/ui_confirm
|
||||
t+ 998.7s ▶ 语音:「说说她。开学第一天,她跟你说的头一句话,是什么?」
|
||||
t+1000.8s 〰 震动:error(做错了:两连短震)
|
||||
t+1000.8s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+1003.0s ▶ 语音:「现在是今晚第五通电话。」
|
||||
t+1005.1s ▶ 语音:「今晚的口碑,在听众里立住了。」
|
||||
t+1007.2s ▶ 语音:「说说她。开学第一天,她跟你说的头一句话,是什么?」
|
||||
t+1009.3s ♪ 音效 sfx/ui_menu
|
||||
t+1009.3s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+1009.3s ♪ 向导音:menu(系统界面)
|
||||
t+1009.3s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+1011.4s ▶ 语音:「回到直播。」
|
||||
t+1013.6s ▶ 语音:「重新开始今晚。」
|
||||
t+1015.7s ♪ 音效 sfx/ui_confirm
|
||||
t+1015.7s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+1015.7s ♪ 向导音:explore(探索/安全)
|
||||
t+1015.7s ▶ 语音:「说说她。开学第一天,她跟你说的头一句话,是什么?」
|
||||
t+1017.8s 〰 震动:error(做错了:两连短震)
|
||||
t+1017.8s ♪ 音效 sfx/ui_menu
|
||||
t+1017.8s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+1017.8s ♪ 向导音:menu(系统界面)
|
||||
t+1017.8s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+1019.9s ▶ 语音:「回到直播。」
|
||||
t+1022.0s ▶ 语音:「重新开始今晚。」
|
||||
t+1024.2s ♪ 音效 sfx/ui_confirm
|
||||
t+1024.2s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+1024.2s ♪ 向导音:explore(探索/安全)
|
||||
t+1024.2s ▶ 语音:「说说她。开学第一天,她跟你说的头一句话,是什么?」
|
||||
t+1026.3s ▶ 语音:「她说,爸,我在学校给你赚了朵小红花。哈哈,哈哈……」
|
||||
t+1032.4s ♪ 向导音:danger(危险)
|
||||
t+1032.4s ♪ 音效 sfx/brake_screech
|
||||
t+1032.4s 〰 震动:danger(危险逼近)
|
||||
t+1034.4s ▶ 语音:「车道偏了——听!」
|
||||
t+1036.5s ▶ 语音:「嘶——好险!前车急刹,我擦着护栏过去了。彻底醒了!」
|
||||
t+1042.6s ▶ 语音:「吓醒的,也算醒。这一趟,聊到家。」
|
||||
t+1044.7s ▶ 语音:「对了。头通电话那位大爷,就是这片被巡逻队找到的。这城市的夜,是接着的。」
|
||||
t+1046.8s ♪ 向导音:settle(结算)
|
||||
t+1046.8s ♪ 音效 sfx/line_drop
|
||||
t+1046.8s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+1046.8s ▶ 语音:「今晚的口碑,在听众里立住了。」
|
||||
t+1051.9s ▶ 语音:「五线收工。垫乐起——零点档,还剩最后一段。」
|
||||
t+1054.0s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+1054.0s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+1054.0s ▶ 语音:「留言机红灯在闪,是老主播三年前没播完的那句晚安。向左滑,替他播出去。向右滑,照常收播。」
|
||||
t+1056.2s ♪ 音效 sfx/ui_confirm
|
||||
t+1056.2s ▶ 语音:「各位,今晚到这里。明晚零点,今夜不眠,不见不散。」
|
||||
t+1058.3s ▶ 语音:「留言机的红灯,又多亮了一夜。」
|
||||
t+1060.4s ♪ 向导音:settle(结算)
|
||||
t+1060.4s ♫ BGM 切换 → bgm/ending(淡入 1500ms)
|
||||
t+1060.4s ▶ 语音:「今晚的热线烧得发烫。全城的失眠者,都被接住了。」
|
||||
t+1062.5s ▶ 语音:「只是路过留言机的时候,你还是没敢看它。红灯灭得很慢。」
|
||||
t+1064.6s ▶ 语音:「收播了。导播间替你记了一笔账——今晚的人都怎样了。」
|
||||
t+1066.8s ▶ 语音:「老周:孙子替他买了老花镜。回信说,谢谢那首歌。」
|
||||
t+1068.9s ▶ 语音:「小鹿退了票。检票口的灯,记得那趟没上成的车。」
|
||||
t+1071.0s ▶ 语音:「糖糖后来又打来过一次。还是那句:楼下在吵。」
|
||||
t+1073.1s ▶ 语音:「陈姐在公车站坐到了末班车。那通电话,成了没寄出的信。」
|
||||
t+1075.2s ▶ 语音:「老韩到家了。后视镜上,多了朵小红花。」
|
||||
t+1077.4s 【状态】乱按剧本收尾:接听 5 次、8 个抉择、乱试 199 次、逛菜单 38 次 结局和五条回响都听完了。单击再来一局,下滑开菜单(BGM=bgm/ending,语速1)
|
||||
|
||||
#### 【玩家动作】全程没有任何一次手势被无声吞掉,也没有卡死在某个状态里——结局链照样走完
|
||||
|
||||
@@ -0,0 +1,275 @@
|
||||
# 试玩转写:《radio》
|
||||
|
||||
> 本文件是「玩家感知日志」:一位新手玩家的整局体验转写。语音列出了玩家听到的每句话全文,
|
||||
> 音效/BGM/震动按发生时间列出。「静默」段 = 玩家什么也听不到。手势是剧本注入的(模拟真人手部动作),
|
||||
> 非最优操作:包含犹豫、误操作与乱试。语音时长按语速估算(±20%),仅供节奏参考。
|
||||
t+ 0.0s (玩家点开游戏,轻触屏幕开始)
|
||||
t+ 0.0s ♫ BGM 切换 → bgm/onair
|
||||
t+ 0.0s ♪ 向导音:explore(探索/安全)
|
||||
t+ 0.0s ▶ 语音:「新的夜晚,开始了。」
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/onair_sting → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_connect → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_drop → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_rain_city → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_station → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_kid_room → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/arg_muffled → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_street_rain → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_cab → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/brake_screech → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/tape_static → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/onair_sting → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_connect → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_drop → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_rain_city → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_station → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_kid_room → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/arg_muffled → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_street_rain → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_cab → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/brake_screech → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/tape_static → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/onair_sting → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_connect → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_drop → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_rain_city → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_station → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_kid_room → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/arg_muffled → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_street_rain → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_cab → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/brake_screech → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/tape_static → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/onair_sting → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_connect → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_drop → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_rain_city → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_station → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_kid_room → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/arg_muffled → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_street_rain → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_cab → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/brake_screech → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/tape_static → 玩家此刻听到的是静默
|
||||
t+ 2.1s ♪ 音效 sfx/onair_sting
|
||||
t+ 2.1s ▶ 向导语音:「单击继续节目。请选择的时候,向左或向右滑。」
|
||||
t+ 4.2s ▶ 语音:「午夜零点,红灯亮起。欢迎回到《今夜不眠》。」
|
||||
t+ 6.4s ▶ 语音:「想跳过这句,单击就行。」
|
||||
t+ 8.5s ▶ 语音:「雨下了一整晚。热线灯,马上就要亮了。」
|
||||
t+ 10.6s ▶ 语音:「台里的规矩就一条:先接住人,再接电话。」
|
||||
t+ 12.7s ▶ 语音:「今晚五通电话。说什么话,由你决定。」
|
||||
t+ 14.8s ♪ 向导音:turn(轮到你)
|
||||
t+ 14.8s 〰 震动:confirm(轻点确认)
|
||||
t+ 14.8s 【状态】开场口令和台标播完了,第一通电话响了 第 一 通电话打进来:单击接听(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】铃一响就接——接听是单击
|
||||
|
||||
t+ 14.8s ♪ 音效 sfx/amb_rain_city
|
||||
t+ 14.8s ♪ 音效 sfx/line_connect
|
||||
t+ 14.8s ▶ 语音:「一线来电。七十多岁,雨夜,走丢了。」
|
||||
t+ 14.8s 【状态】线路接通了 第 一 通通话中,正在听对方说话(语音播放中,语速1)
|
||||
t+ 17.0s 【状态】导播报完线,老人开口了 对方说完了,等我接话(第 一 通):单击继续(BGM=bgm/onair,语速1)
|
||||
t+ 17.0s ……… 静默 25s(听到一半走了神,在想老人的老花镜) ………
|
||||
t+ 42.0s ♪ 向导音:nudge(看门狗轻提醒)
|
||||
t+ 42.0s ▶ 向导语音:「单击屏幕,继续。」
|
||||
t+ 44.1s 【状态】听到一声轻响和「单击屏幕,继续」,马上点 对方说完了,等我接话(第 一 通):单击继续(BGM=bgm/onair,语速1)
|
||||
t+ 44.1s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 48.2s ▶ 语音:「雨太大了。我本来,只想买副老花镜。」
|
||||
t+ 52.5s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 52.5s ▶ 语音:「老人在发抖。向左滑,陪他哼那首老歌。向右滑,冷静问他路口的路牌。」
|
||||
|
||||
#### 【玩家动作】老人在发抖,我陪他哼那首老歌——但先上滑听一遍操作和进度
|
||||
|
||||
t+ 54.6s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 56.7s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 58.8s ▶ 语音:「今晚的口碑,还没立起来。」
|
||||
t+ 60.9s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 60.9s ▶ 语音:「老人在发抖。向左滑,陪他哼那首老歌。向右滑,冷静问他路口的路牌。」
|
||||
t+ 63.1s 【状态】听完帮助+状态链,游戏自动重播了选项 「请选择」念完了(第 一 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】下滑看看菜单有什么
|
||||
|
||||
t+ 63.1s ♪ 音效 sfx/ui_menu
|
||||
t+ 63.1s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 63.1s ♪ 向导音:menu(系统界面)
|
||||
t+ 63.1s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 65.2s ▶ 语音:「回到直播。」
|
||||
t+ 67.3s 【状态】菜单里,切一项听听 菜单里,当前项「回到直播」:单击切换,双击确认,上滑帮助,下滑关闭(BGM=bgm/menu,语速1)
|
||||
t+ 67.3s ▶ 语音:「重新开始今晚。」
|
||||
|
||||
#### 【玩家动作】听完了,下滑关闭菜单,回到选项
|
||||
|
||||
t+ 69.4s ♪ 音效 sfx/ui_confirm
|
||||
t+ 69.4s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 69.4s ♪ 向导音:explore(探索/安全)
|
||||
t+ 69.4s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 69.4s ▶ 语音:「老人在发抖。向左滑,陪他哼那首老歌。向右滑,冷静问他路口的路牌。」
|
||||
t+ 71.5s 【状态】选项念完了,做决定 「请选择」念完了(第 一 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】老人在发抖,我陪他哼那首老歌
|
||||
|
||||
t+ 71.5s ♪ 音效 sfx/ui_confirm
|
||||
t+ 71.5s ▶ 语音:「大爷别急,这首歌我也会。咱们一句一句来。」
|
||||
t+ 73.7s ▶ 语音:「对,对!路口修车铺,天天放这首!」
|
||||
t+ 77.7s ▶ 语音:「他稳住了。老歌,比路牌管用。」
|
||||
t+ 79.8s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 79.8s ▶ 语音:「雨声更密了。向左滑,留在原地陪他等巡逻队。向右滑,转接派出所。」
|
||||
t+ 82.0s 【状态】选项念完了,做决定 「请选择」念完了(第 一 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】留在原地陪他等巡逻队
|
||||
|
||||
t+ 82.0s ♪ 音效 sfx/ui_confirm
|
||||
t+ 82.0s ▶ 语音:「哪儿也不去。我陪你,这首歌还长着呢。」
|
||||
t+ 84.1s ▶ 语音:「好,好。有人说话,我就不怕了。」
|
||||
t+ 87.9s ▶ 语音:「十五分钟后,巡逻灯停在路口。全城听见老人笑了。」
|
||||
t+ 90.1s ▶ 语音:「就这么接。记住这个手感。」
|
||||
t+ 92.2s ♪ 向导音:settle(结算)
|
||||
t+ 92.2s ♪ 音效 sfx/line_drop
|
||||
t+ 92.2s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+ 92.2s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 94.3s 【状态】幕间,口碑播报和垫乐,等下一通 幕间喘息,垫乐播放中,马上接下一通(BGM=bgm/bridge,语速1)
|
||||
t+ 97.3s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+ 97.3s ♪ 向导音:turn(轮到你)
|
||||
t+ 97.3s 〰 震动:confirm(轻点确认)
|
||||
t+ 97.3s 【状态】第 二 通电话响了,接 第 二 通电话打进来:单击接听(BGM=bgm/onair,语速1)
|
||||
t+ 97.3s ♪ 音效 sfx/amb_station
|
||||
t+ 97.3s ♪ 音效 sfx/line_connect
|
||||
t+ 97.3s ▶ 语音:「二线来电。姑娘,声音很轻,像怕吵到谁。」
|
||||
t+ 99.4s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 105.3s ▶ 语音:「票是回去看我妈的。可我试镜又黄了,两手空空……」
|
||||
t+ 110.9s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 110.9s ▶ 语音:「向左滑,告诉她这趟车值得上。向右滑,把选择还给她。」
|
||||
t+ 113.0s 【状态】选项念完了,做决定 「请选择」念完了(第 二 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】小鹿妈妈等的是那声「妈」,劝她上车
|
||||
|
||||
t+ 113.0s ♪ 音效 sfx/ui_confirm
|
||||
t+ 113.0s ▶ 语音:「你妈等的不是奖杯,是你进门喊的那声妈。」
|
||||
t+ 115.1s ▶ 语音:「呜……嗯。不退了,我现在就去检票。谢谢您。」
|
||||
t+ 120.3s ▶ 语音:「二线收工。这句话,值一个头条。」
|
||||
t+ 122.5s ♪ 向导音:settle(结算)
|
||||
t+ 122.5s ♪ 音效 sfx/line_drop
|
||||
t+ 122.5s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+ 122.5s ▶ 语音:「今晚的口碑,在听众里立住了。」
|
||||
t+ 124.6s 【状态】幕间,口碑播报和垫乐,等下一通 幕间喘息,垫乐播放中,马上接下一通(BGM=bgm/bridge,语速1)
|
||||
t+ 127.6s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+ 127.6s ♪ 向导音:turn(轮到你)
|
||||
t+ 127.6s 〰 震动:confirm(轻点确认)
|
||||
t+ 127.6s 【状态】第 三 通电话响了,接 第 三 通电话打进来:单击接听(BGM=bgm/onair,语速1)
|
||||
t+ 127.6s ♪ 音效 sfx/amb_kid_room
|
||||
t+ 127.6s ♪ 音效 sfx/line_connect
|
||||
t+ 127.6s ▶ 语音:「三线来电。听呼吸,是个小孩。」
|
||||
t+ 129.7s ▶ 语音:「喂……有人吗?我睡不着。」
|
||||
t+ 132.9s ♪ 音效 sfx/arg_muffled
|
||||
t+ 132.9s ▶ 语音:「家里灯关了。可是楼下,一直有声音。」
|
||||
t+ 137.2s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 137.2s ▶ 语音:「向左滑,唱一段摇篮曲哄她睡。向右滑,轻轻问她怎么了。」
|
||||
t+ 139.3s 【状态】选项念完了,做决定 「请选择」念完了(第 三 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】糖糖像是憋着事,我轻轻问她怎么了
|
||||
|
||||
t+ 139.3s ♪ 音效 sfx/ui_confirm
|
||||
t+ 139.3s ▶ 语音:「睡不着的时候,心里是不是装着事?说给我听听。」
|
||||
t+ 141.4s ▶ 语音:「爸爸妈妈摔门了。是不是……我做错了什么呀。」
|
||||
t+ 146.6s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 146.6s ▶ 语音:「孩子的声音在抖。向左滑,告诉她这不是她的错。向右滑,答应她明天都会好。」
|
||||
t+ 148.7s 【状态】选项念完了,做决定 「请选择」念完了(第 三 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】告诉她这不是她的错——大人的事不算在孩子头上
|
||||
|
||||
t+ 148.7s ♪ 音效 sfx/ui_confirm
|
||||
t+ 148.7s ▶ 语音:「糖糖,记住,大人的事,不是小孩的错。一个字都不是。」
|
||||
t+ 150.8s ▶ 语音:「嗯……那我睡了。他们明天,会一起给我切蛋糕吗?」
|
||||
t+ 156.5s ▶ 语音:「蛋糕。记下来——四线的来电,可能跟这个家有关。」
|
||||
t+ 158.6s ♪ 向导音:settle(结算)
|
||||
t+ 158.6s ♪ 音效 sfx/line_drop
|
||||
t+ 158.6s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+ 158.6s 【状态】幕间,口碑播报和垫乐,等下一通 幕间喘息,垫乐播放中,马上接下一通(BGM=bgm/bridge,语速1)
|
||||
t+ 161.6s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+ 161.6s ♪ 向导音:turn(轮到你)
|
||||
t+ 161.6s 〰 震动:confirm(轻点确认)
|
||||
t+ 161.6s 【状态】第 四 通电话响了,接 第 四 通电话打进来:单击接听(BGM=bgm/onair,语速1)
|
||||
t+ 161.6s ♪ 音效 sfx/amb_street_rain
|
||||
t+ 161.6s ♪ 音效 sfx/line_connect
|
||||
t+ 161.6s ▶ 语音:「四线来电。户外风声大,是位大姐。」
|
||||
t+ 163.7s ▶ 语音:「主播,我就想找个人说说。我家那口子,今晚要出远门的活儿。」
|
||||
t+ 170.5s ▶ 语音:「明天孩子生日!蛋糕都订好了,他人要今晚走!」
|
||||
t+ 175.6s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 175.6s ▶ 语音:「摔门声你听见了。向左滑,替孩子给她带句话。向右滑,劝她回家把话说开。」
|
||||
t+ 177.8s 【状态】选项念完了,做决定 「请选择」念完了(第 四 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】陈姐听见孩子问话了,我把话带回去
|
||||
|
||||
t+ 177.8s ♪ 音效 sfx/ui_confirm
|
||||
t+ 177.8s ▶ 语音:「四十分钟前,有个孩子问我们:爸妈摔门,是不是她的错。」
|
||||
t+ 179.9s ▶ 语音:「什么?她还没睡?这么晚了,她还醒着?」
|
||||
t+ 184.4s ▶ 语音:「她攥着电话,很久没出声。风都停了。」
|
||||
t+ 186.5s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 186.5s ▶ 语音:「她的呼吸平了。向左滑,留在直播里,让全城等这个门铃。向右滑,换垫乐,私下陪她说完。」
|
||||
t+ 188.6s 【状态】选项念完了,做决定 「请选择」念完了(第 四 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】留在直播里,让全城等这声门铃
|
||||
|
||||
t+ 188.6s ♪ 音效 sfx/ui_confirm
|
||||
t+ 188.6s ▶ 语音:「陈姐,别挂。让他接电话——全城都在听。」
|
||||
t+ 190.8s ▶ 语音:「喂!回来吧!蛋糕要化了,孩子等着呢!」
|
||||
t+ 195.3s ▶ 语音:「电话那头,传来跑步声。今晚的高光时刻。」
|
||||
t+ 197.4s ♪ 向导音:settle(结算)
|
||||
t+ 197.4s ♪ 音效 sfx/line_drop
|
||||
t+ 197.4s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+ 197.4s 【状态】幕间,口碑播报和垫乐,等下一通 幕间喘息,垫乐播放中,马上接下一通(BGM=bgm/bridge,语速1)
|
||||
t+ 200.4s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+ 200.4s ♪ 向导音:turn(轮到你)
|
||||
t+ 200.4s 〰 震动:confirm(轻点确认)
|
||||
t+ 200.4s 【状态】第 五 通电话响了,接 第 五 通电话打进来:单击接听(BGM=bgm/onair,语速1)
|
||||
t+ 200.4s ♪ 音效 sfx/amb_cab
|
||||
t+ 200.4s ♪ 音效 sfx/line_connect
|
||||
t+ 200.4s ▶ 语音:「五线来电。引擎声没停过——他在开车!」
|
||||
t+ 202.5s ▶ 语音:「主播,别挂。陪我说话,我的眼皮,沉得很。」
|
||||
t+ 207.5s ▶ 语音:「跑完这趟,闺女的学费就齐了。雨刷都快刮不动了。」
|
||||
t+ 213.1s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 213.1s ▶ 语音:「方向盘比话筒危险。向左滑,陪他聊聊闺女。向右滑,让他立刻进服务区。」
|
||||
t+ 215.2s 【状态】选项念完了,做决定 「请选择」念完了(第 五 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】老韩眼皮在打架,我陪他聊聊闺女
|
||||
|
||||
t+ 215.2s ♪ 音效 sfx/ui_confirm
|
||||
t+ 215.2s ▶ 语音:「说说她。开学第一天,她跟你说的头一句话,是什么?」
|
||||
t+ 217.4s ▶ 语音:「她说,爸,我在学校给你赚了朵小红花。哈哈,哈哈……」
|
||||
t+ 223.4s ♪ 向导音:danger(危险)
|
||||
t+ 223.4s ♪ 音效 sfx/brake_screech
|
||||
t+ 223.4s 〰 震动:danger(危险逼近)
|
||||
t+ 225.4s ▶ 语音:「车道偏了——听!」
|
||||
t+ 227.6s ▶ 语音:「嘶——好险!前车急刹,我擦着护栏过去了。彻底醒了!」
|
||||
t+ 233.6s ▶ 语音:「吓醒的,也算醒。这一趟,聊到家。」
|
||||
t+ 235.8s ▶ 语音:「对了。头通电话那位大爷,就是这片被巡逻队找到的。这城市的夜,是接着的。」
|
||||
t+ 237.9s ♪ 向导音:settle(结算)
|
||||
t+ 237.9s ♪ 音效 sfx/line_drop
|
||||
t+ 237.9s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+ 237.9s 【状态】幕间,口碑播报和垫乐,等下一通 幕间喘息,垫乐播放中,马上接下一通(BGM=bgm/bridge,语速1)
|
||||
t+ 240.9s ▶ 语音:「五线收工。垫乐起——零点档,还剩最后一段。」
|
||||
t+ 243.0s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+ 243.0s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 243.0s ▶ 语音:「留言机红灯在闪,是老主播三年前没播完的那句晚安。向左滑,替他播出去。向右滑,照常收播。」
|
||||
t+ 245.1s 【状态】选项念完了,做决定 「请选择」念完了(第 五 通):向左或向右滑动做出你的决定(BGM=bgm/onair,语速1)
|
||||
|
||||
#### 【玩家动作】留言机红灯在闪——直面它,替老主播把晚安播出去
|
||||
|
||||
t+ 245.1s ♪ 音效 sfx/ui_confirm
|
||||
t+ 245.1s ♪ 音效 sfx/tape_static
|
||||
t+ 245.1s ▶ 语音:「师父,三年了。这句晚安,我替您播。各位,晚安。」
|
||||
t+ 247.2s ▶ 语音:「带子里其实只有电流声。但空着的那一秒,你说满了。」
|
||||
t+ 249.4s ♪ 向导音:settle(结算)
|
||||
t+ 249.4s ♫ BGM 切换 → bgm/ending(淡入 1500ms)
|
||||
t+ 249.4s ▶ 语音:「天亮了,热线灯还亮着。你们的晚安,是这座城市的心跳。」
|
||||
t+ 251.5s ▶ 语音:「这把话筒,我总算接得住了。明晚零点,接着不眠。」
|
||||
t+ 253.6s ▶ 语音:「收播了。导播间替你记了一笔账——今晚的人都怎样了。」
|
||||
t+ 255.7s ▶ 语音:「老周:孙子替他买了老花镜。回信说,谢谢那首歌。」
|
||||
t+ 257.8s ▶ 语音:「小鹿上车了。她妈后来打电话说,那声妈,比奖杯值钱。」
|
||||
t+ 260.0s ▶ 语音:「糖糖家的门,这个月没再摔过。她说这是主播魔法。」
|
||||
t+ 262.1s ▶ 语音:「陈姐家切了蛋糕。那句「回来吧」,是我这晚听过最好的声音。」
|
||||
t+ 264.2s ▶ 语音:「老韩到家了。后视镜上,多了朵小红花。」
|
||||
t+ 266.3s 【状态】结局链走完,五条回响一句句点到我今晚的每一次选择 结局和五条回响都听完了。单击再来一局,下滑开菜单(BGM=bgm/ending,语速1)
|
||||
|
||||
#### 【玩家动作】听完尾声那笔账——今晚的人都接住了,会话结束(E1 天亮之前)
|
||||
|
||||
@@ -0,0 +1,842 @@
|
||||
# 试玩转写:《radio》
|
||||
|
||||
> 本文件是「玩家感知日志」:一位新手玩家的整局体验转写。语音列出了玩家听到的每句话全文,
|
||||
> 音效/BGM/震动按发生时间列出。「静默」段 = 玩家什么也听不到。手势是剧本注入的(模拟真人手部动作),
|
||||
> 非最优操作:包含犹豫、误操作与乱试。语音时长按语速估算(±20%),仅供节奏参考。
|
||||
t+ 0.0s (玩家点开游戏,轻触屏幕开始)
|
||||
t+ 0.0s ♫ BGM 切换 → bgm/onair
|
||||
t+ 0.0s ♪ 向导音:explore(探索/安全)
|
||||
t+ 0.0s ▶ 语音:「新的夜晚,开始了。」
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/onair_sting → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_connect → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_drop → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_rain_city → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_station → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_kid_room → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/arg_muffled → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_street_rain → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_cab → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/brake_screech → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/tape_static → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/onair_sting → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_connect → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_drop → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_rain_city → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_station → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_kid_room → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/arg_muffled → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_street_rain → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_cab → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/brake_screech → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/tape_static → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/onair_sting → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_connect → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_drop → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_rain_city → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_station → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_kid_room → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/arg_muffled → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_street_rain → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_cab → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/brake_screech → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/tape_static → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/onair_sting → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_connect → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/line_drop → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_rain_city → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_station → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_kid_room → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/arg_muffled → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_street_rain → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/amb_cab → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/brake_screech → 玩家此刻听到的是静默
|
||||
t+ 0.0s ⚠ 资产缺失 sfx/tape_static → 玩家此刻听到的是静默
|
||||
t+ 2.1s ♪ 音效 sfx/onair_sting
|
||||
t+ 2.1s ▶ 向导语音:「单击继续节目。请选择的时候,向左或向右滑。」
|
||||
t+ 4.2s ▶ 语音:「午夜零点,红灯亮起。欢迎回到《今夜不眠》。」
|
||||
t+ 6.4s ▶ 语音:「想跳过这句,单击就行。」
|
||||
t+ 8.5s ▶ 语音:「雨下了一整晚。热线灯,马上就要亮了。」
|
||||
t+ 10.6s ▶ 语音:「台里的规矩就一条:先接住人,再接电话。」
|
||||
t+ 12.7s ▶ 语音:「今晚五通电话。说什么话,由你决定。」
|
||||
t+ 14.8s ♪ 向导音:turn(轮到你)
|
||||
t+ 14.8s 〰 震动:confirm(轻点确认)
|
||||
t+ 14.8s ♪ 音效 sfx/amb_rain_city
|
||||
t+ 14.8s ♪ 音效 sfx/line_connect
|
||||
t+ 14.8s ▶ 语音:「一线来电。七十多岁,雨夜,走丢了。」
|
||||
t+ 17.0s ▶ 向导语音:「这个手势,直播间里用不上。」
|
||||
t+ 17.0s 〰 震动:error(做错了:两连短震)
|
||||
t+ 17.0s ▶ 向导语音(对白在播,本句按 idle-only 跳过未播):「这个手势,直播间里用不上。」
|
||||
t+ 17.0s 〰 震动:error(做错了:两连短震)
|
||||
t+ 17.0s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 19.1s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 21.2s ▶ 语音:「今晚的口碑,还没立起来。」
|
||||
t+ 23.3s ♪ 音效 sfx/amb_rain_city
|
||||
t+ 23.3s ♪ 音效 sfx/line_connect
|
||||
t+ 23.3s ▶ 语音:「一线来电。七十多岁,雨夜,走丢了。」
|
||||
t+ 25.4s ♪ 音效 sfx/ui_menu
|
||||
t+ 25.4s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 25.4s ♪ 向导音:menu(系统界面)
|
||||
t+ 25.4s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 27.6s ▶ 语音:「回到直播。」
|
||||
t+ 29.7s ▶ 语音:「重新开始今晚。」
|
||||
t+ 31.8s ♪ 音效 sfx/ui_confirm
|
||||
t+ 31.8s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 31.8s ♪ 向导音:explore(探索/安全)
|
||||
t+ 31.8s ♪ 音效 sfx/amb_rain_city
|
||||
t+ 31.8s ♪ 音效 sfx/line_connect
|
||||
t+ 31.8s ▶ 语音:「一线来电。七十多岁,雨夜,走丢了。」
|
||||
t+ 33.9s 〰 震动:error(做错了:两连短震)
|
||||
t+ 33.9s ▶ 语音:「一线来电。七十多岁,雨夜,走丢了。」
|
||||
t+ 36.0s 〰 震动:error(做错了:两连短震)
|
||||
t+ 36.0s 〰 震动:error(做错了:两连短震)
|
||||
t+ 36.0s ♪ 音效 sfx/ui_menu
|
||||
t+ 36.0s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 36.0s ♪ 向导音:menu(系统界面)
|
||||
t+ 36.0s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 38.2s ▶ 语音:「回到直播。」
|
||||
t+ 40.3s ▶ 语音:「重新开始今晚。」
|
||||
t+ 42.4s ♪ 音效 sfx/ui_confirm
|
||||
t+ 42.4s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 42.4s ♪ 向导音:explore(探索/安全)
|
||||
t+ 42.4s ♪ 音效 sfx/amb_rain_city
|
||||
t+ 42.4s ♪ 音效 sfx/line_connect
|
||||
t+ 42.4s ▶ 语音:「一线来电。七十多岁,雨夜,走丢了。」
|
||||
t+ 44.5s 〰 震动:error(做错了:两连短震)
|
||||
t+ 44.5s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 46.6s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 48.8s ▶ 语音:「今晚的口碑,还没立起来。」
|
||||
t+ 50.9s ♪ 音效 sfx/amb_rain_city
|
||||
t+ 50.9s ♪ 音效 sfx/line_connect
|
||||
t+ 50.9s ▶ 语音:「一线来电。七十多岁,雨夜,走丢了。」
|
||||
t+ 53.0s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 57.1s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 59.2s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 61.3s ▶ 语音:「今晚的口碑,还没立起来。」
|
||||
t+ 63.4s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 67.5s 〰 震动:error(做错了:两连短震)
|
||||
t+ 67.5s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 69.6s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 71.8s ▶ 语音:「今晚的口碑,还没立起来。」
|
||||
t+ 73.9s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 77.9s 〰 震动:error(做错了:两连短震)
|
||||
t+ 77.9s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 80.1s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 82.2s ▶ 语音:「今晚的口碑,还没立起来。」
|
||||
t+ 84.3s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 88.4s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 90.5s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 92.6s ▶ 语音:「今晚的口碑,还没立起来。」
|
||||
t+ 94.7s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 98.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 98.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 98.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 98.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 98.8s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 100.9s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 103.1s ▶ 语音:「今晚的口碑,还没立起来。」
|
||||
t+ 105.2s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 109.3s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 113.3s ♪ 音效 sfx/ui_menu
|
||||
t+ 113.3s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 113.3s ♪ 向导音:menu(系统界面)
|
||||
t+ 113.3s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 115.4s ▶ 语音:「回到直播。」
|
||||
t+ 117.6s ▶ 语音:「重新开始今晚。」
|
||||
t+ 119.7s ♪ 音效 sfx/ui_confirm
|
||||
t+ 119.7s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 119.7s ♪ 向导音:explore(探索/安全)
|
||||
t+ 119.7s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 123.8s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 127.8s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 130.0s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 132.1s ▶ 语音:「今晚的口碑,还没立起来。」
|
||||
t+ 134.2s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 138.3s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 140.4s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 142.5s ▶ 语音:「今晚的口碑,还没立起来。」
|
||||
t+ 144.6s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 148.7s 〰 震动:error(做错了:两连短震)
|
||||
t+ 148.7s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 152.8s ▶ 语音:「主播……我,我找不到回家的路了。」
|
||||
t+ 156.9s ▶ 语音:「雨太大了。我本来,只想买副老花镜。」
|
||||
t+ 161.2s ▶ 语音:「雨太大了。我本来,只想买副老花镜。」
|
||||
t+ 165.5s ♪ 音效 sfx/ui_menu
|
||||
t+ 165.5s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 165.5s ♪ 向导音:menu(系统界面)
|
||||
t+ 165.5s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 167.6s ▶ 语音:「回到直播。」
|
||||
t+ 169.7s ▶ 语音:「重新开始今晚。」
|
||||
t+ 171.8s ♪ 音效 sfx/ui_confirm
|
||||
t+ 171.8s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 171.8s ♪ 向导音:explore(探索/安全)
|
||||
t+ 171.8s ▶ 语音:「雨太大了。我本来,只想买副老花镜。」
|
||||
t+ 176.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 176.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 176.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 176.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 176.1s ▶ 语音:「雨太大了。我本来,只想买副老花镜。」
|
||||
t+ 180.4s ♪ 音效 sfx/ui_menu
|
||||
t+ 180.4s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 180.4s ♪ 向导音:menu(系统界面)
|
||||
t+ 180.4s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 182.5s ▶ 语音:「回到直播。」
|
||||
t+ 184.7s ▶ 语音:「重新开始今晚。」
|
||||
t+ 186.8s ♪ 音效 sfx/ui_confirm
|
||||
t+ 186.8s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 186.8s ♪ 向导音:explore(探索/安全)
|
||||
t+ 186.8s ▶ 语音:「雨太大了。我本来,只想买副老花镜。」
|
||||
t+ 191.1s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 191.1s ▶ 语音:「老人在发抖。向左滑,陪他哼那首老歌。向右滑,冷静问他路口的路牌。」
|
||||
t+ 193.2s ♪ 音效 sfx/ui_confirm
|
||||
t+ 193.2s ▶ 语音:「大爷别急,这首歌我也会。咱们一句一句来。」
|
||||
t+ 195.3s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 197.4s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 199.6s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 201.7s ▶ 语音:「大爷别急,这首歌我也会。咱们一句一句来。」
|
||||
t+ 203.8s ♪ 音效 sfx/ui_menu
|
||||
t+ 203.8s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 203.8s ♪ 向导音:menu(系统界面)
|
||||
t+ 203.8s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 205.9s ▶ 语音:「回到直播。」
|
||||
t+ 208.0s ▶ 语音:「重新开始今晚。」
|
||||
t+ 210.2s ♪ 音效 sfx/ui_confirm
|
||||
t+ 210.2s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 210.2s ♪ 向导音:explore(探索/安全)
|
||||
t+ 210.2s ▶ 语音:「大爷别急,这首歌我也会。咱们一句一句来。」
|
||||
t+ 212.3s 〰 震动:error(做错了:两连短震)
|
||||
t+ 212.3s ♪ 音效 sfx/ui_menu
|
||||
t+ 212.3s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 212.3s ♪ 向导音:menu(系统界面)
|
||||
t+ 212.3s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 214.4s ▶ 语音:「回到直播。」
|
||||
t+ 216.5s ▶ 语音:「重新开始今晚。」
|
||||
t+ 218.6s ♪ 音效 sfx/ui_confirm
|
||||
t+ 218.6s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 218.6s ♪ 向导音:explore(探索/安全)
|
||||
t+ 218.6s ▶ 语音:「大爷别急,这首歌我也会。咱们一句一句来。」
|
||||
t+ 220.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 220.8s ▶ 语音:「对,对!路口修车铺,天天放这首!」
|
||||
t+ 224.8s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 226.9s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 229.1s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 231.2s ▶ 语音:「对,对!路口修车铺,天天放这首!」
|
||||
t+ 235.3s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 237.4s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 239.5s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 241.6s ▶ 语音:「对,对!路口修车铺,天天放这首!」
|
||||
t+ 245.7s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 247.8s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 249.9s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 252.1s ▶ 语音:「对,对!路口修车铺,天天放这首!」
|
||||
t+ 256.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 256.1s ♪ 音效 sfx/ui_menu
|
||||
t+ 256.1s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 256.1s ♪ 向导音:menu(系统界面)
|
||||
t+ 256.1s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 258.3s ▶ 语音:「回到直播。」
|
||||
t+ 260.4s ▶ 语音:「重新开始今晚。」
|
||||
t+ 262.5s ♪ 音效 sfx/ui_confirm
|
||||
t+ 262.5s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 262.5s ♪ 向导音:explore(探索/安全)
|
||||
t+ 262.5s ▶ 语音:「对,对!路口修车铺,天天放这首!」
|
||||
t+ 266.6s 〰 震动:error(做错了:两连短震)
|
||||
t+ 266.6s ▶ 语音:「他稳住了。老歌,比路牌管用。」
|
||||
t+ 268.7s 〰 震动:error(做错了:两连短震)
|
||||
t+ 268.7s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 270.8s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 272.9s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 275.0s ▶ 语音:「他稳住了。老歌,比路牌管用。」
|
||||
t+ 277.2s 〰 震动:error(做错了:两连短震)
|
||||
t+ 277.2s 〰 震动:error(做错了:两连短震)
|
||||
t+ 277.2s 〰 震动:error(做错了:两连短震)
|
||||
t+ 277.2s ▶ 语音:「他稳住了。老歌,比路牌管用。」
|
||||
t+ 279.3s ♪ 音效 sfx/ui_menu
|
||||
t+ 279.3s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 279.3s ♪ 向导音:menu(系统界面)
|
||||
t+ 279.3s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 281.4s ▶ 语音:「回到直播。」
|
||||
t+ 283.5s ▶ 语音:「重新开始今晚。」
|
||||
t+ 285.6s ♪ 音效 sfx/ui_confirm
|
||||
t+ 285.6s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 285.6s ♪ 向导音:explore(探索/安全)
|
||||
t+ 285.6s ▶ 语音:「他稳住了。老歌,比路牌管用。」
|
||||
t+ 287.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 287.8s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 289.9s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 292.0s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 294.1s ▶ 语音:「他稳住了。老歌,比路牌管用。」
|
||||
t+ 296.2s ▶ 语音:「他稳住了。老歌,比路牌管用。」
|
||||
t+ 298.4s ♪ 音效 sfx/ui_menu
|
||||
t+ 298.4s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 298.4s ♪ 向导音:menu(系统界面)
|
||||
t+ 298.4s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 300.5s ▶ 语音:「回到直播。」
|
||||
t+ 302.6s ▶ 语音:「重新开始今晚。」
|
||||
t+ 304.7s ♪ 音效 sfx/ui_confirm
|
||||
t+ 304.7s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 304.7s ♪ 向导音:explore(探索/安全)
|
||||
t+ 304.7s ▶ 语音:「他稳住了。老歌,比路牌管用。」
|
||||
t+ 306.8s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 306.8s ▶ 语音:「雨声更密了。向左滑,留在原地陪他等巡逻队。向右滑,转接派出所。」
|
||||
t+ 309.0s ♪ 音效 sfx/ui_confirm
|
||||
t+ 309.0s ▶ 语音:「大爷,我把您转给派出所,他们马上就到。」
|
||||
t+ 311.1s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 313.2s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 315.3s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 317.4s ▶ 语音:「大爷,我把您转给派出所,他们马上就到。」
|
||||
t+ 319.6s 〰 震动:error(做错了:两连短震)
|
||||
t+ 319.6s 〰 震动:error(做错了:两连短震)
|
||||
t+ 319.6s ♪ 音效 sfx/ui_menu
|
||||
t+ 319.6s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 319.6s ♪ 向导音:menu(系统界面)
|
||||
t+ 319.6s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 321.7s ▶ 语音:「回到直播。」
|
||||
t+ 323.8s ▶ 语音:「重新开始今晚。」
|
||||
t+ 325.9s ♪ 音效 sfx/ui_confirm
|
||||
t+ 325.9s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 325.9s ♪ 向导音:explore(探索/安全)
|
||||
t+ 325.9s ▶ 语音:「大爷,我把您转给派出所,他们马上就到。」
|
||||
t+ 328.0s ♪ 音效 sfx/ui_menu
|
||||
t+ 328.0s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 328.0s ♪ 向导音:menu(系统界面)
|
||||
t+ 328.0s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 330.2s ▶ 语音:「回到直播。」
|
||||
t+ 332.3s ▶ 语音:「重新开始今晚。」
|
||||
t+ 334.4s ♪ 音效 sfx/ui_confirm
|
||||
t+ 334.4s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 334.4s ♪ 向导音:explore(探索/安全)
|
||||
t+ 334.4s ▶ 语音:「大爷,我把您转给派出所,他们马上就到。」
|
||||
t+ 336.5s ▶ 语音:「大爷,我把您转给派出所,他们马上就到。」
|
||||
t+ 338.6s 〰 震动:error(做错了:两连短震)
|
||||
t+ 338.6s ♪ 音效 sfx/ui_menu
|
||||
t+ 338.6s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 338.6s ♪ 向导音:menu(系统界面)
|
||||
t+ 338.6s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 340.8s ▶ 语音:「回到直播。」
|
||||
t+ 342.9s ▶ 语音:「重新开始今晚。」
|
||||
t+ 345.0s ♪ 音效 sfx/ui_confirm
|
||||
t+ 345.0s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 345.0s ♪ 向导音:explore(探索/安全)
|
||||
t+ 345.0s ▶ 语音:「大爷,我把您转给派出所,他们马上就到。」
|
||||
t+ 347.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 347.1s ▶ 语音:「好,好。谢谢你啊,谢谢。」
|
||||
t+ 350.3s ♪ 音效 sfx/ui_menu
|
||||
t+ 350.3s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 350.3s ♪ 向导音:menu(系统界面)
|
||||
t+ 350.3s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 352.4s ▶ 语音:「回到直播。」
|
||||
t+ 354.6s ▶ 语音:「重新开始今晚。」
|
||||
t+ 356.7s ♪ 音效 sfx/ui_confirm
|
||||
t+ 356.7s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 356.7s ♪ 向导音:explore(探索/安全)
|
||||
t+ 356.7s ▶ 语音:「好,好。谢谢你啊,谢谢。」
|
||||
t+ 359.9s ▶ 语音:「转接完成,地址报得清。干净利落。」
|
||||
t+ 362.0s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 364.1s ▶ 语音:「现在是今晚第一通电话。」
|
||||
t+ 366.2s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 368.3s ▶ 语音:「转接完成,地址报得清。干净利落。」
|
||||
t+ 370.5s ▶ 语音:「就这么接。记住这个手感。」
|
||||
t+ 372.6s ♪ 向导音:settle(结算)
|
||||
t+ 372.6s ♪ 音效 sfx/line_drop
|
||||
t+ 372.6s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+ 372.6s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 377.7s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+ 377.7s ♪ 向导音:turn(轮到你)
|
||||
t+ 377.7s 〰 震动:confirm(轻点确认)
|
||||
t+ 377.7s ♪ 音效 sfx/amb_station
|
||||
t+ 377.7s ♪ 音效 sfx/line_connect
|
||||
t+ 377.7s ▶ 语音:「二线来电。姑娘,声音很轻,像怕吵到谁。」
|
||||
t+ 379.8s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 385.7s 〰 震动:error(做错了:两连短震)
|
||||
t+ 385.7s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 387.8s ▶ 语音:「现在是今晚第二通电话。」
|
||||
t+ 389.9s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 392.0s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 397.9s ♪ 音效 sfx/ui_menu
|
||||
t+ 397.9s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 397.9s ♪ 向导音:menu(系统界面)
|
||||
t+ 397.9s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 400.0s ▶ 语音:「回到直播。」
|
||||
t+ 402.1s ▶ 语音:「重新开始今晚。」
|
||||
t+ 404.2s ♪ 音效 sfx/ui_confirm
|
||||
t+ 404.2s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 404.2s ♪ 向导音:explore(探索/安全)
|
||||
t+ 404.2s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 410.1s ♪ 音效 sfx/ui_menu
|
||||
t+ 410.1s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 410.1s ♪ 向导音:menu(系统界面)
|
||||
t+ 410.1s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 412.2s ▶ 语音:「回到直播。」
|
||||
t+ 414.3s ▶ 语音:「重新开始今晚。」
|
||||
t+ 416.5s ♪ 音效 sfx/ui_confirm
|
||||
t+ 416.5s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 416.5s ♪ 向导音:explore(探索/安全)
|
||||
t+ 416.5s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 422.3s 〰 震动:error(做错了:两连短震)
|
||||
t+ 422.3s 〰 震动:error(做错了:两连短震)
|
||||
t+ 422.3s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 424.4s ▶ 语音:「现在是今晚第二通电话。」
|
||||
t+ 426.6s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 428.7s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 434.5s ♪ 音效 sfx/ui_menu
|
||||
t+ 434.5s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 434.5s ♪ 向导音:menu(系统界面)
|
||||
t+ 434.5s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 436.6s ▶ 语音:「回到直播。」
|
||||
t+ 438.8s ▶ 语音:「重新开始今晚。」
|
||||
t+ 440.9s ♪ 音效 sfx/ui_confirm
|
||||
t+ 440.9s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 440.9s ♪ 向导音:explore(探索/安全)
|
||||
t+ 440.9s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 446.7s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 452.6s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 454.7s ▶ 语音:「现在是今晚第二通电话。」
|
||||
t+ 456.8s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 459.0s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 464.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 464.8s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 466.9s ▶ 语音:「现在是今晚第二通电话。」
|
||||
t+ 469.0s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 471.2s ▶ 语音:「主播,退票窗口十一点半就关了。我站这儿半小时了。」
|
||||
t+ 477.0s ▶ 语音:「票是回去看我妈的。可我试镜又黄了,两手空空……」
|
||||
t+ 482.7s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 482.7s ▶ 语音:「向左滑,告诉她这趟车值得上。向右滑,把选择还给她。」
|
||||
t+ 484.8s ♪ 音效 sfx/ui_confirm
|
||||
t+ 484.8s ▶ 语音:「退不退,都是你的自由。夜还长,慢慢想。」
|
||||
t+ 486.9s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 489.0s ▶ 语音:「现在是今晚第二通电话。」
|
||||
t+ 491.1s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 493.3s ▶ 语音:「退不退,都是你的自由。夜还长,慢慢想。」
|
||||
t+ 495.4s ▶ 语音:「退不退,都是你的自由。夜还长,慢慢想。」
|
||||
t+ 497.5s ♪ 音效 sfx/ui_menu
|
||||
t+ 497.5s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 497.5s ♪ 向导音:menu(系统界面)
|
||||
t+ 497.5s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 499.6s ▶ 语音:「回到直播。」
|
||||
t+ 501.7s ▶ 语音:「重新开始今晚。」
|
||||
t+ 503.9s ♪ 音效 sfx/ui_confirm
|
||||
t+ 503.9s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 503.9s ♪ 向导音:explore(探索/安全)
|
||||
t+ 503.9s ▶ 语音:「退不退,都是你的自由。夜还长,慢慢想。」
|
||||
t+ 506.0s ♪ 音效 sfx/ui_menu
|
||||
t+ 506.0s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 506.0s ♪ 向导音:menu(系统界面)
|
||||
t+ 506.0s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 508.1s ▶ 语音:「回到直播。」
|
||||
t+ 510.2s ▶ 语音:「重新开始今晚。」
|
||||
t+ 512.3s ♪ 音效 sfx/ui_confirm
|
||||
t+ 512.3s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 512.3s ♪ 向导音:explore(探索/安全)
|
||||
t+ 512.3s ▶ 语音:「退不退,都是你的自由。夜还长,慢慢想。」
|
||||
t+ 514.5s ▶ 语音:「退不退,都是你的自由。夜还长,慢慢想。」
|
||||
t+ 516.6s ▶ 语音:「嗯……我再想想。窗口要关了,我先过去了。」
|
||||
t+ 521.5s 〰 震动:error(做错了:两连短震)
|
||||
t+ 521.5s ▶ 语音:「她走了。没上车,也没退票。年轻人的夜,长了点。」
|
||||
t+ 523.7s ♪ 向导音:settle(结算)
|
||||
t+ 523.7s ♪ 音效 sfx/line_drop
|
||||
t+ 523.7s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+ 526.7s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+ 526.7s ♪ 向导音:turn(轮到你)
|
||||
t+ 526.7s 〰 震动:confirm(轻点确认)
|
||||
t+ 526.7s ♪ 音效 sfx/amb_kid_room
|
||||
t+ 526.7s ♪ 音效 sfx/line_connect
|
||||
t+ 526.7s ▶ 语音:「三线来电。听呼吸,是个小孩。」
|
||||
t+ 528.8s ▶ 语音:「喂……有人吗?我睡不着。」
|
||||
t+ 532.0s ▶ 语音:「喂……有人吗?我睡不着。」
|
||||
t+ 535.2s ▶ 语音:「喂……有人吗?我睡不着。」
|
||||
t+ 538.3s 〰 震动:error(做错了:两连短震)
|
||||
t+ 538.3s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 540.5s ▶ 语音:「现在是今晚第三通电话。」
|
||||
t+ 542.6s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 544.7s ▶ 语音:「喂……有人吗?我睡不着。」
|
||||
t+ 547.9s ♪ 音效 sfx/ui_menu
|
||||
t+ 547.9s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 547.9s ♪ 向导音:menu(系统界面)
|
||||
t+ 547.9s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 550.0s ▶ 语音:「回到直播。」
|
||||
t+ 552.1s ▶ 语音:「重新开始今晚。」
|
||||
t+ 554.2s ♪ 音效 sfx/ui_confirm
|
||||
t+ 554.2s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 554.2s ♪ 向导音:explore(探索/安全)
|
||||
t+ 554.2s ▶ 语音:「喂……有人吗?我睡不着。」
|
||||
t+ 557.4s ▶ 语音:「喂……有人吗?我睡不着。」
|
||||
t+ 560.6s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 562.7s ▶ 语音:「现在是今晚第三通电话。」
|
||||
t+ 564.9s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 567.0s ▶ 语音:「喂……有人吗?我睡不着。」
|
||||
t+ 570.2s ♪ 音效 sfx/arg_muffled
|
||||
t+ 570.2s ▶ 语音:「家里灯关了。可是楼下,一直有声音。」
|
||||
t+ 574.5s ♪ 音效 sfx/ui_menu
|
||||
t+ 574.5s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 574.5s ♪ 向导音:menu(系统界面)
|
||||
t+ 574.5s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 576.6s ▶ 语音:「回到直播。」
|
||||
t+ 578.7s ▶ 语音:「重新开始今晚。」
|
||||
t+ 580.8s ♪ 音效 sfx/ui_confirm
|
||||
t+ 580.8s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 580.8s ♪ 向导音:explore(探索/安全)
|
||||
t+ 580.8s ♪ 音效 sfx/arg_muffled
|
||||
t+ 580.8s ▶ 语音:「家里灯关了。可是楼下,一直有声音。」
|
||||
t+ 585.1s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 587.2s ▶ 语音:「现在是今晚第三通电话。」
|
||||
t+ 587.3s ♪ 音效 sfx/arg_muffled
|
||||
t+ 589.4s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 591.5s ♪ 音效 sfx/arg_muffled
|
||||
t+ 591.5s ▶ 语音:「家里灯关了。可是楼下,一直有声音。」
|
||||
t+ 595.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 595.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 595.8s 〰 震动:error(做错了:两连短震)
|
||||
t+ 595.8s ▶ 语音:「家里灯关了。可是楼下,一直有声音。」
|
||||
t+ 598.0s ♪ 音效 sfx/arg_muffled
|
||||
t+ 600.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 600.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 600.1s ♪ 音效 sfx/ui_menu
|
||||
t+ 600.1s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 600.1s ♪ 向导音:menu(系统界面)
|
||||
t+ 600.1s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 602.2s ▶ 语音:「回到直播。」
|
||||
t+ 604.3s ▶ 语音:「重新开始今晚。」
|
||||
t+ 606.4s ♪ 音效 sfx/ui_confirm
|
||||
t+ 606.4s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 606.4s ♪ 向导音:explore(探索/安全)
|
||||
t+ 606.4s ♪ 音效 sfx/arg_muffled
|
||||
t+ 606.4s ▶ 语音:「家里灯关了。可是楼下,一直有声音。」
|
||||
t+ 610.7s 〰 震动:error(做错了:两连短震)
|
||||
t+ 610.7s 〰 震动:error(做错了:两连短震)
|
||||
t+ 610.7s ♪ 音效 sfx/ui_menu
|
||||
t+ 610.7s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 610.7s ♪ 向导音:menu(系统界面)
|
||||
t+ 610.7s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 612.9s ▶ 语音:「回到直播。」
|
||||
t+ 615.0s ▶ 语音:「重新开始今晚。」
|
||||
t+ 617.1s ♪ 音效 sfx/ui_confirm
|
||||
t+ 617.1s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 617.1s ♪ 向导音:explore(探索/安全)
|
||||
t+ 617.1s ♪ 音效 sfx/arg_muffled
|
||||
t+ 617.1s ▶ 语音:「家里灯关了。可是楼下,一直有声音。」
|
||||
t+ 621.4s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 623.5s ▶ 语音:「现在是今晚第三通电话。」
|
||||
t+ 623.6s ♪ 音效 sfx/arg_muffled
|
||||
t+ 625.6s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 627.8s ♪ 音效 sfx/arg_muffled
|
||||
t+ 627.8s ▶ 语音:「家里灯关了。可是楼下,一直有声音。」
|
||||
t+ 632.0s ♪ 音效 sfx/ui_menu
|
||||
t+ 632.0s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 632.0s ♪ 向导音:menu(系统界面)
|
||||
t+ 632.0s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 634.2s ▶ 语音:「回到直播。」
|
||||
t+ 636.3s ▶ 语音:「重新开始今晚。」
|
||||
t+ 638.4s ♪ 音效 sfx/ui_confirm
|
||||
t+ 638.4s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 638.4s ♪ 向导音:explore(探索/安全)
|
||||
t+ 638.4s ♪ 音效 sfx/arg_muffled
|
||||
t+ 638.4s ▶ 语音:「家里灯关了。可是楼下,一直有声音。」
|
||||
t+ 642.7s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 642.7s ▶ 语音:「向左滑,唱一段摇篮曲哄她睡。向右滑,轻轻问她怎么了。」
|
||||
t+ 644.8s ♪ 音效 sfx/ui_confirm
|
||||
t+ 644.8s ▶ 语音:「睡不着的时候,心里是不是装着事?说给我听听。」
|
||||
t+ 646.9s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 649.1s ▶ 语音:「现在是今晚第三通电话。」
|
||||
t+ 651.2s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 653.3s ▶ 语音:「睡不着的时候,心里是不是装着事?说给我听听。」
|
||||
t+ 655.4s ▶ 语音:「爸爸妈妈摔门了。是不是……我做错了什么呀。」
|
||||
t+ 660.6s ♪ 音效 sfx/ui_menu
|
||||
t+ 660.6s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 660.6s ♪ 向导音:menu(系统界面)
|
||||
t+ 660.6s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 662.7s ▶ 语音:「回到直播。」
|
||||
t+ 664.9s ▶ 语音:「重新开始今晚。」
|
||||
t+ 667.0s ♪ 音效 sfx/ui_confirm
|
||||
t+ 667.0s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 667.0s ♪ 向导音:explore(探索/安全)
|
||||
t+ 667.0s ▶ 语音:「爸爸妈妈摔门了。是不是……我做错了什么呀。」
|
||||
t+ 672.2s 〰 震动:error(做错了:两连短震)
|
||||
t+ 672.2s 〰 震动:error(做错了:两连短震)
|
||||
t+ 672.2s ▶ 语音:「爸爸妈妈摔门了。是不是……我做错了什么呀。」
|
||||
t+ 677.3s ♪ 音效 sfx/ui_menu
|
||||
t+ 677.3s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 677.3s ♪ 向导音:menu(系统界面)
|
||||
t+ 677.3s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 679.5s ▶ 语音:「回到直播。」
|
||||
t+ 681.6s ▶ 语音:「重新开始今晚。」
|
||||
t+ 683.7s ♪ 音效 sfx/ui_confirm
|
||||
t+ 683.7s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 683.7s ♪ 向导音:explore(探索/安全)
|
||||
t+ 683.7s ▶ 语音:「爸爸妈妈摔门了。是不是……我做错了什么呀。」
|
||||
t+ 688.9s 〰 震动:error(做错了:两连短震)
|
||||
t+ 688.9s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 688.9s ▶ 语音:「孩子的声音在抖。向左滑,告诉她这不是她的错。向右滑,答应她明天都会好。」
|
||||
t+ 691.0s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 691.0s ♪ 音效 sfx/ui_confirm
|
||||
t+ 691.0s ▶ 语音:「睡吧。明天一睁眼,什么都会好起来的。」
|
||||
t+ 693.1s ▶ 语音:「真的吗?拉钩。晚安……」
|
||||
t+ 696.1s 〰 震动:error(做错了:两连短震)
|
||||
t+ 696.1s ▶ 语音:「你许了个兑不了的现。孩子睡了,谎留下了。」
|
||||
t+ 698.2s ♪ 向导音:settle(结算)
|
||||
t+ 698.2s ♪ 音效 sfx/line_drop
|
||||
t+ 698.2s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+ 701.2s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+ 701.2s ♪ 向导音:turn(轮到你)
|
||||
t+ 701.2s 〰 震动:confirm(轻点确认)
|
||||
t+ 701.2s ♪ 音效 sfx/amb_street_rain
|
||||
t+ 701.2s ♪ 音效 sfx/line_connect
|
||||
t+ 701.2s ▶ 语音:「四线来电。户外风声大,是位大姐。」
|
||||
t+ 703.3s ▶ 语音:「四线来电。户外风声大,是位大姐。」
|
||||
t+ 705.5s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 707.6s ▶ 语音:「现在是今晚第四通电话。」
|
||||
t+ 709.7s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 711.8s ♪ 音效 sfx/amb_street_rain
|
||||
t+ 711.8s ♪ 音效 sfx/line_connect
|
||||
t+ 711.8s ▶ 语音:「四线来电。户外风声大,是位大姐。」
|
||||
t+ 713.9s 〰 震动:error(做错了:两连短震)
|
||||
t+ 713.9s ♪ 音效 sfx/ui_menu
|
||||
t+ 713.9s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 713.9s ♪ 向导音:menu(系统界面)
|
||||
t+ 713.9s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 716.1s ▶ 语音:「回到直播。」
|
||||
t+ 718.2s ▶ 语音:「重新开始今晚。」
|
||||
t+ 720.3s ♪ 音效 sfx/ui_confirm
|
||||
t+ 720.3s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 720.3s ♪ 向导音:explore(探索/安全)
|
||||
t+ 720.3s ♪ 音效 sfx/amb_street_rain
|
||||
t+ 720.3s ♪ 音效 sfx/line_connect
|
||||
t+ 720.3s ▶ 语音:「四线来电。户外风声大,是位大姐。」
|
||||
t+ 722.4s ▶ 语音:「四线来电。户外风声大,是位大姐。」
|
||||
t+ 724.5s ▶ 语音:「四线来电。户外风声大,是位大姐。」
|
||||
t+ 726.7s ▶ 语音:「主播,我就想找个人说说。我家那口子,今晚要出远门的活儿。」
|
||||
t+ 733.4s ▶ 语音:「主播,我就想找个人说说。我家那口子,今晚要出远门的活儿。」
|
||||
t+ 740.1s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 742.3s ▶ 语音:「现在是今晚第四通电话。」
|
||||
t+ 744.4s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 746.5s ▶ 语音:「主播,我就想找个人说说。我家那口子,今晚要出远门的活儿。」
|
||||
t+ 753.2s ▶ 语音:「主播,我就想找个人说说。我家那口子,今晚要出远门的活儿。」
|
||||
t+ 760.0s ▶ 语音:「明天孩子生日!蛋糕都订好了,他人要今晚走!」
|
||||
t+ 765.2s 〰 震动:error(做错了:两连短震)
|
||||
t+ 765.2s 〰 震动:error(做错了:两连短震)
|
||||
t+ 765.2s 〰 震动:error(做错了:两连短震)
|
||||
t+ 765.2s ▶ 语音:「明天孩子生日!蛋糕都订好了,他人要今晚走!」
|
||||
t+ 770.4s ▶ 语音:「明天孩子生日!蛋糕都订好了,他人要今晚走!」
|
||||
t+ 775.5s ♪ 音效 sfx/ui_menu
|
||||
t+ 775.5s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 775.5s ♪ 向导音:menu(系统界面)
|
||||
t+ 775.5s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 777.7s ▶ 语音:「回到直播。」
|
||||
t+ 779.8s ▶ 语音:「重新开始今晚。」
|
||||
t+ 781.9s ♪ 音效 sfx/ui_confirm
|
||||
t+ 781.9s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 781.9s ♪ 向导音:explore(探索/安全)
|
||||
t+ 781.9s ▶ 语音:「明天孩子生日!蛋糕都订好了,他人要今晚走!」
|
||||
t+ 787.1s ▶ 语音:「明天孩子生日!蛋糕都订好了,他人要今晚走!」
|
||||
t+ 792.3s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 794.4s ▶ 语音:「现在是今晚第四通电话。」
|
||||
t+ 796.5s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 798.6s ▶ 语音:「明天孩子生日!蛋糕都订好了,他人要今晚走!」
|
||||
t+ 803.8s ▶ 语音:「明天孩子生日!蛋糕都订好了,他人要今晚走!」
|
||||
t+ 809.0s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 809.0s ▶ 语音:「摔门声你听见了。向左滑,替孩子给她带句话。向右滑,劝她回家把话说开。」
|
||||
t+ 811.1s ♪ 音效 sfx/ui_confirm
|
||||
t+ 811.1s ▶ 语音:「吵架隔着电话吵不赢。回家吧,蛋糕别放到坏了。」
|
||||
t+ 813.3s ♪ 音效 sfx/ui_menu
|
||||
t+ 813.3s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 813.3s ♪ 向导音:menu(系统界面)
|
||||
t+ 813.3s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 815.4s ▶ 语音:「回到直播。」
|
||||
t+ 817.5s ▶ 语音:「重新开始今晚。」
|
||||
t+ 819.6s ♪ 音效 sfx/ui_confirm
|
||||
t+ 819.6s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 819.6s ♪ 向导音:explore(探索/安全)
|
||||
t+ 819.6s ▶ 语音:「吵架隔着电话吵不赢。回家吧,蛋糕别放到坏了。」
|
||||
t+ 821.7s 〰 震动:error(做错了:两连短震)
|
||||
t+ 821.7s 〰 震动:error(做错了:两连短震)
|
||||
t+ 821.7s 〰 震动:error(做错了:两连短震)
|
||||
t+ 821.7s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 823.9s ▶ 语音:「现在是今晚第四通电话。」
|
||||
t+ 826.0s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 828.1s ▶ 语音:「吵架隔着电话吵不赢。回家吧,蛋糕别放到坏了。」
|
||||
t+ 830.2s 〰 震动:error(做错了:两连短震)
|
||||
t+ 830.2s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 832.3s ▶ 语音:「现在是今晚第四通电话。」
|
||||
t+ 834.5s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 836.6s ▶ 语音:「吵架隔着电话吵不赢。回家吧,蛋糕别放到坏了。」
|
||||
t+ 838.7s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 843.7s 〰 震动:error(做错了:两连短震)
|
||||
t+ 843.7s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 845.8s ▶ 语音:「现在是今晚第四通电话。」
|
||||
t+ 847.9s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 850.0s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 855.0s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 857.1s ▶ 语音:「现在是今晚第四通电话。」
|
||||
t+ 859.2s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 861.3s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 866.3s ♪ 音效 sfx/ui_menu
|
||||
t+ 866.3s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 866.3s ♪ 向导音:menu(系统界面)
|
||||
t+ 866.3s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 868.4s ▶ 语音:「回到直播。」
|
||||
t+ 870.5s ▶ 语音:「重新开始今晚。」
|
||||
t+ 872.7s ♪ 音效 sfx/ui_confirm
|
||||
t+ 872.7s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 872.7s ♪ 向导音:explore(探索/安全)
|
||||
t+ 872.7s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 877.6s 〰 震动:error(做错了:两连短震)
|
||||
t+ 877.6s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 879.8s ▶ 语音:「现在是今晚第四通电话。」
|
||||
t+ 881.9s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 884.0s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 889.0s 〰 震动:error(做错了:两连短震)
|
||||
t+ 889.0s 〰 震动:error(做错了:两连短震)
|
||||
t+ 889.0s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 893.9s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 898.9s ♪ 音效 sfx/ui_menu
|
||||
t+ 898.9s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 898.9s ♪ 向导音:menu(系统界面)
|
||||
t+ 898.9s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 901.0s ▶ 语音:「回到直播。」
|
||||
t+ 903.1s ▶ 语音:「重新开始今晚。」
|
||||
t+ 905.2s ♪ 音效 sfx/ui_confirm
|
||||
t+ 905.2s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 905.2s ♪ 向导音:explore(探索/安全)
|
||||
t+ 905.2s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 910.2s ♪ 音效 sfx/ui_menu
|
||||
t+ 910.2s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 910.2s ♪ 向导音:menu(系统界面)
|
||||
t+ 910.2s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 912.3s ▶ 语音:「回到直播。」
|
||||
t+ 914.4s ▶ 语音:「重新开始今晚。」
|
||||
t+ 916.6s ♪ 音效 sfx/ui_confirm
|
||||
t+ 916.6s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 916.6s ♪ 向导音:explore(探索/安全)
|
||||
t+ 916.6s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 921.5s ♪ 音效 sfx/ui_menu
|
||||
t+ 921.5s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 921.5s ♪ 向导音:menu(系统界面)
|
||||
t+ 921.5s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 923.7s ▶ 语音:「回到直播。」
|
||||
t+ 925.8s ▶ 语音:「重新开始今晚。」
|
||||
t+ 927.9s ♪ 音效 sfx/ui_confirm
|
||||
t+ 927.9s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 927.9s ♪ 向导音:explore(探索/安全)
|
||||
t+ 927.9s ▶ 语音:「嗯……我这就往回走。谢谢你,听我瞎嚷嚷。」
|
||||
t+ 932.9s ▶ 语音:「她往回走了。成不成,看他们自己的了。」
|
||||
t+ 935.0s ♪ 向导音:settle(结算)
|
||||
t+ 935.0s ♪ 音效 sfx/line_drop
|
||||
t+ 935.0s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+ 938.0s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+ 938.0s ♪ 向导音:turn(轮到你)
|
||||
t+ 938.0s 〰 震动:confirm(轻点确认)
|
||||
t+ 938.0s ♪ 音效 sfx/amb_cab
|
||||
t+ 938.0s ♪ 音效 sfx/line_connect
|
||||
t+ 938.0s ▶ 语音:「五线来电。引擎声没停过——他在开车!」
|
||||
t+ 940.1s ♪ 音效 sfx/ui_menu
|
||||
t+ 940.1s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 940.1s ♪ 向导音:menu(系统界面)
|
||||
t+ 940.1s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 942.2s ▶ 语音:「回到直播。」
|
||||
t+ 944.3s ▶ 语音:「重新开始今晚。」
|
||||
t+ 946.5s ♪ 音效 sfx/ui_confirm
|
||||
t+ 946.5s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 946.5s ♪ 向导音:explore(探索/安全)
|
||||
t+ 946.5s ♪ 音效 sfx/amb_cab
|
||||
t+ 946.5s ♪ 音效 sfx/line_connect
|
||||
t+ 946.5s ▶ 语音:「五线来电。引擎声没停过——他在开车!」
|
||||
t+ 948.6s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 950.7s ▶ 语音:「现在是今晚第五通电话。」
|
||||
t+ 952.8s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 954.9s ♪ 音效 sfx/amb_cab
|
||||
t+ 954.9s ♪ 音效 sfx/line_connect
|
||||
t+ 954.9s ▶ 语音:「五线来电。引擎声没停过——他在开车!」
|
||||
t+ 957.1s ♪ 音效 sfx/ui_menu
|
||||
t+ 957.1s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 957.1s ♪ 向导音:menu(系统界面)
|
||||
t+ 957.1s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 959.2s ▶ 语音:「回到直播。」
|
||||
t+ 961.3s ▶ 语音:「重新开始今晚。」
|
||||
t+ 963.4s ♪ 音效 sfx/ui_confirm
|
||||
t+ 963.4s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 963.4s ♪ 向导音:explore(探索/安全)
|
||||
t+ 963.4s ♪ 音效 sfx/amb_cab
|
||||
t+ 963.4s ♪ 音效 sfx/line_connect
|
||||
t+ 963.4s ▶ 语音:「五线来电。引擎声没停过——他在开车!」
|
||||
t+ 965.5s ♪ 音效 sfx/ui_menu
|
||||
t+ 965.5s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+ 965.5s ♪ 向导音:menu(系统界面)
|
||||
t+ 965.5s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+ 967.7s ▶ 语音:「回到直播。」
|
||||
t+ 969.8s ▶ 语音:「重新开始今晚。」
|
||||
t+ 971.9s ♪ 音效 sfx/ui_confirm
|
||||
t+ 971.9s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+ 971.9s ♪ 向导音:explore(探索/安全)
|
||||
t+ 971.9s ♪ 音效 sfx/amb_cab
|
||||
t+ 971.9s ♪ 音效 sfx/line_connect
|
||||
t+ 971.9s ▶ 语音:「五线来电。引擎声没停过——他在开车!」
|
||||
t+ 974.0s ▶ 语音:「主播,别挂。陪我说话,我的眼皮,沉得很。」
|
||||
t+ 979.0s ▶ 语音:「跑完这趟,闺女的学费就齐了。雨刷都快刮不动了。」
|
||||
t+ 984.6s 〰 震动:error(做错了:两连短震)
|
||||
t+ 984.6s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+ 986.7s ▶ 语音:「现在是今晚第五通电话。」
|
||||
t+ 988.9s ▶ 语音:「今晚的口碑,不好不坏。」
|
||||
t+ 991.0s ▶ 语音:「跑完这趟,闺女的学费就齐了。雨刷都快刮不动了。」
|
||||
t+ 996.6s 〰 震动:error(做错了:两连短震)
|
||||
t+ 996.6s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+ 996.6s ▶ 语音:「方向盘比话筒危险。向左滑,陪他聊聊闺女。向右滑,让他立刻进服务区。」
|
||||
t+ 998.7s ♪ 音效 sfx/ui_confirm
|
||||
t+ 998.7s ▶ 语音:「说说她。开学第一天,她跟你说的头一句话,是什么?」
|
||||
t+1000.8s 〰 震动:error(做错了:两连短震)
|
||||
t+1000.8s ▶ 语音:「单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。」
|
||||
t+1003.0s ▶ 语音:「现在是今晚第五通电话。」
|
||||
t+1005.1s ▶ 语音:「今晚的口碑,在听众里立住了。」
|
||||
t+1007.2s ▶ 语音:「说说她。开学第一天,她跟你说的头一句话,是什么?」
|
||||
t+1009.3s ♪ 音效 sfx/ui_menu
|
||||
t+1009.3s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+1009.3s ♪ 向导音:menu(系统界面)
|
||||
t+1009.3s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+1011.4s ▶ 语音:「回到直播。」
|
||||
t+1013.6s ▶ 语音:「重新开始今晚。」
|
||||
t+1015.7s ♪ 音效 sfx/ui_confirm
|
||||
t+1015.7s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+1015.7s ♪ 向导音:explore(探索/安全)
|
||||
t+1015.7s ▶ 语音:「说说她。开学第一天,她跟你说的头一句话,是什么?」
|
||||
t+1017.8s 〰 震动:error(做错了:两连短震)
|
||||
t+1017.8s ♪ 音效 sfx/ui_menu
|
||||
t+1017.8s ♫ BGM 切换 → bgm/menu(淡入 500ms)
|
||||
t+1017.8s ♪ 向导音:menu(系统界面)
|
||||
t+1017.8s ▶ 语音:「菜单。单击切换选项,双击确认。」
|
||||
t+1019.9s ▶ 语音:「回到直播。」
|
||||
t+1022.0s ▶ 语音:「重新开始今晚。」
|
||||
t+1024.2s ♪ 音效 sfx/ui_confirm
|
||||
t+1024.2s ♫ BGM 切换 → bgm/onair(淡入 800ms)
|
||||
t+1024.2s ♪ 向导音:explore(探索/安全)
|
||||
t+1024.2s ▶ 语音:「说说她。开学第一天,她跟你说的头一句话,是什么?」
|
||||
t+1026.3s ▶ 语音:「她说,爸,我在学校给你赚了朵小红花。哈哈,哈哈……」
|
||||
t+1032.4s ♪ 向导音:danger(危险)
|
||||
t+1032.4s ♪ 音效 sfx/brake_screech
|
||||
t+1032.4s 〰 震动:danger(危险逼近)
|
||||
t+1034.4s ▶ 语音:「车道偏了——听!」
|
||||
t+1036.5s ▶ 语音:「嘶——好险!前车急刹,我擦着护栏过去了。彻底醒了!」
|
||||
t+1042.6s ▶ 语音:「吓醒的,也算醒。这一趟,聊到家。」
|
||||
t+1044.7s ▶ 语音:「对了。头通电话那位大爷,就是这片被巡逻队找到的。这城市的夜,是接着的。」
|
||||
t+1046.8s ♪ 向导音:settle(结算)
|
||||
t+1046.8s ♪ 音效 sfx/line_drop
|
||||
t+1046.8s ♫ BGM 切换 → bgm/bridge(淡入 800ms)
|
||||
t+1046.8s ▶ 语音:「今晚的口碑,在听众里立住了。」
|
||||
t+1051.9s ▶ 语音:「五线收工。垫乐起——零点档,还剩最后一段。」
|
||||
t+1054.0s ♫ BGM 切换 → bgm/onair(淡入 600ms)
|
||||
t+1054.0s ♪ 向导音:choice(抉择/等待输入)
|
||||
t+1054.0s ▶ 语音:「留言机红灯在闪,是老主播三年前没播完的那句晚安。向左滑,替他播出去。向右滑,照常收播。」
|
||||
t+1056.2s ♪ 音效 sfx/ui_confirm
|
||||
t+1056.2s ▶ 语音:「各位,今晚到这里。明晚零点,今夜不眠,不见不散。」
|
||||
t+1058.3s ▶ 语音:「留言机的红灯,又多亮了一夜。」
|
||||
t+1060.4s ♪ 向导音:settle(结算)
|
||||
t+1060.4s ♫ BGM 切换 → bgm/ending(淡入 1500ms)
|
||||
t+1060.4s ▶ 语音:「今晚的热线烧得发烫。全城的失眠者,都被接住了。」
|
||||
t+1062.5s ▶ 语音:「只是路过留言机的时候,你还是没敢看它。红灯灭得很慢。」
|
||||
t+1064.6s ▶ 语音:「收播了。导播间替你记了一笔账——今晚的人都怎样了。」
|
||||
t+1066.8s ▶ 语音:「老周:孙子替他买了老花镜。回信说,谢谢那首歌。」
|
||||
t+1068.9s ▶ 语音:「小鹿退了票。检票口的灯,记得那趟没上成的车。」
|
||||
t+1071.0s ▶ 语音:「糖糖后来又打来过一次。还是那句:楼下在吵。」
|
||||
t+1073.1s ▶ 语音:「陈姐在公车站坐到了末班车。那通电话,成了没寄出的信。」
|
||||
t+1075.2s ▶ 语音:「老韩到家了。后视镜上,多了朵小红花。」
|
||||
t+1077.4s 【状态】乱按剧本收尾:接听 5 次、8 个抉择、乱试 199 次、逛菜单 38 次 结局和五条回响都听完了。单击再来一局,下滑开菜单(BGM=bgm/ending,语速1)
|
||||
|
||||
#### 【玩家动作】全程没有任何一次手势被无声吞掉,也没有卡死在某个状态里——结局链照样走完
|
||||
|
||||
+335
-10
@@ -18,7 +18,7 @@
|
||||
|
||||
用法(GPU 必须串行):
|
||||
source env.d/tts.sh
|
||||
flock /home/ubuntu/SoundGame/.gpu.lock .venv-tts/bin/python tools/gen_voice_dual.py --game simon --gender both
|
||||
flock /home/xsl/SoundGame/.gpu.lock .venv-tts/bin/python tools/gen_voice_dual.py --game simon --gender both
|
||||
.venv-tts/bin/python tools/gen_voice_dual.py --game all --check # 无需 GPU
|
||||
source env.d/android.sh && .venv-tts/bin/python tools/gen_voice_dual.py --game all --convert
|
||||
"""
|
||||
@@ -28,10 +28,10 @@ import re
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
os.environ.setdefault("HF_HOME", "/home/ubuntu/SoundGame/models/hf")
|
||||
os.environ.setdefault("HF_HOME", "/home/xsl/SoundGame/models/hf")
|
||||
os.environ.setdefault("HF_ENDPOINT", "https://hf-mirror.com")
|
||||
|
||||
ROOT = "/home/ubuntu/SoundGame"
|
||||
ROOT = "/home/xsl/SoundGame"
|
||||
STAGING = os.path.join(ROOT, "tools", "gen_voice_dual_wav")
|
||||
SPLIT_LIMIT = 40 # 超过 40 字拆句
|
||||
GAP_SEC = 0.12 # 拼接句间静音
|
||||
@@ -50,6 +50,9 @@ SPEAKERS = {
|
||||
"rhythm": {"male": "Uncle_Fu", "female": "Vivian"},
|
||||
"space": {"male": "Uncle_Fu", "female": "Serena"},
|
||||
"rpg": {"male": "Uncle_Fu", "female": "Serena"},
|
||||
# radio 默认 speaker 仅作兜底;双性别行按 VOICE_SPK["radio"] 逐句覆盖(HOST/PROD 双配对)
|
||||
"radio": {"male": "Uncle_Fu", "female": "Serena"},
|
||||
"dungeon": {"male": "Uncle_Fu", "female": "Serena"},
|
||||
}
|
||||
|
||||
# instruct 对:(male, female)。None 表示两性别共用同一 instruct。
|
||||
@@ -600,6 +603,322 @@ RPG_NPC = [
|
||||
]
|
||||
NPCS = {"rpg": RPG_NPC}
|
||||
|
||||
|
||||
# ---------------------------------------------------------------- radio
|
||||
# 《不眠频率》批次 1(docs/design/15-radio-voice-ids.md,132 句:双性别 103 + 平铺 NPC 29)。
|
||||
# 台词全文由提取脚本逐字照抄 voice-ids 文档;双性别组分 HOST(主播)/ PROD(导播/系统)
|
||||
# 两个 speaker 配对(同性别双音色,VOICE_SPK 覆盖);NPC 单音色平铺(RADIO_NPC)+ 通话带通(NPC_BANDPASS)。
|
||||
_RADIO_HOST = _pair("低沉温和的中年男声,深夜电台主播,沉稳亲切,有磁性",
|
||||
"温暖清晰的年轻女声,深夜电台主播,沉稳亲切,不甜腻")
|
||||
_RADIO_PROD = _pair("贴近耳机的低语男声,年轻电台导播,冷静克制",
|
||||
"贴近耳机的低语女声,年轻电台导播,冷静克制")
|
||||
RADIO_HOST_LINES = [
|
||||
("b_open", _RADIO_HOST, "午夜零点,红灯亮起。欢迎回到《今夜不眠》。"),
|
||||
("b_rain", _RADIO_HOST, "雨下了一整晚。热线灯,马上就要亮了。"),
|
||||
("z1_song", _RADIO_HOST, "大爷别急,这首歌我也会。咱们一句一句来。"),
|
||||
("z1_ask", _RADIO_HOST, "大爷,路口有什么招牌?念一个给我听听。"),
|
||||
("z1_stay", _RADIO_HOST, "哪儿也不去。我陪你,这首歌还长着呢。"),
|
||||
("z1_pol", _RADIO_HOST, "大爷,我把您转给派出所,他们马上就到。"),
|
||||
("l1_go", _RADIO_HOST, "你妈等的不是奖杯,是你进门喊的那声妈。"),
|
||||
("l1_free", _RADIO_HOST, "退不退,都是你的自由。夜还长,慢慢想。"),
|
||||
("k1_lull", _RADIO_HOST, "闭上眼睛。风把云朵盖在被子上,月亮替你值夜班。"),
|
||||
("k1_ask", _RADIO_HOST, "睡不着的时候,心里是不是装着事?说给我听听。"),
|
||||
("k1_truth", _RADIO_HOST, "糖糖,记住,大人的事,不是小孩的错。一个字都不是。"),
|
||||
("k1_lie", _RADIO_HOST, "睡吧。明天一睁眼,什么都会好起来的。"),
|
||||
("w1_say", _RADIO_HOST, "四十分钟前,有个孩子问我们:爸妈摔门,是不是她的错。"),
|
||||
("w1_say2", _RADIO_HOST, "今天有位小朋友,还在等爸妈回家切蛋糕。"),
|
||||
("w1_air", _RADIO_HOST, "陈姐,别挂。让他接电话——全城都在听。"),
|
||||
("w1_priv", _RADIO_HOST, "这里只有我们俩了。想说就说,想哭就哭。"),
|
||||
("w1_home", _RADIO_HOST, "吵架隔着电话吵不赢。回家吧,蛋糕别放到坏了。"),
|
||||
("h1_talk", _RADIO_HOST, "说说她。开学第一天,她跟你说的头一句话,是什么?"),
|
||||
("h1_stop", _RADIO_HOST, "听我的,前面三公里有服务区。学费急,命更急。"),
|
||||
("d9_face", _RADIO_HOST, "师父,三年了。这句晚安,我替您播。各位,晚安。"),
|
||||
("d9_avoid", _RADIO_HOST, "各位,今晚到这里。明晚零点,今夜不眠,不见不散。"),
|
||||
("e1_a", _RADIO_HOST, "天亮了,热线灯还亮着。你们的晚安,是这座城市的心跳。"),
|
||||
("e1_b", _RADIO_HOST, "这把话筒,我总算接得住了。明晚零点,接着不眠。"),
|
||||
("e2_a", _RADIO_HOST, "今晚的热线烧得发烫。全城的失眠者,都被接住了。"),
|
||||
("e2_b", _RADIO_HOST, "只是路过留言机的时候,你还是没敢看它。红灯灭得很慢。"),
|
||||
("e3_a", _RADIO_HOST, "口碑掉了一夜。可那句迟到三年的晚安,今晚说出去了。"),
|
||||
("e3_b", _RADIO_HOST, "一个人的频道,也是频道。师父,收到了吗?"),
|
||||
("e4_a", _RADIO_HOST, "今夜不眠,静音收播。有的夜班,谁也接不住谁。"),
|
||||
("e4_b", _RADIO_HOST, "留言机还在闪。你没看它,它也没怪你。明晚再说吧。"),
|
||||
]
|
||||
|
||||
RADIO_PROD_LINES = [
|
||||
("gd_brief", _RADIO_PROD, "单击继续节目。请选择的时候,向左或向右滑。"),
|
||||
("gd_continue", _RADIO_PROD, "单击屏幕,继续。"),
|
||||
("gd_again", _RADIO_PROD, "还在吗?单击继续。"),
|
||||
("gd_invalid", _RADIO_PROD, "这个手势,直播间里用不上。"),
|
||||
("gd_ring1", _RADIO_PROD, "热线在闪。单击,接听。"),
|
||||
("gd_ring2", _RADIO_PROD, "灯还亮着,听众在等。单击,接听。"),
|
||||
("sys_help", _RADIO_PROD, "单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。"),
|
||||
("sys_menu", _RADIO_PROD, "菜单。单击切换选项,双击确认。"),
|
||||
("sys_menu_resume", _RADIO_PROD, "回到直播。"),
|
||||
("sys_menu_restart", _RADIO_PROD, "重新开始今晚。"),
|
||||
("sys_menu_lobby", _RADIO_PROD, "保存并回大厅。"),
|
||||
("sys_settings", _RADIO_PROD, "音色、语速、背景音乐,请回大厅修改。"),
|
||||
("sys_skip", _RADIO_PROD, "想跳过这句,单击就行。"),
|
||||
("sys_continue_ask", _RADIO_PROD, "检测到你的夜班记录。单击继续上次,右滑开始新的夜晚。"),
|
||||
("sys_new_night", _RADIO_PROD, "新的夜晚,开始了。"),
|
||||
("sys_saved", _RADIO_PROD, "进度已保存。"),
|
||||
("prog_c1", _RADIO_PROD, "现在是今晚第一通电话。"),
|
||||
("prog_c2", _RADIO_PROD, "现在是今晚第二通电话。"),
|
||||
("prog_c3", _RADIO_PROD, "现在是今晚第三通电话。"),
|
||||
("prog_c4", _RADIO_PROD, "现在是今晚第四通电话。"),
|
||||
("prog_c5", _RADIO_PROD, "现在是今晚第五通电话。"),
|
||||
("rep_high", _RADIO_PROD, "今晚的口碑,在听众里立住了。"),
|
||||
("rep_mid", _RADIO_PROD, "今晚的口碑,不好不坏。"),
|
||||
("rep_low", _RADIO_PROD, "今晚的口碑,还没立起来。"),
|
||||
("b_rule", _RADIO_PROD, "台里的规矩就一条:先接住人,再接电话。"),
|
||||
("b_goal", _RADIO_PROD, "今晚五通电话。说什么话,由你决定。"),
|
||||
("z1_ring_in", _RADIO_PROD, "一线来电。七十多岁,雨夜,走丢了。"),
|
||||
("p1", _RADIO_PROD, "老人在发抖。向左滑,陪他哼那首老歌。向右滑,冷静问他路口的路牌。"),
|
||||
("z1_sdone", _RADIO_PROD, "他稳住了。老歌,比路牌管用。"),
|
||||
("z1_adone", _RADIO_PROD, "他慌了。先接住情绪,再走流程。"),
|
||||
("p2", _RADIO_PROD, "雨声更密了。向左滑,留在原地陪他等巡逻队。向右滑,转接派出所。"),
|
||||
("z1_staye", _RADIO_PROD, "十五分钟后,巡逻灯停在路口。全城听见老人笑了。"),
|
||||
("z1_pole", _RADIO_PROD, "转接完成,地址报得清。干净利落。"),
|
||||
("z1_bade", _RADIO_PROD, "地址没报清就转接,雨又大。这通砸了。先稳人,再办事。"),
|
||||
("z1_ok1", _RADIO_PROD, "就这么接。记住这个手感。"),
|
||||
("l1_in", _RADIO_PROD, "二线来电。姑娘,声音很轻,像怕吵到谁。"),
|
||||
("p3", _RADIO_PROD, "向左滑,告诉她这趟车值得上。向右滑,把选择还给她。"),
|
||||
("l1_goe", _RADIO_PROD, "二线收工。这句话,值一个头条。"),
|
||||
("l1_freee", _RADIO_PROD, "她走了。没上车,也没退票。年轻人的夜,长了点。"),
|
||||
("k1_in", _RADIO_PROD, "三线来电。听呼吸,是个小孩。"),
|
||||
("p4", _RADIO_PROD, "向左滑,唱一段摇篮曲哄她睡。向右滑,轻轻问她怎么了。"),
|
||||
("k1_lulle", _RADIO_PROD, "睡着了。可你没听见,她在怕什么。"),
|
||||
("p5", _RADIO_PROD, "孩子的声音在抖。向左滑,告诉她这不是她的错。向右滑,答应她明天都会好。"),
|
||||
("k1_truthe", _RADIO_PROD, "蛋糕。记下来——四线的来电,可能跟这个家有关。"),
|
||||
("k1_liee", _RADIO_PROD, "你许了个兑不了的现。孩子睡了,谎留下了。"),
|
||||
("w1_in", _RADIO_PROD, "四线来电。户外风声大,是位大姐。"),
|
||||
("p6", _RADIO_PROD, "摔门声你听见了。向左滑,替孩子给她带句话。向右滑,劝她回家把话说开。"),
|
||||
("w1_saye", _RADIO_PROD, "她攥着电话,很久没出声。风都停了。"),
|
||||
("w1_say2e", _RADIO_PROD, "话递到了。就差最后一脚。"),
|
||||
("p7", _RADIO_PROD, "她的呼吸平了。向左滑,留在直播里,让全城等这个门铃。向右滑,换垫乐,私下陪她说完。"),
|
||||
("w1_aire", _RADIO_PROD, "电话那头,传来跑步声。今晚的高光时刻。"),
|
||||
("w1_prive", _RADIO_PROD, "灯牌是你亲手关的,故事还是完整的。稳。"),
|
||||
("w1_homee", _RADIO_PROD, "她往回走了。成不成,看他们自己的了。"),
|
||||
("h1_in", _RADIO_PROD, "五线来电。引擎声没停过——他在开车!"),
|
||||
("p8", _RADIO_PROD, "方向盘比话筒危险。向左滑,陪他聊聊闺女。向右滑,让他立刻进服务区。"),
|
||||
("h1_danger", _RADIO_PROD, "车道偏了——听!"),
|
||||
("h1_talke", _RADIO_PROD, "吓醒的,也算醒。这一趟,聊到家。"),
|
||||
("h1_stope", _RADIO_PROD, "他下了高速。单子黄了,人齐了。"),
|
||||
("h1_echo", _RADIO_PROD, "对了。头通电话那位大爷,就是这片被巡逻队找到的。这城市的夜,是接着的。"),
|
||||
("g9_in", _RADIO_PROD, "五线收工。垫乐起——零点档,还剩最后一段。"),
|
||||
("p9", _RADIO_PROD, "留言机红灯在闪,是老主播三年前没播完的那句晚安。向左滑,替他播出去。向右滑,照常收播。"),
|
||||
("d9_facee", _RADIO_PROD, "带子里其实只有电流声。但空着的那一秒,你说满了。"),
|
||||
("d9_avoide", _RADIO_PROD, "留言机的红灯,又多亮了一夜。"),
|
||||
("ep_lead", _RADIO_PROD, "收播了。导播间替你记了一笔账——今晚的人都怎样了。"),
|
||||
("ep_zhou_ok", _RADIO_PROD, "老周:孙子替他买了老花镜。回信说,谢谢那首歌。"),
|
||||
("ep_zhou_no", _RADIO_PROD, "老周在便利店屋檐下坐到天亮。没出事,也没人听见他的歌。"),
|
||||
("ep_deer_ok", _RADIO_PROD, "小鹿上车了。她妈后来打电话说,那声妈,比奖杯值钱。"),
|
||||
("ep_deer_no", _RADIO_PROD, "小鹿退了票。检票口的灯,记得那趟没上成的车。"),
|
||||
("ep_kid_ok", _RADIO_PROD, "糖糖家的门,这个月没再摔过。她说这是主播魔法。"),
|
||||
("ep_kid_no", _RADIO_PROD, "糖糖后来又打来过一次。还是那句:楼下在吵。"),
|
||||
("ep_wife_ok", _RADIO_PROD, "陈姐家切了蛋糕。那句「回来吧」,是我这晚听过最好的声音。"),
|
||||
("ep_wife_no", _RADIO_PROD, "陈姐在公车站坐到了末班车。那通电话,成了没寄出的信。"),
|
||||
("ep_han_ok", _RADIO_PROD, "老韩到家了。后视镜上,多了朵小红花。"),
|
||||
("ep_han_no", _RADIO_PROD, "老韩在服务区睡了一觉。学费齐了,那首歌没放成。"),
|
||||
]
|
||||
|
||||
RADIO_LINES = RADIO_HOST_LINES + RADIO_PROD_LINES
|
||||
|
||||
# NPC 单音色平铺(id, speaker, instruct, 台词)→ web/radio/audio/voice/<id>.*
|
||||
#(转码时按 15-radio.md §6.2 逐来电者带通,见 NPC_BANDPASS;staging 保留未滤波原声)。
|
||||
RADIO_NPC = [
|
||||
("z1_a", "Uncle_Fu", "苍老沙哑的男声,七十五岁,疲惫害怕,带着雨夜的颤抖", "主播……我,我找不到回家的路了。"),
|
||||
("z1_b", "Uncle_Fu", "苍老沙哑的男声,七十五岁,疲惫害怕,带着雨夜的颤抖", "雨太大了。我本来,只想买副老花镜。"),
|
||||
("z1_songo", "Uncle_Fu", "苍老沙哑的男声,七十五岁,疲惫害怕,带着雨夜的颤抖", "对,对!路口修车铺,天天放这首!"),
|
||||
("z1_asko", "Uncle_Fu", "苍老沙哑的男声,七十五岁,疲惫害怕,带着雨夜的颤抖", "招牌……雨糊住了,我眼花,看不清啊……"),
|
||||
("z1_stayo", "Uncle_Fu", "苍老沙哑的男声,七十五岁,疲惫害怕,带着雨夜的颤抖", "好,好。有人说话,我就不怕了。"),
|
||||
("z1_polo", "Uncle_Fu", "苍老沙哑的男声,七十五岁,疲惫害怕,带着雨夜的颤抖", "好,好。谢谢你啊,谢谢。"),
|
||||
("z1_bad", "Uncle_Fu", "苍老沙哑的男声,七十五岁,疲惫害怕,带着雨夜的颤抖", "说不清……我真是,说不清了……"),
|
||||
("l1_a", "Serena", "年轻女声,倔强,带着哭腔,疲惫", "主播,退票窗口十一点半就关了。我站这儿半小时了。"),
|
||||
("l1_b", "Serena", "年轻女声,倔强,带着哭腔,疲惫", "票是回去看我妈的。可我试镜又黄了,两手空空……"),
|
||||
("l1_goo", "Serena", "年轻女声,倔强,带着哭腔,疲惫", "呜……嗯。不退了,我现在就去检票。谢谢您。"),
|
||||
("l1_freeo", "Serena", "年轻女声,倔强,带着哭腔,疲惫", "嗯……我再想想。窗口要关了,我先过去了。"),
|
||||
("k1_a", "Vivian", "稚嫩童声,八岁小女孩,困倦,胆怯", "喂……有人吗?我睡不着。"),
|
||||
("k1_b", "Vivian", "稚嫩童声,八岁小女孩,困倦,胆怯", "家里灯关了。可是楼下,一直有声音。"),
|
||||
("k1_lullo", "Vivian", "稚嫩童声,八岁小女孩,困倦,胆怯", "月亮也睡了……那我也睡。"),
|
||||
("k1_asko", "Vivian", "稚嫩童声,八岁小女孩,困倦,胆怯", "爸爸妈妈摔门了。是不是……我做错了什么呀。"),
|
||||
("k1_trutho", "Vivian", "稚嫩童声,八岁小女孩,困倦,胆怯", "嗯……那我睡了。他们明天,会一起给我切蛋糕吗?"),
|
||||
("k1_lieo", "Vivian", "稚嫩童声,八岁小女孩,困倦,胆怯", "真的吗?拉钩。晚安……"),
|
||||
("w1_a", "Vivian", "疲惫沙哑的中年女声,四十五岁,强撑着平静", "主播,我就想找个人说说。我家那口子,今晚要出远门的活儿。"),
|
||||
("w1_b", "Vivian", "疲惫沙哑的中年女声,四十五岁,强撑着平静", "明天孩子生日!蛋糕都订好了,他人要今晚走!"),
|
||||
("w1_sayo", "Vivian", "疲惫沙哑的中年女声,四十五岁,强撑着平静", "什么?她还没睡?这么晚了,她还醒着?"),
|
||||
("w1_say2o", "Vivian", "疲惫沙哑的中年女声,四十五岁,强撑着平静", "蛋糕……是他订的。他嘴上不说,心里都记着。"),
|
||||
("w1_airo", "Vivian", "疲惫沙哑的中年女声,四十五岁,强撑着平静", "喂!回来吧!蛋糕要化了,孩子等着呢!"),
|
||||
("w1_privq", "Vivian", "疲惫沙哑的中年女声,四十五岁,强撑着平静", "呜……其实他订完蛋糕就跟我道歉了。是我,把门摔得太响。"),
|
||||
("w1_homeo", "Vivian", "疲惫沙哑的中年女声,四十五岁,强撑着平静", "嗯……我这就往回走。谢谢你,听我瞎嚷嚷。"),
|
||||
("h1_a", "Eric", "沙哑粗犷的中年男声,货车司机,困倦强撑", "主播,别挂。陪我说话,我的眼皮,沉得很。"),
|
||||
("h1_b", "Eric", "沙哑粗犷的中年男声,货车司机,困倦强撑", "跑完这趟,闺女的学费就齐了。雨刷都快刮不动了。"),
|
||||
("h1_talko", "Eric", "沙哑粗犷的中年男声,货车司机,困倦强撑", "她说,爸,我在学校给你赚了朵小红花。哈哈,哈哈……"),
|
||||
("h1_dango", "Eric", "沙哑粗犷的中年男声,货车司机,困倦强撑", "嘶——好险!前车急刹,我擦着护栏过去了。彻底醒了!"),
|
||||
("h1_stopo", "Eric", "沙哑粗犷的中年男声,货车司机,困倦强撑", "行,听你的。进了服务区,我给你们放首歌听。"),
|
||||
]
|
||||
|
||||
# ---------------------------------------------------------------- dungeon
|
||||
# 《回声地窟》批次 1(docs/design/16-dungeon-voice-ids.md,125 句 ×2 性别,无 NPC)。
|
||||
_DUN = _pair("低沉醇厚的男声,像探窟向导,沉稳有力",
|
||||
"平静清晰的女声,像探窟向导,沉稳可信")
|
||||
DUNGEON_LINES = [
|
||||
("intro_1", _DUN, "你在黑暗中醒来。这里是回声地窟。"),
|
||||
("intro_2", _DUN, "伸手不见五指,声音就是你的眼睛。"),
|
||||
("sys_continue_ask", _DUN, "检测到探窟记录。单击继续,右滑重新开始。"),
|
||||
("sys_new_run", _DUN, "新的探窟,开始了。"),
|
||||
("tut_d0", _DUN, "先学会用耳朵看。单击,发出声波脉冲。"),
|
||||
("tut_echo_come", _DUN, "听,回声回来了。"),
|
||||
("tut_front_rule", _DUN, "回声回来越快,墙就越近。"),
|
||||
("tut_side_rule", _DUN, "两侧的回声,发闷是墙,空旷是通路。"),
|
||||
("tut_walk", _DUN, "按住屏幕不放,你就往前走。"),
|
||||
("tut_turn", _DUN, "左滑右滑,可以转身。"),
|
||||
("tut_replay", _DUN, "双击,再发一次脉冲,不要钱。"),
|
||||
("tut_status", _DUN, "上滑,随时听自己的状态。"),
|
||||
("tut_menu", _DUN, "下滑,打开菜单。"),
|
||||
("tut_mob", _DUN, "前面有东西!放心,它伤不到你。"),
|
||||
("tut_parry", _DUN, "听到它的动静,双击格挡。"),
|
||||
("tut_parry_ok", _DUN, "挡住了!"),
|
||||
("tut_parry_miss", _DUN, "没挡住也别怕,它伤不到你。"),
|
||||
("tut_attack", _DUN, "现在单击,挥拳打它。"),
|
||||
("tut_kill", _DUN, "打中了,就是这样。"),
|
||||
("tut_stairs", _DUN, "铁器的回声,就是下潜的楼梯。"),
|
||||
("tut_stairs_on", _DUN, "楼梯就在脚下。单击,下潜。"),
|
||||
("tut_done", _DUN, "教学完了。地窟很深,小心走。"),
|
||||
("tut_skip", _DUN, "已跳过教学。单击脉冲,先听听四周。"),
|
||||
("sys_saved", _DUN, "进度已保存。"),
|
||||
("sys_menu", _DUN, "菜单。单击切换,双击确认。"),
|
||||
("sys_menu_resume", _DUN, "返回探索。"),
|
||||
("sys_menu_save", _DUN, "保存并回大厅。"),
|
||||
("sys_menu_help", _DUN, "重新听帮助。"),
|
||||
("sys_menu_restart", _DUN, "重新开始本周目。"),
|
||||
("help_explore", _DUN, "单击脉冲,按住前进,左右滑转身。双击再听,上滑状态,下滑菜单。"),
|
||||
("help_battle", _DUN, "敌人前摇声响时双击格挡,单击挥击。打不过就按住屏幕逃跑。"),
|
||||
("settings_hint", _DUN, "音色、语速、背景音乐,请回大厅修改。"),
|
||||
("st_floor_1", _DUN, "这是第一层。"),
|
||||
("st_floor_2", _DUN, "这是第二层。"),
|
||||
("st_floor_3", _DUN, "这是第三层。"),
|
||||
("st_floor_4", _DUN, "这是第四层。"),
|
||||
("st_floor_5", _DUN, "这是第五层。"),
|
||||
("st_floor_6", _DUN, "这是第六层。"),
|
||||
("st_floor_7", _DUN, "这是第七层。"),
|
||||
("st_hp_1", _DUN, "你毫发无损。"),
|
||||
("st_hp_2", _DUN, "你受了点伤。"),
|
||||
("st_hp_3", _DUN, "你伤势不轻。"),
|
||||
("st_hp_4", _DUN, "你命悬一线。"),
|
||||
("st_gold_1", _DUN, "口袋空空。"),
|
||||
("st_gold_2", _DUN, "有些积蓄。"),
|
||||
("st_gold_3", _DUN, "收获可观。"),
|
||||
("st_gold_4", _DUN, "腰包鼓鼓。"),
|
||||
("st_face_e", _DUN, "你面朝东。"),
|
||||
("st_face_s", _DUN, "你面朝南。"),
|
||||
("st_face_w", _DUN, "你面朝西。"),
|
||||
("st_face_n", _DUN, "你面朝北。"),
|
||||
("st_threat_none", _DUN, "附近很安静。"),
|
||||
("st_threat_left", _DUN, "左边有脚步声。"),
|
||||
("st_threat_right", _DUN, "右边有脚步声。"),
|
||||
("st_threat_both", _DUN, "两边都有动静。"),
|
||||
("st_best_1", _DUN, "你还没到过第三层。"),
|
||||
("st_best_2", _DUN, "你到过中层。"),
|
||||
("st_best_3", _DUN, "你到过最深层。"),
|
||||
("evt_coin_1", _DUN, "捡到几枚金币。"),
|
||||
("evt_coin_2", _DUN, "捡到一小把金币。"),
|
||||
("evt_coin_3", _DUN, "捡到一大袋金币。"),
|
||||
("evt_potion", _DUN, "一瓶药水,收进腰带。"),
|
||||
("evt_potion_full", _DUN, "腰带满了,药水留在原地。"),
|
||||
("evt_weapon", _DUN, "捡到更快的短刃,出手更狠了。"),
|
||||
("evt_armor", _DUN, "换上更硬的护甲,更抗打了。"),
|
||||
("evt_stairs_lock", _DUN, "楼梯被大东西堵住了,先赢它。"),
|
||||
("evt_descend", _DUN, "你顺着楼梯,往下潜。"),
|
||||
("btl_bat", _DUN, "盲眼蝠扑了过来!"),
|
||||
("btl_rat", _DUN, "窟鼠窜了出来!"),
|
||||
("btl_mush", _DUN, "蘑菇怪拦住了你!"),
|
||||
("btl_crab", _DUN, "窟主石甲蟹,就在你面前。"),
|
||||
("btl_crawler", _DUN, "绕行者贴上来了,小心背后!"),
|
||||
("btl_spider", _DUN, "洞蛛落地了!"),
|
||||
("btl_leech", _DUN, "窟主腐沼蟒,挡住了楼梯。"),
|
||||
("btl_guard", _DUN, "石像卫醒了!"),
|
||||
("btl_king", _DUN, "窟中之王,就在深处。"),
|
||||
("btl_parried", _DUN, "挡下了大半!"),
|
||||
("btl_behind", _DUN, "它在你背后,转身再挡。"),
|
||||
("btl_swish", _DUN, "挥空了,它不在你面前。"),
|
||||
("btl_no_turn", _DUN, "它贴着你不放,不用转身。"),
|
||||
("btl_kill", _DUN, "它倒下了。"),
|
||||
("btl_loot_1", _DUN, "战利不多。"),
|
||||
("btl_loot_2", _DUN, "小有收获。"),
|
||||
("btl_loot_3", _DUN, "大有收获。"),
|
||||
("btl_lvup", _DUN, "你的拳脚更利落了。"),
|
||||
("btl_flee", _DUN, "你甩掉了它,被抓了一下。"),
|
||||
("btl_flee_boss", _DUN, "退路塌了,跑不掉!"),
|
||||
("btl_half_crab", _DUN, "石甲蟹的甲裂了!"),
|
||||
("btl_half_leech", _DUN, "腐沼蟒暴怒了!"),
|
||||
("btl_half_king", _DUN, "王怒了,脚步更重了!"),
|
||||
("die_intro", _DUN, "你倒下了。"),
|
||||
("die_cause_1", _DUN, "你被小怪拖垮了。"),
|
||||
("die_cause_2", _DUN, "你没挡住那记重击。"),
|
||||
("die_cause_3", _DUN, "你背后的偷袭,要了命。"),
|
||||
("die_adv_1", _DUN, "下次,前摇声响时就双击。"),
|
||||
("die_adv_2", _DUN, "打不过,就按住屏幕逃跑。"),
|
||||
("die_adv_3", _DUN, "身后有动静,先转身。"),
|
||||
("gd_pulse", _DUN, "单击脉冲,听听四周。"),
|
||||
("gd_turn", _DUN, "轮到你了。单击挥击。"),
|
||||
("gd_invalid", _DUN, "这个操作在这里用不上。"),
|
||||
("stair_hint_a", _DUN, "找找铁器的回声,那是楼梯。"),
|
||||
("stair_hint_b", _DUN, "楼梯有大东西守着,先赢它。"),
|
||||
("stair_dir_e", _DUN, "楼梯在东边。"),
|
||||
("stair_dir_s", _DUN, "楼梯在南边。"),
|
||||
("stair_dir_w", _DUN, "楼梯在西边。"),
|
||||
("stair_dir_n", _DUN, "楼梯在北边。"),
|
||||
("nav_e", _DUN, "往东。"),
|
||||
("nav_s", _DUN, "往南。"),
|
||||
("nav_w", _DUN, "往西。"),
|
||||
("nav_n", _DUN, "往北。"),
|
||||
("nav_done", _DUN, "到了,就是这里。"),
|
||||
("meta_gold_1", _DUN, "这趟没带回什么。"),
|
||||
("meta_gold_2", _DUN, "这趟带回一些金币。"),
|
||||
("meta_gold_3", _DUN, "这趟满载而归。"),
|
||||
("settle_stronger", _DUN, "下个周目,你会更强。"),
|
||||
("settle_win_1", _DUN, "你捧起了地窟之心,通关了!"),
|
||||
("settle_win_2", _DUN, "黑暗的尽头,是光。"),
|
||||
("settle_again", _DUN, "单击,再探一次。"),
|
||||
("unlock_lead", _DUN, "攒够了新的遗产。"),
|
||||
("unlock_potion", _DUN, "解锁行囊药,开局自带一瓶。"),
|
||||
("unlock_vigor", _DUN, "解锁体魄,起始更强壮。"),
|
||||
("unlock_veil", _DUN, "解锁护符,每层头一下减半。"),
|
||||
("unlock_echo", _DUN, "解锁回声强化,侧向听得更远。"),
|
||||
("unlock_blade", _DUN, "解锁武器,开局带着短刃。"),
|
||||
("unlock_none", _DUN, "金币还不够,继续攒。"),
|
||||
]
|
||||
|
||||
NPCS = {"rpg": RPG_NPC, "radio": RADIO_NPC}
|
||||
|
||||
# radio 双性别行的逐句 speaker 覆盖(HOST=主播 / PROD=导播,同性别两个音色,
|
||||
# 见 15-radio-voice-ids.md 录制说明:同场景高频对话的两者永不同 speaker)。
|
||||
VOICE_SPK = {"radio": {}}
|
||||
VOICE_SPK["radio"].update({fid: ("Uncle_Fu", "Serena") for fid, _i, _t in RADIO_HOST_LINES})
|
||||
VOICE_SPK["radio"].update({fid: ("Dylan", "Vivian") for fid, _i, _t in RADIO_PROD_LINES})
|
||||
|
||||
# radio 来电者电话滤波(15-radio.md §6.2,全部 + 轻压缩):按 NPC id 前缀分档,
|
||||
# convert 转码时应用;staging wav 保留未滤波原声以便重滤/回退(宁窄勿脏)。
|
||||
NPC_BANDPASS = {
|
||||
"radio": [
|
||||
("z1_", "highpass=f=500,lowpass=f=2800"), # 老周:老旧手机,窄而颤抖
|
||||
("l1_", "highpass=f=400,lowpass=f=3400"), # 小鹿:车站手机,干净偏冷
|
||||
("k1_", "highpass=f=450,lowpass=f=3000"), # 糖糖:家用座机,小而近
|
||||
("w1_", "highpass=f=420,lowpass=f=3100"), # 陈姐:户外手机,风噪
|
||||
("h1_", "highpass=f=300,lowpass=f=3400"), # 老韩:车载蓝牙,宽而轰
|
||||
]
|
||||
}
|
||||
_NPC_ACOMP = "acompressor=threshold=-20dB:ratio=3:attack=10:release=150" # 轻压缩(全档)
|
||||
|
||||
|
||||
def npc_af(game, fid):
|
||||
"""NPC id -> ffmpeg -af 字符串(无滤波档返回 None)。"""
|
||||
for prefix, af in NPC_BANDPASS.get(game, []):
|
||||
if fid.startswith(prefix):
|
||||
return af + "," + _NPC_ACOMP
|
||||
return None
|
||||
|
||||
|
||||
GAMES = {
|
||||
"storyline": STORYLINE_LINES,
|
||||
"escape": ESCAPE_LINES,
|
||||
@@ -607,6 +926,8 @@ GAMES = {
|
||||
"rhythm": RHYTHM_LINES,
|
||||
"space": SPACE_LINES,
|
||||
"rpg": RPG_LINES,
|
||||
"radio": RADIO_LINES,
|
||||
"dungeon": DUNGEON_LINES,
|
||||
}
|
||||
|
||||
|
||||
@@ -684,18 +1005,20 @@ def generate(games, genders, only):
|
||||
for gender in genders:
|
||||
speaker = SPEAKERS[game][gender]
|
||||
ins_idx = 0 if gender == "male" else 1
|
||||
spk_map = VOICE_SPK.get(game, {})
|
||||
outdir = os.path.join(STAGING, game, gender)
|
||||
os.makedirs(outdir, exist_ok=True)
|
||||
|
||||
# 展开成 (fid, chunk_idx, n_chunks, text, instruct),跳过已完成
|
||||
# 展开成 (fid, chunk_idx, n_chunks, text, instruct, speaker),跳过已完成
|
||||
items = []
|
||||
for fid, ins_pair, text in lines:
|
||||
path = staging_path(game, gender, fid)
|
||||
if valid_wav(path):
|
||||
continue
|
||||
spk = spk_map.get(fid, (speaker, speaker))[ins_idx]
|
||||
chunks = split_text(text)
|
||||
for ci, ctext in enumerate(chunks):
|
||||
items.append((fid, ci, len(chunks), ctext, ins_pair[ins_idx]))
|
||||
items.append((fid, ci, len(chunks), ctext, ins_pair[ins_idx], spk))
|
||||
if not items:
|
||||
print(f"[{game}/{gender}] nothing to do", flush=True)
|
||||
continue
|
||||
@@ -711,11 +1034,11 @@ def generate(games, genders, only):
|
||||
wavs, sr = model.generate_custom_voice(
|
||||
text=[b[3] for b in batch],
|
||||
language=["Chinese"] * len(batch),
|
||||
speaker=[speaker] * len(batch),
|
||||
speaker=[b[5] for b in batch],
|
||||
instruct=[b[4] for b in batch],
|
||||
max_new_tokens=2048,
|
||||
)
|
||||
for (fid, ci, _n, _t, _i), wav in zip(batch, wavs):
|
||||
for (fid, ci, _n, _t, _i, _s), wav in zip(batch, wavs):
|
||||
results.setdefault(fid, {})[ci] = np.asarray(wav, dtype=np.float32)
|
||||
print(f"[{game}/{gender}] batch {bi + 1}/{len(queue)} ({kind}, n={len(batch)})", flush=True)
|
||||
|
||||
@@ -822,16 +1145,18 @@ def convert(games):
|
||||
subprocess.run(["ffmpeg", "-y", "-v", "error", "-i", src,
|
||||
"-ar", "44100", "-c:a", "aac", "-b:a", "128k", base + ".m4a"], check=True)
|
||||
total += 1
|
||||
# NPC 平铺(staging <game>/npc/ → audio/voice/<id>.*)
|
||||
# NPC 平铺(staging <game>/npc/ → audio/voice/<id>.*;radio 按 NPC_BANDPASS 带通)
|
||||
for fid, _sp, _ins, _t in NPCS.get(game, []):
|
||||
src = os.path.join(STAGING, game, "npc", fid + ".wav")
|
||||
if not os.path.exists(src):
|
||||
print(f"[convert] WARN missing {game}/npc/{fid}.wav")
|
||||
continue
|
||||
base = os.path.join(ROOT, "web", game, "audio", "voice", fid)
|
||||
subprocess.run(["ffmpeg", "-y", "-v", "error", "-i", src,
|
||||
af = npc_af(game, fid)
|
||||
af_args = ["-af", af] if af else []
|
||||
subprocess.run(["ffmpeg", "-y", "-v", "error", "-i", src, *af_args,
|
||||
"-ar", "44100", "-c:a", "libvorbis", "-q:a", "3", base + ".ogg"], check=True)
|
||||
subprocess.run(["ffmpeg", "-y", "-v", "error", "-i", src,
|
||||
subprocess.run(["ffmpeg", "-y", "-v", "error", "-i", src, *af_args,
|
||||
"-ar", "44100", "-c:a", "aac", "-b:a", "128k", base + ".m4a"], check=True)
|
||||
total += 1
|
||||
print(f"[convert] {game} done")
|
||||
|
||||
@@ -114,3 +114,33 @@ menu pad 用 loudnorm **I=-24**/TP=-2(比主题曲低一档,10 文档 §1.2
|
||||
(引擎再按 volume 0.35 播放)→ ogg q:a 3 + m4a 128k。
|
||||
成品 mean:storyline -24.4 / escape -26.1 / simon -25.8 / rhythm -25.3 / space -25.1 / rpg menu -25.9 / rpg explore -22.3 dB。
|
||||
flac 原件存 tools/mureka_out/menu_*/ 与 rpg_explore/。
|
||||
|
||||
## 2026-09-01 批次 1:radio《不眠频率》+ dungeon《回声地窟》BGM(8 首)
|
||||
|
||||
预算线:本轮 $0.30(每游戏 4 首 × $0.03);总预算 $2.00。后处理脚本入库:
|
||||
`web/radio/gen/gen_bgm.sh` / `web/dungeon/gen/gen_bgm.sh`(首个强 onset 起点 → 93s 裁剪 +
|
||||
首尾 3s acrossfade(tri) 无缝循环 → loudnorm → 44.1kHz → ogg q:a 3 + m4a 128k,成品均 90.00s)。
|
||||
|
||||
| # | task id | 用途 | 状态 | 花费 |
|
||||
|---|---|---|---|---|
|
||||
| 22 | 158551062544386 | radio bgm/onair(2 候选) | succeeded | $0.03 |
|
||||
| 23 | 158551207313409 | radio bgm/bridge(2 候选) | succeeded | $0.03 |
|
||||
| 24 | 158551383277574 | radio bgm/menu(2 候选) | succeeded | $0.03 |
|
||||
| 25 | 158551538401281 | radio bgm/ending(2 候选) | succeeded | $0.03 |
|
||||
| 26 | 158551678976001 | dungeon bgm/menu(2 候选) | succeeded | $0.03 |
|
||||
| 27 | 158551855333377 | dungeon bgm/explore(2 候选) | succeeded | $0.03 |
|
||||
| 28 | 158552010457089 | dungeon bgm/battle(2 候选) | succeeded | $0.03 |
|
||||
| 29 | 158552209555457 | dungeon bgm/boss(2 候选) | succeeded | $0.03 |
|
||||
|
||||
**本轮花费:$0.24 / $0.30。累计:$0.87 / $2.00。** 8 首全部一次成功无重试。
|
||||
|
||||
选用(拿不准选时长更接近 90s 的候选):onair=候选 0(135.5s,choice 158551165370369);
|
||||
bridge=候选 0(211.2s,choice 158551341465604);menu=候选 0(188.6s,choice 158551500914690);
|
||||
ending=候选 1(189.2s,choice 158551630872578);dungeon menu=候选 0(162.8s,choice 158551817322499);
|
||||
explore=候选 0(177.0s,choice 158551978868739);battle=候选 0(186.4s,choice 158552169709569);
|
||||
boss=候选 0(149.5s,choice 158552331321345)。
|
||||
|
||||
响度:radio menu 按 10 号文档 §1.2 用 I=-24(成品 mean -24.7dB,menu pad 档);
|
||||
radio onair/bridge/ending 与 dungeon 4 首按各设计文档用 I=-20(成品 mean -20.4 ~ -21.3dB)。
|
||||
本作无节奏关键曲目(dungeon battle/boss 的 bpm 仅为特征词,不做节拍网格同步),未跑 bpm_precise。
|
||||
flac 原件存 tools/mureka_out/{radio,dungeon}-*/。
|
||||
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
/home/xsl/.local/node-v22.23.2-linux-x64
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user