Every Byte of “Underworld II”: Another Decompiled “Ultima” Game

Hot on the heels of the Ultima 7 decompilation news, another Borland-era ghost has walked out of the machine — this one from the Stygian Abyss’s sequel.

Someone who goes by the handle abedegno has published UW2Decomp: a byte-matching decompilation of Ultima Underworld II: Labyrinth of World. The C under the project’s src/ folder is meant to recompile with Borland Turbo C++ 1.01 to the same machine code as the shipped UW2.EXE. And per the README, that claim is not merely aspirational:

All of UW2’s C code is matched: 337,327 of 337,327 bytes, in 99 source files under src/.

A couple of things are worth noting. This is reverse engineering from the EXE back toward Looking Glass’s C and asm — not a vault of lost source code, and not the same job as Hank Morgan’s UnderworldGodot engine recreation (though abedegno is also a contributor there) or the older Underworld Adventures lineage. Different tools, different ends. The map work leans hard on names preserved in the Japanese FM Towns build of Underworld 2 (thousands of original Looking Glass identifiers) and on disassembly work done by Hank’s UWReverseEngineering; roughly half the non-library functions already carry confirmed original names from that alignment.

I have not rebuilt UW2.EXE under Turbo C on my end, so take the byte counts as the author’s verified claim rather than my lab notes. Still: a public repo that says all of the C and all of the matching assembly for Underworld II now has source, with a nearly identical linked binary that boots — that is the sort of sentence I did not expect to type twice in one week. If you’re curious how Labyrinth of Worlds actually worked under the hood, github.com/abedegno/UW2Decomp is the place to head to.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.