Files
SoundGame/docs/design/21-keeper-voice-ids.md
xsl ee5d4d2544 feat(playbook): 26 号交互手册全量落地——剩余 12 款深度重构 + 语音全量重制
storyline/escape/simon 首批之后的推广收官:15 款全部按 26 号模式运行
(发言权/回执/三档提示/迷茫接管/手势阶梯/断点复述),旧「双击重听/格挡/
菜单确认」等反模式口径全线废除,开场零规则念白(首句即动手)。

游戏层(12 款):rpg(格挡=前摇窗口内再单击)/ rhythm / space / radio /
dungeon / abyss / detective / cipher / teahouse / keeper / bridge /
hunt(联机切片):
- 每款 game.js 接引擎六模块 + makeInputPipeline(doubleTapWindow:0);
  四向玩法类 swipeCore + 长按帮助;双击是玩法的(space 护盾 / hunt
  旋风斩)按手势阶梯阶段 3 分档恢复双击窗口(doubletapCore)
- 每款 playtest 重写:玩法断言 + §6.2 乱点机器人(无声操作 / 被动
  原句重复 / 打断失败 = 0);15 款 3900+ 断言全绿
- 12 份 docs/design/26-apply-*.md 施工单 + tools/voice_lines_26/
  台词清单 + voice-ids 文档同步 + 转写会话剧本按新口径重写

引擎层(web/engine/,6 处修复):pipeline 增 doubletapCore;novice
teachLine 带 voice/ 前缀(此前教学句被静默丢弃);confusion.record
前置到新手门(锁定手势的乱点也计信号);InvalidHints 播完恢复解释前
状态(根治孤儿 BUSY);WaitPoint takeover(2) 台账去重;台账只在
speak 真正播出时登记。遗留引擎债登记 roadmap §3.1。

语音资产:台词表合并(新增 ~250 系统句 / 改 ~50 旧口径 / 删 ~110
废止句;合并器 tools/merge_voice_lines_26.py + 引用校验器
tools/validate_voice_refs.py),GPU 重录 1536 wav → 4204 ogg/m4a
落地,check_all_assets + validate_voice_refs 双绿;键盘变体同步扩表。

大厅/文档:15 款统一新交互口径(「新交互」徽标退役);README /
HANDOVER / rpg README 旧口径修正;roadmap P0-P3 置完成。
2026-10-02 12:33:20 +08:00

33 KiB
Raw Permalink Blame History

21b · 《守塔人》(keeper) 语音台词表(voice ids,录音依据)

26 号对齐(资产清单,不是交互宪法)

  • 交互与新手手势以 26-audio-interaction-playbook.md 和对应游戏正文为准。
  • 本表仍是 TTS id 事实源的登记副本(生成以 tools/gen_voice_dual.py 为准)。含「双击重听 / 双击使用 / 双击格挡 / 单击循环菜单」的句子 停用或按游戏正文重录。
  • 写作:指令 ≤12 字,短句档 ≤6 字,叙事 ≤25 字;每句标 critical / content / hint / feedback。游戏主动提示不得原样重复;重听前加「再说一遍:」。
  • 键盘变体:新手期回车当空格(单击)。删除「按回车=重听」类旧口径,或仅在阶段 3 解锁双击后启用。
  • 共用新句见 14-guide-layer.md §7(sys_first_tap 等)。各游戏 _full / _short 在游戏正文设计单里点名,补进本表后再进生成脚本。

