第4回で製作した同胞団専用Perkですが、Abilityのためか負荷が大きかったようです。そこで、今回は「一日に一度使えるパワー」をAbilityやScriptを用いずに再現しつつ、処理の重さを軽減する方法について再検討してみました。
やはり、同胞団が使用する能力なので…呪文や魔法を使用している印象を持たせずに、フォロワーに使わせることを前提に作成を進めていきます。
【無類の短剣好き】 vol.4~ダンマーの覚醒~前編
―――リーチの主要都市、マルカルス。
ヴィ「ここはリーチで最も栄えている場所だな!今日は自由行動にしよう。皆、羽を伸ばしてくれ。…あ、アシスとドヴァキン達。君たち同胞団は、夜になったら“例の待ち合わせ場所”へ集合だ。」
アシ「奴は、本当に現れるのか…?」
とある廃屋。夜の暗闇に紛れ集合する人影が、五つ―――
(バサッ…)
同胞団「デサイプル…!!」 弟子「久しぶりだな、諸君!」
約4か月ぶりの再登場!―――マダナックの弟子。
弟子「遂に手に入れたのか!それが伝説の…!!赤鷲の剣か!!!極めて禍々しいマジカを放っているな。」
ヴィ「お前の“同胞”となるべく争わずに回収するのは、大変だったぞ。こちらは危害を加えるつもりは無くても、あちらは殺す気で向かってくるのだからな…。それだけ珍重されていた宝刀だ。」
弟子「同胞ではあるが、彼らと我々の“真の目的”には相違がある。再会して早々…水を差すようで悪いが、君たちはその剣が本当に…“この世にたった一つだけ実在する本物”だと思うか?」
ヴィ「えっ…!?何を言っているんだ…一体?(汗)」
弟子「その後、調査を進めて分かったことだが…古くから受け継がれてきたのは、“剣の製造法”である可能性が高い。一部のフォースウォーンは、王から“赤鷲の憤怒”を作り出す方法を託されたんだ。たとえ“何者か”に剣を奪われることがあっても、再び王が力を取り戻せるように…。時が経てば、彼らはまた新しいものを『※リスポーン』するだろう…」
※赤鷲の憤怒は、何故かリスポーンするバグがあります。
ヴィ「まっ、まさか、贋作だったのか?…俺たちの苦労は、水の泡なのか?本物は別に存在しているとでも?!(ガクッ…)」
弟子「フハハ、本当にこの世界は…謎だらけだな。がっかりするのはまだ早いぞ…!君たちは、製法を知る者の手によって複製された“レプリカの一つ”を手に入れることができたんだ。もっとも現在、剣を鍛造できる鍛冶師の数も限られている。その剣は希少ではあるが、まだ完全な状態ではないようだ…。伝承によれば、剣のさらなる魔力を開放できる何らかの方法があり、『赤鷲が実際に使用していた時の状態』にすることができるという。それが分かれば、リーチを再び我らの手に取り戻すための、大きな力になるのだが…。」
アシ「この名剣は一本だけじゃないだと…!?是非、二本手に入れよう!!」
弟子「欲が深すぎるぞ…アシス。」
アシ「ハァ?!…何をほざいている、奇術師!俺はこの剣を使いこなし、鉱山で賊に襲われたヴィルカスの危機を救ったんだぞ!!」
弟子「既に君は…剣の虜になっていて、手放せなくなっているんじゃないか?」
アシ「(そんなわけ…!!?…えあ゛ッ?インベントリから捨てられん!地面に置く事すらできん!!これが“赤鷲”の呪いかァッ?!魂縛とでもいうのかァァッ…!!)」
弟子「戦士というのは、脳まで筋肉に浸食されていて…付呪についてあまり良く考えずに魔法の武器を使用している者が多いようだ。魔法の武器を二本扱うにはより多くの魂を必要とする。また、強大な魔力の武器ほど魂の消費が激しくなる…すると、次にどうなると思う?」
ドヴァ男「無くなった魔力を補充すればいい。」
弟子「君の言うとおりだ、ドヴァキン。“コレ”が欠かせない。魔力の込められた武器を持つ者は、常に新しい魂を欲するようになる。魂が無くなると、別の魂を集めるために無益な戦いを繰り返す。そうして気付かぬうちに、やがて立場は逆転する…。武器は持つ者の魂を支配し、使用者は魂を集めるための道具に成り下がる。強大な付呪を使いこなすには、相応の精神力が求められるのだ。」
アシ「武器に支配されるだと?…はん!馬鹿な!!俺に限ってそのようなことは…」
(回想)~フィンの渓谷鉱山での対シルバーブラッド戦~
ヴィ「いや、あの時のお前は明らかに様子がおかしかった。殺すことは無い相手だったとしても…お前の方が膝を着くのが遅かったら、亡き者にしていただろう。―――剣の魔力に呑まれていたな。今後の使用は、控えるべきだ…」
アシ「ぐぅ…!!(あの剣さえあれば…俺は最強になれるのに…)」
弟子「アシス、魔法の武器に頼らずに…“自分自身の魔力”を活かすことを考えてみてはどうだ?」
アシ「…何だって?俺は魔法なんか使えないぞ!!」
弟子「同胞団ではタブーだったと思うが、君たちダンマーは生まれながらにして、憤怒の力を身にまとう
『種族の能力』を持っている。その力は、魔法ではないが…魔術師が使用する『炎のマント』に系統が類似する。」
ヴィ「以前に何度か見たことがある。窮地に陥った時に、能力が発動していた。」
(回想~赤鷲要塞での対フォースウォーン戦~)
アシ「あの力は…戦いで“傷を負って憤怒が沸き上がった時”にだけ、使える能力だ。俺自身もまだ制御できていない…。さらに、全身に炎を纏うのは己の消耗が激しい。魔法の武器のように…いつでも発動できる力を持つのとは、わけが違う。」
ドヴァ女「二刀流の持ち替えも上手くいった。きっと、何か良い方法があるはずよ。」
(ボボッ…グワッ!!!)
弟子「いいかアシス…魔術師でない者でも“魔法鍛練”を行うことは無意味じゃない。生命は多かれ少なかれ誰しもマジカを持っている。鍛練や祝福によって各々のスキルをどう引き出しているかが異なるだけだ。…少し基本を教えてやろう。最も初歩的な魔法として『火炎』がある。これは、全身に纏うマント魔法とは違い、左右の手にのみマジカを集中させるため、消耗が少なく―――」
アシスはマダナックの弟子に“マジカを制御する方法”を半ば強引に、たたき込まれた。
…後編へつづく。
【パフォーマンス低下の原因】
以前に『祝福(Ability)』は処理に負荷がかかりやすいということを知った時、具体的にどんな悪影響が出るのかが良く理解できませんでした。祝福の発動Scriptを搭載した、アシスの同胞団専用Perkを製作して以降、テストプレイをしてきましたが…このAbilityを持たせた時とそうでない時とで比較すると、FPSなどの指標以前の問題があり、体感的にも分かってしまうほど処理が重たくなる感じがありました。
Scriptに関する知識は相変わらずほとんど持ち合わせていなかったため、元にした「死の回避」のScriptのどのコードが処理の低下に直結しているのかは分かりませんでした。
しかし、MfgConsoleでActorの情報を眺めていると…あることに気が付きました。これまでは、フォロワーのヘルス、マジカ、スタミナ、表情などの情報を得る項目しか見ていなかったのですが、『ActiveEffect』という項目に目が留まりました。
ActorはSpellを保有している(覚えている)状態でも、常に効果(Effect)が発動しているとは限らないようです。例えばTypeが「特殊能力」になっているものは、常時発動した状態になっていましたが、Typeが「呪文」になっているものは、呪文を装備し、キャストして初めて効果が現れます。(当然と言えますが…)
先人の憤怒Perkを搭載したアシスのActor情報です。
オリジナルPerkの構造の詳細は、
第4回の記事にまとめてあります。省略すると…炎ダメージ効果(Effect)→マント効果(Effect)→先人の憤怒のマント呪文(Spell)→先人の憤怒発動エフェクト(Script搭載Effect)→先人の憤怒・祝福(Ability)→先人の憤怒(Perk)の順に作成・指定した構造です。
※改めて振り返ってみると…フォロワーに搭載する場合は、Ability…いや、むしろSpellに留めておいても充分であり、Perkにする必要は無かったかもしれません…(汗)個人的にPerkの可能性を探っていた時期であり、ActorのSpell欄に呪文を追加しないという掟の元、製作していたので…当時はこういう形に落ち着いたのだと思います。
少し脱線しましたが…Actor情報について分析してみると、アシスには先人の憤怒(Perk)を保有させている=先人の憤怒・祝福(Ability)を受けている状態です。そして現在、『Active』になっているEffectは、自作した「先人の憤怒発動エフェクト」とダンマー種族の「炎耐性」でした。
Abilityは「保有した段階で、MagicEffectが常に発動した状態になる」ようです。生じる問題として、一度に多数のMagicEffectが発動すると…その分、処理が多くなり、パフォーマンスが低下することが挙げられます。顕著な例では、ドラゴンとの対決に勝利した時、ドラゴンが骨になっていく多数のEffectとドラゴンボーンにソウルが吸収されていくEffectが同時に発動します。一度に多数のEffectが飛び交い、処理が一気に重くなる印象があります。
以上を踏まえると…上記のような条件付き祝福(Ability)には、効果を発揮する必要のない時にもMagicEffectが常時Activeになってしまっている問題がありました。ダンマーの「炎耐性」は常に持っていても意味のあるEffectですが、「先人の憤怒」は一日に一度しか使えないパワーであり、明らかに使用される頻度も低い能力です。にもかかわらず、両者は一つのEffectとして常時Activeな扱いになっているのです。後者はいわば、Effectの無駄遣いのような感じになってしまっています。処理をできるだけ軽くするにはActiveになるEffectを必要でない時はOFFにして、節約しなければ…と反省しました。
【ActiveとInactive】
内部処理的な知識は、自分はほとんど理解できておりませんが…常時Activeな状態で無ければ、もしかすると処理の負担が無くなる…多少軽減されてくれるといいなぁ…という願望から、祝福(Ability)のON/OFFの切り替えについても考えてみました。
通常ならば…祝福としてSpellを保有した瞬間から、Spellの中にあるMagicEffectがActiveになるようですが、SpellでConditionsを指定してある場合には、違いが出るようです。
こちらは、バニラのデータに存在する「適切な装備(闇の一党)」です。
PerkEntriesで「DBFullSet」というAbility(Spell)が指定されています。EntryPointを使用していないので、Perk側からは発動の条件を設定することは出来ません。では、Perkを保有する対象が“適切な装備”を身に着けているかをどのように確認しているのだろう?という疑問が生じました。…その答えはAbility側にありました。
ちなみに…闇の一党のメンバーは保有しておらず、意外なことに「Player」だけが取得している珍しいPerkです。盗賊ギルドの装備にも同様のPerkが存在しています。
※Perkについて最近分かったことですが…PerkはSpellとは違い、何らかの自作のQuestのAliasに指定して付与する項目欄が無いため、Actorの項目から直接指定しなければならないようです。
Perkに指定されていたAbility「DBFullSet」。
Abilityの効果を決定している「EnchFortifyArmorRatingSelf」という項目を開いてみると、
Conditionsが設定されており、「WornApparelHasKeywordCount」の値が「4」になっていました。おそらくこのFunctionは、「Targetの着用している防具の持つキーワード数」を数えていると考えられます。Keywordを見ると、「ArmorDarkBrotherhood」になっているので、4か所にKeywordが付いた防具を着用していなければ、このEffectはONにならないという意味だと解釈しています。
※「ArmorDarkBrotherhood」のKeywordをUseInfoで調べたところ、バニラのデータに該当するキーワードを持つ防具は、「頭部・腕・胴・足」のスロットに装着できるものしか存在していないため、こういった設定になっているようです。本当は「さらに特別なキーワードを用意」するのが適切なのかもしれません。このキーワードを付けた『暗殺者の指輪』などを自作・追加して着用した場合は、自分がフル装備をしているつもりでも、4+1=5となり、防御値上昇効果の適応外になってしまったり、逆にどれか一つ装備が不足していても指輪を一緒に着用すれば、ちゃんと効果が出たりするのかもしれません。(フードで顔を隠したくないけれど、恩恵を受けたい時などは良いかも…)
またまた、脱線してしまいましたが…Perk「適切な装備(闇の一党)」を保有していると、Actor情報は以下のようになります。
Perk「適切な装備(闇の一党)」の核は、「暗殺者の軽装鎧フルセット」という祝福(Ability)であり、そのSpellの中に「防御値上昇」のMagicEffectを含んでいる…という構造になっています。名称がそれぞれ使い分けられていて、大変ややこしいです。
ポインタで示した部分に注目すると、「防御値上昇」の効果は
『Inactive』になっていました。勿論、今の状態のアシスは…いつもの皮の鎧を着ていて、「暗殺者の防具」を4か所のスロットに身に着けていないので、「暗殺者の軽装鎧フルセット」の祝福はOFF=Inactiveになっており、防御値は上昇していません。
次に、暗殺者の防具一式を着てもらいました。
Activeの欄が、かなり賑やかになってきました!「バックスタブ」、「弓術上昇」、「毒耐性」や「消音」などは、暗殺者の防具の優れた付呪効果です。そして、Inactiveの欄に注目すると、先程あった「防御値上昇」がActiveに移動したことが分かります。
保有した瞬間から、常に効果を発揮する「Ability」ですが、その特権が仇となることもあります。効果が出てほしくない時にはどのようにしたら良いのか?前々から疑問だったのですが…
Spell側で条件を指定することで、闇雲な発動を抑え、コントロールできるようです。条件付きの祝福(Ability)を作成する際は、この仕組みのように…ConditionsをSpellに設定し、ActiveとInactiveできちんと効果の適応を切り替える。そして、効果を発揮したくない場面で出てしまっていないかを確認することが大事だと思いました。
【パワーの実装方法の代替案】
専用Perkの設定の見直しも図りましたが、Effectに搭載しているScriptの処理が原因の可能性もあり、Inactiveだからといって負担が軽減されるという確証は無いので…いっそのことPerkとして搭載することを止め、新たな方法を考えてみることにしました。
実装に際して参考にさせていただいたのは、
方向音痴のSkyrimのUNI様の記事
「CombatOverride作成05」です。CombatOverridePackageを用いて、「フォロワーに任意の条件の時に特別な魔法を使わせる方法」について、大変貴重な情報が記載されています。時々、スカイリムの作業記録を付けている方のブログ探しにネットを放浪しているのですが…CombatOverrideやAIPackageに関して研究されている方、製作の記録を残してくださっている方は、“Japan”にはかなり少ない現状を感じます。(キャラメイク分野では世界水準を遥かに上回り、文明を凌駕する、誇り高きJapan…)。UNI様のブログには、フォロワーやAIを自作する時に、ファル粕は何もできなかった初心者の頃からお世話になり、度々訪問させていただいております。
さて、NPCに使用できるタイプのSpellを覚えさせただけでは、少し厄介な問題が生じることがあります。マジカに余裕がある限りは…強力な魔法から使用する傾向があるため、手加減を知らずに勝手にバンバン放ってしまったり、戦闘開始早々にマジカ切れを起こしやすくなったりしてしまいます。特定の魔法の使用を制限したい!ある瞬間にだけ特別な魔法を使用させたい!そんな時…
『必殺技』を実装するのに、OverridePackageによるカスタムAIが非常に適した方法なのです!!
アシスの先人の憤怒Perkを製作したときに、
「一日に一度しか使用できないパワー」のようにしたいと考えていましたが、その後、思いがけず
「盾を持つフォロワーの二刀流化」の製作を開始し、カスタムAIを持たせることにしたので…これは絶好の機会!OverrideListに
『専用パワーPackage』を追加して、Perkの代わりにします。
まず、Abilityになっていた自作の「先人の憤怒」をシャウトに作り変えました。(魔法の説明が長すぎて、見切れてしまっていますが…汗)
あとは、作成したシャウトをある条件の時にキャストさせるOverridePackageを用意し、Listに追加するだけです。
ここで重要なのは、「一日に一度しか使用できない」という制約を設けるために、PackageのFlagsにある
『OncePerDay』のチェックボックスを☑しておくことです。
発動のConditions。「自分の体力が半分以下になる」という条件が主軸です。あとは、念のため「術者がシャウトの効果を既に受けていない事」と、パワーの使い時を見誤らないよう「敵が飛行していない時」という条件を加えました。
結果は…素晴らしいものでした!!発動のタイミングをConditionsやProcedureTreeで制御できる上、常時発動するAbility版のような処理の負担も減りました。
今後は…Perk版は「傷を負った時に生じる制御不能のパワー」、Package版は「自ら咆哮して発動する制御可能のパワー」を表現するのに使い分けようと思います。
【無類の短剣好き】 vol.4~ダンマーの覚醒~後編
アシ「発火!!!(メラメラ!)…これはっ!?以前と違って、自分のタイミングで出せるようになってきた…」
弟子「だいぶ安定して来たな!炎の流れを把握する感覚は…さすがダンマーだ、上達が早い。後は戦闘の経験によって、威力や持続性を高めていけば良い。」
アシ「お前の事は、実を言うと…得体の知れない魔術師として、信用していなかった。(…ファルカスは案外、人を見る目があるのかもな)誤解があったようだ…改めて礼を言う。」
弟子「気にするな、ダンマー!…私は人を疑うことも、人に疑われることにも慣れている。」
弟子「―――ところで…以前に赤鷲関連の調査で、遺跡を放浪していた時に不思議な場所を発見したんだ。“反逆者の積み石”という墓だった…。何もない洞窟だったんだが、気になる点が一つ。遺跡の中心にある祭壇から、付呪器と同じ魔力を増幅させる反応を感じた。あの場所には何か秘密が眠っているかもしれないぞ!」
ヴィ「貴重な情報に感謝する。早速、明日には支度をして向かおう!ファルカスに宜しく伝えてくれ!!」
弟子「実験に目途が付き次第、ジョルバスクルに帰還する。その時の我々は、同胞団にかつてない有益な成果を持ち帰ることになるだろう…それでは、また!」
(ヴォンッ!!……スーッ…) 同胞団「!!?…消えたっ?」
(君たちは運よく“赤鷲の憤怒”を手にすることができた。現世に赤鷲が転生していない事実を鑑みると、おそらく本物の行方はまだ誰も知らない。旅の無事と遺跡での幸運を祈っている。)
…つづく。