アットウィキロゴ

HSPスクリプト v1_10

とりあえずスクリプトを公開しておきます
コメントゎ都合により英語を使っていますが意味はなんとなく伝わると思います

なお画像データ等は入ってませんのでコピーして実行してもエラーにしかなりません

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