给音频总监的录制说明

  • 双性别组(守塔人 KEEPER + 岸台/系统 SHORE,121 句):落 web/keeper/audio/voice/female|male/<id>.{ogg,m4a},两性别 id 集合完全一致(含全部 _k 变体)。
    • KEEPER(守塔人=玩家):female = Serena,instruct 常量 沉静克制的年轻女声,孤岛守塔人,低而稳,藏着心事;male = Uncle_Fu,instruct 常量 沉静克制的男声,孤岛守塔人,低而稳,藏着心事。
    • SHORE(岸台值班员/系统音/向导 gd_*):female = Vivian,instruct 常量 清晰平稳的女声,海岸电台值班员,隔着无线电的温和干练;male = Dylan,instruct 常量 清晰平稳的男声,海岸电台值班员,隔着无线电的温和干练。
    • 区分度设计:守塔人(塔内近讲,不滤波)与岸台(无线电清晰人声,不滤波)共用 speaker 池但不同 speaker 配对——female 侧守塔人 Serena / 岸台 Vivian、male 侧守塔人 Uncle_Fu / 岸台 Dylan,同场景高频对话的两者永不同 speaker。
  • NPC 平铺组(27 句):单音色、不做双性别,平铺落 web/keeper/audio/voice/<id>.{ogg,m4a}(引擎平铺回退命中),转码时按 §滤波表 加带通。NPC 共 3 人(≤5 约束),同一角色 speaker+instruct 恒定,区分度风险逐个标注:
    角色 speaker instruct 常量 滤波 区分度风险
    阿澈(22 岁渔民,现在线·电台) Dylan 年轻男声,二十二岁渔民,海风养出的嗓子,风暴里喊话,慌而不乱 电台 350-3200Hz 中:与 male 岸台同 speaker——靠电台滤波(岸台不滤波)+ 年龄感 instruct 区分,二者相邻句出现(c1_holdo→c1_holde),请试听确认
    父亲(回忆·十二年前) Uncle_Fu 温和低沉的男声,四十岁守塔人,隔着老唱片,疲惫而坚定 唱片 300-2800Hz 中:与 male 守塔人同 speaker——插叙内锚句(不滤波)与父亲(唱片滤波)相邻,靠音质差+年代感 instruct 区分,请试听确认
    祖父(回忆·四十年前) Eric 苍老缓慢的男声,七十岁老守塔人,隔着更老的唱片,字字压秤 唱片 250-2600Hz 低:三代人里唯一 Eric,频带最窄最「远」
  • 三代人音色分配总账:你(玩家,双性别随 settings.voice)+ 父亲(Uncle_Fu,仅插叙)+ 祖父(Eric,仅插叙)+ 阿澈(Dylan,仅现在线电台)。任何时刻同场景说话的人声 ≤3 种质感(近讲/电台/唱片),音质即身份。
  • 时空音质规则(本作命门):现在线=近讲(KEEPER/SHORE 不滤波)+电台(阿澈滤波);回忆线=唱片滤波(父/祖父)+锚句恒为守塔人不滤波(「现在的你」在回忆里旁白——干净人声 vs 唱片人声,强化时空感);唱片噪底由 sfx/amb_vinyl 常驻承担,人声滤波只做带通+轻压缩(acompressor threshold=-20dB ratio=3),不做失真(宁窄勿脏)。试听不可读的句子回退未滤波原声。
  • 称呼规则:阿澈对玩家一律称「塔 / 守塔人」,全表禁用「姑娘/小哥/大哥/大姐/叔叔」类性别化称呼(玩家性别随用户设置变化);父亲在插叙中只对塔台/家人说话,无性别指向称谓。
  • 键盘变体(PC 键盘通道,P1 机制):带 _k 后缀的 id 为键盘措辞版(「按空格」「回车」「左右方向键/上箭头/下箭头」),与触屏版成对生成、成对落盘(check_all_assets 校验 _k 配对);运行时由 gesture.inputMode() 选择:key → <id>_k,touch → <id>,auto 跟随最近使用通道,_k 缺失回退无后缀版。变体共 8 对(7 对在下方 §G0.a 操作提示句区 + 首个抉择 p1),以粗体标注。
  • 数字规避:幕次/信任/真相全部分档整句(prog_m1..3、tr_、tru_);句内数字(四十年前/十二年前/第七级台阶/十级/两百米/一刻钟/半个时辰/七个人/两艘/第三级/三遍/半里/三个浪头/三刻)写死在整句里,禁止运行时拼接。
  • 禁语速词:instruct 不含任何语速描述(引擎 SoundTouch 变速);NPC 句靠短句+逗号停顿实现「风暴里喊/老唱片里缓」听感。
  • 管线:tools/gen_voice_dual.py 照录(SPEAKERS 表需新增 keeper 行);多音字自查见文末注记。

G0 组 · 系统/向导/状态(SHORE 双性别 ×34)

G0.a 操作提示句(含键盘变体,7 对 14 句——键盘玩家听这一区就够)

id 台词全文 触发
gd_brief 单击,继续值守。要选择时,向左或向右滑。 开场链最前(full 档,F8 先例)
gd_brief_k 按空格,继续值守。要选择时,用左右方向键。 同上(inputMode=key)
gd_continue 单击屏幕,继续。 叙事链末看门狗第 1 级(full 25s / standard 13s)
gd_continue_k 按空格,继续。 同上(key)
gd_again 还在吗?单击继续。 看门狗第 2 级(50s / 30s),新句不逐字重播
gd_again_k 还在吗?按空格继续。 同上(key)
sys_help 单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。 上滑帮助 / 菜单内上滑
sys_help_k 空格继续,回车重新听。上箭头听状态,下箭头开菜单。选择时,左右箭头。 同上(key)
sys_menu 菜单。单击切换选项,双击确认。 下滑呼出模态菜单
sys_menu_k 菜单。空格切换选项,回车确认。 同上(key)
sys_skip 想跳过这句,单击就行。 开场每局一次(skip_hint 先例)
sys_skip_k 想跳过这句,按空格。 同上(key)
sys_continue_ask 检测到你的值守记录。单击继续上次,右滑开始新的风暴夜。 有存档进游戏
sys_continue_ask_k 检测到你的值守记录。空格继续上次,右箭头开始新的风暴夜。 同上(key)

