round2: 看门狗礼仪F1(不重播/单句升级/idle-skip) + 分档归因F2 + 交接count-in/answer F3 + 教学看表现F4-F5 + 警报去叠F6 + 回绕F7 + 开场瘦身F8 + 10句新语音 + 测试全绿(6playtest零改动+guide52断言+资产终检)
This commit is contained in:
+13
-17
@@ -82,8 +82,10 @@ const VOICE_WATCHDOG_MS = 30000;
|
||||
/** 抉择提示音 id(voice/p1~p8):播放中单击不可跳过(12 号文档 §1.2)。 */
|
||||
const PROMPT_RE = /^voice\/p\d/;
|
||||
|
||||
// 向导层(schemes.md §2):W1 静默看门狗阈值——8s 轻提醒+gd_continue,20s 升级重播帮助
|
||||
const GUIDE_WATCHDOG_AT = [8000, 20000];
|
||||
// 向导层(14 号文档 + round2 synthesis F1.1):剧情类等待默认低频——25s 轻提醒
|
||||
// +gd_continue,50s 升级只重申手势(gd_again),**永不重播 help/进度/当前节点**;
|
||||
// 同一等待点最多 2 次提示后彻底静默(guide.js 升级链用尽自动停止)
|
||||
const GUIDE_WATCHDOG_AT = [25000, 50000];
|
||||
|
||||
export class StorylineGame extends Game {
|
||||
constructor(audio, root) {
|
||||
@@ -104,10 +106,6 @@ export class StorylineGame extends Game {
|
||||
this.companion = false; // 带上了小满
|
||||
this.knowTrap = false; // 装死时听到北区陷阱的情报
|
||||
this.betrayed = false; // 向猎狗交出过坐标
|
||||
|
||||
// 向导层:升级帮助播过后不再自动重挂看门狗(L4"之后停止,不轰炸"),
|
||||
// 玩家下一次手势即复位
|
||||
this._guideHelped = false;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------- Game
|
||||
@@ -123,7 +121,6 @@ export class StorylineGame extends Game {
|
||||
onGesture(g) {
|
||||
console.log(`[StorylineGame] onGesture: ${g} mode=${this.mode} node=${this.nodeId} armed=${this.choiceArmed} playing=${this.voicePlaying}`);
|
||||
this.guide.disarm(); // 任何手势复位静默看门狗(guide=off 时 no-op)
|
||||
this._guideHelped = false; // 玩家有动作,恢复看门狗自动挂载
|
||||
if (this.mode === MODE.MENU) this.onMenuGesture(g);
|
||||
else this.onStoryGesture(g);
|
||||
}
|
||||
@@ -201,6 +198,10 @@ export class StorylineGame extends Game {
|
||||
this.awaitingRestart = false;
|
||||
if (node.sfx) this.audio.play(node.sfx);
|
||||
const seq = [...node.voices];
|
||||
// F8 开场瘦身(round2):操作口令 gd_brief(≤8s)前置到开场链最前,
|
||||
// 「brief→intro」;原 intro 长句里的操作教学资产保留不动。
|
||||
// 向导句只在 full 档插播(off/standard 保持纯剧情链)。
|
||||
if (id === 'n00' && this.guide.level() === 'full') seq.unshift('voice/gd_brief');
|
||||
// 开场教学:intro 早期追加一次"单击可跳过旁白"提示(每局只播一次,重开不重播)
|
||||
if (id === 'n00' && !this.skipHintShown) {
|
||||
this.skipHintShown = true;
|
||||
@@ -241,19 +242,14 @@ export class StorylineGame extends Game {
|
||||
} else if (node.ending) {
|
||||
this.awaitingRestart = true;
|
||||
}
|
||||
// W1/W3 静默等待看门狗(向导层,schemes §2):8s nudge+gd_continue;
|
||||
// 20s 升级 = 复用 playHelpAndResume(帮助+进度+重播当前节点),升级后不再
|
||||
// 自动重挂(防循环轰炸),玩家下一次手势恢复。抉择态与语音播放中不挂。
|
||||
if (node.prompt == null && !this._guideHelped) {
|
||||
// W1/W3 静默等待看门狗(向导层,round2 F1.1 礼仪重构):25s nudge+gd_continue;
|
||||
// 50s 升级只重申手势(gd_again)——**不再重播 help+进度+当前节点**。两级用尽
|
||||
// 彻底静默,玩家下一次手势(新节点播完)重新挂载。抉择态与语音播放中不挂。
|
||||
if (node.prompt == null) {
|
||||
this.guide.watchdog({
|
||||
arm: true,
|
||||
at: GUIDE_WATCHDOG_AT,
|
||||
say: ['gd_continue', null],
|
||||
onEscalate: (n) => {
|
||||
if (n !== 2 || this.mode !== MODE.STORY) return;
|
||||
this._guideHelped = true;
|
||||
this.playHelpAndResume();
|
||||
},
|
||||
say: ['gd_continue', 'gd_again'],
|
||||
cond: () => this.mode === MODE.STORY && !this.voicePlaying,
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user