Porting my 1993 Amiga game to Godot, with an LLM reading the 68000 assembly
TL;DR
The author of Babylonian Twins wrote the Amiga game in 68000 assembly in sanctions-era Baghdad in 1993. He had Claude Fable 5 port both the 72,758-line original and his 2010 C++ remake to Godot. It reverse-engineered undocumented level, object and sprite formats on its own, mostly in an evening each. The bugs it left were subtle ones he found only by playing.
The article
- Running in Claude Code with a terminal, the model gave the game command-line flags to load levels, script button presses, dump state and take screenshots. With them it could test jumps and doors without a human. Moving the 34,000-line 2010 C++ engine into Godot 4 took one night. A character was playable 21 minutes after the empty project.
- It kept each original fixed tick rate: 60 Hz for the 2010 game and 50 Hz for the Amiga one. The reason is that drag is applied multiplicatively per frame. It skipped Godot's CharacterBody2D, so the hand-tuned collision code carried over line for line, fudge numbers included.
- Before porting the assembly, it made the 1993 sources build again with vasm. It bridged five ASM-One dialect differences until the output matched the shipped binaries. It said the last 108 mismatched bytes were variables in a memory snapshot saved after the game had run. The author says he never checked that claim himself.
- It decoded the level maps on the first try. A year earlier, an older model needed several rounds of hints to crack the same format. It then matched its renders pixel for pixel against 2020 captures, after adding back two copper effects: the sky gradient and the water cycle. It also found that code stamps the doors in at runtime. They were never in the map data.
- The errors were quiet ones. A dropped upper bound let a doorman guard hit the player thirteen tiles below him, through solid rock. Rendering a hidden tile layer opened every secret passage. A trampoline bounced too high because Godot reported a held jump button. The 2010 build had read it as released, a side effect of an old tvOS workaround.
- The model also did the release work, rendering store screenshots from the game in eleven languages and filling Steam forms through the browser. It combed fifteen years of reviews. One misspelled one-star review exposed a missing door prompt on the last free level that no tester had caught.
Why it matters
Worth reading in full for anyone attempting an LLM-driven port or reverse-engineering job. The original has the actual 68000 listings, the map-cell bit layout, the timestamps and screenshots of the 1993 map editor. They show how the model worked from the code that reads each format.
The discussion
A warm, busy thread, with the author answering nearly every question. Most of it was other people trading their own LLM retro ports and methods. The main friction was over the article's AI-drafted prose, plus a smaller argument about whether a rewrite in Godot counts as a port at all.
Everyone is porting old games now
Commenters listed their own LLM ports, such as Syndicate, Populous, Stunt Car Racer and a ZX81 memory dump rebuilt in Go. The author said a 16 KB MSX ROM ports in under an hour, plus half a day of follow-up to make it playable. Others used spec files per topic and manual unpacking, needed a lot of steering, or caught the model looking up the original game online. On cost, one porter put a near one-shot port at half a weekly Claude Max limit; the author never hit his limit.
The model extracted the graphics, the sounds and then built the whole game. It takes less than 1 hour to port a 16kb rom file, in one shot. You will get a playable game, but you need a few follow up prompts to get it back to its original form.
At one point it did cheat by looking up the zx81 Hobbit online to find pieces that were missing.
The AI-drafted prose
The top comment in its thread called the AI-drafted prose unreadable, and others pointed to tells like "Step one, the safe ask". The author said he edited every line over a week; several readers said the content was worth it, and might not exist without the help. dang had raised the point by email but found the story too good to block. He gives non-native speakers the same advice, since mistakes now read as authenticity.
I'm not against using AI to code, but if you're actually passionate about the project and want to share it with others, you should use your own words.
To judge by how the AI classifiers react, translation tools are leaving a ton of LLM imprints on text which are not strictly about translation.
How faithful is the port
Asked whether the port had been run against the original in UAE with the same inputs, the author said no. He judged it by feel from thousands of hours of play, and credited the decision to skip Godot's physics. Another suggested the 108-byte mismatch could come from equivalent instruction encodings; a reply said only a behaviour check would then prove anything. People also asked for the Claude session transcripts, and were told they are deleted after 30 days by default.
A small number of bytes different with same behaviour is what I would expect from a reassembly like this.
Ok but if assembler normalises encoding then a byte diff won’t prove anything. Behaviour check is the way.
Why not just emulate
Some called the project slop, arguing an Amiga game belongs in UAE or on an FPGA, and an AI rewrite is no real port. Replies said the alternative was no remaster at all, since nobody would hand-port 72,758 lines of assembly. The original disk image is free anyway, they added. One noted you can't really ask the model that did the work, because a fresh instance lacks the session context.
The old game remains available, and you can play it for free. This isn’t some zero sum situation where the existence of the remastered game sets the world back in some way.
Without the context, you're talking to a *different* instance of the AI that doesn't have the memory of the instance that ported the code, so the answers you get won't be nearly as useful.
Amiga development in 1993
The author profiled the 1993 game by having the copper draw a white line from the start of vertical blank. Whenever the line crept into the visible area, he spread object updates across frames. Others noted that switching interrupts off by hand was crude next to exec's Disable(), and that NTSC Amigas ran at 60 Hz, not 50. The author named the MSX game The Maze of Galious as his main inspiration.
My technique was drawing a white line using the Amiga Copper, starting at the beginning of the top vertical blanking period. As I added more game objects, logic, and rendering, I had to make sure the line does not drop below the beginning of the active display area.
Consensus
Most found the project impressive and moving. Many took it as proof that LLMs can now reverse-engineer obscure, undocumented retro code that seemed out of reach a year ago.
Dissent
A vocal minority disliked the AI-drafted prose. A few dismissed an AI rewrite as no real port, compared with running the original in an emulator.