584 lines
29 KiB
Markdown
584 lines
29 KiB
Markdown
# 《林夏》重构设计文档 v2
|
||
|
||
## 一、问题诊断
|
||
|
||
### 问题1:主角是哑巴
|
||
玩家听完 NPC 语音 → 滑动选择 → 什么声音都没有 → 直接跳到下一个人。
|
||
林夏在整个游戏中没有"说过一句话"。玩家的操作没有任何可听到的结果。
|
||
这不是互动,这是单方面的被动收听。
|
||
|
||
### 问题2:选择没有区别
|
||
温暖/冷淡/追问/沉默 → 改变了一个隐形的分数 → 同样的流程 → 下一条消息。
|
||
玩家听不到、感受不到任何区别。四个方向滑动在体验上完全一样。
|
||
选择只有在产生可感知的不同后果时才有意义。
|
||
|
||
### 根本原因
|
||
游戏缺少**对话的第二段**。真正的对话是:
|
||
|
||
```
|
||
她说 → 我答 → 她对我的回答做出反应
|
||
```
|
||
|
||
当前的游戏只有第一段。缺少"我答"和"她的反应"。
|
||
|
||
|
||
## 二、核心设计理念
|
||
|
||
### 一句话总结
|
||
**每次选择都必须产生玩家能听到的、不同的后果。**
|
||
|
||
### 三个原则
|
||
|
||
1. **林夏必须有声音**
|
||
玩家做出选择后,林夏要说话(或沉默——但沉默本身也要被对方感知到)。
|
||
|
||
2. **NPC 必须对林夏的回应做出反应**
|
||
温暖的回应 → NPC 继续说,说得更多更深。
|
||
冷淡的回应 → NPC 尴尬地收住,对话很快结束。
|
||
追问 → NPC 透露新信息(你在其他路径听不到)。
|
||
沉默 → NPC 感受到沉默,可能追问、可能放弃。
|
||
|
||
3. **不同的路径 = 不同的内容**
|
||
玩家选温暖和选冷淡,应该听到完全不同的音频。
|
||
不是"播同一段然后改个隐藏分数",而是真正不同的声音。
|
||
|
||
|
||
## 三、交互模型
|
||
|
||
### 手势(保持 6 种,不变)
|
||
| 手势 | 全局含义 |
|
||
|--------|------------|
|
||
| 单击 | 接受/回应/继续 |
|
||
| 双击 | 跳过/忽略 |
|
||
| 右滑 | 温暖/靠近 |
|
||
| 左滑 | 冷淡/推开 |
|
||
| 上滑 | 好奇/追问 |
|
||
| 下滑 | 沉默/退缩 |
|
||
|
||
### 新的对话流程
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────┐
|
||
│ [提示音 + 震动] │
|
||
│ 消息到达 │
|
||
│ → 单击播放 / 双击跳过 │
|
||
└──────────┬──────────────────────────────────────┘
|
||
▼
|
||
┌─────────────────────────────────────────────────┐
|
||
│ NPC 语音播放(Round 1) │
|
||
│ "你被甩了我都听说了,明天陪你喝酒" │
|
||
└──────────┬──────────────────────────────────────┘
|
||
▼
|
||
┌─────────────────────────────────────────────────┐
|
||
│ [选择提示音] │
|
||
│ 等待玩家操作 │
|
||
└──────────┬──────────────────────────────────────┘
|
||
▼
|
||
┌─────────────────────────────────────────────────┐
|
||
│ [打字音效 ~1秒] │
|
||
│ [发送音效] │
|
||
│ 林夏的语音播放 │
|
||
│ 右滑 → "好啊,明天不见不散。" │
|
||
│ 左滑 → "再说吧。" │
|
||
│ 上滑 → "你怎么知道的啊?" │
|
||
│ 下滑 → [一秒沉默] │
|
||
│ 单击 → "嗯。" │
|
||
└──────────┬──────────────────────────────────────┘
|
||
▼
|
||
┌─────────────────────────────────────────────────┐
|
||
│ NPC 反应播放(Round 2)—— 因选择而异 │
|
||
│ │
|
||
│ 右滑路径: "行!那我叫上安安!老地方见!" │
|
||
│ 左滑路径: "……好吧,你休息。" │
|
||
│ 上滑路径: "还不是阿哲那个大嘴巴告诉我的……" │
|
||
│ 下滑路径: "??你还活着吗哈哈。算了不打扰你了" │
|
||
│ 单击路径: "嗯是什么意思啊哈哈!行吧你休息" │
|
||
└──────────┬──────────────────────────────────────┘
|
||
▼
|
||
┌─────────────────────────────────────────────────┐
|
||
│ [可选] Round 3: 继续对话(仅追问路径) │
|
||
│ "阿哲到处跟人说你们分手的事……" │
|
||
│ → 再次选择 → 林夏回应 → 对话结束 │
|
||
└──────────┬──────────────────────────────────────┘
|
||
▼
|
||
┌─────────────────────────────────────────────────┐
|
||
│ [过渡音效] → 等待 → 下一条消息 │
|
||
└─────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 关键区别
|
||
|
||
| 方面 | 旧版 | 新版 |
|
||
|-----------|------------------------|-------------------------------|
|
||
| 林夏的声音 | 无 | 每次选择后都有语音 |
|
||
| NPC 反应 | 无,直接跳到下一条 | 根据选择播放不同的反应语音 |
|
||
| 选择的感受 | 四个方向一样 | 四个方向各自导向不同的音频内容 |
|
||
| 对话长度 | 固定(听完就完) | 温暖/追问路径更长,冷淡/沉默更短 |
|
||
| 信息量 | 固定 | 追问路径可以获得独家信息 |
|
||
|
||
|
||
## 四、林夏的声音设计
|
||
|
||
### 设计原则
|
||
林夏是一个 24 岁的女生,今晚经历了分手+失业+家庭压力。
|
||
她的声音应该是:**疲惫但清醒、克制但有温度、年轻但不幼稚。**
|
||
|
||
### 语音类型
|
||
|
||
#### A. 通用短句(可跨消息复用)
|
||
| 编号 | 情感方向 | 台词 | 时长 | 复用场景 |
|
||
|------|---------|---------------|--------|-----------------|
|
||
| G01 | 单击 | "嗯。" | 0.5s | 任何简单回应 |
|
||
| G02 | 单击 | "好。" | 0.5s | 同意类 |
|
||
| G03 | 温暖 | "嗯~好啊。" | 1s | 接受邀约 |
|
||
| G04 | 温暖 | [轻笑] | 1s | 轻松回应 |
|
||
| G05 | 冷淡 | "知道了。" | 0.8s | 敷衍回应 |
|
||
| G06 | 冷淡 | "行吧。" | 0.6s | 不情愿同意 |
|
||
| G07 | 追问 | "嗯?" | 0.5s | 想听更多 |
|
||
| G08 | 追问 | "然后呢?" | 0.8s | 催促继续 |
|
||
| G09 | 沉默 | [轻呼吸] | 1.5s | 说不出口 |
|
||
| G10 | 沉默 | [沉默+叹气] | 2s | 无力回应 |
|
||
|
||
#### B. 场景专属台词(每条消息独有)
|
||
每条有选择的消息需要 3-5 条林夏专属台词,详见第五节。
|
||
|
||
### 录制要求
|
||
- 同一个声优录制所有林夏的台词
|
||
- 录音环境安静(模拟深夜卧室发语音的感觉)
|
||
- 情绪基调:不是哭,不是崩溃,是一种**撑着的疲惫**
|
||
- 总量估算:通用 10 条 + 专属 ~40 条 = **约 50 条短语音,总时长约 2 分钟**
|
||
|
||
|
||
## 五、16 条消息重新设计
|
||
|
||
> 每条消息标注:NPC 说什么(Round 1)→ 玩家选择 → 林夏说什么 → NPC 怎么反应(Round 2)
|
||
> 追问路径可能延伸到 Round 3。
|
||
|
||
---
|
||
|
||
### MSG-01 妈妈 · 电话
|
||
|
||
**类型**:来电
|
||
**Round 1**(接听后):妈妈说"今晚煮了你爱吃的排骨,你什么时候回来呀。"
|
||
**接听后无选择**——这是第一通电话,让玩家熟悉"接电话 → 听完"的流程。
|
||
通话结束后,林夏轻轻说一句"嗯……好。"(自动播放,不需选择)
|
||
|
||
**不接** → 直接跳到下一条。妈妈的来电未接。
|
||
|
||
**状态**:接听 → MOM_LINK = true
|
||
|
||
---
|
||
|
||
### MSG-02 小美 · 微信语音 ×3(教学关)
|
||
|
||
**Round 1**:小美连发三条语音:
|
||
- "林夏!你还活着吗!"
|
||
- "你被甩了我都听说了——别难过啊"
|
||
- "明天陪你喝酒,去不去"
|
||
|
||
**选择 + Round 2**:
|
||
|
||
| 方向 | 林夏说 | 小美反应 | 效果 |
|
||
|------|--------------------------|-----------------------------------------------|--------------|
|
||
| 右滑 | "好啊,明天不见不散。" | "行!那我叫上安安!老地方见!别放鸽子啊!" | engagement+2 |
|
||
| 左滑 | "再说吧。" | "……好吧。你要是改主意了随时说。" | avoidance+1 |
|
||
| 上滑 | "你怎么知道的啊?" | "还不是阿哲自己发朋友圈!你不知道吗?他发了又秒删……" | engagement+1, **独家信息** |
|
||
| 下滑 | [沉默 2s] | "??你还活着吗哈哈。好了不烦你了,有事找我。" | avoidance+2 |
|
||
| 单击 | "嗯。" | "嗯是什么意思啊哈哈!行吧你休息。" | engagement+0 |
|
||
|
||
**追问路径 Round 3**(上滑后):
|
||
小美说完"他发了又秒删" → 选择提示音
|
||
- 右滑 → 林夏:"他……发了什么?" → 小美:"就发了一张你们以前的照片,配了一句'值得'。两分钟就删了" → **独家信息**
|
||
- 其他 → 对话结束
|
||
|
||
---
|
||
|
||
### MSG-03 外卖小哥 · 电话
|
||
|
||
**类型**:来电
|
||
**Round 1**:外卖小哥:"你好,你的麻辣烫到了,在楼下。"
|
||
**接听后自动**:林夏说"好,我下来拿。"(无选择)
|
||
**不接** → 漏接。
|
||
|
||
*设计意图*:日常感。即使世界在崩塌,外卖还是要拿。
|
||
|
||
---
|
||
|
||
### MSG-04 阿哲 · 微信语音
|
||
|
||
**Round 1**:阿哲说"那个……我的 AirPods 好像落你那了,方便帮我寄一下吗?"
|
||
|
||
| 方向 | 林夏说 | 阿哲反应 | 效果 |
|
||
|------|--------------------------|---------------------------------------------|-------------------|
|
||
| 右滑 | "你那边……还好吗。" | "我……挺好的。" [停顿] "你呢?" | engagement+2 |
|
||
| 左滑 | "知道了。明天寄。" | "嗯……谢了。" | HE_BACK=false, avoidance+1 |
|
||
| 上滑 | "你怎么不自己来拿。" | "我……不太方便过去。" [欲言又止] | engagement+2 |
|
||
| 下滑 | [沉默 3s] | [等了5秒] "那……我晚点再说吧。" → (10秒后阿哲撤回消息) | HE_BACK=null, avoidance+2 |
|
||
| 单击 | "好。" | "谢谢。" | HE_BACK=false, engagement+1 |
|
||
|
||
**右滑 Round 3**(阿哲问"你呢?"后):
|
||
- 右滑 → 林夏:"不太好。" → 阿哲:"……对不起。" [然后挂断般的沉默]
|
||
- 左滑 → 林夏:"挺好的。" → 阿哲:"那就好。" [敷衍,对话结束]
|
||
- 下滑 → [沉默] → 阿哲:"……那,晚安。"
|
||
|
||
**上滑 Round 3**(阿哲说"不太方便"后):
|
||
- 上滑 → 林夏:"为什么。" → 阿哲:"我……" [长停顿] "没什么。你寄吧。" → HE_BACK=false
|
||
- 右滑 → 林夏:"算了,不问了。" → 对话结束
|
||
|
||
---
|
||
|
||
### MSG-05 HR王姐 · 微信语音
|
||
|
||
**Round 1**:王姐说"小夏,离职流程周三前办完就行。别有压力。"
|
||
|
||
| 方向 | 林夏说 | 王姐反应 | 效果 |
|
||
|------|---------------------------|--------------------------------------------------|--------------|
|
||
| 右滑 | "谢谢王姐。" | "别客气。你还年轻,出去看看也好。这行业你知道的。" | engagement+1 |
|
||
| 左滑 | "好的,知道了。" | [无反应,对话结束] | avoidance+0 |
|
||
| 上滑 | "王姐……有什么建议吗?" | "你想听真话?别在这行耗了。你有本事,去试试别的。" → **独家** | engagement+2 |
|
||
| 下滑 | [沉默] | [无反应,对话结束] | avoidance+1 |
|
||
| 单击 | "好。" | [无反应,对话结束] | engagement+0 |
|
||
|
||
---
|
||
|
||
### MSG-06 安安 · 微信语音
|
||
|
||
**Round 1**:安安在酒吧里大喊:"我在 Helens!快来!今天 happy hour!"(背景很吵)
|
||
|
||
| 方向 | 林夏说 | 安安反应 | 效果 |
|
||
|------|---------------------------|------------------------------------------------|--------------|
|
||
| 右滑 | "在哪儿啊?我看看吧。" | "对面那个!我给你留了位置!赶紧赶紧!" | engagement+2 |
|
||
| 左滑 | "不了,你们玩好。" | "好吧!那我给你寄一杯!" [大笑] | avoidance+0 |
|
||
| 上滑 | "你喝了多少了?" | "才两杯!我清醒得很!……好吧三杯。快来!" | engagement+1 |
|
||
| 下滑 | [沉默] | "喂?信号不好吗?好吧以后再约!" | avoidance+1 |
|
||
| 单击 | "嗯。" | "嗯是来还是不来啊!算了回头聊!" | engagement+0 |
|
||
|
||
---
|
||
|
||
### MSG-07 大学寝室群 · 5条语音
|
||
|
||
**Round 1**:群消息连续播放:
|
||
- 室友A:"我升主管了!!!"
|
||
- 室友A:"请你们吃饭!!"
|
||
- 室友B:"我的天!恭喜!!"
|
||
- 室友B:"必须喝一个!"
|
||
- 室友C:"@林夏 你也来吧"
|
||
|
||
| 方向 | 林夏说 | 群里反应 | 效果 |
|
||
|------|--------------------------|------------------------------------------------|-------------------|
|
||
| 右滑 | "恭喜恭喜!太厉害了!" | 室友A:"哈哈谢谢!我请客!你最近怎么样啊?" | GROUP_REPLY, engagement+2 |
|
||
| 左滑 | "恭喜。" | [群里继续聊别的,没人注意到你的冷淡] | avoidance+1 |
|
||
| 上滑 | "怎么升的啊?讲讲!" | 室友A:"说来话长!我们老板走了我就顶上了哈哈" → **信息** | GROUP_REPLY, engagement+2 |
|
||
| 下滑 | [沉默,不回群] | [群里继续热闹,但渐渐没人@你了] | avoidance+2 |
|
||
| 单击 | [发一个表情] | 室友B:"林夏发表情了哈哈" | GROUP_REPLY, engagement+0 |
|
||
|
||
**右滑 Round 3**(室友A 问"你最近怎么样"后):
|
||
- 右滑 → 林夏:"挺好的~你请客我去!" → 室友们欢呼
|
||
- 左滑 → 林夏:"还行。" → 室友B:"你是不是有事啊?没事可以跟我们说" → **关心**
|
||
- 下滑 → [沉默] → 对话自然结束
|
||
|
||
---
|
||
|
||
### MSG-08 未知号码 · 电话(悬疑)
|
||
|
||
**类型**:来电
|
||
**接听后**:只有呼吸声,6 秒后自动挂断。然后心跳音效。
|
||
**无选择**——悬疑钩子。
|
||
**不接** → 未接来电,号码显示"未知"。
|
||
|
||
---
|
||
|
||
### MSG-09 小美(醉)· 语音
|
||
|
||
**BGM 切换为悬疑风格**
|
||
|
||
**Round 1**(4 段醉酒语音,断断续续):
|
||
- "林夏……我跟你说个事"
|
||
- "阿哲那个人……大三的时候追过我"
|
||
- "但我没答应他……因为我知道你喜欢他"
|
||
- "我到现在都没跟你说……对不起"
|
||
|
||
| 方向 | 林夏说 | 小美反应 | 效果 |
|
||
|------|----------------------------|-----------------------------------------------|-------------------|
|
||
| 右滑 | "小美……你没事吧。" | "我没事……我就是喝多了想告诉你……你别怪我。" [哭] | engagement+2 |
|
||
| 左滑 | "我知道了。" | [沉默 3 秒] → 小美撤回了刚才的语音 | avoidance+1 |
|
||
| 上滑 | "你……为什么现在才说。" | "因为你今天……我怕你以后恨我……" → **深入** | engagement+2 |
|
||
| 下滑 | [沉默] | [10 秒后] 小美撤回了刚才的语音 | avoidance+2, nostalgia+1 |
|
||
| 单击 | "嗯。" | "你不生气吗?" [等 3 秒] "算了……当我没说" | nostalgia+1 |
|
||
|
||
**上滑 Round 3**(小美说"怕你恨我"后):
|
||
- 右滑 → 林夏:"我不恨你。" → 小美 [大哭]:"谢谢你……谢谢你林夏"
|
||
- 左滑 → 林夏:"我得想想。" → 小美:"好……对不起" → 对话结束
|
||
- 下滑 → [沉默] → 小美:"你还在吗?" → [长沉默] → 小美撤回
|
||
|
||
---
|
||
|
||
### MSG-10 妈妈 · 文字消息
|
||
|
||
**Round 1**:消息到达提示音。短暂停顿后,TTS 朗读三个字——"睡了吗?"
|
||
|
||
| 方向 | 林夏说 | 妈妈反应 | 效果 |
|
||
|------|----------------------------|----------------------------------------------|--------------------|
|
||
| 右滑 | "没有,怎么了?" | 妈妈发语音:"没事,就是想起来问一下。今天怎么样?" | MOM_LINK, engagement+2 |
|
||
| 左滑 | "嗯,要睡了。" | 妈妈发文字:"好,早点睡。"(TTS) | MOM_LINK, avoidance+1 |
|
||
| 上滑 | "妈……你能打电话给我吗?" | [电话铃响] 妈妈打来了!→ 接听后妈妈说"怎么了夏夏?" | MOM_LINK, engagement+3 |
|
||
| 下滑 | [不回复] | [30 秒后] 妈妈发文字:"看到了回一下。"(TTS) | avoidance+2 |
|
||
| 单击 | "嗯。" | 妈妈发文字:"嗯就是睡了?晚安。"(TTS) | MOM_LINK |
|
||
|
||
**上滑路径**(妈妈打来电话后):
|
||
这是一通真正的电话。妈妈说"怎么了夏夏?你声音不对。"
|
||
- 右滑 → 林夏:"没什么……就是有点累。" → 妈妈:"累了就回家歇几天。妈煮了排骨。"
|
||
- 上滑 → 林夏:"妈,我辞职了。" → 妈妈 [沉默 2 秒]:"辞了就辞了。回来再说。"
|
||
- 下滑 → [沉默,只有呼吸] → 妈妈:"不想说就不说。妈在这呢。"
|
||
|
||
**右滑路径**(妈妈问"今天怎么样"后):
|
||
- 右滑 → 林夏:"还好。" → 妈妈:"那就好。别太晚了。"
|
||
- 上滑 → 林夏:"不太好。" → 妈妈:"怎么了?" → [可继续展开]
|
||
|
||
---
|
||
|
||
### MSG-11 阿哲 · 电话(关键分支)
|
||
|
||
**类型**:来电
|
||
**Round 1**(接听后):阿哲说"那个……AirPods 的事,我能过去拿吗?就 5 分钟。"
|
||
|
||
| 方向 | 林夏说 | 阿哲反应 | 效果 |
|
||
|------|-------------------------|------------------------------------------|-----------------|
|
||
| 右滑 | "可以。但只有 5 分钟。" | "好,我马上过来。谢谢。" → [挂断] | HE_BACK=true |
|
||
| 左滑 | "不方便。我明天寄给你。" | "好吧……那谢了。" → [挂断] | HE_BACK=false |
|
||
| 上滑 | "为什么非要今天来?" | "我……明天要出差。" [停顿] "就 5 分钟。" | 继续选择 |
|
||
| 下滑 | [沉默 → 挂断音] | [电话断了] | HE_BACK=false |
|
||
| 单击 | "不了。" | "好。" → [挂断] | HE_BACK=false |
|
||
|
||
**如果 HE_BACK=true** → 消息 12 之前插入门铃声 + 敲门声
|
||
|
||
---
|
||
|
||
### MSG-12 周南 · 微信语音
|
||
|
||
**Round 1**:周南说"林夏,是我,周南。初三坐你后桌那个。好久没联系了,今天突然想到你。"
|
||
|
||
| 方向 | 林夏说 | 周南反应 | 效果 |
|
||
|------|----------------------------|--------------------------------------------------|---------------------|
|
||
| 右滑 | "周南!你还记得我啊!" | "当然记得。你是我们班最安静的那个。" [轻笑] | ZHOUNAN_DEPTH+1, engagement+2 |
|
||
| 左滑 | "嗯,你好。" | "嗯……好久不见。你现在在哪呢?" | ZHOUNAN_DEPTH+1, nostalgia+1 |
|
||
| 上滑 | "你怎么有我微信的?" | "你忘了吗?毕业那天你加的我。不过你可能早忘了哈哈。" | ZHOUNAN_DEPTH+1, nostalgia+2 |
|
||
| 下滑 | [沉默] | "你是不是不记得我了?没关系的。就是突然想说声嗨。" | nostalgia+1 |
|
||
| 单击 | "嗯……好久不见。" | "是啊,好久不见。" | ZHOUNAN_DEPTH+1 |
|
||
|
||
---
|
||
|
||
### MSG-13 周南 · 长语音 ×4
|
||
|
||
**BGM 切换为周南主题**
|
||
|
||
**Round 1**(四段语音,讲他的十年):
|
||
- "高考那年我没考好,去复读了"
|
||
- "后来上了个二本,学了个不喜欢的专业"
|
||
- "毕业回了老家,在我爸店里帮忙"
|
||
- "今年刚来北京出差……今天是我生日"
|
||
|
||
| 方向 | 林夏说 | 周南反应 | 效果 |
|
||
|------|---------------------------|--------------------------------------------------|----------------------|
|
||
| 右滑 | "一个人在北京,还好吗?" | "还行吧。习惯了。你呢?你在北京过得好吗?" | ZHOUNAN_DEPTH+1, engagement+2 |
|
||
| 左滑 | "你讲了好多。" | "是吗?不好意思,话太多了。" [轻笑] | ZHOUNAN_DEPTH+1, nostalgia+1 |
|
||
| 上滑 | "……生日快乐。" | [沉默 2 秒] "谢谢你。你是今天第一个跟我说的。" | ZHOUNAN_DEPTH+1, ZHOUNAN_SHARE, nostalgia+2 |
|
||
| 下滑 | [沉默] | "不好意思突然说这么多……那,晚安。" | avoidance+1 |
|
||
| 单击 | "嗯,我都听到了。" | "嗯。谢谢你听我说。" | ZHOUNAN_DEPTH+1 |
|
||
|
||
**右滑 Round 3**(周南问"你在北京过得好吗"后):
|
||
- 右滑 → 林夏:"不太好。今天也是我的坏日子。" → 周南:"那我们算是难兄难妹了。" [轻笑] → **ZHOUNAN_SHARE**
|
||
- 左滑 → 林夏:"还行吧。" → 周南:"那就好。"
|
||
- 上滑 → 林夏:"你为什么突然联系我?" → 周南:"因为……今天生日嘛,想起以前的事。想起你。"
|
||
|
||
---
|
||
|
||
### MSG-14 妈妈 · 第二次电话
|
||
|
||
**类型**:来电
|
||
**Round 1**:妈妈说"夏夏,你不接电话我有点担心。你还好吗?"
|
||
|
||
接听后 → 林夏自动说"嗯,我没事。"
|
||
妈妈:"真的没事?" → 短暂停顿
|
||
- 如果之前 MOM_LINK=true:"好。那早点睡。妈爱你。"
|
||
- 如果之前 MOM_LINK=false:"你今天怎么都不理妈妈?出什么事了吗?" → 玩家可选择
|
||
|
||
**状态**:接听 → MOM_LINK=true
|
||
|
||
---
|
||
|
||
### MSG-15 时光胶囊 · 系统通知
|
||
|
||
**特殊消息**:系统提示音 + "3 年前的今晚,你给自己录过一段备忘录。"
|
||
- 单击播放 → 根据玩家画像播放不同版本 → SELF_RECORD=true
|
||
- 双击跳过 → avoidance+2
|
||
|
||
*无选择交互。这条消息是独白时刻。*
|
||
|
||
---
|
||
|
||
### MSG-16 妈妈 · 长语音(结局前奏)
|
||
|
||
**条件**:MOM_LINK=true 时播放
|
||
**8 段语音**:妈妈讲她 24 岁那年的故事——1995 年在广州被辞退、被甩、外婆每天打电话问"吃了吗"。
|
||
|
||
*无选择交互。这是全游戏最长的独白,让玩家安静听完。*
|
||
|
||
播放结束 → 触发结局判定。
|
||
|
||
|
||
## 六、情感反馈系统
|
||
|
||
### 环境音随情感变化
|
||
|
||
游戏底层跑着环境音轨。根据玩家的累计 profile 分数,环境音逐渐变化:
|
||
|
||
| 倾向 | 环境音特征 | 过渡时机 |
|
||
|------------|-------------------------------|-----------------|
|
||
| engagement | 柔和雨声、远处隐约的音乐、温暖感 | 每 3 条消息检查 |
|
||
| avoidance | 安静、时钟滴答、偶尔远处车声 | 每 3 条消息检查 |
|
||
| nostalgia | 梦幻混响、远处风铃、slightly reverb | 每 3 条消息检查 |
|
||
|
||
### 对话节奏随情感变化
|
||
|
||
| 玩家倾向 | 消息间隔 | 说明 |
|
||
|-------------|-----------|--------------------------|
|
||
| 多次温暖/追问 | 较短(1.5s)| 夜晚感觉充实,消息来得快 |
|
||
| 多次冷淡/沉默 | 较长(3-4s)| 空虚感,等待的时间更长 |
|
||
|
||
|
||
## 七、结局系统(不变,但感受更强)
|
||
|
||
5 个结局的触发条件保持不变。但因为整个游戏中玩家做了大量有感知的选择,到达结局时会更有"是我导致了这个结局"的感觉。
|
||
|
||
| 结局 | 条件 | 描述 |
|
||
|-----|---------------------------|-------------|
|
||
| A | MOM_LINK + SELF_RECORD | 明天再说 |
|
||
| B | HE_BACK=false + ZHOUNAN≥1 | 寄出 |
|
||
| C | 全部已读 + 回复≤2 | 今晚就这样 |
|
||
| D | UNREAD≥8 | 早上好 |
|
||
| E | ZHOUNAN≥2 + SHARE + profile | 好 |
|
||
|
||
|
||
## 八、音频资产需求清单
|
||
|
||
### 林夏语音
|
||
| 类别 | 数量 | 平均时长 | 总时长 |
|
||
|--------------|---------|---------|------------|
|
||
| 通用短句 | 10 条 | 1s | ~10s |
|
||
| 消息专属台词 | ~45 条 | 2s | ~90s |
|
||
| **合计** | **~55 条** | | **~100s** |
|
||
|
||
### NPC 反应语音(Round 2 & 3)
|
||
| 角色 | 条数 | 总时长估算 |
|
||
|---------|---------|----------|
|
||
| 小美 | 10 条 | ~40s |
|
||
| 阿哲 | 8 条 | ~30s |
|
||
| 王姐 | 3 条 | ~10s |
|
||
| 安安 | 5 条 | ~15s |
|
||
| 寝室群 | 8 条 | ~30s |
|
||
| 妈妈 | 10 条 | ~40s |
|
||
| 周南 | 10 条 | ~40s |
|
||
| **合计** | **~54 条** | **~205s** |
|
||
|
||
### 总计新增音频
|
||
- 林夏 ~55 条,~100 秒
|
||
- NPC 反应 ~54 条,~205 秒
|
||
- **总计约 109 条语音,约 5 分钟录制量**
|
||
|
||
### UI 音效(合成,无需录制)
|
||
保持现有合成音效方案:notify, choiceReady, choiceWarm, choiceCold, choiceCurious, choiceSilent, skip, next, ending。
|
||
新增:
|
||
- `typing`:打字/录音音效(1-2 秒,合成或使用现有 sfx_keyboard)
|
||
- `send`:发送音效(极短,合成)
|
||
|
||
|
||
## 九、技术实现概要
|
||
|
||
### 新状态机
|
||
|
||
```
|
||
idle → notification/ringing → playing → choosing → responding → reacting → [choosing | idle]
|
||
```
|
||
|
||
新增两个状态:
|
||
- **responding**:林夏说话中(播放林夏语音 + 打字/发送音效)
|
||
- **reacting**:NPC 反应播放中
|
||
|
||
### 数据结构变更
|
||
|
||
```javascript
|
||
// 每条消息的 choices 结构
|
||
choices: {
|
||
right: {
|
||
linxia: 'audio/linxia/msg02_warm.mp3', // 林夏的回应
|
||
npcReact: ['audio/xiaomei/msg02_react_warm.mp3'], // NPC 的反应
|
||
state: { ... },
|
||
profile: { engagement: 2 },
|
||
followUp: { // 可选:Round 3 继续对话
|
||
audio: ['audio/xiaomei/msg02_followup.mp3'],
|
||
choices: { ... } // 递归结构
|
||
}
|
||
},
|
||
left: { ... },
|
||
up: { ... },
|
||
down: { ... },
|
||
tap: { ... },
|
||
}
|
||
```
|
||
|
||
### 对话流程伪代码
|
||
|
||
```javascript
|
||
async _handleChoice(dir) {
|
||
const choice = this.currentMsg.choices[dir];
|
||
|
||
// 1. 播放情感音效
|
||
SFX_UI[emotionSfx[dir]]();
|
||
|
||
// 2. 打字/发送音效
|
||
this.state = 'responding';
|
||
await Snd.playFXAsync('typing', 1000);
|
||
Snd.playFXOnce('send');
|
||
|
||
// 3. 播放林夏的回应
|
||
if (choice.linxia) {
|
||
await Snd.playVoiceAsync([choice.linxia]);
|
||
} else {
|
||
await sleep(1500); // 沉默
|
||
}
|
||
|
||
// 4. 播放 NPC 反应
|
||
if (choice.npcReact) {
|
||
this.state = 'reacting';
|
||
await Snd.playVoiceAsync(choice.npcReact);
|
||
}
|
||
|
||
// 5. 如果有后续对话
|
||
if (choice.followUp) {
|
||
this.currentMsg = choice.followUp;
|
||
this.state = 'playing';
|
||
await Snd.playVoiceAsync(choice.followUp.audio);
|
||
if (choice.followUp.choices) {
|
||
this.state = 'choosing';
|
||
return; // 等待下一次选择
|
||
}
|
||
}
|
||
|
||
// 6. 推进到下一条
|
||
this._proceedToNext();
|
||
}
|
||
```
|
||
|
||
|
||
## 十、总结
|
||
|
||
| 维度 | 旧版 | 新版 |
|
||
|-----------|--------------------|---------------------------------|
|
||
| 林夏的存在感 | 隐形 | 有声音、有性格、有情绪变化 |
|
||
| 选择的感受 | 四个方向一样 | 听到完全不同的对话和反应 |
|
||
| 对话深度 | 单轮 | 2-3 轮,追问路径可获独家信息 |
|
||
| 情感反馈 | 无 | 环境音变化 + 对话节奏变化 |
|
||
| 新增录音量 | — | ~5 分钟(109 条短语音) |
|
||
| 交互复杂度 | 不变 | 6 种手势,含义一致 |
|