シューティングゲームを製作しているのですが、
一面道中→ボス→二面道中→ボス・・・といったように、ステージ制にしたいです。
できればボスと戦う前にキャラを表示させてボスと会話している、といったストーリーも
入れたいのですが、どんな文をどこに入力させていいのかさっぱりです。
部分的にでもいいので教えていただけるとうれしいです。
今の段階では、一面(雑魚しかでてこない)のノルマ数を倒したら二面へ進む、
といった感じです
	celload "dotcg_n.bmp",1
	cxs=32 :cys=32
	celdiv 1,cxs,cys
	wxs=760 :wys=400
	screen 0,wxs,wys
;BGM,効果音,FONT設定
	font "Impact",16
	se=1 :bg=1
*start
	title "完成版HSPシューティング"
	pos 0,0 :picload "title.bmp",1
	stg=0
	pnt=0
	hp=10
	objmode 1
	pos wxs-48,wys-40
	chkbox "SE",se
	chkbox "BG",bg
	gsel 0,1
	gosub *pse
	if se=0 {
		repeat 4 :mmload "muon.wav",cnt :loop
	} else {
		mmload "shot.wav",0
		mmload "hit.wav",1
		mmload "bomb.wav",2
		mmload "warp.wav",3
	}
	n=se :e=bg
	clrobj
	se=n :bg=e
;ステージごとに変更するBGM,背景読み込み
*nxtstg
	gosub *clr
	a=stg+1 :a="STAGE "+a
	pos wxs/2-16,wys/2-16 :mes a
	title a :wait 150
	buffer 2
	b=strf("%02d",bck) :a="n_back"+b+".bmp"
	exist a :if strsize<0 :bck=0 :a="n_back00.bmp"
	picload a
	ssp=ginfo_winx-wxs :if ssp<0 :ssp=0
	if bg=1 { b=strf("%02d",msc) :a="bgm"+b+".mid"
		exist a :if strsize<0 :msc=0 :a="bgm00.mid"
		mmload a,4,1 :mmplay 4
	}
	gsel 0
; --- 自機の初期設定(配置) --- 同時に発射できる最大発射数、座標
	px=64 :py=wys/2-16
	tmx=hp/4+2 :if tmx<3 :tmx=3
	dim tf,tmx
	dim tx,tmx :dim ty,tmx
	repeat tmx :tf(cnt)=0 :loop
; --- 敵の初期設定(配置) --- 1ステージで追撃すべきノルマ
	emx=(stg+2)/2
	ecn=(stg\2+2)*emx
	dim ehp,emx
	dim ex,emx :dim ey,emx
	dim dx,emx :dim dy,emx
	randomize
	repeat emx :ehp(cnt)=0 :loop
	etmx=ecn
	dim etf,etmx
	dim etx,etmx :dim ety,etmx
	dim tdx,etmx :dim tdy,etmx
	repeat etmx :etf(cnt)=0 :loop
