Files
SoundGame/docs/design/16-dungeon-voice-ids.md
T
xsl 566241e05d feat(platform/P1): 配对码跨设备 + 认领打磨 + 键盘语音双套资产(两 agent 并行 + 集成收口)
配对码与认领(B):
- POST /api/pair/start|join:6 位码 10 分钟单次有效、仅存内存零泄露面、5 连错 per-IP 封锁 10 分钟;join=新设备档案按桶 LWW 并入老档案+token 改绑(复用 claim-merge);日志脱敏
- 大厅:生成配对码(speechSynthesis 逐位朗读+aria-live+重听)/从其他设备转入(one-time-code 输入框)/从本机移除/401 过期自愈引导/aria 补全/玩家名可听化
- api-smoke 12/12(配对全流程/频控/封锁/过期自愈/移除/digitsToCn)+ CDP 真浏览器 E2E 22/22

键盘语音双套资产(A,路线 a):
- 164 变体句(8 游戏 grep 实测,超出调研预估 153:含轻触/点两下/按住变体)×2 性别=328 生成 656 文件 36.9 分钟;触屏主资产零字节改动(PCM 逐样本比对后还原)
- 引擎 _candidates 三跳路由 key→gender→平铺(inputMode 跟随);缓存键 mode|gender|id;engine-input 新增 K9 路由断言(72 条)
- check_all_assets 增 key 列(两性别一致且 ⊆ 主集)8 游戏全绿;voice_text.json 增 __key__ 表;live control.mjs key 会话对照键盘措辞验收(集成)
- voice-ids 文档:8 游戏键盘变体小节由 KEY_LINES 程序化生成(与台词表逐字断言一致);补齐 storyline/escape/simon 三个历史缺失文档;design README 增 new8 索引
- mock 适配:playtest persona 加 maxTouchPoints=1 保持触屏链断言语义零改动

回归:12 套件全绿(8 playtest + guide 122 + engine-voice 19 + engine-input 72 + api-smoke 12/12)
同批入库:批次 2/3 已完稿设计文档(17-abyss/18-detective/19-cipher 全套,20-22 在途)
2026-09-10 00:43:23 +08:00

15 KiB
Raw Blame History

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 固定词,试听确认)。R3 新句自查:gold_some(带回来一点,不多——无多音字风险);tut_flee_hold(想逃跑,按住别松手——无风险)。
  • 向导/卡关通道句(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(旁白 ×20)

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_flee_hold 想逃跑,按住别松手。 R3:战斗长按未满 900ms 松手(取消逃跑)时的区分提示,每场 1 次
tut_stairs 铁器的回声,就是下潜的楼梯。 D9
tut_stairs_on 楼梯就在脚下。单击,下潜。 首次踏上楼梯格
tut_done 教学完了。地窟很深,小心走。 DRILL 完成
tut_skip 已跳过教学。单击脉冲,先听听四周。 下滑跳过教学

S 组 · 系统/菜单/状态(旁白 ×36)

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 口袋空空。 元进度总金币 =0(R3 起 band0 专用:真的一枚没有)
gold_some 带回来一点,不多。 R3 E1-2:金币档 1(0<金<50)真话句——上滑状态链 / SETTLE / TITLE 三处共用(修「捡到金币→口袋空空」谎报)
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 层;R3 措辞加「最远」——live P3:防误读为"本局到过",已重录)
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 元进度·距下一解锁尚远

合计:127 句 ×2 性别 = 254 条音频(×2 格式 = 508 文件;无 NPC 平铺件。R3:125 + gold_some + tut_flee_hold;st_best_2 措辞重录不加句)。 死亡结算链 = die_intro → die_cause_X → die_adv_Y → st_floor_N(复用)→ meta_gold_X(band1 且金>0 时为 gold_some)→ 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(band1 且金>0 时为 gold_some)→ st_face_X → st_threat_X。 主设计触发逻辑对照 16-dungeon.md §4-§11;资产规模核对见其 §9。

键盘变体(key,P1 输入平权路线 a,20 句)

「生效输入模式=键盘」(settings.input=key,或 auto 且键盘在跟/纯桌面初始判定, web/engine/gesture.js inputMode())时,引擎 voice 候选链前置加载 web/dungeon/audio/voice/<gender>/key/<id>.{ogg,m4a},变体缺失回退主资产——触屏措辞零改动。

措辞规范(02-input-parity.md §4.3 路线 a + P1 裁定):向左滑→按左方向键(四向同理, WASD 不进台词);单击/轻触屏幕→按空格;双击→按回车;按住/长按→按住空格; 复合短语(左右滑→左右方向键、滑动→方向键)按语义等价展开;只改操作词,其余 内容一字不动,不新增「重」类多音字。本表与 tools/gen_voice_dual.py 的 KEY_LINES 逐字一致(两表一致铁律:改一处必改另一处)。 资产:×2 性别 = 20×2 条、×2 格式 = 20×4 文件;管线 gen_voice_dual.py --only-variants 生成 → --convert 落盘,终检 tools/check_all_assets.py(key 两性别一致且 ⊆ 主集)。

id 键盘台词全文(触屏原句见本表上方对应 id)
sys_continue_ask 检测到探窟记录。按空格继续,按右方向键重新开始。
tut_d0 先学会用耳朵看。按空格,发出声波脉冲。
tut_walk 按住空格不放,你就往前走。
tut_turn 按左右方向键,可以转身。
tut_replay 按回车,再发一次脉冲,不要钱。
tut_status 按上方向键,随时听自己的状态。
tut_menu 按下方向键,打开菜单。
tut_parry 听到它的动静,按回车格挡。
tut_attack 现在按空格,挥拳打它。
tut_flee_hold 想逃跑,按住空格别松手。
tut_stairs_on 楼梯就在脚下。按空格,下潜。
tut_skip 已跳过教学。按空格发脉冲,先听听四周。
sys_menu 菜单。按空格切换,按回车确认。
help_explore 按空格发脉冲,按住空格前进,左右方向键转身。按回车再听,上方向键查状态,下方向键开菜单。
help_battle 敌人前摇声响时按回车格挡,按空格挥击。打不过就按住空格逃跑。
die_adv_1 下次,前摇声响时就按回车。
die_adv_2 打不过,就按住空格逃跑。
gd_pulse 按空格发脉冲,听听四周。
gd_turn 轮到你了。按空格挥击。
settle_again 按空格,再探一次。