忍者ブログ

方向音痴のSkyrim

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

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

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

フォロワー拡張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

コメント

※スパム対策のため、コメント内やその他の項目に「http://」や「https://」があると投稿できません。全角で入れていただくか、URLであることを明記して以降のアドレスのみ入れていただくかでお願いします。 For stopping spam comments, this form doesn't accept the following words, "http://" and "https://".

Author

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

ブログ内検索