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.
By viraptor 8 hours ago
With things like Ghidra now freely available, "100% decompiled to C" really isn't that high of a bar anymore.
By userbinator 39 minutes ago
i think this sort of scenario is where an ai code comb through is going to add value - get an ai to guess the likely name of variables/functions based on usage and context etc. It'd make a great starting point for manually labelling each variable correctly.
By chii 26 minutes ago
Would LLMs be good at labelling, or would the risk of false-positives just waste more time than it saved?
By nomilk 6 hours ago
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.
By viraptor 6 hours ago
Seems like it would be pretty straight forward to fine tune an LLM based on code + asm pairs to help facilitate reverse engineering.
By thethimble 4 hours ago
Gillou68310 looks to have been a one person army for 99% of it, what an impressive show of dedication.
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.
By scheeseman486 an hour ago
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 :)
By random3 2 hours ago
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?
By icu 8 hours ago
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:
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
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.
By ajxs 6 hours ago
> the console had some interesting constraints that made development tricky
The ones that come to mind are the tiny 4KB texture cache, high memory latency (thanks Rambus), and inefficient RCP microcode. The N64 could have been so much more with a few architectural tweaks but developers liked the Playstation much better on account of its simplicity despite it being technically inferior in most respects.
By alexjplant 3 hours ago
I guess you’ve never kicked ass and chewed bubble gum
By jbverschoor 7 hours ago
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.
By matheusmoreira 5 hours ago
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.
By zamadatix 7 hours ago
It's also the endgame for romhacking, once a game is fully decompiled modders can go far beyond what was feasible through prodding the original binary. That can mean much more complicated gameplay mods, but also porting the engine to run natively on modern platforms, removing framerate limits, and so on.
By jsheard 6 hours ago
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.
By bombcar 2 hours ago
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.
By ChicagoDave 2 hours ago
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?" :-) ?
By j1elo 7 hours ago
Based off the commit history, this has been one person's on-off project for 3 years. My guess is that they like this game and they were curious about how decomps come to fruition - and what better way to find out than to do it?
By GranPC 7 hours ago
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.
By colechristensen 6 hours ago
"A decompilation of Duke Nukem Zero Hour for N64.
Note: To use this repository, you must already own a copy of the game."
By TruffleLabs 8 hours ago
We all now do, of course
By reader9274 8 hours ago
Usually these projects only contain a copy of the source code to build the binary. You still need the game assets like the levels and sounds to play the game.
By janwl 7 hours ago
Note: To use this repository, you must already own a copy of the game.
By boredemployee 4 hours ago
I used it just fine without one, I think you’re wrong.
By floam 4 hours ago
I believe you are making a technical statement and the parent poster is making a legal one.
You're both right I guess
By TheDong 4 hours ago
The parent poster is not making a legal statement. They copied/pasted the first line of the Readme. I made the clarification that the note is a legal disclaimer, not s technical requirement, so people, including the parent poster, are not confused.
By nakamoto_damacy 4 hours ago
well, you better delete it within 24 hours then!
By soupfordummies 3 hours ago
this is a legal disclaimer lol, not an actual requirement
By nakamoto_damacy 4 hours ago
How so?
Functionally, the README describes that providing a game copy is necessary for creating a build. This would make sense, since unless the sound, image, text, etc. assets are all baked into the code, those would have to come separately.
Legally, it further doesn't make much sense. This is cleaned up (?) and painstakingly bytematched decompiler output (again based on the README), so it's unfortunately just plain illegal [0], disclaimers nonwithstanding.
[0] as always, legality depends on jurisdiction - so as always, if in doubt, consult an actual lawyer
By perching_aix 3 hours ago
Don't you need to have purchased the game before you have the right to enjoy it? How else do you prove that you have paid for the license to run the game if you don't have a copy. That was my initial interpretation.
By nakamoto_damacy an hour ago
Are LLMs well suited to this kind of reverse engineering?
By reassess_blind 7 hours ago
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.
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.
By viraptor 7 hours ago
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.
By ACCount37 6 hours ago
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.
By cactusplant7374 7 hours ago
How did you approach it? Some specific harness? Planning?
By viraptor 5 hours ago
I’ve not experimented but I thought they might be valuable for isolated variable / function renaming
By hsbauauvhabzb 6 hours ago
Still [eagerly] waiting over here for Duke Nuke Forever!
By viraptor 8 hours ago
By userbinator 39 minutes ago
By chii 26 minutes ago
By nomilk 6 hours ago
By viraptor 6 hours ago
By thethimble 4 hours ago
By zamadatix 7 hours ago
By llmthrow0827 2 hours ago
By scheeseman486 an hour ago
By random3 2 hours ago
By icu 8 hours ago
By ajxs 6 hours ago
By alexjplant 3 hours ago
By jbverschoor 7 hours ago
By matheusmoreira 5 hours ago
By zamadatix 7 hours ago
By jsheard 6 hours ago
By bombcar 2 hours ago
By ChicagoDave 2 hours ago
By j1elo 7 hours ago
By GranPC 7 hours ago
By colechristensen 6 hours ago
By TruffleLabs 8 hours ago
By reader9274 8 hours ago
By janwl 7 hours ago
By boredemployee 4 hours ago
By floam 4 hours ago
By TheDong 4 hours ago
By nakamoto_damacy 4 hours ago
By soupfordummies 3 hours ago
By nakamoto_damacy 4 hours ago
By perching_aix 3 hours ago
By nakamoto_damacy an hour ago
By reassess_blind 7 hours ago
By viraptor 7 hours ago
By ACCount37 6 hours ago
By cactusplant7374 7 hours ago
By viraptor 5 hours ago
By hsbauauvhabzb 6 hours ago
By metadat 6 hours ago
By viraptor 5 hours ago
By _carbyau_ 5 hours ago
By extraduder_ire 5 hours ago
By fennec-posix 4 hours ago