90 lines
4.6 KiB
Markdown
90 lines
4.6 KiB
Markdown
# 崩坏童话:蜜糖村
|
||
|
||
一个看起来百分之百治愈的像素童话村庄,实际是一场情绪疗程的沉浸幻境。
|
||
纯单机网页游戏:无存档、无后端、无 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 个场景,白色层含走廊+病房两张图)
|
||
- **置齐全部线索**(C1–C9)
|
||
- **强制触发四个结局**(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
|
||
```
|