2015年12月29日火曜日

[Modding]xml解析:conditions


本稿ではMOD作成の前提として、xmlに書かれた情報を解析していきます。

今回はあらゆる状態・フラグを設定しているconditionsテーブルです。
ほぼすべての行程に絡んでくる要素なので、うまく使えるようになりましょう。

※多分にネタバレを含みます。ご注意ください。



サンプルデータ

データの参照元はconditions.xmlです。
今回はpoisonedの2段階目がサンプルです。
<table name="conditions">
    <column name="id">78</column>
    <column name="strName">Poisoned 2</column>
    <column name="strDesc">&lt;us&gt; has poison stage 2.</column>
    <column name="aFieldNames">m_fImmuneLeft,m_fImmuneRestoreRate</column>
    <column name="aModifiers">-0.01,-0.02</column>
    <column name="aEffects"></column>
    <column name="bFatal">0</column>
    <column name="vIDNext">79,65,608</column>
    <column name="fDuration">24</column>
    <column name="bPermanent">0</column>
    <column name="vChanceNext">0.7</column>
    <column name="bStackable">0</column>
    <column name="bDisplay">1</column>
    <column name="bDisplayOther">0</column>
    <column name="bDisplayGameOver">1</column>
    <column name="nColor">1</column>
    <column name="bResetTimer">1</column>
    <column name="bRemoveAll">0</column>
    <column name="bRemovePostCombat">0</column>
    <column name="nTransferRange">-1</column>
    <column name="aThresholds"></column>
</table>
column解析

こちらのConditions Infoにも補足説明があります。
解読・翻訳する形で説明していきます。

strName定義名です。
strDescconditionの説明文で、死亡時のログにも(一部)表示されます。

aFieldNamesはそのconditionで変化を与えるパラメータで、
aModifires具体的なパラメータの変化量です。
この2つはセットで扱われるため、並びには十分注意してください。

aEffectsパラメータ変化以外に設定する効果で、
指定したconditionへの"耐性"を与えるSetImmunityや、
conditionを付加したり除去したり出来るChainCondition
アイテムを生成するAddItemGroundなど、便利な機能が色々使えるようです。

bFatal"1"を指定すると、そのconditionが付加された時点で死亡してしまいます。
encounterでの死亡などに使われる要素です。
一部の"死因"となるcondition以外では"0"を指定してください。

vIDNextは、condition消失時に派生するconditionのIDです。
サンプルでは、poisonの次のステージとしての"79(Poisoned 3)"と、
進行時に発症する"65(Diarrhea)""608(Severe Abdominal Pain)"が指定されています。

fDurationそのconditionが持続する時間(ターン数)です。
設定したターン数が経過するとconditionは消失します。
"0"が指定されていると、能動的に除去されるまで消えることはありません。

bPermanent"1"が指定された場合、そのconditionの"効果"が永続的になります。
conditionが除去されればcondition自身は消えてしまいますが、
その効果はずっと残ることになります。

vChanceNextは、そのconditionがfDulationで設定した時間経過で消失する時、
vIDNextで設定したconditionに派生する確率です。
サンプルのように値が1つなら、70%の確率で3つの症状を発症します。

また、別の用法として、
<column name="vIDNext">-198,-199,-200,-202,-203</column>
<column name="vChanceNext">0.5,.025,.0125,1,0.5</column>
上のサンプルのように、IDNextの数だけ確率を設定するケースもあります。

bStackable"1"を指定した場合、同じconditionが複数回付与された時、
その効果も重複して与えられることになります。
例えば、"シャツを着る"conditionによる防寒性・防御力の付与は
重ね着した分だけ上乗せされるよう、bStackableに"1"が指定されています。

一定数スタックした時に追加の効果を与える時は、
後述のaThresholdsで設定することになります。

bDisplay"1"だった場合、そのconditionが付与された時に
ログとcondition一覧にその情報が表示されます
イベントフラグなど、表に出したくないものは"0"を指定しておきましょう。

bDisplayOtherはその亜種で、"1"設定でNPCにそのconditionが付与された場合、
ログや戦闘時のcondition表記などに情報が表示されることになります。

bDisplayGameOver"1"なら、
そのconditionはゲームオーバー時のログに表示されます

nColorは、そのconditionが表示されるときの色です。
"0"なら白、"1"なら赤、"2"なら緑、"3"なら黄色で表示されます。

bResetTimer"1"なら、
そのconditionがスタックした場合に消失までのタイマーをリセットします

bRemoveAll"1"なら、スタックした同一conditionが1つ取り除かれた時
そのスタック全体が除去されます

bRemovePostCombat"1"なら、そのconditionは戦闘終了後に除去されます

nTransferRangeは、戦闘中に相手がそのrange内にいると
そのconditionを感染させる可能性が発生するようです。
実例がBlue Rot関係とSmallpoxしかないため、
感染のプロセスや感染率など、細かい仕様は分かりませんでした。
vIDNextとvChanceNextも関係しそうですが、要検証と言うことで置いておきます。

aThresholdsは、一定数スタックしたconditionに別のconditionを付与する設定です。
例えば、
<column name="aThresholds">5=100;10=101</column>

と表記したとき、
このconditionが5回スタックするとidが100のconditionを、
同様に10回でidが101のconditionを追加で付与されることになります。


他の項目で作成した"骨格"に、"効果"を与えるのがconditionsテーブルの本質です。
Mod作成やデータの改造にはまず避けて通れない部分なので、
特にaFieldNamesaEffectsなどで何が出来るかはしっかりと把握しておきましょう。



0 件のコメント:

コメントを投稿