G0.b 状态/系统句(无手势词,无变体)

id 台词全文 触发
gd_invalid 这个手势,塔里用不上。 无效手势(error 震,idle-only,同局限次)
gd_prog1 滑动这里用不上。想想岸台刚说的话。 无进展轨 60s(第 1 级,乱按抢救)
gd_prog2 别乱。停一停,再听一遍。 无进展轨 120s(第 2 级)
sys_menu_resume 回到值守。 菜单项
sys_menu_restart 重新开始今夜。 菜单项
sys_menu_lobby 保存并回大厅。 菜单项(确认后跳转前播)
sys_settings 音色、语速、背景音乐,请回大厅修改。 菜单内设置提示
sys_new_night 新的风暴夜,开始了。 新夜开始 / 菜单重开
prog_m1 风暴起来了。今晚第一程。 上滑状态链首段·时位句(now,按当前幕选播)
prog_m2 风暴到顶。第二程。 同上
prog_m3 风在退。最后一程。 同上
prog_mem_g 这是回忆:祖父的年代,四十年前。 上滑状态链首段·时位句(memory=插叙1/3 期间)
prog_mem_f 这是回忆:父亲的最后一晚,十二年前。 上滑状态链首段·时位句(memory=插叙2 期间)+ 恢复链时位句先行
tr_deep 他把命,交给了你的声音。 信任 3-4(跨档时挂 CALM 链尾;上滑状态链)
tr_half 他信一半,疑一半。 信任 1-2
tr_thin 今晚,他只信自己的手。 信任 0(各播报位附 warning 震)
tru_zero 旧账压在灯底,你一页没翻。 真相度 0(上滑状态链,逐值为真)
tru_one 灯下的旧账,你翻开了一角。 真相度 1(仅插叙1)
tru_two 祖父和父亲的事,你都翻到了。 真相度 2(插叙1+2,缺页未读)
tru_full 三代人的账,今夜见底了。 真相度 3(插叙1+2+3)

G1 组 · 开场(双性别 ×4)

id 声部 台词全文 触发
b_open 守塔人 白角灯塔,风暴夜。我是今晚的守塔人。 INTRO(配 sfx/amb_storm+amb_room)
b_rain 守塔人 浪拍到第七级台阶。雾角两长一短——塔在,我也在。 INTRO(教「雾角=塔报平安」,配 sfx/foghorn)
b_rule 岸台 岸台的规矩就一条:风暴夜,灯不能灭。 INTRO(一句规矩,P4;与灯三态兑现一致)
b_goal 岸台 今夜两艘货轮过境。守住灯,也守住频道。 INTRO(货轮/频道双目标承诺),随后 C1

C1 组 · 幕一·风暴起(双性别 16〔含 p1_k〕+ 阿澈平铺 5 + 祖父平铺 2 = 23)

id 声部 台词全文 触发
c1_tune 岸台 频道里有动静。很轻,像隔着整片海。 C1 起始(配 sfx/radio_tune)
amo_a 阿澈 ……有人吗……顺发号……船进水了…… 呼救渐近(垫 sfx/static_burst+amb_engine)
amo_b 阿澈 白角塔!是你吗?求你,回个话! 通话主干(配 sfx/radio_beep 接通)
p1 岸台 他的声音在抖。向左滑,先接住这个人。向右滑,先要他的船位。 抉择提示(播完即可选)
p1_k 岸台 他的声音在抖。左箭头,先接住这个人。右箭头,先要他的船位。 同上(key;首个抉择的键位绑定)
c1_hold 守塔人 别慌。我在白角,哪儿也不去。慢慢说。 p1 左
c1_holdo 阿澈 ……好,好。你在。我听见了。 p1 左·反应(正反馈:声音稳住)
c1_holde 岸台 他喘匀了。先接人,再办事。 p1 左·收(trust+1)
c1_ask 守塔人 顺发号,报你的方位,报进水的速度。 p1 右
c1_asko 阿澈 方位……仪表进水了,我,我看不清…… p1 右·反应(慌)
c1_aske 岸台 他更慌了。人没接住,数字也乱。 p1 右·收(即时纠偏,非惩罚,不扣分)
amo_c 阿澈 我爷爷,四十年前也是在这片海没的。他说,白角的灯灭过一下。 通话主干(回澜号伏笔,p9 回环)
p2 岸台 他提到四十年前。向左滑,去翻灯座下的暗格。向右滑,先专心守灯。 抉择提示
c1_open 守塔人 父亲的钥匙,就在抽屉里。灯座第三级,开了。 p2 左(配 sfx/hatch_open;随后 rev_teach+插叙1)
rev_teach 守塔人 听到唱针落下、风声退后,是回忆。风声回来,就是现在。 时空签名教学句(首插叙前,全局一次)
rev_g1 守塔人 唱针落下。四十年前,也是这盏灯下。 插叙1·锚入(配 sfx/memory_in + bgm/memory + amb_vinyl;首播不可跳)
rev_g2 祖父 手稳住。灯罩擦到第三遍,才算干净。 插叙1(少年父亲为无台词角色——沉默擦灯声由底噪承载)
rev_g3 祖父 记住,灯下压着的东西,比灯重。守塔人,替它守一辈子。 插叙1(层1 秘密:灯下有东西)
rev_g4 守塔人 风声回来了。爷爷,我听见了。 插叙1·锚出(配 sfx/memory_out + bgm/storm 回切;首播不可跳)
c1_diary 守塔人 暗格里是祖父的日志。缺了最后一页。 回返后 now 句(truth+1;缺页悬念)
c1_focus 守塔人 先守住这盏灯。旧账,天亮再算。 p2 右
c1_focuse 岸台 灯转得稳。可那句「灭过一下」,留在了你耳朵里。 p2 右·收(错过的重量,不扣分)
lull_1 岸台 岸台通报:风加到十级。第一程,过去了。 CALM(1) 幕间(配 sfx/foghorn;跨档 tr_* 挂链尾)

