忍者ブログ

方向音痴のSkyrim

PCゲーム「Skyrim」の雑多なCKいじり日記

外部アセットを使わないNPCの自動脱衣機能

ハースファイアの地下拡張Mod「Hearthfire Celler extension」で、外部アセット使用しないNPCの自動脱衣機能を風呂場に取り付けました。PS4ならではの方法だと思うので(PCやXbox版では不便すぎる&装備武器は外せない)、メモしておきます。

ちなみにこの方法は、大きな欠点があります。それは脱衣した後、再装備の仕組みを脱衣とは別に作らなければならなかったため、再び服を着るかどうかが状況に左右されること。下手をすれば裸NPCを量産することになりかねません。放っておけばロードのタイミングなどでそのうちまた着てくれるので、致命的な欠点ではないのですが。


■仕組みの概要
  • 風呂に入ったNPCに何らかの方法を用いて、多数の装備Slotを占有するArmorAddonなしの装備品を強制的に装備させて脱衣させる。唯一見つけたのが魔法のScriptだったので脱衣魔法で行います。
  • 風呂から上がったNPCに何らかの方法を用いて、脱衣用の装備を持ち物欄から取り上げる。このタイミングで大体のNPCは自分のOutfit、フォロワーであれば最適装備に戻ってくれる。これも唯一見つけられたのが魔法Scriptだったので着衣魔法を作ります。ウェアウルフの変身用Scriptなので処理が多い。着衣魔法は脱衣魔法より若干処理が重いかも。


■脱衣用装備を作る
ArmorAddonが設定なしの装備品を作ります。



外したい装備部位のSlotを全て選択。Playableにチェックを入れ、万一の時でもプレイヤーがNPCの持ち物欄からアイテム交換で取り出せるようにします。念のためにWorldModelも設定して、間違えて持ち物欄から捨ててもまた拾えるようにしておきます。
恐らく上図の設定が必要最低限。頭装備をとろうとすると、赤のラグナル(首無し)状態になってしまいます。


■脱衣魔法、着衣魔法をどうNPCに適用するか考える
自分なりに好きな方法を考えます。
椅子などのFurnitureには、「Associated Spell」というその家具を使った人に自動適用する魔法を登録できる場所があります。今回はこの機能を使い、風呂の中に椅子などを置き、その椅子に脱衣魔法を取り付けることにしました。「椅子に座った」=「しばらくは風呂の中に浸かっていてくれる」という状況が確実に取れます。
着衣魔法は専用Triggerを作って、NPCがTrigger内に侵入したらCastすることにしました。
具体的な作業は後述。先に魔法を作ります。


■脱衣魔法のEffectを作る
ドラゴンアスペクトのMagicEffectに使われているScriptを使用します。このScriptはOnEffectStartで指定の装備を装備させる、OnEffectFinishで装備をはずす、二つのシンプルな処理を行ってくれます。必要なのはOnEffectStartの処理。OnEffectFinishの装備を外すだけの処理では脱衣したままになるので、着衣用の仕組みも必要というわけ。装備品を外すのではなくインベントリから取り除く処理をしてくれていたら、この魔法一つで脱衣と着衣ができたのですが。


Target Conditionsには、「Playerでない」ことを加えておきました。「ActorTypeNPC」のキーワードを持つことも条件にしていますが、家具を使えるのがそもそもこのキーワードを持っているActorだけなので、無くてもよかったかもしれません。でも念押しにはなる。

■着衣魔法のEffectを作る
ウェアウルフの変身用Scriptを使用します。OnEffectStartで特定の装備を装備させ、約10秒後にその装備を持ち物欄から取り除く処理が存在します。そのため魔法発動から着衣まで、10秒の遅延が必ず発生してしまいます。

こちらは2種類作ります。一つは脱衣魔法と一緒にNPCに適用するもの。もう一つはTriggerを使ってNPCにキャストするものです。


こちらが脱衣魔法と一緒にかける方。



こちらがTriggerでキャストする方。ScriptとPropertyは先ほどのと全く同じです。
第三者がキャストするためにDeliveryを「TargetActor」に。Keywordsを使って、先の脱衣魔法と着衣魔法をディスペルできるようにしておきます。またTarget Conditionsで、脱衣用装備を持っているか否かを判定するようにしました。必要のないNPCに着衣魔法をかけないためと、脱衣用装備はNPCのインベントリに残らない方がいいので、魔法で確実に取り上げるようにするためです。


