; 初期設定選択画面
*before

	screen 0,200,230,1,400,300 : cls 4 : title "Star Ship ver0.24"
	pos 0,0 : picload "top.bmp",1
	pos 0,200   : objsize 200,25 : button "Game Start",*first
	objsize 200,25 : font "msゴシック",15
	pos 5,105   : color 255,0,0 : mes "暫定難易度"
	pos 0,120   : max=1 : combox max,150,"Easy\nNormal\nHard\nSuperHard\nMania"
	objsize 100,25 : font "msゴシック",15
	pos 5,60   : color 255,255,255 : mes "左ショット"
	pos 0,75   : combox left,150,"Normal\nWide-Shot\nV-Beam\n3-Way\nAuto-Shot\nLaser"
	pos 105,60 : color 255,255,255 : mes "右ショット"
	pos 100,75 : combox right,150,"Normal\nWide-Shot\nV-Beam\n3-Way\nAuto-Shot\nLaser"
	pos 5,150   : color 0,255,0 : mes "自機速度"
	pos 0,165   : myspeed=1 : combox myspeed,150,"Fast\nNormal\nSlow\nVerySlow"
	pos 105,150 : color 255,255,0 : mes "ゲームspeed"
	pos 100,165 : gamespeed=1 : combox gamespeed,150,"Slow\nNormal\nFast\nNoWait"
	gsel 0,1
	stop

*first
	randomize
	mx=184 : my=400		; mx,my  自機の初期配置
	mf=10			; mf     自機の初期シールド量
	shtime=3		; shtime 自機弾発射間隔
	move=4-myspeed*2	; move   自機移動速度
	mtrmax=6		; mtrmax 右側弾最大数
	mtlmax=6		; mtlmax 左側弾細大数
	smax=50			; smax   背景の星の数
	enmax=100		; enmax  敵の最大数
	etmax=200		; etmax  敵弾最大数
	etspeed=max+2*2		; etspeed敵の弾速(狙い系のみ)
	gtime=0			; gtime  経過時間
	score=0			; score  ゲームスコア
	www=3-gamespeed*20+1	; www    ゲームウェイト

; 画像・音声関係のロード
	sndload "exp.wav",1,0	; 爆発音
	sndload "kan.wav",2,0	; 食らった音
	sndload "kin.wav",3,0	; 当った音
	sndload "turnd.mid",4,1 ; BGM
	buffer 2,400,550,1
	pos 0,0 : picload "myship.bmp"
	buffer 3,400,550,1
	pos 0,0 : picload "saturn.bmp"

; 星の準備【star】
	dim stx,smax		; stx    星のx軸座標
	dim sty,smax		; sty    星のy軸座標
	dim stc,smax		; stc    星の明るさ
	dim sts,smax		; sts    星の速さ
	
	repeat smax
		rnd stx.cnt,400
		rnd sty.cnt,550
		rnd stc.cnt,4 : stc.cnt=stc.cnt+1*64-1
		rnd sts.cnt,4 : sts.cnt=sts.cnt+1*3
	loop

; 自機弾の準備
	dim mtrx,mtrmax		; mtrx   右自機弾x軸座標
	dim mtry,mtrmax		; mtry   右自機弾y軸座標
	dim mtrf,mtrmax		; mtrf   右自機弾ナンバー
	dim mtrxv,mtrmax	; mtrxv  右自機弾x方向運動量
	dim mtryv,mtrmax	; mtryv  右自機弾y方向運動量
	dim mtlx,mtlmax		; mtlx   左自機弾x軸座標
	dim mtly,mtlmax		; mtly   左自機弾y軸座標
	dim mtlf,mtlmax		; mtlf   左自機弾ナンバー
	dim mtlxv,mtlmax	; mtlxv  左自機弾x方向運動量
	dim mtlyv,mtlmax	; mtlyv  左自機弾y方向運動量

; 敵の準備
	dim enx,enmax		; enx    敵機x軸座標
	dim eny,enmax		; eny    敵機y軸座標
	dim enxv,enmax		; enxv   敵機x方向運動量
	dim enyv,enmax		; enyv   敵機y方向運動量
	dim enxw,enmax		; enxw   敵機x方向大きさ/2
	dim enyw,enmax		; enyw   敵機y方向大きさ/2
	dim enf,enmax		; enf    敵固さ・生死
	dim enm,enmax		; enm    敵の種類
	dim ent,enmax		; ent    生成されてからの時間
	dim enc,enmax		; enc    弾の発射間隔(一定)

; 敵弾の準備
	dim etx,etmax		; etx    敵弾x軸座標
	dim ety,etmax		; ety    敵弾y軸座標
	dim etf,etmax		; etf    敵弾on/off
	dim etxv,etmax		; etxv   敵弾x方向運動量
	dim etyv,etmax		; etyv   敵弾y方向運動量
	dim etxp,etmax		; etxp   画像取りこみ位置x座標
	dim etyp,etmax		; etyp   画像取りこみ位置y座標
	dim ets,etmax		; ets    敵弾速度

	screen 0,400,550,1,200,0 : cls 4 : gsel 0 : palcopy 2 : title "Star Ship ver0.24"
	gettime btime,6
	snd 4

;    メインルーチン■■■■■■■■■■■
*main
	redraw 2
	color cc,0,0 : boxf 0,0,400,550 : cc=0
	gosub *star		; 背景処理
	gosub *gamescore	; プロパティ表示
	gosub *jikimove		; 自機移動処理
	gosub *jikitama		; 自機弾処理
	gosub *men		; 面データロード
	gosub *enemymove	; 敵移動処理
	gosub *etamamove	; 敵弾移動処理
	if mf<1 : goto *endgame : ゲームオーバー処理
	await www : gtime=gtime+1 : damage=damage-1
	gettime ntime,6 : time=ntime-btime : if time<0 : time=0-time
	if time=3 : fps=gtime-gtimeb/3 : gtimeb=gtime : btime=ntime
	redraw 1
goto *main




; 背景処理■■■■■■■■■■
*star
	repeat smax
		color stc.cnt,stc.cnt,stc.cnt
		sty.cnt=sty.cnt+sts.cnt
		if sty.cnt>600 : sty.cnt=0
		pset stx.cnt,sty.cnt
	loop
return


; 自機移動■■■■■■■■■■
*jikimove
	stick pat,79 : shotr=0 : shotl=0
	t=(t+1)\shtime : if t=0 : if pat&64>0 : shotr=1 : shotl=1
	xv=(pat>>2&1)-(pat&1)
	yv=(pat>>3&1)-(pat>>1&1)
	mx=xv*move+mx : my=yv*move+my
	if mx<0   : mx=o
	if mx>366 : mx=366
	if my<100 : my=100
	if my>500 : my=500
	komax=xv*32+32
	komay=gtime\2*40
	if damage<1 : pos mx,my : gmode 2 : gcopy 2,komax,komay,32,40
	dd=dd+1\2 : if dd=0 : pos mx,my : gmode 2 : gcopy 2,komax,komay,32,40
	if pat&128>0 : gosub *pausegame
	repeat etmax
		if etf.cnt<1 : continue
		dx=etx.cnt-mx : dy=ety.cnt-my
		if (dx>4)&(dx<24)&(dy>8)&(dy<32) : etf.cnt=etf.cnt-1 : gosub *hit
	loop
return


; 自機弾発射&移動■■■■■■■■■■
*jikitama
	if right=0 : gosub *jikitamar1	; 右ノーマルショット
	if right=1 : gosub *jikitamar2	; 右6方向
	if right=2 : gosub *jikitamar3	; 右vショット
	if right=3 : gosub *jikitamar4	; 右3way
	if right=4 : gosub *jikitamar5	; 右auto
	if right=5 : gosub *jikitamar6	; 右レーザー
	if left=0  : gosub *jikitamal1	; 左ノーマルショット
	if left=1  : gosub *jikitamal2	; 左6方向
	if left=2  : gosub *jikitamal3	; 左vショット
	if left=3  : gosub *jikitamal4	; 左3way
	if left=4  : gosub *jikitamal5	; 左auto
	if left=5  : gosub *jikitamal6	; 左レーザー
return

