Fallout好き:主にFallout New Vegas

Fallout好き:主にFallout new Vegas

2013年6月23日日曜日

GECK観察:マンティスの卵嚢を撃つと小さなマンティスが飛び出す仕組み

GoodSpringsの校舎等にあるマンティスの卵(卵嚢?)。
アクティベートすると中にマンティスの卵が入ってる。つまりContainerである(GECKではアイテムを出し入れ出来るオブジェクトは全てContainer)。ただしこのContainerはちょっと変わっていて、撃つと小さいマンティスが12匹出てきて当然こっちを襲ってくる。よく初見プレイヤーにちょっと驚かれ、気持ち悪がられるけど、ちょっと面白い仕掛け。
これは校舎にあるマンティスの卵嚢
では、これはどうやっているのかと調べてみた。
このContainerの名前は「V22MantisOotheca」。Ootheca=卵嚢(らんのう)、卵鞘(らんしょう)の意味らしい。

V22MantisOotheca

Containerの中身(蛇足)

 Item ListにあるV22MantisEgg50(Leveled Item)はマンティスの卵。後ろに50とついてるのはLeveled Itemの命名ルールによるものらしく、50%の確率。ちょっとこのLeveled Itemを見てみると

このようにMantisEggが50%の確率で1つ入手出来る設定。また、Calculate for each item in countにチェックがあるので、このLeveled Itemは呼び出される度にアイテムの計算をする。
で、さっきの画面に戻るとこのLeveled Itemを3回呼び出す設定(Count=3)になっている。よって、50%の確率で1つ手に入るx3回、という計算をする。最低0個、最大3個のマンティスの卵が入っていることになる。

マンティスの卵嚢を攻撃→爆発までの解析

再度 V22MantisOotheca を見てみる。
V22MantisOotheca
「Edit Destruction Data」(Destruction=破壊)は、オブジェクトがダメージを受けた場合の破壊設定。
例えば攻撃すると爆発する車などに設定されている。これは様々のオブジェクトに設定出来、例えば
武器にも設定出来るのだが、武器では一つも設定されていないかもしれない。

で、クリック

このように破壊設定の一覧表が表示される。

ちなみにGECKのWEBサイト http://geck.bethsoft.com/index.php?title=Destructible_Object_Data

大雑把に解説すると、Health(この画面では1)がオブジェクトのHPともいうべきもので、攻撃されるとこれが減る。もちろんダメージ量によって減り方は変わる。そしてHealthの残り%量に応じて表の上から下に向かって破壊段階が進み、各段階での処理を行い、Healthが0になって破壊が終了する。

この表からどういう破壊になるかを見てみる ※いつもどおり適当解説なので信用性の微妙さに注意
(あと、この解説は前にも書いた気がしないでもないけど気にしない。気のせいかもしれないし)

Health=100の行は、具体的に何も破壊処理を行わないので必要なのかわからない。今回は気にしない。

最初にダメージを受けると、Healthが1しかないので、すぐ表の一番下のHealth=0の段階になりそうだが、そうはならない。なぜかというと、Health=99の行に「Cap Damege」にチェックがついているから、どんなに大ダメージをくらってもHealth=99の段階で一旦処理が行われる。

ではHealth=99の処理を見ていく。
「Self DPS」=50 なので、1秒毎に50のダメージをこのオブジェクトは受ける。なんでそんな自傷行為みたいないことをするかというと、例えば爆発する車の場合、ある程度ダメージを受けると煙をもくもくと上げ、Self DPSの値が1以上になる。そして毎秒ダメージを受け、そのため一定時間後に次の段階のHealthにすすみ爆発する。こういう動きのために使われる。
まあ、Healthは最初から1しかないのでSelf DPS=50という妙に大きな値になっている意味はわからないけど。あと「Destroy」にチェックが入っているので、この段階で、Destroyフラグ?が立つ。これはスクリプト中に GetDestroyed コマンドでフラグを取得でき、SetDestroyed でフラグを設定出来る。何に使うかは良く知らないが、破壊されたオブジェクトを破壊前に戻す時に使うんだろう(ゲーム中にそういう機会があるかわからないが、例えば修理などで)。
もう一つ、「Damage Stage」=1に設定される。これはGECKのWEBサイトに「0-8からの値であり、ダメージステージノードとブラストノードに対応します」と解説がある。ブラストノードは多分NIFファイル(オブジェクトの実体)に設定されてるのだと思う。ブラスト=blast=爆発。つまり、ダメージステージがここまで進んだら、この部分が吹っ飛ぶようになるとか、そんな感じじゃなかろうか・・・ブラストノードに関しては妄想レベルにしかわからない。

