この節では仲間のキャラクターを表現するデータ構造体三種について述べる。
また、本書全体を通じて構造体の名称を、その型のオブジェクトが格納される配列の先頭アドレスにちなみ、
例えば「$7E2040
構造体」や「構造体 $7E2040
」のように呼称する。
さて、本プログラムでは何らかの理由で三種類の仲間キャラクターデータの表現形式が定義されている。
もっとも言及頻度が高いのは $7E2040
構造体だ。
これは主人公と、彼が引き連れている馬車内外のパーティーメンバー全員に共通するデータを表現するための構造体だ。
そして、パーティー人数が多過ぎる状況では、あぶれた仲間はモンスターじいさんまたはルイーダの酒場に待機することになる。
この待機しているキャラクターたちを表現するのに、別途専用の構造体
$7E2332
または $7E294A
に変換してデータを保持する。
妙に複雑な仕組みになっているが、あとで見るようにこれらの構造体のサイズの違いが
RAM の節約に一役買うというわけだ。
さらに戦闘中にしか用いられることのない構造体もある。 これについては 3.5 戦闘キャラクター構造体 で解説する。
構造体 $7E2040
は、パーティーにいるキャラクターデータを表現する。
データは移動中だけでなく、戦闘中にも属性のいくつかがアクセスされる。
プログラムはこの構造体をサイズが #$2A
バイトであるとして処理する。
メモリーレイアウトを次の表に示す。
表 3.13 構造体 $7E2040: パーティーメンバー
オフセット | 桁 | 属性 |
---|---|---|
#$00
|
#$3F
|
キャラクター識別値 |
#$40 | 戦闘コマンド入力抑止フラグ | |
#$80 | モンスターフラグ | |
#$01
|
#$03
|
同一種モンスター識別値 |
#$04 | MP が呪われているフラグ | |
#$08 | HP が呪われているフラグ | |
#$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 の状態でキャラクターを回復させる。 初期状態では主人公、子供ビアンカ、フローラ、ベラ、ベビーパンサーが該当する。
構造体 $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
構造体の軽量版とみなせる。
こうすることで、じいさんに預ける必要があるとはいえ、より多くのモンスターを仲間にしておきやすくなる。
構造体 $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
|
調査中 |