3.マップエディタ

 
	;
	;	簡易マップエディタ サンプルスクリプト
	;			by onitama 1998/3
	;
 
	mapsx=32:mapsy=32	; マップ全体のサイズ
	mapcx=64:mapcy=64	; 1つのチップのX,Yサイズ
	mapvx=9:mapvy=7		; 画面に表示される大きさ(チップ単位)
	selchr=0
	mx=0:my=0		; 左上のマップ座標
	alloc mdat,mapsx*mapsy	; マップデータのバッファ
 
	alloc helpmes,2000
	helpmes={"
[UP][DOWN][LEFT][RIGHT]のボタンか、カーソルキーでマップを
スクロールさせることができます。
[<-][->]で置くためのチップを選ぶことができます。
マウスの左ボタンで、チップを置きます。
マウスの右ボタンで、カーソル位置のチップを取得できます。
"}
 
	wx=mapcx*mapvx:wy=mapcy*mapvy
	screen 0,wx,wy,1
	title "map screen"
 
	buffer 3,,,1
	picload "testchr.bmp"
	chrsx=winx/mapcx:chrsy=winy/mapcy
 
	screen 4,120,300,1
	title "control"
	palcopy 3
	objsize 60,30
	pos 30,0:button "UP",*go_up
	pos 30,60:button "DOWN",*go_down
	pos 0,30:button "LEFT",*go_left
	pos 60,30:button "RIGHT",*go_right
	pos 30,100:input selchr
	pos 0,194:button "<-",*sel1
	pos 60,194:button "->",*sel2
	pos 0,240:button "LOAD",*map_load
	pos 60,240:button "SAVE",*map_save
	objsize 120,30
	pos 0,270:button "HELP",*map_help
*chrmenu
	gsel 4
	if selchr>=chrsx : selchr=chrsx-1
	objprm 4,selchr
	pos 28,130:gmode 1,mapcx,mapcy
	a=selchr:gcopy 3,a*mapcx,0
 
*map_main
	gsel 0
	redraw 2
	gosub *map_draw
	redraw 1
*mswait
	await 30
	ginfo 1:if prmx!0 : goto *mswait
	stick a,15
	if a&$100 : goto *push_l
	if a&$200 : goto *push_r
	if a&1 : goto *go_left
	if a&2 : goto *go_up
	if a&4 : goto *go_right
	if a&8 : goto *go_down
	goto *mswait
*push_l
	x=mousex/mapcx+mx:y=mousey/mapcy+my
	poke mdat,y*mapsx+x,selchr
	goto *map_main
*push_r
	x=mousex/mapcx+mx:y=mousey/mapcy+my
	peek selchr,mdat,y*mapsx+x
	goto *chrmenu
 
 
*go_up
	if my>0 : my-
	goto *map_main
*go_down
	a=mapsy-mapvy
	if my<a : my+
	goto *map_main
*go_left
	if mx>0 : mx-
	goto *map_main
*go_right
	a=mapsx-mapvx
	if mx<a : mx+
	goto *map_main
*sel1
	if selchr>0 : selchr-
	goto *chrmenu
*sel2
	selchr+
	goto *chrmenu
 
*map_load
	dialog "map",16,"マップデータ"
	if stat=0 : goto *map_main
	bload refstr,mdat
	gosub *mkeywait
	selchr=0:mx=0:my=0
	goto *chrmenu
*map_save
	dialog "map",17,"マップデータ"
	if stat=0 : goto *map_main
	bsave refstr,mdat,mapsx*mapsy
	goto *chrmenu
*map_help
	dialog helpmes,,"簡易MAP EDITOR ver1.0"
	goto *chrmenu
 
*mkeywait
	await 30
	getkey a,1:if a : goto *mkeywait
	return
 
*map_draw
	a=0
	gmode 1,mapcx,mapcy
	y=0:i=my*mapsx+mx
	repeat mapvy
	x=0:j=i
	repeat mapvx
	peek a,mdat,j:j+
	pos x,y
	gcopy 3,a*mapcx,0
	x+=mapcx
	loop
	y+=mapcy:i+=mapsx
	loop
	return
 
*chr_draw
	gmode 2,mapcx,mapcy
	gcopy 3,a*mapcx,mapcy
	return
 
*owari
	end
 

マップデータを作るツールです。
別ウィンドをひらいて、いろいろな操作をするようになっています。
メイン画面のマップ表示サブルーチンには、
「2.キャラクター単位のマップ表示」と同じものを使っています。
また、マップ表示の直前に「redraw 2」で描画を停止して高速化しています。
チップ(キャラクター)の大きさは、自由に設定できるので、 自分の作るゲームに合わせて設定し直して使ってください。
"testchr.bmp"にはチップを並べたものが入っています。
picload命令でID 3に"testchr.bmp"を読み込むと、winx,winyに読み込んだグラフィックのサイズが入ります。
スクリプトの始めに設定したチップのサイズで割り算することで、 グラフィック内に「4*2でならんでるなぁ」などとスクリプト側で判断できるようになっています。


マップ表示とマップエディタに戻る