*jikitamar1
	shtime=3	; 右側6連ショット■■■■■■■■■■
	repeat mtrmax
		if shotr=1 : if mtrf.cnt=0 : shotr=0 : mtrf.cnt=1 : mtrx.cnt=mx+22 : mtry.cnt=my
		if mtrf.cnt=0 : continue
		mtrxv.cnt=0 : mtryv.cnt=-16
		mtry.cnt=mtry.cnt+mtryv.cnt : if mtry.cnt<0 : mtrf.cnt=0
		pos mtrx.cnt,mtry.cnt : gmode 2 : gcopy 2,0,80,8,8
	loop
return

*jikitamal1
	shtime=3	; 左側6連ショット■■■■■■■■■■
	repeat mtlmax
		if shotl=1 : if mtlf.cnt=0 : shotl=0 : mtlf.cnt=1 : mtlx.cnt=mx+2 : mtly.cnt=my
		if mtlf.cnt=0 : continue
		mtlxv.cnt=0 : mtlyv.cnt=-16	
		mtly.cnt=mtly.cnt+mtlyv.cnt : if mtly.cnt<0 : mtlf.cnt=0
		pos mtlx.cnt,mtly.cnt : gmode 2 : gcopy 2,0,80,8,8
	loop
return

*jikitamar2
	shtime=1	; 右側6(同時発射)■■■■■■■■■■
	mtrxv.0=-1 : mtryv.0=-16
	mtrxv.1=2  : mtryv.1=-16
	mtrxv.2=5  : mtryv.2=-15
	mtrxv.3=10 : mtryv.3=-12
	mtrxv.4=12 : mtryv.4=-10
	mtrxv.5=16 : mtryv.5=0
	repeat mtrmax
		if shotr=1 : if mtrf.cnt>0 : shotr=0
	loop
	repeat mtrmax
		if shotr=1 : if mtrf.cnt<1 : mtrf.cnt=1 : mtrx.cnt=mx+22 : mtry.cnt=my : if cnt=5 : shotr=0
		if mtrf.cnt=0 : continue
		mtrx.cnt=mtrx.cnt+mtrxv.cnt : if mtrx.cnt>400 : mtrf.cnt=0
		mtry.cnt=mtry.cnt+mtryv.cnt : if mtry.cnt<0   : mtrf.cnt=0
		pos mtrx.cnt,mtry.cnt : gmode 2 : gcopy 2,0,80,8,8
	loop
return
*jikitamal2
	shtime=1	; 左側6方向(同時発射)■■■■■■■■■■
	mtlxv.0=1   : mtlyv.0=-16
	mtlxv.1=-2  : mtlyv.1=-16
	mtlxv.2=-5  : mtlyv.2=-15
	mtlxv.3=-10 : mtlyv.3=-12
	mtlxv.4=-12 : mtlyv.4=-10
	mtlxv.5=-16 : mtlyv.5=0
	repeat mtlmax
		if shotl=1 : if mtlf.cnt>0 : shotl=0
	loop
	repeat mtlmax
		if shotl=1 : if mtlf.cnt<1 : mtlf.cnt=1 : mtlx.cnt=mx+2 : mtly.cnt=my : if cnt=5 : shotl=0
		if mtlf.cnt=0 : continue
		mtlx.cnt=mtlx.cnt+mtlxv.cnt : if mtlx.cnt<0 : mtlf.cnt=0
		mtly.cnt=mtly.cnt+mtlyv.cnt : if mtly.cnt<0 : mtlf.cnt=0
		pos mtlx.cnt,mtly.cnt : gmode 2 : gcopy 2,0,80,8,8
	loop
return

*jikitamar3
	shtime=4	; 右側2方向(連射可能)■■■■■■■■■■
	mtrxv.0=0  : mtryv.0=-15
	mtrxv.1=3  : mtryv.1=-14
	mtrxv.2=0  : mtryv.2=-15
	mtrxv.3=3  : mtryv.3=-14
	mtrxv.4=0  : mtryv.4=-15
	mtrxv.5=3  : mtryv.5=-14
	repeat mtrmax
		if shotr=1 : if mtrf.cnt=0 : mtrf.cnt=1 : shotr=0 : mtrx.cnt=mx+22 : mtry.cnt=my
		if mtrf.cnt=0 : continue
		mtrx.cnt=mtrx.cnt+mtrxv.cnt : if mtrx.cnt>400 : mtrf.cnt=0
		mtry.cnt=mtry.cnt+mtryv.cnt : if mtry.cnt<0   : mtrf.cnt=0
		pos mtrx.cnt,mtry.cnt : gmode 2 : gcopy 2,0,80,8,8
	loop
return
*jikitamal3
	shtime=4	; 左側2方向(連射可能)■■■■■■■■■■
	mtlxv.0=0  : mtlyv.0=-15
	mtlxv.1=-3 : mtlyv.1=-14
	mtlxv.2=0  : mtlyv.2=-15
	mtlxv.3=-3 : mtlyv.3=-14
	mtlxv.4=0  : mtlyv.4=-15
	mtlxv.5=-3 : mtlyv.5=-14
	repeat mtlmax
		if shotl=1 : if mtlf.cnt=0 : mtlf.cnt=1 : shotl=0 : mtlx.cnt=mx+2 : mtly.cnt=my
		if mtlf.cnt=0 : continue
		mtlx.cnt=mtlx.cnt+mtlxv.cnt : if mtlx.cnt<0 : mtlf.cnt=0
		mtly.cnt=mtly.cnt+mtlyv.cnt : if mtly.cnt<0 : mtlf.cnt=0
		pos mtlx.cnt,mtly.cnt : gmode 2 : gcopy 2,0,80,8,8
	loop
return

*jikitamar4
	shtime=3	; 右側3方向(3発づつ)■■■■■■■■■■
	mtrxv.0=-1 : mtryv.0=-16
	mtrxv.1=2  : mtryv.1=-15
	mtrxv.2=5  : mtryv.2=-14
	mtrxv.3=-1 : mtryv.3=-16
	mtrxv.4=2  : mtryv.4=-15
	mtrxv.5=5  : mtryv.5=-14
	if shotr=1 : if (mtrf.0>0)or(mtrf.1>0)or(mtrf.2>0) : if (mtrf.3>0)or(mtrf.4>0)or(mtrf.5>0) : shotr=0
	repeat mtrmax
		if shotr=1 : if mtrf.cnt=0 : mtrf.cnt=1 : mtrx.cnt=mx+22 : mtry.cnt=my : ttr=ttr+1\3 : if ttr=0 : shotr=0
		if mtrf.cnt=0 : continue
		mtrx.cnt=mtrx.cnt+mtrxv.cnt : if mtrx.cnt>400 : mtrf.cnt=0
		mtry.cnt=mtry.cnt+mtryv.cnt : if mtry.cnt<0   : mtrf.cnt=0
		pos mtrx.cnt,mtry.cnt : gmode 2 : gcopy 2,0,80,8,8
	loop
return
*jikitamal4
	shtime=3	; 左側3方向(3発づつ)■■■■■■■■■■
	mtlxv.0=1  : mtlyv.0=-16
	mtlxv.1=-2 : mtlyv.1=-15
	mtlxv.2=-5 : mtlyv.2=-14
	mtlxv.3=1  : mtlyv.3=-16
	mtlxv.4=-2 : mtlyv.4=-15
	mtlxv.5=-5 : mtlyv.5=-14
	if shotl=1 : if (mtlf.0>0)or(mtlf.1>0)or(mtlf.2>0) : if (mtlf.3>0)or(mtlf.4>0)or(mtlf.5>0) : shotl=0
	repeat mtlmax
		if shotl=1 : if mtlf.cnt=0 : mtlf.cnt=1 : mtlx.cnt=mx+2 : mtly.cnt=my : ttl=ttl+1\3 : if ttl=0 : shotl=0
		if mtlf.cnt=0 : continue
		mtlx.cnt=mtlx.cnt+mtlxv.cnt : if mtlx.cnt<0 : mtlf.cnt=0
		mtly.cnt=mtly.cnt+mtlyv.cnt : if mtly.cnt<0 : mtlf.cnt=0
		pos mtlx.cnt,mtly.cnt : gmode 2 : gcopy 2,0,80,8,8
	loop
return

*jikitamar5
	shtime=3	; 右側テグザー■■■■■■■■■■
	if shotr=0 : return
	mtrf.0=0 : mtrf.1=0 : mtrf.2=0 : mtrf.3=0 : mtrf.4=0 : mtrf.5=0
	repeat enmax
		if enf.cnt<1 : continue
		mtrx.0=enx.cnt+enxw.cnt : mtry.0=eny.cnt+enyw.cnt : mtrf.0=1 : shotr=0 : grx=mx+26 : gry=my+4 : pos grx,gry : color 255,0,0 : line mtrx.0,mtry.0 : break
	loop
