# 《林夏》操作说明 --- ## 一、游戏简介 全黑屏叙事游戏。玩家扮演 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。 --- ## 三、消息类型与接收方式 游戏中有三种消息形态: ### 来电 - 触发:手机长震 + 角色专属铃声 - 响 **20–30 秒**后自动漏接 | 操作 | 效果 | |------|------| | **单点** | 接听 | | **左滑** | 拒接 | | **不动** | 漏接(对方挂断) | ### 微信语音 / 微信文字 - 触发:两短震 + 系统提示音(TTS 报出发件人) | 操作 | 效果 | |------|------| | **单点** | 播放语音 / 念出文字 | | **左滑** | 忽略(保持未读) | | **不动** | 保持未读,晚些再听 | --- ## 四、回复消息 **听完语音 / 文字念完后**,进入等待回复状态: | 操作 | 发送内容 | |------|----------| | **单点** | 发"嗯。"(最简单的回执) | | **双点** | 发标准回复(针对该消息的一句话) | | **长按 1 秒** | 进入**细回复**模式 | | **左滑** | 已读不回 | | **不动** | 维持"已读未回"状态 | --- ## 五、细回复(核心机制) 长按 1 秒后,震动确认进入细回复。系统会依次念出 **4 个候选回复**: ``` 一…… "好,明天寄。" 二…… "你怎么不自己来拿。" 三…… "你那边……都好吗。" 四…… (什么都不说) ``` **在听到目标选项时,朝对应方向滑动:** | 滑动方向 | 对应选项 | |----------|----------| | **左滑** | 一 | | **右滑** | 二 | | **上滑** | 三 | | **下滑** | 四 | > **没听清?** 单点屏幕可重听所有选项,或长按 1 秒重新播放。 > 选错了也没关系——每条消息只影响行为画像,不会"game over"。 --- ## 六、查看当前状态 **随时下滑**,系统会用语音告诉你当前在哪个页面,以及可以做什么操作。 例如: - 主屏幕时下滑 → "主屏幕,3条未读。上滑查看收件箱。" - 来电时下滑 → "妈妈来电中。单点接听,左滑拒接。" - 听完消息后下滑 → "阿哲的消息已播完。单点回嗯,双点标准回复,长按细回复,左滑已读不回。" > 不确定自己在哪?下滑就对了。 --- ## 七、查看未读列表(收件箱) 在主屏幕**上滑**,进入收件箱模式。 系统会依次念出所有未读消息: ``` "收件箱:4条未读。妈妈,来电。阿哲,语音。周南,语音。……" ``` - **单点** → 跳转至列表第一条 - **左滑** → 返回主屏幕 - **等待 8 秒** → 自动关闭收件箱,返回游戏 --- ## 八、游戏内时间 游戏将现实的 21:00–02: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/ 环境底噪 ``` --- *"屏幕坏了,但她的一夜还没结束。"*