C2 组 · 幕二·风暴顶(双性别 16 + 阿澈平铺 8 + 父亲平铺 3 = 27)

id 声部 台词全文 触发
c2_back 岸台 频道又响了。顺发号的引擎,时断时续。 C2 起始(信号重连,配 sfx/radio_tune+static_burst)
amo_d 阿澈 塔……听得到吗?水,到膝盖了。 通话主干(垫 amb_engine)
p3 岸台 他快撑不住了。向左滑,用守塔人的口诀带他稳船。向右滑,把船位报给岸台。 抉择提示
c2_song 守塔人 跟我念:浪头过,船头抬。浪头退,船头落。 p3 左(家传口诀;随后插叙2)
c2_songo 阿澈 浪头过,船头抬……真的稳了些!这口诀,谁教你的? p3 左·反应(trust 铺垫;问父)
rev_f1 守塔人 唱针又落下了。十二年前,也是这样的风。 插叙2·锚入(memory_in+bgm/memory;首播不可跳)
rev_f2 父亲 白角塔,我是老陈。接驳艇上两个人,都活着。 插叙2(父亲最后一次值守·电台腔)
rev_f3 父亲 守塔人听见了求救,就不能装没听见。等我回来。 插叙2(家训,与家规相抵的主题句)
rev_f4 父亲 塔上的机械上满发条,能自己转一夜。给我留着门。 插叙2(发条知识=rev_teach 型承诺,p7 差分兑现)
rev_f5 守塔人 风声回来了。那扇门,留到今天。 插叙2·锚出(memory_out+storm 回切;首播不可跳)
c2_key 守塔人 父亲桌上那支手电,尾盖里卷着一页纸。 插叙2 后 now 句(truth+1;缺页线索,p6 钥匙)
c2_shore 守塔人 岸台,记下他的船位。请渔政天亮前到。 p3 右
c2_shoreo 岸台 船位落在图上了。渔政的船,最快也要天亮。 p3 右·收(留白:那一夜要他自己撑)
amo_e 阿澈 守塔人……塔里就你一个人?家里人不拦着你干这行? 通话主干(问父铺垫)
p4 岸台 他问起你的人。向左滑,告诉他真话。向右滑,轻轻带过。 抉择提示
c4_true 守塔人 我父亲也是守塔人。十二年前风暴夜,他出海救人,没有回来。 p4 左(〔插叙2 未触发 ? 先播插叙2+c2_key : 直进〕)
c4_trueo 阿澈 ……对不起。难怪今晚,你一直都在。 p4 左·反应(trust+1)
c4_pass 守塔人 家里人?都在大陆。这行当,习惯了。 p4 右
c4_passo 阿澈 哦……你也是一个人守夜。我们俩,隔着一道海。 p4 右·反应
c2_crack 岸台 听!他那边,船板裂了! 危机拍1(sfx/hull_crack 前置 2s 渐强+danger 签名/震同窗)
amo_f 阿澈 裂了!水进得更快了。塔,告诉我怎么办! 危机后通话主干
p5 岸台 船在漏。向左滑,让他回舱堵漏,守住电台。向右滑,让他穿救生衣,上甲板。 抉择提示(双活路)
c5_patch 守塔人 拿堵漏垫顶住裂缝。人守在电台边,我一直在。 p5 左
c5_patcho 阿澈 顶住了!水慢下来了。我不走,守着电台。 p5 左·反应(trust+1)
c5_suit 守塔人 穿上救生衣,带上信号灯,站到甲板上去。 p5 右
c5_suito 阿澈 穿好了。要是船散了,我就抱着它漂。 p5 右·反应
lull_2 岸台 风眼凌晨过境。第二程,到顶了。 CALM(2) 幕间(配 sfx/foghorn;跨档 tr_* 挂链尾)

