この節ではモンスターデータについて述べる。
ここで言うモンスターデータとは、モンスターそれぞれの静的な性質を定義したオブジェクトのことを意味するものであり、
物理的にはアドレス $C20154
に存在する配列を構成する要素の型のことだ。
戦闘員としてのモンスターデータについては 4.21 戦闘キャラクター構造体 で述べる。
モンスター構造体とは、サイズが #$2A
バイトであり、オブジェクトのメモリーレイアウトが次の表で示されるような構造体だ。
この型のオブジェクトがアドレス $C20154
から 256 個直列している。
これらのモンスターオブジェクトは戦闘員オブジェクトの初期化や属性値の再設定の目的で参照されることになる。 あるいは、戦闘員としてのモンスターの状態に依存しないような属性、例えば使えるコマンドの集合、耐性、経験値といった量が格納されている。
表 4.54 構造体 $C20154
オフセット | 桁 | 属性 |
---|---|---|
#$00
|
#$01FF
|
コマンド 0 |
#$01
|
#$0002
|
コマンドグループ制約フラグ 0 |
#$01
|
#$000C
|
耐性 #$00 |
#$01
|
#$00F0
|
コマンドアニメーション 0 |
#$02
|
#$01FF
|
コマンド 1 |
#$03
|
#$0002
|
コマンドグループ制約フラグ 1 |
#$03
|
#$000C
|
耐性 #$01 |
#$03
|
#$00F0
|
コマンドアニメーション 1 |
#$04
|
#$01FF
|
コマンド 2 |
#$05
|
#$0002
|
コマンドグループ制約フラグ 2 |
#$05
|
#$000C
|
耐性 #$02 |
#$05
|
#$00F0
|
コマンドアニメーション 2 |
#$06
|
#$01FF
|
コマンド 3 |
#$07
|
#$0002
|
コマンドグループ制約フラグ 3 |
#$07
|
#$000C
|
耐性 #$03 |
#$07
|
#$00F0
|
コマンドアニメーション 3 |
#$08
|
#$01FF
|
コマンド 4 |
#$09
|
#$0002
|
コマンドグループ制約フラグ 4 |
#$09
|
#$000C
|
耐性 #$04 |
#$09
|
#$00F0
|
コマンドアニメーション 4 |
#$0A
|
#$01FF
|
コマンド 5 |
#$0B
|
#$0002
|
コマンドグループ制約フラグ 5 |
#$0B
|
#$000C
|
耐性 #$05 |
#$0B
|
#$00F0
|
コマンドアニメーション 5 |
#$0C
|
#$01FF
|
すばやさ |
#$0D
|
#$00FE
|
レベル |
#$0E
|
#$03FF
|
攻撃力 |
#$0F
|
#$001C
|
アイテム確率 |
#$0F
|
#$00E0
|
コマンド決定戦略 |
#$10
|
#$03FF
|
守備力 |
#$11
|
#$001C
|
みかわし |
#$11
|
#$00E0
|
仲間確率 |
#$12
|
#$0003
|
耐性 #$06 |
#$12
|
#$000C
|
耐性 #$07 |
#$12
|
#$FFF0
|
ゴールド |
#$14
|
#$01FF
|
仲間 AI 推奨コマンド 0 |
#$15
|
#$0006
|
耐性 #$08 |
#$15
|
#$0018
|
耐性 #$09 |
#$15
|
#$0060
|
耐性 #$0A |
#$15
|
#$0080
|
メタル系 |
#$16
|
#$01FF
|
仲間 AI 推奨コマンド 1 |
#$17
|
#$0006
|
耐性 #$0B |
#$17
|
#$0018
|
耐性 #$0C |
#$17
|
#$0060
|
耐性 #$0D |
#$17
|
#$0080
|
ドラゴン系 |
#$18
|
#$0003
|
耐性 #$0E |
#$18
|
#$000C
|
耐性 #$0F |
#$18
|
#$0030
|
耐性 #$10 |
#$18
|
#$00C0
|
耐性 #$11 |
#$19
|
#$0003
|
耐性 #$12 |
#$19
|
#$000C
|
耐性 #$13 |
#$19
|
#$0030
|
耐性 #$14 |
#$19
|
#$00C0
|
耐性 #$15 |
#$1A
|
#$0003
|
耐性 #$16 |
#$1A
|
#$000C
|
耐性 #$17 |
#$1A
|
#$0030
|
耐性 #$18 |
#$1A
|
#$00C0
|
耐性 #$19 |
#$1B
|
#$0003
|
耐性 #$1A |
#$1B
|
#$000C
|
耐性 #$1B |
#$1B
|
#$0030
|
耐性 #$1C |
#$1B
|
#$00C0
|
耐性 #$1D |
#$1C
|
#$0003
|
耐性 #$1E |
#$1C
|
#$000C
|
初期確率 |
#$1C
|
#$0010
|
ゾンビ系 |
#$1C
|
#$0020
|
そら系 |
#$1C
|
#$0040
|
(スライム系) |
#$1C
|
#$0080
|
(未使用) |
#$1D
|
#$0003
|
コマンド選択判断 |
#$1D
|
#$000C
|
複数回 |
#$1D
|
#$0030
|
自動回復 |
#$1D
|
#$00C0
|
集中攻撃 |
#$1E
|
#$00FF
|
スプライト |
#$1F
|
#$00FF
|
MP |
#$20
|
#$00FF
|
アイテム |
#$21
|
#$03FF
|
パレット |
#$22
|
#$0004
|
初期状態 |
#$22
|
#$0078
|
コマンドアニメーション 6 |
#$22
|
#$FF80
|
(未使用) |
#$24
|
#$FFFF
|
HP |
#$26
|
#$FFFF
|
経験値 |
#$28
|
#$FFFF
|
名前文字列 ID |
(未使用)等の括弧付きの属性は、オブジェクトによって値が異なっているかもしれないが、プログラムからの参照がないものだ。 付録の CSV ファイルではこれらの属性は優先して省略する。 以下に各属性の概要を記す。
コマンドとは、このモンスターが戦闘中にとり得る戦闘コマンド の ID を値とする属性だ。
コマンドグループ制約フラグとはブーリアン型の属性で、次のような性質がある。 同一ターン内において、このモンスターが所属するグループ内の他のモンスターが既にコマンド k を実行して(それが成功した?)場合には、 このモンスターはコマンド k を実行することを禁止することを示す。
例を挙げると、デススタッフのコマンド 1 は「こごえるふぶき」だ。 デススタッフの群れが無遠慮に吹雪を吐いてくるのは、このコマンドに対応するグループ制約フラグの値が 0 であることから来ている。
#$00
..#$1E
)
耐性とは、このモンスターの戦闘コマンドに対する耐久度を示す指標を値とする属性だ。 取り得る値は 0..3 であり、数値が高いほど耐久度が高い(ただし耐久度の意味はコマンドの耐性分類による)。 数値と耐性の対応関係については 表 4.97 系統分類 のとおり。
コマンドアニメーション k とは、このモンスターがコマンド k を実行するときのアニメーションパターンを指示する値を取る属性だ。 グループ制約や選択能力の都合上、k の値は 6 のものまで存在する。 アニメーションについては別の節で述べる。
すばやさとは、このモンスターのすばやさを値に取る属性だ。 この戦闘員オブジェクトの対応属性に割り当てられる。
レベルとは、このモンスターのレベルを値に取る属性だ。 このモンスターが戦闘終了後に立ち上がる必要条件の他に、ある種のコマンドの効果を決定するためにも参照される。
攻撃力とは、このモンスターの攻撃力を値に取る属性だ。 この属性値は戦闘員オブジェクトの対応属性に割り当てられる。
アイテム確率とは、戦闘終了後にこのモンスターが(他に条件が加わらないときの)宝箱を落とす確率を決定する値の配列の添字を値とする属性だ。
その配列とは $C2B1C3
であり、その要素らが意味するところは次の表のようになる:
コマンド決定戦略とは、このモンスターが自身の実行するコマンドの選択傾向を表す属性だ。 取り得る値は 0..7 であり、0..3 と 4..7 とで意味合いが異なる。
値が 0..3 であれば、配列 $C24549
で決められた確率分布表に従う抽選でコマンドを決める。
各値を 256 で割ると、この確率変数に対応するコマンドを採用する確率が得られる。
ただし、同一グループ制約があり先約済みであれば、その項目を選択失敗とする。
表 4.56 コマンド選択確率分布
ID | コマンド 0 | コマンド 1 | コマンド 2 | コマンド 3 | コマンド 4 | コマンド 5 |
---|---|---|---|---|---|---|
0 | 43 | 42 | 43 | 43 | 42 | 43 |
1 | 68 | 58 | 48 | 38 | 27 | 17 |
2 | 200 | 40 | 8 | 4 | 3 | 1 |
3 | 70 | 70 | 70 | 16 | 15 | 15 |
値が 4..7 であれば、モンスターの所属グループ上のローテーションでコマンドを決める。
このときは配列 $C24549
の値をマスクとして用いる
(ビットに対応する項目しか抽選しないようにする)。
表 4.57 コマンド選択確率
ID | コマンド 0 | コマンド 1 | コマンド 2 | コマンド 3 | コマンド 4 | コマンド 5 |
---|---|---|---|---|---|---|
4 |
#$01
|
#$02
|
#$04
|
#$08
|
#$10
|
#$20
|
5 |
#$03
|
#$0C
|
#$30
|
#$03
|
#$0C
|
#$30
|
6 |
#$01
|
#$3E
|
#$01
|
#$3E
|
#$01
|
#$3E
|
7 |
#$01
|
#$02
|
#$04
|
#$08
|
#$10
|
#$20
|
守備力とは、このモンスターの攻撃力を値に取る属性だ。 この属性値は戦闘員オブジェクトの対応属性に割り当てられる。
みかわしとは、このモンスターが戦闘相手から直接攻撃系統のコマンド、 厳密に言えばみかわし属性値が 1 のコマンドを実行されたときに、 それを身のこなしで避ける度合いを表現する値を取る属性だ。
この属性値は、みかわしの発生する確率を決定する配列 $C27001
の添字に他ならない。
この値と 0 以上 #$C0
以下の範囲にある乱数との大小比較でみかわし発生を決める。
仲間確率とは、戦闘終了後にこのモンスターが(他に条件が加わらないときの)立ち上がる確率を制御する値の配列の添字を値とする属性だ。
その配列とは $C2B502
であり、その要素らが意味するところは次の表のようになる。
表 4.59 仲間確率
ID | 1 頭目確率 | 2 頭目確率 | 3 頭目確率 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1/256 | 0 | 0 |
2 | 1/256 | 1/1024 | 1/1024 |
3 | 1/64 | 1/1024 | 1/1024 |
4 | 1/32 | 1/256 | 1/256 |
5 | 1/16 | 1/256 | 1/256 |
6 | 1/4 | 1/128 | 1/256 |
7 | 1/2 | 1/16 | 1/128 |
前作同様、既に同種のモンスターを仲間にしているときには確率が低くなる。
ゴールドとは、このモンスターを倒すことで得られるゴールドの金額を値として取る属性だ。 とどめを刺すときのコマンドの戦果逸失フラグ属性が 0 であるときに、獲得総額に加算される。
仲間 AI 推奨コマンドとは、このモンスターに対する最適コマンドを検討する処理において、 その評価値を倍増するようなものの ID を保持する属性だ。
モンスターデータを見ると、この属性は不規則的な存在であるようだ。 AI のコマンド決定処理が込み入っているので、 こういうものがなければメタル系モンスターに「メタルぎり」を選択しないものと思われる。
メタル系とは、このモンスターがメタルのような性質があることを示すブーリアン型属性だ。 具体的に言えば、「メタルぎり」のコマンドによるダメージの値が標準値に比べて 2.5 倍になったり、 「せいすい」によるダメージが発生しなくなったりする。
ドラゴン系とは、このモンスターがドラゴンのような性質があることを示すブーリアン型属性だ。 「ドラゴンぎり」コマンドや「ドラゴンキラー」装備時の攻撃によるダメージを標準値の 1.5 倍とする。
初期確率とは、このモンスターの戦闘員オブジェクトに対して後述の初期状態をセットする確率を指定するための属性だ。
直接的にはこの属性値は配列 $C236A1
の添字にほかならない。
属性値と確率の対応を次の表に示す:
例を挙げると「しれんその3」が最初からマホカンタ状態なのは、この属性値の作用による。 後述の初期状態属性も参照して欲しい。
ゾンビ系とは、このモンスターがゾンビのような性質があることを示すブーリアン型属性だ。 「ゾンビぎり」コマンドや「ゾンビキラー」装備時の攻撃によるダメージを標準値の 1.5 倍とし、 「グランドクロス」コマンドのダメージを標準値の約 1.3 倍(コード上は 333/256 を表現)とする。
そら系とは、このモンスターが空中にいるような性質を表すブーリアン型属性だ。 「とびひざげり」コマンドでの攻撃によるダメージを標準値の 1.5 倍とする。
スライム系とは、このモンスターがスライム系であることを示すブーリアン型属性だ。 といっても、値が設定されてはいるのだが、戦闘処理でこの属性値を参照するものが存在しない。 ちなみに、スライム格闘場の試合参加条件や控室入場条件は別の構造体の属性値による。
コマンド選択判断とは、このモンスター戦闘員が自分のレパートリーにあるコマンドを実行するかどうかを決定する方式を表現する属性だ。 この属性値は戦闘コマンドオブジェクトの対象決定判断属性 0..2 に対応している。 例えばモンスター「ギズモ」はこの属性値が 0 なので、「メラ」のコマンドを採用するかどうかを決めるのに、 自分の MP の具合も相手のマホカンタ状態も考慮しない。
4.22.1 構造体 $C8C65D
: 戦闘コマンド の対象決定判断属性の説明も参照して欲しい。
複数回とは、このモンスター戦闘員が自分のコマンド実行手番のときに、何回連続でコマンドを実行するかを表す属性だ。 値が 0 ならば単にコマンドを実行する。 値が 1 ならば、5 割の確率で連続してコマンドを実行する。一般的には相異なるコマンドを実行する。 値が 2 ならば、確実に連続実行する。 それ以外の値のときも、値が 2 であるかのように連続実行するようだ。
自動回復とは、このモンスター戦闘員がターン終了時に回復する HP の量を指定する属性だ。
配列 $C2C47F
に回復量の範囲が表現されている。次の表のように解釈できる:
集中攻撃とは、このモンスター戦闘員がコマンド実行の標的を誰に優先するかを表す属性だ。
値としてはアドレス $C25D69
にあるジャンプテーブルの添字と 1 だけものだ。
属性値と集中攻撃方式の対応は次の表のようなものだ:
スプライトとは、画面上に描画されるモンスターの画像の形状データを指示する属性だ。 詳細は調査中。
MP とは、このモンスターの最大 MP を値に取る属性だ。 ただし、属性値が 255 であるときは戦闘員オブジェクトの MP 属性値を 65,535 で初期化する。 この値はマジックナンバーであり、どんなコマンドを実行しても MP が減少しないことを意味する。
アイテムとは、このモンスターを倒すことで戦闘終了時に得られることがあるアイテムの ID を値に取る属性だ。
アイテムについては 4.13 アイテム および 4.24 移動中の道具使用コマンド処理 で述べる。
パレットとは、画面上に描画されるモンスターのイメージの色彩データを指示する属性だ。 詳細は調査中。
初期状態とは、戦闘開始時に設定する、このモンスターの戦闘員オブジェクトの状態属性を指し示すための属性だ。 ただし、前述の初期確率属性に関係した判定処理が成功したときにしか、この設定は発生しない。 属性値と状態との対応を次の表に示す:
HP とは、このモンスターの最大 HP を値に取る属性だ。
経験値とは、このモンスターを倒すことで得られる経験値を表す属性だ。 とどめを刺すときのコマンドの戦果逸失フラグ属性が 0 であるときに、獲得総経験値に加算される。
名前文字列 ID とは、このモンスターの名前を意味する文字列の ID を値とする属性だ。 名前文字列はコマンド入力ウィンドウやメッセージ出力ウィンドウ上のテキスト内に表示される。
文字列については 4.2 文字列 で述べる。
逆アセンブルの便宜を図るため、以下に $C20154
構造体の各属性にアクセスするためのサブルーチンの一覧を次に示す。
表 4.64 モンスター構造体メソッド
サブルーチン | 固定引数長 | 入力 | 機能 |
---|---|---|---|
$C2F119
|
2 | x | 2 バイト型属性値を取得する |
$C2F120
|
2 | y | 2 バイト型属性値を取得する |
$C2F136
|
4 | x | ビットフィールド型属性値を取得する |
$C2F13D
|
4 | y | ビットフィールド型属性値を取得する |
ここで、レジスター x および y はモンスター配列の添字をそれぞれ指定する。 また、いずれの処理においても出力をレジスター a に格納する。 出力値としては属性値か、ビットシフト工程を省略した値のいずれかだ。
固定引数長とあるのは、各 JSR 命令に続く非プログラムバイト列の長さのことだ。 値が 2 ならばオブジェクトのベースアドレスからのオフセット値が、 値が 4 ならばオフセット値とビットマスク値がコード中に埋め込まれていることを示す。