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

3.4.1. 構造体 $7E2040: パーティーメンバー表現
3.4.2. 構造体 $7E2332: 預けてあるモンスターメンバー表現
3.4.3. 構造体 $7E294A: 預けてある人間メンバー表現

この節では仲間のキャラクターを表現するデータ構造体三種について述べる。 また、本書全体を通じて構造体の名称を、その型のオブジェクトが格納される配列の先頭アドレスにちなみ、 例えば「$7E2040 構造体」や「構造体 $7E2040」のように呼称する。

さて、本プログラムでは何らかの理由で三種類の仲間キャラクターデータの表現形式が定義されている。 もっとも言及頻度が高いのは $7E2040 構造体だ。 これは主人公と、彼が引き連れている馬車内外のパーティーメンバー全員に共通するデータを表現するための構造体だ。 そして、パーティー人数が多過ぎる状況では、あぶれた仲間はモンスターじいさんまたはルイーダの酒場に待機することになる。 この待機しているキャラクターたちを表現するのに、別途専用の構造体 $7E2332 または $7E294A に変換してデータを保持する。 妙に複雑な仕組みになっているが、あとで見るようにこれらの構造体のサイズの違いが RAM の節約に一役買うというわけだ。

さらに戦闘中にしか用いられることのない構造体もある。 これについては 3.5 戦闘キャラクター構造体 で解説する。

3.4.1. 構造体 $7E2040: パーティーメンバー表現

構造体 $7E2040 は、パーティーにいるキャラクターデータを表現する。 データは移動中だけでなく、戦闘中にも属性のいくつかがアクセスされる。

プログラムはこの構造体をサイズが #$2A バイトであるとして処理する。 メモリレイアウトを次の表に示す。

表 3.13 構造体 $7E2040: パーティーメンバー

オフセット 属性
#$00 #$3F キャラクター識別値
#$40戦闘コマンド入力抑止フラグ
#$80モンスターフラグ
#$01 #$03 同一種モンスター識別値
#$04MP が呪われているフラグ
#$08HP が呪われているフラグ
#$10もうどく状態フラグ
#$20どく状態フラグ
#$40マヒ状態フラグ
#$80生存フラグ
#$02 HP
#$03
#$04 MP
#$05
#$06 すばやさ
#$07 ちから
#$08 みのまもり
#$09 かしこさ
#$0A うんのよさ
#$0B 経験値
#$0C
#$0D
#$0E MHP
#$0F
#$10 MMP
#$11
#$12 #$7F レベル
#$80いのちのリング装備中フラグ
#$13 #$7F レベル上限値
#$80しあわせのぼうし装備中フラグ
#$14 #$FF装備状態フラグ列
#$15 #$0F装備状態フラグ列
#$16 所持品 #$00
#$17 所持品 #$01
#$18 所持品 #$02
#$19 所持品 #$03
#$1A 所持品 #$04
#$1B 所持品 #$05
#$1C 所持品 #$06
#$1D 所持品 #$07
#$1E 所持品 #$08
#$1F 所持品 #$09
#$20 所持品 #$0A
#$21 所持品 #$0B
#$22 肩書・モンスター
#$23 #$01 移動時呪文習得フラグ #$00
#$02移動時呪文習得フラグ #$01
#$04移動時呪文習得フラグ #$02
#$08移動時呪文習得フラグ #$03
#$10移動時呪文習得フラグ #$04
#$20移動時呪文習得フラグ #$05
#$40移動時呪文習得フラグ #$06
#$80移動時呪文習得フラグ #$07
#$24 #$01 戦闘時コマンド習得フラグ #$00
#$02戦闘時コマンド習得フラグ #$01
#$04戦闘時コマンド習得フラグ #$02
#$08戦闘時コマンド習得フラグ #$03
#$10戦闘時コマンド習得フラグ #$04
#$20戦闘時コマンド習得フラグ #$05
#$40戦闘時コマンド習得フラグ #$06
#$80戦闘時コマンド習得フラグ #$07
#$25 #$01 戦闘時コマンド習得フラグ #$08
#$02戦闘時コマンド習得フラグ #$09
#$04戦闘時コマンド習得フラグ #$0A
#$08戦闘時コマンド習得フラグ #$0B
#$F0直近に指定した戦闘時コマンドのビット配列添字
#$26 次のレベルアップ時の経験値下限
#$27
#$28
#$29 #$01 モンスターじいさんに預けるの禁止フラグ
#$02ルイーダの酒場に預けるの禁止フラグ
#$04レベルアップ禁止フラグ
#$08貴重品所持禁止フラグ
#$10道具所持禁止フラグ
#$20呪文禁止フラグ
#$40装備禁止フラグ
#$80死亡を気絶とするフラグ

キャラクター識別値は、モンスターと人間とで別系統の値が割り振られている。 前者と後者は配列 $239E41 と配列 $23A1B1 のアドレス計算にそれぞれ用いられる添字と覚えておけばよい。

戦闘コマンド入力抑止フラグとは、このフラグが立っているキャラクターに対しては戦闘中に「めいれいさせろ」でコマンド指示をさせないようにするものだ。 初期状態ではパパスとフローラが該当する。

同一種モンスター識別値は、同種のモンスターが複数仲間にいる場合に、彼らを識別するために必要な情報だ。 例えばスライムが仲間にいるときに、スラリンなのかスラぼうなのか、それとも別の個体なのかをこの値で決める。 また、ベビーパンサーおよびキラーパンサーに付けた名前もこの値に表現させる。

いのちのリング装備中フラグとは、そのキャラクターのいのちのリングの装備状態と連動している。 このフラグが戦闘時のターン終了時の HP 回復処理と、移動時の HP 回復処理を有効化する。

