前回は「二刀流になるための“確定条件”」の一部を割り出すことに成功しました。実験によって判明した“武器の持ち替えの法則”を利用すれば、LeftHand型の武器をCKで作成して持たせておくと、特に工夫をしなくてもフォロワー自身のタイミングで二刀流化します。しかし、さらに賢く戦況を判断しながら、任意のタイミングで二刀流にスタイルチェンジして戦ってくれたら…“ワンランク上のフォロワー”になることができると思います。
刻々と状況が変化する戦闘の最中、「今こそはッ!」という時に二刀流に切り替え、必要でない場面ではActor固有の戦い方に戻ってもらうために、『カスタムAI』を駆使してフォロワーに二刀流を制御させる方法を模索します。
【無類の短剣好き】 vol.2~二刀流の極意~前編
アシ「左手のダガーもだいぶ手に馴染んできたな…!そろそろ、“新たな戦い方”を試してみよう!!」
ヴィ「俺も…身体が鈍っていたところだ!!―――さあこい、自分なりの戦い方でやってみろ。」
ヴィルカスvsアシス。実戦訓練を開始!!
アシ「武器を2つ装備すると防御、つまりブロックができなくなる。だが2つの武器で同時に攻撃すれば、致命傷を与えられる可能性が高まる……あまり近づかないほうがいいぞ。」
ヴィ「ほう、たいしたもんだな。…肝心なのは振り方だ。見せてやろう!」
…後編へつづく。
【LeftHand型武器の利用と問題】
プレイヤーが直に『LeftHand型武器』を持たせたり、取り除いたりしてあげるのが、盾を持つフォロワーに二刀流になってもらう一番確実で安全な方法なのですが…たいていの場合、戦闘中に所持品のやり取りを行うことはできません。それに、フォロワー自身がこの動作を自動的にやってくれると、二刀流が得意なNPCとしての存在感がUPします!
アシスを二刀流にする際に、CKでActorのInventoryに武器をAddしてしまうと、同胞団Questに影響が出てしまう問題が判明したので…フォロワーには後天的にLeftHand型武器を手渡す必要がありそうです。AIPackageのAcquireで獲得させても良いのですが、筆者自身の理解が乏しい事に加え、Packageが作動するたびに武器をいくつも重複して取得してしまったりするなど、別の問題が起こりそうなので、
「必要な時だけ持ち、それ以外の時は消失する」…そんな都合の良い仕組みは無いだろうか…?と、考えていたところ…良い方法に辿りつきました!!
―――
『武器の召喚魔法』です!
【持ち替えフェイク魔法】
実は以前、「耐性とは…何なんだ?」というテーマで魔法耐性の実験をしている時に、召喚武器はCastする方法こそSpellですが…召喚された武器自体の性質は、Spellというより普通のWeaponと変わらない扱いだったので…
「何もないところから装備品を出現させる」という方法が、いつか何かに応用できるかもしれないと思っていました。
まずは、自作した「LeftHand型武器」を『召喚武器』に変更してみます。召喚関連の魔法の製作は初めてだったので、色々な発見がありました!
Weaponの
『BoundWeapon』のチェックボックスをONにします。
UI上に表示されたり、他の誰かに盗られたりしないように「Can'tdrop」に☑し、「Playable」の☑をOFFにします。これで、Weaponが「召喚武器」になりました。
※製作中は、調整に納得がいくまでPlayableにしていて問題ありませんでした。そうしないと、フォロワーのインベントリ内にも表示されないため、テストプレイでちゃんと召喚されているかどうかの確認ができなくなってしまいます(^^;) 最後には、忘れずに☑のON/OFF設定を…!
MagicEffectの「BoundSwordFFself」という「魔力の剣」を参考に作成していきます。EffectArchetypeで「BoundWeapon」を選択し、Assoc.Item1に自作した『LeftHand型武器』を指定します。余計なVisualEffectやConditionsを取り除き、“ただの剣”が召喚されるように改変します。このままでは、Spellを構えると召喚魔法の効果音が鳴ってしまうので…Soundsも変更しておきました。装着時(Cast時)だけ音が鳴る設定です。SpellMakingのCastingTimeを0にしておきました。タメの動作があると、どうしても魔法を使っているように見えてしまうので、一瞬で発動させて魔法モーションの違和感をなるべく緩和します。
『持ち替えフェイク魔法』は、NPCのインベントリを操作できない状況において、強制的に武器の持ち替えを行わせる方法であり、正規の方法からは外れているかもしれません。本来ならば、フォロワーが自然に持ち替えるタイミングを待つか、持ち替えをScriptによって制御する方法がより安定であると思います。フェイク魔法は、武器の持ち替えの動作を模し、召喚武器Spellを素早くCastさせることで、フォロワーが装備していた武器を強制的にすっ飛ばし、別の装備品に置き換える(=持ち替える)動作を行わせます。いわば、
Script版(Unequip/Equip)の代用です。
MagicEffectが完成したので、Spell化します。EquipTypeは「LeftHand」にします(なるべく、左手の盾をはずしてほしいという願望から)。召喚時間(=二刀流が継続する時間)をDurationで設定します。30秒にしてみました。NPCは戦闘直後にLeftHand型武器を召喚して二刀流に。以降はマジカが尽きない限り、AIの召喚呪文のタイマーが30秒間隔のサイクルを繰り返すので、武器の持ち替えのタイミングとのズレによって…覚えるだけで周期的に「一刀流⇔二刀流」をスタイルチェンジしてくれそうです。
【LeftHand型武器を強制装備させる方法】
フォロワーに完成したSpellを覚えさせ、いざ二刀流へ!!と意気揚々だったのですが…まさかの「シーーーン……」。黙々と盾を持ち、剣を振り続けるフォロワーの姿が、そこにはありました…(涙)ただ呪文として覚えるだけでは、二刀流にはならないようです。一体、何故なのでしょうか?
―――どうしたんだ!?アシス…(×Д×;)
…なんで淡々と戦っているんだ、君は!?―――
理由は…前回と同じでした…。今度は「盾+武器>呪文」の優先度になり、盾と片手武器が両手を塞いでいて、肝心の呪文が装備できない!…無論、呪文を装備し召喚しなければダガーを取り出せず二刀流にはならないので、元も子もない状況に…(汗)
二刀流使いになるのは、大半が「魔術師」ではなく「近接戦士」だと思います。そういった二刀流使いのCombatStyleのEquipmentScoreMultsは、Meleeが高くMagicの値が低いので、なかなか「LeftHand型武器」の召喚呪文をキャストしてくれませんでした。アシスの場合は、DefaultのCombatStyleの時に呪文を唱えられれば良いはずですが、Magicの値が1でMeleeと等しいにもかかわらず…盾を持っているためか、武器召喚の呪文は全く使ってくれませんでした。たとえ武器の左右のDPSのバランスを調整してあっても、それだけではダメなようです。
攻撃の特性は“武器”なのに、扱われ方は“魔法”…召喚武器は非常に“ニュートラル”な性質を持っていました。
アシスをはじめとする、DefaultのCombatStyle。
これに近いスタイルで盾を持つフォロワーは、LeftHand型武器を召喚できない可能性が高いです。盾や武器で両手が塞がっていると…自己強化系(オークフレッシュなど)とは異なり、武器召喚系はAI的に出しづらいのかもしれません。逆に積極的に召喚させようと極端にMagicを高めると、魔法ばかりを使うことになり、二刀流にはなれますが…活かしきれない戦い方になってしまいます。―――ここで、いよいよ
『カスタムAI』が登場!…その力を借りることで、持ち替えフェイク魔法が真価を発揮します!!
【二刀流カスタムAIの作成】
盾の扱いと二刀流を両方とも活かせる、切り替え式の「二刀流カスタムAI」を作成する方法に取り組みます。
AIPackageだけでなく、製作全般に言えることですが…自作したフォロワーは一から設定する項目が多くて大変な分、Questに縛られることがあまりないので、基本的に自由度が高いです。既存のフォロワーは、キャラ設定がすでに組んであるので、自分が変更したい所を変えるだけですが、関連するQuestやイベントとの兼ね合いを考慮する必要があり、それらに影響を及ぼさないよう改変するのは、結構骨が折れます…(汗)
専用のQuestやAIPackageを用いれば、Actor自体にSpellやShoutを覚えさせなくても呪文をキャストできるので、上述のような問題を比較的回避でき、
「バニラのActor情報になるべく手を加えずに、フォロワーに色々な行動をとらせる」ことが可能になるようです。
つまり、フェイク魔法をカスタムAIで制御できれば、Actorの設定には基本的にノータッチで…Inventoryにアイテムを入れたり、自作Spellも覚えさせないでOK!上手くいけば、Actor自体の変更をほぼ行わずに、必要な時だけ二刀流させることができます。このような仕組みは、アシスなどの複数のQuestに拘束されているNPCやフォロワーが、「切り替え式の二刀流能力」を取得するのに、非常に合理的な方法と言えます。
自作したアシスの二刀流用CombatStyle。
Rangedに値が設定してあると、敵との距離が離れたときに矢をつがえてしまうので、0にしました。どんなに離れていても、二刀流のまま敵をしつこく追います。同様の理由から、MagicやStaffも0に。Unarmedを残してあるのは、戦闘中に敵に武装解除され、持っている武器が全て外れてしまった際に、一時的に素手でしのぐ可能性を想定しました。先にも述べましたが、素手の時にLeftHand型武器を持っていると非常に危険なので…素手用のCombatStyleも別途用意しておき、OverridePackage自体もConditionsで切り替えられる仕組みにします。Attackは、二刀流の軽快さを意識してみました。SpecialAttackだけ何を示しているのか不明でした(クリティカル率やキルムーブ率に関係があるのでしょうか?)。とにかく手数で押すので、Bashは一切行いません。
アシスのCombatStyleは、“カスタムAIで二刀流に切り替える前提で作成した”極端な設定です。
二刀流モードのPackage。
ProcedureTreeの構造ですが、一番上のUseMagicがLeftHand型武器の召喚魔法をキャストし、「二刀流化」。中央のHoldPositionは、「召喚武器(アシスのダガー)を使って戦闘」。一番下のHoldPositionは、「それ以外の場合の戦闘」の行動です。HoldPositionを2つにする意味は…正直、自分でもあまり良く理解できていないのですが…(汗)なんとなく…安定性が増す気がしています。急激な戦況の変化によって処理が追いつかなくなった時、“条件の隙”のようなものが存在すると、体感的にNPCの行動がバグるような傾向があるからです。特に今回の場合では、「武器を持っている時とそうでない時」の変化時に、バグが生じる可能性があると考えたためです。中央のHoldPositionは「HasMagicEffectとGetItemCount」で「召喚武器を使用している」という条件が付けてあります。不必要であると分かったら、後で取り除こうと思います。
ConditionFunctionに関しては、まだこれで良いのだろうか?というテストの段階ですが…UseMagicを実行し、二刀流になる時は、「膝をついていない」、「左手が素手ではない(片手武器以外の何かを装備している)」、「LeftHand型武器の召喚魔法を使用していない」という条件にしました。この条件なら…すでにSpellの効果がかかって武器を召喚して二刀流している時に、重複して魔法を使おうとすることは無いはずです。また、このPackageが作動する前に、左手に装備できるTypeの強力な武器を持っていた場合は、アシスのダガーを召喚せずに、より強力な武器の方を使用して二刀流するように設定しました。
PackageのFlags。
PackageのConditons。
現在の条件はとてもゆるいです…(^^;)安定した挙動を得るには、もう少し工夫が必要だと思いますが、「GetHealthPercentage」でCombatTargetのHealthが5割以下になった時に、二刀流になるようにしました。敵が弱っていない時は、「盾+片手剣」で自身を守りながら戦い、ある程度相手のHealthが減少してきたら防御を捨て、「二刀流」で一気に畳み掛けるというカスタムAIです。自己感知型ではなく敵感知型にしたのは、ヒーラーに補助してもらうことを想定したためです(自己のHealthが減らないと二刀流が発動しなくなるので)。アシスの二刀流CombatStyleはRangeが0であり、敵がドラゴンのように飛行タイプの場合は手も足も出せません。そのため、GetFlyingでPackageを切り替え、弓を使える「Default」のCombatStyleで戦ってもらうようにしてあります。
※Healthを監視した行動なので、「敵のHealthが減る→このPackageに切り替わる→フォロワーがUseMagicを使用して二刀流になる」という“まさにその瞬間”に、敵が一気に回復してしまったりすると…動作を起こすための条件とActorの現在のAIの状態が噛み合わなくなり、ヒーラーなどと同様に動きがバグる可能性があります。テストプレイで様子を見たところ…ほとんど起こらなかったのですが、復帰能力の高いトロールなどの敵を相手にした場合は、注意が必要かもしれません。もしバグってしまった場合は、プレイヤーが敵のHealthを50%以下に削ってやると…元に戻り行動を続けられました。
作成したカスタムAIがちゃんと動作するかどうか、実際にスカイリム上で確認します。
ヴィルカスのHealthが50%以下になりました。どうなるのだろう…(ワクワク)
アシスが間合いを取りはじめました!左手の盾をしまいます。遂に来るか…!?
ググッ!と、左手を素早く掲げた瞬間―――
―――パッ!!……おおっ!?なかなか良い感じです!
二刀流化完了!!バニラのモーションではあまり違和感を感じませんでした。modで魔法モーションを変えていると…少し印象が変わるかもしれません。ヴィルカスが回復してHealthが50%以上に復帰すると、次の持ち替えのタイミングで「盾+片手剣」に戻りました。
※Conditionsに指定する
「CombatTarget」とは、ターゲティングしている敵一名を示しているようで、ヴィルカス(アシスの現在のターゲット)ではない、近くにいた別の敵のHealthを50%以下にしても、二刀流にはなりませんでした(画像に写っている鶏を敵対化し、Healthを調整してみました)。そういうことが起きてしまうと、“常時二刀流”という状態になりかねないので…これは非常にいい傾向です!
【盾を持つ場合の二刀流:総括】
アシスのように、「普段は盾を扱い、デフォルトのCombatStyleが二刀流でないタイプ」のフォロワーに二刀流の切り替えを行わせるには…
⓪ActorのCombatStyleをAllowDualWielding☑がONのものに変更する以外に、
①自作のLeftHand武器を予め持たせておく
②LeftHand型武器の召喚魔法を使わせる
③カスタムAIでCombatStyleを二刀流可能に切り替える
という、3通りの方法があります。
①は武器をCKで自作して、フォロワーに手渡すだけの大変シンプルな方法です。戦闘中の着脱は全てNPCのデフォルトAI任せになるので、持っている装備の性能やCombatStyleによっては、二刀流⇔その他のスタイル戦術の切り替えが、どちらかに偏る可能性があることがデメリットです。
②はCKでSpellを作成する手間がかかりますが、フォロワー自身の召喚関連のAIのタイミングで二刀流化することができます。継続時間を設定しておけば、①よりも切り替えを制御できます。デメリットは、魔術師タイプが二刀流になるのは容易ですが、近接タイプや防御タイプのCombatStyleを持つNPCがCastできなくなる問題があり…戦い方と二刀流化の相性が逆行してしまっている点です。この問題は、③のカスタムAIと組み合わせることで、解決することができました。
③は①~②の方法と組み合わせることで、さらに効果を発揮します。③だけで二刀流になれるか、少し様子を見てみたのですが…やはり、盾を持っている以上…どうしても二刀流になる確率が低くなってしまいます。
この方法がベスト!というのは言い切れませんが、単体では切り替えの効率が低いので、①+②、①+③、①+②+③など…作成したいフォロワーの特性に合わせて上手く組み合わせていくことが重要だと思います。
【無類の短剣好き】 vol.2~二刀流の極意~後編
ヴィ「随分、軽快な持ち替えだな…!盾を下げたときに、逆手に短剣を隠し持っているとは思わなかった…まるでウィザードの魔法のようだ!!」
アシ「トーバーとの訓練では…一振りする間に入って出てこれる自信があったが、そうはいかないみたいだな。踏み込みを間違えたら、重い斬撃を喰らうと思うと…足がすくむ!」
ヴィ「“攻撃は最大の防御”…相手の動きを止められなければ、剣で防御する意味は無い。」
アシ「“剣の重さ”というヤツを少し理解できたよ…!戦闘の幅が広がった。」
ドヴァ「いい訓練だったな…!!どちらが早く膝をつくか…両手剣使いvs二刀流使いの戦いが、そう長引くことはないだろう。」