back
101 comments
It's 100% decompiled to C, but not fully labelled yet. That means there's lots it's auto-generated names all over the place. It would be interesting to see someone try to port it now though.
Would LLMs be good at labelling, or would the risk of false-positives just waste more time than it saved?
I wish someone ran a proper study. In my experience it helps mark some patterns you may not be immediately familiar with, like CRC functions/tables. It also does a good job where no thinking is required, like when you have partial information: "for(unk=0; unk<unk2; unk++) { unk3=players[unk]... }" - you know what the names are, you just need to do the boring part. For completely unknown things, it may get more interesting. But I know I'd like to at least see the suggestions. It's a long and boring work to decompile things fully.
In my limited experience (my use case was a decompiled minified jar that I just wanted to peek around in), LLM's are absolutely fantastic at it.

As with any LLM output, of course it won't be 100% perfect, and you shouldn't treat the output as truthful "data". But I could absolutely use it to make sense of things that at first sight were gibberish, with the original next to it.

The task sounds similar to descriptions in the API space. People figured LLMs would be awesome at annotating API specs with descriptions that are so often missing. Truth is, everyone is realising it’s a bit the opposite: the LLMs are “holding it wrong”, making a best guess at what the interfaces do without slightly deeper analysis. So instead, you want humans writing good descriptions specifically so the LLM can make good choices as to how to piece things together.

It’s possible you could set it off on the labelling task, but anecdotally in my experience it will fail when you need to look a couple levels deep into the code to see how functions play with each other. And again, imo, the big risk is getting a label that _looks_ right, but is actually pretty misleadingly wrong.

Given the source code for the build engine, which was ported to the N64 and used to make the game, is freely available for non-commercial use, could it be used to map some of the function and variable names?
> build engine, which was ported to the N64 and used to make the game

I don't think that's what they did. Looking at some gameplay footage on youtube, it's a third person game with a full 3d player model, not flat sprites, and the level geometry seems to be full proper 3d without the build engine distortions when looking up and down. I think they built or used a different engine designed to take advantage of the N64s graphics hardware.

this might have some limited uses, but you'd need to know how it was optimised, and also perhaps build the build engine for the same target and then decompile it to see what it looks like after that kind of treatment.?

perhaps with a bit of luck you'd get some useful markers / functions mapped tho, its not unheard of.

problem in my mind (didnt test it ofc) would be that the decompiled version is decompiled from a different ISA that build usually compiles to, so the decompiled version in my mind would look totally different. (you dont have the ported sources i suppose, only the originals).

With things like Ghidra now freely available, "100% decompiled to C" really isn't that high of a bar anymore.
Gillou68310 looks to have been a one person army for 99% of it, what an impressive show of dedication.

The Legend of Zelda: Twilight Princess has been getting farther along as well https://decomp.dev/zeldaret/tp

While we're here I'll give a shoutout to the Castlevania: Symphony of the Night decomp which is coming along pretty well too (still lots to do)

https://github.com/Xeeynamo/sotn-decomp

Always good to see SotN mentioned (and nice to see a familiar handle).

There are so many cool things that have been built for this decomp, probably my favorite being the dups tool (tools/dups) for finding duplicate or near duplicate code.

Why Duke Nukem: Zero Hour of all games?
It's a bit of a lost gem. Unlike the Playstation games, which are Tomb Raider clones and aren't well regarded, Zero Hour is based on the Build engine like the original Duke Nukem 3D was and while it doesn't hold up to that standard, it's arguably the best of the non-3D Realms Duke Nukem games. Unfortunately they changed the perspective to third person (with a half-finished first person mode as a cheat) and it controls poorly. With the source available, that can now be fixed.
Why is the first person mode considered half finished?
Good question, but I wish they had a screenshot thre so I could send this to my school buddies. Last time we played this everything was still a simple chaotic heaven :)
Would really like to know what makes a person (or group of people) invest the time and energy to do this? Is there a group of hobbyist gamers who work on titles they love? Is it about digital conservation?
I've spent a lot of time reverse-engineering vintage synthesizer firmware (which is a bit simpler than modern games). I did complete end-to-end annotations of these two vintage synth ROMs:

- https://github.com/ajxs/yamaha_dx7_rom_disassembly

- https://github.com/ajxs/yamaha_dx9_rom_disassembly

It started because I was just curious about how these devices actually worked. In the end I learned a lot of really invaluable skills that really broadened my horizons as an engineer. I got a chance to talk to a handful of incredibly smart people too. The actual work can be a lot of fun. It's like piecing together a really large and technical jigsaw puzzle. In my case, it also led to me being able to release a fun firmware mod: https://github.com/ajxs/yamaha_dx97

In case anyone is curious about how I worked, I wrote a bit of a tutorial article: https://ajxs.me/blog/Introduction_to_Reverse-Engineering_Vin...

It can be a bit analogous to archaeology too. Even though in my case the DX7 is only 42 years old, that was an aeon ago in computing terms. You gain a bit of insight into how different engineers used to design and build things. Even though development for the N64 is fairly recent, from memory the console had some interesting constraints that made development tricky.

I guess you’ve never kicked ass and chewed bubble gum
Maybe they just really love the game. This is a form of tribute.

I too have a beloved video game from my childhood: Mega Man Battle Network 2. That game changed my life. I learned English and became a programmer because of it. I have two physical copies of it in my collection, one of them factory sealed.

Sometimes I open the game in IDA and try to reverse engineer bits and pieces of it. I just want to understand the game. I don't have the time, the dedication or even the low level programming knowledge that these badass folks in the ROM hacking community have, but I still try it.

