忍者ブログ

方向音痴のSkyrim

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

ChildRaceを戦わせる【CombatOverrideで遊ぶ】


まさかできるとは思いませんでしたが、CombatOverrideを使えば、それ系のMOD無しでも子供を無理やり戦わせることができるようです。
テストプレイも命がけでした。敵が近くに来ると逃げる仕様にしたので、自分が常に囮にならなくちゃいけなかった。
子供は無敵で不死です。この子らが戦えるようになると、敵にとってはかなりの脅威でしょう。「なんで死なないんだ!」と絶望しながらテストプレイに付き合ってくれた、サンガード砦のフォースウォーンの皆さんに感謝します。



Combat Override Packageは、Actorデータの「AI Packages」タブ内にて確認できます。たいていの場合は「NONE」だと思いますが、こちらに戦闘時に動かしたいAI Packageを登録したFormListを設定することで、通常の戦闘行動に一定の縛りを作ることができます。
(以前はObserve Dead Body Override Packageをいじくりました。内容はこちら。)

この項目は、Quest Aliasにもあります。「Dialogue Follower」のAliasを見ると、このCombat Override Package Listに設定が入っています。登録されているのは「Hold Position」のAI Packageで、屋内か屋外かの二つが用意されています。どちらもPCからあまり遠くで戦わないような設定がされています。

"Procedure: HoldPosition"は、Combat Override Packageのみで使われる特殊なProcedureでもあるようです。これでLocationを指定しておけば、大体その範囲内で、自分のCombat Styleに沿った戦闘を行ってくれます。つまり、このProcedureはNPC達の戦闘と同時実行できるタイプ。状況によって、設定が無視されがちなProcedureではありますが。
逆に"Procedure: Travel"などは、Combat Override Package内で使用すると、そのProcedureが動いている間は、まるでFlagsに「Ignore Combat」のチェックを入れたかのような挙動となります。目的地に着くまで一切の戦闘を行わず、どんなに敵に切り刻まれても体が動く限り目的地を目指し続けます。つまり、NPC達の戦闘AIを上書きしてしまうタイプ。物理的な行動を行うフィジカルなProcedureは全てこのタイプになるようです。

となると、子供を無理矢理戦わせるには"UseWeapon"を含んだPackageを、Combat Overrideとして作ればいいことになります(魔法を使わせるなら"UseMagic")。
「UseWeapon」は、ダミー人形や弓の的で戦闘訓練をしているNPCが使っているAI Packageです。これにはダメージ判定を「ON/OFF」するフラグがあるので、ダメージONにしてやれば実戦で使えます。



実際に作ってみました。
最大の欠点は、そのNPCに設定された「Combat Style」が死んでしまうこと。なにせ全ての戦闘AIをフィジカルなProcedureで拘束するのですから。もっとも子供種族はデフォルトで戦わないので、CombatStyleを持っていても意味はありません。
結局、Procedure Treeで擬似的な「Combat Style」を作ることになりました。
これは間接攻撃ができる武器を使用するPackage。むしろその武器しか使わない。「Weapon: Ranged」は多分弓だけな気がします。魔法の杖とかもいけるのかな。

ちなみにHoldPositionしている間は、子供のデフォルトの戦闘AIが働いて、逃げ惑う行動になります。

 

「Flags」はこんな感じ。
「Weapon Drawn」にチェックしてますが、こうしておかないと"UseWeapon"がうまく動かなかったのでチェックを入れているだけです。臆病設定のNPC以外は戦闘中常に武器を抜いた状態になるので、特に理由がなければチェックを入れなくてもいいようです。
それ以外はフォロワーのCombat Override Packageと同じ。


Procedure Tree。
とりあえずPCの目の届く範囲をうろちょろし、生死問わずFindで見つけた全てのActorから距離をとり、あわよくば敵に向けて弓を引く行動です。
今回はフォースウォーンを相手にしたテストプレイなので、敵判定は"Find"で見つけた結果である「FoundActors」が、「ForswornFaction」のファクションに入っているか否かで行っています。でないとActorを見境なく攻撃してしまうので。たいていはPCが真っ先に狙われますが。

