从github迁移过来

This commit is contained in:
xsl
2026-05-18 18:39:49 +08:00
commit 9c5d9e586c
89 changed files with 9035 additions and 0 deletions
+237
View File
@@ -0,0 +1,237 @@
# 《林夏》操作说明
---
## 一、游戏简介
全黑屏叙事游戏。玩家扮演 24 岁的林夏,用一部碎屏手机度过今晚 21:00–02:00 的 5 个小时。
- **没有视觉界面**,只有声音和触感
- **全程约 60 分钟**(5 小时游戏时间压缩)
- **16 条消息**5 种结局
- **不需要说话**,不需要麦克风
---
## 二、开始前准备
1. 手机和电脑连接**同一 Wi-Fi**
2. 打开手机浏览器,输入地址:
```
http://172.28.107.97:8765/game/
```
3. **关灯,戴上耳机**
4. 将手机音量调到适中(建议 60–80%)
5. 轻触屏幕任意位置开始游戏
> **iOS 用户注意**:Safari 不支持震动反馈,操作正常但无震感。建议使用 Android Chrome。
---
## 三、消息类型与接收方式
游戏中有三种消息形态:
### 来电
- 触发:手机长震 + 角色专属铃声
- 响 **2030 秒**后自动漏接
| 操作 | 效果 |
|------|------|
| **单点** | 接听 |
| **左滑** | 拒接 |
| **不动** | 漏接(对方挂断) |
### 微信语音 / 微信文字
- 触发:两短震 + 系统提示音(TTS 报出发件人)
| 操作 | 效果 |
|------|------|
| **单点** | 播放语音 / 念出文字 |
| **左滑** | 忽略(保持未读) |
| **不动** | 保持未读,晚些再听 |
---
## 四、回复消息
**听完语音 / 文字念完后**,进入等待回复状态:
| 操作 | 发送内容 |
|------|----------|
| **单点** | 发"嗯。"(最简单的回执) |
| **双点** | 发标准回复(针对该消息的一句话) |
| **长按 1 秒** | 进入**细回复**模式 |
| **左滑** | 已读不回 |
| **不动** | 维持"已读未回"状态 |
---
## 五、细回复(核心机制)
长按 1 秒后,震动确认进入细回复。系统会依次念出 **4 个候选回复**:
```
一…… "好,明天寄。"
二…… "你怎么不自己来拿。"
三…… "你那边……都好吗。"
四…… (什么都不说)
```
**在听到目标选项时,朝对应方向滑动:**
| 滑动方向 | 对应选项 |
|----------|----------|
| **左滑** | 一 |
| **右滑** | 二 |
| **上滑** | 三 |
| **下滑** | 四 |
> **没听清?** 单点屏幕可重听所有选项,或长按 1 秒重新播放。
> 选错了也没关系——每条消息只影响行为画像,不会"game over"。
---
## 六、查看当前状态
**随时下滑**,系统会用语音告诉你当前在哪个页面,以及可以做什么操作。
例如:
- 主屏幕时下滑 → "主屏幕,3条未读。上滑查看收件箱。"
- 来电时下滑 → "妈妈来电中。单点接听,左滑拒接。"
- 听完消息后下滑 → "阿哲的消息已播完。单点回嗯,双点标准回复,长按细回复,左滑已读不回。"
> 不确定自己在哪?下滑就对了。
---
## 七、查看未读列表(收件箱)
在主屏幕**上滑**,进入收件箱模式。
系统会依次念出所有未读消息:
```
"收件箱:4条未读。妈妈,来电。阿哲,语音。周南,语音。……"
```
- **单点** → 跳转至列表第一条
- **左滑** → 返回主屏幕
- **等待 8 秒** → 自动关闭收件箱,返回游戏
---
## 八、游戏内时间
游戏将现实的 21:0002:00(5 小时)压缩为 **60 分钟**真实时间。
| 游戏时间 | 真实等待 |
|----------|----------|
| 21:03 | 约 36 秒 |
| 21:30 | 约 6 分钟 |
| 22:30 | 约 18 分钟 |
| 23:45 | 约 33 分钟 |
| 02:00 | 约 60 分钟 |
消息到来时间固定,**漏接 / 不听是合法选择**,但漏掉的内容不会重发。
---
## 九、结局说明(不含剧透)
共 **5 种结局**,由以下 5 个变量决定:
| 变量 | 触发条件 |
|------|----------|
| 与妈妈的连接 | 是否接了妈妈的电话 / 回了文字 |
| 阿哲是否回来 | 23:15 那通电话的选择 |
| 群里是否发言 | 寝室群消息的回应 |
| 与周南的深度 | 回应周南的次数与方式 |
| 是否听自己 | 00:30 时光胶囊是否播放 |
另有一个**隐藏结局 E**,需要与某位角色深度互动才能触发。
---
## 十、行为画像
游戏全程追踪三个维度(玩家不可见):
| 维度 | 含义 | 触发行为 |
|------|------|----------|
| **avoidance**(回避) | 林夏今晚想一个人待着 | 漏接、不回、已读不回 |
| **engagement**(投入) | 林夏在认真面对每一个人 | 细回复、主动追问 |
| **nostalgia**(怀旧) | 林夏在这一夜反复回望 | 重听同一条消息、分享自己 |
画像决定 **00:30 时光胶囊**播放哪个版本(明朗 / 迷茫 / 温柔)。
---
## 十一、彩蛋
- **夜间启动**(现实时间 22:00–04:00 之间打开游戏):开场多一句话
- **消息09**:小美醉语音结束后会有一个撤回事件
- **消息04**:如果一直不回阿哲,会听到一个小细节
---
## 十二、开发者 / 测试模式
在 URL 末尾加 `?dev` 可开启**10倍速**模式:
```
http://172.28.107.97:8765/game/?dev
```
- 所有消息的触发时间缩短为原来的 1/10
- 全程约 **6 分钟**可打通
- 适合测试结局分支
---
## 十三、启动服务器
关机重启后需要重新启动 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 音频管理器
│ ├── gestures.js 单指手势检测
│ ├── profile.js 行为画像评分
│ ├── story.js 16条消息数据
│ ├── engine.js 游戏状态机
│ └── main.js 入口
└── audio/
└── 00_raw/
├── tts/ 角色语音(68条)
├── music/ BGM + 铃声
├── sfx/ 音效
└── ambience/ 环境底噪
```
---
*"屏幕坏了,但她的一夜还没结束。"*