この節では仲間キャラクターそれぞれの特性を表現するデータ構造について述べる。
ここで言うキャラクター特性とは、仲間キャラクターそれぞれの静的な性質を定義したオブジェクトのことを意味するものであり、
物理的にはアドレス $C8BD12
に存在する配列の要素型を意味する。
なお、仲間キャラクターそれぞれのレベルアップに関する特徴もモデルによってはキャラクター特性の部分ではあるが、 本書ではそれについては 4.20 レベルアップ で取り扱う。
仲間キャラクター特性構造体とは、サイズが #$1B
バイトであり、オブジェクトのメモリーレイアウトが次の表で示されるような構造体だ。
この型のオブジェクトがアドレス $C8BD12
から 82 個直列している。
これらのオブジェクトはキャラクターがパーティーに参入した時点の状態、ルイーダの酒場で許可する操作の決定、戦闘時のキャラクターの性質として参照される。
表 4.68 構造体 $C8BD12
オフセット | 桁 | 属性 |
---|---|---|
#$00
|
#$FFFF
|
名前 |
#$02
|
#$FFFF
|
肩書 |
#$04
|
#$0003
|
性別 |
#$04
|
#$0004
|
(モンスターフラグ) |
#$04
|
#$0008
|
ルイーダに預けるのを禁止するフラグ |
#$04
|
#$0010
|
(未使用) |
#$04
|
#$0060
|
命令分類 |
#$04
|
#$0080
|
(未使用) |
#$05
|
#$00FF
|
レベル初期値 |
#$06
|
#$00FF
|
レベルアップ ID |
#$07
|
#$0001
|
(未使用) |
#$07
|
#$0002
|
ルイーダで別れるのを許可するフラグ |
#$07
|
#$000C
|
耐性 #$00 : メラ |
#$07
|
#$0030
|
耐性 #$01 : ギラ |
#$07
|
#$00C0
|
耐性 #$02 : イオ |
#$08
|
#$0003
|
耐性 #$03 : ヒャド |
#$08
|
#$000C
|
耐性 #$04 : バギ |
#$08
|
#$0030
|
耐性 #$05 : デイン |
#$08
|
#$00C0
|
耐性 #$06 : マヌーサ |
#$09
|
#$0003
|
耐性 #$07 : ラリホー |
#$09
|
#$000C
|
耐性 #$08 : ザキ |
#$09
|
#$0030
|
耐性 #$09 : ニフラム |
#$09
|
#$00C0
|
耐性 #$0A : マホトラ |
#$0A
|
#$0003
|
耐性 #$0B : マホトーン |
#$0A
|
#$000C
|
耐性 #$0C : メダパニ |
#$0A
|
#$0030
|
耐性 #$0D : ルカニ |
#$0A
|
#$00C0
|
耐性 #$0E : (未使用) |
#$0B
|
#$0003
|
耐性 #$0F : 毒 |
#$0B
|
#$000C
|
耐性 #$10 : 休み |
#$0B
|
#$0030
|
耐性 #$11 : おどりふうじ |
#$0B
|
#$00C0
|
耐性 #$12 : 炎 |
#$0C
|
#$0003
|
耐性 #$13 : 吹雪 |
#$0C
|
#$000C
|
耐性 #$14 : 叩き |
#$0C
|
#$0030
|
耐性 #$15 : マヒ |
#$0C
|
#$00C0
|
耐性 #$16 : ぐんたい |
#$0D
|
#$0003
|
コマンド選択判断 |
#$0D
|
#$000C
|
複数回 |
#$0D
|
#$0030
|
自動回復 |
#$0D
|
#$01C0
|
みかわし |
#$0E
|
#$001E
|
コマンド決定戦略 |
#$0E
|
#$07E0
|
遊び分類 |
#$0F
|
#$00F8
|
(未使用) |
#$10
|
#$00FF
|
所持品 0 |
#$11
|
#$00FF
|
所持品 1 |
#$12
|
#$00FF
|
所持品 2 |
#$13
|
#$00FF
|
所持品 3 |
#$14
|
#$00FF
|
所持品 4 |
#$15
|
#$001F
|
装備グループ |
#$15
|
#$00E0
|
装備状態 |
#$16
|
#$0FFF
|
移動モードスプライト |
#$17
|
#$0FF0
|
戦闘モードスプライト |
#$18
|
#$3FF0
|
戦闘モードパレット |
#$19
|
#$0040
|
スライム系 |
#$19
|
#$0080
|
(未使用) |
#$1A
|
#$00FF
|
(キャラクター分類) |
上の表で(未使用)等の括弧付きの属性は、オブジェクトによって値が異なっているかもしれないが、プログラムからの参照がないものだ。 特に値がどのオブジェクトもゼロであるような属性については、付録の CSV ファイルでの記載を省略する。 以下に各属性の概要を記す。
名前とは、このキャラクターのオリジナルの名前を表す文字列の ID を値とする属性だ。
文字列については 4.2 文字列 で述べる。
肩書は、このキャラクターが人間かモンスターかで意味が変わる属性だが、いずれも場合でも文字列 ID を値とする。 人間の場合にはその人物の設定を簡単に表現する言葉であり、モンスターの場合にはそのモンスター名だ。
性別もこのキャラクターが人間かモンスターかで意味が変わる属性だ。 値と意味については前作に準拠する。
モンスターフラグとは、このキャラクターがモンスターであるかどうかを示す値を取るブーリアン型属性だ。 データとしては設定されているが、プログラムから参照されてはいないようだ。
ルイーダに預けるのを禁止するフラグとは、このキャラクターをルイーダが預かり拒否するかどうかを示す値を取るブーリアン型属性だ。 主人公自身だけでなく、バーバラをどうしても預けられないのは、この属性値が 1 であることによる。
命令分類は詳細不明の属性だ。 全キャラクターについて値が 1 に設定されている。 プログラムを見ると、この値が 2 のときには例えば命名神で名前を変えられなかったり、 教会のお告げでレベルアップ経験値を教えてもらえなくなる等、 前作の NPC の扱いを思い起こさせるようなことを実現させるための属性であったのかもしれない。
レベル初期値とは、このキャラクターを仲間にした時点でのその人物のレベルの値を表現する属性だ。
レベルアップ ID とは、このキャラクターがレベルを上がるときの状態変化を管理するオブジェクトの ID を値に取る属性だ。
レベルアップについては 4.20 レベルアップ で述べる。
ルイーダで別れるのを許可するフラグとは、このキャラクターをルイーダの酒場に預けてあるときに別れられるかどうかを示す値を取るブーリアン型属性だ。
#$00
..#$16
)
耐性は、値の範囲の違いがなぜかあることを除けば、モンスター構造体のそれと同じ概念の属性だ。
4.14.1 構造体 $C20154
: モンスター の耐性の記述を参照して欲しい。
これらの属性についても、モンスター構造体のそれぞれと同じ概念の属性だ。
4.14.1 構造体 $C20154
: モンスター の耐性の記述を参照して欲しい。
遊び分類とは、このキャラクターが「あそぶ」戦闘コマンドを直接的または間接的に発動するときに、
どのような遊びが起こり得るかを表現するオブジェクト配列 $C22D54
ID を値とする属性だ。
付録 B データ にデータを収録した。
所持品とは、このキャラクターを仲間にした時点でのその人物の道具袋にあるアイテム ID を表す属性だ。
アイテムについては 4.13 アイテム で述べる。
装備グループとは、このキャラクターが装備可能であるかどうかを判定するために、 対象となるアイテムオブジェクトの装備グループ属性と照合するための値だ。
装備状態とは、このキャラクターを仲間にした時点で所持品属性の示すアイテムのうちのどれを本当に装備しているかを表す値を取る属性だ。 形式としては、所持品配列の先頭 0 から何番目までの品物までを装備しているかを表現する。
移動モードスプライトとは、移動モードにおいてこのキャラクターを表現するスプライトセットを特定する ID を表す属性だ。 詳細不明。
これらの属性は、このキャラクターを戦闘モードにおいて画面上に描画する画像を特定する属性だ。 「モシャス」を使えるモンスターの変身後の姿はこの属性で決まる。
スライム系とは、このキャラクターがスライム格闘場に参戦できることや、 同控室に出入りできるかどうかを表すブーリアン型属性だ。
参照箇所が見当たらないので、詳細不明。
$C8BD12
構造体の各属性にアクセスするためのサブルーチンの一覧を次に示す。
専用サブルーチンと汎用サブルーチンをどちらも用いるが、前者は後者で実装することが可能だ。
表 4.69 仲間キャラクター構造体メソッド
サブルーチン | 固定引数長 | 入力 | 機能 |
---|---|---|---|
$C43B76
|
3 | 固定引数で指定 | 肩書を取得する |
$C43C0B
|
2 | 固定引数で指定 | ルイーダで別れるのを許可するか問い合わせる |
$C44FA1
|
3 | 固定引数で指定 | 名前を取得する |
$C450A4
|
3 | 固定引数で指定 | 性別を取得する |
$C45DAF
|
2 | 固定引数で指定 | コマンド選択判断を取得する |
$C45D7A
|
2 | 固定引数で指定 | 命令分類を取得する |
$C45DE4
|
2 | 固定引数で指定 | 複数回を取得する |
$C45E19
|
2 | 固定引数で指定 | 自動回復取得する |
$C45E4E
|
2 | 固定引数で指定 | みかわしを取得する |
$C45E83
|
2 | 固定引数で指定 | コマンド決定戦略を取得する |
$C92AA9
|
8 | y | 2 バイト型属性値を取得する |
$C92AB5
|
8 | x | 2 バイト型属性値を取得する |
$C92BD4
|
7 | x | オブジェクトのアドレスを取得する |
$C92C2D
|
11 | y | ビットフィールド型属性値を取得する |
$C92C39
|
11 | x | ビットフィールド型属性値を取得する |
入力が x または y となっているものは、対応するレジスターの値で仲間キャラクター配列の添字をそれぞれ指定することを意味する。 また、「固定引数で指定する」とは、固定バイトの値が入力元の種別を指定することを意味する。