Skyrim箱庭DIY

MODによる固有の環境不具合は自分で直して快適ゲーム。CTDにさようなら。Do It Yourself!!

【Skyrim】NEMESIS用MODの作成実験(Crossbow Jumping Behavior)



スポンサーリンク

NEMESIS用のMODってどうやって作るんだろう?と思ったので、試しに作りました。
基本的な準備はこちらにて。
skmod.hatenablog.com

クロスボウを構えた状態でのジャンプ。これちょっと大げさじゃないですかね?右手だけでクロスボウを持って、両腕広げてジャンプするやつです。特に戦闘中とか三人称視点で後ろから見てると、個人的にはなんとも違和感が。

アニメーション差し替えれば?と思うかもですが・・・残念ながら、「クロスボウを構えた状態のジャンプ」という専用アニメーションは無いのです。差し替えられませぬ。behaviorのブレンド設定で、「ジャンプ」と「クロスボウの構え」を合体させて作られてる為です。

という訳で、NEMESISの出番でございます。behaviorを直接改変して、そこからNEMESIS用のパッチを作ります。
調べつつ作っていくスタイルになってるので、作業量少ない割にはだーいぶ長いです。

一足先に完成図。クロスボウは両手で持ったままジャンプするようにしてみました。既に似たようなMODあったらすいません。個人的にはこっちの方が自然かなと思うのですが・・・どうですかね('_')
CrossbowJumpingBehavior
webpで作った方はファイルサイズ半分以下でこれより綺麗だったんですが、はてなブログがまさかのwebp非対応。「SEOに強いブログ」とか言ってんのに草生えるwwうはwwwおkwwww

関係しそうなアニメーションを捜索

さて、behaviorファイルを改変するとは言ったものの、

どこを変更するのかワカラン( ゚Д゚)

という残念な有様です。ろくにさわったこと無いので・・・

という訳で、まずは関連しそうなアニメーションからアタリを付けます。
Open Animation ReplacerのAnimation Log機能を使って、アニメーションのトレースをします。ゲーム内でリアルタイムにトレース可能。ここでクロスボウ構えてジャンプしてみます。
AnimationLog画面
SCAR環境で武器を構えると、dummyアニメーションでlogが埋まってしまうので、外しておきます。アンインストールせずとも、NEMESISでチェック外してbehavior再生成するだけで大丈夫。


拡大図。こんな具合で拾えました。アニメーションファイル名と、behaviorファイル内のClip Genarator名と思われる情報ゲット。
ジャンプ系アニメーション
ここでは拾えてないのもありますが(移動中のjump_fastとか)、とりあえずこれで取り掛かります。"mt_jump"か"CrossBow_IdleHeld"あたりで探せば、何か見つかるでしょう。


Skyrim Behavior Toolでnodeを確認

SBTにて捜索開始。
"0_master.hkx"内にmt_jumpを発見、すぐ近くにCrossBow_IdleHeldもありました。ブレンド設定をするnodeも確認。
crossbowのブレンド設定


BoneSwitchGenerator

左下のやつです。子nodeをブレンドします。1キャラに複数のアニメーションを同時に用意して、boneごとに違うのを適用する感じ。
JumpStanding_Crossbow_BoneSwitch
"MT_Jump_Behavior"がdefaultです。ここに差分のアニメーションを、bone別に足していきます。


BoneSwitchGeneratorBoneData

"MT_Jump_Behavior"に足す差分。"CrossBow_IdleHeld"を右手と矢筒のboneにだけ適用します
bonedata
これが右手でクロスボウ掴んだジャンプの正体。適用対象が右手と矢筒だけなので、両腕は納刀時のジャンプと同じ、大きく広げるヤツになってます。
これを変更すれば、ブレンドされたアニメーションが変わりそうです。
・・・なのですが。どうもバグのようで、SBTで変更することができませぬ
よってxmlで変更します。

今のはジャンプの例ですが、他にも着地や落下のアニメーションも有りましたよね。とりあえず他のnodeも探しておきます。その後でまとめてxmlで書き換え。


mt_jump以外の変更箇所

Find Generatorで"Crossbow_BoneSwitch"で検索すると、mt_jump含めて6か所ありそうです。BoneSwitchGeneratorと、BoneSwitchGeneratorBoneData(子node)が6個づつ。
0_master.hkxしか見てないですが、足りなそうなら後でまた調べればいいの精神('_')
6か所のCrossbowジャンプ系BoneSwitch
この左列の番号は、残念ながらxmlで見たときのnodeの固有名("#xxxx"の番号)とは一致してなさそうです。なのでnode名で検索していくことにします。


テキストエディタで0_master.xmlを改変

"SOBA"の0_master.xmlを使います。リポジトリのクローン作っておけば安心。

character propertyの確認

behaviorファイルで使われるグローバルな変数です。ここであらかじめ作成されたboneのグループが指定されてる模様。
CharacterProperties
グローバルなのですが、全てのbehaviorで使ってる訳でもない様で、0_master.hkxでは15個のみ。
SBTでは各behaviorで全部のcharacter propertyが表示されてしまう為、整合性が合わなくなって書き換え出来ないのかも。

RightHandAndQuiver”が使われてるので、これを"Arms"に変更します。
つまり、”14"を"12"に変更です。わからなかったらxml説明回参照で。
skmod.hatenablog.com


