忍者ブログ

方向音痴のSkyrim

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

フォロワー拡張Modの自作08【AI Packageを改良】


前回作ったAI Packageですが、少し手直ししました。
「待機状態でないとき」の条件でStacked Branchを作っていたのを、「待機状態のとき」という素直なものにかえました。


「Procedure: Follow」はターゲットが隠密状態になると、Follow側も隠密をするようになっているようです。しかし「Procedure: Sandbox」が実行されているときは、プレイヤーがいくら隠密してもフォロワーは突っ立ったままになります。
あと連れ歩く人数が多くなってくると、通路を塞がれる問題も出てきます。
ついでに、Sandboxの自由行動範囲を、街中にいるときはもっと広く取りたいです。
やらせたいことが多くなると、場合によっては新しいAI Packageを作った方がいい時もあります。しかしAI Package同士の切り替えは、そんなに早くはありません。隠密行動の切り替えなどある程度機敏に反応して欲しい時は、ProcedureTreeに新しいProcedureを追加したほうがいい場合もあります。
今回はプレイヤーが隠密しているか否かでAI Packageを分けるという手もあるのですが、ちょっと複雑なProcedure Treeを作ってみたいという欲求もあるので、欲望に素直に従うことにしました。

そういったわけで、
・安全な場所専用のSandbox追加
・プレイヤーが隠密状態のときは、フォロワーも隠密してFollowのみの行動をとるようにする
・抜刀時は、プレイヤーのそばから自発的に離れるようにする
この3点の行動をProcedureTreeに追加してみます。


まずは安全な場所用のSandboxから。


新しいLocationが必要になるので、「Public Package Data」にてひとつ新規作成。
範囲1500の少し広めのLocationを設定しました。



「Procedure: Sandbox」は既存のものをCopyして使うことにします。



新しいSandboxをこの位置に追加。
「Selected Procedure」にてLocationに、先ほど作ったものを当てはめます。
安全な場所にいるので、寝るのもOKにしました。
Item ConditionsでこのSandbox実行の条件を、プレイヤーから1500以内の距離のときに限定します。



ひとつ上のSandoboxを選択。
こちらに、「居住空間にいないとき」の条件を設定します。個人的にORを使う条件判定が苦手なので、ついついこうしてしまう。ORを使うのであれば、安全な場所用SandboxをこのSandboxの上に置いて、「居住空間にいるとき」の条件をつけても同じ結果が得られます。多分ORを使う方が処理が早いんじゃないかと思います……。
町や村の外のLocationには、たいていキーワード"LocTypeHabitation"がついていて、屋内のLocationには"LocTypeDweling"がついています。一部例外もあるようですが、この二つを押さえておけばほとんどの場所はカバーできるでしょう。

これで最初の希望は叶いました。
次は隠密時専用のFollow行動です。



既存の「Procedure: Follow」をコピー&ペーストします。
Conditionsには、Run on「プレイヤー」が、ConditionFunction「隠密している」状態を条件として設定……。



……しようと思いましたが、前回同様「Public Package Data」の項目を使って条件設定することにしました。
Run onから"Package Data"、すぐ右のドロップダウンから"Player"を選びます。
ここでの"Player"は、「Public Package Data」の設定項目の名前です。紛らわしいから"Follow Target"に名前を変更してもいいかもしれません。



("Player"を"FollowTarget"に改名しました)
Flags Overrideもこんな風に、隠密中は余計な会話やリアクションはしないよう、強制的にチェックをはずすようにします。そして忘れず”Always Sneak”にチェックを入れます。
このProcedureが動いている間は、AI PackageのFlagsタブの項目がOverrideされます。灰色に暗転している部分のみ、Flagsタブでの設定が反映されます。

これで隠密行動は完成。
あとはおまけ程度ですが、抜刀を合図にプレイヤーから距離をとる行動を加えます。



プレイヤーのそばから離れさせるには、「Procedure: Flee」を使います。これはFleeFromに指定されたものからおびえて逃げる、もしくは何かにおびえながらFleeToへ逃げ込む行動らしいです。走って逃げるのでPreferSpeedの調整は特にいりません
「Public Package Data」にて"FleeRadius"というFloatタイプの項目を作成。値は300。
「Selected Procedure」の設定はこんなにしています。

・FleeFrom…避ける対象(FollowTarget)
・FreeTo…逃げ込む場所(SandboxLocation)
・UseDynamicGoalInstead…Trueのとき、FreeFromが有効、FreeToが無効になる(AlwaysTrue)
・GoalRadius…FreeToにSingleRefタイプの値が設定されていた場合の範囲指定?(FleeRadius)
・AvoidNodeRadius…説明を読解できる英語力がない……。恐らく、避けるべき対象のそばを通らないと逃げられない場合、逃走経路を決める際の、対象を忌避する最低限の距離と思われます(FleeRadius)
・FleeDist…FreeFromからこの距離だけ離れたらProcedure終了(FleeRadius)
・RideHorseIfPossible…馬に乗れたら乗る(AlwaysTrue)
・ForgetDeadThreats…死体に怯えない(AlwaysTrue)
・Quiet…Flee Dialogueに設定されたセリフ(「殺さないでくれ!」とか)を言わないかどうか(AlwaysTrue)
・CountAsIsFleeing…戦闘中の恐怖行動と同じ扱いにするか。Flee中に話しかけられるかどうかに関わるようです(AlwaysFalse)



Conditionsでは「IsWeaponMagicOut」というのを"FollowTarget"に対して使っています。武器であれ魔法であれ素手であれ、構えた状態だと1になるらしい。
他にはプレイヤーとの距離があまり開きすぎないよう、距離400以内でのみ行うようにしました。ダンジョン内で無目的な方向に逃げ出されたら危ないです。お互いに。



念のため隠密時のFleeも加えました。隠密時は馬に乗るのを禁止しています。ほかは同じ設定。




動きを軽く確認してみます。
バニラ枠のベルランドさんより若干タイミングは遅れますが、そこそこ鋭く反応してくれます。



抜刀してみます。クモの子を散らすように、とまで鮮やかとはいきませんが、距離を開けてくれます。距離300まで逃げたらFleeが終わると思うんですが、勢いあまって300以上くらいは逃げてくれているみたいです。近づけばだらだらっと逃げる(場所が狭いとワープする)ので、狭い通路でも詰まって動けなくなることはないでしょう。恐らく、多分……。
リディアさんはいつの間にかプレイヤーの馬をパクって乗っていました。私兵はPlayerFactionに入っているから、それで乗れたのかな。ただ一度乗ると、戦闘にならない限りなかなか降りてくれませんでした。

これで複数フォロワー用の自作クエストは、荒削りながらほぼ完成です。
あとはメンテナンス用のダイアログを作ってひと段落つきそう。CombatOverrideを色々試せる環境まであと一歩です。

前へ | 次へ
PR

Author

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

ブログ内検索

最新コメント

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