用語集

本書で用いる用語を以下にまとめておく。 一般的に用いられる用語はインターネットからいくらでも調べることができるハズなので、 そのようなものについては徹底的に除外した。 厳密性よりある種のわかりやすさを優先した結果、微妙に嘘の入った解説がある。 そこは読者各位のご賢察を期待する。

65816

SFC に採用されている CPU のこと。 ファミコンの CPU である 6502 のエミュレーション機能を有するという特徴がある。

BGREP

Stirling が実装する機能の一つ。 バイナリファイルからバイナリデータを検索するコマンドメニューの名前だ。 バイナリファイルのテキストダンプは od 等の CLI ツールで行うのだが、 バイナリデータのサーチだけは Stirling だけが頼りだ。

DisPel

本書が利用する SFC ドラクエロム用の逆アセンブラー。 現時点で https://github.com/pelrun/Dispel よりソースコードを入手できる。

DOS コンソール

Windows XP のヘルプによれば、正式名称は「コマンドプロンプトウィンドウ」らしい。 逆アセンブルツールがコンソールアプリである場合、 操作性が今一つなこれの世話になる必要はない。 最低限 Cygwin (bash) を利用するのが基本だろう。

dqutils

本書記者の PC にある、ドラクエ ROM 内の構造体データ配列をテキスト出力するツールスクリプト群。 Cygwin (bash) で実装してあるが、 いずれ Python 版を作成して配布される可能性がある。

dq_analyzer

Index of /~s-endo/ で配布されている 「スーパーファミコン版ドラゴンクエスト データ解析プログラム」。 C 言語で記述されたコンソールプログラムだが、本書ではソースコードの方を指すことが多い。 SFC ドラクエ各シリーズの各種データをテキスト化してファイルに格納する。

ドラクエ解析の始祖ではなかろうか。リスペクト。

GSD

Snes9x にトレースログ機能を含むデバッグ機能を実装したもの。 SFC ドラクエシリーズの解析作業で主に用いるエミュレータだ。

ID

辞書の意味でも通じるが、より具体的には、データが格納されている配列のインデックスであることが多い。 例えば SFC 版ドラクエ 3 のモンスターデータ「スライム」について、 「スライムは ID が 0 である」と表現することがある。 これを本書の用途として「スライムのデータがモンスター構造体データ配列のインデックス 0 に格納されている」とすることができる。

NPC

NonPlayable Character の頭文字からなる略語 [8]。 本書では「プレイヤーが直接操作することができないゲームキャラクター」の意味で用いる。 街の人々はここに含まれないものとする。 SFC 版ドラクエ 5 のパパスは NPC の例だ。

PAR コード

略語を展開して表記すると Pro-Action Replay コード。RAM 領域のメモリ解析の産物だ。 プログラムの RAM 領域の特定のアドレスの値を動的に書き換えるツールを意味する場合と、 そのアドレスと値を対にした概念を意味する場合がある。

Peer's Snes9x Tracer

Snes9x にトレースログ機能を実装したもの。 後続の GSD も同機能を引き続き搭載しているが、 記者の経験上、Peer's のほうが長い出力トレースが得られることが多い。

ROM イメージ

スーファミソフトのカートリッジデータを PC で扱えるようにファイル化したもの。 単に ROM と言う場合もこの意味で用いていることがある。

SFC

本書では Super Famicom すなわちスーパーファミコンの頭文字略語として用いる。

SNES

SFC

Snes9x

Windows アプリの形で実装したスーファミエミュレータの一つ。 これよりも多機能な「子孫」がいるので、解析作業に用いることはもはやないだろう。

ウィンドウ

ドラクエでは、「背景色が黒く、白い枠を持つ矩形領域」だ。 画面に同時に複数表示される。メニューになっていたり、 メッセージを表示したりすることが主な用途だ。

解析作業ではウィンドウ構造体データ配列を発見することと、 デバッグメニューウィンドウを初期に発見することが肝要だ。

エンカウント

英語の encounter に由来する。これは辞書によれば「偶然出くわす」といった意味合いのようだ。 ドラクエでは(主語が逆転するが)「まもののむれが あらわれた!」となること。 換言すれば、移動モードから戦闘モードに移行することだ。

タイルエンカウント

オフセット

メモリ空間またはロムイメージファイルにおいて、 現在注目している位置(アドレス)と、基準となる位置との差を意味する。