ピンクで色を塗ったProcedureは、Flags Overrideで「Weapon Drawn」のチェックをはずしています。"Procedure: UseWeapon"が実行された後、なぜか弓を引き絞ったままの状態で移動するようになってしまうためです。この状態だと移動速度がやたらと落ちて戦闘に支障が出るので、実行機会が多そうなProcedureで一度武器を収めさせる必要がありました(WaitでBranchを強制終了させているのが原因でした……。UseWeapon行動の途中でProcedureが無理に終了させられるとそうなるようです。Simultaneous BranchをやめてUseWeapon単独実行させると、挙動が改善します。しかし完全ではないので、やはり他Procedureで武器を収めさせる動作が必要です。一応このProcedureTreeでも動くので、記事の説明はこれに沿って続けます)。



もろもろの設定値はこちら。
"Procedure: UseWeapon"での攻撃回数は、1回に限定しています。1回ごとに状況を判断し直させるのですが、これで十分機能します。状況に変化がなければ、その場にとどまってちゃんと連射してくれます。むしろ複数回攻撃できるようにすると、敵が死んでも設定回数分の攻撃が終わるまで射ち続けてしまうので、不自然でした。
Simultaneousでタイマーとして同時実行している"Procedure: Wait"では、”CombatTimer”の3秒を使っています。これは弓で一回攻撃を行うのに十分な時間かつ、随時状況が変わる戦闘にもそこそこ対応できる時間です。

Findは、キーワードやFormListが使えるとすごく便利なんですが、それができないのでActor全部を検索して、後のProcedureのConditionsで敵か味方か死体かと、ふるいに掛ける方法をとりました。
敵のファクションをFindするという方法もあります。多分この方法が、後々扱いやすい気がします。

※後日、このProcedure Treeはちょっぴり書き換えました。
どうやら「Procedure: HoldPosition」は単体で使わないとうまく動作しないらしく、Findと同時実行すると棒立ち状態になるのが分かりました。HoldPositionの代わりに0.5秒を設定したWaitを使う方法に変更しました。



上記のProcedure Treeの動作を確認したところ……、というか試行錯誤してようやくそれっぽいものができた結果ですが、まあおおむねいい感じに動いてくれる形にはなりました。
長くとも3秒ごとにターゲットを取得しなおすので、PCの近くにいる敵を優先的に狙って攻撃してくれるようです。
攻撃はどうも正確性が低くて、明後日の方向に矢が飛んでいくことが多々あります。PCに当たることも。コンソールで無敵になってなかったら、多分敵より先に死んでいたはず。体の脇に刺さっているのは、フォースウォーンの射手の矢と、お子様の誤射の矢です。前のほうにも2、3本、誤射分が刺さってます。ちなみに隣にいるフォースウォーンは、矢2発でお子様が仕留めました。



あくまで攻撃は"UseWeapon"なので、標的との間に障害物があってもお構いなく射ようとする。
射線上に無関係のNPCが入れば、設定しだいでは射るのをやめてはくれるけど、自分から位置取りをしなおすことはない。
AI Packageで全ての行動をまかなっているため、かなりぎこちない動作ではあります。しかしPC側がうまく誘導してやることで、彼女一人で砦の外にいる敵を一掃できるくらいの動きはしてくれました。

お互い満身創痍にはなりましたが、子供も戦えると知って夢が広がってきました。これで配偶者と養子を連れて、家族で冒険の旅ができそう。一般の子供達は戦わなくていいけど、ドヴァキンの養子達は……戦ってもいいんじゃないかって思ってましたから。ダミー人形を前にダガーを振るうあの子らの動きは、完全に本物です。フォースウォーンの暴君も真っ青だわ。

基本構造はできたので、今後は改善と拡張で試行錯誤するつもり。戦闘用なので、できる限り軽快に動くProcedure Treeにしなくてはいけませんが。

