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

4.15.1. 構造体 $7E4025: 基本情報構造体
4.15.2. 構造体 $7E4415: 職業経験構造体
4.15.3. 構造体 $7E45DD: 習得コマンド構造体

この節では仲間のキャラクターを表現するデータ構造体のうち、RAM 内に存在するものについて述べる。 すなわち、基本情報構造体、職業経験構造体、習得コマンド構造体を説明する。

4.15.1. 構造体 $7E4025: 基本情報構造体

呼び名を付けるのが難しいのだが、基本情報構造体とは配列 $7E4025 の要素の型だ。 この構造体はサイズが #$2A バイトであり、次の表に示すような属性で構成されている:

表 4.65 構造体 $7E4025

オフセット 属性
#$00 #$00FF レベル (EOR #$41)
#$01 #$FFFF 経験値 (EOR #$4126)
#$03 #$00FF 経験値最上位バイト
#$04 #$0001 死亡フラグ
#$04 #$0002 どくフラグ
#$04 #$0004 もうどくフラグ
#$04 #$0008 マヒフラグ
#$04 #$0010 ねむりフラグ
#$04 #$3FE0 ちから
#$05 #$7FC0 すばやさ
#$06 #$FF80 かしこさ
#$08 #$001F 職業 ID
#$08 #$00E0 職業レベル
#$09 #$03FF HP
#$0A #$00FC (未使用)
#$0B #$03FF さいだい HP
#$0C #$00FC (未使用)
#$0D #$03FF MP
#$0E #$00FC 最後に使用した移動中のじゅもん(下位 6 ビット)
#$0F #$03FF さいだい MP
#$10 #$07FC みのまもり
#$11 #$0FF8 かっこよさ
#$12 #$0010 ルイーダに預けるの禁止フラグ
#$12 #$00E0 最後に使用した移動中のじゅもん(上位 3 ビット)
#$13 #$00FF 最後に使用した戦闘中のじゅもん
#$14 #$00FF 最後に使用した戦闘中のとくぎ
#$15 #$00FF 装備状態
#$16 #$00FF 名前文字列 #$00
#$17 #$00FF 名前文字列 #$01
#$18 #$00FF 名前文字列 #$02
#$19 #$00FF 名前文字列 #$03
#$1A #$00FF 名前文字列 #$04
#$1B #$00FF 名前文字列 #$05
#$1C #$00FF 名前文字列 #$06
#$1D #$00FF 名前文字列 #$07
#$1E #$00FF 所持品 #$00
#$1F #$00FF 所持品 #$01
#$20 #$00FF 所持品 #$02
#$21 #$00FF 所持品 #$03
#$22 #$00FF 所持品 #$04
#$23 #$00FF 所持品 #$05
#$24 #$00FF 所持品 #$06
#$25 #$00FF 所持品 #$07
#$26 #$00FF 所持品 #$08
#$27 #$00FF 所持品 #$09
#$28 #$00FF 所持品 #$0A
#$29 #$00FF 所持品 #$0B

上の表で(未使用)の属性は、プログラムからの参照がない、いわば属性の隙間だ。 以下に各属性の概要を記す。

レベル

この属性値は仲間キャラクターのレベルの値と定数 #$41 との排他的論理和を表す。

キャラクターのレベルについては 4.18 レベルアップ で述べる。

経験値

仲間キャラクターの経験値は 3 バイト長の値で表現する。 ただし、下位 2 バイトの値は定数 #$4126 との排他的論理和の値を保持するようにしている。 チートツールのユーザーでいきなりレベルアップをしようと企む者は、この点を留意しなければならない。 可能ならばデバッグメニューを駆使したほうがよいだろう。

死亡フラグ, どくフラグ, もうどくフラグ, マヒフラグ, ねむりフラグ

それぞれが仲間キャラクターの異常状態を示すブーリアン値属性だ。 物によっては同時に 1 とならない属性の組み合わせがある。 例えば死亡フラグが 1 ならば、その他の異常状態フラグはいずれも 0 とするようにしている。

4.19 戦闘キャラクター構造体 で関連属性を述べる。

ちから, すばやさ, かしこさ, みのまもり, かっこよさ, さいだい HP, さいだい MP

一般的には、これらの属性値は「つよさ」メニューで確認できる内容の値と異なる。 対象キャラクターの職業と装備品にも依存するからだ。

HP, MP

それぞれ仲間キャラクターの現在の HP と MP の値を示す属性だ。

職業 ID

キャラクターの現在就いている職業を表す値を取る属性だ。 職業については 4.12 職業 で述べる。

職業レベル

