th08-re: 東方永夜抄のリバースエンジニアリング
th08-re は『東方永夜抄』(Touhou 08) のリバースエンジニアリングプロジェクトだ。ZUN が十数年前に C で書いたこの弾幕ゲームを、ソースコードのないバイナリから少しずつ読める C コードへ戻していく。このリポジトリは GensokyoClub/th08-re の fork で、自分のところに引いてローカルの実験場兼バックアップにしているだけで、自分のオリジナルの成果ではない。
東方は ZUN が一人で C で書いたもので、年代が古く、規模は小さく、ロジックは詰まっている。弾幕の運動、判定、乱数、リプレイがすべてバイナリに詰め込まれている。原作の挙動は再現できるし、コミュニティも一緒に考証してくれる。適当な商用の殻を選ぶよりずっとクリーンな RE の題材になる。
一番面白いのは replay と乱数まわりだ。弾幕の replay が 1 フレームも違わず再現できるのは、完全な決定性によるもの。同じ入力に同じ RNG シードを加えれば、必ず同じ弾幕が走る。ここまで逆に追うと、素朴な擬似乱数一つで一局分のランダム感をどう支えていたかが見えるし、ついでに replay がバージョンをまたぐと壊れる理由もわかる。
ついでに当たり判定と座標系も解いておいた。擦り判定のフレームがどれくらいの大きさか、いつ miss とみなすのか。プレイヤーから見れば玄学めいたこれらも、コードに落とすと実際かなり素直だ。
これはあくまで fork なので、上流への同期に追いつけないこともある。完全なドキュメントと license は上流の GensokyoClub/th08-re を正とすること。それから自分への注意: この手のプロジェクトでは、オリジナルの商用バイナリ、プライベートな逆向素材、ローカルのパスは絶対にコミットしない。