武器を常に表示させるの改良版になります。
Spellのメリット
- 防具のスロットを消費しません。スロットの空きで悩む心配は不要です。
- Actorにアビリティを付与するだけなので脱着が容易です。
- 防具と違ってOnItemAdded、OnItemRemoved、OnObjectEquipped、OnObjectUnequippedの各種イベントが発火しません。
- NPC対応が楽です。SPIDで配布するだけです。
Spellのデメリット
- 表示、非表示はSpellのConditionで行うため、常時判定となりゲームエンジンへの負荷が常に発生します。おそらく毎秒です。スクリプト負荷と天秤にかける必要があります。
- 位置合わせがかなり大変です。ただし、一度テンプレートを作ってしまえば、その後は多少は楽になります。
- 防具ではないのでアタッチメントがありません。見た目をかえるにはSpellのバリエーションを用意して切り替える必要があります。
- ボーンをひとつ選んでくっつけるという仕組みなので、Weightを塗って細かく動かすことができません。CBPで揺らすこともできません。
- 動くと残像のようなものが見えます。おそらく描画処理の精度が防具より低めに実装されているのだと思われます。
Spellの作り方
バニラにバラモンのツノを表示させるためのアビリティがあります。これをコピーして作るといいでしょう。
SpellはTypeがAbility、Cast TypeがConstant Effect、Target TypeがSelfです。そのままです。
Magic Effectは見た目をHit Effect Artで指定しています。
Art Objectはメッシュのパスを用意した武器のメッシュのものに変えます。
武器に付与するキーワードを用意します。武器にパッチを作って付与してもいいですし、RobcoPatcherで付与してもいいでしょう。
Spellの発動条件は以下のようになります。
- GetKeywordItemCountが1以上
- WornHasKeyword = 0 OR
- IsWeaponMagicOut = 0
まず、武器を持っていないなら表示しません。次に、装備して抜刀しているなら武器として手に表示されているため、非表示にします。そこで「装備していない」もしくは「抜刀していない」という条件を加えます。
あとは気の済むまでMagic Effectを追加していくだけです。ちなみにマグカップやランタンなど、作りさえすれば何でも表示可能です。
RobcoPatcherの設定ファイルの例
設定ファイルのパスは以下になります。
F4SE\Plugins\RobCo_Patcher\weapon\MyVisibleWeapons\MyVisibleWeapons.esp.ini
Varmint Rifleにキーワードを付与する例です。
filterByWeapons=VarmintRifle.esp|00001EE5:keywordsToAdd=MyVisibleWeapons.esp|00000804
メッシュの作り方
基本的なことは武器を常に表示させるで解説しています。
Art Objectの場合は防具と比べて以下の点が違います。
- Weightを塗りません。ShapeのプロパティでSkinnedのチェックを外します。
- 装備箇所はNiStringsExtraDataというノードを用意して、NameをAttachT、DataをNameNode&ボーン名とします。これもバラモンのツノのメッシュを参考にします。
- ShapeのノードはBSTriShapeに変換したほうが良さそうです。
- 余分なノードはCTDの原因になるのですべて削除します。
- 詳しくは不明ですが、位置はNiStringsExtraDataで指定したボーンから相対的に指定するようです。
Varmint Rifleを背中に背負ったバックパックの左側に表示するメッシュを作りました。
バックパックのWeightはChest_Rear_Skinでほぼ真っ赤に塗られていましたので、NiStringsExtraDataで指定するDataはNameNode&Chest_Rear_Skinとしました。
位置ですが、調整せずにゲーム内で確認したところ、横に90度傾いていました。おそらくChest_Rear_Skinのノードの向きがそうなっているからなのかと思います。そこで時計回りに90度回転させてみました。
上の画像では地面に埋まっていますが、原点がChest_Rear_Skinになるので、これで正解です。
バックパックも表示されていますが、位置合わせ用にShapeを用意しており、BodySlideでメッシュを生成する際にZapスライダーで消します。