2015年12月17日木曜日

[Modding]xml解析:battlemoves


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

今回は戦闘中のコマンドを設定しているbattlemovesテーブルです。
かなり煩雑ですが、しっかり読み解けば弄りがいのあるところだと思います。

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


サンプルデータ

データの参照元はbattlemoves.xmlです。
今回は移動+攻撃+Condition追加効果のあるLureがサンプルです。
<table name="battlemoves">
    <column name="id">30</column>
    <column name="strID">90.54</column>
    <column name="strName">Lure</column>
    <column name="strNotes"></column>
    <column name="strSuccess">&lt;us&gt; lures &lt;them&gt; into a trap!</column>
    <column name="strFail">&lt;us&gt; tries to lure &lt;them&gt; into a trap...but fails!</column>
    <column name="strPopUp">Lure
Try to use the environment against target.
Move 1 space away from target.
Chance to knock down target and make them lose 1 turn.
Chance to damage target.
Both you and target must see each other.
Makes you vulnerable.
Not always available.</column>
    <column name="vChanceType">0,0,0</column>
    <column name="vUsConditions">[-137,0,0],[147,0,0],[155,0,0],[737,0,0]</column>
    <column name="vThemConditions">[-137,0,0],[152,6,0.75],[144,6,0.75],[67,6,0.5],[68,6,0.5],[69,6,0.5],[75,6,0.5]</column>
    <column name="vPairConditions">[209,0,0],[491,0,0],[491,0,0]</column>
    <column name="vUsFailConditions">[-137,0,0],[147,0,0],[155,0,0],[737,0,0]</column>
    <column name="vThemFailConditions"></column>
    <column name="vPairFailConditions">[209,0,0],[491,0,0],[491,0,0]</column>
    <column name="vUsPreConditions">207,151,-188,-157,-158,-66,-56,-55,-143,-144,-148,-145,-146,-192</column>
    <column name="vThemPreConditions">-143,-144,-367</column>
    <column name="nSeeThem">1</column>
    <column name="nSeeUs">1</column>
    <column name="bAllOutOfRange">0</column>
    <column name="bInAttackRange">0</column>
    <column name="nMinCharges">0</column>
    <column name="nMinRange">-1</column>
    <column name="nMaxRange">4</column>
    <column name="nAttackModeType">-1</column>
    <column name="vHexTypes"></column>
    <column name="fChance">0.15</column>
    <column name="fPriority">0.9</column>
    <column name="fDetect">2</column>
    <column name="fOrder">0.75</column>
    <column name="fFatigue">3</column>
    <column name="bApproach">0</column>
    <column name="bOffense">0</column>
    <column name="bFallBack">0</column>
    <column name="bRetreat">0</column>
    <column name="bPosition">1</column>
    <column name="bPassive">0</column>
</table>

column解析

今回は扱うパラメータがちょっと多めです。
battlemovesはこちらに開発者の説明があるので、
解読・翻訳する形で説明していきます。

strID表示されるアイコンのIDです。
アイコンの実体は"itemtypes"テーブルにあり、
ID前半がnGroupID、後半がnSubGroupIDのものを参照しています。
つまり、今回はnGroupIDが90、nSubGroupIDが54のアイテムである
"Lure"にアイコンの実体が記述されています。

strNameコマンド名で、strNoteメモ欄です。

strSuccess成功時strFail失敗時に表示されるメッセージです。

strPopUpには、マウスカーソルを合わせたときのメッセージが入ります。

vChanceTypevPairFailConditions
random checkというものを行うため、
nConditionnCheckTypefChanceの3つのパラメータ、
もしくはそのリストで構成されています。

まずはこの3つのパラメータについて解説しておきます。
nConditionはそのチェックが成功した時に付加/削除されるConditionで、
数値は"conditions"テーブルのIDです。

