とりあえずスクリプトを公開しておきます
コメントゎ都合により英語を使っていますが意味はなんとなく伝わると思います
なお画像データ等は入ってませんのでコピーして実行してもエラーにしかなりません
buffer 1,640,480 //redraw
;buffer 1,288.256 //all
;buffer 2,640,480 //char_move
;buffer 3,640,480 //map_create
;buffer 4,640,480 //window_m
;buffer 5,640,480 //npc
;buffer 6,640,480 //window_g
;buffer 7,640,480 //window_g cur
cs=16
x=cs*3:y=cs*6 //char_pos
sx=75:sy=82 //stat_char_pos
cx=250:cy=63 //cur_pos
dcx=0:dcy=30 //cur_move
tcx=cx:tcy=cy //temp_cur_pos
gx=50:gy=50 //window_pos
gosub *initial_load
goto *main_loop
main_loop //無限ループ 主にキーの入力と画面の更新を常に監視している場所
repeat
gsel 1:redraw 0
if mapload_flag!1:gosub *map_load //map change , flag=0
if cmd_flag=0:stick key,15 //status menu close , graphic move
if cmd_flag!0:stick key //status menu open , graphic stop
if cmd_flag=0{ //movable
if key=0:gcnt=1
if key=16:gosub *window_m
if mes_window=0{
if (key=32)&(cmd_flag=0):cmd_flag=1:Window_No="01":goto *main_next
gosub *movable
}
gosub *char_move
}
if cmd_flag=1{ //open_window_g
if Window_No="01"{
if (key=2):if cy>tcy:cy-=30
if (key=8):if cy<tcy+dcy*6:cy+=30
if (key=16)&(cy=tcy):Window_No="05":cx=tcx-190:cy=tcy-5:goto *main_next
if (key=16)&(cy=tcy+dcy):Window_No="06":cx=tcx-125:cy=tcy-5:goto *main_next
if (key=16)&(cy=tcy+dcy*2):Window_No="07":cx=tcx-135:cy=tcy-6:goto *main_next
if (key=16)&(cy=tcy+dcy*3):Window_No="08":cx=tcx+8:cy=tcy+245:goto *main_next
if (key=16)&(cy=tcy+dcy*4):goto *main_next
if (key=16)&(cy=tcy+dcy*5):goto *main_next
if (key=16)&(cy=tcy+dcy*6):cmd_flag=0:cy=tcy:goto *main_next
}
if Window_No="05"{ //item window
if key=1{
if cx=tcx-130:cx-=60:goto *main_next
if cx=tcx-60:cx-=70:goto *main_next
if cx=tcx+30:cx-=90:goto *main_next
}
if key=4{
if cx=tcx-190:cx+=60:goto *main_next
if cx=tcx-130:cx+=70:goto *main_next
if cx=tcx-60:cx+=90:goto *main_next
}
if key=16{
if cx=tcx-130:goto *main_next
if cx=tcx-60:goto *main_next
if cx=tcx+30:Window_No="01":cx=tcx:cy=tcy:goto *main_next
}
}
if Window_No="06"{ //magic window
if key=1{
if cx=tcx-65:cx-=60
}
if key=4{
if cx=tcx-125:cx+=60
}
if key=16{
if cx=tcx-65:Window_No="01":cx=tcx:cy=tcy:goto *main_next
}
}
if Window_No="07"{ //equip window
if key=1{
if (cx=tcx-85)|(cx=tcx-35):cx-=50
}
if key=4{
if (cx=tcx-135)|(cx=tcx-85):cx+=50
}
if key=16{
if cx=tcx-35:Window_No="01":cx=tcx:cy=tcy:goto *main_next
}
}
if Window_No="08"{ //status window
if key=16:Window_No="01":cx=tcx:cy=tcy:goto *main_next
}
if Window_No="09"{ //config
}
if Window_No="10"{ //save
}
}
if key=128:end
if cmd_flag=1:gosub *window_g
dx=x-320:dy=y-240 //画面を移動させるかキャラを移動させるかの処理(ちょっとバグあり
if dx<=0:dx=0
if dy<=0:dy=0
main_next
if dlt_size=1{
gsel 0:gcopy 1,0,0,640,480:redraw 1
}else{
gsel 0:gcopy 1,dx,dy,640,480:redraw 1
}
if cmd_flag=0:wait 10
if cmd_flag!0:wait 3
loop
window_m //メッセージウィンドウ処理
if c_move=96:if map(x/16-1,y/16)>=2:ev=map(x/16-1,y/16):goto *wm_next
if c_move= 0:if map(x/16,y/16-1)>=2:ev=map(x/16,y/16-1):goto *wm_next
if c_move=32:if map(x/16+1,y/16)>=2:ev=map(x/16+1,y/16):goto *wm_next
if c_move=64:if map(x/16,y/16+1)>=2:ev=map(x/16,y/16+1):goto *wm_next
return
wm_next
if mes_window=0:buffer 4,480,134:picload "mes_window.jpg",1:mes_window=1:goto *wm_next2
if ev_flag>=2:buffer 4,480,134:picload "mes_window.jpg",1:mes_window=1:goto *wm_next2
if (mes_window!0)&(ev_flag=0):mes_window=0
wm_next2
return
window_g //ステータス画面の処理
buffer 6,285,280 //window
picload"scr_stat"+Window_No+".jpg",1
gsel 1:pos gx,gy:gcopy 6,0,0,285,280
if (Window_No="01")|(Window_No="07")|(Window_No="08"){
gsel 1:pos sx,sy:color 0,231,0:gmode 4,,,256:gcopy 2,(24*9+24*gcnt-1),96,24,32
gtime+=1:if gtime=5:gcnt+=1:gtime=0:if gcnt=3:gcnt=1
}
gosub *sta_g:gosub *cur_g
return
sta_g //ステータス画面でのキャラステータス文字の表示位置の処理
st_x=gx+90:st_y=gy+14:s_cs=14//status_g_pos
if int(Window_No)<=4{
font "",10:color 255,255,255:pos st_x-30, st_y:mes sys_status(2)
font "",12:color 255,255,255
pos st_x, st_y+s_cs-1:mes sys_status(3)
pos st_x, st_y+s_cs*2-1:mes sys_status(5):pos st_x+55, st_y+s_cs*2-1:mes sys_status(4)
pos st_x, st_y+s_cs*3-1:mes sys_status(7):pos st_x+55, st_y+s_cs*3-1:mes sys_status(6)
}
return
cur_g //カーソルの移動処理
buffer 7,16,8 //window
picload"cur01.gif",1
gsel 1:pos cx,cy:gmode 2:gcopy 7,0,0,16,8
return
movable //移動可能かどうかの判定と移動の処理
gosub *mapload_check
if cityNo="01"{
if key=1:c_move=96:if map(x/16-1,y/16)=0:x-=cs;:if x>304:gx=gx-cs:cx=cx-cs:tcx=cx:sx=sx-cs
if key=2:c_move= 0:if map(x/16,y/16-1)=0:y-=cs;:if y>224:gy=gy-cs:cy=cy-cs:tcy=cy:sy=sy-cs
if key=4:c_move=32:if map(x/16+1,y/16)=0:x+=cs;:if x>320:gx=gx+cs:cx=cx+cs:tcx=cx:sx=sx+cs
if key=8:c_move=64:if map(x/16,y/16+1)=0:y+=cs;:if y>240:gy=gy+cs:cy=cy+cs:tcy=cy:sy=sy+cs
}
if cityNo="02"{
if key=1:c_move=96:if map(x/16-1,y/16)<=2:x-=cs:if x>304:gx=gx-cs:cx=cx-cs:tcx=cx:sx=sx-cs
if key=2:c_move= 0:if map(x/16,y/16-1)<=2:y-=cs:if y>224:gy=gy-cs:cy=cy-cs:tcy=cy:sy=sy-cs
if key=4:c_move=32:if map(x/16+1,y/16)<=2:x+=cs:if x>320:gx=gx+cs:cx=cx+cs:tcx=cx:sx=sx+cs
if key=8:c_move=64:if map(x/16,y/16+1)<=2:y+=cs:if y>240:gy=gy+cs:cy=cy+cs:tcy=cy:sy=sy+cs
}
return
mapload_check //マップの切り替えの処理
if cityNo="02"{
if key=2:if map(x/16,y/16-1)=61:cityNo="01":mapload_flag=0
}
return
char_move //キャラの歩行に関するグラフィック処理
gsel 1:pos 0,0:gcopy 3,0,0,640,480
gosub *npc_set
gsel 1:pos x,y:color 0,231,0:gmode 4,,,256:gcopy 2,(24*9+24*gcnt-1),c_move,24,32
if mes_window=1:gsel 1:pos 72,320:gcopy 4,0,0,480,134:gosub *npc_event
if mes_window=0:gcnt+=1:if gcnt=3:gcnt=1
return
npc_set //NPCの歩行の処理 (現状ではその場で足踏み
gsel 1
if cityNo="01"{
pos cs*32,cs*15:color 0,231,0:gmode 4,,,256:gcopy 5,(24*3+24*npc_cnt-1),128,24,32
pos cs*11,cs*4:color 0,231,0:gmode 4,,,256:gcopy 5,(24*3+24*npc_cnt-1),160,24,32
}
npc_time+=1:if npc_time=3:npc_cnt+=1:npc_time=0:if npc_cnt=3:npc_cnt=1
return
npc_event //NPCの会話やイベントの処理
dim event:event(0)="":ev_flag=1
notesel ev_load:noteload "ev"+cityNo+".txt"
repeat notemax
if cnt=0{
}else{
noteload "ev"+cityNo+".txt":noteget ev_load,cnt
event(cnt)=ev_load
}
loop
if cityNo="01"{
font "",15:color 50,50,100:mcnt=1
if ev=2:repeat 6,1:pos 82,336+(cs+2)*mcnt:mes event(cnt):mcnt+=1:loop:ev_flag=0
if ev=3:repeat 6,7:pos 82,336+(cs+2)*mcnt:mes event(cnt):mcnt+=1:loop:ev_flag=0
}
event_next
return
map_load //マップの読み込み
notesel maptxt_load
repeat 4
noteload"map"+cityNo+".txt"
noteget maptxt_load,cnt
if cnt=1:buf_x=int(maptxt_load)
if cnt=2:buf_y=int(maptxt_load)
if cnt=3:d1=int(maptxt_load)
loop
buffer 3,buf_x,buf_y //map
if (buf_x=640)&(buf_y=480){
dlt_size=1
}else{
dlt_size=0
}
picload "map"+cityNo+".jpg",1:noteload"map"+cityNo+".txt"
dim map,d1,d2
b_cnt=0
repeat notemax
noteload "map"+cityNo+".txt"
noteget maptxt_load,cnt
if (cnt=0)|(cnt=1)|(cnt=2)|(cnt=3){
}else{
size=strlen(maptxt_load)
repeat size
mapNo=peek (maptxt_load,cnt)
map(a_cnt,b_cnt)=mapNo-48
a_cnt+=1
loop
}
if a_cnt>=16:a_cnt=0:b_cnt+=1
loop
mapload_flag=1
screen 0,buf_x,buf_y
return
initial_load //ゲーム起動時の最初の1回だけのロード (初期設定
buffer 2,288.256 //char
picload "c01.gif",1
buffer 5,288.256 //npc
picload "c02.gif",1
dim sys_status
dim def_status
notesel sys_base //system
noteload "system.txt"
repeat notemax
notesel sys_base
noteload "system.txt"
noteget sys_base,(cnt)
if cnt=0{
sys_status(cnt)=""
def_status(cnt)=""
}else{
sys_status(cnt)=sys_base
def_status(cnt)=sys_base
}
loop
return
最終更新:2010年05月06日 22:00