もう1度整理しておくと

  1. クロスボウを構えて”ジャンプ”すると、右手と矢筒が”クロスボウ構え”状態のまま
  2. 結果、右手でクロスボウを持った状態で両手広げジャンプになる
  3. そこで”右手と矢筒”を”両腕”に変更する
  4. ジャンプ時にクロスボウを両腕で持ったままになる

という流れです。矢筒がジャンプ時の動きになりますが、見た目影響無さそうだったので(僕的には)、これでOKにしちゃいました。試してないんですが、character propertyを使わずに、全身のboneを1本づつ設定(各boneを0or1でブレンド設定)することもできる筈。


各nodeの書き換え

抜粋より行番号見えた方が良いと思うので、引き続き埋め込みコードでなくSSにします。
"Crossbow_BoneSwitch"で検索すると、SBTで見たBoneSwitchGeneratorが出てきます。子nodeが"#0567"なことが分かるので、飛びます。
BoneSwitchのXMLソース


子nodeのBoneSwitchGeneratorBoneData。ブレンドに使うcharacter propertyの設定は、"#0570"。
BoneDataのXMLソース
SBTで説明しなかったですが、”#0568"のnodeでbone weight設定があります。NPCRootに1で設定されてます。つまりcharacter propertyで選択されたbone全部にweight1ってことですね。まさにswitch動作。


#0570、目的のnodeに辿り着きました。VariableIndexを14から12に書き換えます。これで両腕がクロスボウを構えたままになります。ちなみに3だと”UpperBody"で上半身がクロスボウのままになります。ただこれだと体の傾きに合わせて頭も横向いてしまう為、あんま見栄えが良くないです。
Blend対象bone設定のXML
残り5か所も、同じように探します。地道な作業・・・。

#0570、#0605、#0640、#0668、#2194、#2464が正解です。

以上でxmlの改変完了、あとはパッチを作ります。


HKX Extractorで差分を抽出

editsフォルダに改変した0_master.hkxを入れて実行するだけ。改変した6個のnodeの差分が出てきました。xmlで直接変更してるのでゴミデータは無し。
HKXExtractorで抽出した差分
xmlで作業したのに改変箇所以外の差分が出てきたら、何かおかしいので環境チェックを推奨。SBTだと一杯出ます、それは次回にでも。

同梱するテキストファイルも忘れずに。NEMESIS実行時に必須。
infoファイル

中身も漏れなく。空欄があるとたしかコケたような気がします。
infoファイルの中身
・・・なんかmodderっぽいことしてるでござる(〃▽〃)

これで作成完了です。behaviorファイル改変以外にすること無いので('_')
こういうタイプのMODを作れるのがNEMESISの大きな特徴ですね。


NEMESISでの動作確認

パックするか、そのままコピーして動作確認でも。

Data\Nemesis_Engine\mod\mod名フォルダ(4-6文字)

に格納します。

Update Engineの確認

正しいフォルダにinfoがあれば、一覧に出てきます。とりあえず"Update Engine"だけ実行。
NemesisEngine

Update Engineが終わったら、正常に組み込まれてるかチェックします。

Data\Nemesis_Engine\temp_behaviors

ここにローカル環境のパッチを全て取り込んだ、engineなファイルがあります。behaviorごとのテキストファイル。今回は0_master.hkxしか差分が無いので、"0_master.txt"だけ見ます。

mod名(4-6文字の方)で検索すると、うまく取り込まれてれば改変部分が見つかります。オリジナルとパッチ、両方の記述があります。見つからない時は、update失敗してるか、何かパッチに異常があるかも。パッチもマニュアルで作成した際は注意。
NEMESISに取り込まれたパッチ


こんなんなってる時はパッチが競合してます。まあ回避のしようが無いですが、参考までに。競合時はpriorityの低い方が多分無視されます。
NEMESISの競合
ここまで問題無ければ、いよいよbehavior生成です。


Launch Nemesis Behavior Engineを実行

いざ生成。NEMESISの使い方記事じゃないので蛇足かもですが、一応MOD名の確認を。できればWarningも見ておくと安心。名前が空白になってる時はコケてます
behaviorファイルの生成
真っ赤なのは個人的仕様なのでお気になさらず・・・('_')


今度は以下のフォルダにある、xmlファイルを確認します。

Data\Nemesis_Engine\temp_behaviors\xml

これは生成されたbehaviorファイルの、hkx変換前のxmlファイルだと思います。同じく今回は0_master.xmlだけ確認。


同様に名前で検索。最初にxmlファイルを改変した時と同じになってることを確認します。大丈夫そうですね。他も同様にチェック。
生成完了したbehaviorファイル
うまく適用されてない時は、コメントアウト部分が"original"になってます。キャッシュクリア等、生成時の問題のことが多いと思いますが、一応気にしておくと良いかも!

あと、おかしなパッチを作ると、1KBのbehaviorファイルが生成されることがあります。勿論動きません。パッチ抽出時のoriginals側ファイルがおかしい等、なんかミスがある筈。


Skyrim上での動作確認

背面から。落下中や着地も問題なさそうです。
CrossbowJumpingBehavior背面
髪が伸びてるのは、きっと僕のHDT設定記述がおかしいせいだと思う('_')

以上で完成です!


「Crossbow Jumping Behavior」のサンプル

はじめて触るとbehaviorは色々ややこしいので、記事の参考用目的で完成品をアップロードしておきます。
www.mediafire.com

動作に関しては32bit/64bit(AE試してないけど動く筈)ともに動く筈ですが、基本ノーサポートです。あくまで生成されたパッチを、記事と突き合わせる目的用途ということで。

もう1パターンはこちら
skmod.hatenablog.com