return

*jikitamal5
	shtime=3	; 左側テグザー■■■■■■■■■■
	if shotl=0 : return
	mtlf.0=0 : mtlf.1=0 : mtlf.2=0 : mtlf.3=0 : mtlf.4=0 : mtlf.5=0
	repeat enmax
		if enf.cnt<1 : continue
		mtlx.0=enx.cnt+enxw.cnt : mtly.0=eny.cnt+enyw.cnt : mtlf.0=1 : shotl=0 : glx=mx+5 : gly=my+4 : pos glx,gly : color 255,0,0 : line mtlx.0,mtly.0 : break
	loop
return


*jikitamar6
	shtime=6	; 右側レーザー■■■■■■■■■■
	if shotr=1 : if (mtrf.0>0)or(mtrf.1>0)or(mtrf.2>0) : if (mtrf.3>0)or(mtrf.4>0)or(mtrf.5>0) : shotr=0
	repeat mtrmax
		if shotr=1 : if mtrf.cnt=0 : mtrf.cnt=255 : mtrx.cnt=mx+22 : mtry.cnt=my-(cnt*16) : ttr=ttr+1\3 : if ttr=0 : shotr=0
		if mtrf.cnt=0 : continue
		mtry.cnt=mtry.cnt-32 : if mtry.cnt<-16 : mtrf.cnt=0
		pos mtrx.cnt,mtry.cnt : gmode 2 : gcopy 2,8,80,8,16
	loop
return
*jikitamal6
	shtime=6	; 左側レーザー■■■■■■■■■■
	if shotl=1 : if (mtlf.0>0)or(mtlf.1>0)or(mtlf.2>0) : if (mtlf.3>0)or(mtlf.4>0)or(mtlf.5>0) : shotl=0
	repeat mtlmax
		if shotl=1 : if mtlf.cnt=0 : mtlf.cnt=255 : mtlx.cnt=mx+2 : mtly.cnt=my-(cnt*16) : ttl=ttl+1\3 : if ttl=0 : shotl=0
		if mtlf.cnt=0 : continue
		mtly.cnt=mtly.cnt-32 : if mtly.cnt<-16 : mtlf.cnt=0
		pos mtlx.cnt,mtly.cnt : gmode 2 : gcopy 2,8,80,8,16
	loop
return


; 敵弾移動■■■■■■■■■■
*etamamove
	repeat etmax
		if etf.cnt=0 : continue
		etx.cnt=etx.cnt+etxv.cnt
		ety.cnt=ety.cnt+etyv.cnt
		if etx.cnt>400 : etf.cnt=0 : continue
		if etx.cnt<0   : etf.cnt=0 : continue
		if ety.cnt>550 : etf.cnt=0 : continue
		if ety.cnt<0   : etf.cnt=0 : continue
		pos etx.cnt,ety.cnt : gmode 2 : gcopy 2,etxp.cnt,etyp.cnt,8,8
	loop
return


; 敵弾生成1(狙い系)■■■■■■■■■■
*etamaborn1
	posx=0 : posy=88 : widx=8 : widy=8
	dx=mx-enx.cnt : px=dx : if dx<0 : dx=0-dx
	dy=my-eny.cnt : py=dy : if dy<0 : dy=0-dy
	dv=dx : if dv<dy : dv=dy
	edx=enx.cnt+enxw.cnt : edy=eny.cnt+enyw.cnt
	repeat etmax
		if etf.cnt>0 : continue
		etf.cnt=1 : etx.cnt=edx : ety.cnt=edy
		etxp.cnt=0 : etyp.cnt=88
		rnd tss,4
		etxv.cnt=px*(etspeed+tss)/dv : etyv.cnt=py*(etspeed+tss)/dv : break
	loop
return

; 敵弾生成2(8方向系)■■■■■■■■■■
*etamaborn2
	edx=enx.cnt+12 : edy=eny.cnt+12
	repeat etmax
		if etf.cnt>0 : continue
		eh=eh+1 : etf.cnt=1 : etx.cnt=edx : ety.cnt=edy
		etxp.cnt=0 : etyp.cnt=88
		if eh=1 : etxv.cnt=0  : etyv.cnt=-8 : continue
		if eh=2 : etxv.cnt=5  : etyv.cnt=-5 : continue
		if eh=3 : etxv.cnt=8  : etyv.cnt=0  : continue
		if eh=4 : etxv.cnt=5  : etyv.cnt=5  : continue
		if eh=5 : etxv.cnt=0  : etyv.cnt=8  : continue
		if eh=6 : etxv.cnt=-5 : etyv.cnt=5  : continue
		if eh=7 : etxv.cnt=-8 : etyv.cnt=0  : continue
		if eh=8 : etxv.cnt=-5 : etyv.cnt=-5 : eh=0 : break
	loop
return


; 敵弾生成3(16方向系)■■■■■■■■■■
*etamaborn3
	edx=enx.cnt+enxw.cnt : edy=eny.cnt+enyw.cnt
	repeat etmax
		if etf.cnt>0 : continue
		eh=eh+1 : etf.cnt=1 : etx.cnt=edx : ety.cnt=edy
		etxp.cnt=0 : etyp.cnt=88
		if eh=1 : etxv.cnt=0  : etyv.cnt=-7 : continue
		if eh=2 : etxv.cnt=3  : etyv.cnt=-6 : continue
		if eh=3 : etxv.cnt=5  : etyv.cnt=-5 : continue
		if eh=4 : etxv.cnt=6  : etyv.cnt=-3 : continue
		if eh=5 : etxv.cnt=7  : etyv.cnt=0  : continue
		if eh=6 : etxv.cnt=6  : etyv.cnt=3  : continue
		if eh=7 : etxv.cnt=5  : etyv.cnt=5  : continue
		if eh=8 : etxv.cnt=3  : etyv.cnt=6  : continue
		if eh=9 : etxv.cnt=0  : etyv.cnt=7  : continue
		if eh=10: etxv.cnt=-3 : etyv.cnt=6  : continue
		if eh=11: etxv.cnt=-5 : etyv.cnt=5  : continue
		if eh=12: etxv.cnt=-6 : etyv.cnt=3  : continue
		if eh=13: etxv.cnt=-7 : etyv.cnt=0  : continue
		if eh=14: etxv.cnt=-6 : etyv.cnt=-3 : continue
		if eh=15: etxv.cnt=-5 : etyv.cnt=-5 : continue
		if eh=16: etxv.cnt=-3 : etyv.cnt=-6 : eh=0 : break
	loop
return


; 敵弾生成4(前方3方向系)■■■■■■■■■■
*etamaborn4
	edx=enx.cnt+enxw.cnt : edy=eny.cnt+enyw.cnt
	repeat etmax
		if etf.cnt>0 : continue
		eh=eh+1 : etf.cnt=255 : etx.cnt=edx
		etyp.cnt=80
		if eh=1 : etxp.cnt=48 : ety.cnt=edy+4 : etxv.cnt=0  : etyv.cnt=8 : continue
		if eh=2 : etxp.cnt=32 : ety.cnt=edy   : etxv.cnt=-2 : etyv.cnt=8 : continue
		if eh=3 : etxp.cnt=64 : ety.cnt=edy   : etxv.cnt=2  : etyv.cnt=8 : eh=0 : break
	loop
return


; 敵弾生成5(前方5方向レーザー)■■■■■■■■■■
*etamaborn5
	edx=enx.cnt+enxw.cnt : edy=eny.cnt+enyw.cnt
	repeat etmax
		if etf.cnt>0 : continue
		eh=eh+1 : etf.cnt=255 : etx.cnt=edx
		etyp.cnt=80
		if eh=1 : etxp.cnt=32 : ety.cnt=edy   : etxv.cnt=-8 : etyv.cnt=7 : continue
		if eh=2 : etxp.cnt=40 : ety.cnt=edy+2 : etxv.cnt=-4 : etyv.cnt=8 : continue
		if eh=3 : etxp.cnt=48 : ety.cnt=edy+4 : etxv.cnt=0  : etyv.cnt=8 : continue
		if eh=4 : etxp.cnt=56 : ety.cnt=edy+2 : etxv.cnt=4  : etyv.cnt=8 : continue
		if eh=5 : etxp.cnt=64 : ety.cnt=edy   : etxv.cnt=8  : etyv.cnt=7 : eh=0 : break
	loop
