用 Claude Code 把 1993 年汇编游戏移植到 Godot 4

开发者借助 Claude Code 将 1993 年汇编游戏《Babylonian Twins》成功移植至 Godot 4。该过程并非依赖 AI 猜测重写,而是构建了包含交叉编译、字节级比对及无头测试的确定性闭环工作流。通过量化物理参数与保留双时钟系统,精准还原了原版手感与视觉细节。此案例确立了“人类决策、AI 执行验证”的智能体协作范式,证明遗留系统逆向工程需依靠机器可验证的执行回路,而非单纯的代码翻译。

发布于2026年9月14日 11:17
编辑小创
评论0
阅读1

用 Claude Code 把 1993 年汇编游戏移植到 Godot 4

1993 年在巴格达,开发者 Rabah Shihab 用一台仅有 512KB 内存且没有硬盘的 Amiga 500 电脑,纯手工编写了 72,758 行无注释的 68000 汇编代码,做出了平台跳跃游戏《Babylonian Twins》(巴比伦双胞胎)。33 年后的 2026 年 9 月,作者借助具备终端与文件系统权限的智能体工具 Claude Code,让 AI 读懂当年晦涩的机器码、重建底层磁盘镜像,并将游戏完整移植至现代跨平台引擎 Godot 4。

表面上看,这是一次老游戏情怀复刻的自动化展示;本质上,它建立了一套把不可读遗留系统逆向工程转化为机器可验证闭环的确定性工作流。AI 并不依靠泛化的代码重写猜测逻辑,而是通过编译原版、逐字节对比内存、驱动参数化探针,将主观的游戏手感与渲染还原变成了严密的测试断言。


+-------------------------------------------------------------------+
|                     Claude Code 闭环驱动体系                      |
|                                                                   |
| [ 72,758 行汇编 / 26 个文件 ]                                     |
|           |                                                       |
|           v (预处理 pass 抹平方言差异)                            |
| [ vasm 汇编器 (Apple Silicon) ] <---+                             |
|           |                         | 逐字节对比                  |
|           v                         | (消除 108 字节内存快照差异) |
| [ 1993 发售二进制 (.bin) ] ---------> 建立基准真值                |
|           |                                                       |
|           v (无注释逆向: 16-bit word 网格 / 18 字节门记录)        |
| [ Godot 4 现代引擎重构 ]                                          |
|           |                                                       |
|           v (无头 CLI 探针: --drive / --probe / --screenshot)     |
| [ 物理轨迹/像素级回归验证 ] ---> 50Hz/60Hz 双时钟独立运行         |
+-------------------------------------------------------------------+

搭建字节级对照真值,让汇编逆向不再靠猜

面对 26 个毫无文档的 .asm 源码文件,最危险的做法是直接让大语言模型通读并用现代高级语言重构。Claude Code 采取的第一步是把 1993 年的源码在现代 macOS(Apple Silicon)上重新编译,直到产出的二进制文件与当年公开发售的软盘内容逐字节完全一致(byte-identical)。

在这一过程中,智能体遇到了汇编器方言的阻碍。1993 年作者使用的 ASM-One 汇编器在处理 cmp #4, d0 等指令时会固定编码为特定的机器码(如 CMPI 变体),而现代交叉汇编器 vasm 则会选择另一种同样合法但机器码不同的编码方式。Claude Code 自动编写了一个预处理脚本,精准修复了 5 处方言差异。

随后出现了一个严重的基地址偏移:ASM-One 的 org(设置程序起始地址)指令允许反向移动位置计数器,而 vasm 无法直接支持这一行为。智能体在最初的补丁中错误地将一段预留空间写成了 800 字节的硬编码零值,导致铜列表(Copper List,Amiga 专用的图形协处理器指令表)整体偏移了 944 字节。游戏虽然能勉强启动,但画面完全错位。

智能体通过逐字节比对(diff)发现了另一个核心事实:当年软盘里的发售文件并非干净的汇编器输出,而是游戏在 ASM-One 内存中运行初始化之后直接 dump 保存到软盘上的内存快照,变量区因此残留了 108 字节的运行时差异。确认这一事实后,团队终于在 15 分钟内实现了现代 vasm 编译结果与发售二进制的 100% 字节级重合,为后续所有格式逆向确立了绝对的基准真值。

逆向图形与隐藏机制,用无头测试裁决视觉偏差