しあわせのぼうし装備中フラグとは、そのキャラクターのしあわせのぼうしの装備状態と連動している。 このフラグが移動時の MP 回復処理を有効化する。

装備状態フラグ列とは、そのキャラクターのどの所持品が装備中なのかを示すフラグの配列だ。 このフラグ列と所持品の配列が連動しているので、PAR 改造作業時には注意を要する。

肩書・モンスターとは、そのキャラクターが人間ならば肩書の識別子が、モンスターならばモンスター ID となる値だ。 肩書の識別子とは文字列配列 $23C5FA の添字に他ならない。

移動時呪文習得フラグおよび戦闘時コマンド習得フラグとは、そのフラグ位置に対応するコマンドの習得状況を示すビットだ。 これについては別の節で述べる。

直近に指定した戦闘時コマンドのビット配列添字とは、キャラクターが主人公ならば前回指定した戦闘コマンドを指すための値で、 主人公以外ならば「めいれいさせろ」モードでそのキャラクターに指示した戦闘コマンドを指すための値だ。 前回「ホイミ」を指定したとする。このとき、次のターンのコマンド入力時にも「ホイミ」にカーソルが置いてある。

モンスターじいさんに預けるの禁止フラグとは、これが立っているモンスターの仲間キャラクターをモンスターじいさんに預けられないことを意味するものだ。 具体的には、仮にこのフラグが立っている者を預けようとすると、じいさんから「なにやら事情が ありそうじゃ」のような返事をされて承知しない。

ルイーダの酒場に預けるの禁止フラグとは、これが立っている仲間キャラクターをルイーダに預けられないことを意味するものだ。 具体的には、このフラグが立っている者を預けようとすると、その仲間が

  • 人間ならば「まだ やらなくては いけないことが あるんじゃないかしら」、
  • モンスターならば「うーん モンスターさんは うちでは ちょっとね……」

といって、引き取ることを承知しなくなる。

レベルアップ禁止フラグとは、これが立っている仲間キャラクターはレベルが上がらないということを示すものだ。 特に戦闘終了直後の処理に影響する。 初期状態ではパパス、ベラが該当する。

貴重品所持禁止フラグとは、これが立っている仲間キャラクターに貴重なアイテムを所持させないことを示すものだ。 初期状態では子供ビアンカ、パパス、ヘンリー、ベラ、ベビーパンサーが該当する。

道具所持禁止フラグとは、これが立っている仲間キャラクターにアイテムを所持させないことを示すものだ。 初期状態ではパパス、ベラが該当する。

呪文禁止フラグとは、これが立っている仲間キャラクターに対する移動中の呪文コマンド入力を禁止するものだ。 このフラグにより、移動コマンドウィンドウで「じゅもん」選択時にこのキャラクターの名前を列挙しなくなる。 初期状態ではフローラ、パパスが該当する。

装備禁止フラグとは、これが立っている仲間キャラクターに対する移動中の装備変更コマンド入力を禁止するものだ。 このフラグにより、移動コマンドウィンドウで「そうび」を選択時にこのキャラクターの名前を列挙しなくなる。 初期状態ではパパス、ベラが該当する。

死亡を気絶とするフラグとは、HP がゼロになったときの扱いを制御するためのものだ。 簡単に言うと「しんでしまった!」ではなく「きぜつした!」という扱い方をするようになる。 そして HP が 1 の状態でキャラクターを回復させる。 初期状態では主人公、子供ビアンカ、フローラ、ベラ、ベビーパンサーが該当する。

3.4.2. 構造体 $7E2332: 預けてあるモンスターメンバー表現

構造体 $7E2332 は、モンスターじいさんに預けてある仲間モンスターのキャラクターデータを表現する。 モンスターじいさんと交渉したり、戦闘終了後に仲間モンスターをじいさんに送る際にオブジェクト配列が更新される。 同時に $7E2040 配列も更新される。

プログラムはこの構造体をサイズが #$1A バイトであるとして処理する。 メモリレイアウトを次の表に示す。

表 3.14 構造体 $7E2332: 預けてあるモンスターメンバー

オフセット 属性
#$00 $7E2040 構造体 [:#$14] と同じ
#$01
#$02
#$03
#$04
#$05
#$06
#$07
#$08
#$09
#$0A
#$0B
#$0C
#$0D
#$0E
#$0F
#$10
#$11
#$12
#$13
#$14 装備中の武器
#$15 装備中の防具
#$16 装備中の盾
#$17 装備中の兜
#$18 $7E2040 構造体 [#$23:#$25] と同じ
#$19

装備していないものについては、そのアイテム ID に代わってダミーの値が格納される。

構造としては $7E2040 構造体の軽量版とみなせる。 こうすることで、じいさんに預ける必要があるとはいえ、より多くのモンスターを仲間にしておきやすくなる。

3.4.3. 構造体 $7E294A: 預けてある人間メンバー表現

構造体 $7E294A は、ルイーダの酒場にいる人間のキャラクターデータを表現する。 パーティー編成変更の際にキャラクターデータの変換がじいさんのときと同様に行われる。

プログラムはこの構造体をサイズが #$20 バイトであるとして処理する。 メモリレイアウトを次の表に示す。

表 3.15 構造体 $7E294A: 預けてある人間メンバー

オフセット 属性
#$00 $7E2040 構造体 [:#$14] と同じ
#$01
#$02
#$03
#$04
#$05
#$06
#$07
#$08
#$09
#$0A
#$0B
#$0C
#$0D
#$0E
#$0F
#$10
#$11
#$12
#$13
#$14 装備中の武器
#$15 装備中の防具
#$16 装備中の盾
#$17 装備中の兜
#$18 $7E2040 構造体 [#$22:#$28] と同じ
#$19
#$1A
#$1B
#$1C
#$1D
#$1E 調査中
#$1F 調査中