C3 组 · 幕三·风歇前(双性别 23 + 祖父平铺 3 + 阿澈平铺 4 = 30)

id 声部 台词全文 触发
c3_eye 岸台 风眼过了。最后的浪墙,就跟在后面。 C3 起始(amb_storm gain 降至 0.7 档)
c3_page 守塔人 手电的尾盖旋开了。那页纸,在灯下摊平。 条件 rev2=true(配 sfx/flash_click;随后 p6)
m6_seal 岸台 那些旧东西,你今晚没碰过。缺页的事,你一无所知。 p6 封锁句(rev2=false:播出后自动走右,不摆假选项)
p6 岸台 祖父的最后一页。向左滑,今晚就读完它。向右滑,合上,塞回灯底。 抉择提示(仅 rev2=true 时播)
rev_c1 守塔人 唱针落下。缺的那一页,自己开了口。 插叙3·锚入(memory_in;首播不可跳)
rev_c2 祖父 我写下这些,等一个敢看的人。那晚,我的儿子,偷了接驳艇。 插叙3(层3 秘密·上)
rev_c3 祖父 我去追他。灯,离了人。半个时辰,回澜号,七个人。 插叙3(层3 秘密·中:祖父之夜真相)
rev_c4 祖父 儿子回来了。这页我撕下来,压进灯底。守塔人,不能离灯。 插叙3(层3 秘密·下:家规由来)
rev_c5 守塔人 风声回来了。原来那道家规,是这么来的。 插叙3·锚出(memory_out;首播不可跳)
c6_reade 岸台 四十年,两代人,一条规矩。今晚,轮到你选了。 p6 左·收(truth+1,随后 p7)
c6_shut 守塔人 合上。守塔人的事,守塔人自己扛。 p6 右
p7 岸台 浪墙压过来了。向左滑,给灯上满发条,驾接驳艇去接他。向右滑,守着灯,用声音引他过礁。 抉择提示(核心宿命抉择;35 字全表最长)
c7_go 守塔人 机械上满发条,灯能自己转到天亮。等着我。 p7 左·rev2=true(配 sfx/lamp_mech;发条知识兑现)
c7_go2 守塔人 发条……我只上了半卷。快去,快回。 p7 左·rev2=false(无插叙2 知识,灯灭伏笔)
c7_hold 守塔人 顺发号,听我的。灯照着的那条道,跟我念,一步一步来。 p7 右(守灯引渡)
c3_wall 岸台 浪墙起来了!就是现在! 危机拍2(sfx/wave_wall 前置 2s 渐强+danger 签名/震同窗;p7 两路共用)
p8_boat 岸台 海上没有灯。向左滑,循着他哼的渔歌找他。向右滑,按推算的坐标,直线搜。 抉择提示(p7=左 形态)
p8_reef 岸台 礁缝两道口。向左滑,走老航道,稳但绕远。向右滑,钻新缝,近但冒险。 抉择提示(p7=右 形态)
c8_song 守塔人 他爷爷传下的渔歌……在哪?再唱一遍! p8_boat 左
c8_songo 阿澈 海风那个吹呀——塔!是你吗?我在这儿! p8_boat 左·反应(循歌找到)
c8_math 守塔人 坐标向东两百米。灯光扫过去,看见救生衣了! p8_boat 右
c8_matho 阿澈 塔!你的灯扫到我啦!我在这边! p8_boat 右·反应
c8_old 守塔人 走老航道。多绕半里,绕开所有的暗礁。 p8_reef 左
c8_oldo 阿澈 老航道……我爷爷念叨过这条道!稳了! p8_reef 左·反应
c8_new 守塔人 数三个浪头,借着风的角度,钻新缝! p8_reef 右
c8_newo 阿澈 一个,两个,三——过去了!塔,我过来了! p8_reef 右·反应
c9_return 岸台 接驳艇回来了。两个人,一身水,一盏灯。 p7 左·汇合
c3_dark 岸台 你离塔的时候,发条走到了头。灯,灭过一刻钟。过境的货轮,平安。 p7 左 + rev2=false 插播(复刻祖父之夜;归因真话;800ms 死窗)
c9_land 岸台 顺发号过了礁缝,搁上背风湾的滩。人,站上了岸。 p7 右 + trust≥3(自渡成功)
c9_found 岸台 他在半路改了主意。天亮时,渔队找到了他。活着,湿透了。 p7 右 + trust<3(克制措辞,零死亡)

D9 组 · 签收抉择(心结)(双性别 9 + 阿澈平铺 2 = 11)