; --- メインプログラム --- 時機操作、敵を倒す作業ループ
*main
	redraw 2
	gmode 1
	scr=(scr+ssp)\wxs
	pos 0,0 :gcopy 2,scr,0,wxs-scr,wys
	if scr!0 :pos wxs-scr,0 :gcopy 2,0,0,scr,wys
	gmode 2
	stick ky,15
	if ky&1 :px-=8 :if px<8 :px=8
	if ky&4 :px+=8 :if px>(wxs/2-cxs) :px=wxs/2-cxs
	if ky&2 :py-=8 :if py<8 :py=8
	if ky&8 :py+=8 :if py>(wys-cys-8) :py=wys-cys-8
	if hp>0 :pos px,py :celput 1,0
	repeat tmx
		if tf(cnt)=0 {
			if ky&16 { tx(cnt)=px+28 :ty(cnt)=py+4
				tf(cnt)=1 :ky=0 :mmplay 0
			}
		}
		else { tx(cnt)+=16 :if tx(cnt)>(wxs-8) :tf(cnt)=0
		}
		if tf(cnt)=1 :n=cnt :gosub *hitchk
		if tf(cnt)=1 :pos tx(cnt),ty(cnt) :celput 1,2
	loop
	e=0 :repeat emx :e+=(ehp(cnt)>0) :loop
	repeat emx
		r=rnd(30)
		if ehp(cnt)>0 {
			if r<3 :r=rnd(5) :dx(cnt)=(r-2)*4 :r=rnd(5) :dy(cnt)=(r-2)*4
			x=ex(cnt) :ex(cnt)+=dx(cnt)
			if (ex(cnt)<(wxs/2))|(ex(cnt)>(wxs-cxs)) :ex(cnt)=x :dx(cnt)=-dx.cnt
			y=ey(cnt) :ey(cnt)+=dy(cnt)
			if (ey(cnt)<8)|(ey(cnt)>(wys-cys-8)) :ey(cnt)=y :dy(cnt)=-dy(cnt)
			pos ex(cnt),ey(cnt) :celput 1,1
		}
		else {
			if (r+wap=0)&(ecn>e) {
				wpx=(wxs/2)+rnd(wxs/2-cxs) :wpy=rnd(wys-cys)
				wap=10 :wen=cnt :mmplay 3
			}
		}
	loop
	r=rnd(etmx) :e=rnd(emx)
	if (etf(r)=0)&(ehp(e)>0) { ety(r)=ey(e) :etx(r)=ex(e)-24
		x=rnd(2) :tdx(r)=(x+1)*8 :y=rnd(5) :tdy(r)=(y-2)*4
		etf(r)=1
	}
	repeat etmx
		x=etx(cnt) :y=ety(cnt)
		if (etf(cnt)=1)&(px+cxs>x)&(x+(cxs/2)>px)&(py+cys>y)&(y+(cys/2)>py) {
			etf(cnt)=0 :htc=4 :hx=etx(cnt) :hy=ety(cnt) :mmplay 1
			hp- :if hp<1 :bmc=4 :bmx=px :bmy=py :mmplay 2
		}
		if etf(cnt)=1 { pos etx(cnt),ety(cnt) :celput 1,3
			etx(cnt)-=tdx(cnt) :ety(cnt)+=tdy(cnt)
			if (etx(cnt)<0)|(ety(cnt)<-16)|(ety(cnt)>(wxs-16)) :etf(cnt)=0
		}
	loop
	if wap>0 { wap- :fva=(10.0-wap)/10
		pos wpx,wpy :celput 1,1,fva,fva,57.3*wap
		if wap=0 :ehp(wen)=3 :ex(wen)=wpx :ey(wen)=wpy :dx(wen)=0 :dy(wen)=0
	}
	if htc>0 :htc- :pos hx,hy :celput 1,4+htc
	if bmc>0 :bmc- :pos bmx,bmy :celput 1,8+bmc
	color 255,255,255
	a=strf("%03d",ecn) :b=strf("%05d",pnt) :c=strf("%02d",hp)
	pos 4,4 :mes "N:"+a
	pos wxs-64,4 :mes "G:"+b
	pos 4,wys-24 :mes "H:"+c
	redraw 1
	wait 5
	if (ecn>0)&(hp>0) :goto *main
	if bmc>0 :goto *main
	if bg=1 :mmstop
	if hp>0 { hp=hp/3+hp+(hp<3) :if hp>30 :hp=30
		stg=(stg+1)\100 :bck+ :msc+ :goto *nxtstg
	}
	pos wxs/2-40,wys/2-16 :mes "GAME OVER"
	wait 100 :gosub *pse
	sdim txbf,64 :dim pt,6
	exist "best5.cnt" : if strsize>0 : bload "best5.cnt",txbf
	notesel txbf : n=pnt :i=0
	repeat 5 :noteget e,cnt :e=int(e)
		if pnt>e :pt(i)=pnt :pnt=-1 :n=cnt :i+
		pt(i)=e :i+
	loop
	gosub *clr
	a="HIGH SCORE" :title a :pos wxs/2-40,wys/2-80 :mes a
	repeat 5
		e=pt(cnt) :e=strf("%05d",e) :color 200,200,200
		if (pnt<0)&(n=cnt) :color 255,255,255
		i=1+cnt :y=16*cnt+(wys/2-48)
		pos wxs/2-32,y :mes ""+i+"."
		pos wxs/2-16,y :mes e
		noteadd e,cnt,1
	loop
	bsave "best5.cnt",txbf,35
	wait 100 :gosub *pse
	goto *start
*hitchk
	repeat emx
		x=ex(cnt) :y=ey(cnt)
		if (ehp(cnt)>0)&(x+cxs>tx(n))&(tx(n)+(cxs/2)>x)&(y+cys>ty(n))&(ty(n)+(cys/2)>y) {
			tf(n)=0 :htc=4 :hx=tx(n) :hy=ty(n) :pnt+ :mmplay 1 :ehp(cnt)-
			if ehp(cnt)<1 :ecn- :bmc=4 :bmx=ex(cnt) :bmy=ey(cnt) :pnt+=7 :mmplay 2
		}
	loop
	return
*clr
	color 0,0,0 :boxf 0,0,wxs,wys
	color 255,255,255 :return
*pse
	wait 1 :stick ky,0 :if ky!16 :goto *pse
	return
 
								


















 シューティングゲームについて
シューティングゲームについて




