4.16. 仲間キャラクターの特性データ

4.16.1. 構造体 $C8BD12: 仲間キャラクター特性
4.16.2. 仲間キャラクター構造体メソッド

この節では仲間キャラクターそれぞれの特性を表現するデータ構造について述べる。 ここで言うキャラクター特性とは、仲間キャラクターそれぞれの静的な性質を定義したオブジェクトのことを意味するものであり、 物理的にはアドレス $C8BD12 に存在する配列の要素型を意味する。

なお、仲間キャラクターそれぞれのレベルアップに関する特徴もモデルによってはキャラクター特性の部分ではあるが、 本書ではそれについては 4.20 レベルアップ で取り扱う。

4.16.1. 構造体 $C8BD12: 仲間キャラクター特性

仲間キャラクター特性構造体とは、サイズが #$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 とは、このキャラクターがレベルを上がるときの状態変化を管理するオブジェクトの ID を値に取る属性だ。

レベルアップについては 4.20 レベルアップ で述べる。

ルイーダで別れるのを許可するフラグ

ルイーダで別れるのを許可するフラグとは、このキャラクターをルイーダの酒場に預けてあるときに別れられるかどうかを示す値を取るブーリアン型属性だ。

耐性 k (k = #$00..#$16)

耐性は、値の範囲の違いがなぜかあることを除けば、モンスター構造体のそれと同じ概念の属性だ。 4.14.1 構造体 $C20154: モンスター の耐性の記述を参照して欲しい。

コマンド選択判断, 複数回, 自動回復, みかわし, コマンド決定戦略

これらの属性についても、モンスター構造体のそれぞれと同じ概念の属性だ。 4.14.1 構造体 $C20154: モンスター の耐性の記述を参照して欲しい。

遊び分類

遊び分類とは、このキャラクターが「あそぶ」戦闘コマンドを直接的または間接的に発動するときに、 どのような遊びが起こり得るかを表現するオブジェクト配列 $C22D54 ID を値とする属性だ。

付録 B データ にデータを収録した。

所持品 k (k = 0..4)

所持品とは、このキャラクターを仲間にした時点でのその人物の道具袋にあるアイテム ID を表す属性だ。

アイテムについては 4.13 アイテム で述べる。

装備グループ

装備グループとは、このキャラクターが装備可能であるかどうかを判定するために、 対象となるアイテムオブジェクトの装備グループ属性と照合するための値だ。

装備状態

装備状態とは、このキャラクターを仲間にした時点で所持品属性の示すアイテムのうちのどれを本当に装備しているかを表す値を取る属性だ。 形式としては、所持品配列の先頭 0 から何番目までの品物までを装備しているかを表現する。

移動モードスプライト

移動モードスプライトとは、移動モードにおいてこのキャラクターを表現するスプライトセットを特定する ID を表す属性だ。 詳細不明。

戦闘モードスプライト, 戦闘モードパレット

これらの属性は、このキャラクターを戦闘モードにおいて画面上に描画する画像を特定する属性だ。 「モシャス」を使えるモンスターの変身後の姿はこの属性で決まる。

スライム系

スライム系とは、このキャラクターがスライム格闘場に参戦できることや、 同控室に出入りできるかどうかを表すブーリアン型属性だ。

(キャラクター分類)

参照箇所が見当たらないので、詳細不明。

4.16.2. 仲間キャラクター構造体メソッド

$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 となっているものは、対応するレジスターの値で仲間キャラクター配列の添字をそれぞれ指定することを意味する。 また、「固定引数で指定する」とは、固定バイトの値が入力元の種別を指定することを意味する。