1.マップデータと黄金配列

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

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


ロックマンのマップは2×2の正方形のパーツを組み合わせた物でできている
正方形のパーツは4バイトでひとつ。
構造は
↑こんな感じになります
4バイト並んでたらこの順に部品が一つ出来上がりますよん
以下は1マスずつの詳細
これがわかればどの部品がどこにあるかを探すのもかなり楽になると思います

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バイトを数えて
0000
0000
をチップ00

0101
0101
をチップ01

6262
6869
をチップ02
6968
6869
をチップ03と考える
チップ04は次の行の4バイト、05についても04から4バイト数えたものである
これによってチップは$FF(16進数)まで(256個)数えられる
わからない場合は自分で書き換えてみれば解るはず(多分)


さて、今度は上で説明したチップデータを並べているマップデータを説明しましょう
さて、ぶっちゃけた話ですがマップデータ$03D0から入っています
どの様に入っているかをこれから説明します



さて、この色が変わっている部分がカットマンステージの最初の画面のマップデータです
1画面8×8の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画面目を書きかえるとどういうわけか2画面目も全く同じ形になります
これはどういう事か?
さて、同じなのは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からは「1バイトにつき1チップでパレットのセット」をしています
これも結構難しいので慣れてからでいいです
あと、パレットの色が気に食わなかったら自由に色を変えてみましょう
一気に雰囲気変わりますよ


パレットのセットは何故かこういう風になっているので注意
また、この値と法則を発見してくれた「わいわいさん」ありがとうございました

さて、ここでもう一つ問題があります
それは、「壊せるブロック」の存在です
それについては$0E11を見ましょう

02 00 80 40 A0 60

これがそうです
020080 40A0 60
オブジェクトの種類ページ数座標(開始点)座標(終止点、これで大きさが決まる?)

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



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

尚、

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

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

さて、ここまでやったら今度は敵の配置についてやりたいと思います
でもそれは後日
面倒くさいから(爆)

戻る