5.4. モンスター解析

5.4.1. 解析
5.4.1.1. $C20000 モンスター構造体

本節の目的は、すべてのモンスターデータを抽出し、 モンスター構造体の各フィールドを完全解析することなのだが、 構造体フィールドの中でも、特に戦闘中の振る舞いに関わるデータらしきフィールドの意味特定が極めて困難ゆえ、 かなり不完全な状態になっている。 それでも、構造体データが配列の形で表現されていること、そのアドレス、 および構造体のメモリレイアウトくらいならば、なんとか解析可能だ。 読者にとって何かの足しになるかもしれないので、以下に記す。

5.4.1. 解析

モンスター解析は定番中の定番なので、すでに先人の手が入っている (例えば Shingo Endo 氏の解析資料 [URL1] を参照)。 そこで、以下ではより細部の解析を試みる。

5.4.1.1. $C20000 モンスター構造体

アドレス $C20000 に全モンスターのデータが定義されている。 モンスター一種類当たりが占めるデータ量は #$0025 byte であり、 これが #$A0 (160) 個配列されている。

モンスター構造体のメモリレイアウトは以下のようになっている。 "..." となっている部分は、データフィールドがバイト境界をまたぐことを示す。 例えば「ゴールド」フィールドは、構造体先頭から #$05 バイト目のビット全部と、 その次のバイトである #$06 バイト目の下位 2 ビットを結合したビット列で構成されていることを示す。

表 5.3 モンスター構造体メモリレイアウト

Byte:Bit 80 40 20 10 08 04 02 01
00 名前文字列 ID (2byte)
01
02 ゾンビ ドラゴン レベル
03 経験値 (2byte)
04
05 ...
06 ... ゴールド...
07 ... 攻撃力...
08 ... 守備力...
09 パレット...
0A すばやさ
0B 最大 MP
0C アイテム ID
0D $C54F80 構造体 ID
0E ...
0F ... 行動[0]...
10 ... 行動[1]
11 ... 行動[2]...
12 ... 行動[3]...
13 ... 行動[4]...
14 ... 行動[5]...
15 ... 行動[6]...
16 行動[7]...
17 行動のための何かフラグ [0..7]
18 JSR ($CE37,X) JSR ($CE37,X)
19 JSR ($CE37,X) JSR ($CE37,X)
1A JSR ($CE37,X) JSR ($CE37,X)
1B JSR ($CE37,X) JSR ($CE37,X)
1C 行動関係 せんたく JSR ($CE37,X)
1D 複数回 アイテム確率 よけ
1E ヒャド メラ・ギラ・イオ 集中攻撃 自動回復
1F メガンテ ザキ デイン バギ
20 マヌーサ ルカニ マホトーン ラリホー
21 ニフラム ボミオス・バシルーラ メダパニ マホトラ
22 最大 HP (2byte)
23
24 未使用 限界登場数 メタル

名前文字列 ID

モンスターの名前を表す文字列 ID である。

レベル

モンスターのレベルである。 あやしいかげの正体モンスターの設定時などに利用する。

ドラゴン

モンスターがドラゴン系であることを意味するビットである。 ドラゴンキラーを装備したキャラクターに直接攻撃を受けると、 ダメージ補正がかかることを意味する。

ゾンビ

未使用ビットであるが、ゾンビ風モンスターにはこの値が 1 にセットされているので、 便宜上このフィールドをこの名前で呼ぶことにする。

経験値

モンスターを倒すことで得られる経験値である。

ゴールド

モンスターを倒すことで得られるゴールドである。

攻撃力

モンスターの攻撃力である。 味方キャラクターの攻撃力に相当するパラメータである。

守備力

モンスターの守備力である。 味方キャラクターの守備力に相当するパラメータであるが、 すばやさはこの値とは関係がない。

パレット

モンスターのグラフィック描画における、色の塗り方の ID みたいなものらしい。 詳細は不明。

すばやさ

モンスターのすばやさである。 味方キャラクターのすばやさに相当するパラメータである。

MP

モンスターの最大 MP である。 ただし、この値が #$FF であることには特別な意味がある。 そのようなモンスターは、MP が初期化時に #$FFFF にセットされた上で、 いくら呪文を唱えても、MP を消費しないことを意味する。

アイテム ID

モンスターが持っている宝箱に入っているアイテムのアイテム ID である。 この値がゼロであるモンスターは、宝箱を持っていない。

グラフィック: $C54F80 ID

モンスターのイメージ構造体の ID ではないかと思われる。

戦闘行動[0..7]

モンスターが戦闘中にとる行動 ID の配列である。

行動のための何かフラグ