I'm the person who reimplemented Cosmo's Cosmic Adventure (DOS, 1992) and my original reasoning was a desire to know how it was able to do some of the graphical tricks it did on such underpowered hardware (it could run on an IBM AT). The game wasn't anything special by any metric, but it was an important piece of my childhood and I felt an attachment to it. I also learned a hell of a lot about the PC platform, the C ecosystem from the 80s, and my own tastes as an engineer.

https://github.com/smitelli/cosmore

https://cosmodoc.org/

I gave a talk at Game On Expo about decompiling Castlevania: Symphony of the Night (https://github.com/xeeynamo/sotn-decomp ) earlier this year and talked a little bit about exactly this. Almost everyone who works on loves the game. After that, motivation varies: some want to see ports, some want to mod, some want to learn everything they can, some want to preserve. Along with those I also like the challenge (not unlike sudoku).

Doing it long enough requires learning compiler history and theory, understanding business and engineering pressures of making the game, and occasionally reveals why parts of the game work the way they do.

I stream working on SotN and am happy to answer any questions in chat if you’re interested in learning more - https://m.twitch.tv/madeupofwires/home

You climb a mountain because it's there. Different people have different mountains.

It's an interesting challenge, you can improve it or make it do X,Y,Z, you can add speedrunning or competition gaming features, solving puzzles gives a sense of accomplishment, a certain small group gives you social clout, etc.

In addition to those categories, speedrunning glitch hunters tend to gravitate to participating in these projects as well. E.g. the Twilight Princess decomp was started primarily by and for the speedrunning community.
This is how the text adventure/interactive fiction community started. Some hackers reverse engineered the Infocom z-machine then built new languages and compilers so new games could be created.
Preservation and ease of modification. New console units are not being made anymore, and the number of old ones is limited, they can break, and there is an issue with output video formats that are incompatible with modern monitors/TVs. There is emulation, but it's not perfect and can be demanding. Decompilations enable people to create native binaries for different platforms. This makes playing the game easier and more accessible.
Same. Is there a project page or anything that explains the context, the reasons, the history behind this? I bet it would be very interesting.

The Readme is too technical and misses a writeup on the soul of the project: Section 1, title. Section 2, already talking about Ubuntu and dependencies. Where is section "Why?" :-) ?

There are people who spend hours and hours analyzing bit characters in things like Lord of the Rings (where did the Blue Wizards go? Who is Tom Bombadil?) or Star Wars. This is a similar fan obsession. Remember fan comes from fanatic.
Nostalgia: a sentimental longing or wistful affection for the past, typically for a period or place with happy personal associations.
Zero Hour was one of the must have's of the Nintendo 64 era and one of the few good games in the latter part of the Duke Nukem series. Despite its challenging platforming and a few soul-crushing levels, the game had consistently rich settings and managed to recreate that Duke 3D charm.

The recent Perfect Dark port was incredible and I hope this decomp gets the same treatment.

"A decompilation of Duke Nukem Zero Hour for N64.

Note: To use this repository, you must already own a copy of the game."

We all now do, of course
Very cool! But… GitHub? Do they ever learn? 3, 2, 1… Takedown notice!
A quick inspection of the repo indicates that it doesn’t contain any copyrighted material. They’ve just uploaded the code to perform the decompilation.
Why would they take it down? Decompilations of Nintendo games are on GitHub as well.
Are LLMs well suited to this kind of reverse engineering?
You can definitely do a lot of relabeling that way. It may be also worth trying a loop of "fix until it matches binary" for separate files... But I haven't seen anyone actually write it up.

There are attempts like this https://github.com/louisgthier/decompai that are related, but not quite the same as this project.

Edit: just gave it a go, and guessing reasonable variable names works extremely well when there's partial information already available. Especially nice for things like naming all the counters and temporaries when you know what you're iterating over (so it's just boring manual and trivial work), but can also figure out the meaning of larger patterns for function names.

I'm using an agent to port a game. I have the source. It's not going well. Lots of rabbit holes that are self-inflicted because the LLM doesn't want to port a lot of libraries because it's too much work for one round. It does a lot of stubbing and makes assumptions and that breaks the whole thing.
Fairly well. They aren't perfect, but they save a lot of time.

They are also downright superhuman at recognizing common library functions or spotting well known algorithms, even if badly mangled by compilation and decompilation.

I’m not sure if EFF has made any statements about it, but I would be concerned with the copyright aspects. Decompilation works (legally) because a new creative work is being produced.

It would be easy to argue LLMs are producing derivative, non-transformative works. AI companies have not made that any easier by paying publishers huge royalties to license training data.

I personally would stay away from it to avoid the risk, but I’d imagine if it became “easy” enough to produce a matching decomp with an LLM, we would get a more specific legal precedent pretty quickly.

I’ve not experimented but I thought they might be valuable for isolated variable / function renaming
Note: To use this repository, you must already own a copy of the game.
I used it just fine without one, I think you’re wrong.
And people who play Chinese retro handhelds must dump their own ROMs. Unless they bought a 10000 in 1 version for $10 extra, in which case it's all perfectly legal!

Sure, you must, I guess, but is anyone really going to jail over this piece of ancient history? I find these disclaimers cute.

We do. Don't worry about it.
this is a legal disclaimer lol, not an actual requirement
Still [eagerly] waiting over here for Duke Nuke Forever!

..since how long? I've lost track (:

Not sure if it's a joke, but in case you missed the release - it's already out: https://store.steampowered.com/agecheck/app/57900/