マップデータと黄金配列

１．マップデータと黄金配列

さて、ここではついにマップデータの持ち方を説明します
これと敵の配置さえ解ればロックマンの改造は8割型できたと言っても過言ではありません
まぁ、根気は必要ですが
ここではマップデータ関連だけを徹底的に説明します
前のページに比べると少々分かり難いかもしれませんが我慢して下さい
やる気のある人だけを対象としているのですから

前ページで書き換えた部分はマップチップの部分であってマップの配置ではありません
マップチップは２×２でできていて一つの画面は８×８のマップチップの並びでできています
まぁこれでは訳が分からないと思うのでこのまま次へ進みましょう

ロックマンのマップは２×２の正方形のパーツを組み合わせた物でできている
正方形のパーツは４バイトでひとつ。
構造は

１ | ３
--- | ---
２ | ４

↑こんな感じになります
４バイト並んでたらこの順に部品が一つ出来上がりますよん
以下は１マスずつの詳細
これがわかればどの部品がどこにあるかを探すのもかなり楽になると思います

00〜03
04〜07
08〜0b
0c〜0f
10〜13
14〜17
18〜1b
1c〜1f
20〜23
24〜27
28〜2b
2c〜2f
30〜33
33〜37
38〜3b
3c〜3f
とまああとは40刻みでffまでこれのくり返しです
40〜43や80〜83も00〜03までと同じ外見です
なぜ外見かというと上に画像付きで出したものは全て「フェイク（すり抜けてしまう）」だからです
んでもってブロックの機能を解析したところ

00〜3f | 背景（すり抜ける）
--- | ---
40〜7f | ブロック
80〜bf | はしご（登れます）
c0〜ff | 当たると死ぬ（トゲなどに使われてます）

（これはカットマンステージにおける例）

さて、恐らくここまで読んでもわけが解らないでしょう（笑）
これからみっちりと説明します
まず、カットマンステージのマップチップのデータは$0010から上のような形式で入っています
どういうことかと言うと、

### 00 00 00 00 01 01 01 01 62 68 62 69 69 68 68 69

という文字列があります
この場合は左から4バイトを数えて

00 | 00
--- | ---
00 | 00

をチップ00

01 | 01
--- | ---
01 | 01

をチップ01

62 | 62
--- | ---
68 | 69

をチップ02

69 | 68
--- | ---
68 | 69

をチップ03と考える
チップ04は次の行の４バイト、05についても04から４バイト数えたものである
これによってチップは$FF（１６進数）まで（２５６個）数えられる
わからない場合は自分で書き換えてみれば解るはず（多分）

