プラグインのお話
オダメのプラグインは大きくSybarisプラグインとBepInExプラグインに分かれます。
Sybarisプラグイン
Sybaris用に作成されたプラグイン。
Sybaris2環境ではSybaris2から呼び出され、
BepInEx環境ではBepInEx用のプラグインから呼び出されます。
BepInExプラグイン
BepInEx用に作成されたプラグイン。
BepInEx環境でのみBepInExから呼び出されます。
Sybaris2環境では動作しない。
BepInExはUnity汎用なのでオダメ用で無いFPSカウンターなどゲームに依存しないプラグインも動作する。
Sybaris2環境とは
オダメ(カスメ)用に作成されたと思われるインジェクターを使用する環境。
オダメの実行フォルダに居るopengl32.dllがインジェクターとなるDLL。
BepInEx環境とは
Unity用汎用インジェクターを使用する環境。
Sybarisプラグインを呼び出すBepInExプラグインが存在するため、こちらの環境で構築すると使えるプラグインが多くなる。
オダメの実行フォルダに居るwinhttp.dllがインジェクターとなるDLL。
インジェクターとは(広義ではなくここで言ってるSybaris2とBepInExを指す)
DLLインジェクションを用いて、オダメに潜り込みオダメを拡張します。
DLLインジェクションとは(簡単な説明)
Windowsのexeファイルを実行する際にいくつか必ず読み込まれるDLL1)があり、
DLLはexeと同じフォルダにあるものが優先されるため、exeと同じフォルダに偽DLLを置くことでexe実行時にexeの中に潜り込むというテクニック。
DLLをexeの横に置く方法以外(フックとかリモートスレッドとか)にもやり方はありますが、DLLをexeの横に置く方法はお手軽なのでよく使われます。
Sybarisプラグインを構成するファイル
命名規則のようなものがあり、3種類のDLLに分かれる
Sybarisフォルダに置かれるファイル
*.patcher.dll
*.managed.dll
UnityInjector(Sybaris\UnityInjector)に置かれるファイル
*.plugin.dll
*.patcher.dll
他のプログラムを書き換える処理が書かれたDLL。
通常はオダメ本体を書き換えて、本体の動作を変更する。
書き換えを行うためにオダメのバージョンに依存し、競合も発生しやすい。
Aと言うプラグインが書き換えた箇所をBと言うプラグインが書き換える様なことになった場合、BはAが書き換えていることを想定していないため書き換え箇所がわからなくなったり、誤った書き換えを行ったりする場合がある。
*.managed.dll
通常はpatcherで書き換えた箇所から利用される機能が含まれているDLL。
「patcherがオダメ本体を書き換えて、managedに含まれている処理を呼び出すようにする」と言った使われ方が多い。
patcherだけでmanagedがないプラグインはあるが、managedだけでpatcherがないプラグインは原則存在しない。
*.plugin.dll
機能として読み込まれ動作するDLL。
この3種以外に別途共通機能をまとめるなどしたDLLを持っていたり、設定ファイルやデータファイルを持つプラグインも多い。
DLLは使用するプラグインと同フォルダ、設定ファイルはConfigフォルダの中に置かれることが通例。
BepInExプラグイン
こちらはSybarisで言うところのpatcher/managed/pluginの全ての機能が1つにまとめられている。
もちろんDLLや設定ファイルがあるのことがあるのはSybarisプラグインと同じ。
プラグイン作成において
使用者側からみたメリットデメリットはSybarisプラグインだろうがBepInExプラグインだろうがあまりなく、
Sybarisプラグインの方が置くファイルが増えるためちょっと面倒なぐらいであるが、
作成者側からみるとオダメを書き換える処理(Sybarisプラグインではpatcherが行う処理)を書くのが、
Sybarisに比べBepInExの方が簡単であるためオダメを書き換える場合はBepInExの方が作りやすい。
コメント