世界を動かす技術を、日本語で。

デューク・ニュケム:ゼロアワー N64 ROM リバースエンジニアリングプロジェクトが100%達成

2025年10月20日原文(github.com)

概要

Duke Nukem Zero Hour のN64版デコンパイルプロジェクトの利用手順まとめ。 Ubuntu 20.04 または WSL2 環境推奨。 ROMファイルの所有 が前提条件。 ビルド方法、依存パッケージ、Docker利用法 などを詳述。 デバッグやツール の利用方法も解説。

Duke Nukem Zero Hour N64 デコンパイルプロジェクト利用ガイド

  • 本リポジトリDuke Nukem Zero Hour のN64版デコンパイルプロジェクト
    • ROM所有者のみ 利用可能

依存パッケージのインストール

  • Ubuntu 20.04 または WSL2 環境推奨
  • 必要パッケージをインストール
    • sudo apt update
    • sudo apt install make git build-essential binutils-mips-linux-gnu cpp-mips-linux-gnu python3 python3-pip
  • Python 3.8以上 が必要
  • Pythonパッケージのインストール
    • pip3 install --upgrade pip
    • pip3 install -U splat64[mips]
    • pip3 install -r requirements.txt

ビルド手順

  • リポジトリのクローン(サブモジュール同時取得)
    • git clone https://github.com/Gillou68310/DukeNukemZeroHour.git --recursive
  • ディレクトリ移動
    • cd DukeNukemZeroHour
  • Duke Nukem Zero Hour US ROM をリポジトリルートに配置し、baserom.us.z64にリネーム
  • ROM抽出
    • make setup
  • ROMビルド
    • make --jobs
  • 成功時、build/us/dukenukemzerohour.z64ファイル生成

他バージョン対応

  • フランス語版 もサポート
    • ROMをbaserom.fr.z64にリネームしてリポジトリルートへ配置
    • makeコマンドにVERSION=frを付与

NON_MATCHINGビルド

  • 機能的には同等だがバイトレベルでは一致しない関数を含むビルド
    • makeコマンドにNON_MATCHING=1を追加

Docker環境

  • 依存関係を含む Dockerイメージ のビルド・実行
    • docker build --no-cache . -t dukenukemzerohour
    • docker run --rm -ti --mount src=$(pwd),target=/dukenukemzerohour,type=bind dukenukemzerohour
  • WindowsまたはMacでフォルダをバインドする場合、 Mutagen Extension の利用を推奨
    • docker --context=desktop-linux-mutagen run --rm -ti --mount src=$(pwd),target=/dukenukemzerohour,type=bind dukenukemzerohour
  • Docker起動後、上述のビルド手順を実行

デバッグ・ツール利用方法

デバッグ

  • mupen64plus + gdb によるデバッグ(現状はWindows限定)
    • 最新gccでビルドするため、makeコマンドにMODERN=1を追加
    • gdbサーバー起動:tools\debugger\win32\gdbserver.bat
    • gdbクライアント起動:tools\debugger\win32\gdbclient.bat
  • VSCode でのデバッグも可能
    • gdbサーバー起動後、VSCodeの「GDB Client(Win32)」構成を実行

主要ツール

  • asm-differ :ソースとターゲットのアセンブリ差分比較ツール
  • decomp-permuter :コード調整・再ビルド・スコアリング、レジスタ割り当て問題解消支援
  • mips2c :アセンブリからCコードへの変換ツール
  • splat :n64splitの後継、ROMデコンパイル支援

注意事項

  • ゲームROMの所有が必須条件
  • 非公式プロジェクト であり、利用は自己責任

Hackerたちの意見

「N64用のデューク・ニューケム ゼロアワーの逆コンパイルです。注意:このリポジトリを使用するには、ゲームのコピーをすでに所有している必要があります。」

みんな今は持ってるよね、もちろん。

どうして人(またはグループ)がこんなに時間とエネルギーを投資するのか知りたいな。好きなタイトルに取り組むホビイストゲーマーのグループがいるのかな?デジタル保存が目的なの?

お前は一度も「ケツを蹴って、ガムを噛んだ」ことないんだな。

同じく。これに関するプロジェクトページとか、背景や理由、歴史を説明してるものはあるのかな?すごく興味深いと思う。Readmeは技術的すぎて、プロジェクトの魂についての説明が欠けてるよ。セクション1、タイトル。セクション2、もうUbuntuや依存関係の話になってる。セクション「なぜ?」はどこにあるの? :-)

