5.4. 戦闘員

5.4.1. 構造体 $7E2030: 戦闘員
5.4.2. 戦闘員構造体メソッド

本節では、戦闘員構造体各種のメモリレイアウトを表で示し、 また各メンバーデータの意味とアクセス例とをごく簡単に記す。

5.4.1. 構造体 $7E2030: 戦闘員

サイズが #$25 バイトのオブジェクトがアドレス $7E2030 から 24 個直列している。 これらのオブジェクトは次の表で示されるメモリレイアウトを型としている。 本章ではこの型と個々のインスタンスをそれぞれ戦闘員構造体と戦闘員オブジェクトと呼称するものとする。

表 5.6 構造体 $7E2030

オフセット 属性
#$00 #$FFFF HP
#$02 #$FFFF MP
#$04 #$01FF 戦闘コマンド 0
#$05 #$00FE 戦闘コマンド対象戦闘員 0
#$06 #$01FF 戦闘コマンド 1
#$07 #$00FE 戦闘コマンド対象戦闘員 1
#$08 #$01FF 戦闘コマンド 2
#$09 #$00FE 戦闘コマンド対象戦闘員 2
#$0A #$00FF 敵アニメーション
#$0B #$00FF 同一モンスター識別子
#$0C #$00FF グループ
#$0D #$00FF どうぐつかうコマンドアイテム ID
#$0E #$00FF どうぐつかうコマンド添字
#$0F #$FFFF 攻撃力
#$11 #$FFFF 守備力
#$13 #$FFFF すばやさ
#$15 #$FFFF コマンド実行優位
#$17 #$00FF ラリホーカウンター
#$18 #$00FF 戦闘コマンド決定用カウンター
#$19 #$FFFF 自分自身
#$1B #$FFFF 変身相手
#$1D #$00FF 戦闘コマンド添字 0
#$1E #$00FF 戦闘コマンド添字 1
#$1F #$00FF 戦闘コマンド添字 2
#$20 #$0001 自陣側フラグ
#$20 #$0002 アクティブフラグ
#$20 #$0004 死亡状態
#$20 #$0008 マヒ状態
#$20 #$0010 メダパニ状態
#$20 #$0020 メダパニ回復状態
#$20 #$0040 どく状態
#$20 #$0080 防御状態
#$21 #$0001 変身後自陣側フラグ
#$21 #$0002 マホトーン状態
#$21 #$0004 マヌーサ状態
#$21 #$0008 バイキルト状態
#$21 #$0010 マホカンタ状態
#$21 #$0020 フバーハ状態
#$21 #$0040 ドラゴラム状態
#$21 #$0080 モシャス状態
#$22 #$0001 素晴らしい状態
#$22 #$0002 休み状態
#$22 #$0004 呪文失敗フラグ
#$22 #$0008 高守備力フラグ
#$22 #$0010 一度倒したフラグ
#$22 #$0020 どうぐつかうフラグ
#$22 #$0040 MP 不足フラグ
#$22 #$0080 ラリホー回復フラグ
#$23 #$0003 仲間攻撃特殊処理フラグ
#$23 #$000C みかわしカウンター
#$23 #$00F0 休み分類
#$24 #$001F 絡んでいるキャラクター
#$24 #$00E0 (未使用)

実質的には参照のない属性があるかもしれないが、それも含めて構造体の各属性の意味を以下に記す。

HP, MP

それぞれこの戦闘員の現在の HP と MP の値を保持するための属性だ。 どちらも敵陣キャラクターが利用する。

戦闘コマンド k (k = 0..2)

この戦闘員が実行するコマンドの ID を値に取る属性だ。 コマンドについては 5.7.1.1 構造体 $C21860: コマンド で述べる。

戦闘コマンド対象戦闘員 k (k = 0..2)

戦闘コマンド k を実行する相手を表現する 7 ビット長の数を値に取る属性だ。 この数は戦闘員インデックスと対象範囲を示すビットとの論理和で構成されている。

ビット #$40 が立っていると、コマンド k の対象は複数グループに及ぶか、または空となる。 このとき、下位ビットで敵陣・自陣・両方等の詳細を表現する。 ビット #$01 が 1 ならば敵陣すべてのグループを、 ビット #$02 が 1 ならば自陣すべてのグループを、 そしてビット #$04 が 1 ならばここから特定の誰かを選ばずにそのままコマンド対象とする。

ビット #$20 が立っていると、コマンド k の対象は一つのグループとなる。 このとき、下位ビットがグループ添字を表す。

ビット #$60 がどちらもゼロであれば、この値全体が戦闘員添字を直接表現する。

敵アニメーション

プログラム上は値が 0 にしかならないはずの属性だ。

同一モンスター識別子

敵陣側にモンスター ID が同じ戦闘員が複数現れるときに、それらを識別するためのゼロからの連番を取る属性値だ。 このような場合にはウィンドウではモンスター名の末尾にアルファベット一文字が付されるが、その配列添字を意味する。 これは敵陣戦闘員専用の属性だ。

グループ