■脱衣魔法を作る


風呂の中の椅子に座った時にかける魔法。プレイヤー向けには疾病退散。NPCには脱衣魔法と、着衣魔法。
着衣魔法は脱衣魔法の効果が続いているあいだは非アクティブになるようConditionsを設定。脱衣魔法より2秒間効果時間を長くとり、120秒の潜伏期間を経て残り2秒で着衣魔法効果を発動させるようにしています。1秒でもいいかもしれませんが、2秒にしとかないとなんか不安だった。


■Cast用着衣魔法を作る


こちらはTriggerを使ってキャストする用のSpell。
特にConditionsの設定もなく、Triggerに入ったNPC全員にかけられるようにしておきます。


■着衣魔法用のTriggerを作る


「Object Window」にてWorldObjectsの下にあるActivatorで、このようなActivatorを作ります。「defaultBlankTrigger」というのがあるので、それをコピーすれば簡単です。
Scriptは「defaultcastontriggerscript」という既存のものがあるので、それをつけます。Propertyは「delayBetween = 0」、「doOnce = false(チェック無し)」「mySpell = Cast専用着衣魔法」「PlayerOnly = false(チェック無し)」。
このScriptは、Triggerに入ったNPCに対してLinked RefからmySpellに指定された魔法をNPCにかけるというもの。

■Triggerを配置する


メッシュを持たないActivatorは普通には置けないです。まずは置きたい場所付近の床や壁や家具などを選択した状態で、CKの上部メニューにある「立方体にT字」のアイコンをクリック。小さなWindowが開くので、そこからさっき作ったTriggerを選択してOKします。



選択していたオブジェクトの大きさにフィットした半透明の箱と、尺度変更用のギズモ(三色の矢印)が現れます。矢印を操作して、ちょうどいい大きさに整形。「2」キーを押せば尺度変更モードから抜けたり入ったりできます。



こんな感じにしました。風呂部屋の出入り口付近に裸のNPCが入ると着衣魔法をキャストします。



TriggerのReference Windowを開いて、Linked Refを設定します。
魔法のCast元となるオブジェクトを選択。Triggerのすぐ近くにあった壁掛け鹿の角飾りを設定しました。

以上ですべての設定が終了。ゲーム内でフォロワーなどを使ってテストします。

■問題点
この方法で気をつける点と不便な点を考えてみました。使う側が慣れてくれれば、それほど気になることはない事項だと思います。「PS4でも脱衣魔法が使える!」というメリットの方が大きいかもしれませんね。

Triggerを通れない状況がある
考えられる理由:
Triggerを通らずに入浴場所から出られる経路がある。これは間取りを変えれば改善可能。
入浴中のNPCを残し、プレイヤーが別セルに移動。こちらは避けられない。後述の問題も同時に発生する状況です。

脱衣魔法に同梱した着衣魔法が働かないことがある
考えられる理由:
理由は分からないけど、魔法の発動自体に失敗したまま効果時間終了。時々起こります。
あるいはプレイヤーが裸のNPCを残して別セルに移動し、そのまま魔法の効果時間が切れた。姿が描画されていない、ロードされていないNPCには魔法の効果が適用されないようです。またNPCに効果時間のある魔法がかかっていても、時間切れを待たず、姿が描画されなくなった時点で魔法が解除されてしまうこともあるようです。

脱衣時首から下が透明になる
考えられる理由:
装備時の処理ミスか何かだと思います。着衣魔法の遅延10秒間の処理中に脱衣魔法が発動するとなりやすい気が。もう一度脱衣魔法がかかるか、着衣魔法が邪魔されずに処理されれば戻ります。NPCのアイテム欄から脱衣用装備を取り上げても直ります。
脱衣魔法と着衣魔法の効果条件をうまく調整すれば、ある程度防げるかもしれません。


前へ | 次へ
PR

Author

UNI
Skyrimで遊ぶのも、CKで改造するのも好きなファンタジー好きです。
戦闘苦手で難易度は基本EASY、慣れてもNORMAL程度。 アンデッド恐怖症なので、ノルド遺跡探索が辛い……。

ブログ内検索

最新コメント

[10/20 放浪者]
[10/10 斥候]
[10/03 放浪者]
[10/02 放浪者]
[09/29 竜崎まりん]