Health=0を見る。
Health=0ということで破壊の最終段階である。
Damage Stage=2 になり、Explosion=BloatFlyExplosion、Debris=InsectGoreBits01(5)、Replacement Model=Clutter\Ootheca3 となっている。

Explosion=BloatFlyExplosion
Explosion(爆発)=BloatFlyExplosion(ブロートフライ爆発)。車の爆発でもExplostionが設定されている。ただし、爆発の仕方は種類があり、例えば40mmグレランの爆発等がある。この場合、ブロートフライが爆発する時のものかも。ゲーム中にやってみればわかるが、ミシャッ!と白っぽい液体が飛び散り、気持ち悪い爆発の仕方をする。

Debris=InsectGoreBits01(5)
Debris(デブリ、ゴミ)=InsectGoreBits01(5)  (Insect=昆虫 Gore=血糊 Bit=小片、破片)
これは爆発時周辺に散らばすための破片の設定。この場合、マンティスの卵嚢を破壊した時の破片なので、それ用の破片が設定されているようだ。破片の数は(5)とあるので、5個。
ちなみに、これは多分Explosionと一緒に使わないと不自然な爆発になると思う(試してないけど)。ここで設定される破片は自力では吹っ飛ばず、Explosionで設定された爆発によって周囲にちらばるのだと思う。

Replacement Model=Clutter\Ootheca3
これが設定されていると、オブジェクトが設定されているオブジェクトで置き換えられる。ちなみに今回置き換えられるオブジェクトは下記の通り。



これはちょっと上から見ている。このように、最初の画像にあったマンティスの卵嚢が、散らばった状態のオブジェクトに置き換えられる。

ここまででDestructionの解説は終わり。参考までに各healthでの設定画面(ダブルクリックで表示)を載せておく。




小さいマンティスが飛び出す仕組み

マンティスの卵嚢が爆発するまでは大体わかった。次は小さいマンティスが飛び出すまでを調べる。もう一度マンティスの卵嚢を見直す。

V22MantisOotheca
マンティス発生の処理はスクリプトで行なっている。
Script=V22MantisOotheca
スクリプトを見てみる。



以下、スクリプトのコピペ
-------------------------------------------------------
scn V22MantisOothecaScript

begin OnDestructionStageChange

if GetDestructionStage == 1 || GetDestructionStage == 2
PlaceAtMe NVCrGiantMantisNymph 3 1 0
PlaceAtMe NVCrGiantMantisNymph 3 1 1
PlaceAtMe NVCrGiantMantisNymph 3 1 2
PlaceAtMe NVCrGiantMantisNymph 3 1 3
endif

end

begin OnActivate

activate

end
-------------------------------------------------------
以下で解説
※無駄にスペース取るので、行を詰めた
scn V22MantisOothecaScript

begin OnDestructionStageChange ←今回始めて知った。多分DamageStageがする度に実行。
if GetDestructionStage == 1 || GetDestructionStage == 2 ←DamageStageが1か2ならば
PlaceAtMe NVCrGiantMantisNymph 3 1 0 ←卵嚢の前、距離1に小さいマンティスを3匹配置
PlaceAtMe NVCrGiantMantisNymph 3 1 1←〃        後ろ〃
PlaceAtMe NVCrGiantMantisNymph 3 1 2←〃        左   〃
PlaceAtMe NVCrGiantMantisNymph 3 1 3←〃        右   〃
endif
end

begin OnActivate
activate  ←アクティベートされたらアクティベートの処理する
end
-------------------------------------------------------
このように、(多分)DamageStageを監視していて、それが変更された時(破壊された時)に、マンティスの卵嚢の前後左右に3匹ずつ、計12匹配置するというスクリプトになっている。

疑問なのは、DamageStageが1or2の時に12匹配置しているのだが、DamageStage1で12匹、DamageStage2で12匹、計24匹配置されそうなものなのに、なぜ12匹しか配置されないか?(自分は24匹配置されたの見たことない)。

まあ、いつかわかるかもしれない。とりあえずこんな感じで、マンティスの卵嚢を撃つと、小さなマンティスが飛び出す。

0 件のコメント:

コメントを投稿