■8.マップデータの仕様に関して

以降に、本エディッタで生成する「M08」及び「M8D」マップデータに関する仕様詳細を提示します。
本エディッタでマップデータを作成した際、以降の仕様詳細を参考にデータのインポートを実施して下さい。

■8−1.「M08」形式マップデータに関して

■ヘッダー情報 (0x0000〜0x000F、16バイト)

0x0000〜0x0002 :識別拡張子情報「$38304d」(「M08」)
0x0003 :(未使用)
0x0004〜0x0005 :マップの幅(2バイト)
0x0006〜0x0007 :マップの高さ(2バイト)
0x0008 :インデックス情報 1
0x0009 :インデックス情報 2
0x000A :インデックス情報 3
0x000B :インデックス情報 4
0x000C〜0x000F :(未使用)

■マップデータ情報 (0x0010〜????、マップサイズにより変化)

マップの左上隅座標を(0,0)とすると、データの並びは

0x0010 座標 (0,0)
0x0011 座標 (0,1)
0x0012 座標 (0,2)


0x001F 座標 (0,15)

のようにまず最初に1行目のデータを1バイト毎に格納。
1行目のデータがX座標の終点に達すると、次は2行目のデータ (1,0) からの格納が始まる。
これを最終行まで繰り返し、全データを格納する。
(1チップ当たりの登録番号情報は 0〜255 の256通りまで)

■データインポートのスクリプト例(HSP36にて)

	;---------------------------------------------------------------
	; mp_wd			マップの幅
	; mp_ht			マップの高さ
	; mp_indx(4)		マップのインデックス情報
	; mp(mp_wd,mp_ht)	マップデータ格納用2次元配列変数
	;---------------------------------------------------------------

	;------------ 'M08'データファイルの読み込み
	tmp_ldname="filename"	; "filename"=対象のデータファイル名
	sdim tmp,64
	bload tmp_ldname,tmp,64	; ヘッダ情報読み込み
	;------------ マップの幅、高さの情報の取得
	mp_wd=wpeek(tmp,4)	: mp_ht=wpeek(tmp,6)
	;------------ インデックス情報の取得
	repeat 4
		mp_indx(cnt)=peek(tmp,8+cnt)
	loop
	;------------ マップデータの読み込み
	sdim tmpmpd,mp_wd*mp_ht			; マップデータ全長
	bload tmp_ldname,tmpmpd,mp_wd*mp_ht,16	; マップデータ本体の読込
	repeat mp_ht
		a2=cnt
		repeat mp_wd
			a1=cnt
			mp(a1,a2)=peek(tmpmpd,a2*mp_wd+a1)
		loop
	loop
	;------------ 処理終了

■8−2.「M8D」形式マップデータに関して

■ヘッダー情報 (0x0000〜0x000F、16バイト)

0x0000〜0x0002 :識別拡張子情報「$38304d」(「M8D」)
0x0003 :(未使用)
0x0004〜0x0005 :マップの幅(2バイト)
0x0006〜0x0007 :マップの高さ(2バイト)
0x0008 :マップ1のインデックス情報 1
0x0009 :マップ1のインデックス情報 2
0x000A :マップ1のインデックス情報 3
0x000B :マップ1のインデックス情報 4
0x000C :マップ2のインデックス情報 1
0x000D :マップ2のインデックス情報 2
0x000E :マップ2のインデックス情報 3
0x000F :マップ2のインデックス情報 4

■マップデータ情報 (0x0010〜[add1]、マップサイズにより変化)

マップの左上隅座標を(0,0)とすると、データの並びは

0x0010 マップ1の座標 (0,0)
0x0011 マップ2の座標 (0,0)
0x0012 マップ1の座標 (0,1)
0x0013 マップ2の座標 (0,1)


0x001E マップ1の座標 (0,7)
0x001F マップ2の座標 (0,7)

のように、始点 (0,0) からのマップ1と2のデータが交互に1バイト毎に並べて格納される。
他は基本的に上記「M08」形式と同じ仕様。
これを最終行まで繰り返し、全データを格納する。

■マップ1と2の名称の情報 ([add1]+1 〜 [add1]+128)

エディット画面に表示されるマップ1と2のマップ名称の文字列データが、マップデータ格納領域以降に格納される。
各名称の文字列の最大長は64文字(64バイト)。

[add1] +1〜+64 :マップ1の名称文字列(64バイト)
[add1] +65〜+128 :マップ2の名称文字列(64バイト)

■データインポートのスクリプト例(HSP36にて)

	;---------------------------------------------------------------
	; mp_wd			マップの幅
	; mp_ht			マップの高さ
	; mp_indx(4,2)		マップのインデックス情報(2次元)
	; mp(mp_wd,mp_ht,2)	マップデータ格納用2次元配列変数(x2次元)
	;---------------------------------------------------------------

	;------------ 'M8D'データファイルの読み込み
	tmp_ldname="filename"	; "filename"=対象のデータファイル名
	sdim tmp,64
	bload tmp_ldname,tmp,64	; ヘッダ情報読み込み
	;------------ マップの幅、高さの情報の取得
	mp_wd=wpeek(tmp,4)	: mp_ht=wpeek(tmp,6)
	;------------ インデックス情報の取得
	repeat 2
		a2=cnt
		repeat 4
			a1=cnt
			mp_indx(a1,a2)=peek(tmp,8+a2*4+a1)
		loop
	loop
	;------------ マップデータの読み込み
	sdim tmpmpd,mp_wd*mp_ht*2			; マップデータ全長
	bload tmp_ldname,tmpmpd,mp_wd*mp_ht*2,16	; マップデータ本体の読込
	repeat mp_ht
		a2=cnt
		repeat mp_wd
			a1=cnt
			mp(a1,a2,0)=peek(tmpmpd,a2*mp_wd*2+a1*2)
			mp(a1,a2,1)=peek(tmpmpd,a2*mp_wd*2+a1*2+1)
		loop
	loop
	;------------ 処理終了