; 初期設定選択画面 *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 |