部位破壊
スパイダーとか警官って特殊な条件付きで良いから頭だけでも部位破壊出来る様にならんかな?そりゃあいつ等が這いずりだしたら難易度下がるってのは解るけどさ、なんか戦っても一撃必殺が無いからスパイダーとか地味にタフだし結構鬱陶しいんだよな -- 2016-10-23 (日) 21:47:37
自分でentityclass.xml弄ればできますよ。ある部分をコメントアウトするだけですけど。 -- 2016-10-23 (日) 23:23:32
各ゾンビの部位破壊は、いじる側からするとかなり面倒くさい仕様になっているため、ここでついでに説明しておこうと思う。部位破壊には厳密に言うと2種類あり、一つはナイフなどに負荷されている問答無用の確率部位破壊、もう一つはダメージ蓄積によって起きる確率部位破壊である。
まず前者から説明していく。とりあえずitems.xml、Hunting Knife(huntingKnife)のAttributesの一部を持ってきた。
<property name="DismembermentBaseChance" value="0,0.1"/>
<property name="DismembermentBonus" value="0,0.00036"/>
部位破壊が起こる場所に攻撃した場合、今までどれだけダメージを与えていようがいまいが、DismenbermentBaseChanceの確率も考慮されて部位破壊が起こる。今回の場合は品質300で5%、品質600で10%ということになる。
・・・・。まあここまでは統計を取っても、どうやらそれらしいということが分かるのだが、下の方のBonus値が影響を与えるとわけのわからないことになる。DismembermentBonusについてとりあえず分かっていることは、これが増えると部位破壊率が格段に上がるということ。それだけ。これを不用意に増やすと本当にわけのわからない確率で(0.01でほぼ100%になったりね)部位破壊が起こるので、部位破壊のバランスを重視したMODの場合はそもそも使わないこともある。
また、下のコードでも出てくるが、ゾンビの各部位にも確率で部位破壊を設定することができるので、特徴として腕がぼろぼろのゾンビや首が取れかかってるゾンビというのも作ることができる。
続いて後者。こちらは各ゾンビのデータとしてentityclasses.xmlに記述されている。とりあえず参考に、全てのゾンビのスーパークラスになっているzombie01の一部を持ってきた。
<property name="MaxHealth" value="150" />
<property name="HeadDismemberBaseChance" value="0"/>
<property name="HeadDismemberBonusChance" value="0.07"/>
<property name="HeadDismemberThreshold" value="0.25"/>
各nameの最初についているHeadの部分は部位指定なので、Head以外の部位は読み替えてほしい。ゾンビの部位破壊率は、その部位に蓄積されたダメージで変わる。確率が変わるのは、蓄積ダメージが MaxHealth x DismembermentThreshold (部位破壊しきい値)を超えた時であり、超えるまではDismembermentBaseChance、超えてからはDismembermentBonusChanceになる。
zombie01の場合は、頭部に38ダメージ与えるまでは0%、与えてからは7%の確率で頭部破壊が起こることになる。上の計算のように、体力が多いゾンビはそれだけダメージを与えないと部位破壊は発生しない。
そして、問題の警官とスパイダーゾンビだが、spiderzombieの場合はzombie01をextendsしつつ、以下のように記述されている。同じpropertyが複数記述された場合、後に書かれたものが有効になることに意識して読んでほしい。
<property name="HeadDismemberThreshold" value="0"/>
<property name="LowerLegDismemberThreshold" value="0"/>
<property name="UpperLegDismemberThreshold" value="0"/>
<property name="LowerArmDismemberThreshold" value="0"/>
<property name="UpperArmDismemberThreshold" value="0"/>
なんでこれで部位破壊が起きないのか分からない方もいるはずなので、7 days to dieのXMLでよく使われる、0の扱いについて触れておこうと思う。0がそのままの意味で解釈されたとき、他のパラメータが全くの意味を持たなくなる場合、それは無限大の意味で使われていることがある。
今回も、全ての部位の部位破壊しきい値が無限大になると解釈するので、どれだけダメージを受けたとしてもDismmbermentBaseChanceで部位破壊率が計算されて、0%になる。そのため、こいつらをコメントアウトするか全て消してやることで、通常ゾンビ同様に部位破壊が起きるようになる。
余談
部位破壊が起きなくなるからといって、そのダメージがゾンビ本体に与えられるわけではない。そのため、腕や足への攻撃は全くの無意味になる。やけにスパイダーゾンビが堅いと思われるのはHPの違いだけではなく、この辺の部位に攻撃が吸われているからかもしれない。
Alpha15