本プログラム(dq_analyzer)は、スーパーファミコン版『ドラゴンクエスト』シリーズのROMイメージファイルから、モンスター・道具・呪文などのデータを解析して、解析結果をテキストファイルに出力するプログラムです。
また、おまけとして、ゲーム内部の文字コードを元にしてバイナリデータをテキストデータに変換するプログラム(dq_decoder)も用意しました。これを使うことで、キャラクタのせりふ集なども簡単に作ることができるでしょう。
なお、解析結果の中には非常に信頼性の低い情報や明らかに間違っている情報も含まれています。ご注意ください。
アーカイブに含まれているファイルは以下のとおりです。なお、2種類のアーカイブを用意していますが、どちらも内容は同一です。
dq_analyzerが解析した結果を出力したテキストファイルです。文字コードはShift_JIS(改行コード: CR + LF)となっています。個々のファイルの内容についての説明は、『出力ファイルについての説明』を参照してください。
dq_analyzer・dq_decoderのソースファイル一式です。文字コードはShift_JIS(改行コード: CR + LF)となっています。
dq_analyzer・dq_decoderのWin32環境での実行ファイルです。
このファイルです。文字コードはISO-2022-JP(改行コード: LF)となっています。
dq_analyzer.htmlに適用しているスタイルシートです。
最初に断っておきますが、dq_analyzerは特に実行する必要はありません。dq_analyzerが出力するファイル群は、すでにアーカイブ内に含まれています。そして、現時点のdq_analyzerでは、出力するファイルの内容はオプション指定などに関係なく一定であり、アーカイブ内に含まれているファイルと同一内容のものが出力されるだけです。
ROMイメージファイルの形式は、基本的にはROMカートリッジの内容を「ベタに」ファイルに書き出したものにしてください(一応、ROMイメージファイルの先頭部分に何らかのヘッダが存在していても問題はないはずです)。なお、Interleave形式には対応していません。Normal形式にのみ対応しています。
dq5analyzer src-path [dst-path] dq6analyzer src-path [dst-path] dq1analyzer src-path [dst-path] dq2analyzer src-path [dst-path] dq3analyzer src-path [dst-path]
第1引数(src-path)には、ROMイメージファイル名を指定してください。第2引数(dst-path)には生成されるファイルの出力先のパスを指定してください。第2引数が指定されていない場合はカレントディレクトリにファイルを出力します。
dq5decoder [-sm] src-filename dst-filename dq6decoder [-sm] src-filename dst-filename dq12decoder [-sm] src-filename dst-filename dq3decoder [-sm] src-filename dst-filename
引数には変換元ファイル名と出力ファイル名を指定してください。"-s"オプションは、「シングルバイト/システム文字列モード(デフォルト)」を、"-m"オプションは「マルチバイト/メッセージ文字列モード」を意味しています。要は、会話メッセージをデコードしたい場合は"-m"オプションを、それ以外の文字列をデコードしたい場合は無指定(あるいは"-s"オプション)にしてください。
会話メッセージデータには各種フラグ情報やイベント情報などが含まれており、現在のdq_decoderではこれらの情報に対応していません(単なる文字として解釈する)。従って、出力されるメッセージデータには、実際のメッセージには含まれてない文字が混入しています。
dq_analyzerが出力するファイルについての簡単な説明です。
モンスターの各種パラメータのリストです。
マジックパワーの値が"255"の場合、マジックパワーが無限であることを表します。
「ミルドラース」のデータが4つありますが(No.231〜234)、これはミルドラースの変身後のパターンが3種類あるからです。No.231が変身前で、No.232〜234が変身後のパラメータです。
以下のモンスターは、ゲーム本編には登場しないボツモンスターのようです。これらのボツモンスターのデータ領域には、モンスターとして有効なデータは設定されていません(「ダミー17(No.126)」を除く)。
No.220〜223ではノンプレイヤーキャラクタのパラメータが設定されています。このノンプレイヤーキャラクタのデータ領域の中に「てんくうびと(No.222)」というキャラクタがあります。しかし、ボツモンスターと同様に、データが設定されておらず、名前しか入っていないようです。もしかしたら、IVのルーシアのような天空人のノンプレイヤーキャラクタを用意する予定があったのかもしれません。
モンスターの耐性データのリストです。
呪文・特技などが効く確率は、各系統ごとに0〜3の4段階に分かれています。値が"0"の場合は、その系統の呪文・特技に対して耐性がありません。反対に、値が"3"の場合は完全な耐性を持っていて、100%効きません。値が"1"・"2"の場合については、それぞれ約25%・約75%程度の耐性を持っているようです。
モンスターから入手できるアイテムのリストです。
「難度」の数値は、お宝を入手する確率を示していて、0〜7の8段階に分かれています。基本的に「難度」が高いほどお宝を残す確率が低くなります。「難度」の値と入手確率の関係は、以下のとおりです。
難易度 | 確率 |
---|---|
0 | 1/1 |
1 | 1/8 |
2 | 1/16 |
3 | 1/32 |
4 | 1/64 |
5 | 1/128 |
6 | 1/256 |
7 | 1/4096 |
なお、公式ガイドブックではアイテムの落としやすさは★1〜3個で表されていますが、実際にはもっと細かく分かれていることがわかります。ちなみに、公式ガイドブックにおける「★1個」は「難易度5〜7」に、「★2個」は「難易度3〜4」に、「★3個」は「難易度1〜2」にそれぞれ対応しています。
モンスターの行動パターンデータのリストです。
モンスターのとりうる行動は6種類分設定されていて、その中からモンスターの行動が選択されます。多くのモンスターは6種類の中からランダムで行動が決まりますが、何らかのローテーションに従って行動が決まるモンスターも存在します。
なお、モンスターは設定されている行動を必ず行うわけではありません。一部の行動は、実行するために一定の条件を満たしている必要があります。例えば、「ザオリクを使う」という行動の場合、当然ですが他のモンスターが1体以上倒されている必要があります。条件を満たしていない場合、設定されている行動に替わって通常攻撃を行うことが多いようです。
No.220〜223ではノンプレイヤーキャラクタの行動を定義しています。これらのキャラクタの戦闘中の行動は、モンスターの行動を決める処理を流用していたようです。
モンスターの様々なデータのリストです。
「仲間」の数値は、「仲間になりやすさ」のランクを示していて、0〜7の8段階に分かれています。そして、馬車かモンスターじいさんのところに同種のモンスターがすでにいるかどうかによって、2匹目・3匹目のモンスターが仲間になる確率は下がります。これらの2つの要素をもとにして、最終的な確率は以下のように決まります。
ランク | 確率(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 |
なお、公式ガイドブックでは仲間になる確率を♥1〜3個で表していますが、実際にはもっと細かく分かれていることがわかります。ちなみに、公式ガイドブックにおける「♥1個」は「ランク1〜2」に、「♥2個」は「ランク3〜4」に、「♥3個」は「ランク5〜7」にそれぞれ対応しています。
「回復」の数値は、1ターンごとに自然回復するヒットポイントの量を示しています。値が"0"の場合は自然回復はありません。値が"1"〜"3"の場合については、1ターンあたりそれぞれ約20ポイント・約50ポイント・約100ポイント程度の自然回復をしているようです。
「初期状態変化」の項目は、戦闘開始時から特定の状態変化が起こっている確率を示します。初期状態変化には、睡眠とマホカンタの2種類があります。
遭遇モンスターのテーブルのリストです。
フィールドやダンジョンで出現するモンスターは、場所ごとに最大10種類が設定されています。ここではその10種類のモンスターのリストを遭遇モンスターテーブルと称します。そして、モンスター出現の際にはこの中からモンスターがランダムで選択されて、モンスターパーティが決定します。なお、具体的にどのようなアルゴリズムでモンスターが選択されているか(何体/何グループ出現するか)については、まだわかっていません。
また、遭遇モンスターテーブルには「モンスターパーティのレベル」の情報も設定されています。この値は以下の判定に影響します。
遭遇モンスターのテーブルとマップとの対応を示した表です。
なお、ダンジョンの各フロアと遭遇モンスターテーブルとの対応についてはまだ判明していません。
道具の各種パラメータのリストです。
呪文・特技の各種パラメータのリストです。
消費マジックパワーの値が"255"の場合、マジックパワーを全部消費することを表します。
モンスターの各種パラメータのリストです。
公式ガイドブックには載っていませんが、モンスターにもそれぞれ「Lv(レベル)」が設定されています。レベルの値によってダメージが変化する特技(かまいたち等)のダメージを決めるために使われているようです。
「デスタムーア」のデータが6つありますが(No.238〜243)、これはデスタムーアの3つの形態それぞれについて、2つ分のデータ領域を割り当てているからです。2つのデータ領域には、基本的には同じパラメータが設定されていますが、行動パターンのみは別々のものが設定されています(デスタムーアの行動パターンは戦闘中に変化するため)。「ダークドレアム」のデータ領域が3つあるのも(No.246〜248)、戦闘中にダークドレアムの行動パターンが3種類に変化するためです。
モンスターの耐性データのリストです。
耐性は各系統ごとに0〜3の4段階に分かれていて、呪文・特技の種類によって、「ダメージ増減率」「効く確率」の2通りに解釈されます。
モンスターから入手できるアイテムのリストです。
「難度」の数値は、お宝を入手する確率を示していて、0〜7の8段階に分かれています。基本的に「難度」が高いほどお宝を残す確率が低くなります。「難度」の値と入手確率の関係は、以下のとおりです。
難易度 | 確率 |
---|---|
0 | 1/1 |
1 | 1/8 |
2 | 1/16 |
3 | 1/32 |
4 | 1/64 |
5 | 1/128 |
6 | 1/256 |
7 | 1/4096 |
なお、公式ガイドブックではアイテムの落としやすさは★1〜3個で表されていますが、実際にはもっと細かく分かれていることがわかります。ちなみに、公式ガイドブックにおける「★1個」は「難易度5〜7」に、「★2個」は「難易度3〜4」に、「★3個」は「難易度1〜2」にそれぞれ対応しています。
モンスターの行動パターンデータのリストです。
モンスターのとりうる行動は6種類分用意されていて、その中からランダムに、あるいは何らかのローテーションに従ってモンスターの行動が決まります。
なお、モンスターは設定されている行動を必ず行うわけではありません。一部の行動は、実行するために一定の条件を満たしている必要があります。条件を満たしていない場合、設定されている行動に替わって通常攻撃を行うことが多いようです。
モンスターの様々なデータのリストです。
「集中」のフラグは、モンスターが特定のキャラクタを集中的に攻撃することを示しています。なお、VIの集中攻撃は、パーティの中で最もヒットポイントの低いキャラクタが攻撃目標にされるようです。
「仲間」の数値は、「仲間になりやすさ」のランクを示していて、0〜7の8段階に分かれています。そして、馬車かルイーダの店に同種のモンスターがすでにいるかどうかによって、2匹目・3匹目のモンスターが仲間になる確率は下がります。これらの2つの要素をもとにして、最終的な確率は以下のように決まります。
ランク | 確率(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/32 | 1/128 |
なお、公式ガイドブックでは仲間になる確率を★1〜3個で表していますが、実際にはもっと細かく分かれていることがわかります。ちなみに、公式ガイドブックにおける「★1個」は「ランク1〜2」に、「★2個」は「ランク3〜5」に、「★3個」は「ランク6〜7」にそれぞれ対応しています。
「回避」の数値は、モンスターが通常攻撃を回避する確率を示しています。
「回復」の数値は、1ターンごとに自然回復するヒットポイントの量を示しています。値が"0"の場合は自然回復はありません。値が"1"〜"3"の場合については、1ターンあたりそれぞれ約20ポイント・約50ポイント・約100ポイント程度の自然回復をしているようです。
「初期状態変化」の項目は、戦闘開始時から特定の状態変化が起こっている確率を示します。初期状態変化には、睡眠とマホカンタの2種類があります。
遭遇モンスターのテーブルのリストです。
フィールドやダンジョンで出現するモンスターは、場所ごとに最大10種類が設定されています。ここではその10種類のモンスターのリストを遭遇モンスターテーブルと称します。そして、モンスター出現の際にはこの中からモンスターがランダムで選択されて、モンスターパーティが決定します。なお、具体的にどのようなアルゴリズムでモンスターが選択されているか(何体/何グループ出現するか)については、まだわかっていません。
また、遭遇モンスターテーブルには「モンスターパーティのレベル」の情報も設定されています。この値は以下の判定に影響します。
遭遇モンスターのテーブルとマップとの対応を示した表です。
なお、ダンジョンの各フロアと遭遇モンスターテーブルとの対応についてはまだ判明していません。
キャラクタの耐性データのリストです。
耐性は各系統ごとに0〜3の4段階に分かれていて、呪文・特技の種類によって、「ダメージ増減率」「効く確率」の2通りに解釈されます。
キャラクタが初期状態で装備している装備品のリストです。
キャラクタの成長データのリストです。
各種数値を計算で算出しているため、端数切り捨てなどの処理の違いによってわずかな誤差が生じている可能性があります。
道具の各種パラメータのリストです。
「値」の項目は、道具ごとに多目的に使用されている数値です。基本的には、カジノでの道具の価格(コイン交換枚数)として使用されていることが多いようです。ただし、No.053〜No.058の道具に関しては、どのような意味合いで使用されているのか不明です。
呪文・特技の各種パラメータのリストです。
「敵最小」「敵最大」の項目は、モンスターに対してその呪文を使った際のダメージ範囲の最小値・最大値を表します。同様に、「味最小」「味最大」の項目は、味方キャラクタに対してその呪文を使った際のダメージ範囲の最小値・最大値を表します。
消費マジックパワーの値が"63"の場合、マジックパワーを全部消費することを表します。
モンスターの各種パラメータのリストです。
マジックパワーの値が"255"の場合、マジックパワーが無限であることを表します。
モンスターの耐性データのリストです。
モンスターから入手できるアイテムのリストです。
「難度」の数値は、お宝を入手する確率を示していて、0〜3の4段階に分かれています。基本的に「難度」が高いほどお宝を残す確率が低くなります。「難度」の値と入手確率の関係は、以下のとおりです。
難易度 | 確率 |
---|---|
0 | 1/8 |
1 | 1/16 |
2 | 1/32 |
3 | 1/128 |
モンスターの行動パターンデータのリストです。
モンスターのとりうる行動は8種類分用意されていて、その中からモンスターの行動が決まります。
なお、モンスターは設定されている行動を必ず行うわけではありません。一部の行動は、実行するために一定の条件を満たしている必要があります。条件を満たしていない場合、設定されている行動に替わって通常攻撃を行うことが多いようです。
モンスターの様々なデータのリストです。
「回避」の数値は、モンスターが通常攻撃を回避する確率を示しています。実際の回避率は「回避 / 64」となります。例えば、「回避」の値が2であった場合、回避率は2/64(= 1/32)となります。
遭遇モンスターのテーブルのリストです。
フィールドやダンジョンで出現するモンスターは、場所ごとに最大5種類(I)/6種類(II)が設定されています。ここではその出現モンスターのリストを遭遇モンスターテーブルと称します。そして、モンスター出現の際にはこの中からモンスターがランダムで選択されます。
IIの場合は、モンスターテーブル以外にも「サブパーティ」とでもいうべきものが設定されています。IIでのモンスターパーティ決定処理は、「モンスターテーブル内からランダムでモンスターを選択する」以外に、「サブパーティをそのままモンスターパーティとして採用する」場合があります。なお、具体的にどのようなアルゴリズムでモンスターが選択されているか(何体/何グループ出現するか)については、まだわかっていません。
また、遭遇モンスターテーブルには「モンスターパーティのレベル」の情報も設定されています。この値は以下の判定に影響します。
遭遇モンスターのテーブルとマップとの対応を示した表です。
なお、ダンジョンの各フロアと遭遇モンスターテーブルとの対応についてはまだ判明していません。
モンスターの各種パラメータのリストです。
マジックパワーの値が"255"の場合、マジックパワーが無限であることを表します。
No.141〜No.149のモンスターは、テスト・デバッグ用のモンスターのようです。
モンスターの耐性データのリストです。
呪文・特技などが効く確率は、各系統ごとに0〜3の4段階に分かれています。値が"0"の場合は、その系統の呪文・特技に対して耐性がありません。反対に、値が"3"の場合は完全な耐性を持っていて、100%効きません。値が"1"・"2"の場合については、それぞれ約25%・約75%程度の耐性を持っているようです。
モンスターから入手できるアイテムのリストです。
「難度」の数値は、お宝を入手する確率を示していて、0〜7の8段階に分かれています。基本的に「難度」が高いほどお宝を残す確率が低くなります。「難度」の値と入手確率の関係は、以下のとおりです。
難易度 | 確率 |
---|---|
0 | 1/1 |
1 | 1/8 |
2 | 1/16 |
3 | 1/32 |
4 | 1/64 |
5 | 1/128 |
6 | 1/256 |
7 | 1/1024 |
なお、公式ガイドブックではアイテムの落としやすさは★1〜3個で表されていますが、実際にはもっと細かく分かれていることがわかります。ちなみに、公式ガイドブックにおける「★1個」は「難易度5〜7」に、「★2個」は「難易度3〜4」に、「★3個」は「難易度1〜2」にそれぞれ対応しています。
モンスターの行動パターンデータのリストです。
モンスターのとりうる行動は8種類分用意されていて、その中からランダムに、あるいは何らかのローテーションに従ってモンスターの行動が決まります。
なお、モンスターは設定されている行動を必ず行うわけではありません。一部の行動は、実行するために一定の条件を満たしている必要があります。条件を満たしていない場合、設定されている行動に替わって通常攻撃を行うことが多いようです。
モンスターの様々なデータのリストです。
「集中」のフラグは、モンスターが特定のキャラクタを集中的に攻撃することを示しています。
「回避」の数値は、モンスターが通常攻撃を回避する確率を示しています。
「回復」の数値は、1ターンごとに自然回復するヒットポイントの量を示しています。値が"0"の場合は自然回復はありません。値が"1"〜"3"の場合については、1ターンあたりそれぞれ約20ポイント・約50ポイント・約100ポイント程度の自然回復をしているようです。
遭遇モンスターのテーブルのリストです。
フィールドやダンジョンで出現するモンスターは、場所ごとに最大12種類が設定されています。ここではその12種類のモンスターのリストを遭遇モンスターテーブルと称します。そして、モンスター出現の際にはこの中からモンスターがランダムで選択されて、モンスターパーティが決定します。なお、具体的にどのようなアルゴリズムでモンスターが選択されているか(何体/何グループ出現するか)については、まだわかっていません。
また、遭遇モンスターテーブルには「モンスターパーティのレベル」の情報も設定されています。この値は以下の判定に影響します。
遭遇モンスターのテーブルとマップとの対応を示した表です。
なお、ダンジョンの各フロアと遭遇モンスターテーブルとの対応についてはまだ判明していません。
道具の各種パラメータのリストです。
「てつのそろばん(No.042)」「すいしょうだま(No.137)」「しのオルゴール(No.189)」「みずでっぽう(No.192)」は、ゲーム本編では使用されていないボツアイテムのようです。
呪文・特殊攻撃の各種パラメータのリストです。
「敵最小」「敵最大」の項目は、モンスターに対してその呪文を使った際のダメージ範囲の最小値・最大値を表します。同様に、「味最小」「味最大」の項目は、味方キャラクタに対してその呪文を使った際のダメージ範囲の最小値・最大値を表します。
以下に示す解析資料は、基本的には、データ領域(と思われる部分)の内容を見て推測により解析したものです。よって、不正確な箇所も多数含まれています。
モンスターの各種データは、アドレス0x118000から格納されています。モンスター1体につき25バイトのデータがあり、これが235体分ならんで格納されています。25バイトのデータの内訳は以下のようになっています。
モンスターの各種データは、アドレス0x020154から格納されています。モンスター1体につき42バイトのデータがあり、これが256体分ならんで格納されています。42バイトのデータの内訳は以下のようになっています。
道具の各種データは、アドレス0x040043から格納されています。道具1種類につき19バイトのデータがあり、これが229種類分ならんで格納されています。19バイトのデータの内訳は以下のようになっています。
モンスターの各種データは、アドレス0x05da0eから格納されています。モンスター1体につき18バイトのデータがあり、I・IIの両方合わせて122体分ならんで格納されています。18バイトのデータの内訳は以下のようになっています。
モンスターの各種データは、アドレス0x020000から格納されています。モンスター1体につき37バイトのデータがあり、これが160体分ならんで格納されています。37バイトのデータの内訳は以下のようになっています。
道具の各種データは、アドレス0x040043から格納されています。道具1種類につき19バイトのデータがあり、これが229種類分ならんで格納されています。19バイトのデータの内訳は以下のようになっています。
まずは、全作品について一通り解析を終わらせたいところです。
くれぐれも、解析結果を盲信しないようにしてください。例によって、私自身は解析結果の検証をほとんどやっていません。解析結果とプレイした際の結果との間に矛盾を感じた場合、解析結果にあまり重きをおかないようにしましょう。
本プログラム・本ドキュメントの著作権は、遠藤慎悟<s-endo@yk.rim.or.jp>(以下、原作者)にあります。
なお、原作者は本プログラムに関していかなる保証も行いません。同様に、本プログラムの出力結果・本ドキュメントの内容の正当性についてもいかなる保証も行いません。また、本プログラムを利用したことによって生起したいかなる損害に対する責任も負わないものとします。