id 声部 台词全文 触发
g9_in 岸台 风,一层一层退下去。天边,有点灰了。 签收引入(bgm 淡向 dawn 前的静默拍)
g9_knot 守塔人 十二年了。这一晚,我总算替父亲,站完了他的班。 心结自述(玩家背景)
p9a 岸台 他问起四十年前的灯。向左滑,把缺页的事,连根说给他。向右滑,就说,那晚风太大。 抉择提示(truth=3 全真相版)
p9b 岸台 他问起四十年前的灯。你知道的,只有碎片。向左滑,把碎片给他。向右滑,说风太大。 抉择提示(truth<3 碎片版,cipher p9_known/blind 先例)
d9_tell_a 守塔人 四十年前守塔的,是我爷爷。他离灯去救自己的儿子。灯灭那刻,回澜号……对不住。 p9 左·truth=3
d9_tell_b 守塔人 我只知道,那晚守塔的是我爷爷,灯灭过一下。剩下的,我也不敢说全。 p9 左·truth<3(句句为真:家族常识+阿澈原话回声)
d9_keep 守塔人 那晚风太大,灯出了点故障。别再问了,孩子,回家吧。 p9 右
amo_g 阿澈 ……我爷爷,就在那七个人里。难怪他到死,都念着白角的灯。 p9 左·反应(回环闭合:amo_c 伏笔兑现)
amo_h 阿澈 风太大……嗯。那晚的风,一定很大。 p9 右·反应
d9_telle 岸台 他听完,沉默了很久。天,亮了。 p9 左·收(措辞 truth 无关:全真相/碎片两版通用)
d9_keepe 岸台 这个话题,沉回了海里。天,亮了。 p9 右·收

EP 组 · 结局与尾声回响(双性别 19;结局 8 + 回响 11)

id 声部 台词全文 触发
e1_a 守塔人 天亮了。他在门厅睡熟,那页纸攥在手里。灯,亮到了最后一刻。 结局 e1(trust≥3 且 p9=左)主句
e1_b 守塔人 回澜号的账,翻开了第一页。这座塔,等了四十年。 e1 收(钩子)
e2_a 守塔人 他走的时候,天刚亮。我送到码头,什么也没说。 结局 e2(trust≥3 且 p9=右)主句
e2_b 守塔人 缺页放回灯底。有些东西,再压一代人。灯,还转着。 e2 收(钩子)
e3_a 守塔人 我把知道的,都说了。他望着海,半信半疑地点头。 结局 e3(trust<3 且 p9=左)主句
e3_b 守塔人 碎片也是真话。剩下的,让海自己讲吧。 e3 收(钩子)
e4_a 守塔人 天亮,各自归位。他回他的港,我守我的灯。 结局 e4(trust<3 且 p9=右)主句
e4_b 守塔人 隔着一道海,两座塔,谁也没再提那晚。 e4 收(钩子)
ep_lead 岸台 风停了。岸台给你记一笔——这一晚,后来怎样了。 结局链后尾声引入
ep_amo_home 岸台 阿澈:那晚之后改跑日班。他说,夜里的海,有守塔人听着。 尾声(p7=左:被你接进塔)
ep_amo_solo 岸台 阿澈:自己把船开上了背风湾。船主骂了船,没骂人。 尾声(p7=右 且 trust≥3:自渡)
ep_amo_dawn 岸台 阿澈:抱着冷藏柜漂到天亮。打那以后,出海带两台电台。 尾声(p7=右 且 trust<3:渔队找到)
ep_lamp_full 岸台 灯塔记录簿:你离塔三刻,灯自己转着。父亲的发条,说中了。 尾声(p7=左 且 rev2=true;rev_f4 兑现)
ep_lamp_dark 岸台 灯塔记录簿:凌晨两点,灯灭一刻钟。那一行,你写得格外用力。 尾声(p7=左 且 rev2=false;复刻祖父之夜回响)
ep_lamp_hold 岸台 灯塔记录簿:转灯整夜未停。你一步,也没离开过它。 尾声(p7=右)
ep_log_told 岸台 灯下的旧账,今夜见了光。 尾声(p9=左 且 truth≥1)
ep_log_kept 岸台 灯下的旧账,又压回了黑暗里。 尾声(p9=右 且 truth≥1;truth=0 两句皆不播——日志未出场)
ep_dad 岸台 值班表上,你替十二年前那个班次签了字。老陈,收工了。 尾声(rev2=true 选播)
ep_shore 岸台 岸台晨报:风暴过境,航道平安。白角灯,正常。 尾声恒播收尾(b_goal 货轮承诺闭环,配 sfx/foghorn)