この戦闘員が所属するグループ ID を値に取る属性だ。次の対応関係により定まる。

表 5.7 グループ

ID 意味
0 敵陣グループ 0
1 敵陣グループ 1
2 敵陣グループ 2
3 敵陣グループ 3
4 格闘場で賭けた選手のいるグループ
5 自陣グループ

どうぐつかうコマンドアイテム ID

この戦闘員が所持品のアイテムを使用することによるコマンドを実行するときに、 そのアイテム ID を値に取る属性だ。 これは自陣側戦闘員専用の属性だ。

アイテムについては 5.24 アイテム で述べる。

どうぐつかうコマンド添字

この戦闘員が所持品のアイテムを使用することによるコマンドを実行するときに、 その道具袋におけるアイテム位置を値に取る属性だ。 これは自陣側戦闘員専用の属性だ。

攻撃力, 守備力, すばやさ

それぞれこの戦闘員の攻撃力、守備力、すばやさの現在の表す属性だ。

コマンド実行優位

この戦闘員が実行する戦闘コマンドのターン内優先度を表す数値を取る属性だ。

ラリホーカウンター

この戦闘員が眠っていることを示す値を取る属性だ。 値がゼロでない値からゼロに変化すると、この戦闘員は目を覚ます。

戦闘コマンド決定用カウンター

これは敵陣キャラクター専用属性であり、コマンドを実行するたびに値が 1 ずつ増えていき、 値が 8 に至ると 0 にリセットされるようなカウンターのような属性だ。 この値をモンスター固有の戦闘コマンド配列の添字として用い、次回実行コマンドを決定する。

自分自身

この戦闘員のオリジナルの識別子を表す属性だ。 値の型は自陣側フラグ属性値によって異なる。 自陣側戦闘員ならば RAM 上の仲間キャラクターオブジェクトのアドレスとして、 敵陣側戦闘員ならばモンスター ID として値を取り扱う。

この属性は変身系のコマンドでオリジナルを失われないようにする目的がある。

変身相手

この戦闘員がモシャスかドラゴラムのコマンドを使用中ならば、 その相手キャラクターオブジェクトのアドレスかドラゴラム用モンスターデータ ID をそれぞれ値に取る属性だ。

この戦闘員が見かけ上あやしいかげであれば、その正体のモンスター ID を値に取る。

この属性はドラゴラム状態属性、モシャス状態属性、変身後自陣側フラグ属性と関係がある。

戦闘コマンド添字 k (k = 0..2)

先述の戦闘コマンド k 属性値がモンスター構造体のコマンド j (j = 0..7) から来ているのであれば、 この属性値は j となる。 詳細は 5.6.1 構造体 $C20000: モンスター のコマンド属性を参照。

自陣側フラグ

この戦闘員が主人公たちのパーティーに所属するものであることを示すブーリアン型属性だ。

アクティブフラグ

適当な名前が思いつかないのだが、この属性はこの戦闘員が戦闘の場にいることを示すブーリアン値を取る。 死亡状態でも構わない。

属性の意味としてもっとも適切なのは、あるコマンドが存在して、その対象となり得るかどうかを示すものだということだろう。 例えば、ニフラムやバシルーラで退場した戦闘員には、この戦闘中はどうやっても影響を与えることはできない。 そういう戦闘員のアクティブフラグ属性値は 0 であるという具合に考えると理解しやすい。

死亡状態

この戦闘員が死亡しているのかどうかを示すブーリアン値を取る属性だ。 敵陣キャラクターが利用する。

マヒ状態

この戦闘員がマヒしていることを示すブーリアン値を取る属性だ。 敵陣キャラクターが利用する。

メダパニ状態

この戦闘員が混乱していることを示すブーリアン値を取る属性だ。

メダパニ回復状態

この戦闘員のメダパニ状態属性値が 1 から 0 になると、その時点で値が 1 になるブーリアン型属性だ。

どく状態

この戦闘員がどくに冒されていることを示すブーリアン値を取る属性だ。 敵陣キャラクターが利用する。

防御状態

この戦闘員がぼうぎょコマンドを実行中であることを示すブーリアン値を取る属性だ。

変身後自陣側フラグ

適当な名前が思いつかないのだが、この戦闘員が何らかの理由で変身した後に、その変身後キャラクターの出自を示す属性だ。 値が 0 ならばモンスターオブジェクトから、値が 1 ならば仲間キャラクターオブジェクトから基本的な属性値を得て戦闘員オブジェクトにセットする。 ドラゴラムを適用すると属性値を 0 にするが、モシャスを適用すると 1 としなければならない。

あるいは、敵戦闘員を倒した後に得られる経験値やゴールドについては、 その戦闘員のフラグ属性値が 0 であることが必要という性質もある。

マホトーン状態

この戦闘員がマホトーン等を適用されていることにより、呪文コマンドを封じられている状態にあることを示すブーリアン値を取る属性だ。

マヌーサ状態

この戦闘員がマヌーサ等を適用されていることにより、直接攻撃系コマンドの成功率が低下する状態にあることを示すブーリアン値を取る属性だ。