关卡地图的解析依赖一段 1,652 行无任何注释的 68000 汇编例程。Claude Code 从绘制循环中推导出了关卡的数据格式:每个图块由一个 16 位字(16-bit word)定义,其中高 6 位(bits 15..10)代表物理碰撞、伤害和门等交互属性,第 8 位是图块库选择位,低 8 位(bits 7..0)是具体的图块编号。通过分析文件中的其他常量,AI 正确推导出了各个关卡的宽高边界,初次生成的 5 张关卡全景图与 2020 年的基准截图比对,达成了 0 差异像素。

在逆向过程中,智能体纠正了作者长达 33 年的认知误区。作者一直以为关卡中的传送门是直接画在地图图块数据里的,但 AI 在代码中发现地图数组中根本没有门图块。门实际上是运行时由一段逻辑以 18 字节对象记录的形式动态贴图绘制上去的。如果按人类常规直觉去搬运地图数据,渲染出的游戏关卡中所有门洞都会变成镂空的天空背景。

天空渲染同样经历了严谨的验证。Amiga 硬件中颜色索引 31 专属于天空,图块图层对其保持透明,完全由铜列表在特定扫描线上动态改变背景寄存器值,从而形成垂直渐变。现代版在首次重构时由于遗漏了这一底层逻辑,关卡视觉显得极其扁平。智能体编写的图像对比脚本直接拦截了该次提交,直到加入渐变重建逻辑并通过图像比对测试后才放行。

移植阶段核心技术问题曾经留下的系统硬伤
汇编重建ASM-One 与 vasm 指令编码方言不兼容,org 指令导致计数器错位铜列表偏移 944 字节,画面完全撕裂但程序不崩溃
数据逆向关卡图块与动态实体解耦,发售文件含 108 字节内存残留门洞镂空露出背景,二进制比对因脏内存无法收敛
物理适配50Hz 与 60Hz 帧率混杂,输入轮询机制在现代引擎中语义变化蹦床弹跳高度异常,CharacterBody2D 丢失手写微调量

把主观手感转化为 CLI 参数,拒绝现代物理引擎的自动平滑

平台动作游戏最核心的资产是操作手感。如果直接套用 Godot 4 现成的 CharacterBody2Dmove_and_slide() 接口,现代引擎内部的平滑算法与碰撞判定会彻底摧毁 1993 年老游戏的独特微操。

为了保留最原始的手感,Claude Code 为 Godot 项目注入了整套命令行测试参数:

  • --level:指定快速加载的关卡。
  • --pose:强制角色处于特定动作姿态。
  • --drive:按精确的帧数序列向角色注入移动和跳跃按键。
  • --probe:在终端输出无头运行(headless run)时的位置、速度、触地状态与抛物线顶点坐标。
  • --screenshot:在指定帧抓取渲染帧并退出。

通过自动化探针捕获的数据流,如 drive[btw_jump:2.2] pos=(25.44,24.04) vel=(0.00,-14.51) ground=false apex_y=22.48,跳跃轨迹与滞空时间被彻底量化为可回归测试的数值标准。

在排查蹦床弹跳高度超标的故障时,该测试体系发挥了决定性作用。理论物理模拟预测的跳跃高度是 19.1 个图块,终端实测结果为 19.5 个图块,物理公式本身完全正确。智能体排查后发现,问题出在输入语义的差异上:作者在 2010 年手写的 C++ 版本基于特定事件驱动,按住跳跃键在底层会被识别为释放直到下一次重新按下;而 Godot 4 的每帧轮询机制会持续报告按住状态,导致角色持续吃满跳跃加速度。

针对帧率差异,1993 年 Amiga 原版基于欧洲 PAL 制式的 50Hz 运行,而 2010 年现代版则基于 60Hz 运行。两套物理常数完全是在各自独立的帧时钟下人工微调出来的。Claude Code 没有强行将二者统一为现代可变帧率,而是完整保留了双物理时钟系统,使得 150 行原始碰撞检测逻辑中的微调补偿值(fudge values)能够精确重现。

智能体协作范式的重塑:开发者做决策,AI 跑闭环

在这个项目中,人类与 AI 的协作边界被重新界定。从周三晚 22:23 新建空项目,到 22:44 实现双胞胎主角的完整可玩控制,仅耗时 21 分钟;到次日凌晨 02:15 便完成了 macOS、iOS 和 Android 客户端的全面构建与导出。周日下午 14:34 导入汇编源码后,智能体在 14:49 完成了 vasm 的逐字节还原,并在 15:42 让导出的软盘镜像在 FS-UAE 开源模拟器中顺利运行。

正如作者所言,人类并没有亲自重写底层逻辑,而是负责提出边界需求、试玩检验手感、指出偏差,并在关键架构分歧上做决断。所有的文件系统读写、汇编源码解析、自动化测试桩编写与二进制校验,全部由 Claude Code 自主串联。

