「コンパニオンを無敵にしない」と同様に、今度はコンパニオンの手によってプレイヤーを蘇生してもらうのが目的です。
死んでしまったプレイヤーはコンパニオンの奮戦を見守って待つだけです。もしコンパニオンが敵を倒しきったら蘇生してもらえます。コンパニオンが死んでしまったら全滅となり通常通り終了です。そのときはあきらめてロードしましょう。
short bOnPlayerDead float rstTimer
begin GameMode ;■プレイヤー死亡時。いったんResurrectした上で、Controls不可にしておく。 if Player.GetDead == 1 set bOnPlayerDead to 1 Player.Resurrect 1 DisablePlayerControls endif ;■プレイヤーが死んでいて、戦闘中でなければ if bOnPlayerDead == 1 && IsInCombat == 0 ;演出上、少し間を空けておく if rstTimer < 3 set rstTimer to rstTimer + GetSecondsPassed else set rstTimer to 0 set bOnPlayerDead to 2 endif elseif bOnPlayerDead == 2 ;会話しに来させる StartConversation player, GGValForceRST elseif bOnPlayerDead == 3 set bOnPlayerDead to 0 MessageBox "あなたは手当てをしてもらい、一命を取り留めた。" ;もう一度Resurrectした上でControls可にする。 player.Resurrect 1 player.EnablePlayerControls endif
NPCを蘇生させるのとは勝手が違っていて試行錯誤しました。いくらか挙動が危ういところがあります。
プレイヤー蘇生に関してはDeath Incを参考にしました。
Death Incで行っているのは下記のような処理です。
NPC同様、単純にプレイヤーをResurrectするだけでもいちおう復活はするのですが、死体がその場に横たわったままで操作しているキャラクターは透明になる(体を持たない)という現象が起きてしまいます。ここでもう一度Resurrectすることで正常になるようなのですが、一度死体になって横たわってしまった後では、視点がその低い位置のままになってしまうようです。
なので、
上述のとおり、コンパニオンに蘇生させるといっても実は死亡後に即復活させています。なのでプレイヤーは死体ではありません。生きているキャラクターなので、その状態を利用してコンパニオンの会話対象にプレイヤーを指定することで一声かけた後に蘇生させるようにしました。
StartConversation player, GGValForceRST
会話コマンドに、会話対象のplayer、そして会話内容のトピック(GGValForceRST)を指定しています。
GGValForceRSTは新規に作成したトピックで、「しっかりして」「大丈夫?」などといった台詞を格納しています。この台詞のResult Scriptに
set GGValeria.bOnPlayerDead to 3
を指定して、会話終了のタイミングで次の処理に進むようにしてあります。
Resurrect後に起きる大きな問題としては、全てのActiveな魔法効果が解除される現象があります。アクセサリなどの装備品、種族・星座ボーナスなど全てがリセットされてしまいます。
装備品は一度外して装備し直せば大丈夫です。ボーナスについてはCharacter Generate Amuletなどを使って種族などを指定しなおせば適用されるようです。
Resurrectコマンド実行後には対象キャラの位置がずれてしまうようです。大抵はちょっと移動するだけで問題無いのですが、下手すると建物にめりこんだり、異常なときには高く吹き飛んだり、別エリアまで飛ばされたりします。
このへんは仕様なのか、対策があるのか良く分かりません。
まあ今回の蘇生処理自体はあくまでおまけであって、もともと死んだらリセットなわけで、ダメで元々くらいの気持ちで使ってください。
どういう条件で起こるのか良く分かってないのですが、歩いている途中でいきなり体が死体化してその場に倒れてしまうことがありました。視点や動作は通常のままで、ちょうど幽体離脱したかのような現象です。
コンパニオン会話のその他メニューに「強制Resurrect」を設けてあります。これでもう一度Resurrectをかけてもらうと直るかもしれません。