合计:148 句(GPU 预算 ≤160 ✓)

  • 双性别 121 句(KEEPER 守塔人 42 + SHORE 岸台/系统 79,含 _k 键盘变体 8 对)×2 性别 = 242 文件;
  • NPC 平铺 27 句(阿澈 19 / 父亲 3 / 祖父 5)= 27 文件;
  • 合计 269 条音频 ×2 格式(ogg+m4a)= 538 文件。
  • 键盘变体 8 对:gd_brief / gd_continue / gd_again / sys_help / sys_menu / sys_skip / sys_continue_ask / p1(成对生成,check_all_assets 校验 _k 配对与双性别集合一致)。
  • 每结局专属台词齐备:e1/e2/e3/e4 各 2 句 + 尾声回响 11 句(p7×trust / p7×rev2 / p9×truth / rev2 条件选播)。
  • 每局到达全部 9 个抉择点(p1..p9 及 p8 双形态变体 p8_boat/p8_reef、p9 双变体 p9a/p9b),实选 8-9 个(p6 在 rev2=false 时被 m6_seal 自动走右)。

R2 增量节 · 26 号深度重构(2026-10)

交互重构施工单见 26-apply-keeper.md;台词增量清单见 tools/voice_lines_26/keeper.md(管线路径两表一致铁律)。系统/交互层新句全部 SHORE 组(radio PROD 同型);本表头注的 26 号对齐口径(含「双击重听」的句子 停用或重录)在此落地。

新增(24 句 × 双性别,SHORE 组)

id 台词全文 类别 触发
sys_first_tap 点一下屏幕。 critical 开场第一句(0~3s 动手,§4.10;抢拍 busy)
sys_first_tap_short 点一下。 hint intro 等待点 _short 档
sys_turn_teach 听到这个声音,就是轮到你了。 content 「轮到你」状态声首现教学(挂 amo_a 链尾,全局一次)
sys_praise 对。 feedback 首抉择结果链头肯定句(原则 11)
sys_hint_continue_full 单击,继续。 hint continue 等待点 full 档 + 上滑状态链动作尾巴
sys_hint_continue_short 单击。 hint continue/settle 等待点 _short 档
sys_hint_choice_short 左右滑,选。 hint choice 等待点 _short 档
sys_hint_again_full 单击,重新开始。 hint settle 等待点 full 档 / 结算滑动解释句
sys_hint_menu_short 左右滑,点一下。 hint menu 等待点 _short 档
sys_only_choice 现在,只要左右滑。 hint 迷茫 L2 抉择点缩小选择
sys_demo_continue 听我做一次。 hint 迷茫 L3 演示前缀(intro/continue 替玩家走一步)
sys_demo_choice 左右滑,都可以。现在你来。 hint 迷茫 L3 抉择点演示(不替玩家选)
sys_say_again 再说一遍: hint 前缀 主动重听(engine/hints.js 播出,全项目一句)
sys_unlock_up 想知道自己在哪,就向上滑。 content 手势阶梯阶段 1 教学句(挂首抉择后链尾;engine/novice.js)
sys_unlock_down 向下滑,可以打开菜单。 content 手势阶梯阶段 2 教学句(挂首局结局链尾)
sys_unlock_dt 没听清,就双击,再听一遍。 content 手势阶梯阶段 3 教学句
menu_help 左右滑换项,点一下确认。 content 菜单说明(menu 等待点 full 档 + 菜单内上滑重听)
status_choice 正在抉择。左右滑。 hint 抉择等待点上滑「我在哪」
sys_mem_back 听完,自动回到现在。 hint MEMORY 上滑状态链动作尾巴(§4「听完就回到现在」拆句兑现)
inv_nosel 现在不用选。单击继续。 feedback 非抉择点滑动首次解释(原则 7)
inv_mem 现在不用选。听完就好。 feedback 插叙中滑动首次解释(插叙无选择)
inv_generic 这个操作用不上。单击继续。 feedback 其余无效格子/长按首次解释
inv_up_locked 上滑还没解锁。先单击继续。 feedback up 未解锁首次解释(管道触发)
inv_down_locked 菜单,玩完一局解锁。单击继续。 feedback down 未解锁首次解释(管道触发)

(含操作词的键盘变体 18 + 1 句照 KEY_LINES["storyline"] 措辞,见清单第四节。)

修改(1 句重录,id 不变)

id 旧 → 新 原因
sys_menu 「菜单。单击切换选项,双击确认。」→「菜单。左右滑换项,点一下确认。」 菜单改 00 号 §5.4 左右滑换项+单击确认(旧「双击确认」= 26 §7 反模式 5;key 变体重录)

删除(8 句停用,游戏零引用;key 变体随主句下线)

