editlog - 投稿時の差分 (201401)

editlog - 投稿時の差分 (201401)


ページ名 開発資料/コンパニオン改造手引/蘇生機能追加 (閲覧)
投稿者ID WebMaster
投稿日 2014-01-12 (Sun) 17:53:53
差分情報 [ 差分 | 現在との差分 | ソース ]
投稿時変更行 追加:2, 削除:2

*ねらい [#y2c8e105]
「コンパニオンを無敵にしない」と同様に、今度はコンパニオンの手によってプレイヤーを蘇生してもらうのが目的です。

*流れ [#xc446a3a]

-プレイヤー死亡
-コンパニオンが戦闘状態でない(敵をクリアにしている)
-プレイヤーに会話しに来た後のタイミングで蘇生処理

死んでしまったプレイヤーはコンパニオンの奮戦を見守って待つだけです。もしコンパニオンが敵を倒しきったら蘇生してもらえます。コンパニオンが死んでしまったら全滅となり通常通り終了です。そのときはあきらめてロードしましょう。

#ref(GG_CJE_append01.jpg,nolink)

*スクリプト [#id098d34]

 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

*解説 [#l2b66e3a]

**NPC蘇生とプレイヤー蘇生の違い [#o418b08c]

NPCを蘇生させるのとは勝手が違っていて試行錯誤しました。いくらか挙動が危ういところがあります。
プレイヤー蘇生に関しては[[Death Inc>http://www.tessource.net/files/file.php?id=2183]]を参考にしました。
プレイヤー蘇生に関しては[[Death Inc>NexusOblivion:2183]]を参考にしました。
Death Incで行っているのは下記のような処理です。

-毎フレーム、プレイヤーの生死を確認
-プレイヤーの死を検出したら即Resurrectしておく。さらにDisablePlayerControlsにすることで、死んでいるような扱いにする。
-死神の演出を絡めた後に、もう一度Resurrect。さらにEnablePlayerControlsで動けるようにする。

NPC同様、単純にプレイヤーをResurrectするだけでもいちおう復活はするのですが、死体がその場に横たわったままで操作しているキャラクターは透明になる(体を持たない)という現象が起きてしまいます。ここでもう一度Resurrectすることで正常になるようなのですが、一度死体になって横たわってしまった後では、視点がその低い位置のままになってしまうようです。

なので、
-一度目のResurrect→視点を正常な位置に留めておく。
-二度目のResurrect→本番の復活
という処理になっているのではないかと思います。

**会話後に蘇生処理 [#r2b8ff09]

上述のとおり、コンパニオンに蘇生させるといっても実は死亡後に即復活させています。なのでプレイヤーは死体ではありません。生きているキャラクターなので、その状態を利用してコンパニオンの会話対象にプレイヤーを指定することで一声かけた後に蘇生させるようにしました。

 StartConversation player, GGValForceRST

会話コマンドに、会話対象のplayer、そして会話内容のトピック(GGValForceRST)を指定しています。

GGValForceRSTは新規に作成したトピックで、「しっかりして」「大丈夫?」などといった台詞を格納しています。この台詞のResult Scriptに

 set GGValeria.bOnPlayerDead to 3
を指定して、会話終了のタイミングで次の処理に進むようにしてあります。

*既知の問題 [#ea082fa6]

**魔法効果が解除されてしまう問題 [#xb2a516e]

***現象: [#u525d176]
Resurrect後に起きる大きな問題としては、全てのActiveな魔法効果が解除される現象があります。アクセサリなどの装備品、種族・星座ボーナスなど全てがリセットされてしまいます。
***対策: [#n5f6a402]
装備品は一度外して装備し直せば大丈夫です。ボーナスについては[[Character Generate Amulet>http://www.tessource.net/files/file.php?id=2072]]などを使って種族などを指定しなおせば適用されるようです。
装備品は一度外して装備し直せば大丈夫です。ボーナスについては[[Character Generate Amulet>NexusOblivion:2072]]などを使って種族などを指定しなおせば適用されるようです。

**Resurrectのキャラ飛び問題 [#ze9854a8]

***現象: [#cc2f73ae]
Resurrectコマンド実行後には対象キャラの位置がずれてしまうようです。大抵はちょっと移動するだけで問題無いのですが、下手すると建物にめりこんだり、異常なときには高く吹き飛んだり、別エリアまで飛ばされたりします。

***対策: [#zfba439d]
このへんは仕様なのか、対策があるのか良く分かりません。
まあ今回の蘇生処理自体はあくまでおまけであって、もともと死んだらリセットなわけで、ダメで元々くらいの気持ちで使ってください。

**Resurrectしたのにまた倒れる [#y56c69f5]

***現象: [#d23d04f5]
どういう条件で起こるのか良く分かってないのですが、歩いている途中でいきなり体が死体化してその場に倒れてしまうことがありました。視点や動作は通常のままで、ちょうど幽体離脱したかのような現象です。

***対策: [#da62d181]
コンパニオン会話のその他メニューに「強制Resurrect」を設けてあります。これでもう一度Resurrectをかけてもらうと直るかもしれません。



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS