← 返回开发日志

五周、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 素材搭的第一张地图——瀑布、小桥、树林,全是借来的

RPG Maker A2 地面图集转换成 Godot 格式 RPG Maker A2 地面图集转换后的效果——各种地形 autotile

第一周的基建狂潮

2 月 16 日的第一次提交里已经塞进了农耕系统、NPC 寻路、草药数据系统。听起来很夸张,但 prototype 就是这样——先把所有想法扔进去,之后再整理。

接下来的一周是“基建大爆炸”:

在这个阶段,每一次 commit 都像在往一锅汤里加料。没人知道最后味道会怎样,但至少先把食材都准备好。

标题画面——天气系统做好后,连标题都在下雨 标题画面——天气系统做好后,连标题都在下雨


第二幕:系统的成长

中医系统的三次进化

这个游戏的核心是中医,而中医系统经历了最痛苦的迭代。

最开始有三个独立的“健康”系统:WellnessEngine(养身引擎)、WellnessManager(养身管理器)、NeedsEngine(需求引擎)。它们各自追踪玩家和 NPC 的健康状态,但数据格式不统一、信号互相冲突、存档加载顺序混乱。

三月中旬的大合并把这三个系统全部并入了一个统一的 MedSystem——30 轴健康模型、数据驱动的辨证系统、诊断驱动的战斗。三个旧系统被彻底删除。那个 commit 的 diff 里全是红色(删除)和绿色(新增),看着既壮观又揪心。

统一 30 轴健康模型——六邪、八纲、五脏、六腑全在一个系统里 统一 30 轴健康模型的设计文档——六邪、产物、八纲、五脏、六腑

诊断界面——望闻问切四诊合一,12 种邪气让人头大 望闻问切诊断界面——“此人有 12 种邪气/失衡”……好吧,这确实有点 overwhelming

任务系统的大瘦身

9 个主线任务脚本,每个都有大约 200 行一模一样的样板代码:NPC 占用、阶段持久化、超时处理、清理逻辑。

解决方案是创建 MQSequenceBase 基类和 SceneQuestDispatcher 调度器——从此每个任务只需要在配置表里写一行。9 个脚本全部迁移,200 行样板变成 1 行配置。

迁移过程中还发现一个隐藏 bug:NPC 在过场动画中被设为不可见时,物理碰撞体也跟着消失了。玩家走过去,NPC 就像不存在一样。修复后在 set_npc_visible() 里加入了物理状态同步。

玩家在桥上遇到了“鬼”——NPC 被隐藏了但物理碰撞体还在游荡 经典 bug:NPC 被 hidden 了但 physics 还在——玩家在桥上被一个看不见的“鬼”挡住了路

GameManager 的分家

GameManager 最初是个“什么都管”的大杂烩——时间、背包、玩家状态、调试命令、存档,全在一个 2000+ 行的文件里。

Phase 1 拆分把它拆成了四个独立 autoload:

所有调用方都改成直接引用新 autoload,没有留下任何兼容性 shim。干净利落。

那些哭笑不得的 Bug 们

开发过程中最不缺的就是“意外惊喜”:

开发天气系统时,把雾都弄到铁匠家里了 天气系统的第一次测试——铁匠家里浓雾弥漫,对话都看不清了

NPC 寻路——永远的痛 NPC 寻路 debug 可视化——那些蓝色射线就是 NPC 试图走的路径。最后我们放弃了让 NPC 完美避障,改成了“解决不了就躲开”策略

Claude 把四根葱切成了六根葱 作物生长 sprite 自动切割——AI 把四个生长阶段切成了六个,其中两个是空气

算法把茅草屋压扁了 自动缩放算法的杰作——左边是原图,右边是“优化”后的结果。房子:我做错了什么?

穿过树林——至今未解的谜 “穿过树林”任务——它永远无法完成。至今仍是未解之谜。

给豆豆安排哪里种什么 机器人农场管理界面——给豆豆(机器人)指定每块地种什么。现在想想,这也太 micromanaging 了

跨场景的 NPC 时不时玩消失 “景墨在村庄”——但是只有这行字,NPC 本体不见了。跨场景 NPC 管理的日常


第三幕:测试的觉醒

三月初,我们开始认真跑测试套件。然后就发现了——

连锁测试崩溃

三周内(3 月 2 日到 19 日),我们一波接一波地修复预存的测试失败:

最终的里程碑: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 个音效,全部需要找到合法的替代品。

最终方案:

一个 commit 删除了 393 个文件,添加了 295 个新文件。那大概是整个项目 diff 最大的一次提交。

美术的新方向

音频替换完了,但美术才是更大的挑战。

我们找到了 bluecarrot16 的 LPC terrain pack——一套开源的像素风地形素材(CC-BY-SA 3.0)。但它的格式又和 Godot 不一样(当然了)。于是新一轮的 tile 转换开始了,这次是从 LPC 格式到 Godot 格式,而不是从 RPG Maker 格式。

这就引出了上一篇 blog 里讲的 autotile 冒险故事。

与此同时,美术 pipeline 也在搭建中:

从依赖别人的素材,到建立自己的素材生产线——这大概是 prototype 阶段最重要的转变。

Art Pipeline Tracker 界面 我们开发的 Art Pipeline Tracker——追踪每个素材从生成到部署的完整状态


第五幕:差点丢失的角色创建系统

三月下旬,一个 git stash 操作出了问题。

角色创建系统——纸娃娃分层换色、性别选择、发型切换——这些刚写好的代码被 stash 了,然后在一次 checkout 后差点被覆盖。

最后从 stash 里恢复了回来。commit message 写着:“Restore lost changes from stash: character creation flow, CharacterRenderer, scene updates”。

听起来很淡定,但那个下午的心跳大概不太平静。教训:多 commit,勤 commit。

Claude 画的 paper doll——太逗了 角色创建系统的第一版——Claude 画的纸娃娃。嗯……我们后来换了美术方向


第六幕:Production 规划

三月中旬,一个关键决定:

留在现有项目里,增量迁移。不从零开始。

五周的代码基础——30 多个 autoload、数据驱动的架构、信号通信模式——这些都值得保留。需要替换的是内容层面的东西:美术、音乐、任务文本、对话。

美术方向定为清明上河图式的明亮中国古典风——暖色石路、橄榄绿草地、青灰瓦顶。不是阴暗的水墨,而是明媚的田园。

村庄全景——季节轮盘、NPC 互动、环境美术 从 RPG Maker 素材过渡后的村庄场景

季节/时间轮盘 UI 春夏秋冬季节轮盘——时间系统的视觉呈现

生产路线图规划了 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,我们来了。