gd_brief(开场操作念白,§4.10 零规则念白)、gd_continue / gd_again(旧看门狗 两档,三档提示取代)、gd_invalid(旧无效解释,inv_* 取代)、gd_prog1 / gd_prog2 (旧无进展轨,迷茫检测取代)、sys_help(帮助溢出废止,含「双击重新听」旧口径; 手势阶梯取代)、b_rule(开场规矩念白,§4.10 砍掉)。

R2 后总账

148 − 8(删除)+ 24(新增,SHORE 组)= 164 句(双性别 137 = KEEPER 42 + SHORE 95;NPC 平铺 27 不变)。键盘变体:新增 19 对 + 修改 1 对(sys_menu)+ 既有保留 4 对(sys_menu / sys_skip / sys_continue_ask / p1)= 24 对。

多音字 / 发音风险自查注记

风险词 处理
重听 全表写「重新听」(sys_help / sys_help_k),无「重听」字样;「比灯重」zhòng 为唯一「重」,正确读法保留
落(luò/là/lào) 「唱针落下 / 浪头落 / 那扇门留到今天」均为 luò 常用读法,保留,试听确认
数(shǔ/shù) 「数三个浪头」(c8_new)为 shǔ 动词正确读法,保留,试听确认
缝(féng/fèng) 名词「裂缝 / 礁缝 / 钻新缝」恒 fèng;全表无动词「缝」用法
卷(juǎn/juàn) 「尾盖里卷着一页纸」(c2_key)为 juǎn 正确读法,保留
转(zhuǎn/zhuàn) 「灯转得稳 / 自己转一夜 / 转灯整夜未停」恒 zhuàn 旋转义,正确;全表无 zhuǎn 用法(「转告/转述」未使用)
塞(sāi/sè) 「塞回灯底」(p6)为 sāi 口语正确读法,保留,试听确认
钻(zuān/zuàn) 「钻新缝」(p8_reef)为 zuān 动词正确读法,保留
发(fā/fà) 「发条」fà、「天边发灰」fā,均为固定词正确读法
长(cháng/zhǎng) 「两长一短」(b_rain)为 cháng 正确读法;全表无 zhǎng 用法
教(jiāo/jiào) 「谁教你的」(c2_songo)为 jiāo 口语正确读法,保留
壳 / 巷 / 挣 / 血 / 露 / 降(jiàng 外义)/ 率 / 传(zhuàn 义)/ 曾 / 宿 / 泊 全表未使用
了(le/liǎo)、还(hái/huán)、得(de/děi)、着(zhe) 常规句式常见读法,逐句人工试听项(「我听见了」「风声回来了」未用还 huan 义;「撑不住」「稳但绕远」为常用读法)
数字 句内数字全部写死(四十年前/十二年前/第七级/十级/两艘/三个/两百米/一刻钟/半个时辰/七个人/三遍/半里/三刻),幕次/信任/真相用分档整句(prog_m1..3、tr_、tru_)

台词侧自查

  • 单句 ≤40 字:全表最长 = p7(35 字),次长 p9a/p9b(各 32 字)、d9_tell_a(31 字)、p3(30 字)✓;NPC 句最长 amo_c(25 字)、rev_c2(23 字),平均 ≤20 字(P4 靠短句+逗号停顿,不用 instruct 语速词)✓。
  • NPC ≤5 人(3 人)、speaker+instruct 恒定、区分度风险逐个标注(阿澈/父 亲两处「中」均有滤波+语境缓解方案)✓。
  • 称呼合规:阿澈对玩家只用「塔 / 守塔人 / 你」,性别化称呼零出现;父亲插叙只对塔台/家人说话 ✓。
  • 每个结局(e1..e4)专属主句+钩子各 2 句齐备;尾声按 p7×trust(阿澈三态)/p7×rev2(灯三态)/p9×truth(日志两句+truth=0 不播)/rev2(父亲签字)选播,双线齐备 ✓。
  • 归因真话律:负向收尾句(c1_aske / c3_dark / c9_found / d9_tell_b / ep_lamp_dark / ep_amo_dawn / e4_b)全部指向玩家实际选择或真实处境,无「运气不好」类假归因、无惩罚性措辞 ✓。
  • 时空签名:插叙锚入/锚出六句(rev_g1/g4、rev_f1/f5、rev_c1/c5)措辞固定成对(「唱针(又)落下……」/「风声回来了……」),教学句 rev_teach 的四要素(唱针落下/风声退后/风声回来/就是现在)逐句兑现 ✓。
  • 向导 gd_* 6 句(gd_brief/gd_continue/gd_again 各带 _k 变体,gd_invalid/gd_prog1/gd_prog2 无变体)符合 14 号 §6 台词规范(一句一义、无重复句式、单句 ≤18 字)✓。
  • 信任档位句与数值一一对应(tr_deep≥3 / tr_half=1-2 / tr_thin=0);真相度四句逐值为真(tru_zero=0 / tru_one=1 / tru_two=2 / tru_full=3),账目真实 ✓。