3.4. 戦闘キャラクター構造体

3.4.1. 仲間キャラクター構造体
3.4.2. 敵キャラクター構造体

戦闘キャラクター構造体とは、戦闘セッションに参加している敵と味方のキャラクターそれぞれに対して割り当てるオブジェクトの構造を与える型だ。 戦闘キャラクター構造体には仲間用と敵用の二種類存在するので、それらの総称として「戦闘キャラクター構造体」と呼ぶ。 本節では、戦闘キャラクター構造体各種のメモリレイアウトを表で示し、また各メンバーデータの意味とアクセス例とをごく簡単に記す。

3.4.1. 仲間キャラクター構造体

次の表で示されるメモリレイアウトで構成される、サイズが #$0C バイトのオブジェクトがアドレス $000760 から 8 個直列している。 戦闘開始時に、パーティーメンバーの並び順に準じてこれらのオブジェクトが対応するメンバーの状態に応じて初期化される。 そして、戦闘の状況が変化するに従って、これらのオブジェクトの状態も変化していく。 戦闘終了後はこの 8 個のオブジェクトの内容は放棄される。

表 3.11 仲間キャラクター用構造体メモリレイアウト

オフセット 性質 アクセス例 備考
$000760 攻撃力 BRK #$89 (args: 8011) 2 バイト値
$000761 * *
$000762 守備力 BRK #$89 (args: 8015) 2 バイト値
$000763 * *
$000764 すばやさ BRK #$89 (args: 8980)
$000765 #$80 ねむりフラグ BRK #$89 (args: 8043, $43: #$08)
* #$40 おたけびフラグ BRK #$89 (args: 8041, $43: #$09)
* #$20 メダパニフラグ BRK #$89 (args: 8041, $43: #$0A)
* #$10 マホトーンフラグ BRK #$89 (args: 8041, $43: #$0B)
* #$08 マヌーサフラグ BRK #$89 (args: 8042, $43: #$0C) cf. すなけむりフラグ
* #$04 フバーハフラグ BRK #$89 (args: 8041, $43: #$0D)
* #$02 なめまわしフラグ BRK #$89 (args: 8041, $43: #$0E)
* #$01 マホキテフラグ BRK #$89 (args: 8041, $43: #$0F)
$000766 #$80 バイキルトフラグ BRK #$89 (args: 8042, $43: #$10)
* #$40 マホカンタフラグ BRK #$89 (args: 8041, $43: #$11)
* #$20 不明 BRK #$89 (args: 8043, $43: #$12) モシャスフラグのはずだった
* #$10 ドラゴラムフラグ BRK #$89 (args: 8042, $43: #$13)
* #$08 ちからためフラグ BRK #$89 (args: 8042, $43: #$14) きあいためと共通
* #$04 さそうおどりフラグ BRK #$89 (args: 8041, $43: #$15)
* #$02 ぼうぎょ2フラグ BRK #$89 (args: 8042, $43: #$18)
* #$01 ぼうぎょフラグ BRK #$89 (args: 8042, $43: #$17)
$000767 #$80 ぶきみなひかりフラグ BRK #$89 (args: 8042, $43: #$19)
* #$40 みなぎるフラグ BRK #$89 (args: 8042, $43: #$1A) パルプンテ関連
* #$20 はやぶさフラグ BRK #$89 (args: 8042, $43: #$1B) パルプンテ関連
* #$10 すなけむりフラグ BRK #$89 (args: 8042, $43: #$1C) cf. マヌーサフラグ
* #$0C 時間停止カウンター BRK #$89 (args: 8043, $43: #$1D) パルプンテ関連
* #$03 まぶしいひかりカウンター BRK #$89 (args: 8042, $43: #$1E)
$000768 #$80 あしばらいフラグ BRK #$89 (args: 8041, $43: #$1F) 混乱行動関連
* #$40 未使用
* #$30 ねむりカウンター BRK #$89 (args: 8043, $43: #$20) cf. ねむりフラグ
* #$08 ルカニ・スカラフラグ BRK #$89 (args: 8042, $43: #$21)
* #$04 呪い:頭フラグ BRK #$89 (args: 8041, $43: #$22)
* #$02 未使用
* #$01 呪い:動きフラグ BRK #$89 (args: 8041, $43: #$24)
$000769 #$80 守備力変化フラグ BRK #$89 (args: 8041, $43: #$25) 「きているものを ぬぎすてた」ら ON
* #$70 未使用
* #$0F コマンドカウンター BRK #$89 (args: 8041, $43: #$27)
$00076A n/a n/a 未使用バイトか
$00076B * * *

