複数のMODを入れていると、よく目にする「互換パッチ」というものがあります。特定のMODとロードオーダーだけで回避できない競合を直すためのパッチだったり、水周りや新規の食事等を飲食MODに対応させるためのパッチだったり。今回は、これらパッチに対して、ありがちな気がする「認識の間違い」を追っかけてみます。
多数のNPCを追加する「Interesting NPCs」
子供の外観を変更する「TK Children」
子供の服装に貧富の差をつける「Prince and The Pauper」
この3つのMODを例にしてみます。これにはそれぞれ対応パッチが用意されており、これを全部入れると、一見「相互対応化」するかに見えるのですが、しっかりと文言を読んだ上でTES5Editで見てみると、実はそうではないことに気付きます。
MOD側に不手際は全くありません。User側が都合よく「思い込んでしまう」ことで見落とす競合です。
- Interesting NPCsで用意されているパッチ
- Prince and The Pauperで用意されているパッチ
- バニラの子供NPCに対する変更の想定
- 3DNPCの子供NPCに対する変更の想定
- バニラの子供NPCの確認
- Clothing and Clutter Fixesを使っている場合の問題点
- 3DNPCの子供NPCの確認
- パッチ同士の競合を修正する
- Object Bounds
Interesting NPCsで用意されているパッチ
「TKChildrren_3DNPC patch」が用意されています。
追加NPCのうち、子供NPCに対してTK ChildrenのFaceGenを少し変更した(?)頭部を対応させて使うパッチです。これでInteresting NPCs(以下3DNPC) で追加された子供NPCのビジュアルも、TK Children系になります。
Prince and The Pauperで用意されているパッチ
「Prince and Pauper TK Children Patch」と、「Inconsequential PNP Patch」が用意されています。
TK Childrenと3DNPCの子供NPCに対して、Prince and The Pauper(以下PNP)の服装を適用させるためのパッチです。
この3つのパッチを導入すれば、MODの変更が相互的に行われて万々歳、な気がするのですが・・・冒頭に書いた通り、
実はそうはなりません!
ちょっと混乱しそうなので、図でまとめてみます。
バニラの子供NPCに対する変更の想定
こんな感じになってることを想定してると思います。NPC台帳の中の子供種族(末尾にChildがつくRace)に対して、図のようなTK ChildrenとPNPによる上書き変更で、頭部の外観と服装の両方が変更されている、という状態です。
3DNPCの子供NPCに対する変更の想定
こちらもバニラNPCの場合と同様の想定だと思います。似たような図ですけど。3DNPCで多くのNPCが追加され、その中の子供NPCに対して、バニラと同様にTK Childrenによる外観変更と、PNPによる服装変更の両方が適用されている、というものです。
さて、では実際のところはどうなっているのか?を追っかけてみます。
バニラの子供NPCの確認
試しにバベットさんを見てみます。ロードオーダーは、
05 TKChildren
08 PNP
09 互換パッチ
となっています。
赤枠で囲んだ所、TK Childrenの外観情報と、PNPのOutfit情報、この双方を両立させることが目的となります。
09の互換パッチを見てみると、まさにこの想定通りの値になっていることがわかります。いいとこ取りした互換パッチです。
ちなみにバベットさんに関しては、「TK Children」で闇の一党仕様のローブが用意されているので、こっちも捨てがたいです。互換パッチのOutfitをTK Childrenのもので上書きするか、PNP及び互換パッチからバベットさんの項目を削除してもいいと思います。勿論自己責任で。
左がTK ChildrenのOutfit、右がPNPのOutfit。
Clothing and Clutter Fixesを使っている場合の問題点
Clothing and Clutter Fixesを導入している場合、TK Children、PNPいずれの装備も反映されないNPCが何人か出てくると思います。例えばバベットさんとか。多分このローブ着たまま固定されてるんじゃないかな、と。
原因は恐らくClothing and Clutter Fixesのスクリプトで、「CCF_StartUpScript_KRY.psc」からの抜粋です。
Event OnInit()
Actor Player = Game.GetPlayer()
Player.AddPerk(CCF_ClothingArmor)Babette.Disable()
Babette.SetOutfit(ChildOutfitBabette_KRY,false)
Babette.SetOutfit(ChildOutfitBabette_KRY,true)
Babette.Enable()
スクリプトの知識が乏しいので違ってたらすいません。OnInitによる初回起動時のみ動くスクリプトです。見ての通り、バベットさんのOutfitをスクリプトで設定しているので、espのOutfitで装備を変更しても反映されることは無いと思います。恐らくセーブデータに「Babette」のOutfitとしてガッツリ書き込まれてるんじゃないでしょうか。初回だけしか回らないはずのスクリプトですし。生成済のNPCにも適用できる反面、消したい時は厄介そうな気がします。同じようなスクリプト作って上書きすればいけるかも?
子供NPCではFjotraとSofieも反映されない気がします。
3DNPCの子供NPCの確認
バニラの方はパッチで問題無く両対応化していました。こっちも同じじゃないの?と思ってしまうのですが・・・勘違いという名の罠があります。
Oletteさんを見てみます。Riftenの広場に座ってた子だった気がします。
ロードオーダーが
0A 3DNPC
0B PNPパッチ
0C TKChildrenパッチ
となっています。
赤枠で囲んだ所は、PNPのOutfit情報です。ロードオーダーが最後であるTK Childrenパッチを見てみると・・・
Outfitが3DNPCデフォルトに書き戻されています
これはつまり、どういうことかと言うと、よく読めば気が付くことなのですが。
・3DNPCに対するPNPパッチ
・3DNPCに対するTK Childrenパッチ
の2つです。・・・つまりこのパッチ構成では、
3DNPCにおけるPNPとTK Childrenの互換性は無い
というお話です。そうですよね、PNPとTKと3DNPC、三つ巴の互換パッチとはどこにも書いてないわけです。
つまり、図にすると以下のようなイメージ。
3DNPCの子供NPCに対して、PNPとTK Childrenで変更を食い合っている、つまり競合しているということです。TES5EditのSSではTK Childrenが競合勝者なので、下の図のように勝っている形になります。したがって、PNPのOutfitはこれに反映されることはありません。
ロードオーダー次第で下のSSのようになります。上記のロードオーダーであれば左側。TK Childrenが勝者なので、顔は適用されてますがOutfitは変わりません。
右はPNPパッチを優先にした場合。OutfitはPNPになってますが、顔はジャガイモ、品種で言うならインカのめざめ、みたいな感じです。インカの目覚め、ふかして切ると黄金色でとってもうまいです。・・・どうでもいいですねすいません。
パッチ同士の競合を修正する
どうということの無い修正です。同じロードオーダーのままで、PNPパッチのOutfitをTK Childrenパッチに上書きすればいいだけです。元々そういう想定でしたし。
両対応になったOletteさん。TK ChildrenのビジュアルとPNPの服を着ています。
ちなみに服はLeveled Listでランダム設定になってます。デフォルトのもいれて3種類。
決め打ちにしたかったら、いらない装備をLLから削除する、もしくはOutfitに好きな装備1個だけ設定しとけばOK。
これでめでたく、本当の意味で、
Interesting NPCs(3DNPC)
TK Children
Prince and The Pauper
の3つ巴で、相互に互換性を確保できました。用意されてるパッチを全部入れたからといって、
相互の互換性が取れるとは限らない
ので、十分注意してください。今回の場合はCTDに繋がることは無いと思いますが、ビジュアル的に楽しくないので。
関連記事
Object Bounds
おまけコーナーです。さっきのパッチのSSですが、ちょっと違う所に注目です。
「Object Bounds」という項目ですが、これがTK Childrenパッチですべて0になってます。これ何かというと、僕もあまり知らないのですが。多分、オブジェクトを直方体で近似した時の頂点座標だと思います。下の図みたいなイメージ。目分量で線引いてるんでスケールでたらめですけど。
おそらくNPCを「箱」に見立てたらこんな座標を頂点にしてるよ、って話だと思います。
具体的に何に使ってるのかは知りません。
すいません偉そうにしてても、所詮そんなもんですハイ。
ただ、スケルトンを見ても同じサイズの箱が定義されてます。中心座標からの距離で設定されてるぽいです。
バニラでも設定されてたりされてなかったりで、バラつきがある気がします。Object Bounds関連のスクリプトのエラー出るのと関係有るのかもしれないですが、ちょっとわかりません。
ただ、あまりクリティカルな問題では無い?という気がしてます。理由は、USKPがこれを積極的に修正していないようなので。全部見たわけじゃないですが、何か他に修正項目がある場合は、Object Boundsも一緒に直していますが、Object Boundsのみを直す修正はしていないようで、放置されたままのも結構ある気がします。
とりあえずパッチの所は、気になる場合は変更してもいいかもです。
最近1記事がどんどん巨大化してるせいで、記事数的な更新ペースは下がる一方な気が・・・なんかライトなのどかーんと書いて水増し充実させるのもいいですかね。
こんなとこで終わります。