PS1『RAGE RACER』PAL版が「バイト完全一致」のデコンパイルを達成!全1202関数を再現

PS1『RAGE RACER』PAL版が「バイト完全一致」のデコンパイルを達成!全1202関数を再現

初代PlayStation向けに発売されたナムコのレースゲーム『RAGE RACER』のデコンパイルプロジェクトが、大きな節目を迎えました。

開発者のChris Hasiński氏は2026年8月12日、PAL/欧州版『RAGE RACER』の実行ファイルに含まれる全1202関数の一致を達成。再構築した実行ファイルが、製品版とバイト単位で一致する状態になったことを明らかにしました。

●Rage Racer Decompilation(GitHub)
https://github.com/khasinski/rage-racer-decomp

全1202関数、コード部分は100パーセント一致

今回デコンパイルの対象となったのは、PAL/欧州版『RAGE RACER』に収録されている実行ファイル「SCES_006.50」です。

プロジェクトが公開している現在の進捗は以下の通りです。

  • ゲーム本体:705/705関数
  • Sony PsyQライブラリ:497/497関数
  • 実行ファイル全体:1202/1202関数
  • コード部分:100パーセント一致
  • データ部分:99.82パーセント一致

プロジェクトでは、再構築した実行ファイルのSHA-1を製品版と比較する「make check」と、各関数をオブジェクト単位で比較する「make report」という2種類の検証を実施しています。

その結果、再構築された実行ファイルは、製品版の実行ファイルと同じSHA-1「2913e15648eddef40821c5f666460abc04155ee6」になっています。

単に「同じように動く」のではなく、コンパイルとリンクを行って生成された実行ファイルが、製品版とバイト単位で同一になっているということです。

データ部分が99.82パーセントなのにバイト完全一致?

進捗表ではコード部分が100パーセントである一方、データ部分は99.82パーセントと表示されています。一見すると完全一致ではないように見えますが、プロジェクトによると、残っている2788バイトはすべて「ジャンプテーブル」です。

ジャンプテーブルは、C言語のswitch文などを効率的に処理するために使用されるデータです。コンパイラーが生成したジャンプテーブルには名前が付いていない一方、逆アセンブル側では比較のために仮の名前を付ける必要があります。

比較ツールの「objdiff」はデータをシンボル名で対応付けるため、この名前の違いによって2788バイトを同一データとして認識できません。

しかし、データそのものは一致しており、最終的にリンクされた実行ファイルのSHA-1も製品版と同じです。つまり、99.82パーセントという数字は比較ツール上の集計によるもので、完成した実行ファイルには差がないということになります。

すべてが読みやすいC言語になったわけではない

今回の成果について注意したいのは、「全1202関数が一致した」ことと、「ゲーム全体が読みやすいC言語になった」ことは同じではないという点です。現在のプロジェクトは337個の翻訳単位で構成され、そのうちプレーンなC言語で記述されているのは237個です。

残りにはアセンブリコードが含まれています。これには解析途中のコードだけでなく、製品版の開発段階から手書きのアセンブリで実装されていたとみられる部分も含まれます。

プロジェクト側も、以前は「アセンブリを含まないソース」をデコンパイル済みとして集計していましたが、それでは実行ファイルを正確に再現できるかどうかではなく、ソースコードの書き方を評価する数字になってしまうと説明しています。

そのため現在は、ソースがC言語かアセンブリかとは分けて、関数とコードが製品版を正確に再現できるかどうかを進捗として表示しています。

すぐに遊べるPC版ではない

今回公開されたのは、PAL版『RAGE RACER』の実行ファイルを再構築するためのソースコードと解析・ビルド用ツールです。WindowsやLinux上で直接遊べるネイティブPC版が完成したわけではありません。

PCなどへの移植を実現するには、PlayStation固有の描画、サウンド、入力、タイミング処理などを、移植先の環境に合わせて置き換える作業が必要です。また、GitHubリポジトリには以下のデータは含まれていません。

  • ゲームのディスクイメージ
  • 展開されたグラフィックなどのゲーム素材
  • CDDA/XAデータ
  • Sony PsyQ SDK
  • プロプライエタリーなコンパイラー
  • 自動生成された分割データ

プロジェクトをビルドする場合は、ユーザー自身が合法的に入手したPAL版『RAGE RACER』と、対応するローカルツールチェーンを用意する必要があります。

なお、現時点ではオープンソースライセンスは選択されておらず、プロジェクト独自のソースコードも標準的な著作権のもとで公開されています。リポジトリが閲覧可能だからといって、自由に再配布・転用できるという意味ではありません。

ネイティブ移植やMOD開発の大きな足場に

デコンパイルは、元のソースコードをそのまま復元する作業ではありません。製品版の実行ファイルを解析し、同じ機械語を生成できるソースコードを作り直していく取り組みです。

実行ファイルをバイト単位で再現できる状態になったことで、開発者は逆アセンブルされた機械語だけを頼りにするよりも、ゲームの描画処理、レースロジック、車両挙動、メニュー、進行システムなどを追いやすくなります。

これだけでネイティブ移植やMODの登場が保証されるわけではありませんが、移植先の追加、ワイドスクリーン化、フレームレート改善、入力デバイス対応、ゲーム内容の改変などを研究するうえでは、大きな足場になりそうです。

1996年に日本で発売された『RAGE RACER』が、約30年を経て、製品版と同じ実行ファイルをソースから再構築できる状態になった今回の成果。プレイヤーがすぐに体験できる変化ではないものの、PlayStationタイトルの解析と保存という面では非常に興味深いマイルストーンといえそうです。

●Rage Racer Decompilation(GitHub)
https://github.com/khasinski/rage-racer-decomp

●全関数の一致を反映したコミット
https://github.com/khasinski/rage-racer-decomp/commit/32aed5934cc1b2d5f5bc0cfca201388b9a8efc03

●現在の進捗表を反映したコミット
https://github.com/khasinski/rage-racer-decomp/commit/df0e8218eb2fb73dbb6f64c15f9af4689ced1ef8

via GenerationAmiga

ABOUT US
アバター画像
retrogamer