初回ロード時CTD回避できる Crash Fixes
追記1/24 15:00 色々補足
どうも初回ロード時CTDとおさらばできそう?


Crash fixes
要:最新のSKSE
最近で一番注目株と言っていいその名の通りクラッシュを回避できるmodのご紹介


初回ロード時CTDはスカイリムを起動してから最初のロード時にNPCがいるエリアだと高確率でCTDする減少で
原因はバニラ以外のモーションファイル入れすぎなのまではわかっています。
軽減はできるのですが、根本的な対処法がイマイチつかめなくて挫折してたんですがコレ入れてからは一度もCTDしてないです。
ただし、初回ロード時のCTD回避できるかは環境による模様。

このCrash fixesはSKSEのクラッシュダンプファイルを参考にクラッシュの原因をスキップしたりするものです。
ユーザー側で対策取りにくいぬるぽ(null pointer)などのメモリ周りのクラッシュ回避や、間違うと即CTDにつながりやすいnifのノードやスケルトン、あとはHavok領域などのクラッシュ回避です。

スクリプト関連の修正はさっぱりないです。
基本的に問題をスキップするmodなので、これとは別に負荷対策やメモリ設定とはしっかりやっておきましょう。
スカイリムのCTD対策

ただし、ゲーム開始直後にクラッシュする場合かつ、
ENBのENBLocal.iniReduceSystemMemoryを有効にしている場合は、
Skyrim\Data\SKSE\Plugins\CrashFixPlugin.iniAlignHeapAllocate=1AlignHeapAllocate=0にしてください。
※ちなみに私の環境ではどちらも有効にしてますが、特に不具合はないです。

人によっては副作用も報告されていて、無限ロードがでたりするそうです。
その場合は無限ロード対策modのSafety Loadの導入を作者は勧めています。
副作用はプラグイン抜けば直るので導入にはそんなに警戒しなくても。

Skyrim\Data\SKSE\Plugins\CrashFixPlugin.iniにて設定ができます。
不具合が出たらこちらを弄ってみるといいかもしれません。
以下解説ですが、私も作者も分かってない事が多いので話半分で。
=1でオン。=0にすればオフにできます。

CrashFixPlugin.ini
StrCmp=1
モーション制御系で別スレッドでスケルトンが削除されてたときのクラッシュ?
非常に一般的な修正で広く効くそうなので特にオフにする理由はないとのこと。

StrLen=1
NiNodeの名前を比較して片方がNullだとクラッシュするのを回避。
これもオンで良いかと。

UnkUniqueId=1
セーブをロードするときのクラッシュ回避。原因は不明。

Render650=1
セーブをロードするときのクラッシュ回避。原因は不明ですが、おそらくレンダリングまわりとのこと。

UnkObjRef4D4EB0=1
コレも原因不明。何かのオブジェクト参照時?

NullSeenData=1
ゲームがロケーションのSeen(?)データを保存する時にそのデータがNullの時のクラッシュ回避。

StringRefSetNull=1
BSFixedStringの引数がNullの時のクラッシュ回避。Nullの時は無視してクラッシュするよりましとのこと。

SkipStrLenCrash=1
StrLen(文字列の長さ?)のクラッシュをスキップ。

bhvGraphUpdateLoad=1
ロード中のクラッシュを回避。おそらくモーション制御周りの何か。
一般的なクラッシュだそうです。

Unk11=1
ロード中のクラッシュ回避。おそらくレンダリング周り。

MissingNode=1
互換性のないskeletonを使用した時のエラー。直すのではなくメッセージが出るっぽい?

AlignHeapAllocate=1
地形に関するコンストラクタがちゃんと割り当てられてないクラッシュ?
uGridが高いと起きやすいクラッシュ。割り当てなのでこれだけちょっと別の機能

IndexError1=1
不明なアドレスの配列とインデックスのひも付けが行われたときに先にアドレスチェックしてクラッシュ回避

InitialAnimationLoad=1
iniのAnimation項目のbInitiallyLoadAllClipsと同じ効果のある設定。
こちらで設定した場合iniの方は不要とのこと。おそらく初回ロード時CTDに関係してます。

技術的に踏むこむとすべてのアニメーション(クリップ)をロード時に読み込んでます。
バニラ以外のモーション関連ファイルのクラスがnull扱いされてて、それが増えすぎるとCTDするようです。
スカイリムのiniのAnimation項目のbInitiallyLoadAllClipsとCrash fixesの修正は同一で
iniの方は私の検証では効果ありませんでした。
が、Crash fixesの方はおそらく別の効果と複合して効果があると思います。


MovementPlannerAgentWarp=1
エラー箇所の機能は謎ですがnull系。Nullの時は0返して回避。

UnallocatedMovaps=1
いくつかのHavokでのアニメーションオブジェクト(のvtable)で起こるクラッシュの回避