1993 年的巴格达,电一天只来几个小时。一个二十多岁的工程学生守着 Amiga 500 写游戏——512KB 内存,没有硬盘,接在电视上。这个体量,还不够装下你今天随手发的一张表情包。
他没有开发环境,没有互联网,只有一本翻烂的 Amiga 硬件手册。游戏不向操作系统要任何东西:摇杆直接从硬件端口读,开火键是 CIA 芯片上的一个引脚。软盘倒来倒去,加上五十度的夏天,软驱烧坏了三次。就这样,Rabah Shihab 用纯 68000 汇编写完了《Babylonian Twins》——按他的说法,这是伊拉克第一款达到商业品质的游戏。美术是 Murtadha Salman 画的,音乐是 Mahir AlSalman 谱的。
游戏写完了,世道不给发行。Commodore 倒了,制裁吓跑了出版商。成品在架子上坐了十五年。
timeline title 一款游戏的三次生命 1993 : 巴格达手写汇编 完成后搁置 2008 : Amiga 论坛循 YouTube 视频考古寻人 2010 : 同一支团队手工移植 iOS 三万四千行 C++ 2026-07 : Claude 读汇编移植 Godot 核心只用一个晚上 2026-09 : 博客成文 HN 377 分 原版免费放出
第一次搬运:手
2008 年,一个 Amiga 论坛从 YouTube 上的老视频认出了这款游戏,顺藤摸瓜找到作者,把磁盘要了出来。2010 年,原班人马把它移植到 iPhone:从零写引擎,约三万四千行 C++,博客原话是”好几个月的夜晚和周末”。苹果和谷歌都做了推荐,下载量超过两百万。
注意这个对照物。同一个人,同一个游戏,十六年后要再搬一次家。这次的搬运工,是 Claude Fable 5 跑在 Claude Code 里——有终端,有文件系统,能改文件、跑汇编器、构建游戏、启动游戏、读回结果。作者自己的分工描述是:”移植我没做。我提要求,每晚玩成果,说哪里手感不对,再做那几个需要 1993 年在场之人才做得出的决定。”试玩员是他十三岁的儿子。
第二次搬运:AI
2026 年 7 月 1 日晚上,先从 2010 年的 C++ 版搬进 Godot 4。时间线是博客里抄来的:22:23 空项目起步,22:44 双胞胎兄弟已可操控——21 分钟。23:19,全部 38 种实体类型就位。凌晨 00:35 菜单、地图、存档全通,02:15 三个平台导出完成。
7 月 5 日才是真正的不情之请:把 1993 年的汇编原稿变成 Godot 里跑 50Hz 的真身。输入是 72,758 行、26 个文件的 68000 汇编,除以 26,平均每个文件两千八百行,没有一行注释,没有文档。路上还埋着雷:2008 年那次转存把长文件名全截短了,所有 include 指向不存在的名字;五个关卡源文件有一个在数据表中间被截断,且没有第二份。
AI 的做法值得整个行业抄作业:先不移植,先让 1993 年的源码重新汇编。14:34 导入,14:49 用 vasm 在 Apple Silicon 的 Mac 上复现出与出厂磁盘字节级一致的二进制——十五分钟。15:42,重建的镜像在 FS-UAE 模拟器里启动可玩。剩下约 108 字节对不齐,模型给出的解释(出厂文件是运行后存出的内存快照)作者自己承认从未验证——这是全篇唯一他没有亲手核过的说法。
flowchart LR
A[“72758 行汇编
26 文件 无注释”] –> B[“先修复再移植
vasm 字节级复现出厂盘”]
B –> C[“15 分钟构建
FS-UAE 启动验证”]
C –> D[“从读字节的代码反推格式
关卡 对象表 精灵”]
D –> E[“数据解码成 PNG 与 WAV
行为重写为 GDScript”]
E –> F[“对照 2020 年模拟器截图
五关全部像素零差异”]
然后从”读这些字节的代码”倒推每一种格式:关卡地图、16 位格子属性、对象表、运行时门、铜线天空、平面精灵。五个关卡的地图,第一次尝试全部正确。资产被解码成普通的 PNG、WAV 和 JSON;行为在引擎自己的语言里重写。玩家不用 Godot 的物理引擎,是一个普通 Node2D 加一段 150 行的碰撞例程——逐行来自 1993 年,包括作者当年凭手感调的那些修正数。验收也硬核:对照 2020 年的模拟器截图逐像素比对,五张整关画面,零像素差异。仅第一关就宽达 600 个图块、9600 像素。
手感是人补的,bug 是机器找的
博客同样诚实:核心移植是一晚,手感调了三天,跳跃弧线和蹦床时机,7 月 2 日到 4 日分批修掉。”它没有用图像对比,它截图,我看。它也没法检查游戏手感对不对。”——作者原话。
最漂亮的一个战果:AI 去爬 Google Play 的应用评论,逐条读完,列出真正描述缺陷的那几条。其中一条一星差评说”第一关的门打不开,开了也不结束”——排查发现 18 个关卡里只有 2 关有出口提示,剩下 16 关缺失。这个 bug 活了十五年,两次重制、一批测试员,全都没发现。作者的原话:”一个陌生人的差评做到了。”修复随 2.0.3 上线两个商店。
它证明什么,不证明什么
证明的部分:一个带终端、带真实工具链、且有字节级与像素级基准可对的智能体,能完成可验证的遗产工程。这件事的可靠性来自验收标准,不来自玄学。
不证明的部分同样清楚。这是单人样本,且拿着全世界最富的先验——提示者就是原作者本人,手里有 2010 年的 C++ 引擎当对照组、2020 年的参考截图、33 年的记忆。成本数据没有公开,源码仓库也没有。HN 评论区里有人在做自己的 LLM 移植——ZX81 内存转储、MSX 卡带、”16KB 的 ROM 一小时内一发命中”;也有冷言:”AI 垃圾移植不算移植。”反驳只有一句:”坐汽车不算赶路,真正的赶路是骑马。”
还有个安静的注脚:这篇讲 AI 移植的文章初稿也是 AI 写的,作者逐行改了一周。版主 dang 在帖子里留了句话——错误正在迅速变成真实性的标志。
三十三年后,原版盘免费上了 itch.io;Godot 版今秋上 Steam,1993 年的游戏作为第二启动项藏在 2026 年的游戏里,一个 50Hz,一个 60Hz,两只时钟各走各的。鞋盒还回去了。
— 来源:babyloniantwins.com 博客《Porting my 1993 Amiga game to Godot, with an LLM reading the 68000 assembly》(Rabah Shihab,2026-09-01);HN 49550375(377 分)及作者全部跟评;TouchArcade 2010-01-16 报道;Indie Retro News。所有时间戳与行数均为博客原文照录。
