N64パーフェクトダークの逆コンパイルプロジェクトの紹介です。
目次
逆コンパイルとは
「逆コンパイル」とは、機械語からソースコードに変換する作業のことです。
ソースコードに変換することで、人間でも理解できる形式となります。
このプロジェクトではC言語に変換されており、そのソースコードをビルドすることでROMが作成されます。
逆コンパイルの結果、ソースコードの状態となるので、ソースコードを読むことでゲームの裏側の処理の調査等ができるようになります。
また、ソースコードを修正し、ビルドすることでハックロムの作成ができます。
プロジェクト
以下がN64パーフェクトダークの逆コンパイルプロジェクトのページです。
https://ryandwyer.gitlab.io/pdstatus/
プロジェクトは、Ryan Dwyerさんによって進められていて、N64パーフェクトダークの逆コンパイルは実質100%完了しています。
機能的には変わらないですが、一部の関数のバイト数が一致しないので進捗率としては97%程度となっているとのことです。
また、N64 VaultのDiscordの中でやりとりが行われています。
→discord.gg/Ha6Us26
興味がある方は参加してみましょう(英語)。
私も参加して最新情報をチェックしていますw
現在は、パフォーマンスの改善や機能追加等が進められています。
ハックロム
ソースコードは、GitLab上で公開されています。
ビルド方法も記載されています。
https://gitlab.com/ryandwyer/perfect-dark
以下のようなハックロムがあります。
ブランチを切り替えることで、修正版のソースコードを取得することができます。
- フレームレートの表示
Rボタン押下でフレームレートを表示する機能を追加したハックロム - パフォーマンスの改善
パフォーマンスを改善したハックロム - シミュラントの制限人数解除
シミュラントを800体まで追加できるようにしたハックロム
日本語版ハックロム
ついに日本語版もハックロムが作成できるようになりました!!
始めは、日本語版ROMのビルドに対応できていなかったのですが、直近のアップデートにより対応されました。
今までは、ハックロムツールは海外版にしか対応していなかったため、日本語版のハックロムは珍しく、これは大きな進歩です!!
コンバットプラス

以下の機能を追加したハックロムを作成しました。
- コンバットナイフの復活
→日本語版のみコンバットナイフが無効になる処理を削除
ソロ・ミッションでも使用可能、また射撃訓練もプレイ可能 - コンバットでクラシックウェポンを設定可能
→Ryan Dwyerさんが別のブランチで追加していたコードを抜き出して移植
https://gitlab.com/ryandwyer/perfect-dark/-/commit/810df0fb74dd96d966577c7fed7ed611856bdcf2 - リスポン時に視界のぼやけの回復
→Graslu00さんによって作成されたコードを追加
https://twitter.com/Graslu00/status/1584737286302105601?s=20&t=eetBXRJdiXbcB2Y3JcOTqA
xdeltaパッチとパッチの適用方法は以下の記事をご確認ください。
ソースコードは以下です。
※「リスポン時に視界のぼやけの回復」は含まれていません
https://gitlab.com/Jonaeru/perfect-dark/-/tree/mods/classic-weapons-in-multi
xdeltaパッチの適用方法
以下の記事に移動しました。
動画
シミュラントの制限人数解除
その1
シミュラントを100体追加してコンバットをしました。
その2
機能追加により、クラシックウェポン(ゴールデンアイ007の武器)が設定可能となったため、RC-P45等を追加してコンバット(陣取り)をしました。
また、このハックロムの問題点として、人数が多すぎて武器がなかなか取れない問題がありましたが、リスポン時にウェポン設定の1番の武器を持つようにするオプションが追加されました!
(プレイヤー、シミュラント共通)
コンバットプラス(日本語版)
- コンバットナイフの復活
- コンバットでクラシックウェポンを設定可能
- リスポン時に視界のぼやけの回復
更新履歴
- 2022/12/17
日本語版ハックロム「コンバットプラス」のxdeltaパッチの注意点(ビッグエンディアン形式であること)を追加 - 2022/12/19
「xdeltaパッチの適用方法」を追加 - 2023/03/24
「xdeltaパッチの適用方法」と「xdeltaパッチ」を別の記事に移動したため案内を追加