キャラクター

本書ではゲームにおける登場人物の意味で用いる。 文字 (letter) の意味では使用しない。

ステートセーブ

エミュレータでゲームプログラムを実行する場合、 ユーザーが期待すれば、任意の時点でプログラムを中断・再開することができる。 これは、その時点でのメモリの内容やレジスタの値といった、 「プロセス」の状態をすべて保存して、それを再現することで実現している。 この保存をステートセーブと言う。

エミュレータは、この「状態」をファイルの形で保存する。 このバイナリファイルを差分発見的手法で解析することがある。

タイルエンカウント

初出は SFC 版ドラクエ 3 のデバッグメニューにある「タイルせんとう」である。 フィールド上のある区画やダンジョンの各階には、 常にその場所固有のモンスターの組み合わせしか出現しない。 このようなエンカウントの仕組みをタイルエンカウントと呼ぶ。

エンカウント

ダメージ

HP や MP が戦闘行動の結果として増減するとき、その差のこと。 本書ではパラメータの回復方向に変化する値に対しても、それをダメージと呼ぶので、 読者は注意して欲しい。

デバッグメニュー

ドラクエではデバッグ用途専用のメニューウィンドウを実装するシリーズがある。 これが製品版になっても残されているシリーズがあるため、 解析マニアはメニューウィンドウを出現させる方法を見つけることに執心することが多い。 自力で見つけるととてもうれしいものだ。

デバッグモード

狭義にはデバッグビルドによるプログラムで起動したゲームセッション全体を意味するが、 本書では何らかのデバッグ作業専用の機能を出現した状態、もしくはいつでもその機能を使用できる状態を指す。

ドラクエでは妙に高機能なデバッグモードが存在することが多い。

デバッグメニュー

ドラクエビューワ

ドラクエ解析サイト『ソニタウン』 で配布されていた 「ドラクエ1~7のマップ,モンスター,メッセージ 表示ソフト」。 HSP で記述された Windows GUI プログラムだ。 スクリプトも同時配布されていた。 ドラクエ各シリーズの各種データを画像化して表示する。

サイトのほうは残念ながら閉鎖されている。 本書執筆・ドラクエ解析の第一次情報としてとにかくお世話になったツールだ。

ハックロム

オリジナルの状態から 1 バイトでもデータが変更されているロムイメージ。 本物と紛い物との差を知るには、差し当たり Snes9x の ROM Information メニューを調べてみること。

バカ画像

本来のプログラムでは起こり得ないゲーム状態を何らかの手段により捏造し、そのゲーム画面を画像化したもの。 同様に、ゲーム画面を動画として編集したものをバカ動画という。 何も知らぬ輩に黙ってそのようなものを見せると、なぜか反感を買うことが多い。注意することだ。

パラメータ

通常はプログラミング言語の関数における仮引数の意味だが、 ドラクエの話をする場合、数値の形で表現されたキャラクターの能力値を指すことが多い。 本書でも主に後者の意味で用いる。

ビット

例えばあるキャラクターが呪われていることを表現するために、 どこかのアドレスの値の 1 バイト中のあるビットが 0 なのか 1 なのかで決めるようなことがある。 このデータの持たせ方の欠点は、値へのアクセスが面倒なことにある。 解析側からしても、若干面倒なので勘弁願いたい。

フィールド

ゲームの文脈で用いられる場合、世界地図に対応するマップ全体を指す。

解析の文脈で用いられる用語としては、構造体のメンバーデータと同義。 Java 言語での言い回しだ。

メンバー

フラグ

ゲーム進行の何らかのコンテキストの状態を 0 か 1 で表現・保持するもの。 例えば「まほうのたまを手に入れた状態」とか「一度エンディングを見た状態」のようなものだ。 ドラクエ (SFC) の場合、ビットで表現することが多い。

ビット

フロア

本書では、階段を上り下りしたり、建物の出入口を越えたりすると切り変わる (フローミを意識して欲しい)、いわゆるマップの構成単位を指す。 フィールドマップ全体もワンフロアとする。

ポインタ配列

