项目整理:重写主文档、归档过时文档、清理死代码、新增音频制作手册
文档整理: - 重写 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
This commit is contained in:
@@ -0,0 +1,206 @@
|
||||
// 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;
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user