Files
ModelTest20260714/Fable-5-High/README.md
T

90 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 崩坏童话:蜜糖村
一个看起来百分之百治愈的像素童话村庄,实际是一场情绪疗程的沉浸幻境。
纯单机网页游戏:无存档、无后端、无 localStorage、无外部网络请求,浏览器打开即玩。
完整流程约 25–35 分钟,含 4 个结局。
## 启动方式
```bash
npm install
npm run dev # 开发模式(Vite,默认 http://localhost:5173
npm run build # 类型检查 + 产出纯静态 dist/
npm run preview # 本地游玩 dist/ 构建产物
```
技术栈:**Phaser 3 + TypeScript + Vite**。逻辑分辨率 320×180,任意窗口尺寸整数倍放大居中,`pixelArt` 关闭纹理平滑。
## 按键
| 按键 | 功能 |
|---|---|
| WASD / 方向键 | 四向移动 |
| E(或回车) | 交互 / 推进对话 / 确认选项 |
| W/S 或 ↑/↓ | 对话中切换选项 |
| `` ` ``(反引号) | 开关 Debug 面板 |
标题画面输入名字后回车开始(留空默认「小满」)。
## Debug 面板(服务验收)
按反引号 `` ` `` 开关,默认关闭、无 UI 痕迹,不影响正常游玩。功能:
- 直接设置**幸福值**(0–100,观察侵蚀矩阵五档:10/40/70/90/100)与**觉知值**
- 跳转**当前日**(1–7,回到当日清晨小屋)
- **传送**到全部 11 张地图(10 个场景,白色层含走廊+病房两张图)
- **置齐全部线索**C1C9
- **强制触发四个结局**(E1 糖衣 / E2 回收 / E3 苏醒 / E4 静默)
## 素材制作流程(全部本项目内自制,无任何外部资产)
### 像素美术(Aseprite
全部图片由 `tools/gen_art.lua` 在 Aseprite 内逐像素绘制生成——瓦片集(80 枚 16×16:草地/石板路/湖水/花丛/莓果丛/树/房屋墙顶门/室内地板/家具/井/雾/白色层墙地等)、主角(16×24,四朝向 × 4 帧行走,首帧兼待机)、对话头像(微笑 + E3 专用「真实的脸」)、7 组具名 NPC 立绘(各 smile/flat/off/blink 四档,off 档与 smile 仅差 1 像素——右眼低 1 像素)、双子鸟 2 帧张嘴动画、群演 ×5 各 2 帧循环、灰麻雀、向日葵表盘 14 帧。
```bash
# 重新生成全部素材(PNG → public/assets/Aseprite 源文件 → art/
aseprite -b --script tools/gen_art.lua
# macOS 应用包路径:/Applications/Aseprite.app/Contents/MacOS/aseprite
```
色板:村庄用糖果色(草绿/奶油黄/蜜糖橙/天空蓝),白色层独立灰白色板;无抗锯齿、无描边渐变。
### 地图(Tiled
10 个场景 11 张地图由 `tools/gen_maps.mjs` 生成 Tiled `.tmx` 源文件(`maps/`,统一 `ground` / `obstacles`collides=true/ `objects`spawn、NPC 点位、door、交互点)三层结构),再经 Tiled 命令行导出 JSON
```bash
node tools/gen_maps.mjs
for f in maps/*.tmx; do
tiled --export-map --embed-tilesets "$f" "public/assets/maps/$(basename "$f" .tmx).json"
done
# macOS 应用包路径:/Applications/Tiled.app/Contents/MacOS/Tiled
```
场景清单:小满小屋 12×8、村广场 30×20(枢纽)、面包房 15×10、杂货店 15×10、诊所 12×8、湖畔 24×16、花田 20×14、古井空地 14×10、雾墙边界 20×8、白色层(走廊 20×6 + 病房 10×8)。所有室外场景经村广场互通,门与出入口成对。
### 音频
无任何音频文件。BGM 为 Web Audio 程序合成的 8 小节 8-bit 治愈循环(方波主旋律 + 三角波低音 + 独立鸟鸣声部),音效仅 4 个(对话哔哔、任务完成叮、黄昏钟声、心电监护滴声),全部程序合成,见 `src/core/audio.ts`。playbackRate / 低通滤波 / 鸟鸣静音由侵蚀矩阵(`CorruptionDirector`)统一驱动。
## 自动化验收(可选)
```bash
npm i -D playwright && npx playwright install chromium
node tools/e2e.mjs # 标题→Day1、侵蚀五档截图、全场景传送、四结局强制触发、控制台零报错
node tools/e2e_flow.mjs # 七日全流程:15 任务、9 线索、黄昏/梦境/脚本雨、E3 苏醒线
node tools/e2e_mech.mjs # 悲伤行为 5 项、强制欢乐庆典与逃离计数、S4 文本腐蚀、四结局判定
```
## 代码结构
```
src/core/director.ts CorruptionDirector:幸福/觉知/日期/任务/线索/侵蚀阶段的唯一真源
src/core/textcorrupt.ts 文本腐蚀(10 组同音错字对照表,渲染层替换,优先命中咪咪)
src/core/audio.ts Web Audio BGM/SFX 合成与矩阵联动
src/core/debug.ts Debug 面板
src/data/story.ts 全部台词(阿福公告 D1–D7 逐字、龟爷爷 C9 三段链、结局文案等)
src/scenes/ Boot / Title / 11 张地图各一个 Scene / 常驻 UI / Dream / Ending
```