《Babylonian Twins》是 Rabah Shihab 於 1993 年在巴格達以 Amiga 500 製作的平台遊戲,僅有 512 KB 記憶體、沒有硬碟,並以 Motorola 68000 組合語言直接操控硬體。當時伊拉克受經濟制裁、供電有限且缺乏網際網路與開發資源,他以唯一一本 Amiga 硬體手冊,手寫精靈圖、畫面掃描列、碰撞與輸入處理;遊戲甚至在遊玩期間關閉作業系統中斷,直接控制 Copper 視訊協同處理器與 Blitter 圖形搬移硬體。這款作品被稱為伊拉克首款商業遊戲,卻因 Commodore 倒閉與制裁環境而未能廣泛發行;團隊 2010 年曾以約 3.4 萬行 C++ 重製手機版,累積超過 200 萬次下載。
作者這次以大型語言模型(LLM)Claude Fable 5 搭配 Claude Code,先將 2010 年的 C++ 版本移植到 Godot 4 遊戲引擎,再挑戰直接解讀 7.2 萬餘行、共 26 個檔案的 68000 組合語言原始碼,重建忠於 1993 年版的遊戲。模型可存取本機檔案、修改程式、編譯、啟動遊戲並讀取測試結果;它先以 vasm 組譯器重建出與當年發行版幾乎逐位元組相同的檔案,再從讀取例程反推關卡地圖、碰撞屬性、敵人物件表、門的動態繪製方式,以及 Copper 製作的天空漸層與水面色彩循環。作者特別肯定模型保留了兩套不同的固定更新頻率:現代版為 60 Hz、原版為 50 Hz,避免摩擦力、跳躍弧線等手調數值因更新頻率改變而失真。
不過,這不是一次毫無瑕疵的自動移植。模型曾漏掉守衛攻擊判斷的上界,使高處守衛能隔著地板傷害下方玩家;也誤把隱藏圖層直接繪出、誤解四把鑰匙的資料格式,並將單聲道音效錯當立體聲而造成循環過早重播。作者還發現,彈簧床高度看似是物理問題,實際上是舊版 iOS 輸入事件的歷史相容行為:玩家必須重新按下跳躍鍵,才能觸發高跳。此外,模型協助處理商店素材與評論,從一則一星評論找到關卡出口提示遺漏的問題。原始 Amiga 版已以 ADF(Amiga Disk File,Amiga 磁碟映像檔)形式免費釋出;新版則將重寫後的行為與轉換後的圖片、音效資料放入 Godot,並不包含原始 Amiga 程式碼。
Hacker News 的討論多半讚賞這項工作同時保存了巴格達早期遊戲開發史與 Amiga 技術細節,也有不少人分享以 LLM 重建 ZX81、MSX、DOS 或主機遊戲的經驗,並期待建立可重複使用的移植框架、測試工具與知識庫。較審慎的意見則指出,應以 UAE(Amiga 模擬器)讓原版與移植版接受相同輸入的並行測試,並仔細檢查那 108 位元組差異究竟來自組譯器編碼、舊硬體環境,還是作者所推測的執行中記憶體快照。也有人批評文章帶有明顯的 AI 文風;作者回應,初稿確由 AI 協助整理,但他以原始筆記、程式與截圖逐行審閱修改。另有 Amiga 開發者補充,直接寫入中斷暫存器雖可實作,但若追求較符合系統慣例的做法,原可呼叫 Amiga 作業系統提供的 `Disable()` 函式。
👥 70 則討論、評論 💬
https://news.ycombinator.com/item?id=49550375