190 lines
4.8 KiB
Markdown
190 lines
4.8 KiB
Markdown
# 《林夏》操作说明
|
||
|
||
---
|
||
|
||
## 一、游戏简介
|
||
|
||
全黑屏叙事游戏。玩家扮演 24 岁的林夏,用一部碎屏手机度过今晚 21:00–02:00 的 5 个小时。
|
||
|
||
- **没有视觉界面**,只有声音和触感
|
||
- **全程约 60 分钟**(5 小时游戏时间压缩)
|
||
- **16 条消息**,5 种结局
|
||
- **不需要说话**,不需要麦克风
|
||
|
||
---
|
||
|
||
## 二、开始前准备
|
||
|
||
1. 手机和电脑连接**同一 Wi-Fi**
|
||
2. 打开手机浏览器,输入地址:
|
||
|
||
```
|
||
http://<服务器IP>:8765/game/
|
||
```
|
||
|
||
3. **关灯,戴上耳机**
|
||
4. 将手机音量调到适中(建议 60–80%)
|
||
5. 轻触屏幕任意位置开始游戏
|
||
|
||
> **iOS 用户注意**:Safari 不支持震动反馈,操作正常但无震感。建议使用 Android Chrome。
|
||
|
||
---
|
||
|
||
## 三、操作总览
|
||
|
||
### 来电时
|
||
|
||
| 操作 | 效果 |
|
||
|------|------|
|
||
| **单击 / 右滑** | 接听 |
|
||
| **左滑 / 双击** | 拒接 |
|
||
| **不动** | 铃声持续(不会自动挂断) |
|
||
|
||
### 收到消息时
|
||
|
||
| 操作 | 效果 |
|
||
|------|------|
|
||
| **单击** | 播放消息内容 |
|
||
| **双击 / 左滑** | 跳过这条消息 |
|
||
|
||
### 播放中
|
||
|
||
| 操作 | 效果 |
|
||
|------|------|
|
||
| **双击** | 跳过当前播放 |
|
||
| **长按** | 重播当前消息 |
|
||
|
||
### 选择回复(听完消息后)
|
||
|
||
系统会播放提示音,进入回复选择状态:
|
||
|
||
| 操作 | 情感方向 |
|
||
|------|----------|
|
||
| **单击** | 简单回应 |
|
||
| **右滑** | 温暖 / 接受 |
|
||
| **左滑** | 冷淡 / 拒绝 |
|
||
| **上滑** | 好奇 / 追问 |
|
||
| **下滑** | 沉默 / 退缩 |
|
||
| **双击** | 不回复(跳过) |
|
||
|
||
> 部分消息的回复会触发**多轮对话**——NPC 回应后,再次进入选择状态。
|
||
|
||
### 随时可用
|
||
|
||
| 操作 | 效果 |
|
||
|------|------|
|
||
| **两指长按** | 暂停游戏 |
|
||
| **单击**(暂停中) | 继续游戏 |
|
||
| **三指点击**(暂停中) | 退出游戏 |
|
||
| **长按**(空闲/通知时) | 语音播报未读消息数 |
|
||
|
||
---
|
||
|
||
## 四、消息类型
|
||
|
||
游戏中有四种消息形态:
|
||
|
||
### 来电(call)
|
||
手机长震 + 角色专属铃声。单击/右滑接听,左滑/双击拒接。
|
||
|
||
### 微信语音(wechat_voice)
|
||
两短震 + 系统提示音。单击播放语音内容。
|
||
|
||
### 微信文字(wechat_text)
|
||
两短震 + 系统提示音。单击后由系统朗读文字内容。
|
||
|
||
### 系统通知(system_notification)
|
||
特殊消息,播放系统提示后自动播放内容。
|
||
|
||
---
|
||
|
||
## 五、行为画像
|
||
|
||
游戏全程追踪三个维度(玩家不可见):
|
||
|
||
| 维度 | 含义 | 触发行为 |
|
||
|------|------|----------|
|
||
| **avoidance**(回避) | 林夏今晚想一个人待着 | 跳过消息、不回复、沉默 |
|
||
| **engagement**(投入) | 林夏在认真面对每一个人 | 温暖回应、好奇追问 |
|
||
| **nostalgia**(怀旧) | 林夏在这一夜反复回望 | 与老同学深聊、分享自己 |
|
||
|
||
画像影响**时光胶囊**(消息15)播放哪个版本。
|
||
|
||
---
|
||
|
||
## 六、结局说明(不含剧透)
|
||
|
||
共 **5 种结局**,由以下变量决定:
|
||
|
||
| 变量 | 触发条件 |
|
||
|------|----------|
|
||
| 与妈妈的连接 | 是否接了妈妈的电话 / 回了消息 |
|
||
| 阿哲是否回来 | 23:15 那通电话的选择 |
|
||
| 与周南的深度 | 回应周南的次数与方式 |
|
||
| 是否听自己 | 00:30 时光胶囊是否播放 |
|
||
| 行为画像 | 整体回应风格 |
|
||
|
||
另有一个**隐藏结局 E**,需要与某位角色深度互动才能触发。
|
||
|
||
---
|
||
|
||
## 七、开发者 / 测试模式
|
||
|
||
在 URL 末尾加 `?dev` 可开启开发模式:
|
||
|
||
```
|
||
http://<服务器IP>:8765/game/?dev
|
||
```
|
||
|
||
- 消息之间的等待间隔从 2 秒缩短为 0.2 秒
|
||
- 屏幕底部显示调试信息(当前状态)
|
||
- 适合快速测试分支和结局
|
||
|
||
---
|
||
|
||
## 八、启动服务器
|
||
|
||
关机重启后需要重新启动 HTTP 服务器:
|
||
|
||
```bash
|
||
cd /home/xsl/blind
|
||
python3 -m http.server 8765 --bind 0.0.0.0 &
|
||
```
|
||
|
||
查看当前 IP:
|
||
|
||
```bash
|
||
hostname -I | awk '{print $1}'
|
||
```
|
||
|
||
---
|
||
|
||
## 九、文件结构
|
||
|
||
```
|
||
/home/xsl/blind/
|
||
├── game/
|
||
│ ├── index.html 主页面(黑屏)
|
||
│ ├── manifest.json PWA 配置
|
||
│ ├── 操作说明.md 本文件
|
||
│ └── js/
|
||
│ ├── utils.js 工具函数 + 浏览器 TTS
|
||
│ ├── haptics.js 震动反馈
|
||
│ ├── audio.js 音频管理器 + 合成 UI 音效
|
||
│ ├── gestures.js 单指手势检测
|
||
│ ├── profile.js 行为画像评分
|
||
│ ├── story.js 16条消息数据
|
||
│ ├── engine.js 游戏状态机
|
||
│ └── main.js 入口
|
||
└── audio/
|
||
└── mp3/
|
||
├── tts/ 角色语音(169条)
|
||
├── music/ BGM + 铃声(8条)
|
||
├── sfx/ 音效(4条)
|
||
└── ambience/ 环境底噪(3条)
|
||
```
|
||
|
||
---
|
||
|
||
*"屏幕坏了,但她的一夜还没结束。"*
|