A developer decompiles Fast Food Tycoon 2 and uncovers the secret logic behind its isometric city
Decompiling Fast Food Tycoon 2: Drawing the World

Using GPT-6.1 and Ghidra, a developer decompiled all 4,046 functions of the 2001 business sim Fast Food Tycoon 2 and reverse-engineered its renderer. The game paints cities as a static image plus sprites, repaints only dirty regions, and splits color from lighting with a 25-hour daylight table. The agent also found the pizza-scoring code: 24 topping regions, a plagiarism check, and schedules that send goths home until 09:00.
There's even a plagiarism check (!) based on ingredient weights. So rearranging a competitor's pizza (a strategy I've definitely tried before) doesn't fool it.
- yayachiken
Amazing post, I loved this game as a kid.
Interesting that the Pizza scoring rules are that simple. I remember that the in-game encyclopedia said something that kids and teens prefer big portion sizes. This led me to always create a Pizza that just had an entire fried chicken on it, as it was easy to reproduce, made a lot of money (big ingredient costs = big margins), and gave good ratings.
And I definitely noticed that Pizzas covered with an even tomato sauce did better than blank ones, probably from the symmetry rules. I just assumed it was hardcoded that people do not like naked pizza.
Interesting note for the translation: The game is German and they went deeply into the whimsy, e.g. most of the demographic groups had funny and very colloquial names. It seems they translated "Grufties" with "Goths". Which makes sense considering the real meaning of Grufti in German (members of the Goth subculture), but in the game the term was actually used as funny way to refer to old senior people (people almost in a "Gruft" = "crypt"). So it's obviously a mistranslation, pulling the word straight from the dictionary. Maybe "Cryptid" would have been more fitting. :D
- vintagedave
This is how an AI-assisted article should be: they used AI to decompile, find things out (with some very interesting techniques listed at the top of the article) but the article itself is human-written. It shows they used AI to help themselves understand, not used AI to do everything.
- glimshe
This was a good example where a talented engineer worked hand in hand with AI to get the decomp to work.
I think some people are brute forcing it through a lot of agent time and expense, but they used 6.1 Sol Medium, a great but not a top capability AI model+effort.
This matches what I've been hearing regarding talent and experience making a big difference in task speed and cost when using AI. When prices stop being subsidized, this will be a key factor when evaluating engineer performance: "you've used a lot of tokens and don't have much to show for!"
Who knows where this is going to end, but Talent+AI still beats Vibe work by a lot.
- fredrikholm
> I picked it out of a lineup of discounted games in a mall and it hasn't left my psyche ever since.
This is how I found most of my favorite PC games as well, including this one.
Often there were these vertical mesh cylinders with a very low effort sign stuck in them that just read the price and that was it. You had to dig through layers upon layers of arbitrary games and surprisingly often found real gems.
It was an eye-opener for tween me to realize that some of the best games made in that era were about as popular as some of the worst games from the same era.
Thank you for the article, a really fascinating read! Good start to my morning.
- Scaevolus
Rather than loading the raw approximate decompile code into SQLite, you'll likely get better results using Ghidra directly with tool calls through an MCP adapter. This is especially important when the analysis tracing fails, like with some complex indirect jump patterns with vtables. Xrefs and pattern searches are of course natively supported, and you can load in memory snapshots.
A simple "/goal analyze this codebase, assign names for each function, and creates named structs for parameters." works well, even with quite weak agents. Remember, parsing through heaps of text is their forte!
This setup also works for more exotic non-x86 architectures with more dynamic code loading, like PS2, N64, etc.