Files
xsl 866f363591 项目整理:重写主文档、归档过时文档、清理死代码、新增音频制作手册
文档整理:
- 重写 game/操作说明.md 为项目主文档(6游戏/6手势/旁白/模型生成音频/TTS两步流程)
- 归档过时文档至 other_docs/(林夏原始设计、旧执行文档)
- 新增 docs/音频制作执行手册.md(从零制作游戏音频的完整流程)
- docs/ 下保留旁白音色提示词、音频脚本

代码清理:
- 删除旧架构死代码: story.js / gestures.js / profile.js
- 删除耦合旧架构的过时测试目录 game/tests/

脚本配置修正:
- check_tts_env.sh: 启动脚本路径 AutoVideo → tts-server(实际位置)
- gen_narrator_samples.py: 硬编码地址改为环境变量,默认对齐 tts-server 端口 8000
2026-06-19 22:29:04 +08:00

207 lines
7.3 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// games/houzhen.js — 《候诊》
// 等待检查结果的两小时。
// 单击=把注意力放在外面,双击=退回到自己里面。
// 没有好坏结局,只有你等待的方式。
const GAME_HOUZHEN = {
id: 'houzhen',
intro: '下午一点半,你坐在医院候诊室,等一个检查结果。叫号机已经叫到了八十四号。你是九十四号。单击,把注意力放到外面。双击,退回到自己里面。',
first: 'h01',
bgm: null,
ambience: null,
initialState: { out: 0, inside: 0, moments: [] },
scenes: {
// 1. 建立等待感(无选择)
h01: {
delay: 3000,
narrate: '叫号机叫到了八十五号。你的号是九十四。等待的时间被切成了一小块一小块的,每一块都很结实。',
next: 'h02',
},
// 2. 左边的老人
h02: {
delay: 1000,
narrate: '你左边坐着一个老人。他在看窗外,窗外是停车场,没有什么特别的。但他看得很专注。',
tap: {
label: '看看他',
narrate: '你看了他一会儿。他感觉到了,朝你点了点头。你也点了点头。没有说话,但有什么东西发生了。',
state: s => ({ out: s.out + 1, inside: s.inside, moments: [...s.moments, '和老人点头'] }),
next: 'h03_wait',
},
doubleTap: {
label: '低头看手机',
narrate: '你低下头,看手机。屏幕亮着,什么都有,但你没有真的看进去什么。',
state: s => ({ out: s.out, inside: s.inside + 1, moments: s.moments }),
next: 'h03_wait',
},
},
h03_wait: {
delay: 5000,
narrate: '叫号机叫到了八十八号。',
next: 'h03',
},
// 3. 一条旧消息
h03: {
delay: 1000,
narrate: '你手机上有一条两天前的消息,你当时看到了,但没有回。那个人说:最近怎么样。',
tap: {
label: '打开来回复',
narrate: '你打开来,打了几个字。发出去了。不知道他会不会在意这么晚才回。',
state: s => ({ out: s.out + 1, inside: s.inside, moments: [...s.moments, '回了两天前的消息'] }),
next: 'h04_wait',
},
doubleTap: {
label: '先不管它',
narrate: '你把手机翻过去,屏幕朝下放在大腿上。等等再说。',
state: s => ({ out: s.out, inside: s.inside + 1, moments: s.moments }),
next: 'h04_wait',
},
},
h04_wait: {
delay: 4000,
narrate: '护士从走廊那头走过来,叫了一个名字,不是你。',
next: 'h04',
},
// 4. 一个孩子在哭
h04: {
delay: 1000,
narrate: '对面有个小孩在哭,大约三四岁,蹲在椅子旁边哭。旁边的大人在轻声说什么,但他还是哭。',
tap: {
label: '看过去',
narrate: '你看着那个孩子。他哭了一会儿就停了,大概是哭够了。你们没有交流,但你陪着他哭完了。',
state: s => ({ out: s.out + 1, inside: s.inside, moments: [...s.moments, '陪孩子哭完了'] }),
next: 'h05_wait',
},
doubleTap: {
label: '看别处',
narrate: '你把视线移开了。每个人都有自己的事,你也有你的。',
state: s => ({ out: s.out, inside: s.inside + 1, moments: s.moments }),
next: 'h05_wait',
},
},
h05_wait: {
delay: 6000,
narrate: '叫号机叫到了九十号。还有四个人。',
next: 'h05',
},
// 5. 窗外的光线
h05: {
delay: 1000,
narrate: '窗外的光线变了。下午的阳光斜进来,在地板上画了一块长方形的亮。你注意到了。',
tap: {
label: '看着那块光',
narrate: '你盯着那块光看了一会儿。它在慢慢移动,非常慢,但是在动。时间在过。',
state: s => ({ out: s.out + 1, inside: s.inside, moments: [...s.moments, '看着地板上的光'] }),
next: 'h06_wait',
},
doubleTap: {
label: '没注意',
narrate: '你闭上眼睛,想了想别的事。',
state: s => ({ out: s.out, inside: s.inside + 1, moments: s.moments }),
next: 'h06_wait',
},
},
h06_wait: {
delay: 4000,
narrate: '叫号机叫到了九十一号。',
next: 'h06',
},
// 6. 电话响了
h06: {
delay: 1000,
narrate: '你的手机响了。是一个你不常打电话的人——是你家里的人。也许只是普通的问候。',
tap: {
label: '接了',
narrate: '你接了。对方说:你在哪啊,吃了吗。你说在外面,没事。就这样。挂掉之后候诊室里还是那么安静。',
state: s => ({ out: s.out + 1, inside: s.inside, moments: [...s.moments, '接了家人的电话'] }),
next: 'h07_wait',
},
doubleTap: {
label: '没接',
narrate: '你看着屏幕亮了又暗。现在不是时候。等会儿再说。',
state: s => ({ out: s.out, inside: s.inside + 1, moments: s.moments }),
next: 'h07_wait',
},
},
h07_wait: {
delay: 5000,
narrate: '叫号机叫到了九十二号。',
next: 'h07',
},
// 7. 右边的陌生人
h07: {
delay: 1000,
narrate: '你右边的人一直在看同一页的杂志,翻来翻去都是那页。你不确定她在看,还是只是拿着。',
tap: {
label: '看过去',
narrate: '你朝她看了一眼。你们的眼神碰了一下,然后都移开了。没有什么,就是两个陌生人在等待。',
state: s => ({ out: s.out + 1, inside: s.inside, moments: [...s.moments, '和陌生人的眼神'] }),
next: 'h08',
},
doubleTap: {
label: '不看',
narrate: '你没有看。你在想等会儿检查结果会说什么。',
state: s => ({ out: s.out, inside: s.inside + 1, moments: s.moments }),
next: 'h08',
},
},
// 8. 叫号推进(自动)
h08: {
delay: 4000,
narrate: '九十三号。就差一个了。',
next: 'h09',
},
// 9. 叫到你了
h09: {
delay: 2000,
narrate: '九十四号。是你。你站起来,整理了一下衣服,走向那扇门。',
tap: {
label: '走进去',
narrate: '你推开门走进去了。门关上了。等待结束了。',
state: s => s,
next: null,
},
doubleTap: {
label: '再等一下',
narrate: '你停了一秒,深呼吸,然后走进去了。门关上了。',
state: s => s,
next: null,
},
},
},
getEnding: () => 'summary',
endings: {
summary: {
narrate: s => {
const total = s.out + s.inside;
let t = `你等了很久。`;
if (s.out > s.inside)
t += `在这段时间里,你向外走了${s.out}次——看向别人,接了电话,留意窗外。`;
else if (s.inside > s.out)
t += `在这段时间里,你向内走了${s.inside}次——退回到自己里,先不管别的。`;
else
t += `你向外走了${s.out}次,也向内走了${s.inside}次,差不多一半一半。`;
if (s.moments.length > 0)
t += `你记住了:${s.moments.join('')}。`;
t += '这就是你今天等待的方式。';
return t;
},
},
},
};