nCheckTypeチェックに用いるロール(判定)の種類で、
0:判定せずに発生する
1:melee attack roll(物理攻撃ロール)
2:ranged attack roll(遠隔攻撃ロール)
3:terrain trip roll(地形のつまづきやすさ?)
4:terrain trip roll(fChanceを加味してチェックする?)
5:morale check(moraleで判定を行う)
6:flat probability(fChanceで単純に確率計算?)
7:escape check(逃走成功チェック?)
となっています。

※元記事では1~8でしたが、サンプルと見比べた結果、
0~7と読み替えて良さそうな気がします。

fChanceチェックに用いる数値で、
成功率や成功倍率として使用されています。

vChanceType全体的な成功率を決定するためのrandom checkパラメータです。

vUsConditionsコマンド成功時、自分に付加されるconditionを指定する
random checkパラメータです。

vThemConditionsコマンド成功時、相手に付加されるconditionを指定する
random checkパラメータです。

vPairConditionsコマンド成功時、自分と相手の両方に付加されるconditionを指定する
random checkパラメータです。

vUsFailConditionsvThemFailConditionsvPairFailConditionsは、
コマンド失敗時に自分、相手、両者に付加されるconditionを指定する
random checkパラメータです。

vUsPreConditionsコマンドを使用するために自分が備えているべきconditionです。
もちろん"-"を指定して、備えていてはいけないconditionも指定できます

vThemPreConditionsコマンドを使用するために相手が備えているべきconditionです。

nSeeThemは、"0"なら相手が見えていないときに使えるコマンドで、
"1"なら相手が見えている必要があり"2"ならどちらでも使えるコマンドです。

nSeeUsは、"0"なら相手に見られていないときに使えるコマンドで、
"1"なら相手に見られている必要があり"2"ならどちらでも使えるコマンドです。

bAllOutOfRange"1"を指定していると、
敵の攻撃可能な範囲にいるとコマンドが表示されません

bInAttackRange"1"を指定していると、
コマンドは現在装備している武器の攻撃可能な範囲にいないと表示されません

nMinChargesコマンド実行時に必要とされる(装備武器の)弾薬の最小数です。

nMinRangeコマンドが実行できる最小のrangeです。

nMaxRangeコマンドが実行できる最大のrangeです。

nAttackModeTypeコマンドの攻撃タイプで、
"0"は近接攻撃"1"は遠隔攻撃"-1"を指定するとどちらでも使用できます。
装備武器に依存しない場合は"-1"で問題ありません。

vHexTypesコマンドを実行可能なHexのリストです。
指定がなければどのHexでも使用可能です。

fChance条件を満たした時にコマンドが発生する確率(1=100%)です。

fPriorityそのコマンドの優先度です。AIは優先度の高いコマンドを積極的に選びます

fDetectそのコマンドで自分が発見される確率(通常の被発見率に対する倍率)です。

fOrderは、そのコマンドが1ターンの中で実行される"順番"です。
0.0が最も早く、1.0が(たぶん)最も遅くなります

fFatigueは、そのコマンドで消費されるスタミナの大きさです。

bApproach"1"だと、そのコマンドが相手に近づくものだとAIに通知します。

bOffense"1"だと、そのコマンドが攻撃するためのものだとAIに通知します。

bFallBack"1"だと、そのコマンドが相手から離れるものだとAIに通知します。

bRetreat"1"だと、そのコマンドが戦闘から逃げるものだとAIに通知します。

bPosition"1"だと、そのコマンドがその場にとどまるものだとAIに通知します。

bPassive"1"だと、そのコマンドが非戦闘系(会話など)のものだとAIに通知します。


battlemovesは、特に複雑な構造のテーブルです。
その代わり、かなりトリッキーな行動も表現できるポテンシャルを秘めています。

場合によってはテストが特に大変なテーブルですが、その分うまく動くと楽しい要素です。
自分で弄ってみたい場合は、他Modの流用から始めるのがいいかもしれません。

0 件のコメント:

コメントを投稿