dwgx@blog:~$dwgx
> cd ../posts

R.E.P.O. のソースを引き剥がして読む:Rep0S2cLeak

// created

Rep0S2cLeak はマルチプレイヤーホラーゲーム R.E.P.O. の C# ソースのスナップショットだ。Assembly-CSharp.dll を逆コンパイルしてスクリプトを全部エクスポートし、850 ファイル超を読む専用のコードアーカイブとして保存した。

先に断っておくと、これは動く Unity プロジェクトではない。エンジンもアセットもシーンも全部ない。.csprojHintPath はローカルの Steam インストールにある Managed DLL を指していて、リポジトリにはそれが含まれていない。用途はアーキテクチャを見る、命名を見る、モジュールの分け方を見る、ついでに軽く静的解析をする、それだけだ。

敵システムが中心だ。EnemyDirector が上位で全体を統括し、EnemyParentEnemyRigidbody がエンティティと物理を管理、各敵はそれぞれ EnemyState* のステートマシンを持ち、その下に EnemyHunterEnemyShadowEnemyGnomeEnemyBang がぶら下がる。ステートマシンを辿れば、各モンスターの挙動はだいたい逆算できる。

メインフローは GameDirector を通る。ステート列挙は Load / Start / Main から Outro / End / Death まで並んでいて、1 試合のライフサイクルがはっきり見える。GameManager には Steam のシーズンイベント検出も隠れていて、レベルは LevelGenerator と大量の Map* で生成される。

オーディオ周りは想定以上だった。Audial/Audial.Utils/ は自前で書いた一式の音響処理で、コンプレッション、ディストーション、リバーブ、フランジャーに加えてフィルタ、エンベロープ、LFO まで、小型の DSP ライブラリをゲームに詰め込んだようなものだ。ボイスはさらに攻めていて、Overtone と Klattersynth という 2 つの TTS ランタイムを同時に走らせ、人の声をリアルタイム合成している。

残りの部分だが、ネットワークは Photon PUN2 でマルチプレイ同期とボイスをやり、UI とデバッグには ChatManagerDebugConsoleUI あたりがある。スタックは C# 12、.NET Standard 2.1、Unity 一式に加えて Steamworks と Discord SDK。自分で追いたいなら GameManager.csGameDirector.csEnemyDirector.cs から入って、ステートマシンを辿って外へ這っていくといい。コンパイルしたいなら DLL を自分で補って HintPath を直す必要がある。GPLv3。

リポジトリ:https://github.com/dwgx/Rep0S2cLeak