それに加えて、スピードランのバグハンターたちもこういったプロジェクトに参加することが多いよ。例えば、トワイライトプリンセスの逆コンパイルは主にスピードランコミュニティのために始まったんだ。

ヴィンテージシンセのファームウェアをリバースエンジニアリングするのにかなりの時間を費やしたよ(現代のゲームよりはちょっと簡単)。この2つのヴィンテージシンセのROMの完全なエンドツーエンドの注釈を作ったんだ:- https://github.com/ajxs/yamaha_dx7_rom_disassembly - https://github.com/ajxs/yamaha_dx9_rom_disassembly そもそも、これらのデバイスがどう動いてるのか知りたくて始めたんだ。結果的に、エンジニアとしての視野を広げるために本当に貴重なスキルをたくさん学んだよ。すごく頭の良い人たちと話す機会もあったし、実際の作業はすごく楽しい。大きくて技術的なジグソーパズルを組み立てるみたいな感じだね。私の場合、楽しいファームウェアのモッドをリリースできるようにもなったよ: https://github.com/ajxs/yamaha_dx97 どうやって作業したか気になる人のために、ちょっとしたチュートリアル記事も書いたよ: https://ajxs.me/blog/Introduction_to_Reverse-Engineering_Vin... これって考古学にも似てるかも。私の場合、DX7は42年前のものだけど、コンピュータの世界ではずいぶん昔のことだよね。異なるエンジニアがどうやって設計や構築をしていたのか、ちょっとした洞察を得られるんだ。N64の開発は比較的新しいけど、記憶によれば、そのコンソールには開発を難しくする面白い制約があったと思う。

もしかしたら、彼らはそのゲームが本当に好きなんじゃないかな。これは一種のトリビュートだよね。私も子供の頃に大好きだったゲームがあるんだ。『ロックマンバトルネットワーク2』。あのゲームは私の人生を変えたんだよ。英語を学んでプログラマーになったのもそれのおかげ。コレクションには物理的なコピーが2つあって、1つは未開封の状態。たまにIDAでゲームを開いて、ちょっと逆アセンブルしてみたりするんだ。ゲームを理解したいだけなんだよね。ROMハッキングコミュニティのすごい人たちみたいに、時間も dedication も、低レベルのプログラミング知識もないけど、頑張ってるよ。

『ロード・オブ・ザ・リング』みたいな作品のビットキャラクターを何時間も分析してる人たちがいるよね(青い魔法使いはどこに行ったの?トム・ボンバディルは誰?)とか、『スター・ウォーズ』とか。これは似たようなファンの執着だよ。ファンっていうのはファナティックから来てることを忘れないで。

これがテキストアドベンチャー/インタラクティブフィクションコミュニティの始まりだね。何人かのハッカーがInfocomのz-machineを逆アセンブルして、新しい言語やコンパイラを作ったから、新しいゲームが作れるようになったんだ。

保存と改造のしやすさ。新しいコンソールユニットはもう作られてないし、古いものの数も限られてる。壊れることもあるし、現代のモニターやテレビと互換性のない出力ビデオフォーマットの問題もある。エミュレーションはあるけど、完璧じゃないし、要求されるスペックも高い。デコンパイルを使えば、異なるプラットフォーム用のネイティブバイナリを作れる。これでゲームをプレイするのがもっと簡単でアクセスしやすくなるんだ。

今年の初めにGame On Expoで『キャッスルヴァニア: シンフォニー・オブ・ザ・ナイト』のデコンパイルについて話したんだけど(https://github.com/xeeynamo/sotn-decomp)、まさにこのことについて少し話したんだ。そこで作業してるほとんどの人はこのゲームが大好き。動機は様々で、ポートを見たい人、モッドを作りたい人、できるだけ学びたい人、保存したい人がいる。僕もその挑戦が好きなんだ(数独みたいな感じ)。長くやってると、コンパイラの歴史や理論を学ばなきゃいけないし、ゲームを作るためのビジネスやエンジニアリングのプレッシャーを理解する必要がある。たまに、ゲームの一部がどうしてそうなってるのかもわかる。SotNの作業をストリーミングしてるから、もっと知りたい人はチャットで質問してくれれば嬉しいよ - https://m.twitch.tv/madeupofwires/home

Hacker Newsで議論の続きを見る