return


; 敵移動■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
*enemymove
	repeat enmax
		tx=enx.cnt : ty=eny.cnt : en=cnt
		if enf.cnt<1 : continue
		if enm.cnt=0 : gosub *em00
		if enm.cnt=1 : gosub *em01
		if enm.cnt=2 : gosub *em02
		if enm.cnt=3 : gosub *em03
		if enm.cnt=4 : gosub *em04
		if enm.cnt=5 : gosub *em05
		if enm.cnt=6 : gosub *em06
		if enm.cnt=7 : gosub *em07
		if enm.cnt=8 : gosub *em08
		if enm.cnt=10: gosub *missilemove
		if enm.cnt=11: gosub *yd_missilemove
		if enm.cnt=12: gosub *tyubo1m
		if enm.cnt=13: gosub *x_missilemove
	loop
return


; 直進ミサイル■■■■■■■■■■
*missileborn
	repeat enmax
		if enf.cnt>0 : continue
		enm.cnt=10			;敵の名前
		enxw.cnt=8 : enxw.cnt=8		;大きさ/2
		ent.cnt=0			;生成時間リセット
		enf.cnt=1			;硬さ
		enx.cnt=tx+12 : eny.cnt=ty+28	;生成位置
		enxv.cnt=0 : enyv.cnt=12	;移動方向
		break
	loop
return

*missilemove
	repeat mtrmax
		if mtrf.cnt<1 : continue
		dx=tx-mtrx.cnt : dy=ty-mtry.cnt
		if (dx<20)&(dx>-20)&(dy<20)&(dy>-20) : enf.en=enf.en-1 : mtrf.cnt=mtrf.cnt-1 : wx=mtrx.cnt-8 : wy=mtry.cnt-8 : pos wx,wy : gmode 2 : gcopy 2,32,96,32,32 : snd 1 : score=score+1 : break
	loop
	repeat mtlmax
		if mtlf.cnt<1 : continue
		dx=tx-mtlx.cnt : dy=ty-mtly.cnt
		if (dx<20)&(dx>-20)&(dy<20)&(dy>-20) : enf.en=enf.en-1 : mtlf.cnt=mtrf.cnt-1 : wx=mtlx.cnt-8 : wy=mtly.cnt-8 : pos wx,wy : gmode 2 : gcopy 2,32,96,32,32 : snd 1 : score=score+1 : break
	loop
	if enf.cnt<1 : return
	ent.cnt=ent.cnt+1
	eny.cnt=eny.cnt+enyv.cnt
	if eny.cnt>582 : enf.cnt=0
	pos enx.cnt,eny.cnt : gmode 2 : gcopy 2,112,48,16,16

	qx=mx-enx.cnt : qy=my-eny.cnt
	if (qx<0)and(qx>-16)and(qy<0)and(qy>-24) : gosub *hit

return


; x軸誘導ミサイル■■■■■■■■■■
*x_missileborn
	repeat enmax
		if enf.cnt>0 : continue
		enm.cnt=13			;敵の名前
		enxw.cnt=8 : enxw.cnt=8		;大きさ/2
		ent.cnt=0			;生成時間リセット
		enf.cnt=1			;硬さ
		enx.cnt=tx+12 : eny.cnt=ty+28	;生成位置
		enxv.cnt=0 : enyv.cnt=8		;移動方向
		break
	loop
return

*x_missilemove
	repeat mtrmax
		if mtrf.cnt<1 : continue
		dx=tx-mtrx.cnt : dy=ty-mtry.cnt
		if (dx<20)&(dx>-20)&(dy<20)&(dy>-20) : enf.en=enf.en-1 : mtrf.cnt=mtrf.cnt-1 : wx=mtrx.cnt-8 : wy=mtry.cnt-8 : pos wx,wy : gmode 2 : gcopy 2,32,96,32,32 : snd 1 : score=score+1 : break
	loop
	repeat mtlmax
		if mtlf.cnt<1 : continue
		dx=tx-mtlx.cnt : dy=ty-mtly.cnt
		if (dx<20)&(dx>-20)&(dy<20)&(dy>-20) : enf.en=enf.en-1 : mtlf.cnt=mtrf.cnt-1 : wx=mtlx.cnt-8 : wy=mtly.cnt-8 : pos wx,wy : gmode 2 : gcopy 2,32,96,32,32 : snd 1 : score=score+1 : break
	loop

	if enf.cnt<1 : return
	ent.cnt=ent.cnt+1
	if (mx+8)=enx.cnt : enxv.cnt=0
	if (mx+8)>enx.cnt : enxv.cnt=2 : else : enxv.cnt=-2
	enx.cnt=enx.cnt+enxv.cnt : eny.cnt=eny.cnt+enyv.cnt
	if eny.cnt>582 : enf.cnt=0
	pos enx.cnt,eny.cnt : gmode 2 : gcopy 2,112,48,16,16

	qx=mx-enx.cnt : qy=my-eny.cnt
	if (qx<0)and(qx>-16)and(qy<0)and(qy>-24) : gosub *hit

return


; 誘導ミサイル■■■■■■■■■■
*yd_missileborn
	repeat enmax
		if enf.cnt>0 : continue
		enm.cnt=11			;敵の名前
		enxw.cnt=8 : enxw.cnt=8		;大きさ/2
		ent.cnt=0			;生成時間リセット
		enf.cnt=1			;硬さ
		enx.cnt=tx+12 : eny.cnt=ty+28	;生成位置
		enxv.cnt=0 : enyv.cnt=4		;移動方向
		break
	loop
return

*yd_missilemove
	repeat mtrmax
		if mtrf.cnt<1 : continue
		dx=tx-mtrx.cnt : dy=ty-mtry.cnt
		if (dx<20)&(dx>-20)&(dy<20)&(dy>-20) : enf.en=enf.en-1 : mtrf.cnt=mtrf.cnt-1 : wx=mtrx.cnt-8 : wy=mtry.cnt-8 : pos wx,wy : gmode 2 : gcopy 2,32,96,32,32 : snd 1 : score=score+1 : break
	loop
	repeat mtlmax
		if mtlf.cnt<1 : continue
		dx=tx-mtlx.cnt : dy=ty-mtly.cnt
		if (dx<20)&(dx>-20)&(dy<20)&(dy>-20) : enf.en=enf.en-1 : mtlf.cnt=mtrf.cnt-1 : wx=mtlx.cnt-8 : wy=mtly.cnt-8 : pos wx,wy : gmode 2 : gcopy 2,32,96,32,32 : snd 1 : score=score+1 : break
	loop
	if enf.cnt<1 : return
	ent.cnt=ent.cnt+1
	enx.cnt=enx.cnt+enxv.cnt : eny.cnt=eny.cnt+enyv.cnt
	if enx.cnt<-40 : enf.cnt=0
	if enx.cnt>432 : enf.cnt=0
	if eny.cnt<-40 : enf.cnt=0
	if eny.cnt>582 : enf.cnt=0
	pos enx.cnt,eny.cnt : gmode 2
	if (enxv.cnt<0)&(enyv.cnt<0) : gcopy 2,96,0,16,16
	if (enxv.cnt<0)&(enyv.cnt=0) : gcopy 2,96,16,16,16
	if (enxv.cnt<0)&(enyv.cnt>0) : gcopy 2,96,32,16,16
	if (enxv.cnt=0)&(enyv.cnt<0) : gcopy 2,96,48,16,16
	if (enxv.cnt>0)&(enyv.cnt<0) : gcopy 2,112,0,16,16
	if (enxv.cnt>0)&(enyv.cnt=0) : gcopy 2,112,16,16,16
	if (enxv.cnt>0)&(enyv.cnt>0) : gcopy 2,112,32,16,16
	if (enxv.cnt=0)&(enyv.cnt>0) : gcopy 2,112,48,16,16

	qx=mx-enx.cnt : qy=my-eny.cnt
	if (qx<0)and(qx>-16)and(qy<0)and(qy>-24) : gosub *hit


	if ent.cnt\4>0 : return
	dx=mx+8-enx.cnt : px=dx : if dx<0 : dx=0-dx
	dy=my+8-eny.cnt : py=dy : if dy<0 : dy=0-dy
	dv=dx : if dv<dy : dv=dy
	enxv.cnt=px*8/dv : enyv.cnt=py*8/dv
return


