四回かけて、女神転生Iの悪魔を「読む」道具は一通り揃った。絵・名前・種族・敵としての能力値・仲魔にしたときの基礎値・行動・報酬・習得呪文。ROMから引き出した測定結果は、色付きの悪魔図鑑と demons.json にまとまっている。
ただ、図鑑を「いったん閉じる」と書いたとき、二つ残していた。巨大ボスの実描画と、迷宮のマッピングだ。今回は後者を片付け、そしてこれまでの図鑑を丸ごと nesemu に載せた。自分のROMを入れて塔を歩けば地図が追随し、悪魔に会えば図鑑が開く。すべて、あなたのROMからその場で解いている。
迷宮は、壁が平らに並んでいるだけだった
迷宮のマッピングは「歩いて手で塗る」ものだと思われがちだが、女神転生Iの壁は静的に読める。ROMのあるバンク(0x0a)に、マップが平らに並んでいる。座標 (x, y) の壁は rom[0x14014 + y*128 + x] の1バイト。幅128の行優先で、値がそのままそのマスの壁情報だ。
1バイトの中身は、四方位ぶんの2ビットペアになっている。北 0x40 / 東 0x10 / 南 0x04 / 西 0x01 が壁で、その上位ビット (0x80 / 0x20 / 0x08 / 0x02) が門――見た目は壁だが通れる穴だ。隣り合うマスで「東の壁 == 右隣の西の壁」「南 == 下の北」が一枚も食い違わないので、この読み方は正しい。0xff だけが盤外を表す。
階段も宝箱も、一つの表に入っていた
壁だけでは階段が分からない。階段・会話・回復泉・店・宝箱・エレベーターは、別の一枚の表に全部入っている。ポインタ表 $aaf5(ファイル 0x12b05)が「6方位 × 14カテゴリ」で並んでいて、カテゴリ番号で引く。
- 階段はカテゴリ
0x0a。1件5バイトで[x][y][行先x][行先y]。行先は一つ下の階の上り階段の座標なので、下り階段を全部読めば対になる上り階段も導ける。 - 会話・施設・宝箱はカテゴリ
0x16。先頭のデータバイトが種別で、0x20宝箱 /0x1c回復泉 /0x01邪教館 /0x04辺境の店 /0x0f長老…と分かれる。 - エレベーターはカテゴリ
0x12。
つまり迷宮図は、壁テーブル(見た目)とイベント表(仕掛け)の二枚で、静的に起こせる。ゲームに一マスずつ壁判定を計算させて集める掃引は検証にだけ使い、地図そのものはROMを読むだけで出た。
歩くと、地図が勝手に追いてくる
あとは「いま自分がどのマスにいるか」をワークRAMから読めばいい。プレイヤー座標は $0780(X) / $0781(Y)、向きは $0490(1=北 2=東 3=南 4=西)。前進方向のデルタは移動表 $dc69 を向きで引く。座標はマップ原点なしのアトラス座標そのままなので、いま居るマスを中心にその階のブロックを描いて向き矢印を重ねるだけで、歩けば地図が追随する。ダイダロスの塔なら、8階から1階までがアトラスの左上に並んでいて、階を移ると表示がページのように切り替わる。
今回 nesemu に増えた計器は、これだ――オートマッパー。しかも掃引のいらない静的版になった。
図鑑を、ブラウザの中に移した
ここからが作り替えになる。これまで demons.json は、手元でオフラインに作っていた。今回は同じデコードを ブラウザの中 でやる。
nesemu の公開版に女神転生用のパネルを足した。ROMを読み込むと、その場でこれだけを解く。
- 名前を、独自フォントの並びから(第1回)
- 種族を、2枚のテーブル
0x18ed8/0x18950から(第1回) - 敵としての能力値を、
0x17efaの16バイトレコードから(第2回) - 仲魔にしたときの基礎値を、
0x19e00の8バイトレコードから(第3・4回)
どれも、読み込まれたROM――つまり あなたのカートリッジの数字 を、その場で解いて表示する。連載で一枚ずつ剥がしてきたテーブルが、そのままブラウザ内のデコーダになった。悪魔をひとつ開くと、種族と、「敵で出たときのHP」と「仲魔にしたときのHP」が並んで出る。ケルベロスなら 300 と 180、クリシュナは召喚専用なので仲魔側だけ HP999 だ。
一つだけ、ROMから起こせないものがある。絵だ。悪魔スプライトの「番号 → 絵」の対応は banked スクリプトの計算値で、静的には割れない(第1回で突き当たった第3層)。なので絵だけは、すでに公開してある図鑑のドット絵を pareido から遅延で借りてくる。数字と名前と種族はあなたのROM、絵は既出の測定結果。バンドルにはゲームのデータを一切積んでいない。
配るのは、道具と測定結果だけ
この連載でずっと書いてきたとおり、ROMは私的複製で、demons.json のようなゲーム由来のデータは配らない。今回もそれは変わらない。遊べる版は ROMを一切持たない。訪問者が自分のROMを入れ、それはブラウザの外に出ない。公開ビルドにROMが紛れていないことは、書き出しのたびに機械的に検査して止めている――混じっていればビルドが落ちる。
配っているのは、道具(計器化した nesemu)と、測定結果(図鑑・数表・地図)だけだ。
いま出せるもの / まだのもの
自分のROMを入れて塔を歩けば地図が育ち、悪魔に会えばタブが図鑑に切り替わって、その悪魔の種族と敵/仲魔ステータスが出る。縦画面でも横画面でも、ゲーム画面と同じ大きさで並ぶ。
パレイド女神転生I 悪魔図鑑 — ROMから引き出した142体と能力値ベータ版です ヘカーテ/ルシファーの画像は調査中。ボスは強制エンカウントでは正しく描けず(実戦闘の背景込みの描画が要る)、「準備中」カードに…
残りは前回と同じ二つ――巨大ボスの実描画と、他ダンジョンへの横展開だ。壁テーブルもイベント表もダンジョン選択で切り替わるので、手口はそのまま効く。次は塔の外へ出る。