マイトアンドマジック (FC) 攻略/解析 - データ構造

マップ境界配列

マップの各マスの周囲 4 方向はただの通路だったり、壁、森、扉などがあったりする。これらを「境界」と総称する。 境界は通行可否とは別の概念である(見た目が壁でも通行可能だったり、逆に見た目が通路でも通行不可なケースなどがある)。

マップの各マスは周囲 4 方向について境界の値 (0..=3) を持っている。 値 0 は通路を意味し、値 1..=3 の意味はマップごとに異なる。

境界の値は 2bit なので、1 マスの周囲 4 方向の境界は 1 バイトに pack できる。この pack されたバイトを 16 * 16 = 256 個並べた配列を「マップ境界配列」と呼ぶ。

マップ境界配列のバイト内の pack 形式は以下の通り:

bit意味
6-7北の境界
4-5東の境界
2-3南の境界
0-1西の境界

マップ境界配列の並び順は row-major で、y, x ともに昇順。つまり座標 (0, 0), (1, 0), ..., (15, 0), (1, 0), ... のように並んでいる。たとえばオフセット 19 は座標 (3, 1) に対応する。

マップ境界配列は $6200-$62FF にロードされる。イベントにより動的に書き換わる場合もある。