今回はかなり極端な例でしたが、Combat Overrideを活用すると、戦闘中におけるNPC達の行動をこれまでのものとはちょっと違ったものにできます。ヒーラーはもちろんのこと、普段は逃げ回るだけだけど、体力が一定以下になるとキレるとか、好きな人が近くにいる時だけ戦うとか、敵が女性だと戦わないとか、あと、隠密で影の戦士を発動しつつ何処か遠くへこそこそ逃げるとか。実用的な例では、近接系攻撃をして欲しい場合に、敵の間合いを強制的に詰めさせたり(CombatStyleだけでできました…)、逆に間接系攻撃専門のNPCは、敵との距離を開けさせたり、CombatStyleを補助する形のPackageを作ることもできそうです。制約が多いだけにできることは少なそうですけど、面白いかもしれません。

※修正項目多いので、そのうちまともな記事を書き直したいです。

次へ
PR

コメント

1. OverridePackage、頑張ります!

かなり中途半端な理解のままアップしてしまいましたが…ブログの記事を読んでくださり、ありがとうございます!
UNIさんも「攻撃的回復」の方法に興味を持ってくださって、とても嬉しいです!!
しかし、この方法を試すのに『{ SPS』を使用したので、通常の雇用の場合にどんな挙動になるかは、未確認です(すみません…)。

<メリット>
フォロワーが回復を当ててくれる感UP、誰でもヒーラーになれる可能性、攻守に優れたAI

<デメリット>
ムゴさ、未知の不具合の発生

<既知の問題>
【1】時々、対象の足元?を弓を引き絞ったまま追い続けてしまう現象が確認されました。
この状態になると完全にサンドバック状態になってしまうので、麻痺、弱フスロダ、銀塩などを放ち、よろめきを発生させて行動を初期化してやると、すぐに復帰できるみたいです。プレイヤーと敵とフォロワーの3者の距離感が近いときに出やすい印象です。
憶測になりますが…プレイヤーのヘルスが減り、回復動作に移った際にフォロワーが敵から攻撃を受けると、フォロワーの意識が敵に向いてしまう→しかし、敵はPackageのTargetではないため、攻撃できずに弓を向けたまま何もできなくなる。の流れなのかな?という気がします。もし、そうだとしたら…攻撃的回復ならではの問題点ですね…(><;)

【2】敵が死亡せずに膝をついたり、麻痺などで「敵対したままの状態で、一時的にダウンしている」ときは、攻撃的回復の「攻撃ダメージ」も発生してしまいます。
通常時は、攻撃のダメージは乗らず、回復の効果のみが発動しているようです。

以前に挑戦したときに頻発していた、初期化すらできないカクカクの症状は今のところ全く出ていないので、少し安心しております。

ネットから解決するための情報がなかなか集められなくて困っておりました。
OverridePackageに至っては、考察の過程を残してくださっているのは…UNIさんのブログだけでした。(記事を書いてくださる方がもっと増えるといいのですが…)
スカイリムのAIPackageに興味を持っている方が少ないので、誠に勝手ながら…UNIさんの事をとても頼りにしております。
私もCKwikiの内容を自分なりに解読して、何か解決方法が無いか試してみます!

UNIさんの他の製作の妨げになってしまわないか心配なのですが…m(_ _)m(もちろんご自身の製作を最優先してください!!)
個々のフォロワーに特別なQuestやScriptが今のところ必要でないので、Packageを上手く工夫できれば、ヒーラーフォロワー作りのハードルを一気に下げられるような気もしています。
全て組み合わせることができれば、もっと洗練されると思います…(汗)

気長に、そして…楽しみに待っております!!

Re:OverridePackage、頑張ります!

ファル粕さん、こんにちは!
個人的な印象ですが、Procedureの「UseWeapon」「UseMagic」「Activate」は実行途中で邪魔が入るとおかしくなりやすい、使う側としては非常に扱いづらいProcedureという気がします。
Procedure Treeを作るときは常にこれらのProcedureがうまく動かなかったときを想定して、回避なり修正なりができる工夫が必要になってしまうんです。最終的には、「7割8割で大体動いてくれればいいや」と妥協してしまうのですが;;

既知の問題【1】は、Procedure:UseWeaponの実行がうまくいかずに止まってしまった状態なのかな、と思いました。UseWeaponはターゲットに対してかなり正確に照準を合わせようとしているみたいで、合わない限り撃つこともない、ような感じがあります。そこへ敵が攻撃をしてきて位置をずらされたりしたら、照準を合わせなおすこともできずにProcedureが止まってしまうのかなぁと。Procedureの中身を見ることはできないので、憶測しかできないのが歯がゆいです。
回避策のひとつとしては、邪魔が入る前に素早くUseWeaponを実行&終了させてしまうのが考えられます。回復矢の一発の回復量を大きくすれば、一発二発ですぐに回復行動が終了できるので多少問題が改善されるかもしれません。

ちなみにバニラのフォロワークエストはAliasにCombat Overrideを指定しているので、Actorデータに登録したCombat Overrideを上書きしてしまいます。他のフォロワー拡張Modでも上書きしてしまう場合が多いかと思います。
うちの「{SPS」ModはCombat Overrideを空白にしているので、ActorデータのCombatOverrideがそのまま生きてくる仕様になってます。フォロワーの通常行動も超シンプルに作っているので、独自行動を持つフォロワーNPCのテストプレイ専用フォロワー拡張Modとして最適かもしれません。……むしろその目的で作ってたりします。複数のフォロワーNPCのActorデータにCombat Overrideを仮設定し、「SPSで全員連れ歩いてまとめて動作確認」がとても手軽です。
なので、どんなフォロワー拡張Modを使っていても確実にCombat Overrideを適用するには、そのフォロワーNPC専用のQuestを作ってあげる必要が出てきます。
以下の記事を少し書き直したので、よろしければ参考にしてみてください。まだ理解途上ですごく分かりにくい文章になっているのが申し訳ないのですが、記事の真ん中あたりに説明があります。
・変身魔法を作る02【NPCに独自行動をとらせる】
http://skyrimeasy.blog-rpg.com/ckworks/werewolf02

「Priopity:99」のクエストAliasにCombat Override Listを登録するだけでいけるので、難しくないかと思います。むしろうまく動くAI Packageを作るほうが大変かもしれません……(^^;

コメント

3. Packageの改良

多くのアドバイス、本当にありがとうございます!!
実際に検証していただけたおかげで、自分の設定を見直したり、バグが環境による影響なのか、共通したPackageの抱える問題なのかを判断することができ、非常に助かりました。また、Flagsの設定は完全に忘れておりまして…こちらも大変参考にさせていただきました!!

>既知の問題【1】は、Procedure:UseWeaponの実行がうまくいかずに止まってしまった状態
私もUNIさんとほぼ同じ印象を持ちました。当初、弓を構えたままになってしまう現象はProcedure Treeの設定や構造で発生していると思っておりましたが、UseWeapon特有の宿命のようですね…。なんとかコレを抑える方法を見つけ出せないか、試行錯誤しております。
「事前に防止する策」と「事後に復帰する策」の2つの解決策があることに気付きました!主に前者を中心に取り組んでいるのですが、それでもProcedureの停止を100%防ぐ方法は今のところ…見出せていない状況です。Procedureが止まってしまった場合、後者の方はよろめき以外の方法でリセットする方法が思いつかないのですが…、UNIさんはPackage自体を強制終了する方法などはご存じですか?PackageのScheduleのところでDurationを少なくすれば、Procedureが停止した際にPackageごとが終了できると思い、試してみたのですが…0.25hour(=15min)が最少のようです(長すぎる…。汗)

Package内の距離間や詳細な設定を、教えていただいたデータをもとに再設定しました。
フォロワーの位置取りが改善されて、以前のものよりかなり洗練された感じになった気がします!
他の変更点として、Min Pauseをを0→2とMax Pauseを0→3に変更し、一回の射撃の後に少しだけAIにPackageの切り替え処理をさせるための待機時間を取るようにしました。
また、UNIさんのブログの記事「フォロワー拡張Modの自作08」を拝読し、「Flee」を追加したところ…フォロワーがとても良い動きをするようになりました!Tree事体の構造には大きな変化はないのですが、敵に狙われることを避けるために、「Flee」のProcedureをUseWeaponの上に差し込んだ形にしてみました。FreeFromを「Combat:Target Ref」にし、GoalRadiusをUseWeapon Locationと同じ「700」に指定しただけなのですが、目に見える変化が現れました。このPackageには敵から逃げる動作が合っているようで、フォロワーが動き回ることで自然に回復できる距離間に移動してくれ、プレイヤー自身が下がって位置調整する手間がだいぶ減りました。新しい記事は、ほとんどがバグの考察になってしまいましたが…(汗)詳細な設定はブログの記事にアップします!

>「{SPS」ModはCombat Overrideを空白にしているので、ActorデータのCombatOverrideがそのまま生きてくる仕様になっている
今回のヒーラー製作は色々な偶然が重なって上手く回復してくれていたということが分かりました。最終的にはOverridePackageを運用するためのQuestが必要になるということも教えてくださり、ありがとうございます!{SPSが、特別なフォロワーシステムであり、ActorにセットしたOverridePackageがきちんと適応されていたからこそ成立していたのですね。デフォルトで検証していたら、この発見自体に気付かなかったかもしれません。
本当に…{SPSはOverridePackageの検証に「推奨」のフォロワーシステム!というくらい、画期的なシステムだと思います(^u^)

現在は『攻撃的回復』Packageでフォロワーに、回復の薬によるヒーリングだけでなく「複数の補助動作を行わせる」にはどのようにしたらいいのだろう?と試しております。(例えば、何らかのConditionsの時、マジカ回復、挑発なども行う)
単純にUseWeaponのProcedureを増やすべきか、Packageごとまるまる切り替えてしまうべきか…悩んでおります。たしかOverridePackageの切り替えはScriptがないとできなかった気がして、
他にどんなアプローチがあるか…ここのところ、良いアイディアが浮かばずにおります(^^;)

Re:Packageの改良

止まってしまったAI Packageを強制的に終わらせる方法は分かりませんが、Procedureを強制的に終わらせる方法をとったほうが確実かもしれません。
ひとつめの方法は、SimultaneousのBranch以下に、UseWeaponとWaitをいれて、UseWeaponの実行に制限時間をつけるというものです。
この記事でもUseWeaponとWaitを使って、制限時間3秒でやっています。UseWeaponが3秒以内に正常終了すればSimultaneous Branchも終了。UseWeaponが止まってしまっても、Waitで設定した時間が経過すれば強制的にUseWeaponも巻き込んでSimultaneous Branchを終了し、次の処理に移ることができます。この場合だと、UseWeaponで武器を構えたままになってしまったNPCの姿勢を元に戻す作業が必要かもしれません。この記事ではSimultaneous Branchの次にくるProcedureのFlag Overrideで武器をしまわせてますけど、他にいい方法があるかもしれないです。
もうひとつの方法はProcedure Treeの最上位をStackedにしてTreeを組み立てていくことです。
UseWeaponに実行条件を設定すると、実行条件が合わなくなったときすばやく別のProcedureなどに行動を切り替えてくれます。1秒単位でProcedure Tree全体の実行条件を監視し続けてくれている感じなので、かなりテンポのいい動きになります。コツは、Stacked Branchを多用して実行条件を絞り込み、実行するProcedureは常に1個だけという構造にすることです。Sequence Branchは子要素を上から順に実行しないとBranchを終了できないので途中のProcedureが止まると困るし、軽快さにも欠けます。必要ない限りは使わないほうがいいかもしれません。
もちろんこの二つの方法は併用もできます。後者の方法がかなり強力なので、前者の方法は慣れてくると使わないかも。

「複数の補助動作を行わせる」のは、おっしゃるようにUseWeaponのProcedureを増やすほうがすばやい対応ができるのでいいですよ~。先ほどの話の続きになりますが、AI Packageの切り替えは約5秒以上と結構時間がかかってしまうのに対し、ひとつのPackageにすべての行動をStackedを最上位にしたProcedure Treeで組み立てれば、ほぼ1秒単位で反応してくれます。Scriptで状況変化をすばやく捉えてPackageを切り変える手間も要りません。
それぞれの行動にうまく実行条件を設定しあげれば、かなり賢い動きをしてくれるようになるのではと思います。
ただ、実際に作ってみないとどこまでうまくできるか分からないのが、Procedure Treeの難しいところです(泣) 今、自作AI Package Template集みたいなModをつくってるんですがCombat Override系はやっぱり難しくて(単純だけど洗練されたTreeにしなきゃいけない;)、ついつい生活系AI作りのほうへ逃げがちになっています。

コメント

4. 戦闘用Packageの楽しさと苦悩

UNIさんこんばんは!

相変わらずOverridePackageの製作に取り組んでおります。
ブログの更新が完全にストップしてしまう状況が…ここ数日間続きました。とても難しいことが多すぎて問題を解決できず、Packageの処理を成立させるどころか自分の頭の方が処理しきれていないのだと思いました。今までmod製作で最も脳を酷使しているかもしれません…φ(×_×;)

自分が作ったAIPackageの挙動の全てを把握できているのではないのですが、なんとなくいい動きをするパターンだな~と大枠をつかみ、UNIさんのブログの記事やアドバイスと照らし合わせながら、思考を巡らせつつデータを収集しております。

WaitTimerとFlag Overrideを使い始めました!!以前は、PackageのWaitで立ちすくんでいる時に、「ちゃんと切り替わっているのか?現在はどのProcedureに来ているんだろうか?」と、状況が良く分からなかったのですが…これを付けておくことで、武器をしまう動作として見えるようになり、Procedureの流れを把握するのに最適な目印だと思いました!!

StackedのみでTreeを組み立てていくことにも挑戦しました!BranchごとにConditionsを考えて設定していくのが難しいですが、簡単で安定したTreeを作ることができました。Sequenceよりも軽快に流れていくのを実感しました!!フォロワーの判断がストレートでキレの良い動きになりますね!ただ…行わせたいことが増えていき、複雑なTreeになればなるほど、何らかの条件設定ミスで全く動かなくなってしまう(ボーっと立ったまま)ことが多くなったように思います。Sequenceに比べBranchをさばくテクニックが必要だという印象を受けました。技量不足もあり、StackedだけでTreeを構成するのは今の自分にとってかなり難易度が高いみたいです…(涙)
めげずに練習していこうと思います。

また、現在作っているPackageに「Flee」を入れているのですが、上位がStackedになっていると何故かFleeが機能しなくなってしまうようでした(SequenceだとOKのようです)。
単純にTreeの構造上のミスか、上位におくBranchの種類もProcedureごとに使用できるものとできないものがあるのかな…と理由を考えております。しかし…どうしてもあの「Flee」特有の逃げていく感じの軽快な動き方が好きで、このProcedureを組み込みたいと思っています。{ SPSの抜刀/納刀システムにかなり憧れと影響を受けています(笑)
それから「Hover」と「Orbit」というドラゴンに使われている謎のPackageを発見し、試しにフォロワーに搭載してみたのですが…ドラゴンっぽい動きをすると思いきや、その場に佇んでおりました…(^^;)

>今、自作AI Package Template集みたいなModをつくっている
これは…!非常に高まりますね~!!UNIさんの製作される複雑かつ独創性に富んだPackageがTemplate化したら、フォロワー達とのスカイリムでの旅がこれまで以上に楽しくなりそうです!私も攻撃的回復のPackageをTempleteにできるよう頑張ってみます。最近になって…薄々気付きはじめたのですが(今更)、元来UseMagicが不安定だったから回りくどい方法でわざわざUseWeaponに変換したのに、結局…同じようなバグに苛まれている…(゚Д゚) もう過去のコンセプトなど忘れて、こういう変な方法もアリということにしよう…と開き直っております。

Author

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

ブログ内検索

最新コメント

[09/24 ひばりのスヴェン]
[09/21 ブレトン魔術師]
[09/19 ふぇりす]
[09/15 こんばんは!]
[09/09 NONAME]