本書ローカル用語。 その型がアドレスである配列のこと。 2 バイト型と 3 バイト型があり、前者はバンクが別の方式で与えられるのに対して、 後者はまんま絶対アドレス値で配列されている。 サイズの小さくない構造体データの格納アドレスを示しているので、 データ解析の重要な手掛かりとなる。 プログラミングの観点からすれば、 このようにしてデータアクセスの間接レベルを上げることで、 メンテナンスを楽にする意味があるのかもしれない。

配列

メッセージ

本書では、文章の形でウィンドウに表示される、 台詞やら対話的プロンプト文やらをひっくるめてメッセージと呼ぶ。 SFC 版ドラクエ 5 以降、大きいフォントでテキストが描画される。

メッセージデータ抽出は本書の重要な目的のひとつである。

大きいフォント

メモリレイアウト

本書ローカル用語。構造体解析において、各メンバーのメモリ配置がどのようになっているのかを説明する表。 C 言語でいうビットフィールドが頻出するような、細切れのデータメンバーが寄せ集まった様子を思い描いて欲しい。

メンバー

メモリ空間

プログラム部分もデータ部分も RAM 領域も全部ひっくるめたメモリ領域全体をメモリ空間と(本書は)呼ぶ。 SFC 解析では、ROM イメージがメモリ空間 4 メガのどのパートに格納されるのかが、 ゲームによって決まっている。逆アセンブリ作業はそれを調べるところから開始するのだ。

メンバー

構造体解析の文脈で用いる場合、構造体のデータメンバーの意味である。 主人公のパーティの話題のときは、当然パーティの構成員の意味になる。

構造体

移動モード

非戦闘モードの意味。

戦闘モード

改造

本書では ROM に書いてあるプログラムコードを編集して、本物の動作をさせないようにすることを改造と呼ぶ。 ROM に定義されている静的なデータを編集するのも改造には違いないが、それは面白くないことが多い。

ハックロム

改造コード

PAR コード

共通処理サブルーチン

本書ローカル用語。共通処理を実装するサブルーチンの意味。 狭義には店屋の処理くらいしか思いつかないが、 広義には算術処理サブルーチンや乱数調整サブルーチンなど多数ある。

構造体

本書では、SFC ドラクエシリーズのモンスターやアイテムといったデータの構造が、 C 言語の構造体のようになっていると捉えている。 そのため、データ構造の説明に「構造体」「メンバー」といった用語を借用している。 「名前 ID はモンスター構造体のメンバーである」のように用いる。

メモリレイアウト, メンバー

人オブジェクト

正式な意味は PS 版ドラクエ 7 のデバッグメニューにある同名項目から推測するしかないのだが、 本書では「フロア上にいるキャラクターであり、仲間キャラクターではない者」の意味で用いる。

キャラクター, フロア

戦闘モード

ドラクエ全シリーズにおいて、誰かと戦闘しているゲーム状態のことを指す。 このモードの解析だけで、データ解析作業全体の 90 パーセントを占める。

移動モード

戦闘行動

戦闘モードにおいて、各キャラクター・モンスターがとる一回あたりの行動。 移動行動という考え方もあるが、行動を表現する構造体が共通であるため、話がややこしい。

大きいフォント

移動モードにおいて、行動の結果出力されるメッセージ表示に用いられるフォント。 大きいフォントと普通のフォントでは、文字コード体系が異なる。

文字コード, メッセージ

配列

あらゆるプログラミング言語で存在する概念であるが、 解析で配列と言う場合、暗黙の了承の下に C 言語の配列モデルが置かれる。 すなわち、同じ長さのバイト列が、メモリ空間内の特定の区間中、 途切れることなく整列しているものだ。

ドラクエ (SFC) の場合、 構造体データの配列を ROM 領域から発見することが重要だ。

文字コード

ドラクエ (SFC) の場合も、文字を表現するために内部的には数値を用いている。 ある文字に対応する数値を、その文字のコードと呼ぶ。 また、プログラムで使用することができるすべての文字コード体系それ自体を文字コードを呼ぶこともある。

大きいフォント, 文字列

文字列

本書では、ウィンドウに描画するテキストのうち、単語の形をとるものを文字列を呼ぶ。 「やくそう」「はなす」「だれに」「アリアハン」等は文字列だが、 「それを すてるなんて とんでもない!」等のメッセージウィンドウで見られる文章の形をとるものは (もちろん奇妙だが)本書の立場では文字列ではない。

メッセージ



[8] 文法的には UnPlayable Character ではあるまいか。