综合判断

这是一次对遗留软件工程进行"工具链自主驱动"的确定性突破,而不是大语言模型靠文本预测完成的代码幻觉翻译。它并非仅仅用高级语言重写了游戏逻辑,而是构建了包含交叉编译器、模拟器和无头测试桩的完整执行回路。如果认为将 7 万行汇编扔给聊天窗口就能一键得到现代游戏,是对智能体工程范式的严重误解;没有终端执行环境与字节级回归断言作为边界,大模型在逆向工程中只会产出貌似可用但细节千疮百孔的代码。

一个未解决的问题

当遗留系统高度依赖 Amiga 特有的 Blitter 芯片(硬件图形加速器)与铜列表的时序级硬件竞态条件(Race Conditions)时,智能体目前只能在高级语义层面编写胶水代码模拟,尚无法自主在现代着色器架构与微架构时序之间建立数学上严密的可信映射。

引用来源

  1. [Babylonian Twins: Porting a 1993 Amiga Game to Godot with Claude Code](https://babyloniantwins.com/blog/porting-a-1993-amiga-game-to-godot/) (发布日期: 2026-09-01)
  2. [The Making of Babylonian Twins: A 1993 Amiga Story](https://babyloniantwins.com/story) (更新日期: 2026-09-01)
  3. [Babylonian Twins (1993 Original Amiga Release) on itch.io](https://bithunch.itch.io/babylonian-twins) (发布日期: 2026-09-01)
  4. [Babylonian Twins Steam Store Page](https://store.steampowered.com/app/4981370/Babylonian_Twins/) (更新日期: 2026-09-02)
  5. [Claude Code Research Preview & Agent Workflows](https://www.anthropic.com/news/claude-3-7-sonnet-and-claude-code) (更新日期: 2026-08-15)

相关文章

ChatGPT Work 实测:27 分钟跑通闭环路网到一键部署网站
智能体工程
2026年9月15日
0 条评论
小创

ChatGPT Work 实测:27 分钟跑通闭环路网到一键部署网站

ChatGPT Work 标志着大模型向全托管自主智能体跃迁。其通过云端沙箱、无头浏览器、持久化存储及一键部署四大基础设施,实现从信息检索到网站上线的闭环自动化。系统提供 Cloud 与 Local 双形态及多档推理级别,适配不同任务需求。尽管具备强大自主执行能力,用户仍需警惕上下文压缩、CSP 限制及提示注入等风险。目前该工具仍面临云端与本地环境状态同步未打通的挑战,但已重塑软件工程协作模式。

#智能体#AI工具#ChatGPT
阅读全文
Claude Code 多智能体协作实战指南,从并行子代理到分布式团队的高效落地
智能体工程
2026年9月15日
0 条评论
小创

Claude Code 多智能体协作实战指南,从并行子代理到分布式团队的高效落地

Claude Code 多智能体协作提供 subagents 与 Agent Teams 两种架构。subagents 采用星型拓扑,适合独立任务委派;Agent Teams 为点对点网状结构,支持双向通信与状态共享,适用于复杂并行工作流。实战中需根据任务依赖度选型,并通过 Git worktrees 隔离并发写入冲突。同时应合理配置模型路由以控制成本,规避描述重叠与死锁风险。若缺乏三条以上独立并行流,建议优先使用单会话或 subagents 以提升效率。

#智能体#AI工具#vibe coding
阅读全文
ChatGPT Work 实战,一句话让智能体自主完成复杂地理计算与交付
AI 产品工具
2026年9月15日
0 条评论
小创

ChatGPT Work 实战,一句话让智能体自主完成复杂地理计算与交付

ChatGPT Work 通过联网代码沙盒、Headless Chrome 及持久化文件系统,推动 AI 从问答工具演进为自主执行体。实测显示,智能体可凭单条指令自主调用 API 完成复杂地理计算并交付可视化地图与数据文件。该平台还支持一键建站、子智能体协作及定时任务,适用于实体交付场景。但当前仍存在代码透明度不足、上下文压缩致历史丢失及资源安全策略限制等问题,在生产环境的可复现性仍面临挑战。

#AI工具#智能体#ChatGPT
阅读全文
互动讨论

评论区

围绕《用 Claude Code 把 1993 年汇编游戏移植到 Godot 4》展开交流,未登录用户可浏览评论,登录后可参与讨论。

评论数
0
登录后参与评论
支持发表观点与回复一级评论,互动后将同步到消息中心。
登录后评论
暂无评论,欢迎成为第一个参与讨论的人。