; アステロイド大(直進のみ)■■■■■■■■■■
*eb00
	repeat enmax
		if enf.cnt>0 : continue
		enm.cnt=0			;敵の名前
		enxw.cnt=12 : enyw.cnt=12	;大きさ/2
		ent.cnt=0			;生成時間リセット
		enf.cnt=8			;硬さ
		rnd xxx,400
		enx.cnt=xxx-16 : eny.cnt=-32	;生成位置
		rnd yyv,3
		enxv.cnt=0 : enyv.cnt=yyv+2	;移動方向
		break
	loop
return

*em00
	ent.cnt=ent.cnt+1
	enx.cnt=enx.cnt+enxv.cnt : eny.cnt=eny.cnt+enyv.cnt
	if eny.cnt>550 : enf.cnt=0
	pos enx.cnt,eny.cnt : gmode 2 : gcopy 2,0,96,32,32
	dx=mx-enx.cnt : dy=my-eny.cnt
	if (dx<16)and(dx>-16)and(dy<16)and(dy>-16) : gosub *hit
	repeat mtrmax
		if mtrf.cnt<1 : continue
		dx=tx-mtrx.cnt : dy=ty-mtry.cnt
		if (dx<8)&(dx>-40)&(dy<8)&(dy>-40) : enf.en=enf.en-1 : mtrf.cnt=mtrf.cnt-1 : wx=mtrx.cnt-12 : wy=mtry.cnt-12 : pos wx,wy : gmode 2 : gcopy 2,64,96,32,32 : snd 3 : if enf.en=0 : score=score+20 : pos wx,wy : gmode 2 : gcopy 2,32,96,32,32 : snd 1
	loop
	repeat mtlmax
		if mtlf.cnt<1 : continue
		dx=tx-mtlx.cnt : dy=ty-mtly.cnt
		if (dx<8)&(dx>-40)&(dy<8)&(dy>-40) : enf.en=enf.en-1 : mtlf.cnt=mtrf.cnt-1 : wx=mtlx.cnt-12 : wy=mtly.cnt-12 : pos wx,wy : gmode 2 : gcopy 2,64,96,32,32 : snd 3 : if enf.en=0 : score=score+20 : pos wx,wy : gmode 2 : gcopy 2,32,96,32,32 : snd 1
	loop
return


; アステロイド小(直進のみ)■■■■■■■■■■
*eb01
	repeat enmax
		if enf.cnt>0 : continue
		enm.cnt=1			;敵の名前
		enxw.cnt=8 : enyw.cnt=8		;大きさ/2
		ent.cnt=0			;生成時間リセット
		enf.cnt=2			;硬さ
		rnd xxx,400
		enx.cnt=xxx-8 : eny.cnt=-32	;生成位置
		rnd yyv,5
		enxv.cnt=0 : enyv.cnt=yyv+6	;移動方向
		break
	loop
return

*em01
	ent.cnt=ent.cnt+1
	enx.cnt=enx.cnt+enxv.cnt : eny.cnt=eny.cnt+enyv.cnt
	if eny.cnt>550 : enf.cnt=0
	pos enx.cnt,eny.cnt : gmode 2 : gcopy 2,15,80,16,16
	dx=mx-enx.cnt : dy=my-eny.cnt
	if (dx<0)and(dx>-16)and(dy<0)and(dy>-16) : gosub *hit
	repeat mtrmax
		if mtrf.cnt<1 : continue
		dx=tx-mtrx.cnt : dy=ty-mtry.cnt
		if (dx<8)&(dx>-24)&(dy<8)&(dy>-24) : enf.en=enf.en-1 : mtrf.cnt=mtrf.cnt-1 : wx=mtrx.cnt-12 : wy=mtry.cnt-12 : pos wx,wy : gmode 2 : gcopy 2,64,96,32,32 : snd 3 : if enf.en=0 : score=score+5 : pos wx,wy : gmode 2 : gcopy 2,32,96,32,32 : snd 1
	loop
	repeat mtlmax
		if mtlf.cnt<1 : continue
		dx=tx-mtlx.cnt : dy=ty-mtly.cnt
		if (dx<8)&(dx>-24)&(dy<8)&(dy>-24) : enf.en=enf.en-1 : mtlf.cnt=mtrf.cnt-1 : wx=mtlx.cnt-12 : wy=mtly.cnt-12 : pos wx,wy : gmode 2 : gcopy 2,64,96,32,32 : snd 3 : if enf.en=0 : score=score+5 : pos wx,wy : gmode 2 : gcopy 2,32,96,32,32 : snd 1
	loop
return


; 直進 → 一定時間後狙う弾を撃つ → 左斜め上に逃げる■■■■■■■■■■
*eb02
	repeat enmax
		if enf.cnt>0 : continue
		enm.cnt=2			;敵の名前
		enxw.cnt=12 : enyw.cnt=12	;弾の発射位置
		ent.cnt=0			;生成時間リセット
		enf.cnt=1			;硬さ
		enx.cnt=bx : eny.cnt=by		;生成位置
		enxv.cnt=0 : enyv.cnt=8		;移動方向
		break
	loop
return

*em02
	ent.cnt=ent.cnt+1
	if ent.cnt>37 : if gtime\5=0 : enxv.cnt=-8 : enyv.cnt=-8  : gosub *etamaborn1
	enx.cnt=enx.cnt+enxv.cnt : eny.cnt=eny.cnt+enyv.cnt
	if enx.cnt<-32 : enf.cnt=0
	pos enx.cnt,eny.cnt : gmode 2 : gcopy 2,0,128,32,32
	dx=mx-enx.cnt : dy=my-eny.cnt
	if (dx<16)and(dx>-16)and(dy<16)and(dy>-16) : gosub *hit
	repeat mtrmax
		if mtrf.cnt<1 : continue
		dx=tx-mtrx.cnt : dy=ty-mtry.cnt
		if (dx<4)&(dx>-36)&(dy<4)&(dy>-36) : enf.en=enf.en-1 : mtrf.cnt=mtrf.cnt-1 : score=score+10 : pos tx,ty : gmode 2 : gcopy 2,32,96,32,32 : snd 1
	loop
	repeat mtlmax
		if mtlf.cnt<1 : continue
		dx=tx-mtlx.cnt : dy=ty-mtly.cnt
		if (dx<4)&(dx>-36)&(dy<4)&(dy>-36) : enf.en=enf.en-1 : mtlf.cnt=mtrf.cnt-1 : score=score+10 : pos tx,ty : gmode 2 : gcopy 2,32,96,32,32 : snd 1
	loop
return


; 直進 → 一定時間後狙う弾を撃つ → 右斜め上に逃げる■■■■■■■■■■
*eb03
	repeat enmax
		if enf.cnt>0 : continue
		enm.cnt=3			;敵の名前
		enxw.cnt=12 : enyw.cnt=12	;弾の発射位置
		ent.cnt=0			;生成時間リセット
		enf.cnt=1			;硬さ
		enx.cnt=bx : eny.cnt=by		;生成位置
		enxv.cnt=0 : enyv.cnt=8		;移動方向
		break
	loop
return

*em03
	ent.cnt=ent.cnt+1
	if ent.cnt>37 : if gtime\5=0 : enxv.cnt=8 : enyv.cnt=-8 : gosub *etamaborn1
	enx.cnt=enx.cnt+enxv.cnt : eny.cnt=eny.cnt+enyv.cnt
	if enx.cnt>400 : enf.cnt=0
	pos enx.cnt,eny.cnt : gmode 2 : gcopy 2,0,128,32,32
	dx=mx-enx.cnt : dy=my-eny.cnt
	if (dx<16)and(dx>-16)and(dy<16)and(dy>-16) : gosub *hit
	repeat mtrmax
		if mtrf.cnt<1 : continue
		dx=tx-mtrx.cnt : dy=ty-mtry.cnt
		if (dx<4)&(dx>-36)&(dy<4)&(dy>-36) : enf.en=enf.en-1 : mtrf.cnt=mtrf.cnt-1 : score=score+10 : pos tx,ty : gmode 2 : gcopy 2,32,96,32,32 : snd 1
	loop
	repeat mtlmax
		if mtlf.cnt<1 : continue
		dx=tx-mtlx.cnt : dy=ty-mtly.cnt
		if (dx<4)&(dx>-36)&(dy<4)&(dy>-36) : enf.en=enf.en-1 : mtlf.cnt=mtrf.cnt-1 : score=score+10 : pos tx,ty : gmode 2 : gcopy 2,32,96,32,32 : snd 1
	loop