列「オフセット」は実効空間におけるオブジェクトのアドレスだ。 $000760 というのは最初のオブジェクトのアドレスであり、 次の仲間のオブジェクトのアドレスは $00076C となる。以下同様にオフセットを計算すればよい。

列「桁」が十六進数で埋まっているものは、バイト内の対応する桁が C/C++ 言語で言うところのビットフィールドになっていることを意味する。 例えば #$0C となっているフィールドは、そのバイトの真ん中からの下位 2 ビットだけを使う整数値型として 0 から 3 までの値を取り得る。

列「性質」はオブジェクトの構成要素それぞれに対して記者が便宜的に付けた呼び名だ。 どうしてもわかりにくいものについては、列「備考」で説明を補足しておいた。

列「アクセス例」は、プログラムコードが対応する特性にアクセスする命令の一例を示す。 原則的に BRK 命令によって各フィールドにアクセスする。 括弧内の args とあるのは、BRK 命令の特別なオペランドをアドレス順に並べたものである。 この辺の仕様については 3.2.3.4 オペランド #$80, ..., #$93: オブジェクトのフィールドにアクセス で述べる。

3.4.2. 敵キャラクター構造体

次の表で示されるメモリレイアウトで構成される、サイズが #$10 バイトのオブジェクトがアドレス $0007C0 から 16 個直列している。 戦闘開始時に何らかの法則に従ってこれらのオブジェクトが初期化される。 その初期化規則は通常戦とボス戦とで異なるだろうが、ここでは触れない。 仲間キャラクター構造体と同様に、戦闘状況に応じてオブジェクトの状態が変化していくが、 戦闘終了後はこの 16 個のオブジェクトの内容は放棄される。

表 3.12 敵キャラクター用構造体メモリレイアウト