さて、今度は上で説明したチップデータを並べているマップデータを説明しましょう
さて、ぶっちゃけた話ですがマップデータ$03D0から入っています
どの様に入っているかをこれから説明します
さて、この色が変わっている部分がカットマンステージの最初の画面のマップデータです
1画面８×８の64バイトで構成されています
さて、文章で説明しても分かりにくいと思うのでこの選択された数字がどの様にマップを構成しているかを説明しましょう
下のスナップを見て下さい
ちょっと汚いですが我慢して下さいね(^^;;;;
この画面の左端を見て下さい

### 01 01 01 04 06 07 02 03

そして03D0からの8バイトを当てるとピッタリ合います
当然これを書き換える事によってこの画面を自由に書き換えられます
ぶっちゃけた話チップを書き換えなくてもこれだけやれば十分という話もあります（私の中では）
さて、実際に書き換えてみましょう
チップの最初の部分を

    00 00 00 00 00 41 00 41

とし、マップの最初の部分を00 と 01だけで適当に並べてみましょう
この場合、00は何も無い空のチップで01はただの乗れるブロックです
こんな感じに書きかえられます
別にマップの形は適当で良いです
「00 00 00 00 00 01 00 00」で8列ほど埋めてしまってもいいかもしれません
このときに気付く事として「2画面目」があります
1画面目を書きかえるとどういうわけか２画面目も全く同じ形になります
これはどういう事か？
さて、同じなのは1，2画面目だけなのか？
普通にカットマン面をやってみるとわかりますが結構「全く同じ画面」というのが何個所もあります
それはカットマン面だけではありませんが
このカラクリは0C10からにあります
ここの、00 00 01 02 1C 1F〜ってのが画面の並び方です
例えばこれを全部00 00 00 00 00 という風に書き変えてしまえば何処まで進んでも一つ目の画面が続く事になります
これを利用する事によってロックマンでは容量を節約してたんですね
あ、でもこの辺はあんまし自信無いかも(^^;;;;;
ちなみにわかるとは思うけど01ってのはさっきのマップデータの次に入ってる分だから
02は01の次ですよん
さて、マップもチップも部屋順も自由に書き換えられるようにはなりましたがスクロール関連がまだ書き換えられていません
スクロールは厄介ですが構造は単純なので手短に説明してしまいます
$0C81を見て下さい
83 80 80 80 82 80 80〜と並んでいるのがスクロールを表しています
どういう事か説明します
最初の「83」ですが、この8という部分は「上にスクロールする」という意味で、3という部分は「3画面行ってから」という意味です。
つまり、この83は「3画面行ってから上へスクロールする」という意味です
となるとその次からの「80」は「その場で上へ」という意味になります
尚、この8の部分が「2」だと「右」で「4」だと下になります。
例えば、42の場合は「2画面行ってから下」という意味です
ただし、このスクロールは「目いっぱい右にスクロールしてから」でないと有効ではありません
また、60は「右と下」、A0は「右と上」と言った感じに足し算も有効です（この説明の意味が分からなければ無視しても良いです。本編中では使われていない技術です）
また、00と入れるとボス戦になります
さて、実際にもっとカッコいい面を作りたくなってきたところで自分でチップとマップを作り、スクロールも操れるようになりました（できなかったらゴメン）
ですが、ここへ来てチップ関連の落とし穴があります
下のスナップを見て下さい
良く見て下さい
なんか部品ごとのパレットが気持ち悪いです
例えば左のハシゴの部分は全部同じパーツが入っているはずなのに色が違います
つまり、チップのパレットは最初からアドレスごとに決まっていてそこにどの部品を入れてもそのパレットが有効になるのです
では、これをどうやって解決すればいいか？
これにはパレット関連の事から入った方がいいかもしれません
ぶっちゃけた話、0CB0の1列（16バイト）がカットマンステージマップチップのパレットのデータ（4種類）です

### 0F 30 2B 06 0F 30 2B 2C 0F 20 10 00 0F 20 10 20

これが、4バイトずつ分かれて、パレット00 01 02 03と名付けられます
0Fの部分は透明色（透けて背景が見える部分）の色なので変えても意味ないです
まぁ取り敢えず0F 30 2B 06がパレット00というわけです
下にパレットの表を書いておいたのでパレット00 01 02 03にどのような色が使われているか調べてみましょう

00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 2A | 2B | 2C | 2D | 2E | 2F
30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 3A | 3B | 3C | 3D | 3E | 3F

さて、$0310を良く見ましょう
そして、
パレット00を00
パレット01を01
パレット02を10
パレット03を11
とおきます
これは16進数→2進数にしたものです
それでは、チップ00を見てみましょう
パレットは00 00 00 00が使われています
そして00000000を2進→16進で00 これは問題ありません
そして次は01（青空）です
パレットは01 01 01 01です
01010101を16進変換すると55になります
このように$0310からは「１バイトにつき１チップでパレットのセット」をしています
これも結構難しいので慣れてからでいいです
あと、パレットの色が気に食わなかったら自由に色を変えてみましょう
一気に雰囲気変わりますよ
尚

１ | ２
--- | ---
３ | ４

パレットのセットは何故かこういう風になっているので注意
また、この値と法則を発見してくれた「わいわいさん」ありがとうございました
さて、ここでもう一つ問題があります
それは、「壊せるブロック」の存在です
それについては$0E11を見ましょう

### 02 00 80 40 A0 60

これがそうです

02 | 00 | 80 40 | A0 60
--- | --- | --- | ---
オブジェクトの種類 | ページ数 | 座標（開始点） | 座標（終止点、これで大きさが決まる？）

この６バイトで処理されています
尚、オブジェクトの種類の01はただの壁
02は壊せるブロック
03は「障るとスクロール」
といった感じです
これも実際にやって見るしか覚える方法は無いと思います
色々とネック出てくるはずです
多分上手く行かないでしょう（爆）

長々と説明してきましたがこれはカットマン面のデータです
これでマップ改造は完璧ですしエディタを作る為に必要な情報も全て入っております
まぁ敵は次の機会に説明しますが(^^;
尚、

### $4010からはアイスマン面
$8010からはボンバーマン面
$C010からはファイヤーマン面
$10010からはエレキマン面
$14010からはガッツマン面

といった感じに入っています
そしてこれをロックマンにおける黄金配列と呼びます（勝手にそう付けただけ）
全てはカット、アイス、ボンバー、ファイヤー、エレキ、ガッツの順です（一部例外もありますが）
これは他のデータを探す際にもかなり役に立ちました
実は攻略法のコンテンツの順番もこれに習っていたりする（爆）
さて、ここまでやったら今度は敵の配置についてやりたいと思います
でもそれは後日
面倒くさいから（爆）

## 戻る