一个1993年在制裁封锁下的巴格达、用68000汇编手写而成的Amiga游戏,在2026年被同一位作者用Claude Code重新读了一遍源码,搬进了Godot 4引擎。三步实验——把2010年重写的34,000行C++搬进Godot、把原始72,758行汇编按50Hz原始帧率原生重建、再把两个版本拼在一起当彩蛋——全部跑通了。

比"AI一晚移植老游戏"这个漂亮故事更值得琢磨的,是作者自己写下的一句轻描淡写的话:有些地方是错的,我几周后才发现。这句话背后,是一套没被标题突出、却比时间戳重要得多的机制。

时间戳很快,但"手感对"从来不快

C++那一步确实惊人:从空项目到角色可玩,只用了21分钟。但作者紧接着补了一句——让跳跃弧线、弹簧机关和判定手感"对",又花了三天,分三次批量修复。真正难啃的68000汇编那一步,从导入源码到重建的Demo在FS-UAE模拟器里跑起来,只用了约一小时,可这个"一小时"的前提,是有一份2010年的C++参考实现摆在旁边当地图,还有作者本人每天晚上盯着玩、随时纠错。

叙事 vs 实情 标题里的故事 21分钟出现可玩角色 一小时重建汇编版本 "AI读懂了68000汇编" 结论:一夜复活 补上的事实 手感调优另花三天 靠既有C++参考实现打底 靠原作者天天纠错 结论:人机闭环加速

真正撑起移植的,是一套闭环校验系统,不是AI裸读汇编

Claude Code能把72,758行、26个文件、没有一行像样注释的老代码啃下来,靠的不是"理解力爆表",而是搭出了一条可以自我验证的流水线:先用vasm在Apple Silicon上重新汇编原始源码,再用FS-UAE模拟器跑起来当作"标准答案",两边比对字节是否一致;同时加了--drive--probe这类命令行调试接口,把"跳跃手感对不对"这种主观问题,转成一串可以直接读的坐标和速度数字。

闭环校验五步 汇编源码 vasm重编译 比对字节 FS-UAE模拟 调试接口 drive/probe 原作者 逐帧校验

关键在于,这条链路里每一步都有一个可以对照的"标准答案"——已有C++实现、可以运行的原版模拟器、原作者的记忆。把这四样拿掉,换成一款没人重写过、没有活人记得细节的老游戏,同样的方法还能不能跑通,目前没有答案。

六个bug,才是最该被记住的部分

作者承认"有些地方是错的,我几周后才发现",但这句话背后有具体清单:守卫攻击判定漏掉了距离上限、隐藏地形层被无条件渲染导致暗道提前可见、敌人与玩家更新顺序颠倒让弹簧机关效果翻倍、门锁标识符解析错误导致教程关卡出口打不开、音效循环长度算错导致中途重播、以及移除双子远程交换的"距离限制"意外破坏了雕像贴图系统。

这六处错误有一个共同点:全都藏在边界条件、执行顺序和隐藏语义里——恰恰是没写进注释、也不在训练数据里的那部分。

  • 提醒.如果没有原作者天天玩、天天挑错,这类bug大概率会原样留在成品里,普通玩家很难靠试玩发现。

108字节和"port"这个词的争议

重建过程中还留下一个没解开的尾巴:重新汇编出来的二进制,和1993年发行的原版相比,有约108字节的差异。作者的解释是,当年用ASM-One直接汇编进内存、运行过一段之后才存盘,所以磁盘上留的是"跑过的内存快照"而不是干净的汇编输出——这个解释合理,但至今没有给出逐字节的对照证据。

另一个更根本的问题是措辞本身。最终的Godot版本不包含任何一行原始68000机器码,图形被解码成PNG、音效解码成WAV、关卡数据转成JSON,再用Godot脚本重写行为逻辑。这更接近"用数据重制",而不是通常意义上的"移植"。对游戏保存圈来说,原始Amiga磁盘镜像和汇编源码能不能完整公开,可能比这次Godot复刻本身分量更重——前者是保存历史,后者是让历史能被现在的设备打开。

会跑的模拟器是oracle,活人的记忆才是最后一道校验。

接下来值得盯的,不是这款游戏还能不能玩,而是同样的方法用在一款没有参考实现、没有活人记得细节的老游戏上,还剩多少胜算。