キャラクターの現在就いている職業の職業レベルを 0..7 で表す値を取る属性だ。 「つよさ」ウィンドウで確認できる星の数より 1 小さい。

最後に使用した移動中のじゅもん, 最後に使用した戦闘中のじゅもん, 最後に使用した戦闘中のとくぎ

最後にキャラクターが使用したそれぞれのコマンドを記憶しておくための属性だ。 値の型はコマンド ID ではなくコマンド表示位置 ID だ。 後述の 4.15.3 構造体 $7E45DD: 習得コマンド構造体 の対応コマンドのベースアドレスからの「距離」と解釈してもよい。

ルイーダに預けるの禁止フラグ, 装備状態

それぞれの属性の意味は 表 4.68 構造体 $C8BD12 の対応するそれぞれの属性と同じだ。

名前文字列 k (k = #$00..#$07)

この 8 バイトでキャラクターの名前を表現する文字コードの列を保持する。 文字列については 4.2 文字列 で述べる。

所持品 k (k = #$00..#$0B)

キャラクターの道具袋に入っているアイテムを順番に表す配列だ。 アイテムについては 4.13 アイテム で述べる。

4.15.2. 構造体 $7E4415: 職業経験構造体

職業経験構造体とは、キャラクターが戦闘で得た職業経験値を記録するためのオブジェクトを表現する型だ。

構造体の物理的なレイアウトは次の表のようになっている。 構造体の属性のそれぞれが、対応する職業の職業経験値を属性値として取る。 この #$14 バイト長のオブジェクトがアドレス $7E4415 に配列してある。

表 4.66 構造体 $7E4415

オフセット 属性
#$00 #$00FF せんし職業経験値
#$01 #$00FF ぶとうか職業経験値
#$02 #$00FF まほうつかい職業経験値
#$03 #$00FF そうりょ職業経験値
#$04 #$007F おどりこ職業経験値
#$04 #$7F80 とうぞく職業経験値
#$05 #$7F80 まものつかい職業経験値
#$06 #$7F80 しょうにん職業経験値
#$07 #$7F80 あそびにん職業経験値
#$08 #$7F80 バトルマスター職業経験値
#$09 #$7F80 まほうせんし職業経験値
#$0A #$FF80 パラディン職業経験値
#$0C #$01FF けんじゃ職業経験値
#$0D #$01FE レンジャー職業経験値
#$0E #$01FE スーパースター職業経験値
#$0F #$01FE ゆうしゃ職業経験値
#$10 #$03FE ドラゴン職業経験値
#$11 #$07FC はぐれメタル職業経験値
#$12 #$00F8 (未使用)

4.12.1 構造体 $C41C3E: 職業構造体 で述べるように、このメモリレイアウトは職業構造体で指定されている。

4.15.3. 構造体 $7E45DD: 習得コマンド構造体

習得コマンド構造体とは、キャラクターが移動中または戦闘中に実行することができるコマンドを表現するオブジェクト型だ。

構造体の物理的なレイアウトは次の表のようになっている。 構造体の属性の全てが 1 ビットで表現されていて、意味としてはブーリアン値属性の集合だ。 いずれも値が 1 ならば対応するコマンドを利用可能であることを意味する。 この #$14 バイト長のオブジェクトがアドレス $7E45DD に配列してある。

表 4.67 構造体 $7E45DD

オフセット 属性
#$00 #$01 ホイミ
#$00 #$02 キアリー
#$00 #$04 べホイミ
#$00 #$08 ザオラル
#$00 #$10 べホマ
#$00 #$20 ザオリク
#$00 #$40 べホマラー
#$00 #$80 べホマズン
#$01 #$01 メラ
#$01 #$02 ギラ
#$01 #$04 ヒャド
#$01 #$08 バギ
#$01 #$10 ザキ
#$01 #$20 イオ
#$01 #$40 メラミ
#$01 #$80 べギラマ
#$02 #$01 ヒャダルコ
#$02 #$02 バギマ
#$02 #$04 ザラキ
#$02 #$08 イオラ
#$02 #$10 ライデイン
#$02 #$20 メラゾーマ
#$02 #$40 べギラゴン
#$02 #$80 マヒャド
#$03 #$01 バギクロス
#$03 #$02 ザラキーマ
#$03 #$04 イオナズン
#$03 #$08 ギガデイン
#$03 #$10 ミナデイン
#$03 #$20 キアリク
#$03 #$40 ニフラム
#$03 #$80 マホトーン
#$04 #$01 マホトラ
#$04 #$02 マホターン
#$04 #$04 マホキテ
#$04 #$08 マホカンタ
#$04 #$10 マジックバリア
#$04 #$20 ルカニ
#$04 #$40 ルカナン
#$04 #$80 スカラ
#$05 #$01 スクルト
#$05 #$02 ラリホー
#$05 #$04 ラリホーマ
#$05 #$08 マヌーサ
#$05 #$10 メダパニ
#$05 #$20 フバーハ
#$05 #$40 バイキルト
#$05 #$80 アストロン
#$06 #$01 ドラゴラム
#$06 #$02 メガンテ
#$06 #$04 メガザル
#$06 #$08 バシルーラ
#$06 #$10 パルプンテ
#$06 #$20 マダンテ
#$06 #$40 ひゃくれつなめ
#$06 #$80 ビッグバン
#$07 #$01 つめたいいき
#$07 #$02 あまいいき
#$07 #$04 かえんのいき
#$07 #$08 どくのいき
#$07 #$10 やけつくいき
#$07 #$20 あしばらい
#$07 #$40 せいけんづき
#$07 #$80 まわしげり
#$08 #$01 きゅうしょづき
#$08 #$02 かまいたち
#$08 #$04 ともえなげ
#$08 #$08 みかわしきゃく
#$08 #$10 ばくれつけん
#$08 #$20 みなごろし
#$08 #$40 きあいため
#$08 #$80 はやぶさぎり
#$09 #$01 もろばぎり
#$09 #$02 まじんぎり
#$09 #$04 しっぷうづき
#$09 #$08 ちからため
#$09 #$10 あそび
#$09 #$20 おたけび
#$09 #$40 なめまわし
#$09 #$80 たいあたり
#$0A #$01 ぱふぱふ
#$0A #$02 ぐんたいよび
#$0A #$04 まねまね
#$0A #$08 うけながし
#$0A #$10 さそうおどり
#$0A #$20 マホトラおどり
#$0A #$40 ふしぎなおどり
#$0A #$80 しのおどり
#$0B #$01 メダパニダンス
#$0B #$02 おどりふうじ
#$0B #$04 へんしん
#$0B #$08 とびひざげり
#$0B #$10 しんくうぎり
#$0B #$20 ドラゴンぎり
#$0B #$40 ゾンビぎり
#$0B #$80 がんせきおとし
#$0C #$01 さみだれけん
#$0C #$02 メタルぎり
#$0C #$04 みがわり
#$0C #$08 グランドクロス
#$0C #$10 しんくうは
#$0C #$20 つなみ
#$0C #$40 すてみ
#$0C #$80 しょうかん
#$0D #$01 におうだち
#$0D #$02 じわれ
#$0D #$04 すなけむり
#$0D #$08 じひびき
#$0D #$10 いしつぶて
#$0D #$20 だいぼうぎょ
#$0D #$40 つきとばし
#$0D #$80 ひばしら
#$0E #$01 もうどくのきり
#$0E #$02 おいかぜ
#$0E #$04 ぶきみなひかり
#$0E #$08 まぶしいひかり
#$0E #$10 ハッスルダンス
#$0E #$20 いなずま
#$0E #$40 ムーンサルト
#$0E #$80 メガザルダンス
#$0F #$01 せいれいのうた
#$0F #$02 かえんぎり
#$0F #$04 いてつくはどう
#$0F #$08 いなずまぎり
#$0F #$10 めいそう
#$0F #$20 マヒャドぎり
#$0F #$40 ジゴスパーク
#$0F #$80 マグマ
#$10 #$01 ギガスラッシュ
#$10 #$02 こごえるふぶき
#$10 #$04 ひのいき
#$10 #$08 しゃくねつ
#$10 #$10 こおりのいき
#$10 #$20 かがやくいき
#$10 #$40 はげしいほのお
#$10 #$80
#$11 #$01 ルーラ
#$11 #$02 リレミト
#$11 #$04 インパス
#$11 #$08 トラマナ
#$11 #$10 トヘロス
#$11 #$20 フローミ
#$11 #$40 レミラーマ
#$11 #$80 タカのめ
#$12 #$01 ねる
#$12 #$02 とうぞくのはな
#$12 #$04 おおごえ
#$12 #$08 しのびあし
#$12 #$10 くちぶえ
#$12 #$20 あなほり
#$12 #$40 おもいだす
#$12 #$80 もっとおもいだす
#$13 #$01 ふかくおもいだす
#$13 #$02 わすれる
#$13 #$FC (未使用)

コマンドの配列規則は配列 $FFC69D に準じている。 コマンド入力ウィンドウでのメニュー項目位置と対応していることが重要だ。