// 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; }, }, }, };