// games/fu.js — 《浮》 // 感官漂流。十二个声音漂过来,抓住还是放走。 // 结局:旁白读出你带走了什么。 const GAME_FU = { id: 'fu', intro: '你漂浮在某处。不知道是水,还是梦,还是别的什么。声音会漂过来。单击,把手伸过去。双击,看着它走。', first: 'f01', bgm: null, ambience: '../audio/mp3/ambience/amb_apartment_night_01_v1.mp3', initialState: { kept: [], released: [] }, scenes: { f01: { delay: 2000, narrate: '第一个。像夏天傍晚的风,带着草的气味,你说不清是哪年夏天的。它停在你身边了。', tap: { label: '把它留住', narrate: '它停在你手心里,有点暖。', state: s => ({ kept: [...s.kept, '夏天的风'], released: s.released }), next: 'f02' }, doubleTap:{ label: '让它走', narrate: '你看着它慢慢飘走了。', state: s => ({ kept: s.kept, released: [...s.released, '夏天的风'] }), next: 'f02' }, }, f02: { delay: 1500, narrate: '第二个。某人的笑声。你认识这个笑,但你说不清是谁的。', tap: { label: '留住它', narrate: '笑声停在你耳边,还在回响。', state: s => ({ kept: [...s.kept, '笑声'], released: s.released }), next: 'f03' }, doubleTap:{ label: '让它走', narrate: '笑声远了。', state: s => ({ kept: s.kept, released: [...s.released, '笑声'] }), next: 'f03' }, }, f03: { delay: 1500, narrate: '第三个。一种说不清楚的遗憾。它没有形状,但是很重。', tap: { label: '接住它', narrate: '你把遗憾抱在怀里了。它很重,但你没有放开。', state: s => ({ kept: [...s.kept, '遗憾'], released: s.released }), next: 'f04' }, doubleTap:{ label: '让它过去', narrate: '遗憾漂过去了。你呼了口气。', state: s => ({ kept: s.kept, released: [...s.released, '遗憾'] }), next: 'f04' }, }, f04: { delay: 1500, narrate: '第四个。很久没有过的安全感。轻轻的,像一床旧被子的气味。', tap: { label: '留住它', narrate: '你把它裹在身上了。', state: s => ({ kept: [...s.kept, '安全感'], released: s.released }), next: 'f05' }, doubleTap:{ label: '放走', narrate: '安全感飘走了。你看着它走。', state: s => ({ kept: s.kept, released: [...s.released, '安全感'] }), next: 'f05' }, }, f05: { delay: 1500, narrate: '第五个。想哭但没哭出来的那种感觉。像喉咙里卡着什么。', tap: { label: '承认它', narrate: '你承认了。那个东西松动了一点点。', state: s => ({ kept: [...s.kept, '没哭出来的眼泪'], released: s.released }), next: 'f06' }, doubleTap:{ label: '让它走', narrate: '它漂走了。喉咙还是有点紧。', state: s => ({ kept: s.kept, released: [...s.released, '没哭出来的眼泪'] }), next: 'f06' }, }, f06: { delay: 1500, narrate: '第六个。一首旋律,只有开头几个音,后面的你想不起来了。', tap: { label: '哼几下', narrate: '你在心里哼了那几个音。后面的还是想不起来,但这几个音够了。', state: s => ({ kept: [...s.kept, '那段旋律'], released: s.released }), next: 'f07' }, doubleTap:{ label: '算了', narrate: '旋律消失了。', state: s => ({ kept: s.kept, released: [...s.released, '那段旋律'] }), next: 'f07' }, }, f07: { delay: 1500, narrate: '第七个。被需要的感觉。有人曾对你说过你很重要,你还记得那句话。', tap: { label: '带着它', narrate: '你把那句话放进口袋里了。', state: s => ({ kept: [...s.kept, '被需要的感觉'], released: s.released }), next: 'f08' }, doubleTap:{ label: '放开', narrate: '那句话漂走了。', state: s => ({ kept: s.kept, released: [...s.released, '被需要的感觉'] }), next: 'f08' }, }, f08: { delay: 1500, narrate: '第八个。一个人的时候的自在。没人看着,没人要你做什么,只是你自己。', tap: { label: '收下', narrate: '你把这份自在收进来了。', state: s => ({ kept: [...s.kept, '独处的自在'], released: s.released }), next: 'f09' }, doubleTap:{ label: '不需要', narrate: '它漂走了。也许你现在不需要。', state: s => ({ kept: s.kept, released: [...s.released, '独处的自在'] }), next: 'f09' }, }, f09: { delay: 1500, narrate: '第九个。害怕。不知道怕什么,就是有点怕。', tap: { label: '承认害怕', narrate: '你承认了:我有点害怕。说出来之后,它小了一点。', state: s => ({ kept: [...s.kept, '害怕'], released: s.released }), next: 'f10' }, doubleTap:{ label: '不理它', narrate: '你没有看它,害怕漂走了。也许。', state: s => ({ kept: s.kept, released: [...s.released, '害怕'] }), next: 'f10' }, }, f10: { delay: 1500, narrate: '第十个。好奇心。对某件事、某个人、某个地方,你还有好奇。', tap: { label: '带上它', narrate: '好奇心跳进你手里了,很活跃。', state: s => ({ kept: [...s.kept, '好奇心'], released: s.released }), next: 'f11' }, doubleTap:{ label: '放走', narrate: '好奇心漂走了,也许它去找别人了。', state: s => ({ kept: s.kept, released: [...s.released, '好奇心'] }), next: 'f11' }, }, f11: { delay: 1500, narrate: '第十一个。疲惫。真实的、身体里的疲惫,它已经跟了你很久了。', tap: { label: '承认疲惫', narrate: '你说:我累了。疲惫点了点头,说我知道。', state: s => ({ kept: [...s.kept, '疲惫'], released: s.released }), next: 'f12' }, doubleTap:{ label: '让它走', narrate: '疲惫漂走了。你感觉稍微轻了一点点。', state: s => ({ kept: s.kept, released: [...s.released, '疲惫'] }), next: 'f12' }, }, f12: { delay: 2000, narrate: '最后一个。它没有名字。是你漂浮在这里时特有的某种感觉,说不清,但它在。', tap: { label: '带走它', narrate: '你把它揣在怀里了,连同它的没有名字。', state: s => ({ kept: [...s.kept, '无名之物'], released: s.released }), next: null }, doubleTap:{ label: '留在这里', narrate: '你看着它留在了这片水里,这片梦里。', state: s => ({ kept: s.kept, released: [...s.released, '无名之物'] }), next: null }, }, }, getEnding: () => 'only', endings: { only: { narrate: s => { let t = '你漂回来了。'; if (s.kept.length > 0) t += `你带走了:${s.kept.join('、')}。`; if (s.released.length > 0) t += `你放走了:${s.released.join('、')}。`; t += '这就是今天的你。'; return t; }, }, }, };