人狼変身魔法は「WerewolfChange」と「WerewolfChangeFX」の二つがあります。
「WerewolfChange」はプレイヤー専用パワーですが、最終的にはプレイヤーも「WerewolfChangeFX」を使用して変身する処理になっています。
NPCにこの魔法を使ってもらいたくて「WerewolfChangeFX」を覚えさせてみたのですが、一向に使う様子がありません。戦闘中NPCが使う魔法はある程度決まっているらしく、何かを召喚したり防御力を上げたりしてくれない魔法は対象外になるようです。
それで一度は変身をあきらめていたのですが、コメント欄にてすばらしい方法を教えていただきました(多謝)!
それは、変身魔法にオークフレッシュの効果を追加するというもの。これだけでNPCは戦闘開始とともに、自分の守りを固めるつもりでこの改造魔法を使ってくれるようになります。
使わぬなら使わせてやろうホトトギスですね。NPCが使うと分かっている魔法の効果を呼び水とする方法です。
「WerewolfChangeFX」をDuplicateして新しくSpellを作り、オークフレッシュの効果を追加しました。呼び水としての効果ですので持続時間は1秒でも構いませんが、変身中にまた同じ魔法を使われても困るため、変身時間が終わるまで効果が持続するようにします。
Equip Typeは"EitherHand"に変更。
この魔法をNPCに覚えさせることで、ウェアウルフに変身してくれるようになります。
ただしこのままでは変身しっぱなしで、元に戻ることはできません。
そこで、MagicEffectの「WerewolfChangeFX」についているScript「WerewolfTransformVisual」をコピーして、OnEffectFinishのイベントを追加したScriptに書き換えます。
同胞団Quest「C01」や、プレイヤーの人狼変身Quest「PlayerWerewolfQuest」についているScriptも参考に。幾度かテストプレイした結果も踏まえて、とりあえずこうなりました。
NPCが使う魔法を前提にしているので、元のScript「WerewolfTransformVisual」からプレイヤーの変身に関する処理を全て削除。OnAnimationEventについても削除をして、とりあえず自分の手に負えそうな単純処理に変えました。
【OnEffectStart】
変身前の自分の種族を”MyRace”というScript内変数に入れて、変身処理開始。変身中、NPCが下手に動き回らないよう、一度戦闘状態を解除(おまじない程度の効果でしかありませんが)。さらに変身中殺される場合もあったので、SetGhostで無敵にしています。変身中にタコ殴りにされて死ぬのはかっこ悪い……というより、処理的にまずい事が起こるのでやむを得ません(変身用人狼Armor着たまま死ぬ)。
変身時間は10秒から5秒に短縮。NPCは10秒も大人しくなんかしてくれませんから。
【関数TransformIfNecessary】
OnEffectStartから呼び出す関数です。ここでNPCの種族をウェアウルフに変更します。
ウェアウルフ種族が装備できるのは素手かシャウトかポーションかなので、余計なものは全てはずさせます。武器と盾についてはひとつずつはずすのが面倒だったので、装備品全てを解除する関数を使いました。変身後、裸になる演出にもなります。
また、ウェアウルフ専用の「PlayerWerewolfFaction」に加入させます。このファクションは、狼は仲間、その他人間が所属しているCrimeFactionとは敵対する関係があります。変身中、まともな人間からは化け物扱いされることになります。特に衛兵は攻撃性が高いのか、見つかるとすぐに戦闘が始まります。ちなみにプレイヤーのフォロワーにしているときは攻撃されませんでした。
【OnEffectFinish】
効果時間が切れるときに発動するイベントです。ここでMyRaceに入れておいた自分の元の種族に
戻る処理を行います。
エフェクトとサウンドを設定して、それっぽい演出も加えてみました。
ウェアウルフ変身中に死ぬこともあります。SetRace()の関数は、生きているActorにしか使えません。変身中に死んだらウェアウルフのまま、ってのも無情な感じでいいのですが、不便そうなので死んだ場合でも元に戻れるようにしました。一度生き返らせて種族を変更し、また殺すという酷いやっつけ処理ですが。
MagicEffect「WerewolfTransformFX」をDuplicateして、「自作WerewolfTransformFX」を作ります。
Scriptは「WerewolfTransformVisual」をRemove、先ほど作ったScriptをAdd。
ScriptのPropertyはこのように設定。
これで変身して元に戻れるMagicEffectができました。
再び最初に作った自作のSpellを開き、Effectsに登録されていたBeast formを自作のMagicEffectに変更します。効果時間は3分にしてみました。
ゲーム内で実際にどうなるか確認してみます。
確認用に作ったNPC夫婦(&孫)。じいちゃんは両手武器使い、ばあちゃんは魔法剣士です。
この二人に魔法を覚えさせて、テストしてみました。
ちゃんと変身して、3分経ったら戻ってくれます。ひゃっほう。
元に戻ったら裸。夫婦で変身したら、3分後に全裸のじじばばがプレイヤーの背後に立つこととなります。老いてますます自由な二人です。
反省会。
両手武器持ちのNPCは、魔法を使いにくいようです。魔法を使う手が塞がってしまうせいでしょう。武器を取り上げて片手武器だけ持たせたら、左手で魔法を使うようになってくれました。
ウェアウルフになっても戦闘AIは元のままなので、純魔法使いのような敵と距離をとりたがるタイプはまともな戦い方ができないかもしれません。
そのほかの気づいた点。
・時々もとに戻れなくなる(OnEffectFInishのSetRaceがうまく動いてない? エラーログも出ないため原因不明)
・変身直後、その場に引っかかったまま動けなくなることがある
・変身中にエリアチェンジしたら、体が透明になり首だけになったりその他描画の問題がでる(もう一度エリアチェンジするかロード画面を挟むと正常に戻る)
・元に戻ったとき裸になってない場合がある(SetRaceのようにUnequipAllの処理が飛んでなきゃいいのですが)
まだ分からないことが多いので、細かくログをとりながら地道にテストを進めていくつもりです。
次へ
1. 変身魔法プロジェクト、始動ですね!
そして、ついに変身魔法の記事が!!!キターーー!!!
各Scriptがどのような目的で記述されているかも解説されていて、とても分かりやすく参考になります。さらに進化していますね…!(驚)
>【OnEffectFinish】効果時間が切れるときに発動するイベントです――――エフェクトとサウンドを設定して、それっぽい演出も加えてみました。
この部分が特に気に入っております(>u<)b なんといっても、唸り声とともに黒い霧に包まれて自然に人間に戻っていく姿がカッコイイ!これ最高です!
>元に戻ったら裸。夫婦で変身したら、3分後に全裸のじじばばがプレイヤーの背後に立つこととなります。老いてますます自由な二人です。お爺さんの堂々たる仁王立ちカメラ目線と、後ろで顔を見合わせてる2人が(笑)
確認用NPC夫婦(&孫)は性別、年齢、装備を網羅していて、まさに変身テストのためのメンバーですね!(ドラゴンが骨になってる…強い…。)
>変身中にエリアチェンジしたら、体が透明になり首だけになったりその他描画の問題がでる(もう一度エリアチェンジするかロード画面を挟むと正常に戻る
Uniさん、このバグは…例えばスカイフォージでフォロワーの変身が始まった瞬間を見計らってジョルバスクルの中に入ったりすると、追ってきたフォロワーが首だけになっているというようなことでしょうか?私の環境で何回かこのような動作を繰り返してみましたが、追ってきたフォロワーは正常なウェアウルフに変身しております。また、変身が解除される瞬間にジョルバスクルから外に出ても、追ってきたフォロワーは正常な裸の状態になります。キナレス聖堂と広場でも試しましたが異常なしです。自分の環境では申し分ないくらい変身と解除は安定しているようです。時々、両手剣の割り込みで変身した状態で動かなくなることはありますが、本当にたまにあるといった感じです。ダンジョンなどではまだ試していないので、今度やってみます!!
同胞団の訓練mod作成と同時に、私も人狼化に関して何かの糸口となるような発見はないか…時々試しつつ過ごしていたのですが、変身解除の方法で…一瞬、あれっ?!という瞬間がありました。
先日コメントに書かせていただいたブレトン変身魔法をシャウト化していろいろな条件下でUseShoutを試しておりましたが、フォロワーは依然として沈黙したままであり、八方ふさがりの状況に陥ってしまいました…。そのため、もう一度原点に返ろう…とUniさんとのコメントのやりとりや記事を読み返していたところ、「魔法もダメで、シャウトもダメなら…祝福にしたらどうなのか?」という切り口が見えてきました。
そこで、まずSpellの祝福のところをずっと眺めていたのですが、普段プレイしていて見慣れない祝福に「crWerewolfUnarmedDamage」というものがあることに気づきました。
これがウェアウルフの何に対してどんな効果をもたらしているのかはわからなかったのですが、これと同じ条件に変えて使わせてみたら何らかの変化があるかもしれないと思い、ブレトン変身魔法の条件をType→Ability、Casting→Constant、Delivery→Self、Equip Type→Either Handに設定して、UseMagicでtargetをSelf、conditionsをGetIsRace=WerewolfBeastRaceに設定したPackageを搭載して様子を見ておりました。敵が現れたとき、フォロワーが「WerewolfTransSpell」を使って変身し、敵を片付けたら本来Packageを使用してブレトンに戻ってほしいところですが…戦闘終了後になっても相変わらず後をついて来るだけでPackageを使っている様子がありませんでした。諦めて別の検証をしようと、フォロワーを解雇して数秒後、ブレトン変身魔法の特有の青いエフェクトが遠くで微かに見えたような気がして…フォロワーの方に近寄ってみると人間に戻っていました。
その後、もう一度同じ状況にしてみようと思い、再びフォロワーを雇って敵を出現させて上記の内容を繰り返してみたのですが、変身後に戻るときにはUniさんのScriptによる戻り方で、Packageを使用している感じではありませんでした。あの時UniさんのScriptが時間経過で人間に戻してくれたのか、あるいは、自分でブレトン変身魔法を使用して戻ったのかは確認できませんでしたが…今後の検証の一助となればと思い、書かせていただきました。
もしブレトン魔法が成功していたと仮定しても、それは一度きりのものである可能性が高いです。祝福のため、魔法の効果が永久的に残存しているので一度しか使わなかったのかもしれません…。
となってくると、人狼を解除するのにブレトン変身「祝福」を使って、ブレトン変身「祝福」を解除するのに、また別の方法が必要…と入れ子構造になるのだろうか…と、頭がこんがらがってしまいました(汗)
色々なところを変更しつつ手当たり次第に試していたので、もしかしたら他の部分にも変更が加わっていて偶然の産物かもしれません(すみません、こんなテキトーなことを…)。
変身は見ているだけでもワクワクします。以前は血の気が多かった自分が控えめになり、サポート側に回ってフォロワーが戦っている姿を眺めていることが多くなりました!
これからもUniさんの連載をとても楽しみにしております!
Re:変身魔法プロジェクト、始動ですね!
それが分かって少しほっとしました。私の環境は、もしかしたら負荷が高いのかもしれませんね。
実は「WerewolfTransSpell」を人に向けて撃てるように改造して、町中の人をウェアウルフに変えて遊んでいたときに変身と解除の不安定さに気づいたので……。いえ、そんな無茶してたらおかしくなるのは当然なのかもしれませんが(汗) できるかぎり耐久性の高いModを作りたいと、CTD上等の大暴れテストプレイをやるときが時々あります。
>魔法もダメで、シャウトもダメなら…祝福にしたらどうなのか?
祝福にしてしまうって、すばらしいアイデアです!
ずっとシャウトやパワーをいじっては、使ってくれない、効果が発現しないと心が折れそうになってました。とりあえずScriptで強制的に元に戻る魔法を使わせてはみたんですが、これはこれでちょっと手間がかかる方法なので、やっぱり悩むはめに。
ひとりであれこれ考えていたらAbility化とか絶対考えつかなかったと思います。コメント、本当にありがとうございます。
教えていただいた方法で人間に戻る魔法をAbility化してみたところ、こちらの環境ではうまくうごきました。UseMagicで使わなくても、NPCにこの魔法を覚えさせるだけでいいようです。
ただ「Casting」を何に変えても、Abilityにするとコンスタントな効果になってしまうらしく、人狼に変身してもすぐに人間に戻されることになります。ということは、これを逆手に取ってAbilityの効果や発動条件をうまく作ることができれば、万事OK。元に戻るのにこれほどシンプルでスマートな方法はないかもしれません。「WerewolfTransSpell」の不安定な挙動も、この方法と組み合わせれば安定した結果が得られそうです。
人間に戻るAbility、うまくできるかどうかまだ分かりませんけど、早速取り組んでみようと思います。第3回の記事くらいで、実現を目指してみますね。