Modの初期設定をかえて楽しよう

環境構築

ニューゲームのたびに女神像の前でMCMを開いてModを設定していく作業、毎度のことながら非常に面倒くさい。なら最初から設定済みにしよう、ということで、そのやり方をまとめます。

SkyUI

MCM Helperの登場で設定を保存してニューゲーム時に引き継げるようになりました。以下の解説は古いものです。

定番中の定番といった、UIを改善するModですが、SkyUIは設定値をスクリプトのプロパティにだけ保存しているという、あまりみないタイプです。Modder的には、リソースを節約できて、設定値をかえるたびにCKでの作業がいらないので楽なのですが、User的にはSSEEditでパッチを作ることができない面倒なModになります。

この場合は、スクリプト(pexファイル)を改造して置き換える方法になります。バージョンアップのたびに改造しなおしになるので面倒ですが、SkyUIの最新バージョンは5.2SEで、長いこと更新されていませんので、改造しても困ることはなさそうです。

ソースコードはpexファイルをChampollionで逆コンパイルして用意します。

MCMはski_configmenu.pscです。OnPageResetメソッドが設定画面の描画なので、ここから設定値のありかを探します。

例えば、一般のアクティブ効果HUDの最小残り時間をかえるには、

660 (papyrus)

self.AddSliderOptionST("EFFECT_WIDGET_MIN_TIME_LEFT", "$Minimum Time Left", SKI_ActiveEffectsWidgetInstance.MinimumTimeLeft as Float, "{0} s", _effectWidgetFlags)

なので、ski_activeeffectswidget.pscにある

662 (papyrus)

Int _minimumTimeLeft = 180

だとわかります。これを書き換えてコンパイルすればOKです。コンパイルについてはスクリプトをコマンドラインでコンパイルする方法を参考にしてください。

設定の一部はski_configmenu.pscに初期値があります。あとから追加されたものがそうみたいです。OnVersionUpdateメソッドに書かれています。

キー割り当てを変更する場合は、ski_configmenu.pscの初期値を変更するだけではダメで、Widgetに反映する必要があります。

1077 (papyrus)

; キーコードは以下に書いてある
; https://www.creationkit.com/index.php?title=Input_Script#DXScanCodes
Int _prevColumnButton = 280 ; 「ソート列を前へ」をLTに変更
Int _nextColumnButton = 281 ; 「ソート列を次へ」をRTに変更


; ここに追記すべきコードはSwapItemListKey関数に書いてある
function ApplySettings()
    SKI_SettingsManagerInstance.SetOverride("Input$controls$gamepad$prevColumn", _prevColumnButton as String) ; 反映
    SKI_SettingsManagerInstance.SetOverride("Input$controls$gamepad$nextColumn", _nextColumnButton as String) ; 反映
endFunction

Genesis

敵の出現数を変更するModです。安定しているのでお気に入りです。

まず、設定がMCMと本の両方で行えます。本はいらないのに、わざわざダイアログボックスを出してくるので、これをやめさせます。

SSEEditでGiveGenesisBookクエストのStart Game Enabledを外すだけです。簡単ですね。と思いきや、あいかわらず本が配られます。仕方がないので、オリジナルのespファイルからクエストごと削除しました。

次に、設定値を以下のように変更したいと思います。

項目デフォルト設定したい値
Max Number of Dungeon Spawns105
Max Number of Surface Spawns105
Allow Spawning At Playerオンオフ

設定値はグローバル変数にあります。書き換えるだけでいけそうです。ところが罠がありました。

Allow Spawning At Playerの初期値はMCMの内部にもあるのです。ゲーム開始直後はグローバル変数の初期値で動いているようですが、MCMを開くとMCMの初期値が表示されます。この時点ではまだグローバル変数は変更されておらず、設定をかえるとあらためてグローバル変数が書き換えられるという挙動になっています。ようするにバグですね。これはMCM内部の初期値をグローバル変数から取得するようにすればよいです。

ゲームを起動して、コンソールを開いてhelp genesisでグローバル変数を確認できます。MCMを開いて同期が取れていることが確認できればOKです。

Critical Hit

MCMの初期値とグローバル変数の初期値が別々にあり、初回ロード時にグローバル変数を読み込んでMCMの初期値を上書きしています。よってMCMの初期値は無意味になっています。

さらに、設定に基づいたスペルの割り当てが、MCMにて設定を変更した時にのみ反映されるので、それまでは設定が反映されません。

これらを修正して初回ロード直後から設定が反映されるようにすればOKです。

その他

プロファイル機能を持っているModは初回ロード時にプロファイルを自動でロードするようにすれば手間を減らせます。

注意すべき点は、フレームワークにFISSを使っている場合、MCMの画面外からロードするとCTDすることがあります。解決方法はPapyrusUtilに移行させるのがいいと思います。

結果としてニューゲーム後の儀式が大幅に短縮

自作のModは片っ端からプロファイルの自動ロードに対応させました。一部のModはまだ設定が必要ですが、それでも初期設定時間がかなり短縮されました。設定値を頭で覚えておかなくて済む、というメリットもあります。

タイトルとURLをコピーしました