return


; 左から出現→ゆっくり右斜め上へ(ミサイルを撃ちながら)■■■■■■■■■■
*eb04
	repeat enmax
		if enf.cnt>0 : continue
		enm.cnt=4			;敵の名前
		enxw.cnt=12 : enyw.cnt=12	;弾の発射位置
		ent.cnt=0			;生成時間リセット
		enf.cnt=4			;硬さ
		enx.cnt=bx : eny.cnt=by		;生成位置
		enxv.cnt=5 : enyv.cnt=-1	;移動方向
		break
	loop
return

*em04
	ent.cnt=ent.cnt+1
	if ent.cnt\10=0 : gosub *yd_missileborn
	enx.cnt=enx.cnt+enxv.cnt : eny.cnt=eny.cnt+enyv.cnt
	if enx.cnt>400 : enf.cnt=0
	pos enx.cnt,eny.cnt : gmode 2 : gcopy 2,64,128,32,32
	dx=mx-enx.cnt : dy=my-eny.cnt
	if (dx<16)and(dx>-16)and(dy<16)and(dy>-16) : gosub *hit
	repeat mtrmax
		if mtrf.cnt<1 : continue
		dx=tx-mtrx.cnt : dy=ty-mtry.cnt
		if (dx<4)&(dx>-36)&(dy<4)&(dy>-36) : enf.en=enf.en-1 : mtrf.cnt=mtrf.cnt-1 : wx=mtrx.cnt-12 : wy=mtry.cnt-12 : pos wx,wy : gmode 2 : gcopy 2,64,96,32,32 : snd 3 : if enf.en=0  : score=score+30 : pos tx,ty : gmode 2 : gcopy 2,32,96,32,32 : snd 1
	loop
	repeat mtlmax
		if mtlf.cnt<1 : continue
		dx=tx-mtlx.cnt : dy=ty-mtly.cnt
		if (dx<4)&(dx>-36)&(dy<4)&(dy>-36) : enf.en=enf.en-1 : mtlf.cnt=mtrf.cnt-1 : wx=mtlx.cnt-12 : wy=mtly.cnt-12 : pos wx,wy : gmode 2 : gcopy 2,64,96,32,32 : snd 3 : if enf.en=0  : score=score+30 : pos tx,ty : gmode 2 : gcopy 2,32,96,32,32 : snd 1
	loop
return


; 右から出現→ゆっくり左斜め上へ(ミサイルを撃ちながら)■■■■■■■■■■
*eb05
	repeat enmax
		if enf.cnt>0 : continue
		enm.cnt=5			;敵の名前
		enxw.cnt=12 : enyw.cnt=12	;弾の発射位置
		ent.cnt=0			;生成時間リセット
		enf.cnt=4			;硬さ
		enx.cnt=bx : eny.cnt=by		;生成位置
		enxv.cnt=-5 : enyv.cnt=-1	;移動方向
		break
	loop
return

*em05
	ent.cnt=ent.cnt+1
	if ent.cnt\10=0 : gosub *yd_missileborn
	enx.cnt=enx.cnt+enxv.cnt : eny.cnt=eny.cnt+enyv.cnt
	if enx.cnt<-32 : enf.cnt=0
	pos enx.cnt,eny.cnt : gmode 2 : gcopy 2,32,128,32,32
	dx=mx-enx.cnt : dy=my-eny.cnt
	if (dx<16)and(dx>-16)and(dy<16)and(dy>-16) : gosub *hit
	repeat mtrmax
		if mtrf.cnt<1 : continue
		dx=tx-mtrx.cnt : dy=ty-mtry.cnt
		if (dx<4)&(dx>-36)&(dy<4)&(dy>-36) : enf.en=enf.en-1 : mtrf.cnt=mtrf.cnt-1 : wx=mtrx.cnt-12 : wy=mtry.cnt-12 : pos wx,wy : gmode 2 : gcopy 2,64,96,32,32 : snd 3 : if enf.en=0 : score=score+30 : pos tx,ty : gmode 2 : gcopy 2,32,96,32,32 : snd 1
	loop
	repeat mtlmax
		if mtlf.cnt<1 : continue
		dx=tx-mtlx.cnt : dy=ty-mtly.cnt
		if (dx<4)&(dx>-36)&(dy<4)&(dy>-36) : enf.en=enf.en-1 : mtlf.cnt=mtrf.cnt-1 : wx=mtlx.cnt-12 : wy=mtly.cnt-12 : pos wx,wy : gmode 2 : gcopy 2,64,96,32,32 : snd 3 : if enf.en=0 : score=score+30 : pos tx,ty : gmode 2 : gcopy 2,32,96,32,32 : snd 1
	loop
return


; (後ろから出現)直進 → 一定時間後狙う弾を撃つ → 左斜め上に逃げる■■■■■■■■■■
*eb06
	repeat enmax
		if enf.cnt>0 : continue
		enm.cnt=6			;敵の名前
		enxw.cnt=12 : enyw.cnt=12	;弾の発射位置
		ent.cnt=0			;生成時間リセット
		enf.cnt=1			;硬さ
		enx.cnt=bx : eny.cnt=by		;生成位置
		enxv.cnt=0 : enyv.cnt=-8	;移動方向
		break
	loop
return

*em06
	ent.cnt=ent.cnt+1
	if ent.cnt>37 : if gtime\5=0 : enxv.cnt=-8 : enyv.cnt=-8  : gosub *etamaborn1
	enx.cnt=enx.cnt+enxv.cnt : eny.cnt=eny.cnt+enyv.cnt
	if enx.cnt<-32 : enf.cnt=0
	pos enx.cnt,eny.cnt : gmode 2 : gcopy 2,0,128,32,32
	dx=mx-enx.cnt : dy=my-eny.cnt
	if (dx<16)and(dx>-16)and(dy<16)and(dy>-16) : gosub *hit
	repeat mtrmax
		if mtrf.cnt<1 : continue
		dx=tx-mtrx.cnt : dy=ty-mtry.cnt
		if (dx<4)&(dx>-36)&(dy<4)&(dy>-36) : enf.en=enf.en-1 : mtrf.cnt=mtrf.cnt-1 : score=score+10 : pos tx,ty : gmode 2 : gcopy 2,32,96,32,32 : snd 1
	loop
	repeat mtlmax
		if mtlf.cnt<1 : continue
		dx=tx-mtlx.cnt : dy=ty-mtly.cnt
		if (dx<4)&(dx>-36)&(dy<4)&(dy>-36) : enf.en=enf.en-1 : mtlf.cnt=mtrf.cnt-1 : score=score+10 : pos tx,ty : gmode 2 : gcopy 2,32,96,32,32 : snd 1
	loop
return


; 後ろから出現直進 → 一定時間後狙う弾を撃つ → 右斜め上に逃げる■■■■■■■■■■
*eb07
	repeat enmax
		if enf.cnt>0 : continue
		enm.cnt=7			;敵の名前
		enxw.cnt=12 : enyw.cnt=12	;弾の発射位置
		ent.cnt=0			;生成時間リセット
		enf.cnt=1			;硬さ
		enx.cnt=bx : eny.cnt=by		;生成位置
		enxv.cnt=0 : enyv.cnt=-8	;移動方向
		break
	loop
return

*em07
	ent.cnt=ent.cnt+1
	if ent.cnt>37 : if gtime\5=0 : enxv.cnt=8 : enyv.cnt=-8 : gosub *etamaborn1
	enx.cnt=enx.cnt+enxv.cnt : eny.cnt=eny.cnt+enyv.cnt
	if enx.cnt>400 : enf.cnt=0
	pos enx.cnt,eny.cnt : gmode 2 : gcopy 2,0,128,32,32
	dx=mx-enx.cnt : dy=my-eny.cnt
	if (dx<16)and(dx>-16)and(dy<16)and(dy>-16) : gosub *hit
	repeat mtrmax
		if mtrf.cnt<1 : continue
		dx=tx-mtrx.cnt : dy=ty-mtry.cnt
		if (dx<4)&(dx>-36)&(dy<4)&(dy>-36) : enf.en=enf.en-1 : mtrf.cnt=mtrf.cnt-1 : score=score+10 : pos tx,ty : gmode 2 : gcopy 2,32,96,32,32 : snd 1
	loop
	repeat mtlmax
		if mtlf.cnt<1 : continue
		dx=tx-mtlx.cnt : dy=ty-mtly.cnt
		if (dx<4)&(dx>-36)&(dy<4)&(dy>-36) : enf.en=enf.en-1 : mtlf.cnt=mtrf.cnt-1 : score=score+10 : pos tx,ty : gmode 2 : gcopy 2,32,96,32,32 : snd 1
	loop
