Spoonail-Iroiro / maginai

Mod loader
MIT License
1 stars 2 forks source link

ゲームからタイトル画面に戻った時のイベントを追加する #58

Open Spoonail-Iroiro opened 2 months ago

Spoonail-Iroiro commented 2 months ago

59 が実装されれば不要かも

soeklgb commented 2 months ago

タイトル画面に戻った時のイベントのユースケース見つけた。マスターデータを改変せざるを得ないケース。union.jsでマスターデータが直接参照されているとパッチできないから、マスターデータを直接改変しないといけない。でもそれだとセーブデータごとに挙動を変更できない。

思いついた解決策は二つ

Spoonail-Iroiro commented 2 months ago

これをやるならsaveLoadingイベントハンドラ内かと。

マスターデータの改変に限らず、「セーブデータごとに異なる処理をする」時、その境界は各セーブの読み込み時(saveLoadingイベントまたはsaveLoadedイベント)でいいはずで、タイトル画面に戻った時ではないのでは。

セーブデータで使われているModが変更されていたら警告を表示する(RimWorldのModがたしかそう)

これが今出てくる理由がわからなかったので もし重要な事項であればもう少し説明お願いします🙏

soeklgb commented 2 months ago

Modが有効なセーブデータを読み込んだ後にタイトルに戻ってModが無効なセーブデータを読み込むと、マスターデータが書き換わったままになると思います。それを防ぐために「タイトル画面に戻るときに元の値に戻す」という方法が考えられます。

しかしその方法も完全ではなく、マスターデータを書き換える複数のModを使ったときにマスターデータを元に戻すのはパッチの実行順序を考えると難しいことがわかります。そこで二つ目の解決策を思いつきました。

いつも説明不足で済みません。

Spoonail-Iroiro commented 1 month ago

機能的には、セーブとセーブの境界の処理・セーブごとの初期化処理はsaveLoadingイベントでやればいいけど 実装する時のわかりやすさ的にタイトル画面に戻った時のイベントもあっていいかもと思い始めた

以下の2点悩み中