バイキルト状態

この戦闘員がバイキルト等を適用されていることを示すブーリアン値を取る属性だ。 すなわち、ダメージ補正処理の途中でダメージ値が倍になる規則が適用されることを意味する。

素晴らしい状態でもある場合には、プログラムはこちらのほうを優先する。

マホカンタ状態

この戦闘員がマホカンタ等を適用されていることを示すブーリアン値を取る属性だ。 すなわち、たいていの呪文コマンドを跳ね返すことを意味する。

フバーハ状態

この戦闘員がフバーハコマンドを使用していることを示すブーリアン値を取る属性だ。 すなわち、ダメージ補正処理の途中で炎・吹雪系コマンドのダメージ値が 2/3 になる規則が適用されることを意味する。

ドラゴラム状態, モシャス状態

この戦闘員がそれぞれのコマンドを適用していることを示すブーリアン値を取る属性だ。 変身相手属性と関係がある。

素晴らしい状態

この戦闘員に素晴らしい攻撃力が備わっていることを示すブーリアン値を取る属性だ。 すなわち、通常攻撃が会心または痛恨の一撃に置き換わることを意味する。

バイキルト状態でもある場合には、プログラムはそちらのほうを優先する。

休み状態

この戦闘員が休んでいることを示すブーリアン値を取る属性だ。 休んでいるとは、様子を見たり、驚いたりして何もしてこない状態のことだ。

呪文失敗フラグ

この戦闘員が実際に何らかの呪文コマンドを実行し、それが失敗したときに 1 となるブーリアン値属性だ。 ただし、この属性値を参照する処理が存在しない。

高守備力フラグ

この戦闘員の守備力が 1,023 以上であるときに値が 1 となるブーリアン値属性だ。

一度倒したフラグ

この戦闘員を最初に倒したときに値が 1 となるブーリアン値属性だ。 これは敵陣戦闘員専用の属性だ。 戦闘終了後に経験値とゴールドを得るには、この属性値が 1 であることが必要だ。

どうぐつかうフラグ

この戦闘員がどうぐメニューから実行コマンドを指定していることを示すブーリアン値を取る属性だ。 これは自陣戦闘員専用の属性だ。

MP 不足フラグ

この戦闘員が実際に何らかの呪文コマンドを実行し、それが MP 不足が原因で失敗したときに値が 1 となるブーリアン値属性だ。 敵側戦闘員の一部は、この属性値が実行コマンドの決定に影響する。

ラリホー回復フラグ

この戦闘員のラリホーカウンター属性値が 1 から 0 になると、その時点で値が 1 になるブーリアン型属性だ。

仲間攻撃特殊処理フラグ

この戦闘員が仲間戦闘員を攻撃するのかどうかを示すブーリアン型属性だ。 自陣側戦闘員専用の属性だ。

このフラグが立っていることにより、一部のコマンド処理が特別に扱われる。 例えばラリホーやメダパニが適用されている仲間にこうげきコマンドを実行すると、 専用メッセージを追加で表示したり、会心の一撃を発生させないようにしたり、 一部の武器の装備効果が適用させないようにしたりする。

みかわしカウンター

この戦闘員があそびのタップダンスを実行したときに 1 か 2 が値としてセットされる属性だ。 この属性値は他戦闘員からの攻撃をかわす確率に影響するものだ。

休み分類

この戦闘員がどのやすみ状態にあるかを示す値を取る属性だ。 遊びコマンドによるものがほとんどだ。 属性値と適用されているコマンドとの対応は次のとおりだ:

表 5.8

状態
#$00 n/a
#$01 笑い転げている
#$02 聞き惚れている
#$03 びっくりしている
#$04 うつむいている
#$05 身震いしている
#$06 絡んでいる
#$07 絡まれている
#$08 気分が悪い
#$09 うっとりしている

絡んでいるキャラクター

この戦闘員が絡まれているときに、相手の遊び人戦闘員を値に取る属性だ。

5.4.2. 戦闘員構造体メソッド

以下に $7E2030 構造体の各属性にアクセスするためのサブルーチンの一覧を次に示す。 例によって属性値に直接アクセスすることもある。

表 5.9 戦闘員構造体の属性にアクセスするサブルーチン

サブルーチン 固定引数長 入力 機能
$C2CA5B 2 x 2 バイト長の属性値を取得する
$C2CA62 2 y 2 バイト長の属性値を取得する
$C2CA98 2 a, x 2 バイト長の属性値を更新する
$C2CAA1 2 a, y 2 バイト長の属性値を更新する
$C2CAD9 4 x ビットフィールド属性値を取得する
$C2CAE0 4 y ビットフィールド属性値を取得する
$C2CB2B 4 x ビットフィールド属性値を取得する
$C2CB32 4 y ビットフィールド属性値をテストする
$C2CB70 4 a, x ビットフィールド属性値を更新する
$C2CB79 4 a, y ビットフィールド属性値を更新する

表の凡例は前作の 4.19.2 戦闘キャラクター構造体メソッド を参照。