オフセット 性質 アクセス例 備考
$0007C0 モンスター ID BRK #$88 (arg1: #$78) $238000 構造体オブジェクトの ID を指す
$0007C1 #$80 不明 BRK #$88 (arg1: #$7E)
* #$40 n/a n/a
* #$3C グループ内添字? BRK #$88 (arg1: #$7E) 所属グループの何番目かを指す?
* #$03 グループ BRK #$88 (arg1: #$7D) 何番目のグループに所属するか
$0007C2 HP BRK #$88 (arg1: #$50) 2 バイト値
$0007C3 * *
$0007C4 MP BRK #$88 (arg1: #$56) 2 バイト値
$0007C5 すばやさ BRK #$88 (arg1: #$5C)
$0007C6 攻撃力 BRK #$88 (arg1: #$60) 2 バイト値
$0007C7 * *
$0007C8 守備力 BRK #$88 (arg1: #$64) 2 バイト値
$0007C9 * *
$0007CA #$80 いなくなった・逃げた BRK #$88 (arg1: #$79, $43: #$28) 例えば逃げると OFF
* #$40 生存フラグ BRK #$88 (arg1: #$79, $43: #$29)
* #$20 マヒフラグ BRK #$88 (arg1: #$79, $43: #$2A)
* #$10 どくフラグ BRK #$88 (arg1: #$79, $43: #$2B)
* #$08 経験値ゴールドを無視 BRK #$88 (arg1: #$79, $43: #$2C) 一度生き返ったことがあると ON
* #$04 アストロンフラグ BRK #$88 (arg1: #$79, $43: #$2D) cf. アストロンカウンター
* #$02 こおりついてうごけない BRK #$88 (arg1: #$79, $43: #$2E) パルプンテ関連
* #$01 なめまわしフラグ BRK #$88 (arg1: #$79, $43: #$2F)
$0007CB #$80 ねむりフラグ BRK #$88 (arg1: #$79, $43: #$30) cf. ねむりカウンター
* #$40 おたけびフラグ BRK #$88 (arg1: #$79, $43: #$31)
* #$20 メダパニフラグ BRK #$88 (arg1: #$79, $43: #$32)
* #$10 マホトーンフラグ BRK #$88 (arg1: #$79, $43: #$33)
* #$08 マヌーサフラグ BRK #$88 (arg1: #$79, $43: #$34)
* #$04 エサかじりフラグ BRK #$88 (arg1: #$79, $43: #$35) まもののエサが効くと ON
* #$02 もうどくフラグ BRK #$88 (arg1: #$79, $43: #$36)
* #$01 マホキテフラグ BRK #$88 (arg1: #$79, $43: #$37)
$0007CC #$80 バイキルトフラグ BRK #$88 (arg1: #$79, $43: #$38)
* #$40 マホカンタフラグ BRK #$88 (arg1: #$79, $43: #$39)
* #$20 モシャスフラグ BRK #$88 (arg1: #$79, $43: #$3A) cf. モシャス相手
* #$10 ドラゴラムフラグ? BRK #$88 (arg1: #$79, $43: #$3B) 敵はドラゴラムに対応していないが?
* #$08 ちからためフラグ BRK #$88 (arg1: #$79, $43: #$3C)
* #$04 さそうおどりフラグ BRK #$88 (arg1: #$79, $43: #$3D)
* #$02 ぼうぎょ2フラグ BRK #$88 (arg1: #$7A, AL: #$40)
* #$01 ぼうぎょフラグ BRK #$88 (arg1: #$7A, AL: #$3F)
$0007CD #$80 ぶきみなひかりフラグ BRK #$88 (arg1: #$7A, $43: #$41)
* #$40 みなぎるフラグ BRK #$88 (arg1: #$7A, $43: #$42) パルプンテ関連
* #$20 はやぶさフラグ BRK #$88 (arg1: #$79, $43: #$43) パルプンテ関連
* #$10 不明 BRK #$88 (arg1: #$7B, $43: #$44)
* #$0C 時間停止カウンター BRK #$88 (arg1: #$79, $43: #$45) パルプンテ関連
* #$03 まぶしいひかりカウンター BRK #$88 (arg1: #$79, $43: #$46)
$0007CE #$80 馬車ドア閉めフラグ BRK #$88 (arg1: #$79, $43: #$47)
* #$70 コマンドカウンター BRK #$88 (arg1: #$79, $43: #$48)
* #$08 ルカニ・スカラフラグ BRK #$88 (arg1: #$79, $43: #$49)
* #$04 呪い:頭フラグ BRK #$88 (arg1: #$7A, AH: #$4A) 呪われることはないはずだが?
* #$02 n/a n/a
* #$01 呪い:動きフラグ BRK #$88 (arg1: #$79, $43: #$4C) 呪われることはないはずだが?
$0007CF #$C0 アストロンカウンター BRK #$88 (arg1: #$79, $43: #$4D) cf. アストロンフラグ
* #$30 ねむりカウンター BRK #$88 (arg1: #$79, $43: #$4E) cf. ねむりフラグ
* #$0F 余分+モシャス相手の番号 BRK #$88 (arg1: #$79, $43: #$4F) cf. モシャスフラグ
* #$07 モシャス相手の番号 BRK #$88 (arg1: #$F4) cf. モシャスフラグ