Gillou68310/DukeNukemZeroHour: A decompilation of Duke Nukem Zero Hour

Date:

Share:

A decompilation of Duke Nukem Zero Hour for N64.

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

The build instructions assume that you will be using Ubuntu 20.04; either natively or via WSL2.

Package requirements can be install via:

sudo apt update
sudo apt install make git build-essential binutils-mips-linux-gnu cpp-mips-linux-gnu python3 python3-pip

Tools requires Python 3.8+. Package requirements can be installed via:

pip3 install --upgrade pip
pip3 install -U splat64[mips]
pip3 install -r requirements.txt

Clone the repository; note the –recursive flag to fetch submodules at the same time:

git clone https://github.com/Gillou68310/DukeNukemZeroHour.git --recursive

Navigate into the freshly cloned repo

Place the Duke Nukem Zero Hour US ROM in the root of this repository, name it baserom.us.z64, and then run the first make command to extract the ROM:

Now build the ROM:

If you did everything correctly, you’ll be greeted with the following:

Creating z64: build/us/dukenukemzerohour.z64
OK

This repository has support for the French versions of the game too.

To build this version, place your ROM in the root of the repo and rename it to baserom.fr.z64. Pass VERSION=fr to the above make commands.

Building NON_MATCHING Version

Functions can be decompiled to a state where they are functionally equivalent, but are not a byte-perfect match.
In order to build/test the non-matching, add NON_MATCHING=1 argument to the make commands.

A Docker image containing all dependencies can be built and ran as follows:

docker build --no-cache . -t dukenukemzerohour
docker run --rm -ti --mount src=$(pwd),target=/dukenukemzerohour,type=bind dukenukemzerohour

Then continue with the building instructions

When binding windows or mac folder I strongly recommand installing Mutagen Extension for Docker Desktop.

docker --context=desktop-linux-mutagen run --rm -ti --mount src=$(pwd),target=/dukenukemzerohour,type=bind dukenukemzerohour

Game can be debugged with gdb through mupen64plus (Windows only for now).
In order to have source code information the game should be compiled with modern gcc by adding MODERN=1 to the make command.

Run the gdb server in cmd:

tools\debugger\win32\gdbserver.bat

Then run the gdb client in cmd:

tools\debugger\win32\gdbclient.bat

It’s also possible to debug within vscode with the Native Debug extension.

Run the gdb server in cmd:

tools\debugger\win32\gdbserver.bat

Then run the “GDB Client(Win32)” configuration in vscode.

  • asm-differ; rapidly diff between source/target assembly
  • decomp-permuter; tweaks code, rebuilds, scores; helpful for weird regalloc issues
  • mips2c; assembly to C code translator
  • splat; successor to n64split

Source link

Subscribe to our magazine

━ more like this

Postcards & Emails – PostSecret

—–Email—–—–Frank@PostSecret.com—– Dear Frank, Last week you were speaking in Portland, Oregon.  I walked in a little late to a very crowded room. You said a few...

How Anna Wintour’s Vogue front covers made a statement to the end | Anna Wintour

During her 37-year tenure as editor-in-chief of American Vogue, Anna Wintour has presided over more than 400 covers. December 2025’s, on newsstands this week,...

Painted by Esther’s Journey From Art School to Hollywood

While each product featured is independently selected by our editors, we may include paid promotion. If you buy something through our links, we may...

Beware These Black Friday Shopping Scams

Holiday shopping season is ripe for scammers, as...

‘We stayed in a 500-year-old palazzo for €100’: readers’ favourite historic places to stay in Europe | Hotels

An opulent stay in VeniceMy husband and I stayed in a beautiful 500-year-old Venetian palazzo for just €100 for a double room. The exterior...