詳細不明。

戦闘行動[X] に対応するフラグの配列である。 戦闘行動[X] に対して、コード $C26782-$C2679C を処理するか否かを示す。

JSR ($CE37,X)

詳細不明。

戦闘行動[X] に対応する何かの配列である。 戦闘行動よりも配列長が 1 だけ大きいが、 これは行動決定ルーチン内で 0 から 7 までの値を抽選するのに、 何らかの理由で失敗したときに参照される。

せんたく

詳細不明。

せんたくバカ、せんたくにんげん、せんたくかみがそれぞれ 0, 1, 2 なので、 便宜上このフィールドをこの名前で呼ぶことにする。

表 5.4 せんたく

意味
00 せんたくバカ
01 せんたくにんげん
02 せんたくかみ

行動関係

各行動チャンスにおいて、戦闘行動[X] の X を決定する際のパラメータとして用いる。 ここのロジックを説明するのは無理なので、割愛させていただく。

この値が 2 であれば、別ロジックを適用する。 バラモスのように、行動をローテーションでとる。

表 5.5 行動関係

パターン
00 標準的な方法で戦闘行動を決定をする
01
02
03 戦闘行動がローテーションとなる

よけ

モンスターがこちら側からの直接攻撃を「すばやく みをかわす」可能性を示す値である。 乱数(通常は高々 #$2F)とこの値との大小比較を行い、 乱数以上の値である場合に攻撃をかわすことになる。

アイテム確率

モンスターが宝箱を落とす確率を決める値、 確率分母を定義した配列のインデックスである。 Shingo Endo 氏の解析資料 [URL1] に詳しい記載がある。

複数回

モンスターが各ターンに何度の戦闘行動を連続して行うかを示す値である。

表 5.6 複数回

行動回数
00 そのターンの行動回数を 1 に固定する
01 そのターンの行動回数を乱数で決定し、1 または 2 とする
02 そのターンの行動回数を乱数で決定し、1, 2, 3 のいずれかとする
03 そのターンの行動回数を 2 に固定する

自動回復

モンスターが各ターン終了ごとに秘密裡に回復する HP の回復タイプを表す値である。

表 5.7 自動回復

回復する HP
00 自動回復をしない
01 16 から 24
02 44 から 56
03 90 から 110

集中攻撃

モンスターが集中攻撃をすることを示す値である。 2bit 長のフィールドだが、0 か 1 だけが設定されている。

表 5.8 集中攻撃

集中攻撃
00 集中攻撃しない
01 キャラクターひとりに集中攻撃する

メラ・ギラ・イオ

メラ・ギラ・イオ系属性を有する戦闘行動に対しての、呪文耐性を表す値である。

SFC 版ドラクエ 3 では属性を持つ戦闘行動によるダメージは All or Nothing で決まるため、 呪文耐性という言い回しは SFC 版ドラクエ 3 においては適切ではないかもしれない。

ヒャド

ヒャド系属性を有する戦闘行動に対しての、呪文耐性を表す値である。

バギ

バギ系属性を有する戦闘行動に対しての、呪文耐性を表す値である。

デイン

デイン系属性を有する戦闘行動に対しての、呪文耐性を表す値である。

ザキ

ザキ系属性を有する戦闘行動に対しての、呪文耐性を表す値である。

メガンテ

メガンテ系属性を有する戦闘行動に対しての、呪文耐性を表す値である。

ラリホー

ラリホー系属性を有する戦闘行動に対しての、呪文耐性を表す値である。

マホトーン

マホトーン系属性を有する戦闘行動に対しての、呪文耐性を表す値である。

ルカニ

ルカニ系属性を有する戦闘行動に対しての、呪文耐性を表す値である。

マヌーサ

マヌーサ系属性を有する戦闘行動に対しての、呪文耐性を表す値である。

マホトラ

マホトラ系属性を有する戦闘行動に対しての、呪文耐性を表す値である。

メダパニ

メダパニ系属性を有する戦闘行動に対しての、呪文耐性を表す値である。

ボミオス・バシルーラ

ボミオス・バシルーラ系属性を有する戦闘行動に対しての、呪文耐性を表す値である。

ニフラム

ニフラム系属性を有する戦闘行動に対しての、呪文耐性を表す値である。

HP

モンスターの最大 HP である。

メタル

未使用ビットなのだが、ある種のモンスターがこの値が 1 になっている。 それらはメタルスライム、はぐれメタルであるので、 このフィールドをこの名前で呼ぶことにする。

限界登場数

ひとつの戦闘において、一度に存在し得る(グループを超えての)モンスターの総数である。 グラフィックの制約に関係している。