※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

ロックマン用に特化した3種類のマップエディタが使われています。



1.rock8editor (Dr. Juicy 氏製作)

Dr. Juicy ◆PIev8nwW8c氏が制作したマップエディターです。
定期的に機能が追加されています。



2.mapeditor_a10(3スレ目35氏製作)
3スレ目35さんのオリジナルのエディターです。
フロストマンステージの途中までのデータが入っています。
mapedit_a10


3.マップデザイナー4 (Mend 氏製作)

マップデザイナー4とはFC7リメイクで使われていたエディタです。
ttp://www7.atwiki.jp/wakuwakusuru?cmd=upload&act=open&pageid=13&file=MapDesigner4e.lzh

マップデザイナー4で作られるステージデータのデータ形式は以下のようになっています。
format.txt
マップのデータは
マップチップを並べたマップチップファイル(*.bmp)と
マップチップ番号でマップを定義するマップデータファイル(*.dat)からなる。

マップデータファイルにはどのマップチップファイルを使用するのかという情報は示されていないので
2つのファイルの関連はエディタのユーザー側で管理する必要がある。


マップチップの単位は16(pixel)*16(pixel)。
このマップチップを格子状に並べたbmpファイルをマップチップのリソースとして扱う。


  • マップチップファイルの構成
マップチップファイルの幅は256pixelで固定(つまり横に16個のチップが並ぶ)
高さは特に制限はなさそうだけど、基本的に16(pixel)の倍数にあわせたほうがよさそうだ。

mapchipファイルの中のチップにはそれぞれインデックス番号が割り振られる。
(x, y, width, height)
1行目1列目( 0, 0, 16,16)の番号は0x00
1行目2列目(16, 0, 16,16)の番号は0x10
j行目i列目(i*16, j*16, 16,16)の番号はj*16+i
という風に。
この番号を行列の各要素ごとに割り振ってマップデータを作る。


  • マップエディタ画面右下の「ステージの大きさ」について

縦画面数×224 = 縦サイズ(pixel)
横画面数×256 = 横サイズ(pixel)

一画面にchipは14 * 16個



  • マップデータファイル(*.dat)のフォーマット

addr00-03: 0xA0, 0x0F, 0x00, 0x00 header
addr04-08: stage_width(pixel) 4byte little endian
addr08-0B: stage_height(pixel 4byte little endian
後、背景データ、前景データ、当たり判定データが続く。

背景データ
byte列 stage_width*stage_height/256(byte)
chip_indexは2byte little endianで表されている。

以下のように出力される順番に並んでいる
for(int y = 0; x < stage_height/16; y++) {
for(int x = 0; x < stage_width/16; x++) {
	mapchip_index[x][y]
}
}
...

前景データ
byte列 stage_width*stage_height/256(byte)
chip_indexは2byte little endianで表されている。

以下のように出力される順番に並んでいる
for(int y = 0; x < stage_height/16; y++) {
for(int x = 0; x < stage_width/16; x++) {
	mapchip_index[x][y]
}
}
...

当たり判定
byte列 stage_width*stage_height/256(byte)
collision_indexは”1byte” little endianで表されている。

番号の意味は以下、マップデザイナー4のreadme.txtから抜粋。


0番…当たり判定なし(通り抜けられる)
1番…水(水中判定になる)
2番…トゲ(即死判定を持つ)
3番…はしご(のぼったり、おりたりできる)
4番…氷(歩くとすべります)
5番~14番…未定
15番…壁(通り抜けられない。初期化状態では全チップがこれ)

未定番号にスクロール制限のマーカーとかそういうのを割り振るといいかも。

以下のように出力される順番に並んでいる
for(int y = 0; x < stage_height/16; y++) {
for(int x = 0; x < stage_width/16; x++) {
	collision_index[x][y]
}
}
...