シーンでのコーデ変更時、MOD衣装を含むコーデを使うと再起動後まともに表示されなくなるのを修正するプラグインです。
まずコーデフォルダ内の全コーデのリストを作り、シーン再生時にはそのリストから衣装の情報を拾ってきてシーン内のデータを書き換える、という動作をします。
(ロードされたデータを書き換えるだけなので、セーブデータには影響しません。)
CoordinateListGenerator.dll、CoordinateMatcher.dllの2つとも
\EmotionCreators\BepInEx\Pluginsフォルダ以下の同じ場所に入れて使って下さい。
必須:ECAPI、EC_Sideloader、EC_ExtensibleSaveFormat
どれも基本的なMODパック等に含まれてるはずなので、特に問題はないかと思います。
いつも通りchatGPT頼みのプラグインです。不具合等あったらすみません。
1.リスト作成(CoordinateListGenerator)
起動時(とコーデ保存時)にCoordinateListGeneratorがコーデフォルダ(\EmotionCreators\UserData\coordinate\female、\EmotionCreators\UserData\coordinate\male)をさらって、
保存済みのコーデファイルのリストを作り、CoordinateListGenerator.dllが存在するフォルダ内にCoordinateIndex.jsonという名前で保存します。
(800ファイルほどでテストしたときは数秒で終わっていたので、たいして時間はかからないかと思います。)
コーデファイル名変更、削除、移動等はゲーム再起動時にリストに反映します。
2.シーン読み込み時(CoordinateMatcher)
シーンデータがロードされたとき、シーン内に登録されているコーデ情報が全てロードされます。そのときに各コーデ名をリストCoordinateIndex.jsonから検索し、マッチしたコーデの部位ごとの情報を拾い、それを元に現在Sideloaderによって割り振られているIDに書き換えます。
マッチ条件は1.コーデ名 2.シーン名とコーデファイルパスの比較 3.最終更新日 なので、同名コーデが複数ある場合等はコーデフォルダ内(femaleまたはmaleの下)にシーン名フォルダを作って入れておくと間違いにくくなると思います。
注意:シーンに保存されたコーデ名で検索するので、例えばシーン保存後にキャラ作成画面でコーデ名を変更した場合は適用されなくなります。また、同じ場所に同じ名前で複数のコーデが存在すると誤作動しやすくなるかもです。
もう一点、別環境でシーンデータを使う場合には同じMOD衣装が揃っていることはもちろんですが、シーンで使用しているコーデファイルも一緒に移す必要があります。
modsフォルダにあるMOD衣装にはSideloaderがゲーム内仕様のID(LocalSlot)を振りますが、これは起動毎に違う数値になってしまいます。
キャラファイル、コーデファイルには本来そのときのLocalSlotしか保存されないのでそのままだと再起動時には別の衣装に変わってしまうのですが、ExtensibleSaveFormatによってMOD衣装ごとの固有情報が保存され、再読込時にはSideloaderがその固有情報からLocalSlotを再適用して保存時のコーデを復元する、という動作をしています。
ところがシーン内に保存されたコーデ情報にはこの拡張データがなく、コーデ名とLocalSlotしかありません。結果、Sideloaderは何もせず、裸になったり別衣装に変わってしまったりします。
ここでシーンのセーブデータに拡張領域を追加してコーデファイルの情報を丸ごと保存してロード時にはそれを読み込む、とかできれば一番スマートなのでしょうが、素人がセーブデータに手を出すのはちょっと怖すぎて無理です。結果、別途コーデリストを作ってコーデ名で検索して再適用、というめんどくさい方法になりました。
