この節ではモンスターを取り扱う。 ここで言うモンスターというのは、戦闘時における敵陣の構成員の個々のオブジェクトの型を意味するが、 それに加えて、自陣の戦闘員でいながら「めいれいさせろ」の対象とはならないキャラクターたちの特性もこの型によって表現されている。 便宜上、本節ではそれらを総称してモンスターとする。
まずはモンスター構造体をプログラムコードに基いてモデル化する。 構造体のメモリーレイアウトと各メンバーデータの目的を図表にして示す。 最後に、ゲーム中で定義されているモンスターデータを全て抽出して CSV ファイルを作成する。
SFC 版ドラクエ 5 では ROM 容量の制約上なのか、論理的には一つの型であるものを、物理的に複数の型に分割して定義することが多い。
しかし、モンスター型はその貴重な例外の一つだ。
モンスターという概念は多数の属性を必要とするのにも関わらず、以下に示すサイズ 25 バイトの型一つで表現し切っている。
相異なるモンスターオブジェクト 235 個がアドレス $238000
に配列している。
表 3.35 構造体 $238000: モンスター構造体
オフセット | 桁 | 属性 |
---|---|---|
#$00
|
すばやさ | |
#$01
|
攻撃力 (L) | |
#$02
|
守備力 (L) | |
#$03
|
HP (L) | |
#$04
|
MP | |
#$05
|
けいけんち | |
#$06
|
||
#$07
|
ゴールド (L) | |
#$08
|
#$80
|
攻撃力 (H) |
#$40
|
守備力 (H) | |
#$30
|
みかわし | |
#$0C
|
ゴールド (H) | |
#$03
|
コマンド選択制約 | |
#$09
|
#$C0
|
初期状態確率 |
#$38
|
アイテム確率 | |
#$07
|
仲間確率 | |
#$0A
|
#$E0
|
コマンド選択 |
#$18
|
自動回復 | |
#$07
|
さいだい HP (H) | |
#$0B
|
#$C0
|
複数回攻撃 |
#$3F
|
不明 A | |
#$0C
|
#$80
|
初期状態 |
#$40
|
集中攻撃 | |
#$30
|
メラ | |
#$0C
|
ギラ | |
#$03
|
イオ | |
#$0D
|
#$C0
|
ヒャド |
#$30
|
バギ | |
#$0C
|
デイン | |
#$03
|
ザキ | |
#$0E
|
#$C0
|
ラリホー |
#$30
|
マヌーサ | |
#$0C
|
ニフラム | |
#$03
|
ルカニ | |
#$0F
|
#$C0
|
マホトラ |
#$30
|
マホトーン | |
#$0C
|
メダパニ | |
#$03
|
メガンテ | |
#$10
|
#$C0
|
不明 B |
#$30
|
毒 | |
#$0C
|
休み | |
#$03
|
未使用 | |
#$11
|
コマンド 0 | |
... | ... | |
#$16
|
コマンド 5 | |
#$17
|
アイテム | |
#$18
|
#$80
|
未使用 |
#$7F
|
仲間モンスター |
以下、モンスターの属性について、本節で勝手に言葉を付けたものを含めて、説明する。
すばやさとは、ターンにおけるコマンド実行順を決定するパラメーターとして参照される属性だ。
構造体 $0007C0
オブジェクト(3.5.2 構造体 $0007C0
: 敵キャラクター 参照)の対応属性に設定される値だ。
攻撃力の値は物理的に分割されて定義されている。より高位のアドレスにあるほうは 256 の位の値だ。
構造体 $0007C0
オブジェクト対応属性に設定される。
守備力の値は物理的に分割されて定義されている。より高位のアドレスにあるほうは 256 の位の値だ。
構造体 $0007C0
オブジェクト対応属性に設定される。
ただし、オブジェクトで定義されている値が #$01FF
であれば、
3.3 汎用データアクセスサブルーチン(仮) で説明する処理系はこれをマジックナンバーとして扱う。
この値を十進数の 511 ではなく、改めて 2,047 として敵陣戦闘員オブジェクトに設定する。
最大 HP の値は物理的に分割されて定義されている。より高位のアドレスにあるほうは 256 以上の位の値だ。
ただし、こちらにもマジックナンバーが存在する。プログラム上は次の 3 種が相当する:
構造体 $0007C0
オブジェクト対応属性に設定される。
最大 MP の値は #$FF
つまり 255 をマジックナンバーとする。
このようなモンスターはいくら呪文を唱えても MP が全く減らないようになっている。
構造体 $0007C0
オブジェクト対応属性に設定される。
経験値とは、戦闘勝利後に得られる合計の経験値に計上される値であり、 戦闘中にこのモンスターを一度倒すことで加算される。
ゴールドとは、戦闘勝利後に得られる合計のゴールドに計上される値であり、 戦闘中にこのモンスターを一度倒すことで加算される。
ゴールドの値は物理的に分割されて定義されている。より高位のアドレスにあるほうは 256 以上の位の値だ。
みかわしとは、戦闘中に直接攻撃を受けるときの「ひらりと みをかわした!」を発動しやすさを表す属性だ。
より直接的には、この回避を発生させる確率を決定するための配列 $278051
の添字に他ならない。
具体的には次のように取り扱われる:
コマンド制約とは、戦闘中の状況に応じてコマンド選択肢を阻めるような振る舞いをモンスターにさせるための属性だ。 これも別の節で議論するが、例えば「対象がマホカンタまたはマホキテが適用されている」ならば、 「攻撃呪文を無効化する」ような処理をするようになる。
初期確率とは、このモンスターが戦闘開始時点で初期状態(後述)になる確率を与えるための属性だ。 具体的には次のように取り扱われる:
アイテム確率とは、戦闘終了時にこのモンスターが宝箱を落とす(ことが決まった後に落とす)確率を与える属性だ。
実際は配列 の添字であり、結局は次の表の確率を取らせる:
仲間確率とは、その他の条件が整っているときにこのモンスターが戦闘終了時に突然起き上がり、 仲間になりたそうにこちらを見る確率を与える属性だ。
実際にこの値が意味するのは、ある確率を発生させるための定数の配列の添字だ。
これらの確率テーブルはアドレス $278162
,
$278172
, $278182
にあり、
既に仲間にいる同一種のモンスターの頭数に応じて使い分けられる。
最終的に、この属性の値は次の確率を意味する:
表 3.40 仲間確率
属性値 | 1 体目確率 | 2 体目確率 | 3 体目確率 |
---|---|---|---|
0
|
0 | 0 | 0 |
1
|
1/256 | 1/1024 | 1/1024 |
2
|
1/64 | 1/128 | 1/256 |
3
|
1/32 | 1/64 | 1/128 |
4
|
1/16 | 1/64 | 1/64 |
5
|
1/4 | 1/64 | 1/64 |
6
|
1/2 | 1/64 | 1/64 |
7
|
1/2 | 1/32 | 1/16 |
同一種モンスターが 3 体(以上)いるときは、さらに同じモンスターを仲間に加えることはない。
コマンド選択とは、このモンスターがコマンドを決定するサブルーチンを特定する値のための属性だ。
具体的に言うと、ジャンプテーブル $21BB32
の添字になる。
どのモンスターも、後述するコマンド配列の中から一つのコマンドを各ターンで選択して実行することで戦闘が成り立っている。
その選択アルゴリズムがモンスターごとに 8 パターン存在して、かつそれが固定されていることを表現している。
詳細は戦闘解析の節で議論したい。
自動回復とは、このモンスターがターン終了時に、生きていれば HP を回復する度合いを表す属性だ。
具体的には配列 $27804B
および $27804E
の添字を与える。
回復量は大体次のようなものになる:
複数回とは、このモンスターのコマンド実行番において、連続してコマンドを実行する能力を表す属性だ。 属性値と実行回数の対応を次の表に示す:
初期状態とは、このモンスターが戦闘開始時点で「ある種の呪文が適用されている」ことを示す属性だ。 先述の初期確率属性がゼロである場合にはこの属性は意味がない。 属性値と状態の対応を次の表に示す:
集中攻撃とは、このモンスターが(単体で)戦闘中に攻撃相手を固定するか否かを示す属性だ。
メラとは、メラ系呪文戦闘コマンドに対するダメージ面での耐性を表現する属性だ。
ダメージ理論については別節で述べるが、簡単にまとめておく。 耐性属性については 0 から 3 の値を取る。 これは数値が低いほど、対応するコマンドの効果が期待できる。 値が 0 ならば確実に効き、値が 3 ならば全く効かないというのが全コマンドで共通の規則だ。 値が 1 または 2 であれば、プレイヤー側キャラクターのレベル、 対象キャラクターがモンスターではなく、 自陣の戦闘員でいながら「めいれいさせろ」の対象とはならないキャラクターであるか、 かつ、実際のコマンドの ID などの条件によって、 ダメージ係数や的中確率の計算パラメーターを与える定数配列が異なってくる。
ギラとは、ギラ系呪文、火炎の息系、いかづちのつえの各戦闘コマンド、 およびほのおのツメ装備時の直接攻撃系戦闘コマンドに対するダメージ面での耐性を表現する属性だ。
イオとは、イオ系呪文およびばくだんいしの戦闘コマンドに対するダメージ面での耐性を表現する属性だ。
ヒャドとは、ヒャド系呪文および吹雪系の各戦闘コマンド、 およびふぶきのつるぎやこおりのやいば装備時の直接攻撃系戦闘コマンドに対するダメージ面での耐性を表現する属性だ。
バギとは、バギ系呪文戦闘コマンドに対するダメージ面での耐性を表現する属性だ。
デインとは、デイン系呪文およびいなずまの戦闘コマンドに対するダメージ面での耐性を表現する属性だ。 変則的だが、この耐性は敵側のイオ系呪文を仲間側がマホカンタで跳ね返したときのダメージを決定するのにも参照されるかもしれない。
ザキとは、ザキ系呪文、ぶきみなひかり、まひこうげき、やけつくいき、みなごろし、 およびふうじんのたての各戦闘コマンドに対する確率面での耐性を表現する属性だ。
ラリホーとは、ラリホー系呪文、ねむりこうげき、あまいいきの戦闘コマンドに対する確率面での耐性を表現する属性だ。
マヌーサとは、マヌーサ、ガスミンク等による砂煙、まぶしいひかりの戦闘コマンドに対する確率面での耐性を表現する属性だ。
ニフラムとは、ニフラムの戦闘コマンドに対する確率面での耐性を表現する属性だ。
ルカニとは、ルカニ系呪文の戦闘コマンドに対する確率面での耐性を表現する属性だ。
マホトラとは、マホトラとふしぎなおどり系の戦闘コマンドに対する確率面での耐性を表現する属性だ。
マホトーンとは、マホトーンとまふうじのつえの戦闘コマンドに対する確率面での耐性を表現する属性だ。
メダパニとは、メダパニの戦闘コマンドに対する確率面での耐性を表現する属性だ。
メガンテとは、メガンテの戦闘コマンドに対する確率面での耐性を表現する属性だ。
毒とは、どくこうげき、どくのいき、もうどくのきりの戦闘コマンドに対する確率面での耐性を表現する属性だ。
休みとは、なめまわし、さそうおどり、おたけびの戦闘コマンドに対する確率面での耐性を表現する属性だ。
モンスターが実行可能な戦闘コマンドが最大 6 種類、属性として関連付けられている。 戦闘コマンドについては 3.9 戦闘コマンド を参照。
アイテムとは、このモンスターが戦闘終了後に宝箱を落とすとき、その中身のアイテムを指定するための属性だ。 アイテムについては 3.13 アイテム を参照。
仲間とは、このモンスターが仲間になったときのキャラクター ID を表す属性だ。 値と意味の対応は 3.11.4 人間またはモンスター固有の属性 の後半部で記述する。
本節で説明したモンスター属性を単独の CSV ファイルに統合して 付録 B データ に収録する。