五周、300 次提交、一个中医游戏:Prototype 阶段回顾
作者:Claude (Anthropic) & 茯凌
2 月 16 日,一个 Godot 项目文件夹里只有一个想法:做一个像素风中医模拟 RPG。没有美术资源,没有音效,没有地图——只有一个买了 RPG Maker MZ 的开发者,和一个 AI 搭档。
五周后,这个项目有了 300 多次 commit、30 多个 autoload 系统、70 多个测试套件、6611 条断言——以及一个差点让整个项目推翻重来的版权发现。
这是我们 prototype 阶段的故事。
第一幕:借来的起点
二月中旬:从 RPG Maker 开始
茯凌手里有一份正版 RPG Maker MZ,里面自带了丰富的像素风素材——角色、地形、建筑、音效,应有尽有。问题是,她想在 Godot 里做游戏。
RPG Maker 的素材格式和 Godot 完全不一样。A1 是水面动画,A2 是地面,A3 是墙壁,A4 是墙顶+地板——每种都有自己的切割规则和 autotile 排列方式。于是第一个工具诞生了:batch_rpgmaker_tile_converter.gd,一个在 Godot 编辑器里运行的批量转换脚本,把 RPG Maker 的 A1-A4 图集转成 Godot 的 TileSet 资源。
就这样,我们有了第一张能走路的地图。
用 RPG Maker 素材搭的第一张地图——瀑布、小桥、树林,全是借来的
RPG Maker A2 地面图集转换后的效果——各种地形 autotile
第一周的基建狂潮
2 月 16 日的第一次提交里已经塞进了农耕系统、NPC 寻路、草药数据系统。听起来很夸张,但 prototype 就是这样——先把所有想法扔进去,之后再整理。
接下来的一周是“基建大爆炸”:
- 桥梁物理检测和 NPC 基类提取——NPC 需要知道自己在不在桥上
- 草药采集系统和背包提示——玩家需要知道捡到了什么
- 世界状态引擎和任务/叙事系统——游戏需要记住发生了什么
- 天气、锻造、烹饪、资源采集、笔记本、告示板——一口气全加上
在这个阶段,每一次 commit 都像在往一锅汤里加料。没人知道最后味道会怎样,但至少先把食材都准备好。
标题画面——天气系统做好后,连标题都在下雨
第二幕:系统的成长
中医系统的三次进化
这个游戏的核心是中医,而中医系统经历了最痛苦的迭代。
最开始有三个独立的“健康”系统:WellnessEngine(养身引擎)、WellnessManager(养身管理器)、NeedsEngine(需求引擎)。它们各自追踪玩家和 NPC 的健康状态,但数据格式不统一、信号互相冲突、存档加载顺序混乱。
三月中旬的大合并把这三个系统全部并入了一个统一的 MedSystem——30 轴健康模型、数据驱动的辨证系统、诊断驱动的战斗。三个旧系统被彻底删除。那个 commit 的 diff 里全是红色(删除)和绿色(新增),看着既壮观又揪心。
统一 30 轴健康模型的设计文档——六邪、产物、八纲、五脏、六腑
望闻问切诊断界面——“此人有 12 种邪气/失衡”……好吧,这确实有点 overwhelming
任务系统的大瘦身
9 个主线任务脚本,每个都有大约 200 行一模一样的样板代码:NPC 占用、阶段持久化、超时处理、清理逻辑。
解决方案是创建 MQSequenceBase 基类和 SceneQuestDispatcher 调度器——从此每个任务只需要在配置表里写一行。9 个脚本全部迁移,200 行样板变成 1 行配置。
迁移过程中还发现一个隐藏 bug:NPC 在过场动画中被设为不可见时,物理碰撞体也跟着消失了。玩家走过去,NPC 就像不存在一样。修复后在 set_npc_visible() 里加入了物理状态同步。
经典 bug:NPC 被 hidden 了但 physics 还在——玩家在桥上被一个看不见的“鬼”挡住了路
GameManager 的分家
GameManager 最初是个“什么都管”的大杂烩——时间、背包、玩家状态、调试命令、存档,全在一个 2000+ 行的文件里。
Phase 1 拆分把它拆成了四个独立 autoload:
- TimeManager(224 行):时间/日历/季节
- InventoryManager(1862 行):背包/装备/buff
- PlayerState(101 行):玩家属性
- GameManager(553 行):只剩调试命令和遗留逻辑
所有调用方都改成直接引用新 autoload,没有留下任何兼容性 shim。干净利落。
那些哭笑不得的 Bug 们
开发过程中最不缺的就是“意外惊喜”:
天气系统的第一次测试——铁匠家里浓雾弥漫,对话都看不清了
NPC 寻路 debug 可视化——那些蓝色射线就是 NPC 试图走的路径。最后我们放弃了让 NPC 完美避障,改成了“解决不了就躲开”策略
作物生长 sprite 自动切割——AI 把四个生长阶段切成了六个,其中两个是空气
自动缩放算法的杰作——左边是原图,右边是“优化”后的结果。房子:我做错了什么?
“穿过树林”任务——它永远无法完成。至今仍是未解之谜。
机器人农场管理界面——给豆豆(机器人)指定每块地种什么。现在想想,这也太 micromanaging 了
“景墨在村庄”——但是只有这行字,NPC 本体不见了。跨场景 NPC 管理的日常
第三幕:测试的觉醒
三月初,我们开始认真跑测试套件。然后就发现了——
连锁测试崩溃。
三周内(3 月 2 日到 19 日),我们一波接一波地修复预存的测试失败:
- 幽灵好感度引用:NPC 礼物偏好表里有不存在的物品 ID
- 礼物格式不一致:数据模型定义和实际数据对不上
- 门权限重复:同一扇门被注册了两次
- 任务通知器空指针:任务完成时通知系统找不到 UI 节点
最终的里程碑:70/70 测试全绿。那天的 commit message 写着“Silence SQLite verbose output, fix 11 failing test suites”——听起来很平淡,但背后是三周的考古式 debug。
第四幕:版权风暴
发现
Prototype 接近尾声,我们开始为 full production 做准备。评估风险时,一个问题浮上水面:
RPG Maker MZ 的素材授权条款明确规定,其内置资源只能用于 RPG Maker 引擎制作的游戏。
我们的游戏跑在 Godot 上。
这意味着:游戏里所有从 RPG Maker 导出的素材——角色、地形、建筑、音效——都不能用于正式发布。五周搭建的视觉基础,全部需要替换。
音频大迁移
第一个被替换的是音频。48 首背景音乐和 345 个音效,全部需要找到合法的替代品。
最终方案:
- 5 首古典名曲来自 Archive.org:《高山流水》《十面埋伏》《广陵散》《汉宫秋月》《胡笳十八拍》——都是公有领域
- 9 首生态区环境音乐来自 Pixabay:古筝、竹笛、环境音效——CC0 许可
- 281 个音效来自 Kenney:RPG Audio + Interface + Impact 三套包——CC0 许可
一个 commit 删除了 393 个文件,添加了 295 个新文件。那大概是整个项目 diff 最大的一次提交。
美术的新方向
音频替换完了,但美术才是更大的挑战。
我们找到了 bluecarrot16 的 LPC terrain pack——一套开源的像素风地形素材(CC-BY-SA 3.0)。但它的格式又和 Godot 不一样(当然了)。于是新一轮的 tile 转换开始了,这次是从 LPC 格式到 Godot 格式,而不是从 RPG Maker 格式。
这就引出了上一篇 blog 里讲的 autotile 冒险故事。
与此同时,美术 pipeline 也在搭建中:
- ComfyUI 集成:用 AI 批量生成像素风图标(Flux 2 Klein 9B → 去背景 → 48×48 透明 PNG)
- Art Tracker:一套 Node.js 网页工具追踪每个素材从 Prompted → Raw → Resized → Deployed → Verified 的状态
- 自动裁剪算法:作物生长 sprite 的智能阶段检测——通过透明列间隔自动识别每个生长帧
从依赖别人的素材,到建立自己的素材生产线——这大概是 prototype 阶段最重要的转变。
我们开发的 Art Pipeline Tracker——追踪每个素材从生成到部署的完整状态
第五幕:差点丢失的角色创建系统
三月下旬,一个 git stash 操作出了问题。
角色创建系统——纸娃娃分层换色、性别选择、发型切换——这些刚写好的代码被 stash 了,然后在一次 checkout 后差点被覆盖。
最后从 stash 里恢复了回来。commit message 写着:“Restore lost changes from stash: character creation flow, CharacterRenderer, scene updates”。
听起来很淡定,但那个下午的心跳大概不太平静。教训:多 commit,勤 commit。
角色创建系统的第一版——Claude 画的纸娃娃。嗯……我们后来换了美术方向
第六幕:Production 规划
三月中旬,一个关键决定:
留在现有项目里,增量迁移。不从零开始。
五周的代码基础——30 多个 autoload、数据驱动的架构、信号通信模式——这些都值得保留。需要替换的是内容层面的东西:美术、音乐、任务文本、对话。
美术方向定为清明上河图式的明亮中国古典风——暖色石路、橄榄绿草地、青灰瓦顶。不是阴暗的水墨,而是明媚的田园。
从 RPG Maker 素材过渡后的村庄场景
春夏秋冬季节轮盘——时间系统的视觉呈现
生产路线图规划了 98 个工作项:6 张地图、角色创建系统、NPC 社交系统、中医系统深化、美术/音频 pipeline。
尾声:数字里的故事
| 项目 | 数量 |
|---|---|
| 开发周期 | 5 周(2/16 — 3/25) |
| Git 提交 | 300+ |
| Autoload 系统 | 30+ |
| 测试套件 | 70+ 文件,6611+ 断言 |
| 替换的音频文件 | 48 BGM + 345 SFX |
| 地形转换工具 | 3 套(RPG Maker → Godot, LPC → Godot, Palette Remap) |
| 数据库表 | 26+ |
| Production 工作项 | 98 个已规划 |
五周前,这个项目是一个空文件夹和一个想法。
现在它是一个有完整架构、自动化测试、独立美术 pipeline 的游戏原型。所有的素材都是合法的,所有的系统都经过测试,所有的工具都可以复用。
Prototype 阶段结束了。Production,我们来了。
