EoSDecomp: 東方紅魔郷のバイト単位デコンパイル
EoSDecomp は東方紅魔郷(Touhou 6 ~ Embodiment of Scarlet Devil)のバイト単位デコンパイルプロジェクトだ。目標はオリジナルのバイナリを少しずつ、読めて書き換えられるソースへ復元すること。再コンパイルした成果物はオリジナルとバイト単位で一致しなければならない。このリポジトリは俺のオリジナルではなく、自分で噛み砕くために fork してきたものだ。本家はコミュニティの連中が進めているプロジェクトで、俺は自分の名義に引っ張ってコードを追いながら逆向を学び、ついでにバックアップを残している。
紅魔郷は東方 Project の第六作、縦スクロールの弾幕シューティングで、基本的に ZUN 一人で作り上げたものだ。特別なのは、ソースはもう失われたと ZUN 自身が言っている点。今このゲームを触ろうと思ったら、海賊版を探すか、Yahoo オークションで実物を漁るしかない。ソースが消え、考古学でしか辿れない古いゲームというのは、逆向をやる人間にとってそれ自体が餌になる。
しかも動かない。紅魔郷は DirectX8 を使っていて、これは Win10 でかろうじて動く程度、Win11 になると各種の奇妙な bug が出る。クラッシュ、画面の乱れ、フリーズと一通り揃う。まともに動かすには、たいてい EnbDev の DX8 から DX9 への変換か、dgVoodoo2 のようなラッパー層で凌ぐ。コミュニティがバイナリから一歩ずつ、読めて書き換えられて修正できるソースへ復元していく。この作業自体、どうやっているのか近寄って見る価値がある。
俺にとっては生きた教材だ。DirectX8 時代のゲームがどうメモリとレンダリングを組み立てているか、コードを読む方がチュートリアルより実がある。プロジェクト自身の目標もまた直接的で、もっと多くの人が東方に触れられるようにし、ついでに既知の bug を大量に潰し、新しいシステムでも遊べるようにする、というものだ。
面白いのは、一行ずつ研究している対象が、当時ある日本人が Visual Studio 2002 に流し込んだコードだということ。credits では Programming Support に pbg が挙がっていて、Special Thanks には ant と fang という二つの名前がある。今に至るまで誰なのか分かっておらず、おそらく当時のテスターだろう。