return


;中ボス1:x軸を合わせながら前進+5Wayレーザー+狙い弾■■■■■■■■■■
*tyubo1b
	repeat enmax
		if enf.cnt>0 : continue
		enm.cnt=12			;敵の名前
		enxw.cnt=44 : enyw.cnt=40	;弾の発射位置
		ent.cnt=0			;生成時間リセット
		enf.cnt=512			;硬さ
		enx.cnt=bx : eny.cnt=by		;生成位置
		enxv.cnt=0 : enyv.cnt=1		;移動方向
		break
	loop
return

*tyubo1m
	ent.cnt=ent.cnt+1
	if ent.cnt\10=0 : gosub *etamaborn5
	if ent.cnt\2=0 : gosub *etamaborn1
	if ent.cnt\20=0  : gosub *etamaborn3
	enx.cnt=enx.cnt+enxv.cnt
	if ent.cnt\4=0 : eny.cnt=eny.cnt+enyv.cnt
	if eny.cnt>550 : enf.cnt=0
	pos enx.cnt,eny.cnt : gmode 2 : gcopy 2,0,160,96,64

	dx=mx-enx.cnt : dy=my-eny.cnt
	if (dx>-24)and(dx<64)and(dy>-24)and(dy<48) : gosub *hit

	repeat mtrmax
		if mtrf.cnt<1 : continue
		dx=mtrx.cnt-tx : dy=mtry.cnt-ty
		if (dx>0)and(dx<88)and(dy>4)and(dy<44) : enf.en=enf.en-1 : mtrf.cnt=mtrf.cnt-1 : wx=mtrx.cnt-12 : wy=mtry.cnt-12 : pos wx,wy : gmode 2 : gcopy 2,64,96,32,32 : snd 3
	loop
	repeat mtlmax
		if mtlf.cnt<1 : continue
		dx=mtlx.cnt-tx : dy=mtly.cnt-ty
		if (dx>0)and(dx<88)and(dy>4)and(dy<44) : enf.en=enf.en-1 : mtlf.cnt=mtrf.cnt-1 : wx=mtlx.cnt-12 : wy=mtly.cnt-12 : pos wx,wy : gmode 2 : gcopy 2,64,96,32,32 : snd 3
	loop
	if (mx+16)>(enx.cnt+48) : enxv.cnt=2 : else : enxv.cnt=-2
	if enf.cnt<1 : score=score+500 : pos wx,wy : gmode 2 : gcopy 2,32,96,32,32 : snd 1 : gosub *etamaborn3
return


; 大量発生x軸合わせ■■■■■■■■■■
*eb08
	repeat enmax
		if enf.cnt>0 : continue
		enm.cnt=8			;敵の名前
		enxw.cnt=16 : enxw.cnt=16	;大きさ/2
		ent.cnt=0			;生成時間リセット
		enf.cnt=1			;硬さ
		rnd enx.cnt,368
		eny.cnt=-40
		enxv.cnt=0 : enyv.cnt=4		;移動方向
		break
	loop
return

*em08
	repeat mtrmax
		if mtrf.cnt<1 : continue
		dx=tx-mtrx.cnt : dy=ty-mtry.cnt
		if (dx<4)&(dx>-30)&(dy<0)&(dy>-32) : enf.en=enf.en-1 : mtrf.cnt=mtrf.cnt-1 : wx=mtrx.cnt-8 : wy=mtry.cnt-8 : pos wx,wy : gmode 2 : gcopy 2,32,96,32,32 : snd 1 : score=score+10 : break
	loop
	repeat mtlmax
		if mtlf.cnt<1 : continue
		dx=tx-mtlx.cnt : dy=ty-mtly.cnt
		if (dx<4)&(dx>-30)&(dy<0)&(dy>-32) : enf.en=enf.en-1 : mtlf.cnt=mtrf.cnt-1 : wx=mtlx.cnt-8 : wy=mtly.cnt-8 : pos wx,wy : gmode 2 : gcopy 2,32,96,32,32 : snd 1 : score=score+10 : break
	loop

	if enf.cnt<1 : return
	ent.cnt=ent.cnt+1
	if mx=enx.cnt : enxv.cnt=0
	if mx>enx.cnt : enxv.cnt=enxv.cnt+1 : else : enxv.cnt=enxv.cnt-1
	if enxv.cnt>10 : enxv.cnt=10
	if enxv.cnt<-10 : enxv.cnt=-10
	if ent.cnt\2=0 : enyv.cnt=enyv.cnt+1
	if enyv.cnt>16 : enyv.cnt=16
	enx.cnt=enx.cnt+enxv.cnt : eny.cnt=eny.cnt+enyv.cnt
	if eny.cnt>582 : enf.cnt=0
	pos enx.cnt,eny.cnt : gmode 2 : gcopy 2,96,128,32,40

	qx=mx-enx.cnt : qy=my-eny.cnt
	if (qx<16)and(qx>-16)and(qy<16)and(qy>-16) : gosub *hit


return


; 得点・シールド表示■■■■■■■■■■
*gamescore
	font "times new roman bold",12
	pos 250,0 : color 255,255,255 : mes "SCORE  "+score
	pos 5,530 : print gtime
	pos 350,530 : mes "FPS "+fps
	mfx1=0
	if mf>0 : rrr=255 : ggg=0
	if mf>2 : rrr=255 : ggg=255
	if mf>5 : rrr=0   : ggg=255
	repeat mf
		mfx1=mfx1+10 : mfx2=mfx1+8 
		color rrr,ggg,0 : boxf mfx1,5,mfx2,15
	loop
return


; ダメージを受けたときの処理■■■■■■■■■■
*hit
	if damage>0 : return
	enf.cnt=enf.cnt-1
	damage=30 : cc=128
	mf=mf-1 : snd 2
return


; ポーズ処理■■■■■■■■■■
*pausegame
	redraw 1
	font "times new roman bold",20 : color 0,255,255
	pos 160,250 : mes "P A U S E"
	stick pat : if pat&128>0 : return
	await 5
goto *pausegame


; ゲームオーバー処理■■■■■■■■■■
*endgame
	sndoff
	redraw 1
	rnd rrr,2 : rnd ggg,2 : rnd bbb,2 : rrr=rrr*255 : ggg=ggg*255 : bbb=bbb*255
	font "times new roman bold",20
	color rrr,ggg,bbb
	pos 160,250 : mes "Game Over"
	color rrr,ggg,bbb
	pos 120,350 : print "Your Score is  "+score
	color rrr,ggg,bbb
	pos 110,400 : mes "Push Return to Retry"
	stick pat
	if pat&32>0 : goto *before
	if pat&128>0 : end
	await 5
goto *endgame


