神業!GC版『バイオハザード4』の完全なバイト一致デコンパイルがC/C++で実現
Resident Evil 4 (GameCube) – complete byte-identical decompilation to C/C++
Resident Evil 4 (GameCube) – complete byte-identical decompilation to C/C++
GameCube版『バイオハザード4』のコードが、完全にバイト単位で一致する状態でC/C++へデコンパイルされました。歴史的な名作のソースコードがどのように構成されていたのか、その全貌が明らかになっています。
何トークン使ったの?あと、どのモデルでやったの?
保存という観点で見ると、これはこれまでで最も役に立たないデコンパイルの一つだよ。CapcomはRE4をあらゆるハードに移植することに執念を燃やしているからね(冗談!)。リークされたデバッグビルドとシンボルを使って作られたものだけど、これを見るとゲーム保存コミュニティがこうした素材を収集・配布することの意義がわかるよね。でも一方で、以下の一文はかなり引くわ。
コンパイラがレジスタの選択やスケジュールの再現のために特定のソースの形を必要とし、自然な書き方が見つからない場合、その構造には // COMPILER-DIFF: コメントを付与した(644箇所:デッドテスト、空のasm("")での隠蔽やアンカー、レジスタT x asm("rN")のピン留め、パディング文など)。
個人的にデコンパイルの価値は、バイト単位で完全に再現すること(元のバイナリはすでに手元にあるんだし)そのものじゃなくて、人間が読めるソースコードとして元のゲームへの理解を再構築することにあると思ってる。バイト単位で一致させるのは、あくまで正しく変換できたかどうかの指標にすぎない。元の出力を強引に合わせるために余計なゴミコードを詰め込む必要があるなら、それはむしろ「間違った方向」に向かっている証拠だよ。AIに当てはめると、グッドハートの法則が招く危険性の好例だね。
「バイト単位で同一」って、Claudeの大好きな表現の一つだよな。
素晴らしいデコンパイルの成果を目にして、感情が複雑に入り乱れてるよ。
ただ、こうしたクールなデコンパイルが初期の3D中心のコンソールゲームばかりに集中してるのが残念。Quakeファンとして言わせてもらうけど、低解像度のテクスチャとあのぼやけたバイリニアフィルタリングの組み合わせって、正直好きになるのが難しい見た目なんだよ。まあ、世代間のギャップってことなんだろうな。
(レトロ)ゲーム界隈でのAIへの「ヘイト」に関わらず、こういうプロジェクト(AIが使われているかは不明だけど)やエミュレーションを見るのは純粋にワクワクする。
技術的な視点から言えば、エミュレーションは本当に驚異的だよ。深い技術知識や元のシステムに対する卓越した理解が必要だし、最適化の手法は次元が違う。
CC0ライセンスで問題にならないか心配だな。デコンパイルしてもCapcomの著作権は消えないわけだし。Capcomがもう気にしていないことを祈るしかなさそう。
適当にファイルを開いてみたけど、これって元のゲームのプログラミングを復元しているというより、コンパイル可能なC言語の構文で動作を模倣してるように見えるね。
void Em1eWeaponSet(cEm10* em)
{
Em10Work* w = EM10_WK(em);
w->mot[41] = 0;
w->mot[42] = 0;
…
w->mot[62] = 0;
w->mot[63] = ARC(0x26C);
w->mot[64] = ARC(0x26D);
w->mot[65] = ARC(0x276);
w->mot[66] = ARC(0x277);
w->mot[67] = 0;
w->mot[68] = 0;
w->mot[69] = ARC(0x26A);
w->mot[70] = ARC(0x26B);
w->mot[71] = ARC(0x270);
w->mot[72] = ARC(0x271);
w->mot[73] = ARC(0x272);
w->mot[74] = ARC(0x273);
w->mot[75] = ARC(0x274);
w->mot[76] = ARC(0x275);
w->mot[77] = 0;
w->mot[78] = 0;
}
本当の論点は、それがリロケータブル(バイトの追加や削除をしても正常に動作するか)かどうかだよね。
著作権のある作品のデコンパイルにCC0?それは……そういう仕組みじゃないよ。
これは二次的著作物だから、元の著作権を引き継ぐことになる。デコンパイルが常にグレーゾーンとされてきたのは、著作権者がそれを気にするかどうか、という理由があるからなんだよ。