docs(new8): 批次 4 策划落地(21-keeper/22-bridge)——8 款设计文档全部齐备
- keeper:时空双线(风暴/老唱片签名+锚句)、回忆插叙固定时序、trust×truth 双标量、148 句 - bridge:四象限系统状态音(2.0s±50ms 逐毫秒可断言)、告警仲裁 R1-R8+双危机 7 场景穷举、危机事件卡、忠诚账本、154 句 - 13 号文档 §23 六款断言指针;README new8 索引补齐;章程进度账 8 款设计 ☑(批次 2 资产/开发 ▶ 进行中)
This commit is contained in:
@@ -759,6 +759,17 @@
|
||||
|
||||
R1 起每轮的增量断言(修复回归)在各自设计文档的轮次小节追加,不在本文件重复。
|
||||
|
||||
## 23. new8 批次 2-4 六款新游戏断言登记(2026-09)
|
||||
|
||||
与 §20(radio/dungeon)同规:断言清单与实现核对**住各自设计文档**,随轮次原地维护;本文件只留指针。
|
||||
|
||||
- abyss《深海回音》:[17-abyss.md](17-abyss.md) §断言(剧本 A-F 六路径/氧气门三形态/sonarGate/死窗/双轨看门狗/中断复述)
|
||||
- detective《雨夜专案》:[18-detective.md](18-detective.md) §断言(seed 矛盾复现+矩阵不变式/指证三路径/评级账本/板导航/双轨/死窗)
|
||||
- cipher《暗码》:[19-cipher.md](19-cipher.md) §断言(摩尔斯固定字符逐元素/四结局矩阵/三层兜底/暴露度档位/morseGate)
|
||||
- teahouse《深夜茶馆》:[20-teahouse.md](20-teahouse.md) §断言(泡茶三步时机窗/经济逐晚对账/弧线三方向/时机窗内 voice=0 分层)
|
||||
- keeper《守塔人》:[21-keeper.md](21-keeper.md) §断言(时空签名教学-兑现/插叙触发回返/trust×truth 档位/4 结局)
|
||||
- bridge《星环舰长》:[22-bridge.md](22-bridge.md) §断言(巡检节奏逐毫秒/危机×系统态矩阵/仲裁 7 场景/忠诚差分/评级验算/死窗)
|
||||
|
||||
## 21. 新游戏登记:《深海回音》(abyss)(new8 批次 2)
|
||||
|
||||
叙事款(radio 同骨架),断言清单与实现核对**住设计文档**(§20 先例):
|
||||
|
||||
@@ -0,0 +1,250 @@
|
||||
# 21b · 《守塔人》(keeper) 语音台词表(voice ids,录音依据)
|
||||
|
||||
> **给音频总监的录制说明**
|
||||
> - **双性别组**(守塔人 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 自动走右)。
|
||||
|
||||
## 多音字 / 发音风险自查注记
|
||||
|
||||
| 风险词 | 处理 |
|
||||
|---|---|
|
||||
| 重听 | 全表写「重新听」(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),账目真实 ✓。
|
||||
@@ -0,0 +1,539 @@
|
||||
# 21 · 《守塔人》(keeper) — 孤岛灯塔叙事 RPG 设计文档
|
||||
|
||||
> **给开发的实现要点摘要**
|
||||
> 1. 叙事模式(声命线范式,radio/abyss/cipher 同骨架):节点链 onComplete 串行 + seqToken 打断作废 + pendingChoice 缓存;复制 `web/radio/` 结构起步,状态机 6 宏状态(INTRO/WATCH/MEMORY/CALM/ENDING + MENU 覆盖层)。
|
||||
> 2. 手势零豁免:全部走全局默认映射(单击=继续/跳句、双击=重听、左右滑=抉择、上滑=状态、下滑=模态菜单 §5.2 约定、长按=引擎快进)。
|
||||
> 3. 台词依据 [21-keeper-voice-ids.md](21-keeper-voice-ids.md)(148 句:双性别 121 + 平铺 NPC 27);NPC 电台/老唱片滤波在**资产侧** ffmpeg 带通(radio 先例),引擎零改动。
|
||||
> 4. **本作核心差异层=时空双线**(§6):现在(风暴+电台静电)/回忆(老唱片底噪+唱片滤波)全靠音色+底噪签名区分;插叙=节点链 auto(≤6 句/≤90s),进入/回返有固定过渡音时序;**不新增 guide earcon**(统一 8 音词表纪律),时空签名住内容层(sfx+底噪+BGM+锚句)。
|
||||
> 5. 信任/真相双轻量标量(radio rep 同款纪律,档位措辞逐值为真);软失败=「灯灭过一刻钟/他自己冲滩」叙事差分,零死亡零倒计时(P4);结算链 800ms 手势死窗(abyss/地下城 H1 同款)。
|
||||
> 6. 章程任务 N4(research/new8/00-program.md §2):单局 15-25 分钟、9 抉择点(实选 8-9)、4 结局、分支局部化。
|
||||
> 7. 断言清单住本文档 §9(abyss §21 先例;13 号文档 §23 指针待批次测试轮同步登记)。
|
||||
|
||||
## 1. 概述
|
||||
|
||||
- **一句话**:风暴夜,孤岛灯塔的电台里,一声比一声近的求救,牵出你家三代守塔人的秘密——守灯,还是救人;说出真相,还是守住秘密。
|
||||
- **题材(声音即世界)**:黑暗风暴里视觉归零,**电台人声=另一条命、风暴与雾角=你的处境、老唱片底噪=过去**——「用耳朵守一夜」与纯音频载体天然同构。两个时空只靠音色与底噪区分,声音本身就是叙事本体。
|
||||
- **单局**:一个完整风暴夜(一条抉择路径)21-24 分钟;风暴从起到歇=天然三幕,分歧局部化在每幕内部;9 个抉择点(实选 8-9 个),4 结局。
|
||||
- **核心循环**:值守(塔内叙事链)→ 电台(阿澈对白+抉择点)→ 抉择结果 →(关键抉择触发**回忆插叙**:唱针落下→父辈/祖辈片段→风声回来)→ 回到现在继续值守 → 幕间喘息。跨幕积累「信任」(阿澈信你有几分)与「真相度」(三代秘密翻开几层),风歇前 p9 决定秘密的归宿。
|
||||
- **与 radio/abyss 的差异点**(骨架同、差异层不同):radio 靠电话音质立「声音即存在」,abyss 靠声呐双通道立「用耳朵找人」;keeper 靠**时空音频签名**立「回忆会开口说话」——插叙不是过场动画,是给现在抉择供货的信息与重量(发条知识=插叙2 兑现 p7 生死细节;祖父忏悔=插叙3 给 p9 完整真相可说)。
|
||||
- **风险预防(本作特有,策划期显式设计)**:① 时空误认=剧情混乱——签名规格显式教学一次(rev_teach)+上滑时位句+中断复述带时空位(§6.4/§6.5);② 家族人物多音色——三代人+求救者共 3 个 NPC 音色 ≤5,区分度逐人标注(§5.3/voice-ids 头表)。
|
||||
|
||||
## 2. 状态机
|
||||
|
||||
### 2.1 状态列表
|
||||
|
||||
| 状态 | 内容 | BGM | guide.state |
|
||||
|---|---|---|---|
|
||||
| `INTRO` | 开场链:塔名口播 + 一句规矩 + 今晚目标 | `bgm/storm` | explore |
|
||||
| `WATCH` | 值守叙事:现在线对白链 + 抉择点 + 结果 | `bgm/storm` | explore;抉择点=choice |
|
||||
| `MEMORY` | 回忆插叙:auto 链 ≤6 句,首尾锚句,链末自动回 WATCH | `bgm/memory` | explore(不新增签名) |
|
||||
| `CALM` | 幕间:风暴进度通报(+跨档信任播报),自动链 ≤12s | `bgm/storm`(不切) | settle |
|
||||
| `ENDING` | 结局链 + 尾声回响(epilogue),结算态 | `bgm/dawn` | settle |
|
||||
| `MENU` | 模态覆盖层(任意叙事态下滑呼出,暂停一切链) | `bgm/storm`(低响度淡入) | menu |
|
||||
|
||||
- CALM 自动链 ≤12s:foghorn → lull_N(风暴进度整句)→(跨档才播)信任档位句 → 自动进下一幕;不切 BGM(风暴进程靠 amb_storm 游戏层 gain 分幕:幕一 0.5 / 幕二 1.0 / 幕三 0.7)。
|
||||
- 结局链/c3_dark/插叙链入口处盖 `_settleGraceUntil = now+800ms` 手势死窗(abyss §2.2 同款),窗内手势一律吞掉,关键叙事完整播出。
|
||||
- MENU 打开时 `guide.disarm()` + 取消一切看门狗/自动链;关闭后重播当前节点(局面复述;MEMORY 中关闭=重播当前回忆节点,底噪仍 vinyl)。
|
||||
|
||||
### 2.2 转移图(文本)
|
||||
|
||||
```
|
||||
┌───────────── 结算单击=新风暴夜 ─────────────┐
|
||||
▼ │
|
||||
INTRO ──链完单击──> WATCH(C1) ──幕一链完──> CALM(1) ──────────┤→ WATCH(C2)
|
||||
│ …CALM(2) 同型)…
|
||||
│ p2左/p3左|p4左/p6左 触发:
|
||||
▼
|
||||
MEMORY ──插叙链 auto──> 回 WATCH(原 now 线续走)
|
||||
│
|
||||
WATCH(C3) ──高潮链完──> CALM-lite(g9) ──> ◆p9
|
||||
│
|
||||
d9 结果链 ──> ENDING(e1..e4 + ep 回响链) ──┘
|
||||
|
||||
任意叙事态(INTRO/WATCH/MEMORY/CALM/ENDING):下滑 → MENU(模态)
|
||||
MENU:单击=循环切换选项 → 双击=确认执行 → 上滑=帮助 → 下滑/「回到值守」项=关闭回原状态(重播当前节点)
|
||||
```
|
||||
|
||||
- 全部叙事态为节点链驱动(radio playNode 模式);CALM 与插叙链 `auto:true`,WATCH 叙事节点链末等待单击(radio 实现核对 #1 同口径)。
|
||||
- MEMORY 是显式宏状态(BGM/底噪/存档 timeline 都按它切换),但没有独立等待点:链 auto 完成即回 WATCH;插叙期间开菜单=暂停,关闭=重播当前回忆节点。
|
||||
|
||||
### 2.3 每状态手势映射(6+2 全覆盖,零豁免)
|
||||
|
||||
| 手势 | INTRO | WATCH | MEMORY | CALM | ENDING | MENU |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 上滑 | 帮助+状态,随后重播当前段 | 帮助+状态(时位句+信任/真相档),随后重播当前节点 | 帮助+状态(**prog_mem_g/f 时位句先行**),随后重播当前回忆节点 | 帮助+状态,自动链继续 | 帮助+状态(结局名+信任档) | 帮助(sys_help) |
|
||||
| 下滑 | 模态菜单 | 模态菜单 | 模态菜单(停插叙链) | 模态菜单 | 模态菜单 | 关闭菜单 |
|
||||
| 左滑 | 无效 → error 震+gd_invalid | 无效 → gd_invalid(喂无进展轨) | 无效 → gd_invalid | 无效 → gd_invalid | 无效 → gd_invalid | 无效 → error 震 |
|
||||
| 右滑 | 无效 → gd_invalid | 无效 → gd_invalid;ASK 态=新风暴夜 | 无效 → gd_invalid | 无效 → gd_invalid | 无效 → gd_invalid | 无效 → error 震 |
|
||||
| 单击 | 播放中=跳过本句;链末=进 C1 | 播放中=跳过本句(p* 与锚句首播不可跳);链末=继续 | 播放中=跳过本句(**锚入/锚出句首播不可跳**);无链末等待(auto 回返) | 跳过本句(自动链) | **再来一夜**(新风暴夜) | 循环切换选项 |
|
||||
| 双击 | 重听当前段 | 重听当前节点台词(含抉择提示) | **重听当前回忆节点** | 重听幕间链 | 重听结局链 | **确认执行**(菜单约定覆盖重听) |
|
||||
| 长按 | 引擎接管:旁白临时 1.7×(12 号 §2.2,叙事类不豁免) | 同左 | 同左 | 同左 | 同左 | 同左(快进菜单语音) |
|
||||
| 长按松开 | 引擎接管:恢复 settings.speed | 同左 | 同左 | 同左 | 同左 | 同左 |
|
||||
|
||||
- 豁免登记:**无**。六个基础手势全部符合全局宪法默认语义;菜单走 §5.2 R3 模态约定(单击循环+双击确认)。
|
||||
- ASK(存档询问态,radio 同款):单击=继续上次 / 右滑=新风暴夜(两者 runs 均 +1,cipher §8 统一口径);上滑/下滑/左滑/双击=无效(error 震+gd_invalid)。
|
||||
- 抉择 prompt(voice/p1..p9 及 p8_boat/p8_reef/p9a/p9b 变体)播放中单击不可跳(PROMPT_RE 门)、左右滑缓存 `pendingChoice` 播完即生效(radio W2 契约照抄)。
|
||||
- 继承 radio G5 跳过公平契约:**首播必完整(p* 首播不可跳 / 插叙首尾锚句与链末关键句保护 / ASK 恢复首句锁)、复播可即掐(锁不随复播重新武装、插叙中段句可跳、复播滑动照常预缓存)**。
|
||||
- 无效手势零静默:所有「无效」格均有 error 震 + gd_invalid(onceKey 同局限次,F1.4 idle-only);longpress/longpressend/tapcancel 全状态合法(radio 实现修复 #2 教训)。
|
||||
- 键盘通道:三通道并行,游戏代码零改动;操作提示句按 `gesture.inputMode()` 选 `_k` 变体资产(§7.3、voice-ids 集中分组)。
|
||||
|
||||
## 3. 抉择树
|
||||
|
||||
### 3.1 全局骨架(三幕共享主干,分歧局部化)
|
||||
|
||||
```
|
||||
INTRO: gd_brief → b_open → b_rain → b_rule → b_goal ──链完单击──> C1
|
||||
【C1 幕一·风暴起】教学幕 · 2 抉择(p1/p2)+插叙1 ──> CALM(1) ──> C2
|
||||
【C2 幕二·风暴顶】2 抉择(p3/p4)+插叙2 +危机拍1 + p5 ──> CALM(2) ──> C3
|
||||
【C3 幕三·风歇前】p6(+插叙3) + p7 核心 + 危机拍2 + p8 双形态 ──> 签收 ◆p9 ──> ENDING
|
||||
```
|
||||
|
||||
分支纪律:**每幕内部分支、幕末收敛**到 CALM/签收句;跨幕只传标量(trust、rev1/rev2/rev3、p7/p9 派生枚举),不生成组合节点。最坏路径与最好路径节点数同型。
|
||||
|
||||
### 3.2 分幕结构(◆=抉择点,〔〕=条件差分,【插叙】=MEMORY auto 链)
|
||||
|
||||
```
|
||||
【C1 幕一·风暴起】
|
||||
c1_tune → amo_a → amo_b → ◆p1
|
||||
├左 接住人: c1_hold → c1_holdo → c1_holde(trust+1)─┐
|
||||
└右 要船位: c1_ask → c1_asko → c1_aske(即时纠偏)───┤
|
||||
▼
|
||||
amo_c(回澜号伏笔)→ ◆p2
|
||||
├左 翻暗格: c1_open → rev_teach(全局一次) →【插叙1】→ c1_diary(truth+1)─┐
|
||||
└右 守灯: c1_focus → c1_focuse ──────────────────────────────────────────┤
|
||||
▼
|
||||
CALM(1): foghorn → lull_1 →〔跨档才播 tr_*〕→ C2
|
||||
|
||||
【插叙1·祖父的年代】memory_in → rev_g1(锚入) → rev_g2 → rev_g3 → rev_g4(锚出) → memory_out
|
||||
|
||||
【C2 幕二·风暴顶】
|
||||
c2_back → amo_d → ◆p3
|
||||
├左 口诀: c2_song → c2_songo →【插叙2】→ c2_key(truth+1)─┐
|
||||
└右 岸台: c2_shore → c2_shoreo ─────────────────────────────┤
|
||||
▼
|
||||
amo_e → ◆p4
|
||||
├左 真话: c4_true →〔插叙2 未触发 ?【插叙2兜底】+c2_key : 直进〕→ c4_trueo(trust+1)─┐
|
||||
└右 带过: c4_pass → c4_passo ───────────────────────────────────────────────────────────┤
|
||||
▼
|
||||
【危机拍1】hull_crack 前置2s 渐强 + danger 签名/震 → c2_crack → amo_f → ◆p5
|
||||
├左 堵漏: c5_patch → c5_patcho(trust+1)─┐
|
||||
└右 救生衣: c5_suit → c5_suito ────────────┤
|
||||
▼
|
||||
CALM(2): foghorn → lull_2 →〔跨档才播 tr_*〕→ C3
|
||||
|
||||
【插叙2·父亲的最后一晚】memory_in → rev_f1(锚入) → rev_f2 → rev_f3 → rev_f4 → rev_f5(锚出) → memory_out
|
||||
|
||||
【C3 幕三·风歇前】
|
||||
c3_eye →〔rev2 ? c3_page → ◆p6 : m6_seal 封锁句(播后自动走右,不摆假选项)〕
|
||||
├左 读完:【插叙3】→ c6_reade(truth+1)─┐
|
||||
└右 合上: c6_shut ────────────────────────┤
|
||||
▼
|
||||
◆p7(核心:守灯还是救人;提示句全表最长)
|
||||
├左 离塔救人:〔rev2 ? c7_go(满发条,配 lamp_mech): c7_go2(半卷)〕
|
||||
│ →【危机拍2】wave_wall 前置2s+danger → c3_wall → ◆p8_boat
|
||||
│ ├左 循渔歌: c8_song → c8_songo ─┐
|
||||
│ └右 推坐标: c8_math → c8_matho ─┤
|
||||
│ ▼
|
||||
│ c9_return →〔rev2 ? — : c3_dark(灯灭过一刻钟,800ms 死窗)〕─┐
|
||||
└右 守灯引渡: c7_hold →【危机拍2】c3_wall → ◆p8_reef │
|
||||
├左 老航道: c8_old → c8_oldo ─┐ │
|
||||
└右 新礁缝: c8_new → c8_newo ─┤ │
|
||||
▼ ▼
|
||||
〔trust≥3 ? c9_land : c9_found〕──────────┴→ 签收(两路通用,电台或塔内对谈)
|
||||
|
||||
【签收】g9_in → g9_knot → ◆p9〔truth=3 ? p9a : p9b〕
|
||||
├左 说出:〔truth=3 ? d9_tell_a : d9_tell_b〕→ amo_g → d9_telle ─┐
|
||||
└右 守住: d9_keep → amo_h → d9_keepe ────────────────────────────┤
|
||||
▼
|
||||
ENDING: e*_a → e*_b(trust 档 × p9 四选一)→ ep_lead → ep_*(条件选播)→ ep_shore
|
||||
|
||||
【插叙3·祖父的忏悔】memory_in → rev_c1(锚入) → rev_c2 → rev_c3 → rev_c4 → rev_c5(锚出) → memory_out
|
||||
```
|
||||
|
||||
### 3.3 分支局部化说明
|
||||
|
||||
- 跨幕状态全部是标量:`trust`(int 0-4)、`rev1/rev2/rev3`(bool,插叙完成数=truth)、`p7`('boat'|'lamp')、`p9`(bool)。没有任何「幕 i 分支 × 幕 j 分支」组合节点。
|
||||
- 条件差分全部是**节点内选播**(radio w1_say/w1_say2、abyss p7 双形态先例):插叙2 兜底(p4 左)、c7_go/c7_go2(rev2)、c9_land/c9_found(trust)、c9_return 后 c3_dark 插播(rev2=false)、p9a/p9b 与 d9_tell_a/b(truth)、ep_* 选播。树形不变。
|
||||
- 树规模:148 句台词、约 75 个节点;任一路径到达全部 9 个抉择点,p6 在 rev2=false 时被 m6_seal 自动走右(实选 8-9 个)。
|
||||
|
||||
### 3.4 四结局达成条件
|
||||
|
||||
| 结局 | 条件 | 主题 | 开环钩子 |
|
||||
|---|---|---|---|
|
||||
| e1 灯与归人 | trust ≥ 3 且 p9=左 | 人接住了,真相也说全了 | 「回澜号的账,翻开了第一页」 |
|
||||
| e2 守夜人 | trust ≥ 3 且 p9=右 | 人救了,秘密再压一代 | 「有些东西,再压一代人」 |
|
||||
| e3 半明半暗 | trust < 3 且 p9=左 | 你说了,他半信半疑 | 「碎片也是真话」 |
|
||||
| e4 各自的塔 | trust < 3 且 p9=右 | 隔海两塔,各自沉默 | 「谁也没再提那晚」 |
|
||||
|
||||
- 尾声回响(P2 回响感):epilogue 逐项点名——阿澈(接回塔/自渡/天亮被找到,按 p7×trust)、灯的记录簿(满发条自转/灭过一刻钟/整夜未眨眼,按 p7×rev2)、祖父日志(见光/压回黑暗,按 p9×truth≥1)、父亲的班次(rev2=true 替他签字);岸台晨报恒播收尾(b_goal 货轮承诺闭环)。玩家每一层翻开的与守住的都被点名。
|
||||
|
||||
## 4. 数值设计
|
||||
|
||||
### 4.1 变量
|
||||
|
||||
| 变量 | 类型 | 初值 | 说明 |
|
||||
|---|---|---|---|
|
||||
| `trust`(信任) | int | 0 | 阿澈对你的信任,幕一/二积累,幕三不动 |
|
||||
| `rev1/rev2/rev3` | bool | false | 插叙1/2/3 完成位;truth = 三者之和 |
|
||||
| `p7` | str | null | 'boat'(离塔救人)/'lamp'(守灯引渡),核心抉择派生 |
|
||||
| `endings{}` / `runs` | map/int | — | 结局收集与重玩计数(存档展示用) |
|
||||
|
||||
### 4.2 抉择计分表(左=走心·翻开/说出 / 右=克制·程序/守秘)
|
||||
|
||||
| 抉择 | 左(走心) | 右(克制) | 备注 |
|
||||
|---|---|---|---|
|
||||
| p1 接住人/要船位 | trust+1 | 0 | 左路阿澈声音稳住(首个正反馈);右路 c1_aske 即时纠偏不扣分 |
|
||||
| p2 翻暗格/守灯 | truth+1(rev1=true) | 0 | 左路=插叙1(日志残篇到手,缺最后一页) |
|
||||
| p3 口诀/岸台 | trust+1,truth+1(rev2=true) | 0 | 左路=插叙2 主触发(发条知识+缺页线索 c2_key) |
|
||||
| p4 真话/带过 | trust+1;rev2=false 时兜底插叙2(truth+1) | 0 | 插叙2 的第二把钥匙(p3 右的补偿路) |
|
||||
| p5 堵漏/救生衣 | trust+1 | 0 | 双活路(两路都活着,差分在反应句与尾声心境) |
|
||||
| p6 读完/合上 | truth+1(rev3=true) | 0 | 左路=插叙3(祖父忏悔全量);**rev2=false 时左路封锁**(m6_seal 播出后自动走右,abyss g9_dry 先例——不摆假选项) |
|
||||
| p7 离塔救人/守灯引渡 | 0(p7='boat') | 0(p7='lamp') | 核心宿命抉择:不动 trust;后果走 rev2(发条)与 trust(引渡)差分 |
|
||||
| p8_boat 循渔歌/推坐标 | 0 | 0 | 双活路差分(海上找人方式) |
|
||||
| p8_reef 老航道/新礁缝 | 0 | 0 | 双活路差分(引渡路线) |
|
||||
| p9 说出/守住 | 真相出口 | 秘密出口 | 不动 trust;提示句按 truth 选 p9a/p9b |
|
||||
|
||||
### 4.3 信任档位表(账目真实:每档句义对每个取值皆为真)
|
||||
|
||||
| 档 | trust 区间 | 整句 | 真实性核验 |
|
||||
|---|---|---|---|
|
||||
| tr_deep | 3-4 | 「他把命,交给了你的声音。」 | ≥3 时 p7 右他完全照做(c9_land)✓;p7 左他海上应答配合 ✓ |
|
||||
| tr_half | 1-2 | 「他信一半,疑一半。」 | 1-2 时 p7 右他半路改主意(c9_found)✓ |
|
||||
| tr_thin | 0 | 「今晚,他只信自己的手。」 | 0 = 四个信任点全失,p7 右必自渡 ✓(附 warning 震,radio G2 同款) |
|
||||
|
||||
- 阈值 3 = 「多数走心 + 容忍 1-2 次克制」落在高信任档——把「他是否把命交给你」压在玩家自己的累计上,而非单点(radio rep ≥5 同款纪律)。
|
||||
- 跨档被动播报(挂 CALM 链尾,跨档才播);上滑 status 随时可查。
|
||||
|
||||
**真相度逐值表(truth=插叙完成数,每值一句、逐值为真)**
|
||||
|
||||
| truth | 整句 | 核验 |
|
||||
|---|---|---|
|
||||
| 0 | 「旧账压在灯底,你一页没翻。」 | rev1/2/3 全 false ✓(暗格未开) |
|
||||
| 1 | 「灯下的旧账,你翻开了一角。」 | 仅插叙1(日志残篇)✓ |
|
||||
| 2 | 「祖父和父亲的事,你都翻到了。」 | 插叙1+2 ✓(缺页在手未读) |
|
||||
| 3 | 「三代人的账,今夜见底了。」 | 插叙1+2+3 ✓(忏悔全文,p9a 解锁) |
|
||||
|
||||
### 4.4 结局与差分验算(设计期穷举,playtest 剧本 A-F 引用)
|
||||
|
||||
- **trust ∈ {0..4} 全档可达**(四个独立 ±1 抉择 p1/p3/p4/p5);e1/e2 ⟺ trust≥3(如 p1左 p3左 p4左 p5右=3),e3/e4 ⟺ trust≤2(全右=0)。
|
||||
- **truth ∈ {0..3} 全档可达**:rev1=p2左;rev2=p3左∨p4左;rev3=p6左∧rev2。0(p2右p3右p4右)、1(p2左+双右)、2(p2左+p3左)、3(再 p6左)。
|
||||
- **p6 封锁与 p9 变体联动**:rev2=false → m6_seal 自动右;truth=3 → p9a/d9_tell_a(全真相),truth<3 → p9b/d9_tell_b(碎片:只确认「那晚守塔的是我爷爷、灯灭过一下」——前者是家族常识、后者来自阿澈自己的话,**truth=0 也句句为真**,归因真话律)。
|
||||
- **灯三态**(p7×rev2):p7 左+rev2 → ep_lamp_full(满发条自转,rev_f4 知识兑现);p7 左+¬rev2 → c3_dark+ep_lamp_dark(半卷发条走到头,**复刻祖父之夜**,归因指向「没听完父亲那一晚」的实际选择);p7 右 → ep_lamp_hold(整夜未停)。
|
||||
- **阿澈三态**(p7×trust):p7 左 → 恒被接回(c9_return,人已上艇不失去);p7 右+trust≥3 → 自渡成功(c9_land);p7 右+trust<3 → 天亮被渔队找到(c9_found,活着,措辞克制——零死亡红线)。
|
||||
- **最坏路径完整性**:剧本 C(全右)仍走完全部 9 抉择点、3 结局分支可差分(ep_amo_dawn/ep_lamp_hold/ep_log 不播)——树深固定,无死路。
|
||||
- **纸面承诺安全性**:trust≥3 ⟹ p3/p4 至少一左 ⟹ rev2=true ⟹ 缺页在手(c2_key)——e1_a「那页纸攥在手里」/e2_b「缺页放回灯底」对 trust≥3 两结局**恒为真**;e3/e4(trust<3)文案零纸面引用,truth 任意取值皆不穿帮(归因真话律在结局文案侧的落点)。
|
||||
|
||||
### 4.5 家族秘密 gating 顺序(秘密揭示的三把钥匙与三道门)
|
||||
|
||||
| 层 | 秘密 | 钥匙(抉择) | 门(插叙) | 兑现(现在线收益) |
|
||||
|---|---|---|---|---|
|
||||
| 层1 | 灯下藏着东西 | p2 左(翻暗格) | 插叙1(祖父:「灯下压着的东西,比灯重」) | 日志残篇 + 缺页悬念(tru_one) |
|
||||
| 层2 | 父亲的最后一次值守 | p3 左(口诀)或 p4 左(真话,兜底) | 插叙2(父亲电台:「上满发条能自己转一夜」) | 手电缺页线索(c2_key)+ 发条知识(c7_go 差分) |
|
||||
| 层3 | 祖父的忏悔(回澜号真相) | p6 左(**前置=层2 已开**) | 插叙3(祖父:「我离灯三刻,回澜号,七个人」) | p9a 完整真相可说 + e1/e2 重量 |
|
||||
|
||||
- 顺序不可跳:层3 的门只认层2 的钥匙(m6_seal 封锁);层2 有两把钥匙(p3/p4)保证「错过 p3 仍可全真相」(补偿路,abyss hasLog 双入口同型)。
|
||||
- 阿澈的回环:amo_c(幕一伏笔「我爷爷……白角的灯灭过一下」)→ amo_g(p9 左揭晓「我爷爷,就在那七个人里」)——玩家的抉择把两条家族线缝上。
|
||||
|
||||
## 5. 音频三层映射
|
||||
|
||||
### 5.1 BGM(状态→曲目,Mureka instrumental,3 首 ≈ $0.09;台账 tools/mureka_log.md)
|
||||
|
||||
| 状态 | 曲目 | 切换 | Mureka prompt 草稿(英文,seamless loop) |
|
||||
|---|---|---|---|
|
||||
| INTRO/WATCH/CALM | `bgm/storm` | 开局淡入 800ms,全夜不切;语音 duck 引擎自理 | "Storm night lighthouse vigil, tense low piano motif over dark strings, restrained and lonely, distant thunder and wind, no vocals, seamless loop, 60-90 seconds" |
|
||||
| MEMORY | `bgm/memory` | **插叙进入** crossfade 800ms;回返淡回 storm 800ms | "Old phonograph memory waltz, music box and muted strings with vintage vinyl warmth, fragile nostalgia, slightly out-of-time, no vocals, seamless loop, 60-90 seconds" |
|
||||
| ENDING | `bgm/dawn` | d9 结果链播完后淡入 1500ms | "Calm grey dawn after a storm at sea, soft piano and warm strings, gulls far away, quiet relief, no vocals, seamless loop, 60-90 seconds" |
|
||||
| MENU | `bgm/storm`(低响度) | 呼出低响度淡入 500ms;关闭淡回 800ms | 同 storm(省 1 首,塔内场景同构;abyss menu 用 deck 先例) |
|
||||
|
||||
- `bgm=0` 时全部静默(引擎约定);幕的推进不靠切曲——靠 amb_storm 游戏层 gain 分幕(0.5/1.0/0.7)+ lull_N 进度整句(账目在语音不在音乐)。
|
||||
|
||||
### 5.2 SFX 清单(SA3=Stable Audio 3 / SYN=程序合成;one-shot 真峰值 ≤-3dBFS;amb 循环由游戏层 `buffer.loop` 实现,radio phone_ring 先例)
|
||||
|
||||
| id | 用途 | 来源 | prompt(英文)/ 合成参数 |
|
||||
|---|---|---|---|
|
||||
| `sfx/amb_storm` | 风暴底噪 loop(现在时签名①;分幕 gain 0.5/1.0/0.7) | SA3 | "Storm wind and heavy waves hitting a lighthouse rock, sustained gale, night, seamless loop" |
|
||||
| `sfx/amb_room` | 塔内底噪 loop(炉火+木构+雨打玻璃) | SA3 | "Inside a lighthouse room at night, oil stove crackle, wooden beams creak, rain on glass, seamless loop" |
|
||||
| `sfx/amb_vinyl` | **老唱片底噪 loop(回忆时签名②;插叙期间唯一底噪)** | SA3 | "Vintage 78 rpm phonograph record surface noise, warm crackle and hiss, no music, seamless loop" |
|
||||
| `sfx/memory_in` | **插叙进入过渡音:唱针落下+转速走稳** | SA3 | "Phonograph needle dropping onto a record, brief run-in groove then steady rotation, 1 second" |
|
||||
| `sfx/memory_out` | **插叙回返过渡音:唱针抬起+轻划** | SA3 | "Phonograph needle lifting off a record with a short scratch, 0.6 seconds" |
|
||||
| `sfx/radio_tune` | 调频找台(C1 首通/信号重连) | SA3 | "Turning an old shortwave radio dial through static, settling on a weak signal, 3 seconds" |
|
||||
| `sfx/static_burst` | 阿澈信号断续气口(信息音,idle-only) | SA3 | "Shortwave radio static burst with faint ghost of a distant voice, 2 seconds" |
|
||||
| `sfx/radio_beep` | 电台接通确认 | SYN | 双音上行 0.3s(abyss link_beep 同款) |
|
||||
| `sfx/amb_engine` | 阿澈侧渔船引擎 loop(通话期对侧 amb,voice 在播时 -6dB) | SA3 | "Small fishing boat engine running rough in a storm, water sloshing in bilge, seamless loop" |
|
||||
| `sfx/hull_crack` | 危机拍1:船板开裂(前置 2s 渐强) | SA3 | "Wooden boat hull cracking under stress, splintering and groaning, 3 seconds" |
|
||||
| `sfx/wave_wall` | 危机拍2:浪墙(前置 2s 渐强) | SA3 | "Massive wave wall rising and crashing, deep roar, 4 seconds" |
|
||||
| `sfx/lamp_mech` | 灯座机械上发条(c7_go;rev_f4 兑现音) | SA3 | "Clockwork lighthouse rotation mechanism being wound, heavy ratchet clicks, 3 seconds" |
|
||||
| `sfx/hatch_open` | 灯座暗格开启(c1_open) | SA3 | "Old hidden compartment sliding open, metal and wood scrape, 2 seconds" |
|
||||
| `sfx/flash_click` | 手电尾盖旋开两响(c3_page) | SYN | 两次短金属 click(120ms 间隔) |
|
||||
| `sfx/foghorn` | 雾角两长一短(b_rain 承诺音:开场/幕间×2/ep_shore) | SA3 | "Lighthouse foghorn, two long and one short blast, deep brass, distant storm behind, 4 seconds" |
|
||||
| `sfx/ui_confirm` / `ui_menu` | 菜单/确认(程序合成兜底) | SYN | 同全局先例 |
|
||||
|
||||
- 预警窗纪律:hull_crack/wave_wall 均**前置 2s 起渐强**(L2),danger 签名与 danger 震同窗(radio C5/abyss D2-D4 先例);全游戏仅此两处 danger。
|
||||
- 承诺兑现绑定:foghorn 在 b_rain 口播「两长一短」后,开场/CALM(1)/CALM(2)/ep_shore 四处必播(§6.5 清单 + §9 断言计数)。
|
||||
|
||||
### 5.3 Voice 划分(详见 21-keeper-voice-ids.md)
|
||||
|
||||
| 组 | 声部 | 落位 | 数量 |
|
||||
|---|---|---|---|
|
||||
| 守塔人(你)KEEPER | 双性别(female=Serena / male=Uncle_Fu + KEEPER instruct 常量) | `voice/female\|male/` | 42 句 |
|
||||
| 岸台/系统/向导 SHORE | 双性别(female=Vivian / male=Dylan + SHORE instruct 常量) | `voice/female\|male/` | 79 句 |
|
||||
| NPC 平铺 ×3 | 阿澈=Dylan(电台滤波)/ 父亲=Uncle_Fu(唱片滤波)/ 祖父=Eric(唱片滤波),**不做双性别** | `voice/` 根(平铺回退命中)+ 滤波转码 | 27 句 |
|
||||
|
||||
- NPC ≤5 约束满足(3 人);玩家自己的声音跟随全局 `settings.voice`;岸台值班员是向导人设(L4 角色化系统声,radio 导播/abyss 调度同型)。
|
||||
- 合计 148 句(≤160 预算 ✓,含 `_k` 键盘变体 8 对);音频文件 = 121×2 + 27 = 269 条(×2 格式 = 538 文件)。
|
||||
|
||||
## 6. 时空双线设计(本作核心差异层)
|
||||
|
||||
### 6.1 引擎能力边界(对照 web-engine-api.md)
|
||||
|
||||
| 能力 | 引擎现状 | 方案 |
|
||||
|---|---|---|
|
||||
| voice 运行时 EQ/滤波 | ❌ voice 链无滤波插入点 | **资产侧转码滤波**(radio §6.2 先例):ffmpeg `highpass+lowpass+压缩器` 逐 NPC 定档(§5.3/voice-ids) |
|
||||
| BGM crossfade | ✅ fadeMs 800ms 内置 | 插叙进入/回返直接 `play('bgm/...')` 切换 |
|
||||
| sfx 循环 | ❌ 即发即弃 | 游戏层 `buffer.loop=true` 持句柄(amb_storm/amb_room/amb_vinyl/amb_engine),插叙切换时淡入淡出(radio `_ringSrc` 先例) |
|
||||
| sfx vs voice 互让 | ❌ sfx 总线独立无 duck | **游戏层 idle 门**(§6.6 R1):memory_in/out、static_burst 只在 `!audio.isVoicePlaying()` 时放行,否则挂队列表句间补发 |
|
||||
| 语音 duck 垫乐 | ✅ 内置(duck 20%,300ms) | 直接依赖 |
|
||||
| 变速不变调 | ✅ SoundTouch | 直接依赖(长按 1.7× / 2.2× 视障档) |
|
||||
|
||||
### 6.2 时空签名规格(误认=剧情混乱,规格逐维度显式)
|
||||
|
||||
| 维度 | 现在(风暴夜) | 回忆(老唱片) |
|
||||
|---|---|---|
|
||||
| BGM | `bgm/storm`(低音钢琴+暗弦+远雷) | `bgm/memory`(八音盒+老唱片暖染圆舞) |
|
||||
| 底噪 | amb_storm(分幕 gain)+ amb_room | **amb_vinyl(唯一底噪:storm/room 双双淡出)** |
|
||||
| 过渡音 | 回返:memory_out + storm 渐起 | 进入:memory_in(唱针落下) |
|
||||
| 语音音质 | KEEPER/SHORE 不滤波(塔内近讲);阿澈=电台滤波 | 祖父/父亲=唱片滤波;**KEEPER 锚句不滤波(「现在的你」在回忆里旁白——干净人声 vs 唱片人声,强化「你在看回忆」)** |
|
||||
| 时位句 | prog_m1/m2/m3(上滑链首段) | prog_mem_g / prog_mem_f(上滑链首段 + 恢复链首段) |
|
||||
| 台词锚 | (now 句自然在场) | 锚入 rev_g1/rev_f1/rev_c1 + 锚出 rev_g4/rev_f5/rev_c5 |
|
||||
|
||||
- **earcon 纪律:时空切换零新增 guide earcon**——统一 8 音词表中 MEMORY/WATCH 同用 `explore` 签名;时空签名住**内容层**(sfx 过渡音+底噪+BGM+台词锚),语义靠语音(L2 铁律:earcon 只做粗标记,训练 8.5 轮结论不赌)。
|
||||
- 底噪互斥是硬约束:任意时刻 amb_vinyl 与 amb_storm/amb_room **零重叠**(§9 转写断言);插叙期间阿澈的 amb_engine 也停(叙事自洽:插叙都发生在塔内独处拍,电台此刻静默)。
|
||||
|
||||
### 6.3 插叙触发与回返时序(精确到步骤)
|
||||
|
||||
| 步 | 事件 | 时序 |
|
||||
|---|---|---|
|
||||
| 1 | now 结果句播完 → 静默一拍 | 600ms |
|
||||
| 2 | `memory_in`(1.0s,idle 门放行)+ BGM crossfade storm→memory 800ms + amb 切换(storm/room 淡出 400ms / vinyl 淡入 400ms) | 与步 2 同时起 |
|
||||
| 3 | 插叙链 auto:锚入(KEEPER,不可跳首播)→ NPC 2-3 句(中段可跳)→ 锚出(KEEPER,不可跳首播) | ≤6 句 ≤90s |
|
||||
| 4 | `memory_out`(0.6s)+ crossfade memory→storm 800ms + amb 回切 | 链末即起 |
|
||||
| 5 | 回返后 now 句接播(c1_diary / c2_key 或 c4_trueo / c6_reade) | memory_out 播完接 |
|
||||
|
||||
- 插叙链入口 800ms 手势死窗(§2.2);链末**不设等待**(auto 回返——回忆不是关卡,是信息颗粒);「停下来回味」由双击重听当前回忆节点承接(叙事类等待点合法回味 + 可重听,A2/P1)。
|
||||
- 插叙触发点全集(3 处):p2 左→插叙1;p3 左或 p4 左→插叙2(兜底);p6 左→插叙3(前置 rev2=true)。
|
||||
|
||||
### 6.4 「我在哪」复述机制(P3 打断回来说得清)
|
||||
|
||||
| 层 | 机制 |
|
||||
|---|---|
|
||||
| 被动 | 底噪+BGM 时空签名 2s 可辨(A1:有无唱片底噪/风声) |
|
||||
| 主动 | 上滑 status 链**首段=时位句**:now → prog_m1..3;memory → prog_mem_g(祖父年代)/ prog_mem_f(父亲最后一晚)——「现在是回忆」可随时重听确认 |
|
||||
| 台词锚 | 每段插叙首尾锚句 = 台词级时空位(「唱针落下。四十年前……」「风声回来了……」) |
|
||||
| 中断恢复 | 存档带 `timeline`('now'/'mem_g'/'mem_f');恢复链 = timeline=mem* 时**先播 prog_mem_*** 再重播当前回忆节点(§9 断言:恢复首句=时位句, ≤5s 回到可玩) |
|
||||
| 菜单复述 | MEMORY 中开菜单关闭后重播当前回忆节点,底噪仍 vinyl(timeline 不丢) |
|
||||
|
||||
### 6.5 教学承诺清单(dungeon「铁器=楼梯」教训:每句承诺必须真实存在且可感知)
|
||||
|
||||
| 教学句 | 承诺 | 兑现点(断言锁定) |
|
||||
|---|---|---|
|
||||
| rev_teach「听到唱针落下、风声退后,是回忆。风声回来,就是现在」(全局一次,首插叙前) | 时空签名四要素 | 每次插叙必有 memory_in+vinyl+锚入 / memory_out+storm+锚出;全剧本零漏(§9) |
|
||||
| b_rain「雾角两长一短——塔在,我也在」 | 雾角=塔的报平安音 | foghorn 播点=开场/CALM(1)/CALM(2)/ep_shore 恰四处 |
|
||||
| b_rule「风暴夜,灯不能灭」 | 灯=规矩本体 | 灯三态兑现:ep_lamp_full/dark/hold + c3_dark 差分归因(§4.4) |
|
||||
| b_goal「今夜两艘货轮过境。守住灯,也守住频道」 | 货轮/频道双目标 | c3_dark「过境的货轮,平安」+ ep_shore 晨报「航道平安」闭环 |
|
||||
| rev_f4「塔上的机械上满发条,能自己转一夜」 | 发条知识 | p7 左 rev2 差分:c7_go/c7_go2、ep_lamp_full/ep_lamp_dark(剧本 A/E 对照) |
|
||||
| prog_m1..3 幕句=风暴三进程 | 「风暴起/到顶/在退」 | CALM 切幕+amb_storm gain 分幕(0.5/1.0/0.7)一致 |
|
||||
|
||||
### 6.6 通道仲裁规则(并发声流 ≤2)
|
||||
|
||||
- **R1 过渡音不叠语音**:memory_in/out、static_burst 与任何 voice 播放区间零重叠——idle 门只在 voice 空闲放行,在播则排队到句间空隙(abyss sonarGate 同型)。
|
||||
- **R2 插叙主导段**:前景=插叙链人声+vinyl 底噪,BGM=memory 曲;电台(阿澈)此刻静默,叙事自洽。
|
||||
- **R3 通话期底噪退位**:阿澈通话期间 amb_engine 常驻低响度、voice 在播时游戏层降 -6dB(abyss R3 先例);amb_storm 同步 -4dB——「海况让给人声」。
|
||||
- **R4 危机拍优先**:hull_crack/wave_wall 即发即弃可叠底噪;danger 签名+danger 震同窗;当前 voice 句播完后危机链才插续。
|
||||
- **R5 回忆可重听**:MEMORY 双击=重听当前回忆节点(关键线索可重听,P1);插叙中段句可跳、首尾锚句首播不可跳(G5)。
|
||||
- 声流账:任意时刻 ≤2 条前景流(voice 串行 1 + 信息音/底噪 1),BGM/amb 为背景层——ASA ≤2 约束。
|
||||
|
||||
## 7. 向导层接入
|
||||
|
||||
### 7.1 状态签名 earcon / turn cue
|
||||
|
||||
| 时机 | 向导动作 | 说明 |
|
||||
|---|---|---|
|
||||
| INTRO 进入 | `guide.state('explore')` | 叙事态签名 |
|
||||
| WATCH/MEMORY 进入 | `guide.state('explore')` | 同一枚签名(时空不换 earcon,§6.2 纪律) |
|
||||
| 每个抉择点 p* 起播 | `guide.state('choice')` | 选项句本身即 turn cue(W2 契约零插播) |
|
||||
| CALM 进入 | `guide.state('settle')` | 喘息/结算签名 |
|
||||
| ENDING 进入 | `guide.state('settle')` | 同上 |
|
||||
| MENU 打开 | `guide.state('menu')` | 菜单签名 |
|
||||
| 危机拍1/2 | `guide.state('danger')` | 音效前置 2s 渐强同窗(全游戏仅两处) |
|
||||
| 无效手势 | `guide.error({voice:'gd_invalid', onceKey})` | error 震 + full 档语音,idle-only(F1.4) |
|
||||
|
||||
- earcon 词表:只用全项目统一 8 音(menu/explore/battle/choice/settle/danger/turn/nudge),**零新增**;battle 不用。
|
||||
|
||||
### 7.2 看门狗双轨(radio F1 + dungeon E0-1 教训:乱按也要被抢救)
|
||||
|
||||
**无操作轨**(guide watchdog,任何手势复位;两级不同句、用尽即停、永不惩罚):
|
||||
|
||||
| 等待点 | full 档 | standard 档 | 级别内容 |
|
||||
|---|---|---|---|
|
||||
| INTRO/WATCH/CALM 链末等待 | [25, 50] | [13, 30] | ① gd_continue ② gd_again(storyline F1.1 同款) |
|
||||
| 抉择点 p* 播完无操作 | [25, 50] | [25, 50] | 重播当前 p* 提示句(13 号 §16 先例;空点单击=重挂计时) |
|
||||
| ENDING 结算等待 | [25, 50] | [13, 30] | gd_continue / gd_again |
|
||||
| MEMORY 链末 | 不挂(auto 回返) | 不挂 | 资产缺失兜底:30s 单句看门狗且 `isVoicePlaying()===false` 才续(radio N1 先例) |
|
||||
|
||||
**无进展轨**(游戏层计时,dungeon E0-1 ②同型;挂 WATCH 链末与 p* 等待两个可饿死点):
|
||||
|
||||
| 项 | 规则 |
|
||||
|---|---|
|
||||
| 进展定义 | 节点推进 / 抉择结算 / 重听。**无效手势(滑错、空点)不计进展**——无操作轨被它们复位、无进展轨不被复位,乱按 96s 必被抢救 |
|
||||
| 阈值 | 60s → gd_prog1;120s → gd_prog2;用尽即停(每等待点一轮) |
|
||||
| 有真实进展 | 全程零 prog 播出(不误伤正常玩家) |
|
||||
| 双轨去重 | 两轨短句内容同级交叉登记;同一等待点先播过 gd_* 同义级则无进展轨跳过 |
|
||||
|
||||
- 向导插播一律 `queue:true`,绝不顶掉在播对白;error/watchdog 类语音 idle-only(在播则跳过且过期丢弃,F1.4)。
|
||||
|
||||
### 7.3 键盘变体机制(PC 键盘玩家)
|
||||
|
||||
- 运行时按 `gesture.inputMode()`(settings.input auto/touch/key)选 `_k` 变体资产:key → `voice/<gender>/<id>_k.*`,touch → 无后缀版;auto 跟随最近使用通道。`_k` 缺失回退无后缀版(check_all_assets 校验配对)。
|
||||
- 变体清单(8 对,集中分组见 voice-ids §G0.a 与 C1 首个抉择):gd_brief / gd_continue / gd_again / sys_help / sys_menu / sys_skip / sys_continue_ask / **p1**(首个抉择的键位绑定)。
|
||||
- 抉择提示 p2..p9 措辞统一「向左滑/向右滑」;键盘玩家由 p1_k 与 sys_help_k 完成首次绑定(左=←,右=→),后续语义不变。启动遮罩文案引擎自理(游戏零改动)。
|
||||
|
||||
### 7.4 继承 radio 三轮验证机制(照抄不重设计)
|
||||
|
||||
| 机制 | 来源 | 落点 |
|
||||
|---|---|---|
|
||||
| 帮助链去重(同等待点第 2 次上滑只震+nudge) | radio G1 | `_helpSeen` 按等待点键控(MEMORY 按插叙段键控) |
|
||||
| 状态链顺序「状态在前、帮助在后」 | radio G6 | prog_m* →〔mem: prog_mem_*〕→ tr_* → tru_* → sys_help |
|
||||
| 空点确认轻震(不可跳句上单击补 beat [8]) | radio G4 | p*/锚句/F4 锁各 tap 屏蔽分支 |
|
||||
| tr_thin 播报位附 warning 震 | radio G2 | 全部 tr_thin 出口(含上滑复听) |
|
||||
| 菜单报名游戏侧排队零截断 | radio 实现修复 #3 | `_menuQueue` 排水 |
|
||||
| stop() 先 `seqToken++` 作废在途链 | radio 实现修复 #6 | 同款 |
|
||||
| 新局清 choiceArmed/pendingChoice | radio 实现修复 #7 | newNight() |
|
||||
| 长按误报无效(longpress 全状态合法) | radio 实现修复 #2 | 仅 left/right(ASK 另含 up/down/doubletap)报无效 |
|
||||
|
||||
## 8. 存档设计
|
||||
|
||||
### 8.1 进度 data 结构(PUT /api/progress {game:'keeper'})
|
||||
|
||||
```json
|
||||
{
|
||||
"schema": 1,
|
||||
"updatedAt": "2026-09-09T12:00:00Z",
|
||||
"summary": "第2幕·风暴顶 · 信任:信一半 · 结局2/4",
|
||||
"phase": "WATCH",
|
||||
"node": "amo_e",
|
||||
"act": 2,
|
||||
"timeline": "now",
|
||||
"trust": 2,
|
||||
"flags": { "rev1": true, "rev2": true, "rev3": false },
|
||||
"p7": null,
|
||||
"endings": { "e2": true },
|
||||
"runs": 3
|
||||
}
|
||||
```
|
||||
|
||||
- 写入时机:每幕 CALM 进入、每个抉择结算后、ENDING 进入、菜单「保存并回大厅」。
|
||||
- 断点续玩:读档 → sys_continue_ask(_k)(单击=继续上次 / 右滑=新风暴夜,runs 均 +1 统一口径);继续 = 恢复 phase+node+timeline+全部数值并**局面复述**:timeline=mem* 时恢复链 = prog_m* → prog_mem_g/f → 重播当前回忆节点(时位句先行,「我在哪个时空」一句话说清);now 则直接重播当前节点链;重进 ≤5s 可玩(L5);恢复首句受 F4 跳句锁(radio G5 例外条款)。
|
||||
- summary 格式:进行中 `第N幕·<幕名> · 信任<档名> · 结局X/4`(幕名=风暴起/风暴顶/风歇前);已收夜 `风暴夜已过·<结局名> · 结局X/4`(大厅卡片直接显示)。
|
||||
|
||||
## 9. playtest 断言清单(登记 13 号文档 keeper 节,格式同 §21;`settings.set({guide:'off'})` 纯玩法验证,向导行为住 guide.test)
|
||||
|
||||
**关键路径**(剧本 A:信任满·全真相·出海接人·说出 → e1,≤60 次手势):
|
||||
1. 遮罩点按 → INTRO 链(gd_brief → b_open → b_rain → b_rule → b_goal,voice 层有播放记录)→ 链末单击 → C1:c1_tune → amo_a → amo_b → ◆p1。
|
||||
2. p1 左 → c1_hold(o)(e)(trust=1,首个正反馈)→ amo_c → p2 左 → c1_open(配 hatch_open)→ rev_teach(全局一次)→ **插叙1 时序断言**:memory_in → bgm 切 memory → rev_g1..g4 → memory_out → storm 回 → c1_diary(truth=1)→ CALM(1):foghorn+lull_1+tr_half(跨档)→ C2。
|
||||
3. C2:c2_back → amo_d → p3 左 → c2_song(o) → 插叙2(rev_f1..f5,同款时序)→ c2_key(truth=2)→ amo_e → p4 左 → c4_true →〔插叙2 已完成:兜底不播〕→ c4_trueo(trust=3)→ 危机拍1(hull_crack 前置 2s 与 danger 同窗)→ c2_crack → amo_f → p5 左(trust=4)→ CALM(2)。
|
||||
4. C3:c3_eye → c3_page → p6 左 → 插叙3(rev_c1..c5)→ c6_reade(truth=3)→ p7 左 → c7_go(配 lamp_mech,满发条版)→ 危机拍2(wave_wall+danger+danger 震)→ c3_wall → p8_boat 左 → c8_song(o) → c9_return → g9_in → g9_knot → **p9a**(truth=3 变体)→ 左 → d9_tell_a → amo_g → d9_telle → ENDING(e1):e1_a/b + ep_lead + ep_amo_home + ep_lamp_full + ep_log_told + ep_dad + ep_shore → 结算单击重开回 INTRO。
|
||||
|
||||
**边界断言**:
|
||||
- **四结局可达(含信任逐点验算)**:剧本 B(p1左 p2左 p3左 p4左 p5左 p6右 p7右 p8_reef右 p9右,trust=4/truth=2)→ e2:c9_land + p9b + ep_amo_solo/ep_lamp_hold/ep_log_kept/ep_dad;剧本 C(p1右 p2右 p3右 p4右 p5右 → m6_seal 自动右 → p7右 p8_reef左 p9左,trust=0/truth=0)→ e3:c9_found + p9b/d9_tell_b + ep_amo_dawn/ep_lamp_hold,**ep_log_* 两句皆不播**(truth=0 日志未出场)、**ep_dad 不播**(rev2=false);剧本 D(同 C 但 p9 右)→ e4。各局 trust/truth 逐检查点与 §4.2 一致。
|
||||
- **插叙触发与回返**:p2 左→插叙1、p3 左→插叙2、p6 左→插叙3 的节点顺序断言;**剧本 F**(p1左 p2左 p3右 p4左 p5左)断言插叙2 兜底在 c4_true 与 c4_trueo 之间播出且 c2_key 随后播出;回返后 now 线下一节点正确(c1_diary / c2_key 或 c4_trueo / c6_reade);插叙链 auto 完成即回 WATCH(无链末等待)。
|
||||
- **时空签名断言(核心)**:全剧本转写断言——amb_vinyl 与 amb_storm/amb_room 播放区间**零重叠**;每次插叙 memory_in/memory_out 成对出现且计数=插叙完成数;锚入句(rev_g1/rev_f1/rev_c1)与锚出句(rev_g4/rev_f5/rev_c5)在位且首播不可跳(单击=beat 轻震不跳句);插叙期间 bgm=memory、回返后 bgm=storm;插叙期间 amb_engine 停播。
|
||||
- **教学承诺兑现**(§6.5 清单逐条):rev_teach 全局恰一次(第二次插叙前不重播);foghorn 计数=开场+CALM(1)+CALM(2)+ep_shore 恰四处;rev_f4→剧本 A 播 c7_go/剧本 E 播 c7_go2(发条差分);b_goal→c3_dark 与 ep_shore 货轮闭环;prog_m1..3 与三幕 amb gain 档一致。
|
||||
- **p6 封锁不摆假选项**:rev2=false 时 p6 提示句不播、m6_seal 播出后自动走 c6_shut,该点左右滑无效果(不丢不误触)。
|
||||
- **信任/真相账目真实**:上滑链顺序 prog_m* →〔mem: prog_mem_g/f〕→ tr_* → tru_* → sys_help(G6);档位句与当前值一一对应(tr_deep≥3 / tr_half=1-2 / tr_thin=0;tru 四值逐句);tr_thin 各播报位附 warning 震。
|
||||
- **看门狗双轨**:WATCH 链末 25s/50s → gd_continue/gd_again;p* 播完 25s/50s → 当前 p* 重播两次后静默;**乱按 96s**(每 2s 注入一个无效滑动):无操作轨零播出 + 无进展轨 60s→gd_prog1、120s→gd_prog2;有真实进展全程零 prog;MEMORY 链末不挂看门狗;`guide=off` 全程零定时器零向导事件。
|
||||
- **键盘变体**:settings.input='key' 会话播出 gd_brief_k/sys_help_k/p1_k 且对应无后缀版零播出;'touch' 反之;'auto':keydown 后下一句用 _k。
|
||||
- **中断复述含时空位**:杀进程重进(存档 timeline='mem_f'、node=rev_f3)→ sys_continue_ask → 单击 → 恢复链首句=prog_m2 → prog_mem_f → 重播 rev_f3 起链(恢复首句不可跳,第二句起可跳);now 态存档(node=amo_e)恢复=重播该节点链。
|
||||
- **pendingChoice**:p* 播放中左右滑 → 播完立即生效(不丢、不重复、连滑取最后一次)。
|
||||
- **p* 不可跳**:p* 播放中单击 → 不跳句(PROMPT_RE 门)+ beat 轻震(G4)。
|
||||
- **idle-only**:向导 gd_* 在对白在播时跳过且不占 onceKey(F1.4);queue 句排在当前句后零截断。
|
||||
- **菜单**:下滑开菜单 → 上滑帮助 → 双击「回到值守」→ phase/node 不变、当前节点重播;**插叙中开关菜单**后底噪仍 vinyl、重播当前回忆节点;单击循环顺序 = [回到值守, 重新开始今夜, 保存并回大厅];确认回大厅 → sys_menu_lobby 播出且 PUT/localStorage 有最新 data。
|
||||
- **结算链死窗**:e* 结局链/c3_dark/插叙链开播后 800ms 内注入在途 tap → 手势被吞、链完整有序播出。
|
||||
- **危机拍**:hull_crack/wave_wall 前置 2s 渐强、danger 签名与音效同窗、danger 震遍间隔 ≥400ms;当前 voice 句播完危机链才插续。
|
||||
- **资产缺失**:屏蔽任意 voice 资产 → 30s 看门狗自动续链到结局不卡死;NPC 滤波资产缺失回退原声可播。
|
||||
- **数字规范**:prog_*/tr_*/tru_*/gd_* 全部整句字面量,静态审计无运行时拼接碎片。
|
||||
|
||||
**失败即不通过**:任何等待 >5s 无声(静默死局);无效手势零反馈;**vinyl 与 storm/room 底噪重叠**;**插叙缺过渡音或缺锚句**;结局计数与 §3.4 不符;档位句与 trust/truth 值不符。
|
||||
|
||||
## 10. 节奏曲线(风暴三幕)
|
||||
|
||||
| 段 | 内容 | 目标时长 | 设计目标 |
|
||||
|---|---|---|---|
|
||||
| 开场 | 塔名+规矩+目标+第一声呼救 | 1-1.5 min | 首输入 ~30s(INTRO 链 ~30s 链末单击);规矩一句讲完(P4);雾角承诺音埋下 |
|
||||
| 幕一 风暴起 | p1/p2 + 插叙1 + CALM(1) | 4-5 min | **首个正反馈 ≤3min**(~2.5min p1 左阿澈声音稳住);**时空签名教学+首次兑现**(rev_teach→插叙1 四要素全播);两抉择条条有出路 |
|
||||
| 幕二 风暴顶 | p3/p4 + 插叙2 + 危机拍1 + p5 | 6-7 min | 情感段(父亲真相 p4);第一危机拍(前置 2s 预警);插叙2 供货发条知识(p7 兑现预告) |
|
||||
| 幕三 风歇前 | p6+插叙3 + p7 核心 + 危机拍2 + p8 | 7-8 min | 紧张峰值:三代秘密见底→「守灯还是救人」宿命抉择→浪墙下的执行差分;**复刻祖父之夜的暗线**(剧本 E 灯灭) |
|
||||
| 签收+结局 | p9 + 结局链 + 尾声回响 | 2.5-3 min | 心结抉择(说/瞒×全/碎片)+ ep 逐项点名(P2 回响);开环钩子拉下一夜 |
|
||||
|
||||
- 合计 ≈ 21-24 min(15-25 达标);每 30-60s 一个反馈颗粒(阿澈反应句/结果句/档位句/插叙锚句),无沉默尴尬期(P3)。
|
||||
- 难度曲线 = 情感与信息复杂度(接住人→翻开过去→宿命抉择→秘密归宿),操作复杂度恒定(永远二选一)——P4「规则一遍听懂」由恒定操作面保证;风暴强度=氛围曲线(amb gain 三档),不构成玩法压力(无倒计时无死亡)。
|
||||
|
||||
## 11. 自检清单(策划交付自验;☐ = 待开发/测试轮填)
|
||||
|
||||
| # | 硬约束/教训 | 落地 | ✓ |
|
||||
|---|---|---|---|
|
||||
| 1 | FTUE 首输入 <60s | INTRO 链 ~30s 链末单击(§10) | ☑ |
|
||||
| 2 | FTUE 首个正反馈 ≤3min | ~2.5min p1 左阿澈稳住(c1_holdo+c1_holde) | ☑ |
|
||||
| 3 | 学习期零惩罚 | 幕一全组合不扣资源;右路只即时纠偏(c1_aske);无超时惩罚 | ☑ |
|
||||
| 4 | 失败三问归因+归因真话律 | c1_aske/c3_dark/c9_found 指向实际选择;d9_tell_b 在 truth=0 仍句句为真;§4.4 无假归因 | ☑ |
|
||||
| 5 | 资源账目真实(radio rep_low 教训) | tr_* 三档逐区间为真;tru_* 四值逐值为真;跨档才播 | ☑ |
|
||||
| 6 | 手势宪法 6 手势默认语义零豁免 | §2.3 全覆盖;菜单 §5.2 模态约定 | ☑ |
|
||||
| 7 | 长按显式登记 | 无豁免:长按=引擎快进(12 号叙事类不豁免),§2.3 在案 | ☑ |
|
||||
| 8 | 向导:签名/turn cue/看门狗两级不同句 | §7.1/§7.2;gd_continue→gd_again;MEMORY 链末不挂 | ☑ |
|
||||
| 9 | 看门狗双轨(dungeon E0-1/radio F1 教训) | 无操作轨+无进展轨(§7.2);乱按 96s 必被抢救 | ☑ |
|
||||
| 10 | 插播 queue 不顶对白;纠错 idle-only 过期丢弃 | §7.2(F1.4 契约);过渡音 idle 门(§6.6 R1) | ☑ |
|
||||
| 11 | 死亡/失败结算链完整(dungeon H1 教训) | e* 链/c3_dark/插叙链 800ms 手势死窗;阿澈恒活着(零死亡红线) | ☑ |
|
||||
| 12 | 教学承诺兑现(dungeon「铁器=楼梯」教训) | §6.5 承诺清单 6 条逐条绑兑现点+断言 | ☑ |
|
||||
| 13 | 单次播报 ≤3 选项 | 全部抉择恒 2 选项;菜单 3 项循环 | ☑ |
|
||||
| 14 | 并发声流 ≤2 + 通道仲裁 | voice 串行+底噪/信息音互斥(R1-R5,§6.6);断言零重叠 | ☑ |
|
||||
| 15 | earcon ≤7、统一词表、语义靠语音 | 只用统一 8 音中 7 个(battle 不用),零新增;时空签名住内容层 | ☑ |
|
||||
| 16 | 台词一句一文件 ≤40 字、数字分档整句、无运行时拼接 | voice-ids 全表 ≤35 字(最长 p7);prog/tr/tru 分档整句;句内数字写死 | ☑ |
|
||||
| 17 | 多音字规避/同 instruct 常量/无语速词 | voice-ids 头部+文末自查(落/数/缝/卷/转/重 试听项) | ☑ |
|
||||
| 18 | PC 键盘变体(提示句集中+标注) | 8 对 _k 变体集中分组(voice-ids §G0.a);inputMode() 运行时选择 | ☑ |
|
||||
| 19 | P1:可打断/重听(含回忆节点)/status key/不当白痴 | 跳句+双击(MEMORY 重听 R5)+上滑时位句链+成功零补救教学 | ☑ |
|
||||
| 20 | P2:3 分钟见效/结局回响 | ~2.5min 阿澈声音稳住;ep 逐项点名(阿澈/灯/日志/父亲班次) | ☑ |
|
||||
| 21 | P3:3 分钟颗粒/中断复述含时空位/单手 | 一幕=4-8min 段落+边界存档;恢复链 prog_mem_* 时位句先行;全手势免视单手 | ☑ |
|
||||
| 22 | P4:一遍懂/容错/无高压倒计时/不骂人 | 一句规矩;零死亡零倒计时;NPC 句 ≤27 字+逗号停顿 | ☑ |
|
||||
| 23 | 抉择树 4 结局可走通验算 | §4.4 穷举+§9 剧本 A-D(e1-e4 各一条实路径)+E/F 差分剧本 | ☑ |
|
||||
| 24 | 单局 15-25 min | §10 曲线 ≈21-24 min | ☑ |
|
||||
| 25 | 分支不爆炸(radio 纪律) | 跨幕仅 trust+3 bool+p7/p9 派生;~75 节点固定深度(§3.3) | ☑ |
|
||||
| 26 | 台词 ≤160、NPC ≤5 单音色 | 148 句(双 121+NPC 27)/3 个 NPC 音色(voice-ids 账目) | ☑ |
|
||||
| 27 | 引擎边界诚实 | §6.1 能力表:滤波/loop/互让全写明资产侧或降级方案 | ☑ |
|
||||
| 28 | 存档带 summary、断点续玩 | §8:data+summary 格式、timeline 恢复链、≤5s、局面复述 | ☑ |
|
||||
|
||||
### 批 1 教训内化确认(5 条全落地)
|
||||
|
||||
| 教训 | 本作机制 | 断言 |
|
||||
|---|---|---|
|
||||
| 教学承诺必须兑现 | §6.5 六条承诺清单(时空签名/雾角/灯/货轮/发条/三幕) | §9「教学承诺兑现」块 |
|
||||
| 看门狗双轨 | §7.2 无操作轨+无进展轨;无效手势不复位进展轨 | §9「看门狗双轨」块 |
|
||||
| 档位措辞真实 | §4.3 tr 三档逐区间+tru 四值逐值为真 | §9「信任/真相账目真实」块 |
|
||||
| 失败结算链完整不被打断 | 800ms 手势死窗盖 e* 链/c3_dark/插叙链;seqToken 作废在途链 | §9「结算链死窗」块 |
|
||||
| PC 键盘操作提示 | 8 对 _k 变体+inputMode() 选择+集中分组标注 | §9「键盘变体」块 |
|
||||
|
||||
### 时空签名教学-兑现验算(本作特有自检)
|
||||
|
||||
| 承诺(rev_teach 四要素) | 教学点 | 兑现次数(剧本 A) | 断言位 |
|
||||
|---|---|---|---|
|
||||
| 唱针落下(memory_in) | rev_teach 全局一次(首插叙前) | 插叙 1/2/3 各一,共 3 | §9 插叙触发与回返 |
|
||||
| 风声退后(vinyl 底噪、storm/room 淡出) | 同上 | 3 段插叙全程,零重叠 | §9 时空签名断言 |
|
||||
| 唱针抬起+划针(memory_out) | 同上 | 3 次,与 in 成对 | §9 时空签名断言 |
|
||||
| 风声回来(storm 回切+锚出句) | 同上 | 3 次(锚句 rev_g4/rev_f5/rev_c5) | §9 时空签名断言 |
|
||||
| 「我在哪」三层兜底 | 上滑时位句(prog_m*/prog_mem_*)+恢复链时位句先行+菜单关闭底噪不丢 | 全程可查;§8/§9 | §9 中断复述含时空位 |
|
||||
|
||||
### 结局验算(3-4 结局条款 → 定 4)
|
||||
|
||||
e1=trust≥3∧p9左(剧本 A:trust4/truth3);e2=trust≥3∧p9右(剧本 B:trust4/truth2,p9b);e3=trust<3∧p9左(剧本 C:trust0/truth0,p9b+d9_tell_b);e4=trust<3∧p9右(剧本 D)。四格互斥完备、各有一条实路径、trust/truth 全档可达(§4.4)。
|
||||
|
||||
### 台词 ≤40 字验算
|
||||
|
||||
voice-ids 全表最长 = p7(35 字),次长 p9a/p9b(各 32 字)、d9_tell_a(31 字);NPC 句最长 amo_c(25 字)——全部 ≤40 ✓(逐句账见 voice-ids 文末自查)。
|
||||
@@ -0,0 +1,253 @@
|
||||
# 22b · 《星环舰长》语音台词表(voice ids,录音依据)
|
||||
|
||||
> **给音频总监的录制说明**
|
||||
> - **旁白双性别组**(142 句):旁白=舰载系统音(系统/教学/状态/账目/结算宣读),不念船员台词。落 `web/bridge/audio/voice/female|male/<id>.{ogg,m4a}`,两性别 id 集合完全一致。
|
||||
> - female = `Serena`,instruct 常量:`清晰沉稳的女声,舰载系统音,冷静克制,句读干净`
|
||||
> - male = `Uncle_Fu`,instruct 常量:`低沉沉稳的男声,舰载系统音,冷静克制`
|
||||
> - 两常量全表统一(含教学/危机/结算),禁止句级变体、禁语速词(引擎 SoundTouch 变速)。
|
||||
> - **NPC 平铺组**(12 句):船员台词=3 位 NPC 平铺单音色、**不做双性别**,落 `web/bridge/audio/voice/<id>.{ogg,m4a}`(引擎平铺回退命中)。NPC ≤3;同一角色 speaker+instruct 恒定;不加电台/电话滤波。区分度风险逐个标注:
|
||||
> | 角色 | speaker | instruct 常量 | 区分度风险 |
|
||||
> |---|---|---|---|
|
||||
> | 大副(34 岁) | `Dylan` | `干脆利落的年轻男声,星舰大副,令出必行,敬重舰长` | **低:与两侧旁白(Serena/Uncle_Fu)均不同 speaker** |
|
||||
> | 工程师(52 岁) | `Eric` | `沙哑厚重的中年男声,轮机工程师,惜船如命,慢条斯理` | 低:同上 |
|
||||
> | 医师(38 岁) | `Vivian` | `温和坚定的女声,舰载医师,轻声但不容置疑` | 低:female 旁白=Serena,不重叠 |
|
||||
> 本作 NPC 与旁白**零 speaker 重叠**(detective/teahouse 各有 2 处「中」风险,本作 0)。
|
||||
> - **声音演技**:eng_gripe/xo_uneasy/doc_ignore 的失望、xo_fight/sup_xo 的战斗令——情绪全写在句内文本(省略号/叹号引导),instruct 恒定。
|
||||
> - **数字规避**:全部量词/数字写死在整句内(「两资源」「资源加一」),无运行时拼接;档位全分档整句(hull 3 档/段 4 档/rp 3 档/忠诚 3×3/功勋 3 档/评级 5 档);**资源与功勋价格句只在价格恒真时使用**(修理每级恒 2 资源;改装价写死在各 upg 句内)。
|
||||
> - **称呼中性**:旁白称玩家「舰长/你」,无性别化称呼(旁白性别随设置变化不影响内容)。
|
||||
> - **多音字自查**:全表无「血」「爪」「挨」「壳」「重(chóng)」「弹」「泊」「处」;「重新听」统一写法。低风险 5 处标注:「撑不了多久」的「了」(liǎo)、「折算」的「折」(zhé)、「应急」的「应」(yìng)、「采得多/稳得很/打得尽兴」的「得」(de,助词)、「遭了伏击」的「了」(le)——试听异常再改写。
|
||||
> - **键盘变体(V 组)**:操作提示句在 `gesture.inputMode()==='key'` 时改播 `_k` 变体(touch 回基础句);变体与基础句 id 一一对应、集中登记见文末 V 组。
|
||||
> - 管线:`tools/gen_voice_dual.py` 照录(SPEAKERS 需新增 bridge 行 + BRIDGE_NPC 平铺表);生成后 `--convert` 落盘 + `tools/check_all_assets.py` 终检(双格式配对、双性别集合一致)。
|
||||
|
||||
## G0 组 · 系统/菜单/帮助(旁白 ×10)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `sys_menu` | 菜单。单击切换,双击确认。 | 下滑呼出模态菜单 |
|
||||
| `sys_menu_resume` | 回到舰桥。 | 菜单项 |
|
||||
| `sys_menu_save` | 保存并回大厅。 | 菜单项 |
|
||||
| `sys_menu_help` | 重新听帮助。 | 菜单项 |
|
||||
| `sys_menu_restart` | 放弃本次巡逻。 | 菜单项(run 清空保 meta) |
|
||||
| `sys_saved` | 进度已保存。 | 存档写入后 |
|
||||
| `settings_hint` | 音色、语速、背景音乐,请回大厅修改。 | 菜单内设置提示 |
|
||||
| `sys_help` | 巡航中,上滑巡检全舰;危机中,左右滑听选项,单击下令。下滑菜单,双击重新听。 | 菜单内上滑 / 帮助项 |
|
||||
| `sys_continue_ask` | 检测到未完成的巡逻。单击继续,右滑进星港。 | 有存档进游戏(TITLE) |
|
||||
| `sys_new_patrol` | 新巡逻,星环号启航。 | 新巡逻开始 |
|
||||
|
||||
## G1 组 · 开场/教学(旁白 ×14)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `intro_1` | 你是巡逻舰星环号的舰长。在这条航线上,耳朵就是雷达。 | 开场链 1(TITLE 上滑重听时可复用) |
|
||||
| `intro_2` | 全舰四个系统:引擎、护盾、扫描、武器,各守一方。 | 开场链 2 |
|
||||
| `intro_3` | 引擎在舰尾低鸣,护盾在舰首嗡响。 | 开场链 3(方位教学 a) |
|
||||
| `intro_4` | 扫描在左舷扫掠,武器在右舷充能。 | 开场链 4(方位教学 b) |
|
||||
| `intro_5` | 危机从哪边来,哪边先遭殃。 | 开场链 5(受殃规则承诺,playtest 锁定) |
|
||||
| `tut_d0` | 先试巡检。向上滑,听全舰状态。 | D0 前 |
|
||||
| `tut_all_ok` | 四个音都稳,全舰正常。 | D0 完成;**正片巡检全 ok 时复用为链尾句**(一句两用,登记) |
|
||||
| `tut_crisis` | 有情况。听签名音,辨认类型。 | D1 求救检测链前 |
|
||||
| `tut_decide` | 左右滑听选项,单击下令。 | D2 决策窗前(豁免/导航教学) |
|
||||
| `tut_aid` | 驰援靠扫描。我们的扫描,稳得很。 | D2 选项引导(首局 S1 无磨损=承诺必兑现) |
|
||||
| `tut_after` | 就是这样:听声,辨型,下令。 | D2 结算链尾(教学要诀收束) |
|
||||
| `tut_loyal` | 船员的心分三档:离心、平常、信赖。上滑巡检听得到。 | D3 前 |
|
||||
| `tut_done` | 教学完了。舰长,航线交给你。 | D4(进自由巡航) |
|
||||
| `tut_skip` | 已跳过教学。上滑巡检,危机时左右滑听选项。 | 下滑跳过教学 |
|
||||
|
||||
## G2 组 · 巡检/状态(旁白 ×30)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `sys_engine_dmg` | 引擎,受损。 | 巡检链异常段(引擎 tone 后)/磨损事件 |
|
||||
| `sys_engine_off` | 引擎,离线。 | 巡检链(平线签名后);选项判定不满足时先播(真话归因) |
|
||||
| `sys_shield_dmg` | 护盾,受损。 | 同上(护盾) |
|
||||
| `sys_shield_off` | 护盾,离线。 | 同上 |
|
||||
| `sys_scan_dmg` | 扫描,受损。 | 同上(扫描) |
|
||||
| `sys_scan_off` | 扫描,离线。 | 同上 |
|
||||
| `sys_weapon_dmg` | 武器,受损。 | 同上(武器) |
|
||||
| `sys_weapon_off` | 武器,离线。 | 同上 |
|
||||
| `st_hull_1` | 舰体,稳固。 | 巡检链(hull ≥75% 上限) |
|
||||
| `st_hull_2` | 舰体,带伤。 | 巡检链(40-74%) |
|
||||
| `st_hull_3` | 舰体,危急。 | 巡检链(<40%);跌至危急当刻加 danger 签名(每段 1 次) |
|
||||
| `st_seg_1` | 第一巡航段。 | 巡检链段位段(S1) |
|
||||
| `st_seg_2` | 第二巡航段。 | S2 |
|
||||
| `st_seg_3` | 第三巡航段。 | S3 |
|
||||
| `st_seg_4` | 第四巡航段,末段。 | S4 |
|
||||
| `st_rp_1` | 资源紧张。 | 巡检链(0-2;跨档才即时播,双向) |
|
||||
| `st_rp_2` | 资源够用。 | 3-6 |
|
||||
| `st_rp_3` | 资源充足。 | ≥7 |
|
||||
| `st_xo_1` | 大副,离心。 | 巡检链船员段(≤−2) |
|
||||
| `st_xo_2` | 大副,平常。 | −1..+1 |
|
||||
| `st_xo_3` | 大副,信赖。 | ≥2 |
|
||||
| `st_eng_1` | 工程师,离心。 | 同上(工程师) |
|
||||
| `st_eng_2` | 工程师,平常。 | |
|
||||
| `st_eng_3` | 工程师,信赖。 | |
|
||||
| `st_doc_1` | 医师,离心。 | 同上(医师) |
|
||||
| `st_doc_2` | 医师,平常。 | |
|
||||
| `st_doc_3` | 医师,信赖。 | |
|
||||
| `recap_go` | 继续航行。 | 中断复述链尾 |
|
||||
| `evt_dock` | 本段结束,靠港整备。 | 段计时到(危机结算后)进 DOCK |
|
||||
| `evt_resume` | 启航,下一段巡航。 | DOCK 启航 → 下段 ROUTE |
|
||||
|
||||
## G3 组 · 危机(旁白 ×24)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `evt_meteor` | 碎石呼啸,陨石群。 | 检测链类型句(签名音后) |
|
||||
| `evt_pirate` | 敌船引擎,海盗。 | 同上 |
|
||||
| `evt_distress` | 断续三短,求救信号。 | 同上 |
|
||||
| `evt_radiation` | 计数急响,辐射云。 | 同上 |
|
||||
| `dir_port` | 方位,左舷。 | 检测链方位句(固定模板,四选一) |
|
||||
| `dir_star` | 方位,右舷。 | 同上 |
|
||||
| `dir_bow` | 方位,舰首。 | 同上(签名后带 dir_bow 上行尾音) |
|
||||
| `dir_stern` | 方位,舰尾。 | 同上(下行尾音) |
|
||||
| `cr_decide` | 听选项,下令。 | 决策窗开(倒计时自此起算) |
|
||||
| `opt_evade` | 规避机动,靠引擎。 | 选项预览(陨石/海盗/辐射) |
|
||||
| `opt_fight` | 迎战,靠武器。 | 选项预览(陨石/海盗) |
|
||||
| `opt_breach` | 硬闯,靠护盾。 | 选项预览(陨石/辐射) |
|
||||
| `opt_aid` | 驰援,靠扫描。 | 选项预览(求救) |
|
||||
| `opt_ignore` | 按兵不动,不理会。 | 选项预览(海盗/求救) |
|
||||
| `cr_timeout` | 没来得及下令。 | 决策窗超时(后接默认结局句,真话) |
|
||||
| `res_clean` | 干净利落,有惊无险。 | 结局:无伤化解 |
|
||||
| `res_hurt` | 舰体受创。 | 结局:轻伤(hit_hull 音) |
|
||||
| `res_bad` | 损失惨重。 | 结局:重伤 |
|
||||
| `res_mine` | 轰开碎石,采到矿材,资源加一。 | 陨石·迎战成功(res_pick 同点) |
|
||||
| `res_plunder` | 海盗击退,缴获物资,资源加二。 | 海盗·迎战胜 / 求救陷阱反杀 |
|
||||
| `res_reward` | 救援成功,对方致谢,资源加二。 | 求救·驰援成功 |
|
||||
| `res_ambush` | 遭了伏击,舰体受创。 | 求救陷阱·驰援且武器不可用(hull−2) |
|
||||
| `res_rad` | 全船受照。 | 辐射·超时/规避不动(hull−1+受殃系统受损) |
|
||||
| `trap_hint` | 求救码后面,有引擎声,多留心。 | 求救陷阱变体检测链尾(先线索后抉择) |
|
||||
|
||||
## G4 组 · 忠诚/支援(旁白 ×10)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `loy_aid` | 医师与大副,记下了这次驰援。 | 求救·驰援成功(医师+1 大副+1) |
|
||||
| `loy_ignore` | 求救没了下文,医师很失望。 | 求救·忽略/超时(医师−1) |
|
||||
| `loy_fight_win` | 大副打得尽兴,士气高涨。 | 海盗·迎战胜 / 陨石·迎战轰开(大副+1) |
|
||||
| `loy_evade_pirate` | 大副觉得,这一躲有些窝囊。 | 海盗·规避成功(大副−1) |
|
||||
| `loy_breach` | 工程师心疼过载的护盾。 | 陨石/辐射·硬闯硬穿且护盾承接(工程师−1) |
|
||||
| `loy_rad` | 医师在处理伤员。 | 伤员类结局:受照/伏击受创/海盗先手(医师−1) |
|
||||
| `sup_xo` | 大副坐上炮位,火力压制! | 海盗·迎战下令瞬间 band≥2(战果升一级) |
|
||||
| `sup_eng` | 工程师出手,系统复航了。 | 段末 band≥2 且有受损系统(自动修 1 级) |
|
||||
| `sup_doc` | 医师带人抢修,舰体补回一点。 | 段末 band≥2 且本段掉血(hull+1) |
|
||||
| `sup_none` | 这个岗位,眼下没人顶上。 | 支援条件不满足(每局限 1 次,之后静默) |
|
||||
|
||||
## G5 组 · 靠港整备(旁白 ×9)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `dock_open` | 靠港整备。左右滑看项目,单击执行。 | 进 DOCK(choice 签名同点) |
|
||||
| `rep_engine` | 修理引擎,升一级,两资源。 | 修理项预览(仅受损/离线时出现;价恒真) |
|
||||
| `rep_shield` | 修理护盾,升一级,两资源。 | 同上 |
|
||||
| `rep_scan` | 修理扫描,升一级,两资源。 | 同上 |
|
||||
| `rep_weapon` | 修理武器,升一级,两资源。 | 同上 |
|
||||
| `rep_ok` | 修理完成。 | 修理执行成功(wrench 音+告警即止 R7) |
|
||||
| `rep_poor` | 资源不够。 | 资源 <2 时执行修理(error 震) |
|
||||
| `dock_go` | 启航,继续巡逻。 | 启航项(恒为末项) |
|
||||
| `dock_empty` | 全舰状态良好,无需整备。 | 进 DOCK 且全系统 ok(仅启航一项) |
|
||||
|
||||
## G6 组 · 结算/死亡(旁白 ×16)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `die_intro` | 舰体解体在即,全员撤离。 | hull≤0 死亡链首(死窗+链锁) |
|
||||
| `die_meteor` | 陨石撕开了船身。 | 死因=陨石(lastHit 真实来源) |
|
||||
| `die_pirate` | 海盗的炮火击穿了舰体。 | 死因=海盗(含伏击——伏击者即海盗) |
|
||||
| `die_rad` | 辐射熔穿了舱壁。 | 死因=辐射 |
|
||||
| `die_adv_to` | 早下令,勤靠港,别硬扛。 | 建议:超时≥2 或泛化兜底(真话选句) |
|
||||
| `die_adv_sys` | 系统离线时,别把宝押在它身上。 | 建议:本局存在因离线失败的抉择 |
|
||||
| `rep_open` | 巡逻归来,全舰记功。剩余资源已折算功勋。 | REPORT 结算链首(gavel 位=seg_warp 音) |
|
||||
| `rate_s` | 教科书巡逻,功勋卓著。 | score ≥18(措辞=账目 §8.2) |
|
||||
| `rate_a` | 出色完成巡逻。 | ≥14 |
|
||||
| `rate_b` | 巡逻结束,有惊无险。 | ≥10 |
|
||||
| `rate_c` | 巡逻结束,遍体鳞伤。 | ≥6(完成保底) |
|
||||
| `rate_d` | 巡逻失败,弃舰撤离。 | hull≤0(失败即 D) |
|
||||
| `merit_1` | 功勋,寥寥。 | 本局功勋 ≤5 |
|
||||
| `merit_2` | 功勋,可观。 | 6-10 |
|
||||
| `merit_3` | 功勋,丰厚。 | ≥11 |
|
||||
| `settle_hook` | 星港期待你的下一次巡逻。单击,返航。 | 结算链尾(链锁解除后单击生效;键盘态播 settle_hook_k) |
|
||||
|
||||
## G7 组 · 看门狗/纠错(旁白 ×5)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `gd_cruise` | 还在巡航。上滑,巡检全舰。 | CRUISE 无操作轨第 1 级(10s,full,idle-only) |
|
||||
| `gd_decide` | 还在等命令。左右滑,听选项。 | ROUTE 12s / CRISIS 决策窗半程单级 |
|
||||
| `gd_dock` | 还在整备。左右滑,单击执行。 | DOCK 无操作轨第 1 级(15s) |
|
||||
| `gd_invalid` | 这个操作,这里用不上。 | 无效手势纠错(onceKey 同局 1 次) |
|
||||
| `hint_dock3` | 整备完毕,就启航。 | DOCK 无进展轨 L3(150s;同时自动预览启航项,不替玩家花资源) |
|
||||
|
||||
## G8 组 · 星港(旁白 ×11)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `port_open` | 星港整备,功勋兑换。左右滑看,单击定。 | 进 PORT(TITLE 右滑) |
|
||||
| `upg_spare` | 备用零件,出发自带一批物资。功勋二十。 | 改装项预览(20 功勋) |
|
||||
| `upg_harvest` | 采集协议,每段多一份资源。功勋三十。 | 30 |
|
||||
| `upg_armor1` | 加装装甲,舰体上限加一。功勋四十。 | 40 |
|
||||
| `upg_vet` | 老兵船组,开局全员忠诚加一。功勋五十。 | 50 |
|
||||
| `upg_armor2` | 重型装甲,舰体上限再加一。功勋六十。 | 60(需 armor1 已购才出现) |
|
||||
| `upg_aegis` | 应急护盾,每段首次受创减一。功勋七十。 | 70 |
|
||||
| `upg_done` | 这项已改装到位。 | PORT 预览已购项时替代价格句播报 |
|
||||
| `upg_buy` | 改装完成。 | 购买成功 |
|
||||
| `port_poor` | 功勋不够。 | 功勋不足时执行购买(error 震) |
|
||||
| `port_back` | 返回。 | 返回项(末项,回 TITLE) |
|
||||
|
||||
## GR 组 · 航线选择(旁白 ×3)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `route_ask` | 选择巡航航线。 | 段 ROUTE 入口(S2 起;首局 S1 固定稳妥线不播) |
|
||||
| `opt_route_safe` | 稳妥航线,采集平平,太平。 | 路线预览(采集 2/段,磨损 1 次;句内无数字=改装后恒真) |
|
||||
| `opt_route_rich` | 矿富航线,采得多,磨损也多。 | 路线预览(采集 4/段,磨损 2 次) |
|
||||
|
||||
## V 组 · 键盘变体(旁白 ×10;`gesture.inputMode()==='key'` 时替代同名基础句)
|
||||
|
||||
| id | 替代基础句 | 台词全文 |
|
||||
|---|---|---|
|
||||
| `sys_help_k` | sys_help | 巡航中,上键巡检全舰;危机中,方向键听选项,空格下令。下键菜单,回车重新听。 |
|
||||
| `tut_d0_k` | tut_d0 | 先试巡检。按上键,听全舰状态。 |
|
||||
| `tut_decide_k` | tut_decide | 方向键听选项,空格下令。 |
|
||||
| `cr_decide_k` | cr_decide | 听选项,空格下令。 |
|
||||
| `dock_open_k` | dock_open | 靠港整备。方向键看项目,空格执行。 |
|
||||
| `gd_cruise_k` | gd_cruise | 还在巡航。上键,巡检全舰。 |
|
||||
| `gd_decide_k` | gd_decide | 还在等命令。方向键,听选项。 |
|
||||
| `gd_dock_k` | gd_dock | 还在整备。方向键看,空格执行。 |
|
||||
| `sys_continue_ask_k` | sys_continue_ask | 检测到未完成的巡逻。空格继续,右方向键进星港。 |
|
||||
| `settle_hook_k` | settle_hook | 星港期待你的下一次巡逻。按空格,返航。 |
|
||||
|
||||
## N1 组 · 大副(NPC Dylan 平铺 ×4)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `xo_fight` | 舰长,交给我,炮位就绪! | sup_xo 同点(信赖支援进场) |
|
||||
| `xo_win` | 打得漂亮,这条航线够他们传一阵子。 | 海盗·迎战胜(res_plunder 后接播) |
|
||||
| `xo_uneasy` | 又是一路躲。舰长,弟兄们想打。 | 大副 band≤−2 首次巡检播报后(每局 1 次) |
|
||||
| `xo_aid` | 驰援是应该的,星环号不是过路人。 | 求救陷阱反杀后(站得住的驰援) |
|
||||
|
||||
## N2 组 · 工程师(NPC Eric 平铺 ×4)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `eng_wear` | 老伙计累出毛病了,让我来。 | 磨损事件(sys_*_dmg 后接播) |
|
||||
| `eng_fix` | 修好了,再听它稳稳地转。 | DOCK 修理 rep_ok 后接播 |
|
||||
| `eng_sup` | 交给我,三分钟,给它救活。 | sup_eng 同点(段末自动抢修) |
|
||||
| `eng_gripe` | 护盾不是这么用的,舰长…… | 工程师 band≤−2 首次(每局 1 次) |
|
||||
|
||||
## N3 组 · 医师(NPC Vivian 平铺 ×4)
|
||||
|
||||
| id | 台词全文 | 触发/语境 |
|
||||
|---|---|---|
|
||||
| `doc_aid` | 幸好停了船,他们撑不了多久了。 | 求救·驰援成功(res_reward 后接播) |
|
||||
| `doc_ignore` | ……我没有什么要说的。 | 求救·忽略且医师在场首次(每局 1 次) |
|
||||
| `doc_care` | 有伤员的地方,就有我。 | sup_doc 同点(段末舰体+1) |
|
||||
| `doc_trap` | 有人拿求救当诱饵,小心。 | 陷阱变体检测链(trap_hint 后接播) |
|
||||
|
||||
---
|
||||
|
||||
**合计:154 句 ≤160 上限**(旁白 142 ×2 性别 = 284 条 + NPC 平铺 12 条 = **296 条音频** ×2 格式 = 592 文件)。
|
||||
分组账:G0 10 + G1 14 + G2 30 + G3 24 + G4 10 + G5 9 + G6 16 + G7 5 + G8 11 + GR 3 + V 10 = 142(旁白);N1-N3 12(NPC)。
|
||||
检测链 = `sig_*(sfx,pan/尾音按方位)→ evt_* → dir_* →(陷阱加 trap_hint)→ cr_decide`;下令链 = `pa_chime(sfx)→ 执行音 →(不满足先 sys_*_off)→ 结果句 → 账目/忠诚句 →(NPC 接播)`;
|
||||
结算链 = `rep_open → rate_X → merit_档 → settle_hook`;死亡链 = `die_intro → die_cause → die_adv → rep_open → rate_d → merit_档 → settle_hook`;
|
||||
巡检全链 = `4×状态音(引擎→护盾→扫描→武器) →(tut_all_ok | sys_*_dmg/off…)→ st_hull → st_seg → st_rp → st_xo/st_eng/st_doc`;巡检简链 = `4×状态音 → st_hull → 最紧要异常句`;中断复述链 = `st_hull → 最紧要异常句 → st_seg → recap_go`。
|
||||
判定矩阵/忠诚账/仲裁规则对照 [22-bridge.md](22-bridge.md) §3-§8;资产规模核对见其 §9。
|
||||
@@ -0,0 +1,600 @@
|
||||
# 22 · 《星环舰长》完整设计(bridge / Star Ring Captain)
|
||||
|
||||
> **给开发者的实现要点摘要**
|
||||
> 1. 舰桥指挥 RPG:核心动词=**听声辨型后下令**。四象限系统(引擎=舰尾低频/护盾=舰首中高/扫描=左舷 pan L/武器=右舷 pan R)各有专属 SYN 状态音(正常/受损/离线);危机事件(陨石群/海盗/求救/辐射云)以**预 pan 签名音+固定模板方位句**从四象限之一来袭,玩家在时限窗内**左右滑听选项+单击下令**(规避/迎战/硬闯/驰援/忽略 五个通用动词,选项句自带系统需求)。一局=4 巡航段(段=航线选择→巡航→危机→靠港整备),15-22 分钟。
|
||||
> 2. **常态静默/按需巡检的黄金折中**(本作最大认知负荷风险):常态**不播**正常系统底噪(BGM 承担氛围),只有受损系统按仲裁规则发告警脉冲;正常系统状态由**上滑巡检链**按需播(四系统 2.0s 状态音固定顺序+固定间隔——SYN 合成,节奏逐毫秒可断言);离线=死寂+共用平线签名。
|
||||
> 3. **告警优先级仲裁+叠爆抑制**(space 警报叠爆/R1 P4 被轰炸一分钟劝退教训):显式规则表 R1-R8——一次只响一条系统告警、轮转公平、600ms 叠爆去重、语音让路、危机窗静默无关告警、双危机 FIFO 排队、修复即止、菜单/结算全静默;§3.5 穷举 7 种并发场景(含双危机)。
|
||||
> 4. 手势宪法三件套全状态保留(上滑巡检/下滑菜单/双击重听);唯一豁免 E1=CRUISE 单击=重播最近告警(escape「检查」先例)。下令绑单击(非即时,12-20s 窗口无碍);无 immediateTap;长按非玩法输入,**不开 E3 快进豁免**(登记)。
|
||||
> 5. 账目真实三本账:忠诚(事件-忠诚影响表逐行差分,档位句=ledger band)、经济(每段采集/修理/奖励逐笔,档位句跨档才播)、评级(score 公式+一条完整巡逻剧本逐事件验算 §8.4-8.6)。REPORT 结算链 800ms 手势死窗+链锁(dungeon H1/detective VERDICT/teahouse CLOSE 同款)。
|
||||
> 6. 随机性全走 seed PRNG(mulberry32,`opts.seed` 注入):危机类型序(首局固定升难度序,之后洗牌+约束 S1≠辐射)、每场方位(方位还决定受殃系统)、求救陷阱 25%(首局恒无)、磨损系统、S4 双危机余波 40%(首局无)。同 seed 深相等。
|
||||
> 7. 台词表 [22-bridge-voice-ids.md](22-bridge-voice-ids.md):旁白 142 ×2 性别 + 船员 NPC 平铺 12(3 音色,与两侧旁白零重叠)= **154 句 ≤160 上限**;操作提示句键盘变体 `_k` 集中登记(V 组 10,`gesture.inputMode()` 选播)。全句 ≤40 字(实测 ≤38)。
|
||||
> 8. 规模对标 detective/teahouse:单文件 game.js 预计 1000-1200 行;bgm 3 + sfx 30(SA3 任务 4 个,pan 派生 8 文件)+ voice 296 条(×2 格式=592 文件)。断言清单住本文档 §12(13 号文档 §20-22 先例登记)。
|
||||
|
||||
---
|
||||
|
||||
## 1. 概述
|
||||
|
||||
- **一句话**:你是巡逻舰星环号的舰长,坐在舰桥里用耳朵指挥全舰——四个系统各守一方,危机从哪个方位来、是什么东西,全凭声音判断,然后下令。
|
||||
- **题材**:舰桥指挥。核心命题「危机是从哪个方向、以什么声音来的」——纯音频天然适合:方位=预 pan 立体声+固定模板句,系统状态=可断言的状态音,指挥=听选项后下令;视觉游戏的仪表盘在这里是一套「异常才出声+按需巡检」的听觉状态层。
|
||||
- **玩法定位**(方法论 §4.1 无现成行,状态层重点自定):**状态即音色**(四系统三态音+仲裁纪律,A1/A3 的本作落地)+ **方位降维 ≤4**(左舷/右舷/舰首/舰尾,文献结论恰为上限)+ **抉择窗口标记**(检测链→决策窗→下令)+ **账目真实**(忠诚/经济/评级三本账播报值=运行值)。
|
||||
- **单局=一次巡逻**:4 个巡航段,每段=航线选择→巡航(采集+磨损+告警管理)→危机→靠港整备,约 15-22 分钟(首局含教学 17-22);章程 15-25 分钟达标。巡逻结束结算评级(S-D),功勋入**跨局舰船成长**(星港改装 6 项,roguelite 轻元进度)。
|
||||
- **失败态**:舰体归零=弃舰撤离(死亡归因链 ≤15s 必答三问,dungeon 先例);功勋按已完成段数折算,meta 不清档。
|
||||
- **与现有 12 游戏的关系**:方位声学承接 space(pan+频率双轴,本作进阶为系统/危机统一方位语言);状态档位链承接 dungeon(上滑多段链);双轨看门狗承接 dungeon E0-1/E0-2;结算死窗承接 dungeon H1/detective VERDICT;NPC 群像+签名 earcon 承接 detective/teahouse;元进度承接 dungeon 遗产;「异常才出声」承接 rpg 血量档降档才播裁定。
|
||||
- **本作三大特有风险**(均在 §3 显式预防):① 多系统并发告警听觉过载;② 状态音常驻的认知负荷;③ 忠诚度账目失真。
|
||||
|
||||
## 2. 手势映射与豁免登记
|
||||
|
||||
### 2.1 标题(TITLE)与星港(PORT,TITLE 子相位)
|
||||
|
||||
| 手势 | TITLE | PORT(右滑进入) |
|
||||
|---|---|---|
|
||||
| 单击 | 继续(有档,播 sys_continue_ask 后)/ 新巡逻(无档) | 执行当前项(购买/返回) |
|
||||
| 双击 | 重听 continue_ask | 重听当前项句 |
|
||||
| 左滑 | error | 上一项(循环) |
|
||||
| 右滑 | 进星港(功勋兑换) | 下一项(循环) |
|
||||
| 上滑 | 舰船概况链(功勋档→已改装项逐项播其 upg_* 效果句→未改装则仅功勋档) | 同 TITLE |
|
||||
| 下滑 | 菜单(§2.6) | 菜单 |
|
||||
| 长按/松开 | error | error |
|
||||
|
||||
有档单击继续 → 恢复 run + 中断复述链(§11)。PORT 列表=未购改装项(armor2 仅 armor1 已购后出现)+返回(port_back);购买 → upg_buy / port_poor(真话)。
|
||||
|
||||
### 2.2 巡航(CRUISE;含 ROUTE 航线选择子相位)
|
||||
|
||||
| 手势 | ROUTE(选航线) | CRUISE 空闲 | CRUISE 巡检链播中 |
|
||||
|---|---|---|---|
|
||||
| 左滑/右滑 | 切换航线选项(播 opt_route_*) | error 震+`gd_invalid`(onceKey) | 静默忽略(保护链播) |
|
||||
| 单击 | 选定航线 → 进巡航主体 | **重播最近告警**(60s 内的告警脉冲/事件签名;无 → cruise_ping 柔和问询音,E1) | **跳段**(跳过当前巡检段进下一段,rpg 探索跳句先例) |
|
||||
| 双击 | 重听当前选项句 | 重听最近一句语音(宪法) | 重听当前巡检段 |
|
||||
| 上滑 | 巡检链 | 巡检链(§3.3) | 重播全链 |
|
||||
| 下滑 | 菜单 | 菜单 | 菜单(打开即停链) |
|
||||
| 长按/松开 | error | 快进(语音在播时,引擎默认)/error | 快进/恢复常速 |
|
||||
|
||||
ROUTE 无倒计时:45s 无选择自动走稳妥线(不卡巡航);看门狗 12s/30s(gd_decide/null)。
|
||||
|
||||
### 2.3 危机(CRISIS:DETECT 检测 → DECIDE 决策两子相位)
|
||||
|
||||
| 手势 | DETECT(签名+类型句+方位句,~8s) | DECIDE(决策窗,倒计时) |
|
||||
|---|---|---|
|
||||
| 左滑/右滑 | 静默忽略(纯聆听保护,simon/teahouse 先例) | 切换选项(播 opt_*;循环) |
|
||||
| 单击 | 静默忽略 | **下令**(选定当前预览选项;窗内非即时,300ms tap 延迟无碍) |
|
||||
| 双击 | 静默忽略 | 重听当前选项句(宪法语义保留) |
|
||||
| 上滑 | 静默忽略 | **巡检简链**(tones→舰体档→最紧要异常,§3.3;决策窗不宜全链) |
|
||||
| 下滑 | 菜单(**冻结检测链与全部计时**) | 菜单(**冻结倒计时+告警**;关闭→重播当前选项句后继续走表) |
|
||||
| 长按/松开 | 快进(引擎默认) | error 震(选择语境不作输入,detective CONFRONT 先例) |
|
||||
|
||||
- 检测链:签名音(2.5s,预 pan/尾音)→ evt_*(类型句)→ dir_*(方位句)→ cr_decide → 自动预览第一选项 → 倒计时**从 cr_decide 落声起算**(信息先于计时,公平)。检测链顶断在播的巡检链(R4)。
|
||||
- 倒计时尾段 3s:tick_fast 每 0.5s + warning 震每 1s;到点 → cr_timeout + 该类型默认结局(§4.2 矩阵,超时=真话归因)。
|
||||
- 下令演出:pa_chime(全舰广播音)→ 选项执行音(eva_ok/wpn_fire/shield_bear/warp)→ 判定链(系统态不满足先播 sys_*_off 真话)→ 结果句+账目句 → 自动回 CRUISE 或段末。
|
||||
|
||||
### 2.4 靠港整备(DOCK)
|
||||
|
||||
非模态列表(rhythm 选曲范式:左右滑+单击确认):
|
||||
|
||||
| 手势 | DOCK |
|
||||
|---|---|
|
||||
| 左滑/右滑 | 上一项/下一项(循环):修理项(仅受损/离线系统,各一项)→ 启航(dock_go 恒为末项) |
|
||||
| 单击 | 执行:修理(升一级,扣 2 资源→rep_ok/rep_poor)/ 启航(evt_resume→下段 ROUTE) |
|
||||
| 双击 | 重听当前项句 |
|
||||
| 上滑 | 巡检链 |
|
||||
| 下滑 | 菜单 |
|
||||
| 长按 | error |
|
||||
|
||||
全系统无异常 → 仅「启航」+dock_empty。修理两级:受损→完好一步(2 资源);离线→受损→完好两步(每步 2 资源)——rep_* 句「升一级,两资源」恒真。
|
||||
|
||||
### 2.5 结算(REPORT)
|
||||
|
||||
| 手势 | 链内(死窗+链锁 §6.4) | 链完 |
|
||||
|---|---|---|
|
||||
| 单击 | **吞掉** | 返航 → TITLE(settle_hook「单击,返航」言行一致) |
|
||||
| 双击 | 吞掉 | 重听结算链 |
|
||||
| 上滑 | 吞掉 | 重听评级段(rate_X→merit_档) |
|
||||
| 下滑 | 吞掉 | 菜单 |
|
||||
| 左滑/右滑/长按 | 吞掉 | error |
|
||||
|
||||
死亡链(die_intro→die_cause→die_adv→rep_open→rate_d→merit→settle_hook)同死窗+链锁。
|
||||
|
||||
### 2.6 模态菜单(遵守 00 §5.2 全球约定,无豁免)
|
||||
|
||||
下滑呼出(冻结全部计时:危机倒计时/告警调度/巡航段计时)→ 单击循环 → 双击确认 → 上滑帮助 → 下滑关闭(关闭=回原状态+危机时重播当前选项句)。选项 4 项:回到舰桥 / 保存并回大厅 / 重新听帮助 / 放弃本次巡逻(run 清空保 meta,二次确认不设——菜单即模态)。
|
||||
|
||||
### 2.7 每状态手势映射总表(6 手势+长按松开,全状态覆盖)
|
||||
|
||||
| 手势 | TITLE | DRILL | ROUTE | CRUISE | CRISIS-检测 | CRISIS-决策 | DOCK | PORT | REPORT链内 | REPORT链完 | MENU |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| 单击 | 继续/新巡逻 | 步骤作答 | 选定航线 | 重播告警/跳段 | 忽略 | **下令** | 执行项 | 执行项 | 吞 | 返航 | 循环切项 |
|
||||
| 双击 | 重听 | 重听教学句 | 重听选项 | 重听最近句 | 忽略 | 重听选项句 | 重听项句 | 重听项句 | 吞 | 重听链 | 确认执行 |
|
||||
| 左滑 | error | 教学指定/err | 上一选项 | err+纠错 | 忽略 | 上一选项 | 上一项 | 上一项 | 吞 | err | 上一项 |
|
||||
| 右滑 | 进星港 | 同上 | 下一选项 | 同上 | 忽略 | 下一选项 | 下一项 | 下一项 | 吞 | err | 下一项 |
|
||||
| 上滑 | 概况链 | 巡检链(教后) | 巡检链 | 巡检链 | 忽略 | 巡检简链 | 巡检链 | 概况链 | 吞 | 评级段 | 帮助 |
|
||||
| 下滑 | 菜单 | 菜单/跳教学 | 菜单 | 菜单 | 菜单(冻结) | 菜单(冻结) | 菜单 | 菜单 | 吞 | 菜单 | 关闭 |
|
||||
| 长按 | error | error | error | 快进/err | 快进 | error | error | error | 吞 | error | error |
|
||||
| 长按松开 | — | — | — | 恢复常速 | 恢复 | — | — | — | — | — | — |
|
||||
|
||||
无效手势一律 error 震;full 档 `gd_invalid`(onceKey 同局 1 次);idle-only(引擎 guide 已实现)。
|
||||
|
||||
### 2.8 豁免登记(必须显式)
|
||||
|
||||
| # | 豁免条目 | 理由(先例) |
|
||||
|---|---|---|
|
||||
| E1 | CRUISE 空闲单击=重播最近告警(非「确认」) | 「检查」类非即时操作(escape 单击=检查、dungeon 单击=脉冲同款);60s 内无告警播 cruise_ping(空态反馈,绝不静默);巡检链播中单击=跳段(12 号 rpg 探索跳句口径) |
|
||||
| E2 | CRISIS 决策窗长按=error(快进天然失效) | 选择语境不作输入(detective CONFRONT 同款);决策窗内通常无语音在播,引擎快进无对象,无冲突 |
|
||||
|
||||
**不设 E3**:长按不是本作玩法输入,`setRateBoostEnabled` 全状态保持默认开启(登记,与 dungeon E3 相反的裁定依据)。无 immediateTap;下令绑单击(12-20s 窗口,非即时判定)。
|
||||
|
||||
## 3. 四象限系统信息设计(核心)
|
||||
|
||||
### 3.1 方位语言与预 pan 方位表(≤4 铁律)
|
||||
|
||||
全作统一一套方位语言,系统与危机共用(教一次通吃;04-space「pan+频率双轴」进阶):
|
||||
|
||||
| 方位 | 声学编码 | 资产工艺 |
|
||||
|---|---|---|
|
||||
| 左舷 port | 能量只在左声道 | 预 pan 派生 `_l`(ffmpeg stereotools,dungeon mob_step 工艺) |
|
||||
| 右舷 starboard | 能量只在右声道 | 预 pan 派生 `_r` |
|
||||
| 舰首 bow | 中央+**上行尾音** dir_bow(0.3s,600→1200Hz) | center+SYN 尾音 |
|
||||
| 舰尾 stern | 中央+**下行尾音** dir_stern(0.3s,1200→500Hz) | center+SYN 尾音 |
|
||||
|
||||
- 系统常驻方位(固定舰桥布局,intro_3..5 教学):引擎=舰尾(低频族)、护盾=舰首(中高频族)、扫描=左舷(pan L)、武器=右舷(pan R)。
|
||||
- 危机方位:seed 四方位均匀;**方位有机制意义**——未化解危机的「受殃系统」副作用落在方位对应系统(该系统已离线则顺时针下一系统:左舷扫描→右舷武器→舰首护盾→舰尾引擎)。intro_5「危机从哪边来,哪边先遭殃」承诺必兑现(playtest 锁定)。
|
||||
- 危机方位播报=固定模板句 dir_port/star/bow/stern(方位,X舷/舰首/舰尾),无连续角度、无数字。
|
||||
|
||||
### 3.2 系统状态音规格(全 SYN,节奏精确可断言)
|
||||
|
||||
三态:`ok` 正常 / `dmg` 受损 / `off` 离线。巡检链按固定顺序 引擎→护盾→扫描→武器 播放:每音 **2.0s±50ms**、间隔 **0.4s**;SYN 程序合成(参数写死在 gen 脚本,playtest 虚拟时钟逐毫秒断言)。
|
||||
|
||||
| 系统(方位/频带) | ok(2.0s) | dmg(2.0s 巡检用) | off | 告警脉冲(常态用) |
|
||||
|---|---|---|---|---|
|
||||
| 引擎(舰尾/60-110Hz) | 两记低鸣脉冲各 0.45s,t=0.0/1.05 | 三记断奏闷咳 0.25s,t=0.0/0.7/1.4,第三记加失真 | **死寂+平线签名** sys_offline(180Hz×3 慢平音各 0.15s,t=0.0/0.7/1.4,全系统共用) | alm_engine 0.45s 单声闷咳,周期 **8s** |
|
||||
| 护盾(舰首/1.2-2.8kHz) | 均匀薄雾嗡垫 2.0s 无起伏 | 同垫+8Hz 抖颤,两次熄灭(t=0.5-0.7/1.3-1.6) | 同上 | alm_shield 0.4s 闪烁哔,周期 **6s** |
|
||||
| 扫描(左舷/800-1600Hz pan L) | 两声匀速扫掠各 0.6s,t=0.2/1.2 | 单声扫掠+尾部杂斑 0.3s(t=1.4) | 同上 | alm_scan 0.5s 失锁双哔,周期 **10s** |
|
||||
| 武器(右舷/400-900Hz pan R) | 单音渐强充能 1.6s 满充收尾 | 两次短充中断各 0.5s,t=0.2/1.1,各带中断嘶 | 同上 | alm_weapon 0.5s 欠充降调,周期 **12s** |
|
||||
|
||||
- 音量:巡检音 0.7 / 告警脉冲 0.8 / 平线 0.7 / 危机签名 0.9;四系统频带+节奏型零重叠(偶发瞬时叠听不糊,Brewster 指南)。
|
||||
- 四系统告警周期互质(6/8/10/12s)——双受损时脉冲落点天然错开,再叠加 R1 串行化,双保险防融合成噪音墙。
|
||||
|
||||
### 3.3 巡检链(上滑)——「常态静默/按需巡检」黄金折中
|
||||
|
||||
**常态只播异常系统**(rpg「降档才播」裁定的系统版):正常系统在巡航中**零发声**(氛围由 bgm/cruise 承担),受损系统按 §3.4 仲裁发告警脉冲;全部状态可随时上滑巡检。
|
||||
|
||||
```
|
||||
全链(CRUISE/DOCK/ROUTE,~15-40s):
|
||||
4×状态音(固定序) →(全 ok → tut_all_ok;否则逐个 sys_*_dmg/off 异常句)
|
||||
→ st_hull_档 → st_seg_段 → st_rp_档 → st_xo/st_eng/st_doc 三档 → 完
|
||||
简链(CRISIS 决策窗,≤10s):4×状态音 → st_hull_档 → 最紧要异常句(仲裁榜首)
|
||||
中断复述链(恢复存档,§11):st_hull_档 → 最紧要异常句(无则跳过) → st_seg_段 → recap_go
|
||||
```
|
||||
|
||||
- 巡检链可被危机检测链顶断(R4)、可被单击跳段(E1)、可被菜单停止——按需查询永远让位于游戏事件。
|
||||
- 最紧要异常=§3.4 仲裁榜首系统(与耳朵里正在响的告警同源——听到的与查到的永不矛盾,单源)。
|
||||
|
||||
### 3.4 告警优先级仲裁与叠爆抑制(显式规则表,R1-R8)
|
||||
|
||||
**总优先级**(高→低):`voice 通道(下令/结算/归因)` > `A1 危机签名+方位链` > `A2 决策窗尾段 tick` > `A3 受损系统告警(轮转)` > `静默`。声流预算恒 ≤2(BGM+1 条内容声流;voice 播出时 BGM duck→voice+≤1 sfx)。
|
||||
|
||||
| # | 规则 | 内容 | 先例/教训 |
|
||||
|---|---|---|---|
|
||||
| R1 | **单告警纪律** | 同一时刻至多 1 条系统告警在响。多系统受损时按序取 1:① 危机关联系统优先(陨石→引擎/护盾/武器;海盗→武器/引擎;求救→扫描;辐射→引擎/护盾)② 无危机时威胁序 引擎>护盾>武器>扫描 | 「一次只报最要紧的」队列纪律;space R1 P4 被警报轰炸一分钟劝退 |
|
||||
| R2 | **轮转公平** | 落选告警排队不丢弃:榜首连响 15s 让位次位 5s(双受损 3:1 轮转;三受损 10/5/5s);周期到点恰逢他人时段 → 顺延一拍 | 低位告警不被饿死,也不抢话 |
|
||||
| R3 | **叠爆去重** | 同一告警 id 600ms 窗口内重复调度只响一次;不同 id 由 R1 天然串行 | space F6 裁定原样移植 |
|
||||
| R4 | **语音让路** | voice 播出期间(isVoicePlaying)A3 告警**暂停调度(延迟不丢弃)**,voice 结束+0.5s 恢复;A1 检测链顶断在播巡检链(游戏事件>主动查询);A2 tick 不让路(voice+tick=2 声流) | A3 信息分层;rpg「指令名礼让」同思路 |
|
||||
| R5 | **危机窗静默无关告警** | 决策窗内仅危机关联受损系统告警参与 R1;无关系统告警挂起至危机结算 | 决策窗认知带宽保护(P4) |
|
||||
| R6 | **双危机排队** | 同一时刻至多 1 场危机占决策窗。第二场检测到点落在第一场决策窗/结算链内 → FIFO 顺延至第一场结算句落声+2s 再播检测链;其决策窗从自身检测链起算。**绝不叠加两套签名音** | 结算死窗 H1 同源纪律 |
|
||||
| R7 | **修复即止** | 修理/支援修复使系统恢复 → 该系统告警立即截断、排队项移除,播 rep_ok/sup_eng | 修复的听觉回报要干净 |
|
||||
| R8 | **菜单/结算全静默** | MENU 打开 → 告警调度+危机倒计时+段计时全部冻结(恢复按当前榜首续响,不回放积压);REPORT/死亡链 → 全部告警清空(链独占) | 00 §5.2 暂停语义;dungeon H1 |
|
||||
|
||||
### 3.5 双危机并发穷举(仲裁完备性自证)
|
||||
|
||||
S4 有 40%(seed)第二波危机(陨石余波,固定型)。全部并发场景 × 适用规则:
|
||||
|
||||
| # | 场景 | 适用规则 | 行为 |
|
||||
|---|---|---|---|
|
||||
| S1 | 危机 A 决策窗内,危机 B 检测到点 | R6 | B 检测链顺延至 A 结算句+2s;窗内零 B 声 |
|
||||
| S2 | 危机 A 结算链(voice)播中,B 检测到点 | R6+R4 | B 等 A 链完+2s;期间 A3 全让路(R4) |
|
||||
| S3 | B 已排队,A 玩家下令前菜单打开 | R8+R6 | 菜单冻结一切;关闭后 A 倒计时续走,B 仍排队 |
|
||||
| S4 | 双受损告警轮转中,危机 A 检测 | R1①+R6 | 签名抢占 2.5s;窗内仅关联系统告警(R5),轮转按 3:1 在关联集内继续 |
|
||||
| S5 | 语音(结果句)在播,告警周期到点 | R4 | 告警延迟至 voice+0.5s |
|
||||
| S6 | 决策窗尾段 3s(tick)撞告警周期 | 优先级 A2>A3 | tick 先响,告警顺延一拍 |
|
||||
| S7 | REPORT 进入时仍有受损系统 | R8 | 告警清空,结算链独占 |
|
||||
|
||||
七场景全部有确定性行为与 playtest 断言(§12.5);不存在「两套签名重叠」「双告警齐鸣」「B 计时偷跑」三条红线(§12 失败即不通过)。
|
||||
|
||||
## 4. 危机事件卡系统
|
||||
|
||||
### 4.1 事件类型表
|
||||
|
||||
| 类型 | 音频签名(SA3 2.5s) | 方位 | 时限 | 选项(通用动词句) | 超时默认 |
|
||||
|---|---|---|---|---|---|
|
||||
| 陨石群 | 碎石呼啸雨(多次掠空+碎击) | seed 四方位 | **12s** | 规避/迎战/硬闯 | ≡硬闯 |
|
||||
| 海盗 | 敌船引擎轰鸣+充能啸音 | seed | **15s** | 迎战/规避/忽略 | 先挨打 hull−2 |
|
||||
| 求救信号 | 断续三短求救码(背景杂讯) | seed | **20s** | 驰援/忽略 | 信号消失(无伤) |
|
||||
| 辐射云 | 盖革计数急响渐密 | seed | **10s** | 规避/硬闯 | 受照 hull−1+受殃系统受损 |
|
||||
|
||||
- 每局=四类型各一场(§4.3 生成规则)——「危机全类型路径」每局自然全覆盖。
|
||||
- 陷阱变体:求救 25%(首局恒无)——签名尾部混入微弱引擎声,检测链播 trap_hint 提示(+doc_trap NPC 接播;「求救码后面,有引擎声,多留心」——先给线索再做决定,公平)。
|
||||
|
||||
### 4.2 选项-系统态结果矩阵(判定与账目单源;系统不满足先播 sys_*_off 真话再计结局)
|
||||
|
||||
**陨石群**:
|
||||
|
||||
| 选项 | 引擎/武器/护盾 ok | 相关系统受损 | 相关系统离线 |
|
||||
|---|---|---|---|
|
||||
| 规避(引擎) | res_clean 无伤 | 擦伤 hull−1(res_hurt) | sys_engine_off→hull−2(res_bad) |
|
||||
| 迎战轰开(武器) | res_mine +1 资源,大副+1 | hull−1(res_hurt) | sys_weapon_off→hull−2 |
|
||||
| 硬闯(护盾) | 无伤但护盾受损(sys_shield_dmg+工程师−1) | hull−2(res_bad) | sys_shield_off→hull−2 |
|
||||
| 超时 | ≡硬闯(含护盾 ok 时的工程师−1——被动硬闯同为真话账) | | |
|
||||
|
||||
**海盗**:
|
||||
|
||||
| 选项 | ok | 受损 | 离线 | 附注 |
|
||||
|---|---|---|---|---|
|
||||
| 迎战(武器) | 胜:战利+2 资源(res_plunder)、大副+1、**基础 hull−1**;大副信赖(≥2)→sup_xo 战果升一级 hull−0;大副离心(≤−2)→hull−2 | 胜但 hull−2、战利+2 | sys_weapon_off→惨败 hull−3(res_bad) | sup_xo 在下令瞬间按 band 判定 |
|
||||
| 规避(引擎) | 甩脱无伤、大副−1(loy_evade_pirate) | hull−1 擦脱 | 没跑掉 hull−2 | |
|
||||
| 忽略/超时 | 先挨打 hull−2、医师−1 | 同左 | 同左 | |
|
||||
|
||||
**求救信号**:
|
||||
|
||||
| 选项 | 扫描 ok | 扫描受损 | 扫描离线 | 陷阱变体 |
|
||||
|---|---|---|---|---|
|
||||
| 驰援(扫描) | res_reward +2 资源、医师+1 大副+1(loy_aid) | 成功但残骸刮蹭 hull−1 | sys_scan_off→找不到,无事发生(无惩罚无忠诚变化) | 武器 ok→伏击反杀 res_plunder +2、大副+1;武器受损/离线→res_ambush hull−2、医师−1 |
|
||||
| 忽略/超时 | loy_ignore 医师−1,无其他惩罚 | 同左 | 同左 | 忽略=明智避开,零损益 |
|
||||
|
||||
**辐射云**:
|
||||
|
||||
| 选项 | ok | 受损 | 离线 |
|
||||
|---|---|---|---|
|
||||
| 规避(引擎) | res_clean | hull−1(res_hurt) | 规避不动→受照结局 |
|
||||
| 硬闯(护盾) | 无伤但护盾受损一级、工程师−1 | hull−2(res_bad) | 同受照 |
|
||||
| 超时 | res_rad:hull−1+**方位对应系统受损一级**(已受损则离线;已离线则顺时针下一系统) | | |
|
||||
|
||||
受创一律 hit_hull 音+hit 震;资源入账 res_pick+pickup 震;舰体跌档跨档播 st_hull(双向)。
|
||||
|
||||
### 4.3 seed 用法与生成规则
|
||||
|
||||
```
|
||||
rng = mulberry32(seed) // dungeon/detective 同族
|
||||
正式局 seed = Math.floor(Math.random()*1e9),开局掷一次存入 run
|
||||
生成期一次性洗牌/抽取(存 run.plan,读档复用不重洗):
|
||||
① 危机类型序:首局固定 [求救,陨石,海盗,辐射](难度递增+教学耦合);
|
||||
非首局 = Fisher-Yates 洗牌 + 约束 S1≠辐射(10s 窗不宜开局)
|
||||
② 每场方位:uniform{左舷,右舷,舰首,舰尾}(决定签名 pan/尾音与受殃系统)
|
||||
③ 求救陷阱:25% Bernoulli(首局恒 false)
|
||||
④ 磨损:每段 1 次(S1 无;矿富航线 2 次),目标=当前 ok 系统 uniform
|
||||
⑤ S4 双危机余波:40%(首局恒 false;第二波固定陨石余波+seed 方位)
|
||||
复现断言:同 seed 两次构造 → run.plan 深相等(类型序/方位/陷阱/磨损/余波逐项)
|
||||
```
|
||||
|
||||
巡航段长(固定,不随机):S1 90s / S2 100s / S3 110s / S4 120s(节奏曲线 §13)。
|
||||
|
||||
## 5. 船员忠诚系统
|
||||
|
||||
船员固定 3 人(大副/工程师/医师,开局全员 0,clamp −3..+3)。忠诚=抉择的长期回声:每一次危机抉择按表入账,档位句从同一 ledger 读出(播报值=运行值)。
|
||||
|
||||
### 5.1 事件-忠诚影响表(全量;与 §4.2 矩阵同源)
|
||||
|
||||
| 事件·抉择 | 大副 | 工程师 | 医师 | 即时句 |
|
||||
|---|---|---|---|---|
|
||||
| 求救·驰援成功(含陷阱反杀) | +1 | 0 | +1 | loy_aid;NPC 接播:普通驰援→doc_aid、陷阱反杀→xo_aid |
|
||||
| 求救·驰援但扫描离线未遂 | 0 | 0 | 0 | sys_scan_off(无忠诚账) |
|
||||
| 求救·陷阱受伏(武器不可用) | 0 | 0 | −1 | res_ambush+loy_rad?——用 loy_rad(医师处理伤员) |
|
||||
| 求救·忽略/超时 | 0 | 0 | −1 | loy_ignore / doc_ignore(NPC) |
|
||||
| 陨石·迎战轰开 | +1 | 0 | 0 | res_mine+loy_fight_win |
|
||||
| 陨石·硬闯/超时(护盾扛) | 0 | −1 | 0 | loy_breach / eng_gripe(NPC,≤−2 时) |
|
||||
| 陨石·规避 | 0 | 0 | 0 | — |
|
||||
| 海盗·迎战(胜) | +1 | 0 | 0 | loy_fight_win / xo_win(NPC) |
|
||||
| 海盗·规避 | −1 | 0 | 0 | loy_evade_pirate |
|
||||
| 海盗·忽略/超时(受创) | 0 | 0 | −1 | res_bad+loy_rad |
|
||||
| 辐射·硬穿(护盾) | 0 | −1 | 0 | loy_breach |
|
||||
| 辐射·超时受照 | 0 | 0 | −1 | res_rad+loy_rad |
|
||||
| 辐射·规避 | 0 | 0 | 0 | — |
|
||||
|
||||
### 5.2 档位与措辞(逐值为真)
|
||||
|
||||
| 档 | 区间 | 句(每成员一句) | 措辞↔账目 |
|
||||
|---|---|---|---|
|
||||
| 离心 | ≤−2 | st_xo_1「大副,离心。」等 ×3 成员 | 「离心」=band≤−2(支援缺席+NPC 撂话:xo_uneasy/eng_gripe/doc_ignore 首次各一句,每局 1 次) |
|
||||
| 平常 | −1..+1 | st_*_2 ×3 | 「平常」=band∈[−1,1] |
|
||||
| 信赖 | ≥2 | st_*_3 ×3 | 「信赖」=band≥2(关键支援激活) |
|
||||
|
||||
档位只在巡检链播(跨档即时句由 5.1 的 loy_* 承担,二者并存不矛盾:loy 句说事件、band 句说状态)。
|
||||
|
||||
### 5.3 关键支援触发条件(档位的机制回报)
|
||||
|
||||
| 成员 | 触发点 | 条件 | 效果 | 播报 |
|
||||
|---|---|---|---|---|
|
||||
| 大副 | 海盗·迎战 下令瞬间 | band≥2 | 战果升一级(hull−1→0;基础本就含 −1) | sup_xo+xo_fight(NPC) |
|
||||
| 工程师 | 段末(DOCK 进入前) | band≥2 且有受损/离线系统 | 自动修 1 级(受损最重者;R7 即止) | sup_eng+eng_sup(NPC) |
|
||||
| 医师 | 段末(DOCK 进入前) | band≥2 且本段 hull 净减 ≥1 | 舰体+1(不超上限) | sup_doc+doc_care(NPC) |
|
||||
| 任一 | 支援条件不满足(本该触发) | band<2 | 支援缺席 | sup_none(每局限 1 次,之后静默) |
|
||||
|
||||
大副离心(≤−2)附加:海盗迎战战果降一级(hull−1→−2)——与信赖对称,不引入新句子(数值账 playtest 锁定)。工程师/医师离心=支援缺席(无额外惩罚,avoid rep_* 句价目失真)。
|
||||
|
||||
## 6. 状态机
|
||||
|
||||
### 6.1 状态列表
|
||||
|
||||
`TITLE / DRILL(首局教学态,寄生于 S1) / CRUISE(ROUTE+主体) / CRISIS(DETECT+DECIDE) / DOCK / REPORT` + `MENU`(挂起 overlay,记录返回态);PORT=TITLE 子相位。
|
||||
|
||||
### 6.2 转移图
|
||||
|
||||
```
|
||||
start ──> TITLE ──tap(有档)──> 恢复 run+中断复述链 → CRUISE/当前段
|
||||
│tap(无档) ├──────> DRILL(仅首局, meta.drillDone) ──完成/下滑跳过──> CRUISE(S1)
|
||||
│右滑=PORT(功勋改装) │
|
||||
v v
|
||||
CRUISE(段n) ──段计时到──> CRISIS(类型=plan[n]) ──下令/超时结算──> (n<4) DOCK(evt_dock) ──启航(evt_resume)──> CRUISE(n+1)
|
||||
│S4 余波:结算后 2s 若有余波 → 再入 CRISIS(余波) → 结算 │n=4
|
||||
└──任意时刻 hull≤0──> REPORT(死亡链) v
|
||||
REPORT(巡逻结算链) ──tap──> TITLE
|
||||
任意正交态 ──下滑──> MENU(冻结计时) ──关闭──> 原状态(危机时重播当前选项句)
|
||||
```
|
||||
|
||||
### 6.3 语音链推进契约
|
||||
|
||||
- 检测链/结果链/结算链=onComplete 串行(句间 0.8s);单句 8s 无 onComplete(资产缺失)→ 告警续链(「屏蔽任意 voice 流程不卡死」契约;危机兜底=超时默认结局自动推进)。
|
||||
- 教学链 `_speakGuarded` 串行(radio/dungeon D0-1 引擎保险丝先例,杜绝同 tick 双调度抢占)。
|
||||
- REPORT/死亡链为**独占链**:链首停看门狗与全部告警(R8)。
|
||||
|
||||
### 6.4 REPORT 死窗与链锁(dungeon H1 内化)
|
||||
|
||||
进 REPORT 即盖 `REPORT_GRACE_MS=800` 戳(touchstart+450ms 长按+300ms 双击窗 ≈750ms,800 全盖);死窗内一切手势吞掉(ghost 手势不算输入、不碰看门狗)。链锁:链尾 settle_hook 落声前单击/右滑/长按一律吞掉;链完成后单击=返航(settle_hook「单击,返航」言行一致,simon round1-live 教训)。双击=重听链仅链完成后受理。
|
||||
|
||||
## 7. 教学编排(DRILL,首局寄生于 S1 求救)
|
||||
|
||||
每步=一句短旁白→等待实操→反馈;做错重教同一步(**新短句 ≤2 次**)后自动演示通过;下滑=跳过(tut_skip),`meta.drillDone` 持久化。首局 S1 求救**恒无陷阱**(tut_aid「我们的扫描,稳得很」承诺必兑现——S1 无磨损保证扫描 ok)。
|
||||
|
||||
| 步 | 旁白 | 等待动作 | 通过条件/反馈 |
|
||||
|---|---|---|---|
|
||||
| D0 | intro_1..5 → tut_d0 | 上滑 | 巡检全链(全 ok)+tut_all_ok。**首输入 ≈t+25s(<60s ✓)** |
|
||||
| D1 | tut_crisis | (检测链自动)听签名+类型句+方位句 | 求救检测链播完(纯聆听) |
|
||||
| D2 | tut_decide → tut_aid | 左右滑预览 → 单击下令「驰援」 | pa_chime→执行→res_reward+loy_aid+doc_aid→tut_after。**首正反馈 ≈t+2.5-3min(≤3min ✓)** |
|
||||
| D3 | tut_loyal | 上滑 | 巡检链(听到三档船员句) |
|
||||
| D4 | tut_done | — | 进自由巡航(S1 主体) |
|
||||
|
||||
- 学期零惩罚:S1 无磨损、求救超时=信号消失(无伤无资源损失,cr_timeout 真话);DRILL 内乱按不可能掉血掉资源。
|
||||
- 教学无进展轨(E0-2 先例):30s earcon→60s 短句→90s 自动演示通过(自动驰援)。
|
||||
|
||||
## 8. 数值与经济
|
||||
|
||||
### 8.1 资源经济(每局两本账:舰体 hull / 资源点 RP)
|
||||
|
||||
```
|
||||
hull:初始/上限 6(armor1→7、armor2→8)。伤害单位 1-3/次。≤0 → 死亡链。
|
||||
RP:段首采集入账(稳妥线 2 / 矿富线 4;采集协议改装后 3/5)+ 奖励(矿材 1/战利 2/报酬 2)
|
||||
− 修理(每级 2)。REPORT 时 剩余 RP ÷3 向下取整 → 折算功勋(资源不白攒)。
|
||||
磨损:每段 1 次(矿富 2 次)随机 ok 系统受损一级(受损→离线)。
|
||||
st_rp 档:0-2 紧张 / 3-6 够用 / ≥7 充足(跨档才播、双向播,播报值=运行值)
|
||||
st_hull 档(按比例,兼容上限升级):≥75% 稳固 / 40-74% 带伤 / <40% 危急
|
||||
```
|
||||
|
||||
### 8.2 评级公式(措辞↔账目一一对应)
|
||||
|
||||
```
|
||||
score = 完成段数×2(满 8) + 舰体剩余(绝对值) + 驰援成功×2 + 击退海盗×2(含伏击反杀)
|
||||
+ 全程无系统离线×1
|
||||
S ≥18 / A ≥14 / B ≥10 / C ≥6(完成巡逻保底 8+0=8 → C 封底)
|
||||
D = 巡逻失败(hull≤0 弃舰撤离)
|
||||
功勋 = 完成段数 + 评级加成(S+8/A+5/B+3/C+1/D+0) + floor(剩余RP/3)
|
||||
```
|
||||
|
||||
### 8.3 升级树(星港·功勋,跨局保留;dungeon 遗产模式)
|
||||
|
||||
| 改装 | 功勋 | 效果 |
|
||||
|---|---|---|
|
||||
| upg_spare 备用零件 | 20 | 开局自带物资(RP +2) |
|
||||
| upg_harvest 采集协议 | 30 | 每段采集 +1(路线句无数字,恒真) |
|
||||
| upg_armor1 加装装甲 | 40 | 舰体上限 6→7 |
|
||||
| upg_vet 老兵船组 | 50 | 开局全员忠诚 +1 |
|
||||
| upg_armor2 重型装甲(需 armor1) | 60 | 舰体上限 7→8 |
|
||||
| upg_aegis 应急护盾 | 70 | 每段首次舰体伤害 −1(减至 0 则无伤播报) |
|
||||
|
||||
经济核算:S 局功勋 14-15 / B 局 7-8 / 失败局 3-4 → 早期改装 2-3 局一件、全套 18-25 局(dungeon 遗产 2-5 局一件同量级)。
|
||||
|
||||
### 8.4 剧本 A「教科书巡逻」逐事件验算(评级账目直证)
|
||||
|
||||
首局,全稳妥线,危机序 求救→陨石→海盗→辐射;开局 hull 6 / RP 0 / 忠诚 0/0/0:
|
||||
|
||||
| # | 阶段/事件 | 抉择与系统态 | 结算 | 账目(hull/RP/大副/工程师/医师) |
|
||||
|---|---|---|---|---|
|
||||
| 1 | S1 巡航 90s | 采集 +2 | res_pick | 6 / 2 / 0 / 0 / 0 |
|
||||
| 2 | S1 求救(左舷,无陷阱) | 驰援(扫描 ok,D2 教学) | res_reward +2;loy_aid | 6 / 4 / **1** / 0 / **1**(RP 2→4 跨档播 st_rp_2 ✓) |
|
||||
| 3 | DOCK1 | 全好 | dock_empty+dock_go | 6 / 4 / 1 / 0 / 1 |
|
||||
| 4 | S2 巡航 100s | 采集 +2;磨损:扫描受损 | alm+sys_scan_dmg+eng_wear | 6 / 6 / 1 / 0 / 1 |
|
||||
| 5 | S2 陨石群(舰尾) | 迎战轰开(武器 ok) | res_mine +1;大副+1 | 6 / 7 / **2** / 0 / 1(RP 6→7 跨档播 st_rp_3 ✓;大副跨档→下次巡检 st_xo_3 信赖) |
|
||||
| 6 | DOCK2 | 修扫描 −2 | rep_ok(RP 7→5 跨档回 st_rp_2 ✓) | 6 / 5 / 2 / 0 / 1 |
|
||||
| 7 | S3 巡航 110s | 采集 +2;磨损:引擎受损 | alm+sys_engine_dmg | 6 / 7 / 2 / 0 / 1 |
|
||||
| 8 | S3 海盗(右舷) | 迎战(武器 ok;**大副 band 2 → sup_xo**:战果升一级 hull−1→0) | res_plunder +2;sup_xo;loy_fight_win | 6 / 9 / **3** / 0 / 1(RP 7→9 跨档 st_rp_3 ✓) |
|
||||
| 9 | DOCK3 | 修引擎 −2 | rep_ok | 6 / 7 / 3 / 0 / 1 |
|
||||
| 10 | S4 巡航 120s | 采集 +2;磨损:护盾受损 | alm+sys_shield_dmg | 6 / 9 / 3 / 0 / 1 |
|
||||
| 11 | S4 辐射云(舰首) | 规避(引擎 ok,已修) | eva_ok+res_clean | 6 / 9 / 3 / 0 / 1 |
|
||||
| 12 | REPORT | score=4×2+6+1×2+1×2+1=**19 → S**;功勋=4+8+floor(9/3)=**15** | rate_s+merit_3 | 全档位句=ledger ✓ |
|
||||
|
||||
验算结论:每个跨档播报点的实值都在区间内;三次忠诚变动全落 loy 句;支援触发(大副)与 band 一致;S 级在含两次磨损的现实局内可达。
|
||||
|
||||
### 8.5 剧本 B「挂机超时」验算(受创路径+缺席差分)
|
||||
|
||||
全超时、全稳妥线:S1 求救超时(cr_timeout+loy_ignore,医师−1)RP 2 → S2 陨石超时≡硬闯(护盾 ok→护盾受损+工程师−1)→ DOCK2 修扫描 −2(护盾修不起,rep_poor 可达)→ S3 海盗超时 hull−2+医师−1(→−2 离心)→ DOCK3 修引擎? (S3 磨损=引擎受损)−2 → S4 辐射超时 hull−1+受殃系统受损(扫描再次)。
|
||||
REPORT:hull 3、驰援 0、击退 0、无离线 +1 → score=8+3+0+0+1=**12 → B**;功勋=4+3+floor(4/3)=**8**。医师 band −2=离心(st_doc_1 真话;段末 hull 净减但 sup 缺席——与剧本 A 的支援在场形成差分断言对)。
|
||||
|
||||
### 8.6 失败路径(注入验算)
|
||||
|
||||
注入 hull=3、sys.weapon=off,S3 海盗选迎战 → sys_weapon_off→hull−3→0 → 死亡链:die_intro→die_pirate(最后伤害源=海盗炮火)→die_adv_sys(本局存在因离线失败的抉择)→rep_open→rate_d→merit_1→settle_hook;功勋=3 段+0+floor(RP/3)。die_cause 按 lastHit 真实来源、die_adv 按行为记录(超时≥2→die_adv_to;存在离线失败→die_adv_sys;否则 die_adv_to 泛化建议句)——三问归因真话律锁定。
|
||||
|
||||
## 9. 音频三层
|
||||
|
||||
### 9.1 BGM(3 首,Mureka instrumental,-20 LUFS,ogg+m4a,无缝循环)
|
||||
|
||||
| id | 状态映射 | Mureka prompt(英文) |
|
||||
|---|---|---|
|
||||
| bgm/menu | TITLE / MENU / DOCK / PORT / REPORT(结算 volume 0.5) | "Quiet spaceport ambient, warm slow synth pads, soft beacon pings, dignified and calm, no drums, no vocals, seamless loop" |
|
||||
| bgm/cruise | DRILL / CRUISE(含 ROUTE) | "Space patrol cruise theme, steady pulsing synth bass at 80 bpm, sparse bell melody, wide starfield ambience, watchful and hopeful, no vocals, seamless loop" |
|
||||
| bgm/crisis | CRISIS(检测链起,交叉淡入) | "Tense starship bridge cue, pulsing low ostinato at 100 bpm, sparse alarm-like stabs, rising dread but restrained mix, no vocals, seamless loop" |
|
||||
|
||||
切换全走引擎 crossfade;voice duck 20% 引擎自动。crisis 曲**特意 restrained**——给签名音/告警/语音让频带(§3.4 声流预算)。danger 不换曲(guide danger earcon+st_hull_3 承担)。预算:3 曲 ×2 候选=6 任务 $0.18(上限内)。
|
||||
|
||||
### 9.2 SFX(30 个基 id;SA3=Stable Audio 3,SYN=程序合成;双格式、真峰值 ≤-3dBFS)
|
||||
|
||||
| 类别 | id | 方式 | 说明 |
|
||||
|---|---|---|---|
|
||||
| 系统状态音 | `sys_engine_ok/dmg` `sys_shield_ok/dmg` `sys_scan_ok/dmg` `sys_weapon_ok/dmg` | **SYN** | §3.2 规格(2.0s/间隔 0.4s/频带/节奏全部写死——playtest 逐毫秒断言) |
|
||||
| 离线签名 | `sys_offline` | SYN | 180Hz×3 慢平音,全系统共用(死寂=统一语言) |
|
||||
| 告警脉冲 | `alm_engine` `alm_shield` `alm_scan` `alm_weapon` | SYN | 0.4-0.5s 受损签名压缩单响,周期 8/6/10/12s(互质) |
|
||||
| 方位尾音 | `dir_bow` `dir_stern` | SYN | 上行/下行双音 0.3s |
|
||||
| 危机签名 | `sig_meteor` `sig_pirate` `sig_distress` `sig_radiation`(center)+ ffmpeg pan 派生 `_l/_r` ×4 | **SA3×4** | "dense meteor swarm passing close, multiple rock whooshes and rubble impacts, dry, tight" / "hostile spacecraft engine roar with weapon charging whine, menacing" / "repeating three-short radio distress beeps through static, deep space" / "geiger counter clicking rapidly intensifying, eerie space ambience";派生工艺同 dungeon mob_step(stereotools sbal ±0.8) |
|
||||
| 下令/演出 | `pa_chime` | SYN | 全舰广播双音 0.5s(下令前缀仪式) |
|
||||
| | `eva_ok` `wpn_fire` `shield_bear` `warp` | SYN | 侧推掠风/炮击低频+高吱尾/承击闷鸣/驰援跃迁滑音(各 0.7-1.2s) |
|
||||
| | `hit_hull` | SYN | 船体受创闷击 0.5s(120Hz+金属残响) |
|
||||
| | `res_pick` | SYN | 资源入账清脆双击 0.3s |
|
||||
| | `wrench` | SYN | 扳手两响 0.5s(修理) |
|
||||
| | `seg_warp` | SYN | 段间跃迁上行滑音 1.2s |
|
||||
| 计时/看门狗 | `tick_fast` | SYN | 决策窗尾段 tick(1kHz,0.1s/0.5s 拍) |
|
||||
| | `turn_tick` | SYN | 880Hz 木鱼族(无进展轨 L1,dungeon 配方自存) |
|
||||
| 巡航问询 | `cruise_ping` | SYN | 柔和 ping 0.4s(CRUISE 空闲单击无近期告警时) |
|
||||
|
||||
SA3 任务 4 个(全部签名);其余 SYN 兜底——**状态音必须 SYN**(节奏可断言是硬要求,§3.2)。
|
||||
|
||||
### 9.3 voice(154 句:旁白 142 ×2 性别 + NPC 平铺 12)
|
||||
|
||||
- **旁白=舰载系统音**(系统/教学/状态/账目/结算宣读):female=`Serena`「清晰沉稳的女声,舰载系统音,冷静克制,句读干净」/ male=`Uncle_Fu`「低沉沉稳的男声,舰载系统音,冷静克制」——两常量全表统一,禁句级变体、禁语速词。数字全分档整句(hull 3 档/段 4 档/rp 3 档/忠诚 9 句/功勋 3 档),句内量词写死(「两资源」「资源加一」)。
|
||||
- **船员 NPC 平铺单音色**(≤3,落 `voice/` 根目录,引擎平铺回退命中;不做双性别):
|
||||
|
||||
| 角色 | speaker | instruct 常量 | 区分度风险 |
|
||||
|---|---|---|---|
|
||||
| 大副(XO 34) | `Dylan` | 干脆利落的年轻男声,星舰大副,令出必行,敬重舰长 | **低:与两侧旁白均不同 speaker** |
|
||||
| 工程师(ENG 52) | `Eric` | 沙哑厚重的中年男声,轮机工程师,惜船如命,慢条斯理 | 低:同上 |
|
||||
| 医师(DOC 38) | `Vivian` | 温和坚定的女声,舰载医师,轻声但不容置疑 | 低:同上(female 旁白=Serena,不重叠) |
|
||||
|
||||
- 本作 NPC 与旁白**零 speaker 重叠**(detective/teahouse 各有 2 处「中」风险,本作 0)——仍保留 loy_*/sup_* 句前 NPC 语境锚点(第一人称船员 vs 系统音第三人称)。情绪写在句内文本(省略号引导),instruct 恒定。
|
||||
- 全表、触发、键盘变体、多音字自查见 [22-bridge-voice-ids.md](22-bridge-voice-ids.md)。
|
||||
|
||||
## 10. 向导层接入(engine/guide.js,不新增 earcon 词表)
|
||||
|
||||
### 10.1 状态签名(进入状态时播)
|
||||
|
||||
| 状态 | guide.state() | 时点 |
|
||||
|---|---|---|
|
||||
| TITLE / MENU / REPORT | `menu` | 进标题、开菜单、进结算 |
|
||||
| DRILL / CRUISE | `explore` | 进教学、每段巡航 |
|
||||
| CRISIS | `battle` | 检测链起(检测+决策整段) |
|
||||
| ROUTE / DOCK / PORT | `choice` | 进选择列表 |
|
||||
| danger | `danger` | 舰体跌至「危急」档当刻(每段 1 次) |
|
||||
|
||||
### 10.2 turn cue 与看门狗(双轨——批次 1 教训固化)
|
||||
|
||||
| 等待点 | 机制 | at | say(full 档;第 2 级一律纯 nudge) |
|
||||
|---|---|---|---|
|
||||
| ROUTE/DOCK/PORT 入口、CRISIS 决策窗开 | guide.turn | — | turn earcon + confirm 震 |
|
||||
| CRUISE 无操作 | 无操作轨 | [10s, 25s] | gd_cruise / null |
|
||||
| ROUTE 无操作 | 无操作轨 | [12s, 30s] | gd_decide / null(45s 自动稳妥线兜底) |
|
||||
| CRISIS 决策窗 | 无操作轨 | [min(窗长×0.5,12s)] 单级 | gd_decide(窗 <10s 不挂——tick 自承时机) |
|
||||
| DOCK 无操作 | 无操作轨 | [15s, 35s] | gd_dock / null |
|
||||
| DOCK 无进展 | 无进展轨 | [45/90/150s] | earcon→gd_dock→hint_dock3+自动预览启航项(**不替玩家花资源**) |
|
||||
| DRILL 每步 | 无进展轨 | [30/60/90s] | earcon→短句→自动演示通过(§7) |
|
||||
|
||||
- CRUISE/ROUTE/CRISIS 均有硬计时兜底(段计时/45s 自动线/超时默认结局)——结构上不存在无限静默;无进展轨仅 DOCK/DRILL 需要(结构性密度,dungeon D0-3 教训的前置化)。
|
||||
- 纠错/提示 idle-only、过期丢弃;向导语音 queue:true 绝不顶句(引擎已实现)。
|
||||
|
||||
## 11. 存档设计(跨局舰船成长)
|
||||
|
||||
```json
|
||||
{
|
||||
"schema": 1, "game": "bridge", "updatedAt": 0,
|
||||
"summary": "第2巡航段 · 舰体带伤 · 引擎受损 · 资源5",
|
||||
"meta": { "drillDone": true, "merit": 26, "unlocks": ["spare", "harvest"],
|
||||
"patrols": 3, "bestRate": "A", "aids": 2, "kills": 1 },
|
||||
"run": {
|
||||
"seed": 42, "seg": 2, "plan": { "types": ["distress","meteor","pirate","radiation"],
|
||||
"dirs": ["port","stern","star","bow"], "trap": false, "wears": ["scan","engine","shield"],
|
||||
"echo": false },
|
||||
"hull": 4, "rp": 5,
|
||||
"sys": { "engine": "dmg", "shield": "ok", "scan": "ok", "weapon": "ok" },
|
||||
"crew": { "xo": 2, "eng": 0, "doc": 1 },
|
||||
"aidOk": 1, "kills": 1, "offlineEver": false,
|
||||
"hullLostSeg": 1, "timeouts": 0, "offlineFails": 0, "firstRun": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- summary 规则:`第{seg}巡航段 · {hull 档名} · {最紧要异常系统名|无异常} · 资源{rp}`;巡逻终局 run=null → `功勋{merit} · 最佳{bestRate} · 改装{n}/6`。
|
||||
- 保存时机:危机结算后 / DOCK 项执行后 / 段末 / 菜单「保存并回大厅」/ REPORT 入 meta。localStorage + PUT 服务器。
|
||||
- 读取:有 run → TITLE 播 sys_continue_ask,单击继续 → 恢复到**当前段 ROUTE**(该段危机未结算则整段重走——存档粒度=危机结算点/段边界,登记)→ **中断复述链**(§3.3:舰体档→最紧要异常→巡航段→recap_go,≤8s 回到可操作)。右滑=星港(meta 消费)。
|
||||
- 归因真话依据:`timeouts`/`offlineFails`/lastHit 持久化,死亡链选句从同源读取。
|
||||
|
||||
## 12. playtest 断言清单(登记 13 号文档新增 §bridge;mock 对齐 web/rpg/test/playtest.mjs;一律 guide:'off')
|
||||
|
||||
**关键路径**(seed=42 首局,≤200 手势):
|
||||
1. 启动→TITLE(无档)→单击→DRILL:D0..D4 逐步 voice 序与 drillStep 递进;D0 巡检全链+tut_all_ok;D2 求救驰援成功链(pa_chime→warp→res_reward→loy_aid→doc_aid);首局 S1 超时路径零损失(学期零惩罚);下滑跳过+meta.drillDone 二周目不再进。
|
||||
2. **seed 复现**:seed=42 两次构造 → run.plan 深相等(类型序/方位/陷阱/磨损/余波);首局约束(固定序/无陷阱/无余波/S1 无磨损);非首局 S1≠辐射。
|
||||
3. **巡检链节奏断言**(SYN 硬要求):全链 4 音按 引擎→护盾→扫描→武器 顺序播出、每音时长 2.0s±50ms、间隔 0.4s±50ms;scan 音资产左声道能量占比>90%(pan 断言);全 ok → tut_all_ok、无异常语音;每系统 dmg/off 各注入 → 对应 sys_* 句恰在对应 tone 后播出。
|
||||
4. **危机全类型路径**:四类型各自完整走 检测链(签名 pan/尾音与方位一致:左舷=左声道、舰首=dir_bow)→类型句→方位句→决策窗→逐选项×逐系统态(ok/dmg/off 矩阵 §4.2 全组合注入)→结果句+账目差分(hull/RP/忠诚);超时=默认结局真话(陨石超时含工程师−1)。
|
||||
5. **仲裁规则断言**(R1-R8 + §3.5 七场景逐一注入):双受损 3:1 轮转时序;同 id 600ms 去重;voice 播出期间告警零调度、结束后 +0.5s 恢复;决策窗内无关告警挂起;**双危机**:B 检测落在 A 窗内 → A 结算句+2s 前零 B 声、B 窗从 B 检测链起算;REPORT 进入告警清空;菜单冻结期零调度零倒计时。红线:任意时刻系统告警 ≤1 条(tick 除外)、两套签名零重叠。
|
||||
6. **忠诚账本**:§5.1 表逐行注入 → crew 差分断言;clamp −3..+3;band 句=ledger(9 句全覆盖含边界 −2/+2);支援触发三成员(大副=海盗下令瞬间 band 判定、工程师/医师=段末条件)与缺席 sup_none 每局一次;大副离心战果降级。
|
||||
7. **评级验算**:§8.4 剧本 A 逐事件注入 → score=19→rate_s、功勋 15、每个跨档播报点实值在区间(含 RP 回落双向);§8.5 剧本 B → score=12→B、医师离心档+支援缺席;§8.6 失败注入 → 死亡链序+die_cause=lastHit+die_adv 选择与 timeouts/offlineFails 一致+功勋折算。
|
||||
8. **经济**:采集(稳妥/矿富×2/采集协议改装)、修理两级(离线→受损→ok 两笔 2 资源)、rep_poor、REPORT 折算 floor(RP/3);upg 六项价格/条件(armor2 依赖、port_poor、upg_done 不重复购买)与效果(armor 上限→st_hull 档按新比例、vet 开局+1、aegis 首伤−1 减至 0 无伤播报)。
|
||||
9. **看门狗**:CRUISE 10s/25s、ROUTE 12s/30s+45s 自动稳妥、DOCK 15s/35s、第 2 级纯 nudge;DOCK 无进展 45/90/150 三级(L3 不替玩家花资源);DRILL 30/60/90 自动演示。
|
||||
10. **中断复述**:存档重进 → sys_continue_ask→单击→落在当前段 ROUTE→复述链序(st_hull→最紧要异常→st_seg→recap_go);无异常时跳过异常句;上滑全链可重放。
|
||||
11. **REPORT 死窗+链锁**:进 REPORT 同拍与 +300ms 各补一记在途 tap → 均被吞;结算链完整有序(rep_open→rate_X→merit→settle_hook);链完单击=返航 TITLE;死亡链同款。
|
||||
12. **菜单**:模态循环-确认-关闭;危机中开菜单 → 倒计时冻结(快进虚拟时钟断言零超时触发)→ 关闭重播当前选项句续走;「保存并回大厅」PUT data.summary 命中生成规则;「放弃本次巡逻」run 清空 meta 保留。
|
||||
13. **键盘变体**:`settings.input='key'` 后播 sys_help_k/tut_d0_k/cr_decide_k/dock_open_k 等 V 组(inputMode 联动);'touch' 回基础句。
|
||||
14. **E1/E2 断言**:CRUISE 空闲单击=重播最近告警(60s 窗)、无近期→cruise_ping;巡检链播中单击=跳段;CRISIS 决策窗长按=error;无 E3(全状态快进可用,rateLog 无豁免记录)。
|
||||
|
||||
**边界断言**:
|
||||
- 首局 FTUE:首输入 <60s(D0 ≈t+25s);首正反馈 ≤3min(D2 驰援 ≈t+2.5min)。
|
||||
- 学期零惩罚:DRILL+S1 乱按 → hull/RP/忠诚零变化(求救超时除外——其本身零损失)。
|
||||
- 求救陷阱公平性:陷阱局检测链必播 trap_hint(先线索后抉择);非陷阱局零 trap_hint。
|
||||
- 方位机制:辐射/余波受殃系统=方位系统(含已离线顺时针转移);陨石硬闯损护盾自身。
|
||||
- 上滑巡检随时可用(决策窗=简链);双击重听在声明处全状态生效。
|
||||
- 屏蔽任意 voice 资产:链 8s 兜底推进;危机超时默认结局自动落(永不卡死)。
|
||||
- guide=off:全静、零定时器(游戏层计时器:段计时/倒计时属内容层照走)。
|
||||
- 资产齐套:voice 双性别 142 id 集合一致+NPC 平铺 12+sfx/bgm 双格式(assetExists 口径)。
|
||||
|
||||
**失败即不通过**:归因假话(评级句/忠诚档句/超时句/死因句/支援句与 ledger 不符);同 seed 两次构造不一致;巡检链节奏断言失败;双危机并发出现两套签名重叠或双告警齐鸣;危机签名 pan/尾音与方位句矛盾;教学期产生任何损失;受殃系统与方位规则不符。
|
||||
|
||||
## 13. 节奏曲线
|
||||
|
||||
### 单局(一次巡逻 15-22 分钟;首局 17-22)
|
||||
|
||||
| 阶段 | 时长 | 内容 | 奖励点(≤60s 一个) |
|
||||
|---|---|---|---|
|
||||
| 开场+教学 | 0:00-3:00 | intro 五句+D0..D4(S1 求救=教学危机) | D2 驰援成功(t+2.5min) |
|
||||
| S1 收尾+DOCK1 | 3:00-4:30 | 巡航余段+整备 | 段结算/采集入账 |
|
||||
| S2 | 4:30-7:30 | 航线选择+磨损告警+陨石(12s 窗) | res_mine 采矿/大副跨档 |
|
||||
| S3 | 7:30-10:30 | 巡航+海盗(15s 窗,支援演出高潮) | sup_xo/res_plunder |
|
||||
| S4 | 10:30-13:30 | 巡航+辐射(10s 窗,最紧)+(40% 余波双危机) | 干净规避/余波胜 |
|
||||
| REPORT | 13:30-15:00 | 评级链+功勋+星港钩子 | rate_s+改装 |
|
||||
|
||||
- 紧张度曲线:求救(20s 窗,教学温)→陨石(12s)→海盗(15s 但有战斗演出)→辐射(10s,最紧)+余波——窗长递减、S4 双危机为峰;DOCK 是每 3 分钟一个的「呼吸谷」(修理+听船员)。
|
||||
- 峰谷结构:巡航(低唤起·听+管理)⇄ 危机(高唤起·决策窗)⇄ 靠港(低唤起·养成)——P4 不疲劳;P2 追求 S 评级与矿富线风险决策。
|
||||
- 开环钩子:settle_hook「星港期待你的下一次巡逻」+功勋差一点够下一件改装(经济曲线设计使然);死亡局功勋照入(下一局更强的 dungeon 式拉重开)。
|
||||
|
||||
### 跨局(元进度)
|
||||
|
||||
首局教学→3-5 局解锁备用零件/采集协议→中期装甲/老兵船组改变 build(vet 开局信赖=支援更早到位)→重型装甲+应急护盾支撑 S 评级冲分;bestRate 与 patrols 记录长期目标。
|
||||
|
||||
## 14. 自检清单
|
||||
|
||||
| # | 硬约束/教训 | 自检 |
|
||||
|---|---|---|
|
||||
| 1 | FTUE 首输入 <60s | D0 巡检 ≈t+25s ✓(§7) |
|
||||
| 2 | 首正反馈 ≤3min | D2 驰援成功 ≈t+2.5min ✓ |
|
||||
| 3 | 学习期零惩罚 | S1 无磨损、求救超时零损失、DRILL 乱按零账 ✓ |
|
||||
| 4 | 失败三问归因+真话律 | die_cause=lastHit、die_adv 按 timeouts/offlineFails、超时=真话默认结局、系统不满足先播 sys_*_off——§12 失败项锁定 ✓ |
|
||||
| 5 | 手势宪法三件套不豁免 | 上滑巡检/下滑菜单/双击重听全状态保留;仅 E1/E2 登记且教学讲清;无 E3(登记)✓ |
|
||||
| 6 | 教学承诺兑现 | tut_aid「扫描稳得很」(S1 无磨损保证);intro_5「哪边先遭殃」(受殃规则锁定);settle_hook「单击返航」死窗+链锁后言行一致 ✓ |
|
||||
| 7 | 结算链完整 | REPORT 800ms 死窗+链锁(dungeon H1 内化)✓(§6.4) |
|
||||
| 8 | 档位措辞真实 | hull/rp/忠诚/功勋/评级五本账播报值=运行值、跨档双向播;§8.4-8.6 剧本逐事件验算 ✓ |
|
||||
| 9 | **告警仲裁表完备性** | R1-R8 显式规则表+§3.5 双危机并发 7 场景穷举(检测排队/结算链撞车/菜单冻结/轮转抢占/语音让路/tick 优先/结算清场),每场景确定性行为+断言;红线三条(签名重叠/双告警齐鸣/B 计时偷跑)入失败项 ✓ |
|
||||
| 10 | **状态音认知负荷**(本作特有风险) | 常态静默+异常才响(rpg 降档才播裁定系统版)+上滑巡检按需全查+四告警周期互质+R1 串行——常态并发声流 ≤2 恒成立;SYN 节奏逐毫秒断言 ✓(§3.2-3.4) |
|
||||
| 11 | 方位降维 ≤4 | 左舷/右舷/舰首/舰尾四象限(系统+危机统一语言);方位句固定模板 4 句;无连续角度 ✓(§3.1) |
|
||||
| 12 | 信息密度 | 选项逐项预览(≤3 选项/次);巡检简链 ≤10s(决策窗);检测链 ~8s 短窗;单次播报 ≤3 选项 ✓ |
|
||||
| 13 | 向导层 | 签名 5 态(choice 用于三列表态);双轨看门狗+结构性硬计时兜底;纠错 idle-only/queue/onceKey ✓(§10) |
|
||||
| 14 | seed 可复现 | mulberry32+opts.seed+plan 生成期一次性+深相等断言;首局约束集 ✓(§4.3) |
|
||||
| 15 | P1 视障 | 巡检链=status key 全状态可用(决策窗简链);双击重听/回车即时键;账目真实;NPC 零 speaker 重叠;2.2× 语速引擎既有 ✓ |
|
||||
| 16 | P3 通勤 | 中断复述(舰体/最紧要异常/巡航段 ≤8s);菜单冻结随时退出存档;段=3 分钟颗粒 ✓ |
|
||||
| 17 | P4 工人 | 零新手势;超时有保底默认结局(不卡死不挨骂);DOCK 不替花资源;命令式短句 ✓ |
|
||||
| 18 | P2 大学生 | S 评级追求+矿富线风险决策+支援演出+星港 build;死亡局功勋照入拉重开 ✓ |
|
||||
| 19 | 台词规范 | 154 句 ≤160;全句 ≤40 字(实测 ≤35);数字全分档/句内写死;「重新听」写法;同角色 speaker+instruct 恒定 ✓(台词表) |
|
||||
| 20 | 键盘通道 | V 组 10 变体集中登记,inputMode() 选播;方向键/空格/回车全手势可达(00 §5.5 平行通道,游戏层零改动)✓ |
|
||||
| 21 | 引擎能力边界 | 无实时节点(告警/倒计时=SYN one-shot+setTimeout 调度);sfx 无 loop 需求;预 pan=派生资产;tap 只用于非即时下令;资产缺失 8s 兜底;30MB 预算内 ✓ |
|
||||
| 22 | 密度下限(dungeon D0-3 教训) | 段计时/45s 自动线/超时默认结局三层硬推进——结构性无真空;每段 ≥1 危机+1 采集+(1-2)磨损事件 ✓ |
|
||||
| 23 | **评级账目验算** | §8.4 剧本 A 十二行逐事件(score 19→S、功勋 15、三次跨档播报点实值核对)+§8.5 B 档+§8.6 失败路径——一条完整巡逻剧本验算入文档 ✓ |
|
||||
| 24 | 台词 ≤40 字 | 台词表逐句实测 ≤38 字(最长 sys_help / sys_help_k 各 38)✓ |
|
||||
@@ -24,7 +24,9 @@
|
||||
| [17-abyss.md](17-abyss.md) + voice-ids | 《深海回音》深海救援叙事(批次 2):声呐双通道仲裁、氧气软失败经济(512 组合穷举验算)、148 句 |
|
||||
| [18-detective.md](18-detective.md) + voice-ids | 《雨夜专案》本格推理(批次 2):证词矛盾=数据单源推导、评级 S-C、二周目变体案、158 句 |
|
||||
| [19-cipher.md](19-cipher.md) + voice-ids | 《暗码》1940 密战叙事(批次 3):摩尔斯运行时合成解码、暴露度经济、三层兜底、139 句 |
|
||||
| 20~22 | 《深夜茶馆》《守塔人》《星环舰长》(批次 3/4,设计进行中,落地后补登记) |
|
||||
| [21-keeper.md](21-keeper.md) + voice-ids | 《守塔人》孤岛灯塔叙事(批次 4):时空双线签名(风暴/老唱片)、回忆插叙三段、信任×真相双标量、148 句 |
|
||||
| [22-bridge.md](22-bridge.md) + voice-ids | 《星环舰长》舰桥指挥(批次 4):四象限系统状态音+告警仲裁 R1-R8(双危机穷举)、危机事件卡、忠诚账本、评级 S-D、154 句 |
|
||||
| 20 / 22 | 《深夜茶馆》《星环舰长》(批次 3/4,设计进行中,落地后补登记) |
|
||||
|
||||
各 voice-ids 文档的「键盘变体」小节由 KEY_LINES 程序化生成(tools/gen_voice_dual.py 单源),含 PC 键盘措辞(按空格/按回车/按方向键)。
|
||||
|
||||
|
||||
@@ -75,11 +75,11 @@
|
||||
|---|---|---|---|---|---|---|
|
||||
| 1 | radio | ☑ | ☑ | ☑ | **R1-R3 ☑(+R2 五修+R3 六打磨;4/4 人设满分档愿意玩,P0=0)→ 可交付 ✅**(R4-R6 经用户裁定暂停,视上手反馈续) | ☑ |
|
||||
| 1 | dungeon | ☑ | ☑ | ☑ | **R1-R3 ☑+H1 热修(0/4→4/4 翻案;live 六连验+H1 定向复验 PASS)→ 可交付 ✅**(v2 首条=漫游迷路抢救盲区) | ☑ |
|
||||
| 2 | abyss | ☐ | ☐ | ☐ | ☐ | ☐ |
|
||||
| 2 | detective | ☐ | ☐ | ☐ | ☐ | ☐ |
|
||||
| 3 | cipher | ☐ | ☐ | ☐ | ☐ | ☐ |
|
||||
| 3 | teahouse | ☐ | ☐ | ☐ | ☐ | ☐ |
|
||||
| 4 | keeper | ☐ | ☐ | ☐ | ☐ | ☐ |
|
||||
| 4 | bridge | ☐ | ☐ | ☐ | ☐ | ☐ |
|
||||
| 2 | abyss | ☑ | ▶ | ▶ | ☐ | ☐ |
|
||||
| 2 | detective | ☑ | ▶ | ▶ | ☐ | ☐ |
|
||||
| 3 | cipher | ☑ | ☐ | ☐ | ☐ | ☐ |
|
||||
| 3 | teahouse | ☑ | ☐ | ☐ | ☐ | ☐ |
|
||||
| 4 | keeper | ☑ | ☐ | ☐ | ☐ | ☐ |
|
||||
| 4 | bridge | ☑ | ☐ | ☐ | ☐ | ☐ |
|
||||
|
||||
> 概念代号在策划阶段可改易读的正式名称;slug 不变。
|
||||
|
||||
Reference in New Issue
Block a user