R.E.P.O. のソースを引き剥がして読む:Rep0S2cLeak
Rep0S2cLeak はマルチプレイヤーホラーゲーム R.E.P.O. の C# ソースのスナップショットだ。Assembly-CSharp.dll を逆コンパイルしてスクリプトを全部エクスポートし、850 ファイル超を読む専用のコードアーカイブとして保存した。
先に断っておくと、これは動く Unity プロジェクトではない。エンジンもアセットもシーンも全部ない。.csproj の HintPath はローカルの Steam インストールにある Managed DLL を指していて、リポジトリにはそれが含まれていない。用途はアーキテクチャを見る、命名を見る、モジュールの分け方を見る、ついでに軽く静的解析をする、それだけだ。
敵システムが中心だ。EnemyDirector が上位で全体を統括し、EnemyParent と EnemyRigidbody がエンティティと物理を管理、各敵はそれぞれ EnemyState* のステートマシンを持ち、その下に EnemyHunter、EnemyShadow、EnemyGnome、EnemyBang がぶら下がる。ステートマシンを辿れば、各モンスターの挙動はだいたい逆算できる。
メインフローは GameDirector を通る。ステート列挙は Load / Start / Main から Outro / End / Death まで並んでいて、1 試合のライフサイクルがはっきり見える。GameManager には Steam のシーズンイベント検出も隠れていて、レベルは LevelGenerator と大量の Map* で生成される。
オーディオ周りは想定以上だった。Audial/ と Audial.Utils/ は自前で書いた一式の音響処理で、コンプレッション、ディストーション、リバーブ、フランジャーに加えてフィルタ、エンベロープ、LFO まで、小型の DSP ライブラリをゲームに詰め込んだようなものだ。ボイスはさらに攻めていて、Overtone と Klattersynth という 2 つの TTS ランタイムを同時に走らせ、人の声をリアルタイム合成している。
残りの部分だが、ネットワークは Photon PUN2 でマルチプレイ同期とボイスをやり、UI とデバッグには ChatManager、DebugConsoleUI あたりがある。スタックは C# 12、.NET Standard 2.1、Unity 一式に加えて Steamworks と Discord SDK。自分で追いたいなら GameManager.cs、GameDirector.cs、EnemyDirector.cs から入って、ステートマシンを辿って外へ這っていくといい。コンパイルしたいなら DLL を自分で補って HintPath を直す必要がある。GPLv3。