2015/08/12 Category : プレイ日記 自作Modのテストプレイ⑥ 自作Modを作り始めてから、あと少しで完成という所まで来ていたので、前回の『ブレイズ入団編』の最中に、自作Questによって「※Quest同士の優先度によるAIの上書き」が発生する事態に直面し、正直困惑してしまいました。おそらくブレイズQuestに限らず、他のQuestにも影響を及ぼしかねない、中々手強い問題であると考えられます。 ※ブレイズに入団させたNPCが、スカイ・ヘヴン聖堂で暮らさずに、自作したAIで勝手に行動してしまう問題。 なんとなく、前々から危ない予感はあったのですが…筆者自身、Quest製作の知識が圧倒的に不足しているので、「どうか何も起こらず上手く行きますように!」という思いで、テストプレイで実際にどうなるのかを試して、観察していました。そして、案の定…不具合が生じてしまいました。この状況になってみるまでは、どういう所が良くなかったのかが全く分かりませんでした。自分はフォロワー(広義にはNPC)に、「AIを設定する際の基本ルール」というものを理解していなかったことに気が付きました。 今回はその反省を踏まえて…頭の中の情報を整理する意味も込めつつ、「AIを設定する際の注意点」と「Quest同士の優先度の調整方法」について、苦戦した部分をまとめておきたいと思います。 【戦士と武士】 ~前編~ デルフィンに「アシス達を連れ戻しに行け!」との命令を受けた道化エルフは、急いでジョルバスクルへと戻るも…一足先に彼らは「冒険Package」によって、既に消息を絶っていた。そして数日間、“配達人”のごとくスカイリム全域に渡って、野を越え…山を越え…スタミナの続く限り、駆けずり回る羽目になったのであった。 ―――遂に街道でアシス達を発見した道化エルフ。彼らは付近の円墳から出現した個体と自然発生した個体の、“2匹のドラゴン”を相手に、攻防を繰り広げていた。(旅先でも偶然、※ブレイズの使命を全うしていた姿には…驚きました!!) ※フォロワーをブレイズに入団させると、「BladesFaction」の他に、「BladesRecruitsFaction」が付与されるようです。この派閥は、“DragonFaction”と「Enemy」の関係にあるため、ドラゴン出現時に、入団以前よりも素早く反応して戦闘態勢に移行できるようになっていました。CKで確認するまで全く気づきませんでしたが…ブレイズの一員になったことで、いくつかの“見えない変化”がフォロワーに与えられているようです。 道化エルフ「あれッ…?!(いたーーー!!!)」 道化エルフ「…ハァ……探したぞ、アシス…スカイリム中を“ランダムに放浪”しやがって!本当に…お前たち(NPC)の身勝手さには、恐怖を感じざるを得ないヨ…。」 アシス「こんな所まで後を追って来たのか、なんてしつこい奴だ。見ての通り、我々は“ブレイズの役割”をきちんと果たしているぞ!…それで、何か用か?」 (とりあえず、アシス達が聖堂に戻ってくるように『説得』しなければ……) 道化エルフ「ブレイズには、栄誉と栄光!充実した活動や強力な装備!!敵に見つからない広大な隠れ家!!!全てが揃ってイル。現在は小規模だが…発展次第でひょっとすると、スカイリム史上…“最強の組織”になり得るんジャないか?…古参者の方が敬われるし、いっそのこと同胞団から早いうちに“鞍替え”を……いや、今のは言葉の綾ダ! それらを放棄してまで、“同胞団になる”というのは、どういう意味を持つんだ?(実際にはイイとこ取りをシテるだけなんだけど、汗)」 アシス「個人的には、馬鹿げた質問に2度答えなくて済むって事だと思っている。我々の存在意義も知らずに、なぜジョルバスクルにわざわざやってきたんだ?」 (シャキキキン…) 道化エルフ「アハッ…?!!」 『説得』、失敗―――。 アシス「―――これはお遊びなんかじゃない。我々はスカイリムにおける真の精神性の象徴だ。栄誉は血に、死は心に宿る。」 ハドリア「まさかあなたには…」 スレンドラ「その覚悟が無いと…?」 道化エルフ「いやいやいや×3……私の“スキンヘッド”にかけて、こんな馬鹿げたことを言うつもりは、毛頭なかった!(連れ戻しに来ただけなのに…なんか、到着早々…完全に誤解されちゃってるんですケド。油汗)……普段よりカッコ良い台詞を吐きすぎてて、全く伝わって来ないんだヨ。つまり、それは―――?」 アシス「―――富と栄光のためだ、友よ。ただそれだけだ。」 道化エルフ「ズコ~ッ…!!!(なるほどネ、さすがは同胞団の初期メンバー。実に脳筋で単純明快だ…。常に心にアルのは、同胞団。だけど、ブレイズも『掛け持ち』シテ、双方から“甘い汁を吸う”って魂胆か。そして、富と栄光の先には…念願の“サークル”の座が待っている訳ダ、納得。……って、結局いつものパターンかいッ!!)」 「じゃ、じゃあ…アシスはともかく、同胞団の新人2名!! 普段から無口で、黙ってることが多いけど…お前らは何なんだヨ? 新参者に、そこまで同胞団への思い入れがアルのか?」 スレンドラ「ブレイズと契約する以前から俺たちは、“アシス隊長に着いていく覚悟”を決めているので…それを果たしているだけだ。(リーダー追従型AI搭載)」 ハドリア「種族間の不和を越えて…」 道化エルフ「キエェ…なんとまぁ、微笑ましいコト!!(どうやら、『説得』とは別の解決法を試みる必要があるみたいだナ~……)」 【AIPackageの設定場所】 ActorにAIPackageを設定できる場所は複数あり、製作の様々な場面で利用できるというメリットがあります。一方で、利用範囲が広いことにより、影響の出そうなチェックポイントを把握・予想するのが、非常に大変だというデメリットもあります。いったん設定を組み立てた後で、構造を良く覚えておかないと…後から「NPCの今の行動は、一体どの設定場所に由来するのか?」と迷った時に、さかのぼって調べる作業がとても面倒です。(時々、製作者の自分自身でも、優先順位が良く分からなくなることがあります…汗) 製作も少し複雑化してきたので…最近はActorごとに、上から下まで“優先度順に羅列したPackageのメモ”を記録して管理しています。 AIPackageの参照順に関して理解が不十分だったため、「方向音痴のSkyrim」のUNI様に助言を求めたところ、素晴らしい解決方法を教えていただくことができました。さらに、UNI様のブログの「Combat Override作成02【ヒーラー作成】」の記事で、この問題に関連している内容を扱われていたので、そちらの記事も大変参考になりました。 <Actorに直接設定> NPCにとって、基本となる日常生活のAIPackageを指定する場所です。優先度はQuestAliasより低いようです。 <QuestAliasで設定> Actorに直接設定したAIPackageをQuestAliasで、追加・上書きをすることができます。Quest自体のPriority(優先度)の大きさによって、Priorityの値が高い別Questに、値の低いQuestのAIはどんどん上書きされていくようです。 <Scenesで設定> あるQuestのワンシーンとして、AIPackageを指定できるようです。Sceneにはかなり強力な拘束力があるらしく、低PriorityのQuestで発生したSceneは、その後に高PriorityのQuestが開始されたとしても、一度始まったSceneを終えるまで、発生したAIPackageの行動を実行し切らなければならない性質があるようです。 上図は、自作したフォロワー同士の会話のシーンです。“会話だけ”の場合、中断に対してそこまで気を配らなくても割と安全ですが…“Packageを組み込んだ”場合にはバグの危険度が一気に増すため、なるべく「プレイヤーが登場人物の誰かに話しかけるとSceneが終了する」という設定をしておくよう、心がけています。何らかの原因でPackageが進まなくなった時に、ずっとその場で動けなくなり固定されてしまう(フォロワーの場合、AIによる追従もできなくなる)ので、「Scene解除の処理」は用意しておいた方が良さそうです。 「Actorに直接設定したAI」、「ブレイズQuestのAliasが持つAI」、「自作QuestのAliasで新規に追加したAI」が、どういった優先順で実行され得るのかを、改めて確認することにしました。 【ブレイズQuestの分析】 まず、フォロワーの“ブレイズ入団とその後の行動”を司るQuestについて調べました。MQ203:「アルドゥインの壁」以降に発生するQuest:「FreeformSkyhavenTempleA」によって、ブレイズの入団と行動が制御されているようです。このQuestのPriority(優先度)は「45」でした。デフォルトのQuestには変更を加えないようにすることを“前提条件”として、具体的な解決方法を探って行きます。 「QuestAliases」でブレイズの日常を調べたところ、“3名の新人ブレイズ”は、全員が少し違ったAI構成をしていて、同じように見えて訓練内容や日常の過ごし方が異なっていました。ブレイズに入団させたAliasの順番「Blade01、02、03」によって変わるようです。デルフィンやエズバーンのAI構成の指定方法は、QuestAliasに追加されているのではなく、日常生活に関わる全てのAIが『Actor側に直接設定』されており、ConditionsでQuestStageなどを判定することで、行動が実装されているようです。彼らは登場するQuestが他のNPCに比べて多岐に渡っているため、Questの優先度によって別のQuestの行動が上書きされてしまう問題を回避するよう、日常AIはAlias側からではない形式をとって設計されていることに、気付かされました。 ブレイズにおけるNPCのAI行動の全体像が分かりづらかったので、図示化しました。色つきの部分は、「個人専用のPackage」による行動です。ガントチャートの白い部分は、「Sandbox」による行動で、スカイヘブン聖堂内全体で自由にくつろぎます。 Blade01は、「孤高の17時から男(女)」。最初に入団した“先輩ブレイズ”であり、訓練を一緒にするのはデルフィンだけ。夜型人間でもあり、夕方だけは積極的に人に接します。Blade02は、「ノーマルな人」。全てにおいて、程よい生活スケジュールです。Blade03は、「ブレイズの末っ子」。訓練を一番熱心に行い、他のブレイズと一緒にいる時間が多いです。デルフィンは、「訓練マニア」。晴れの日は8時間の訓練を行い、新人たちに鬼教官のごとく自ら戦い方を指導しています。朝昼晩の食事を抜かず、身体づくりもしっかり行う徹底ぶり。エズバーンは、「本の虫」。大半を読書に費やしています。ずっと聖堂に引きこもっていそうなイメージですが…気分転換に皆の居る屋外の訓練所に顔を出し、そこでもやはり書物を読みふけるようです。 彼らに用意されているAIPackageの行動は、同胞団のものに比べて非常に良く作りこまれていることが判明しました(少しショック!)。これらを使わないのは大変もったいないので、ブレイズQuestによる行動を上書きせず、そのまま活かす形で進めていきたいと思いました。 【ブレイズ問題の原因究明】 こちらが、追加AIを管理するために最初に作成した自作Questです。 「ブレイズ問題」が生じた際の状況を分析すると…優先度は上から、自作Questの行動(99)→ブレイズQuestの行動(45)→ActorのAI行動(0)となっていました。「全てのAI行動を優先度の高い、単一の自作Questに詰め込んでいたこと」が原因でした。通常は、雇用時の「カスタムAIの実装」のみに自作Questによる形式を採用し、Actor自体に直接AIPackageを設定するのが、安全な方法のようです。 「新規作成したNPC」は、他Questの縛りが無いので、優先度の問題に苛まれる心配が、比較的少ないです。しかし、アシスのような「既存のNPC」の場合で、変更をなるべく加えずにAIのみを改変を試みる際には…優先度を考慮した新たなQuestを作成し、Aliasを被せて自作したAIで上書きしてやらなければなりません。Questの優先度への配慮に加え、この2通りのNPCの違いを理解せずに「日常生活改善AI」の製作を進めていたことが、問題を引き起こしていたようです。折角、「漁業AI」や「索敵AI」などの“カスタムAI”用のQuestを自作したのだから、アシスの“日常生活改善AI”もそこに便乗してしまおう、と安直に追加したのが致命的なミスでした。 いただいたアドバイスを元に、自作Questを『分割する』ことにしました。非雇用時の「自作の“日常行動AI用”」のQuestと、雇用時の「自作の“カスタムAI用”」&「自作の“戦闘AI用”」のQuestといった感じです。(素晴らしいアドバイスをくださった、UNI様に感謝申し上げます!) 優先度は、ブレイズQuestが「45」なので…前者の自作した日常行動用を「46」、後者のカスタムAI用&戦闘用を「99」としました。「えっ…!? ブレイズの行動を上書きせずにそのまま使うのに、何故自作のQuestの優先度の方が高いの?」という疑問があると思います。どうしてそのように設定しようとしているのかについては、次の項目で詳しくご説明します。 【派閥に則した活動、AI行動も“掛け持ち”させる】 アシスを例にすると、ブレイズQuestよりも優先度の“低い”新たな自作Questを用意し、そのQuestAliasに“日常生活改善AI”を搭載すれば、「最初は同胞団として改善したAIで生活を送り、ブレイズに入団したらデフォルトのブレイズQuestによって、スカイ・ヘヴン聖堂で暮らし始める」という自然な流れが作り出せます。―――ただしそれはあくまで、デルフィンの誓約通りにフォロワーの人生の全てを捧げさせ、「ブレイズの活動に専念させたい」場合の話です。 ―――筆者自身の欲張りな心が…プレイキャラ「道化エルフ」により引き出され、またしても非常に“強引な考え方”に従って、フォロワーを操ろうとする構想を練ってしまいました。 もし、「同胞団」と「ブレイズ」を“Factionの肩書”だけではなく、本当の意味で『掛け持ち』させるには、どうしたら良いのだろう? そう考えていくと…結局は、最初の方法のように「自作の“日常行動用”Quest>ブレイズQuest」の優先順にしなければならないことが分かりました。同胞団をブレイズに入団させた場合、ジョルバスクルから人員が減ったり、手間をかけて作成した「冒険Package」などが無駄になってしまい、“同胞団の方の充実度が下がってしまう”ので、個人的には「どちらの活動も半々で行ってほしい!」と思っていました。つまり、最初の方法は「作成のやり方は間違っていなかったけれど、PriorityやAIを作動させる条件に配慮が足りなかった」ということが、徐々に理解できてきました。 そこで、「自作の“日常行動用”Quest(46)>デフォルトのブレイズQuest(45)」というように、わずかに「1」だけ大きな優先度を持つQuestを作成し、AIPackageの条件設定を見直しました。かなり重要な用事(優先度46より大きいQuest)がある時には、自作した方の勝手な行動を控えて、Aliasを被って優先度の高いQuestに従ってくれるはずです。 このように再設定した上で、自作Questの方で“AIのConditionsや実行日時”に『意図的な抜け道』を作りました。 例えば、自作Quest側で「ブレイズになってからは、月・火・木・金曜日に、ジョルバスクルで過ごす」というAIPackageをAliasに搭載した場合、Conditionsの抜け道を探して、AIは自ずと優先度の低いQuestへと流れて行き、「水・土・日曜日は、スカイ・ヘヴン聖堂でブレイズとしての活動をする」、といった具合に調整できます。この方法だと、「月間のある日時だけ冒険に出発させ、同胞団の拠点・ジョルバスクルにも立ち寄り、ブレイズのスカイ・ヘヴン聖堂へと帰ってくる」という、複雑な行動をも表現できます。ブレイズQuestに改変を加えず、自作Questの匙加減でどちらの行動を多めにするかを調整することも可能です!! 優先度の高低とConditionsの抜け道を利用することよって、非雇用時のフォロワーに「複数の派閥にまたがった動き方」をさせることができそうです。 一方で、既存のフォロワーQuest:「DialogueFollower」の優先度は「50」になっているので、雇用時には、自作AIによる勝手な行動は行わなくなると考えられます。そして、導入した「フォロワー拡張Mod」で雇用した場合にも、自作の“カスタムAI&戦闘AI”だけは適応させるよう、そちらの優先度は「99」とかなり高めに設定しました。非雇用時にも“戦闘AI”だけは、作動するようになっているので、プレイヤーに雇われていなければ“自作した特殊能力”を使えなくなるような心配もありません。(カスタムAIの方は雇用時のみ) 【複数のQuestで“掛け持ち”の役割分担】 実際には、下図のように“3つの自作Quest”に分割しました。 C06:「死者の栄光」以降に適応される、同胞団の“日常生活改善用”Quest(左)、“ブレイズ掛け持ち用”Quest(中央)、雇用時の“カスタムAI&戦闘AI用”Quest(右)。優先度は左から順に、「0・46・99」です。 <AI分析&挙動の確認> Questを再構築したので、フローチャートを作成しました。以下、筆者の主観がかなり混ざりますが…今回の製作で得たAI作成の経験をまとめます。 色の付いた囲いがAIPackageの親である「QuestやActorなどの設定部分」、紫色の矢印に書かれているのが「AIPackageに設定したConditions」です。個人的にAIの構築作業は、「ジェンガゲーム」に似ていると思いました。Modder視点だと、優先度の低いQuestの上に積木を積み上げるように、新規のQuestを作成していきます。Questの櫓(やぐら)が完成したら今度は、QuestもしくはAIPackageごとにConditionsを設定します。Questは「積み木」、Conditionsは「積み木の抜き方」のようなイメージを持っています。Conditionsを付けると、必ずどこかに「抜け穴」が生じます。デフォルトの場合、大抵はわざわざ「抜け穴」は用意されておらず、Questの「櫓を組み立てて」で完成するか、「櫓を壊して」終了となります。Conditionsを何もつけなかった場合、積み木(Quest)同士が隙間をがっちり埋めてしまっているので、AIは下には流れていきません。今回の場合は、意図的にConditionsを付けることで、AIは生じた紫の矢印の「抜け穴」を通って下へと落ちていきます。 今度はNPC視点で見ていきます。AIがどのように推移していくのか?…アシスの頭の中を少し覗いてみたいと思います!! “同胞団のクエストライン”終了前は、一段目のActorに設定された「初期状態のAI」で訓練などをせずに、ジョルバスクルにてダラダラ暮らします。 同胞団クエストライン完了後に、ブレイズに入団していなければ、四段目のQuestで指定してある「46」、三段目のブレイズQuestの「45」のAIは実行条件に適合しないので、二段目の「0」のAIが作動。ジョルバスクルを中心に「改善した自作AI」で訓練や冒険に出かけるようになります。 MQ203:「アルドゥインの壁」以降に、フォロワーをブレイズに入団させれば、四段目「46」の自作AIが作動して「月・火・木・金曜日には同胞団」。Conditionsの抜け穴を通って、三段目「45」のブレイズQuestのデフォルトAIで「水・土・日曜日にはブレイズ」の活動を行います。 もしかすると、プレイの仕方によってはクリアする順番が逆で、「ブレイズ入団→同胞団クエストライン完了」というパターンもあると思います。バニラの状態なら、アシスを始めとする同胞団は「クエストラインが完了しなければ雇用できない」ので安心ですが、仮に何らかのModやコンソールの処理によってNPCと親密になり、「クリアより先に雇用できる状態になり、ブレイズに入団させてしまったら?」、という可能性も想定しておきました。珍しいケースですが…ジョルバスクルにやってくる前に各地を自由に放浪している、自作・追加した「同胞団の新人」が該当するかもしれません。その場合は、同胞団クエストラインが完了するまで三段目「45」のブレイズQuestのデフォルトAIによって、スカイ・ヘヴン聖堂を拠点に生活します。同胞団クエスト完了後に四段目「46」の自作AIが適応されて、ジョルバスクルにも顔を出すようになります。自作Modのストーリー設定上、“新人たち”は「アシスが成長して、世界を冒険するようになってから出会ったメンバー」なので、「旅先で“ブレイズ”の有能な人物を、“同胞団”へスカウトしてきた」ことになり…これなら順序が逆でも、整合性を図れます。 スカイリム上で挙動を確認したところ…同胞団用(0)とブレイズ用(46)にQuestを完全に分割したので、『ブレイズのメンバー構成』にも自作AIは影響されること無く、対応することができました。例えば、「アシスはブレイズに入れず、新人たちだけを入団させた」としても、「冒険Package」での毎月恒例の旅には欠かさず3人が集合したり、「訓練Package」のために、週に何回かアシスに剣術の教えを請いにジョルバスクルまでやって来ました。新人たちは「アシス隊長、さようなら~。もっといい場所(ブレイズ)へ行く~!」と、一生会うことが無くなってしまったり…「アシスが訓練所に一人寂しく佇んでいる」といった哀れな状況にならなくて、ひと安心です。 現在テストプレイでは、アシス達3人全員をブレイズに入団させているのですが、彼らは“非雇用時の冒険の旅”の日程を終えると、一時的に“ジョルバスクル”で過ごし、曜日が変わると“スカイ・ヘヴン聖堂”に向かって歩き始めました! 二つの組織を渡り歩き、どちらの派閥にも定期的に顔を出すという…良い意味で「社交的」、悪い意味で「八方美人」な彼らの日常生活には、散々見慣れている面々のはずなのに…なぜか新鮮味を感じられました。この様子を例えるなら…Factionの“二刀流”です(^^) 【総括:Quest間の優先度によるAIの上書き】 ここまで整頓するのに、なかなか手間取ってしまいました…。自作Modで追加した新規NPCに該当しない“アシス”については特に、「UseInfo」で彼に関連するQuestを徹底的に調べたつもりでしたが、「誰がAliasになるのか固定されておらず、その時々の状況で変化するQuestによって、自作AIが上手く適応されないこともある」のだと…身を以って知りました。バニラのシステムに悪影響を与えないように、自作Modをナチュラルな形で馴染ませる作業は、本当に難しいです。Priorityを「46」にしたことで、他のQuestに影響を及ぼさないかということだけが…心配です。 「ブレイズ問題」の一通りの不具合は、無事に調整することができましたが、もしかすると…今後テストを控えているNPCの『結婚』イベント時の行動にも、こういった配慮が欠かせないかもしれません。またまた面倒なトラブルに巻き込まれるのだろうか?という予兆と、想定外のドタバタ劇を見られるかも!という期待で、今からちょっと楽しみでもあります♪ 【戦士と武士】 ~後編~ ―――ホニングブリューハチミツ醸造所――― アシス隊のメンバー(フォロワー)と道化エルフ(プレイヤー)は、今後の活動拠点や冒険に関して、互いに念入りな“スケジュールの打ち合わせ”を行った。 道化エルフ「まぁネ…どっちの役割もきちんと果たしてくれるのであれば、“盾の兄弟”としても“ブレイズの一員”としても、文句は無いヨ。だが、今後どこかへ行く時は、ちゃんとスケジュール通りの場所に……居てもらわなきゃ困るからナ!(懇願)」 道化エルフ「ああ、そうそう。次に“スカイ・ヘヴン聖堂”の門をくぐる時は、くれぐれも―――用心しろヨ、同志。エズバーンのオジキはともかく、デルフィン姐さんは…お前の自己中心的な行動に、相当おかんむりダ。“ヒゲ面が見るに堪えないから、直々に剃ってやる”と言っていた。…もちろん、良く研いだ“ブレイズソード”でネ……ケケッ♪」 ―――スカイ・ヘヴン聖堂――― (シャー…キュルキュル……) デルフィン「下地砥ぎは良好、後は仕上げのみ。ブレイズの鍛冶道具は素晴らしいわ。硬質なドラゴンの鱗さえ、切先で貫き通せるくらいの切れ味よ!…これを使う機会はまだかしらね、エズバーン?……エズバーンッッ!!!」 (ビクッ…!!) エズバーン「…す、すまない。右耳があまり聞こえなくてな……(恐怖)」 アシス「ヒエッ……(やっぱ、このまま行方をくらまそうかなー…)」 …つづく。 [0回]PR