; 面データ(タイムテーブル)■■■■■■■■■■
*men
	if gtime\50=0 : gosub *eb00
	if gtime\30=0 : gosub *eb01
	if gtime=10  : bx=100 : by=-32 : gosub *eb02
	if gtime=20  : bx=100 : by=-32 : gosub *eb02
	if gtime=30  : bx=100 : by=-32 : gosub *eb02
	if gtime=40  : bx=100 : by=-32 : gosub *eb02
	if gtime=50  : bx=100 : by=-32 : gosub *eb02
	if gtime=80  : bx=268 : by=-32 : gosub *eb03
	if gtime=90  : bx=268 : by=-32 : gosub *eb03
	if gtime=100 : bx=268 : by=-32 : gosub *eb03
	if gtime=110 : bx=268 : by=-32 : gosub *eb03
	if gtime=120 : bx=268 : by=-32 : gosub *eb03
	if gtime=150 : bx=100 : by=-32 : gosub *eb02
	if gtime=160 : bx=120 : by=-32 : gosub *eb02
	if gtime=170 : bx=140 : by=-32 : gosub *eb02
	if gtime=180 : bx=160 : by=-32 : gosub *eb02
	if gtime=190 : bx=180 : by=-32 : gosub *eb02
	if gtime=220 : bx=268 : by=-32 : gosub *eb03
	if gtime=230 : bx=248 : by=-32 : gosub *eb03
	if gtime=240 : bx=228 : by=-32 : gosub *eb03
	if gtime=250 : bx=208 : by=-32 : gosub *eb03
	if gtime=260 : bx=188 : by=-32 : gosub *eb03
	if gtime=290 : bx=200 : by=-32 : gosub *eb02
	if gtime=290 : bx=160 : by=-32 : gosub *eb02
	if gtime=290 : bx=120 : by=-32 : gosub *eb02
	if gtime=290 : bx=80  : by=-32 : gosub *eb02
	if gtime=290 : bx=40  : by=-32 : gosub *eb02
	if gtime=350 : bx=168 : by=-32 : gosub *eb03
	if gtime=350 : bx=208 : by=-32 : gosub *eb03
	if gtime=350 : bx=248 : by=-32 : gosub *eb03
	if gtime=350 : bx=288 : by=-32 : gosub *eb03
	if gtime=350 : bx=328 : by=-32 : gosub *eb03
	if gtime=400 : bx=0   : by=-32 : gosub *eb03
	if gtime=400 : bx=362 : by=-32 : gosub *eb02
	if gtime=410 : bx=0   : by=-32 : gosub *eb03
	if gtime=410 : bx=362 : by=-32 : gosub *eb02
	if gtime=420 : bx=0   : by=-32 : gosub *eb03
	if gtime=420 : bx=362 : by=-32 : gosub *eb02
	if gtime=430 : bx=0   : by=-32 : gosub *eb03
	if gtime=430 : bx=362 : by=-32 : gosub *eb02
	if gtime=440 : bx=0   : by=-32 : gosub *eb03
	if gtime=440 : bx=362 : by=-32 : gosub *eb02
	if gtime=500 : bx=-32 : by=100 : gosub *eb04
	if gtime=550 : bx=-32 : by=110 : gosub *eb04
	if gtime=600 : bx=400 : by=100 : gosub *eb05
	if gtime=650 : bx=400 : by=110 : gosub *eb05
	if gtime=700 : bx=0   : by=550 : gosub *eb07
	if gtime=710 : bx=0   : by=550 : gosub *eb07
	if gtime=720 : bx=0   : by=550 : gosub *eb07
	if gtime=730 : bx=0   : by=550 : gosub *eb07
	if gtime=740 : bx=0   : by=550 : gosub *eb07
	if gtime=790 : bx=368 : by=550 : gosub *eb06
	if gtime=800 : bx=368 : by=550 : gosub *eb06
	if gtime=810 : bx=368 : by=550 : gosub *eb06
	if gtime=820 : bx=368 : by=550 : gosub *eb06
	if gtime=830 : bx=368 : by=550 : gosub *eb06
	if gtime=850 : bx=-32 : by=100 : gosub *eb04
	if gtime=900 : bx=-32 : by=110 : gosub *eb04
	if gtime=950 : bx=400 : by=100 : gosub *eb05
	if gtime=1000: bx=400 : by=110 : gosub *eb05
	if gtime=1030: bx=200 : by=-32 : gosub *eb02
	if gtime=1035: bx=160 : by=-32 : gosub *eb02
	if gtime=1040: bx=120 : by=-32 : gosub *eb02
	if gtime=1045: bx=80  : by=-32 : gosub *eb02
	if gtime=1050: bx=40  : by=-32 : gosub *eb02
	if gtime=1080: bx=168 : by=-32 : gosub *eb03
	if gtime=1085: bx=208 : by=-32 : gosub *eb03
	if gtime=1090: bx=248 : by=-32 : gosub *eb03
	if gtime=1095: bx=288 : by=-32 : gosub *eb03
	if gtime=1100: bx=328 : by=-32 : gosub *eb03
	if gtime=1140: bx=0   : by=550 : gosub *eb07
	if gtime=1150: bx=0   : by=550 : gosub *eb07
	if gtime=1160: bx=0   : by=550 : gosub *eb07
	if gtime=1170: bx=0   : by=550 : gosub *eb07
	if gtime=1180: bx=0   : by=550 : gosub *eb07
	if gtime=1140: bx=368 : by=550 : gosub *eb06
	if gtime=1150: bx=368 : by=550 : gosub *eb06
	if gtime=1160: bx=368 : by=550 : gosub *eb06
	if gtime=1170: bx=368 : by=550 : gosub *eb06
	if gtime=1180: bx=368 : by=550 : gosub *eb06
	if gtime=1230: bx=0   : by=-32 : gosub *eb03
	if gtime=1230: bx=362 : by=-32 : gosub *eb02
	if gtime=1240: bx=0   : by=-32 : gosub *eb03
	if gtime=1240: bx=362 : by=-32 : gosub *eb02
	if gtime=1250: bx=0   : by=-32 : gosub *eb03
	if gtime=1250: bx=362 : by=-32 : gosub *eb02
	if gtime=1260: bx=0   : by=-32 : gosub *eb03
	if gtime=1260: bx=362 : by=-32 : gosub *eb02
	if gtime=1270: bx=0   : by=-32 : gosub *eb03
	if gtime=1270: bx=362 : by=-32 : gosub *eb02
	if gtime=1350: bx=-32 : by=100 : gosub *eb04
	if gtime=1400: bx=-32 : by=110 : gosub *eb04
	if gtime=1450: bx=-32 : by=120 : gosub *eb04
	if gtime=1350: bx=400 : by=100 : gosub *eb05
	if gtime=1400: bx=400 : by=110 : gosub *eb05
	if gtime=1450: bx=400 : by=120 : gosub *eb05
	if gtime=1550: bx=152 : by=-64 : gosub *tyubo1b
	if gtime=1800: bx=-32 : by=100 : gosub *eb04
	if gtime=1900: bx=-32 : by=110 : gosub *eb04
	if gtime=2000: bx=-32 : by=120 : gosub *eb04
	if gtime=1850: bx=400 : by=100 : gosub *eb05
	if gtime=1950: bx=400 : by=110 : gosub *eb05
	if gtime=2050: bx=400 : by=120 : gosub *eb05
	if gtime=2100: bx=200 : by=-32 : gosub *eb02
	if gtime=2105: bx=160 : by=-32 : gosub *eb02
	if gtime=2110: bx=120 : by=-32 : gosub *eb02
	if gtime=2115: bx=80  : by=-32 : gosub *eb02
	if gtime=2120: bx=40  : by=-32 : gosub *eb02
	if gtime=2150: bx=168 : by=-32 : gosub *eb03
	if gtime=2155: bx=208 : by=-32 : gosub *eb03
	if gtime=2160: bx=248 : by=-32 : gosub *eb03
	if gtime=2165: bx=288 : by=-32 : gosub *eb03
	if gtime=2170: bx=328 : by=-32 : gosub *eb03
	if gtime=2200: bx=0   : by=550 : gosub *eb07
	if gtime=2210: bx=0   : by=550 : gosub *eb07
	if gtime=2220: bx=0   : by=550 : gosub *eb07
	if gtime=2230: bx=0   : by=550 : gosub *eb07
	if gtime=2240: bx=0   : by=550 : gosub *eb07
	if gtime=2245: bx=400 : by=100 : gosub *eb05
	if gtime=2260: bx=400 : by=200 : gosub *eb05
	if gtime=2270: bx=368 : by=550 : gosub *eb06
	if gtime=2280: bx=368 : by=550 : gosub *eb06
	if gtime=2290: bx=368 : by=550 : gosub *eb06
	if gtime=2300: bx=368 : by=550 : gosub *eb06
	if gtime=2310: bx=368 : by=550 : gosub *eb06
	if gtime=2320: bx=-32 : by=100 : gosub *eb04
	if gtime=2325: bx=-32 : by=200 : gosub *eb04
	if gtime=2360: gosub *eb08
	if gtime=2364: gosub *eb08
	if gtime=2368: gosub *eb08
	if gtime=2372: gosub *eb08
	if gtime=2376: gosub *eb08
	if gtime=2380: gosub *eb08
	if gtime=2384: gosub *eb08
	if gtime=2388: gosub *eb08
	if gtime=2392: gosub *eb08
	if gtime=2396: gosub *eb08
	if gtime=2400: gosub *eb08
	if gtime=2404: gosub *eb08
	if gtime=2408: gosub *eb08
	if gtime=2412: gosub *eb08
	if gtime=2416: gosub *eb08
	if gtime=2420: gosub *eb08
	if gtime=2424: gosub *eb08
	if gtime=2428: gosub *eb08
	if gtime=2432: gosub *eb08
	if gtime=2436: gosub *eb08
	if gtime=2430: gosub *eb08
return