本節では、戦闘員構造体各種のメモリーレイアウトを表で示し、 また各メンバーデータの意味とアクセス例とをごく簡単に記す。
サイズが #$25
バイトのオブジェクトがアドレス $7E2030
から 24 個直列している。
これらのオブジェクトは次の表で示されるメモリーレイアウトを型としている。
本章ではこの型と個々のインスタンスをそれぞれ戦闘員構造体と戦闘員オブジェクトと呼称するものとする。
表 5.4 構造体 $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 の値を保持するための属性だ。 どちらも敵陣キャラクターが利用する。
この戦闘員が実行するコマンドの ID を値に取る属性だ。
コマンドについては 5.6.1.1 構造体 $C21860
: コマンド で述べる。
戦闘コマンド k を実行する相手を表現する 7 ビット長の数を値に取る属性だ。 この数は戦闘員インデックスと対象範囲を示すビットとの論理和で構成されている。
ビット #$40
が立っていると、コマンド k の対象は複数グループに及ぶか、または空となる。
このとき、下位ビットで敵陣・自陣・両方等の詳細を表現する。
ビット #$01
が 1 ならば敵陣すべてのグループを、
ビット #$02
が 1 ならば自陣すべてのグループを、
そしてビット #$04
が 1 ならばここから特定の誰かを選ばずにそのままコマンド対象とする。
ビット #$20
が立っていると、コマンド k の対象は一つのグループとなる。
このとき、下位ビットがグループ添字を表す。
ビット #$60
がどちらもゼロであれば、この値全体が戦闘員添字を直接表現する。
プログラム上は値が 0 にしかならないはずの属性だ。
敵陣側にモンスター ID が同じ戦闘員が複数現れるときに、それらを識別するためのゼロからの連番を取る属性値だ。 このような場合にはウィンドウではモンスター名の末尾にアルファベット一文字が付されるが、その配列添字を意味する。 これは敵陣戦闘員専用の属性だ。
この戦闘員が所属するグループ ID を値に取る属性だ。次の対応関係により定まる。
この戦闘員が所持品のアイテムを使用することによるコマンドを実行するときに、 そのアイテム ID を値に取る属性だ。 これは自陣側戦闘員専用の属性だ。
アイテムについては 5.23 アイテム で述べる。
この戦闘員が所持品のアイテムを使用することによるコマンドを実行するときに、 その道具袋におけるアイテム位置を値に取る属性だ。 これは自陣側戦闘員専用の属性だ。
それぞれこの戦闘員の攻撃力、守備力、すばやさの現在の表す属性だ。
この戦闘員が実行する戦闘コマンドのターン内優先度を表す数値を取る属性だ。
この戦闘員が眠っていることを示す値を取る属性だ。 値がゼロでない値からゼロに変化すると、この戦闘員は目を覚ます。
これは敵陣キャラクター専用属性であり、コマンドを実行するたびに値が 1 ずつ増えていき、 値が 8 に至ると 0 にリセットされるようなカウンターのような属性だ。 この値をモンスター固有の戦闘コマンド配列の添字として用い、次回実行コマンドを決定する。
この戦闘員のオリジナルの識別子を表す属性だ。 値の型は自陣側フラグ属性値によって異なる。 自陣側戦闘員ならば RAM 上の仲間キャラクターオブジェクトのアドレスとして、 敵陣側戦闘員ならばモンスター ID として値を取り扱う。
この属性は変身系のコマンドでオリジナルを失われないようにする目的がある。
この戦闘員がモシャスかドラゴラムのコマンドを使用中ならば、 その相手キャラクターオブジェクトのアドレスかドラゴラム用モンスターデータ ID をそれぞれ値に取る属性だ。
この戦闘員が見かけ上あやしいかげであれば、その正体のモンスター ID を値に取る。
この属性はドラゴラム状態属性、モシャス状態属性、変身後自陣側フラグ属性と関係がある。
先述の戦闘コマンド k 属性値がモンスター構造体のコマンド j (j = 0..7) から来ているのであれば、
この属性値は j となる。
詳細は 5.5.1 構造体 $C20000
: モンスター のコマンド属性を参照。
この戦闘員が主人公たちのパーティーに所属するものであることを示すブーリアン型属性だ。
適当な名前が思いつかないのだが、この属性はこの戦闘員が戦闘の場にいることを示すブーリアン値を取る。 死亡状態でも構わない。
属性の意味としてもっとも適切なのは、あるコマンドが存在して、その対象となり得るかどうかを示すものだということだろう。 例えば、ニフラムやバシルーラで退場した戦闘員には、この戦闘中はどうやっても影響を与えることはできない。 そういう戦闘員のアクティブフラグ属性値は 0 であるという具合に考えると理解しやすい。
この戦闘員が死亡しているのかどうかを示すブーリアン値を取る属性だ。 敵陣キャラクターが利用する。
この戦闘員がマヒしていることを示すブーリアン値を取る属性だ。 敵陣キャラクターが利用する。
この戦闘員が混乱していることを示すブーリアン値を取る属性だ。
この戦闘員のメダパニ状態属性値が 1 から 0 になると、その時点で値が 1 になるブーリアン型属性だ。
この戦闘員がどくに冒されていることを示すブーリアン値を取る属性だ。 敵陣キャラクターが利用する。
この戦闘員がぼうぎょコマンドを実行中であることを示すブーリアン値を取る属性だ。
適当な名前が思いつかないのだが、この戦闘員が何らかの理由で変身した後に、その変身後キャラクターの出自を示す属性だ。 値が 0 ならばモンスターオブジェクトから、値が 1 ならば仲間キャラクターオブジェクトから基本的な属性値を得て戦闘員オブジェクトにセットする。 ドラゴラムを適用すると属性値を 0 にするが、モシャスを適用すると 1 としなければならない。
あるいは、敵戦闘員を倒した後に得られる経験値やゴールドについては、 その戦闘員のフラグ属性値が 0 であることが必要という性質もある。
この戦闘員がマホトーン等を適用されていることにより、呪文コマンドを封じられている状態にあることを示すブーリアン値を取る属性だ。
この戦闘員がマヌーサ等を適用されていることにより、直接攻撃系コマンドの成功率が低下する状態にあることを示すブーリアン値を取る属性だ。
この戦闘員がバイキルト等を適用されていることを示すブーリアン値を取る属性だ。 すなわち、ダメージ補正処理の途中でダメージ値が倍になる規則が適用されることを意味する。
素晴らしい状態でもある場合には、プログラムはこちらのほうを優先する。
この戦闘員がマホカンタ等を適用されていることを示すブーリアン値を取る属性だ。 すなわち、たいていの呪文コマンドを跳ね返すことを意味する。
この戦闘員がフバーハコマンドを使用していることを示すブーリアン値を取る属性だ。 すなわち、ダメージ補正処理の途中で炎・吹雪系コマンドのダメージ値が 2/3 になる規則が適用されることを意味する。
この戦闘員がそれぞれのコマンドを適用していることを示すブーリアン値を取る属性だ。 変身相手属性と関係がある。
この戦闘員に素晴らしい攻撃力が備わっていることを示すブーリアン値を取る属性だ。 すなわち、通常攻撃が会心または痛恨の一撃に置き換わることを意味する。
バイキルト状態でもある場合には、プログラムはそちらのほうを優先する。
この戦闘員が休んでいることを示すブーリアン値を取る属性だ。 休んでいるとは、様子を見たり、驚いたりして何もしてこない状態のことだ。
この戦闘員が実際に何らかの呪文コマンドを実行し、それが失敗したときに 1 となるブーリアン値属性だ。 ただし、この属性値を参照する処理が存在しない。
この戦闘員の守備力が 1,023 以上であるときに値が 1 となるブーリアン値属性だ。
この戦闘員を最初に倒したときに値が 1 となるブーリアン値属性だ。 これは敵陣戦闘員専用の属性だ。 戦闘終了後に経験値とゴールドを得るには、この属性値が 1 であることが必要だ。
この戦闘員がどうぐメニューから実行コマンドを指定していることを示すブーリアン値を取る属性だ。 これは自陣戦闘員専用の属性だ。
この戦闘員が実際に何らかの呪文コマンドを実行し、それが MP 不足が原因で失敗したときに値が 1 となるブーリアン値属性だ。 敵側戦闘員の一部は、この属性値が実行コマンドの決定に影響する。
この戦闘員のラリホーカウンター属性値が 1 から 0 になると、その時点で値が 1 になるブーリアン型属性だ。
この戦闘員が仲間戦闘員を攻撃するのかどうかを示すブーリアン型属性だ。 自陣側戦闘員専用の属性だ。
このフラグが立っていることにより、一部のコマンド処理が特別に扱われる。 例えばラリホーやメダパニが適用されている仲間にこうげきコマンドを実行すると、 専用メッセージを追加で表示したり、会心の一撃を発生させないようにしたり、 一部の武器の装備効果が適用させないようにしたりする。
この戦闘員があそびのタップダンスを実行したときに 1 か 2 が値としてセットされる属性だ。 この属性値は他戦闘員からの攻撃をかわす確率に影響するものだ。
この戦闘員がどのやすみ状態にあるかを示す値を取る属性だ。 遊びコマンドによるものがほとんどだ。 属性値と適用されているコマンドとの対応は次のとおりだ:
表 5.6
値 | 状態 |
---|---|
#$00
|
n/a |
#$01
|
笑い転げている |
#$02
|
聞き惚れている |
#$03
|
びっくりしている |
#$04
|
うつむいている |
#$05
|
身震いしている |
#$06
|
絡んでいる |
#$07
|
絡まれている |
#$08
|
気分が悪い |
#$09
|
うっとりしている |
この戦闘員が絡まれているときに、相手の遊び人戦闘員を値に取る属性だ。
以下に $7E2030
構造体の各属性にアクセスするためのサブルーチンの一覧を次に示す。
例によって属性値に直接アクセスすることもある。
表 5.7 戦闘員構造体の属性にアクセスするサブルーチン
サブルーチン | 固定引数長 | 入力 | 機能 |
---|---|---|---|
$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.21.2 戦闘キャラクター構造体メソッド を参照。