面データを改造する

# 第１回　面データを改造する

### ・はじめに

まず面データを改造しようと思っても、
①どの番地で指定しているか
②どのように面データを構築しているか
などの壁に当たります。ここでは丁寧に解説していこうと思いますが、さすがに100面もあるので、そこまで丁寧に解説するとなると行数などが多くなり、見づらくなってしまいます。
そこで、「どこから1面のデータを開始するか･･･」などの命令を見ていきたいと思います。

### ・面データのアドレス指定部分

9980番地から9A47番地まで2バイトでどこの番地からデータを開始するかという命令です。1面、2面、3面という順で100面まで連続で指定されています。
では、1面、2面の場合を見てみましょう。
9980番地　80 80
9982番地　C0 80
1面の場合は8080番地から、2面の場合は･･･C080番地？ではありません。2バイトをひっくり返したものが番地指定とでも思っておいてください。
ということは、2面の場合は80C0番地からとなります。3面、4面･･･100面と参照すると、ある一定の間隔で並んでいることが分かります。

### ・面データの構築

分かり辛い説明でしたが、とりあえず開始地点が分かりました。一定の間隔（64バイト）で並んでいるということは、面データは64バイトで構築されているということが推測されます。
先ほどの8080番地（1面）を80BF番地（その次から2面）までをレッキングクルーの画面のように区切って閲覧してみましょう。
888888888888
888888888888
888888888888
228888880222
8588B2221858
853368181858
888188181458
0001071F0100
1D0A1B18160E17260124000000000000（最後の１列）
こうして見ると、横に12、縦に8のレッキングクルーの画面が見えてきます。
結論から言うと、1バイトで2つオブジェクトを指定していることが分かります。
そして、具体的にどの数値がどのオブジェクトを指定しているかは、下をご覧ください。

数値 | 内容 | 名称 | 備考
--- | --- | --- | ---
0 |  | 通常の足場 |
1 |  | 壊せない梯子 |
2 |  | 1の壁（1回で壊れる壁） |
3 |  | 2の壁（2回で壊れる壁） |
4 |  | 3の壁（3回で壊れる壁） |
5 |  | 壊せる梯子 |
6 |  | 爆弾 |  |
7 |  | 扉 | 扉は1ステージ8つまで。それ以上設置するとバグる。
8 |  | 空白 | 最下段に設置するとまた上から降ってくるが、マリオのグラフィックは無くなる。マリオがダメージを受けなくなる。
9 |  | 支柱 | 支柱の上に支柱を乗せても落下しない。最上段に設置しても何も起こらない。
A |  | ドラム缶 |
B |  | スパナゴン（赤）初期位置（足場） | 敵キャラクタは1ステージ6体まで。（オーバーした場合は下を優先、足場のみとなる）
C |  | スパナゴン（紫）初期位置（足場） | 敵キャラクタは1ステージ6体まで。（オーバーした場合は下を優先、足場のみとなる）
D |  | ナスビ仮面初期位置（足場） | 敵キャラクタは1ステージ6体まで。（オーバーした場合は下を優先、足場のみとなる）
E |  | ブラッキー初期位置（足場） | ブラッキーは1ステージ1体まで。（オーバーした場合は下を優先、足場のみとなる）
F |  | マリオ初期位置（足場） | マリオは1ステージ一人まで。（オーバーした場合は下を優先、足場のみとなる）

先ほどの「空白」の部分で説明したことを応用する例として、これを置いておきます。ips形式、ムービー同梱（VirtuaNES version 0.92に対応）です。正常なROMにパッチしてください。
そして、残りの16バイトですが、1面の場合、「TAROMEN.1」となっています。それがデザイン画面でデザイン中に（2コンの↑+B）で読み込めることから、ステージの名前であることが推測されます。（詳細は不明）

### 戻る