;
; 簡易マップエディタ サンプルスクリプト
; 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でならんでるなぁ」などとスクリプト側で判断できるようになっています。