OPTION STRICT
EXEC 2
DIM gScore%[5]
DIM gStage%=2
DIM gBGMVolume%=30
DIM gSEVolume%=30
DIM gMyPlane%=0
DIM gMyPlaneModel%=1
DIM gMyPlaneHPMax%=8
DIM gMyPlaneSpeed#=10.0
DIM gMyPlaneBeam%=0
DIM gMyPlaneName$=""

'------------------------------
'------------ハイスコア-------------
'------------------------------
DIM gHighScore%[5,5]
DIM gHSFlag%,gEventFlag%
DEF UpdateScore Score%,Stage%,Plane%
 IF(gHighScore%[Stage%,Plane%]<Score%)THEN
  gHighScore%[Stage%,Plane%] = Score%
  gHSFlag% = TRUE
 ENDIF
END
DEF SaveScore
 DIM FDATA%[26],N%,M%
 FDATA%[0]=gEventFlag%
 FOR N%=0 TO 4
  FOR M%=0 TO 4
   FDATA%[N%*5+M%+1]=gHigHScore%[N%,M%]
  NEXT
 NEXT
 SAVE"DAT:SAVEDATA",FDATA%
 gHSFlag% = FALSE
END
DEF LoadScore
 DIM FDATA%[26],N%,M%
 IF(CHKFILE("DAT:SAVEDATA"))THEN
  LOAD"DAT:SAVEDATA",FDATA%
 ENDIF
 gEventFlag% = FDATA%[0]
 FOR N%=0 TO 4
  FOR M%=0 TO 4
   gHighScore%[N%,M%]=FDATA%[N%*5+M%+1]
  NEXT
 NEXT
END
LoadScore
'------------------------------
'-------------マシン--------------
'------------------------------
DIM gN%
RESTORE @MyPlane
DIM gPlanesNum%:READ gPlanesNum%
DIM gPlanesModel%[gPlanesNum%]
DIM gPlanesHP%[gPlanesNum%]
DIM gPlanesSpeed#[gPlanesNum%]
DIM gPlanesBeam%[gPlanesNum%]
DIM gPlanesName$[gPlanesNum%]
FOR gN% = 0 TO gPlanesNum%-1
 READ gPlanesModel%[gN%]
 READ gPlanesHP%[gN%]
 READ gPlanesSpeed#[gN%]
 READ gPlanesBeam%[gN%]
 READ gPlanesName$[gN%]
NEXT

DEF MyPlaneChange INDEX%
 gMyPlane%=INDEX%
 gMyPlaneModel% = gPlanesModel%[ INDEX% ]
 gMyPlaneHPMax% = gPlanesHP%[ INDEX% ]
 gMyPlaneSpeed# = gPlanesSpeed#[ INDEX% ]
 gMyPlaneBeam%  = gPlanesBeam%[ INDEX% ]
 gMyPlaneName$  = gPlanesName$[ INDEX% ]
END
MyPlaneChange 0
@MyPlane
DATA 5
DATA  0,10,12.0, 0,"PLANE"
DATA 11, 8,20.0, 0,"STRAWBERRY"
DATA 10,18, 5.0, 0,"WORKMACHINE"
DATA  1, 6, 7.0, 1,"MONSTER"
DATA 12,18,20.0, 1,"BRILLIANT"


'---------------------------------------
'---------------SEQ_TITLE---------------
'---------------------------------------
DIM TitleMode%=0
DIM TitleTime%=0
DIM TitleRotate%=0
DIM TitleSelect%=0
COMMON DEF SEQ_TITLE
 IF(gHSFlag%) THEN SaveScore
 TitleTime%=0
 TitleRotate%=0
 TitleMode%=2
 BGMPLAY 0,15,gBGMVolume%
 'DISPLAY 0 'PI:no dual screen
 COLOR RGB(255,255,255),RGB(0,0,0,0)
 LOCATE 6,28 'PI:dropped Z depth
 ?"2015 SatoshiMcCloud      Version 2.0.0"
END
COMMON DEF SEQ_TITLE_UPDATE$()
 DIM NextSeq$="SEQ_TITLE"
 INC TitleTime%
 INC TitleRotate%
 'MODE 2
 IF (TitleMode%==2) THEN
  IF( GetPadFAsUDLR() AND 2 ) THEN
   INC TitleSelect%
   BEEP 9
  ENDIF
  IF( GetPadFAsUDLR() AND 1 ) THEN
   DEC TitleSelect%
   BEEP 9
  ENDIF
  IF(TitleSelect%<0) THEN TitleSelect%=0
  IF(TitleSelect%>4) THEN TitleSelect%=4
  IF(GetKeyF() AND 16) THEN
   TitleMode%=1
   TitleTime%=0
   BEEP 7
  ENDIF
 'MODE 1
 ELSEIF (TitleMode%==1) THEN
  IF(TitleTime%==20) THEN
   IF(TitleSelect%==0) THEN
    gScore%[0] = 0
    gScore%[1] = 0
    gScore%[2] = 0
    gScore%[3] = 0
    gStage% = 0
    NextSeq$="SEQ_READY"
   ENDIF
   IF(TitleSelect%==1) THEN
    gScore%[0] = 0
    gScore%[1] = 0
    gScore%[2] = 0
    gScore%[3] = 0
    gStage% = 4
    NextSeq$="SEQ_READY"
   ENDIF
   IF(TitleSelect%==2) THEN
    NextSeq$="SEQ_FIGURE"
   ENDIF
   IF(TitleSelect%==3) THEN
    NextSeq$="SEQ_SCORE"
   ENDIF
   IF(TitleSelect%==4) THEN
    SaveScore
    TitleMode%=2
    TitleTime%=0
   ENDIF
  ENDIF
 ENDIF
 RETURN NextSeq$
END
COMMON DEF SEQ_TITLE_DRAW
 DIM PL%=GetParallaxLevel()
  C2MES "PLANE",5,2
  C2MES "  2",5,3
  C2MES "SOLID",5,4
  
  C2MES "",4, 8+TitleSelect%
  C2MES "Story mode",5, 8
  C2MES "Trial mode",5, 9
  C2MES "Trophies"   ,5,10
  C2MES "High score"   ,5,11
  C2MES "Save"     ,5,12
 'DISPLAY 0 'PI:no dual screen
 GPAGE 0,GetDrawPage()
 GCOPY 3,0,256, 239,239+148, (512-240)/2-PL%*2/3,(256-240)/2+120,1
 GCOPY 3,0,256, 239,239+148, (512-240)/2+PL%*2/3,(256-240)/2+256+120,1
 IF(gEventFlag% AND 2048 ) THEN
  FIGURE_DRAW 10,TitleRotate%
 ELSE
  DrawModelRotateZoom gMyPlaneModel%,30,0,-100,(TitleRotate% MOD 360),30,90,3.5
 ENDIF
END
'---------------------------------------
'---------------SEQ_READY---------------
'---------------------------------------
DIM ReadyMode%=0
DIM ReadyTime%=0
DIM ReadyPMax%=0
DIM ReadyRotate%=0
DIM ReadyY%=0
COMMON DEF SEQ_READY
 BGMPLAY 0,40,gBGMVolume%
 IF(gEventFlag% AND 1) THEN
  ReadyPMax% = 5
 ELSE
  ReadyPMax% = 4
 ENDIF
 ReadyRotate%=0
 ReadyTime%=0
 ReadyMode%=0
 ReadyY%=0
END
COMMON DEF SEQ_READY_UPDATE$()
 DIM NextSeq$="SEQ_READY"
 INC ReadyTime%
 DIM MP%=gMyPlane%
 IF( ReadyMode%==0 ) THEN
  INC ReadyRotate%
  IF(ReadyRotate%>180) THEN DEC ReadyRotate%,360
  IF( GetPadFAsUDLR() AND 8 ) THEN
   INC MP%
   BEEP 9
  ENDIF
  IF( GetPadFAsUDLR() AND 4 ) THEN
   DEC MP%
   BEEP 9
  ENDIF
  IF(ReadyPMax% <= MP%)THEN MP%=0
  IF(0 > MP%)THEN MP%=ReadyPMax%-1
  IF(MP% != gMyPlane% ) THEN
   MyPlaneChange MP%
  ENDIF
  IF(GetKeyF()AND 16) THEN
   ReadyMode%=1
   BEEP 116
   ReadyTime%=0
  ENDIF 
  IF(GetKeyF()AND 32) THEN
   NextSeq$= "SEQ_TITLE"
  ENDIF
 ELSEIF( ReadyMode%==1 ) THEN
  IF(ReadyRotate%<-3) THEN
   INC ReadyRotate%,3
  ELSEIF(ReadyRotate%>3)THEN
   DEC ReadyRotate%,3
  ELSE
   ReadyRotate%=0
  ENDIF
  IF( ReadyRotate%==0 ) THEN
   ReadyMode%=2
   BEEP 125
  ENDIF
 ELSEIF( ReadyMode%==2 ) THEN
  INC  ReadyY%,3
  IF(ReadyTime%>60) THEN
   NextSeq$= FORMAT$("SEQ_MOVIE%D",gStage%)
  ENDIF
 ENDIF
 RETURN NextSeq$
END
COMMON DEF SEQ_READY_DRAW
 C2MES  "CHOOSE YOUR PLANE",4,1
 C2MES "",3,5:C2MES "",21,5 'PI: right arrow moved to the right (HUD col 21); was mid-screen
 'DISPLAY 0 'PI:no dual screen
 GPAGE 0,GetDrawPage()
 C2MES gMyPlaneName$,4,9
 C2MES "Speed",4,11
 C2MES "Shield",4,12
 'PI: rating stars in YELLOW (original used a yellow custom-font star; C2MES is white).
 'Draw on GRP0 (front HUD layer) at the label positions, clearing the row first.
 GPAGE 0,0
 GFILL 118,175,210,201,RGB(0,0,0,0) 'transparent (GFILL respects alpha) so no black box over the scene
 GCOLOR RGB(255,222,0)
 DIM StarI%
 FOR StarI%=0 TO gMyPlaneSpeed#/3.5-1:GPUTCHR 120+StarI%*8,176,"",1,1:NEXT
 FOR StarI%=0 TO gMyPlaneHPMax%/2-1:GPUTCHR 120+StarI%*8,192,"",1,1:NEXT
 GPAGE 0,GetDrawPage()
 IF(gMyPlaneBeam%) THEN
  C2MES"Attack DoubleBeam",4,13
 ELSE
  C2MES"Attack SingleBeam",4,13
 ENDIF
 DIM R%=130+ReadyRotate%
 DrawModelRotateZoom gMyPlaneModel%,45*SIN(RAD(R%)),-80-ReadyY%,-80-45*COS(RAD(R%)),0,-30,R%,2.5
END
'---------------------------------------
'---------------SEQ_SCORE---------------
'---------------------------------------
DIM ScoreTime%=0
COMMON DEF SEQ_SCORE
 BGMPLAY 0,16,gBGMVolume%
' BGMSTOP
 'DISPLAY 0 'PI:no dual screen
 DIM OFFSETX%=6
 DIM OFFSETY%=2
LOCATE OFFSETX%,OFFSETY%
?"            ｜       STAGE No.        ｜
LOCATE OFFSETX%,OFFSETY%+1
?"            ｜  1 ｜  2 ｜  3 ｜  4 ｜ SP ｜
LOCATE OFFSETX%,OFFSETY%+2
?"------------+----+----+----+----+----+
DIM N%,M%,X%=3
 IF(gEventFlag% AND 1) THEN
  X% = 4
 ENDIF
 FOR N%=0 TO X%
  LOCATE OFFSETX%,OFFSETY%+3+N%*4
  ?"            ｜    ｜    ｜    ｜    ｜    ｜
  LOCATE OFFSETX%,OFFSETY%+4+N%*4
  ?"            ｜    ｜    ｜    ｜    ｜    ｜
  LOCATE OFFSETX%,OFFSETY%+5+N%*4
  ?"            ｜    ｜    ｜    ｜    ｜    ｜
  LOCATE OFFSETX%,OFFSETY%+6+N%*4
  ?"------------+----+----+----+----+----+
  LOCATE OFFSETX%,OFFSETY%+4+N%*4
  IF(N%==0) THEN COLOR RGB(0,128,128),RGB(255,255,255)
  IF(N%==1) THEN COLOR RGB(0,255,0),RGB(255,0,0)
  IF(N%==2) THEN COLOR RGB(0,0,0),RGB(255,255,0)
  IF(N%==3) THEN COLOR RGB(0,128,0),RGB(128,0,128)
  IF(N%==4) THEN COLOR RGB(255,255,255),RGB(128,128,128)
  ?gPlanesName$[N%]
  COLOR RGB(255,255,255),RGB(0,0,0,0)
  FOR M%=0 TO 4
   LOCATE OFFSETX%+13+M%*5,OFFSETY%+4+N%*4
   ?STR$(gHighScore%[M%,N%],4)
  NEXT
 NEXT
 LOCATE OFFSETX%,OFFSETY%+3+N%*4
 ?"                                ｜    ｜
 LOCATE OFFSETX%,OFFSETY%+4+N%*4
 ?"                                ｜    ｜
 LOCATE OFFSETX%,OFFSETY%+5+N%*4
 ?"                                ｜    ｜
' LOCATE OFFSETX%,OFFSETY%+6+N%*4
' ?"------------+----+----+----+----+----+
 LOCATE OFFSETX%,OFFSETY%+4+N%*4:COLOR RGB(255,255,255),RGB(0,0,0,0)
 ?"TOTAL SCORE FOR SPECIAL MISSION "
 M%=0
 FOR N%=0 TO X%
  M%=M%+gHighScore%[4,N%]
 NEXT
 LOCATE OFFSETX%+13+20,OFFSETY%+4+X%*4+4
 ?STR$(M%,4)
END
COMMON DEF SEQ_SCORE_UPDATE$()
 DIM NextSeq$="SEQ_SCORE"
 INC ScoreTime%
 IF(GetKeyF()AND(16 OR 32 OR 64 OR 128)) THEN
  NextSeq$="SEQ_TITLE"
 ENDIF
 RETURN NextSeq$
END
COMMON DEF SEQ_SCORE_DRAW
 DIM PL%=GetParallaxLevel()
 C2MES "High score",8,0
 C2MES "PUSH B TO RETURN",5,14
 'DISPLAY 0 'PI:no dual screen
 GPAGE 0,GetDrawPage()
 GCOPY 3,0,256, 239,239+148, (512-240)/2-PL%*2/3,(256-240)/2+120,1
 GCOPY 3,0,256, 239,239+148, (512-240)/2+PL%*2/3,(256-240)/2+256+120,1
END
'---------------------------------------
'--------------SEQ_FIGURE---------------
'---------------------------------------
DIM FigureTime%=0
DIM FigureIndex%=0
DIM FigureHidden%=0
DIM FigureNum%=12
DIM FigureRotate#=0.00
DIM FigureTitle$
COMMON DEF SEQ_FIGURE
 BGMPLAY 0,24,gBGMVolume%
 FIGURE_CHANGE 0
END
DEF FIGURE_CHANGE INDEX%
 FigureTime%=0
 FigureIndex% = INDEX%
 FigureRotate#=0.00
 'DISPLAY 0 'PI:no dual screen
 COLOR RGB(255,255,255),RGB(0,0,0,0)
 CLS
 
 ''''gEventFlag%
 DIM L$,S$
 IF(FigureIndex%== 0) THEN L$="PLANE"
 IF(FigureIndex%== 1) THEN L$="STRAWBERRY"
 IF(FigureIndex%== 2) THEN L$="WORKMACHINE"
 IF(FigureIndex%== 3) THEN L$="MONSTER"
 IF(FigureIndex%== 4) THEN L$="BRILLIANT"
 IF(FigureIndex%== 5) THEN L$="BASE"
 IF(FigureIndex%== 6) THEN L$="MISSILE"
 IF(FigureIndex%== 7) THEN L$="PIGEON"
 IF(FigureIndex%== 8) THEN L$="YAKKO"
 IF(FigureIndex%== 9) THEN L$="DrHEAD"
 IF(FigureIndex%==10) THEN L$="PetitCom_Wars"
 IF(FigureIndex%==11) THEN L$="PLANET"

 DIM DX%=6
 IF( gEventFlag% AND POW(2,FigureIndex%+1) )THEN
  RESTORE "@"+L$
  READ S$:LOCATE DX%,27:?S$
'  READ S$:LOCATE DX%,22:?S$
'  READ S$:LOCATE DX%,24:?S$
'  READ S$:LOCATE DX%,25:?S$
'  READ S$:LOCATE DX%,26:?S$
'  READ S$:LOCATE DX%,27:?S$
'  READ S$:LOCATE DX%,28:?S$
'  READ S$:LOCATE DX%,29:?S$;
  FigureHidden%=0
 ELSE
  RESTORE "@"+L$+"_HIDDEN"
  READ S$:LOCATE DX%,23:?S$
  READ S$:LOCATE DX%,24:?S$
  READ S$:LOCATE DX%,25:?S$
  READ S$:LOCATE DX%,26:?S$
  READ S$:LOCATE DX%,27:?S$
  FigureHidden%=1
 ENDIF
 FigureTitle$=L$ 
 @PLANE
 DATA "Basic makeshift machine"
 DATA "インテリの コードネームをもつ てんさいぎじゅつしゃ が"
 DATA "ハカセ きゅうしゅつのため ひとばんで つくりあげた。"
 DATA "のは いいが、ざいりょうを きょくげんまで ケチったため"
 DATA "ごらんの とおり ペラペラ。"
 DATA "あやうく たいきけん とっぱで もえつきる ところだった。"
 DATA ""
 @PLANE_HIDDEN
 DATA "Clear StoryMode"
 DATA "with PLANE."
 DATA ""
 DATA ""
 DATA ""
 @STRAWBERRY
 DATA "Quick and cute"
 DATA "なぜか よくわからないけど イチゴっぽいデザイン。"
 DATA "じつは かずあるマシンの なかでも いちばん さいごに"
 DATA "つくられた。 そのため アイディアが ネタギレで こんな"
 DATA "デザインに なった らしい。 しゅんびんせいを いかし、"
 DATA "ちょこまか うごきながら すすもう。"
 DATA ""
 @STRAWBERRY_HIDDEN
 DATA "Clear StoryMode"
 DATA "with STRAWBERRY."
 DATA ""
 DATA ""
 DATA ""
 @WORKMACHINE
 DATA "The tough guy"
 DATA "たいりょくじまんの ガテンけいマシン。"
 DATA "ちょっとの こうげきでは びくともしない。が、"
 DATA "ゆだんすると あっというまに しゅうちゅうほうかで"
 DATA "ひさんなことに なる。おもいからだを せっせとうごかし"
 DATA "よけられる ときは よけよう。あんぜんだいいち。"
 DATA ""
 @WORKMACHINE_HIDDEN
 DATA "Clear StoryMode"
 DATA "with WORKMACHINE."
 DATA ""
 DATA ""
 DATA ""
 @MONSTER
 DATA "If you wanna feel the thrill"
 DATA "けいこくしょくのボディに しゅほうを 2つ そうびした、"
 DATA "こうげき せんもんの まさしくモンスターな マシン。"
 DATA "しゅほうが おもいぶん こまわりが きかず、てきからの"
 DATA "こうげきにも もろい。やられるまえに やっつけろ!"
 DATA "ぼうそうは しないので そこは あんしんしてください。"
 DATA ""
 @MONSTER_HIDDEN
 DATA "Clear StoryMode"
 DATA "with MONSTER."
 DATA ""
 DATA ""
 DATA ""
 @BRILLIANT
 DATA "Bright like a diamond"
 DATA "たいりょく こうげき しゅんびんせい どれをとっても"
 DATA "いちりゅうの こうきゅうかん あふれる マシン。"
 DATA "たぶん じかんの あるときに インテリが つくったと"
 DATA "おもわれるが、それだと ストーリーと むじゅん してしまう。"
 DATA "このての クリアごアイテムに いつもつきまとう なやみである。"
 DATA ""
 @BRILLIANT_HIDDEN
 DATA "Clear StoryMode"
 DATA "with BRILLIANT."
 DATA ""
 DATA ""
 DATA ""
 @BASE
 DATA "Where Mr. Intelligent sends his advice"
 DATA "せいふ こうにんの うちゅう けんきゅうじょ。"
 DATA "それなりに せいかを あげているが、 いや"
 DATA "あげているからこそ わるい ウワサも たちやすい。"
 DATA "「せけんは ほんとうのことを しろうともしない だけじゃ」"
 DATA "と ハカセは いったとか いわなかったとか。"
 DATA ""
 @BASE_HIDDEN
' DATA "トライアルモードで"
' DATA "すべてのマシン の  ハイスコアごうけい が"
' DATA "200てん を こえると"
' DATA "てにはいる"
' DATA ""
 DATA "Reach a total of 200"
 DATA "points in TrialMode from"
 DATA "all Planes' high scores."
 DATA ""
 DATA ""
 @MISSILE
 DATA "SpaceGang's weapon"
 DATA "うちゅうぼうそうぞくが しょゆうする へいき。"
 DATA "リーダーのワンパクは じぶんのもののように おもっているが"
 DATA "メンバーが みんなで だしあった おかねで かったわけで"
 DATA "あって、 いうなれば みんなの ものである。"
 DATA "ほかの メンバーの ふまんは たまる いっぽうである。"
 DATA ""
 @MISSILE_HIDDEN
' DATA "トライアルモードで"
' DATA "すべてのマシン の  ハイスコアごうけい が"
' DATA "800てん を こえると"
' DATA "てにはいる"
' DATA ""
 DATA "Reach a total of 800"
 DATA "points in TrialMode from"
 DATA "all Planes' high scores."
 DATA ""
 DATA ""
 @PIGEON
 DATA "The fastest plane"
 DATA "スピードやろう ごようたしの こうそくうちゅうせん。"
 DATA "うちゅうぼうそうぞくは リーダーいがい これにのっている。"
 DATA "リーダーの はつあんで ビームがうてる かいぞうが"
 DATA "されたが かわりに おそくなって しまった。"
 DATA "ほかの メンバーの ふまんは たまる いっぽうである。"
 DATA ""
 @PIGEON_HIDDEN
' DATA "トライアルモードで"
' DATA "すべてのマシン の  ハイスコアごうけい が"
' DATA "1200てん を こえると"
' DATA "てにはいる"
' DATA ""
 DATA "Reach a total of 1200"
 DATA "points in TrialMode from"
 DATA "all Planes' high scores."
 DATA ""
 DATA ""
 @YAKKO
 DATA "SpaceGang boss's Destroyer"
 DATA "うちゅうぼうそうぞくのリーダー ワンパクせんようマシン。"
 DATA "うちゅうの こわしやを じしょうする ワンパクに"
 DATA "ふさわしい こうげきせいのう。だが、メンバーは もともと"
 DATA "はしりやに なりたくて はいったはず。 ほうしんの ちがいに"
 DATA "ほかの メンバーの きまずさは たまるいっぽうである。"
 DATA ""
 @YAKKO_HIDDEN
' DATA "トライアルモードで"
' DATA "すべてのマシン の  ハイスコアごうけい が"
' DATA "2200てん を こえると"
' DATA "てにはいる"
' DATA ""
 DATA "Reach a total of 2200"
 DATA "points in TrialMode from"
 DATA "all Planes' high scores."
 DATA ""
 DATA ""
' @HAKASEROBO
 @DrHEAD
 DATA "Hakase's SpaceStation. Or is it?"
 DATA "うちゅうステーションと いつわって けんぞうされた"
 DATA "きょだいな へいき。かんせいまぢかで パーツが たりなく"
 DATA "なったため、インテリたちを だまし パーツを とりよせ"
 DATA "かんせい させようと した。それが のちの はいぼくに"
 DATA "つながるとは おもいもしなかった ハカセであった。"
 DATA ""
' @HAKASEROBO_HIDDEN
 @DrHEAD_HIDDEN
' DATA "トライアルモードで"
' DATA "すべてのマシン の  ハイスコアごうけい が"
' DATA "3500てん を こえると"
' DATA "てにはいる"
' DATA ""
 DATA "Reach a total of 3500"
 DATA "points in TrialMode from"
 DATA "all Planes' high scores."
 DATA ""
 DATA ""
 @PetitCom_Wars
 DATA "Present for a super player!"
 DATA "ちきゅうせいふくを もくろんだ ハカセ。この じけんは"
 DATA "のちに プチコンウォーズと よばれ、やぼうを そしした"
 DATA "パイロット カンザキのなまえと ともに みらいえいこう"
 DATA "かたりつがれるのだった。"
 DATA "                       FIN."
 DATA "  さいごまで あそびつくしてくれて ありがとう!"
 @PetitCom_Wars_HIDDEN
' DATA "トライアルモードの  ハイスコアごうけい が"
' DATA "4300てん いじょうで かつ"
' DATA "ストーリーモードを すべての マシンで"
' DATA "クリア したことが あると てにはいる。"
' DATA ""
 DATA "Reach a total of 4300"
 DATA "points in TrialMode from"
 DATA "all Planes' high scores,"
 DATA "AND clear StoryMode"
 DATA "with all Planes."
 @PLANET
 DATA "Taken by the crew of Apollo 17"
 DATA "“ザ・ブルー・マーブル(えいご:The Blue Marble)"
 DATA " は、1972ねん12がつ7にちにアポロ17ごうののりくみいん"
 DATA " によって、ちきゅうからおよそ4まん5せんキロメートル(2まん"
 DATA " 8せんマイル)のきょりからさつえいされた、ちょめいなちきゅう"
 DATA " のしゃしんである。”(「ザ・ブルー・マーブル」『ウィキペディ"
 DATA "アにほんごばん』(2014/9/20 16:06 UTC)より)"
 @PLANET_HIDDEN
' DATA "ストーリーモードを すべての マシンで"
' DATA "クリア したことが あると てにはいる。"
' DATA ""
' DATA ""
' DATA ""
 DATA "Clear StoryMode"
 DATA "with all Planes."
 DATA ""
 DATA ""
 DATA ""

END
COMMON DEF SEQ_FIGURE_UPDATE$()
 DIM NextSeq$="SEQ_FIGURE"
 INC FigureTime%
 INC FigureRotate# , 10.0*GetPadX()
 IF( FigureRotate# > 360.00 ) THEN
  DEC FigureRotate# , 360.0
 ENDIF
 IF( FigureRotate# <   0.00 ) THEN
  INC FigureRotate# , 360.0
 ENDIF
 IF(GetKeyF()AND(16 OR 32 OR 64 OR 128)) THEN
  NextSeq$="SEQ_TITLE"
 ENDIF
 DIM N% = FigureIndex%
 IF(GetKeyF()AND 512) THEN INC N%
 IF(GetKeyF()AND 256) THEN DEC N%
 IF(N% < 0 ) THEN N% = FigureNum%-1
 IF(N% >= FigureNum%) THEN N% = 0
 IF( N%!=FigureIndex% ) THEN FIGURE_CHANGE N%
RETURN NextSeq$
END
DEF FIGURE_DRAW I%,R%
 DIM PL%=GetParallaxLevel()
 DIM L$="@L"+STR$(I%)
 DIM DF%=0,X%,Z%,DY%
 GOTO L$
 @L0
  R% = R%+150
  DrawModelRotateZoom  gPlanesModel%[0],100*SIN(RAD(R%)),-80,-100*COS(RAD(R%)),0,-25,R%,5
  RETURN
 @L1
  R% = R%+150
  DrawModelRotateZoom  gPlanesModel%[1],100*SIN(RAD(R%)),-80,-100*COS(RAD(R%)),0,-25,R%,5
  RETURN
 @L2
  R% = R%+150
  DrawModelRotateZoom  gPlanesModel%[2],100*SIN(RAD(R%)),-80,-100*COS(RAD(R%)),0,-25,R%,5
  RETURN
 @L3
  R% = R%+150
  DrawModelRotateZoom  gPlanesModel%[3],100*SIN(RAD(R%)),-80,-100*COS(RAD(R%)),0,-25,R%,5
  RETURN
 @L4
  R% = R%+150
  DrawModelRotateZoom  gPlanesModel%[4],100*SIN(RAD(R%)),-80,-100*COS(RAD(R%)),0,-25,R%,5
  RETURN
 @L5
  DrawModelRotateZoom  8,50*SIN(RAD(R%)),120,-50*COS(RAD(R%)), 0,0,R%,2
  RETURN
 @L6
  R% = R%-45
  DrawModelRotateZoom  2,50*SIN(RAD(R%)),-90,-50*COS(RAD(R%)), 30,-30,R%,3
  RETURN
 @L7
  R% = R%-15
  DrawModelRotateZoom  9,20*SIN(RAD(R%)),-30,-20*COS(RAD(R%)), 0,20,R%,5
  RETURN
 @L8
  R% = R%-15
  DrawModelRotateZoom  3,20*SIN(RAD(R%)),-50,-20*COS(RAD(R%)), 0,0,R%,4
  RETURN
 @L9
  DY%=-70
  R% = (R%+360)MOD 360
 'SORT フラグをたてるとかくれる
  DF%=0
  IF((R%>80)&&(R%<280)) THEN DF% = 1'DF% OR 1
 'かくれるがわ
  IF(DF% ) THEN
   DrawModelRotate 6,0,   DY%,0,  0,  5,R%
   DrawModelRotate 5,0,   DY%,0,  0,  5,R%
   DrawModelRotate 7,0,30+DY%,0,  0,  5,R%
  ENDIF
  'MODEL
  DrawModelRotate  4,0,   DY%,0,  0,  5,R%
  'まえ
  IF(DF% == 0) THEN
   DrawModelRotate 6,0,   DY%,0,  0,  5,R%
   DrawModelRotate 5,0,   DY%,0,  0,  5,R%
   DrawModelRotate 7,0,30+DY%,0,  0,  5,R%
  ENDIF
  RETURN
 @L10
 DY%=-50
  R% = (R%+360-45)MOD 360
 'PLANE
  X%=-200*SIN(RAD(-R%))
  Z%=-200*COS(RAD(-R%))
 DrawModelRotateZoom 0,X%,-80+DY%,Z%,0,-25,R%,0.5
 'P
  X%= 50*COS(RAD(-R%))+10*SIN(RAD(-R%))
  Z%= 50*SIN(RAD( R%))+10*COS(RAD(-R%))
  DrawModelRotateZoom  9,X%,100+DY%,Z%,0,  0,R%,0.5
  X%=  0*COS(RAD(-R%))-40*SIN(RAD(-R%))
  Z%=  0*SIN(RAD( R%))-40*COS(RAD(-R%))
  DrawModelRotateZoom  9,X%,100+DY%,Z%,0,  0,R%,0.5
  X%=-50*COS(RAD(-R%))-20*SIN(RAD(-R%))
  Z%=-50*SIN(RAD( R%))-20*COS(RAD(-R%))
  DrawModelRotateZoom  9,X%,100+DY%,Z%,0,  0,R%,0.5
 'Y
  X%=130*COS(RAD(-R%))+70*SIN(RAD(-R%))
  Z%=130*SIN(RAD( R%))+70*COS(RAD(-R%))
  DrawModelRotateZoom  3,X%,-70+DY%,Z%,0,  0,R%,0.5
 'M
  X%=-130*COS(RAD(-R%))+70*SIN(RAD(-R%))
  Z%=-130*SIN(RAD( R%))+70*COS(RAD(-R%))
  DrawModelRotateZoom  2,X%,-70+DY%,Z%,0,  0,R%,0.5
 'HKS
  X%=200*SIN(RAD(-R%))
  Z%=200*COS(RAD(-R%))
 'SORT フラグをたてるとかくれる
  DF%=0
  IF((R%>107)&&(R%<253))THEN DF% = DF% OR 1
 'かくれるがわ
  IF(DF% AND 1 ) THEN
   DrawModelRotateZoom 6,X%,DY%,Z%,0,0,R%,0.5
   DrawModelRotateZoom 5,X%,DY%,Z%,0, 0,R%,0.5
   DrawModelRotateZoom 7,X%,15+DY%,Z%,0, 0,R%,0.5
  ENDIF
  'MODEL
  DrawModelRotateZoom  4,X%,DY%,Z%,0, 0,R%,0.5
  'まえ
  IF((DF% AND 1) == 0) THEN
   DrawModelRotateZoom 6,X%,DY%,Z%,0, 0,R%,0.5
   DrawModelRotateZoom 5,X%,DY%,Z%,0, 0,R%,0.5
   DrawModelRotateZoom 7,X%,15+DY%,Z%,0, 0,R%,0.5
  ENDIF
  RETURN
 @L11
 GPAGE 0,GetDrawPage()
 GCOPY 3,0,256,239,239+256, (512-240)/2-PL%*2/3,(256-240)/2,1
 GCOPY 3,0,256,239,239+256, (512-240)/2+PL%*2/3,(256-240)/2+256,1
  RETURN
  
END
COMMON DEF SEQ_FIGURE_DRAW
 'DIM R%=FigureTime%
 DIM R% = FigureRotate#
 'フィギュア タイトル
 IF(FigureHidden%) THEN
'  C2MES "?"*LEN(FigureTitle$),5,10
  C2MES "?"*LEN(FigureTitle$),3,14
 ELSE
'  C2MES FigureTitle$,5,10
  C2MES FigureTitle$,3,14
 ENDIF
  C2MES "L",3,5
  C2MES "R",20,5
 'DISPLAY 0 'PI:no dual screen
 GPAGE 0,GetDrawPage()
 IF(FigureHidden%==0) THEN
  FIGURE_DRAW FigureIndex%,R%
 ENDIF
END
'---------------------------------------
'---------------SEQ_CHECK---------------
'---------------------------------------
DIM CHECK_Mode%
DIM CHECK_Time%
COMMON DEF SEQ_CHECK
 BGMSTOP
 'DISPLAY 0 'PI:no dual screen
 COLOR RGB(255,255,255),RGB(0,0,0,0)
 CHECK_Mode%=-1
END
DEF CHECK_PART%(FLAG%)
 DIM A%=0,B%=0
 INC B%,gHighScore%[4,0]
 INC B%,gHighScore%[4,1]
 INC B%,gHighScore%[4,2]
 INC B%,gHighScore%[4,3]
 INC B%,gHighScore%[4,4]
 DIM L$="@L"+STR$(FLAG%)
 GOTO L$
 @L0
  A%=A% OR (gHighScore%[3,0]>=200)
  A%=A% OR (gHighScore%[3,1]>=200)
  A%=A% OR (gHighScore%[3,2]>=200)
  A%=A% OR (gHighScore%[3,3]>=200)
  A%=A% OR (gHighScore%[3,4]>=200)
  A%=A% OR (gHighScore%[4,0]>=800)
  A%=A% OR (gHighScore%[4,1]>=800)
  A%=A% OR (gHighScore%[4,2]>=800)
  A%=A% OR (gHighScore%[4,3]>=800)
  A%=A% OR (gHighScore%[4,4]>=800)
  RETURN A%
 @L1
  A%=A% OR (gHighScore%[3,0]>=200)
  RETURN A%
 @L2
  A%=A% OR (gHighScore%[3,1]>=200)
  RETURN A%
 @L3
  A%=A% OR (gHighScore%[3,2]>=200)
  RETURN A%
 @L4
  A%=A% OR (gHighScore%[3,3]>=200)
  RETURN A%
 @L5
  A%=A% OR (gHighScore%[3,4]>=200)
  RETURN A%
 @L6
  A%=A% OR (B%>= 200)
  RETURN A%
 @L7
  A%=A% OR (B%>= 800)
  RETURN A%
 @L8
  A%=A% OR (B%>=1200)
  RETURN A%
 @L9
  A%=A% OR (B%>=2200)
  RETURN A%
 @L10
  A%=A% OR (B%>=3500)
  RETURN A%
 @L11
  A%=1
  A%=A% AND (gHighScore%[3,0]>=200)
  A%=A% AND (gHighScore%[3,1]>=200)
  A%=A% AND (gHighScore%[3,2]>=200)
  A%=A% AND (gHighScore%[3,3]>=200)
  A%=A% AND (gHighScore%[3,4]>=200)
  A%=A% AND (B%>=4300)
  RETURN A%
 @L12
  A%=1
  A%=A% AND (gHighScore%[3,0]>=200)
  A%=A% AND (gHighScore%[3,1]>=200)
  A%=A% AND (gHighScore%[3,2]>=200)
  A%=A% AND (gHighScore%[3,3]>=200)
  A%=A% AND (gHighScore%[3,4]>=200)
  RETURN A%
END
COMMON DEF SEQ_CHECK_UPDATE$()
 DIM NextSeq$="SEQ_CHECK"
 DIM CFLAG%=-1
 DIM A%
 INC CHECK_Time%
 '
 IF( CHECK_Mode% == -1 ) THEN
  CFLAG% = 0
 ELSE
  IF( GetKeyF() AND 16 ) THEN
   CFLAG% = CHECK_Mode%+1
  ENDIF
 ENDIF
 'フラグチェック
 DIM C%
 FOR C%=0 TO 12
  IF( CFLAG% == C% ) THEN
   IF( gEventFlag% AND POW(2,C%) ) THEN
    INC CFLAG%
   ELSE
    IF( CHECK_PART%(CFLAG%) ) THEN
     CHECK_Mode% = C%
     CHECK_Time% = 0
     gEventFlag% = gEventFlag% OR POW(2,C%)
     gHSFlag% = TRUE
     BEEP 89
    ELSE
    INC CFLAG%
    ENDIF
   ENDIF
  ENDIF
 NEXT
 IF( CFLAG% == 13 ) THEN
  NextSeq$ = "SEQ_TITLE"
 ENDIF
 RETURN NextSeq$
END
COMMON DEF SEQ_CHECK_DRAW
 'DISPLAY 0 'PI:no dual screen
 GPAGE 0,GetDrawPage()
 DIM R%=CHECK_Time%
 IF( CHECK_Mode% == 0 ) THEN
'  C2MES "あたらしい マシンを てにいれた!",3,0
  C2MES "You can now use",5,0
  C2MES "   new Plane!",5,1
  DrawModelRotateZoom gPlanesModel%[4],30*SIN(RAD(CHECK_Time%)),0,30*COS(RAD(CHECK_Time%)),0,-30,CHECK_Time%,3.5
 ENDIF 
 IF( (0<CHECK_Mode%)&&(CHECK_Mode%<13)) THEN
'  C2MES "   フィギュア ゲット!",3,0
  C2MES "You've got a Trophy!",3,0
  FIGURE_DRAW CHECK_Mode%-1,R%
 ENDIF
 IF( 0 <= CHECK_Mode% ) THEN
'  C2MES "Aボタンを おしてくれ!",8,14
  C2MES "PUSH A BUTTON!",6,14
 ENDIF
END
'gEventFlag% = 0
'---------------------------------------
'--------------SEQ_MOVIE0---------------
'---------------------------------------
DIM MOVIE0Time%

COMMON DEF SEQ_MOVIE0
 MOVIE0Time%=0
 BGMSTOP
 MessageWindow 11,"All system are go!\nLiftoff!"
' DISPLAY 0
' CLS
END

COMMON DEF SEQ_MOVIE0_UPDATE$()
 DIM NextSeq$="SEQ_MOVIE0"
 'UPDATE
 INC Movie0Time%
 IF(Movie0Time%==60)THEN BEEP 108,,64
 IF(Movie0Time%==120)THEN NextSeq$="SEQ_GAME"
 MessageCheck
 RETURN NextSeq$
END

COMMON DEF SEQ_MOVIE0_DRAW
 'DISPLAY 0 'PI:no dual screen
 GPAGE 0,GetDrawPage()
 GCLIP 1
 GFILL 0,0,512,512,RGB(154,96,46)
 GFILL 32,0    ,500,120    ,RGB(0,0,192)
 GFILL 32,0+256,500,120+256,RGB(0,0,192)
 DIM I%,J%
 DIM R% = (60-Movie0Time%)
 DIM Y% = 200
 IF( Movie0Time% > 60 ) THEN
  Y% = 200 - (Movie0Time% - 60) * 20
 ENDIF
 IF( Movie0Time% > 60 ) THEN
  R%=0
 ENDIF
 DrawModelRotate 8,0,200,0, 0, 0,R%
 DrawModelRotate gMyPlaneModel%,0,Y%,0, 0,90,R%
 
END
'---------------------------------------
'--------------SEQ_MOVIE1---------------
'---------------------------------------
DIM MOVIE1Time%
COMMON DEF SEQ_MOVIE1
 MOVIE1Time%=0
 BGMSTOP
END
COMMON DEF SEQ_MOVIE1_UPDATE$()
 DIM NextSeq$="SEQ_MOVIE1"
 INC MOVIE1Time%
 'UPDATE
 IF(Movie1Time%==1)THEN
'  MessageWindow 8,"うちゅうに\nきたーーーーーー"
  MessageWindow 8,"I'm in space!\nWooooooooooow!"
 ENDIF
 IF(MOVIE1Time%==90) THEN NextSeq$="SEQ_GAME"
 MessageCheck
 RETURN NextSeq$
END
COMMON DEF SEQ_MOVIE1_DRAW
 DIM PL%=GetParallaxLevel()
 DIM R#
 DIM D%,PX%
 R#= ((MOVIE1Time%-30)*3)*PI()/180
 D%= (MOVIE1Time%-30)*3+180
 PX%=400*SIN(R#)
 IF(MOVIE1Time%<30) THEN R#=0.0
 IF(MOVIE1Time%<30) THEN D%=180.0
 IF(MOVIE1Time%<30) THEN PX%=0
 'DISPLAY 0 'PI:no dual screen
 GPAGE 0,GetDrawPage()
 IF(Movie1Time%<60) THEN
  GCOPY 3,0,256, 239,239+256, (512-240)/2-PL%*2/3-PX%,(256-240)/2,1
  GCOPY 3,0,256, 239,239+256, (512-240)/2+PL%*2/3-PX%,(256-240)/2+256,1
 ENDIF
 DrawModelRotate gMyPlaneModel%,-200*SIN(R#),0,200*COS(R#)-20,0,0,D%
END
'---------------------------------------
'--------------SEQ_MOVIE2---------------
'---------------------------------------
DIM MOVIE2Time%
COMMON DEF SEQ_MOVIE2
 MOVIE2Time%=0
 BGMSTOP
END
COMMON DEF SEQ_MOVIE2_UPDATE$()
 DIM NextSeq$="SEQ_MOVIE2"
 INC MOVIE2Time%
 'UPDATE
 IF(Movie2Time%==1)THEN
'  MessageWindow 1,"はやく\nたすけてくれー"
  MessageWindow 1,"Help meeeeeeee."
 ENDIF
 IF(Movie2Time%==120)THEN
  MessageWindow 8,"I will rescue you!"
 ENDIF
 IF(MOVIE2Time%==200)THEN NextSeq$="SEQ_GAME"
 MessageCheck
 RETURN NextSeq$
END
COMMON DEF SEQ_MOVIE2_DRAW
 DIM PL%=GetParallaxLevel()
 DIM T%,Z%,Y%,R%
 T%=MOVIE2Time%
 R%=T%+120
 Z%=(T%-40)*20
 IF(T%<40) THEN Z%=0
 Y%=(T%-160)*5
 IF(T%>160) THEN Y%=0
 'DISPLAY 0 'PI:no dual screen
 GPAGE 0,GetDrawPage()
 DrawModelRotate 7,0,0,Z%,  0,   0,R%
 DrawModelRotate 4,0,0,Z%,  0, 135,R%
 DrawModelRotate 5,0,-30,Z%, 90, -90,R%
 DrawModelRotate 6,0,0,Z%,180, 180,R%
 DrawModel gMyPlaneModel%,0,-Y%,-240
 
END
'---------------------------------------
'--------------SEQ_MOVIE3---------------
'---------------------------------------
DIM MOVIE3Time%
COMMON DEF SEQ_MOVIE3
 MOVIE3Time%=0
 BGMSTOP
END
COMMON DEF SEQ_MOVIE3_UPDATE$()
 DIM NextSeq$="SEQ_MOVIE3"
 INC MOVIE3Time%
 'UPDATE
 IF(Movie3Time%==1)THEN
'  MessageWindow 8,"ハカセ \nあたらしいパーツよ"
  MessageWindow 8,"Hakase, your new parts!"
 ENDIF
 IF(Movie3Time%==90)THEN
'  MessageWindow 1,"たすかったーーーー"
  MessageWindow 1,"Thank you!"
 ENDIF
 IF(Movie3Time%==140)THEN
'  MessageWindow 0,"これで\nやっと \nちきゅうへ"
  MessageWindow 0,"Now that it's fixed..."
 ENDIF
 IF(Movie3Time%==200)THEN
  BEEP 121,,gSEVolume%
 ENDIF
 IF(Movie3Time%==240)THEN
  BEEP 121,,gSEVolume%
 ENDIF
 IF(Movie3Time%==240)THEN
'  MessageWindow 7,"な \nなにがおこったの"
  MessageWindow 7,"What the heck just happened!?"
 ENDIF
 IF(MOVIE3Time%==300)THEN NextSeq$="SEQ_MOVIE3_1"
 MessageCheck
 RETURN NextSeq$
END
COMMON DEF SEQ_MOVIE3_DRAW
 DIM T%,X1%,X2%,Z%
 T%=MOVIE3Time%
 IF(T%>20) THEN X1%=(T%-20)*(-10)
 IF(T%<160) THEN X2%=(160-T%)*10
 Z%=-120
 IF(T%>100) THEN Z%=-60
 'DISPLAY 0 'PI:no dual screen
 GPAGE 0,GetDrawPage()
 
 DrawModelRotate gMyPlaneModel%,X1%-40,-10,-120,0,0,-90
 IF((T%>=20)AND(T%<160)) THEN
  'DrawModel 9,0,0,Z%
  GCOLOR RGB(192,192,192)
  DrawLine3D  10,  0,Z%,  0,-10,Z%
  DrawLine3D   0,-10,Z%,-10,  0,Z%
  DrawLine3D -10,  0,Z%,  0, 10,Z%
  DrawLine3D   0, 10,Z%, 10,  0,Z%
  DrawLine3D   7, 7,Z%,  -7,  7,Z%
  DrawLine3D  -7, 7,Z%,  -7, -7,Z%
  DrawLine3D  -7,-7,Z%,   7, -7,Z%
  DrawLine3D   7,-7,Z%,   7,  7,Z%
 ENDIF
 'SORT フラグをたてるとかくれる
 DIM DF%=0
 IF( T% > 254 ) THEN DF% = DF% OR 1
 IF( T% > 254 ) THEN DF% = DF% OR 2
 IF( T% < 286 ) THEN DF% = DF% OR 4
 'かくれるがわ
 IF(  DF% AND 1     ) THEN DrawModelRotate 6,X2%,0,-60,180, 180,T%
 IF(  DF% AND 2     ) THEN DrawModelRotate 5,X2%,0,-60, 45,-135,T%
 IF(  DF% AND 4     ) THEN DrawModelRotate 7,X2%,0,-60,  0,   0,T%
 'MODEL
 DrawModelRotate 4,X2%,0,-60,  0, 135,T%
 'まえ
 IF( (DF% AND 1)==0 ) THEN DrawModelRotate 6,X2%,0,-60,180, 180,T%
 IF( (DF% AND 2)==0 ) THEN DrawModelRotate 5,X2%,0,-60, 45,-135,T%
 IF( (DF% AND 4)==0 ) THEN DrawModelRotate 7,X2%,0,-60,  0,   0,T%
END
'---------------------------------------
'--------------SEQ_MOVIE3_1---------------
'---------------------------------------
DIM MOVIE3_1Time%
COMMON DEF SEQ_MOVIE3_1
 MOVIE3_1Time%=0
 BGMPLAY 0,32,gBGMVolume%
END
COMMON DEF SEQ_MOVIE3_1_UPDATE$()
 DIM NextSeq$="SEQ_MOVIE3_1"
 INC MOVIE3_1Time%
 'UPDATE
 IF(MOVIE3_1Time%<240)THEN
  IF((MOVIE3_1Time% MOD 40)==1)THEN
   BEEP 44,,gSEVolume%
  ENDIF
 ENDIF
 IF(Movie3_1Time%==1)THEN
' MessageWindow 2,"これでやっと \nちきゅうをせいふく\nできるわい"
  MessageWindow 2,"...\nI can finally RULE\nthe entire Earth!"
 ENDIF
 IF(Movie3_1Time%==120)THEN
'  MessageWindow 9,"そ そんな\nうそですよね\nハカセ"
  MessageWindow 9,"No way!\nYou're kidding,\naren't you!?"
 ENDIF
 IF(Movie3_1Time%==250)THEN
'  MessageWindow 9,"ほんとうに\nうらぎったん\nですかーーーー"
  MessageWindow 9,"Noooo! You were the chosen one!\nThey said only you could\nbring balance to Earth!"
 ENDIF
 IF(Movie3_1Time%==400)THEN
'  MessageWindow 7,"あたらしいかおよ\n \nっていうべきだったかな"
  MessageWindow 7,"So Hakase succumbed to\nthe dark side!?"
 ENDIF
 IF(MOVIE3_1Time%==490)THEN NextSeq$="SEQ_GAME"
 MessageCheck
 RETURN NextSeq$
END
COMMON DEF SEQ_MOVIE3_1_DRAW
 DIM T%,R4%,R5%,R6%,R%,A#,Y6%
 T%=MOVIE3_1Time%
 IF(T%<240) THEN
  A#=(240-T%)/240
  R4% = 135 * A#
  R5% =  45 * A#
  R6% = 180 * A#
  Y6% = 90
 ENDIF
 IF(T%<270) THEN
  Y6% = 90  * (270-T%)/270
  R%  = 180 * (270-T%)/270
 ENDIF
 'DISPLAY 0 'PI:no dual screen
 GPAGE 0,GetDrawPage()
 'SORT フラグをたてるとかくれる
 DIM DF%=0
 IF( T% < 200 ) THEN DF% = DF% OR 2
 IF( T% < 165 ) THEN DF% = DF% OR 4
 'かくれるがわ
 IF(  DF% AND 1     ) THEN DrawModelRotate 6,0,Y6%,0,R6%, R6%,R%
 IF(  DF% AND 2     ) THEN DrawModelRotate 5,0,-Y6%,0,R5%,-R4%,R%
 IF(  DF% AND 4     ) THEN DrawModelRotate 7,0,0,0,  0,   0,R%
 'MODEL
 DrawModelRotate 4,0,0,0,  0, R4%,R%
 'まえ
 IF( (DF% AND 4)==0 ) THEN DrawModelRotate 7,0,0,0,  0,   0,R%
 IF( (DF% AND 1)==0 ) THEN DrawModelRotate 6,0, Y6%,0,R6%, R6%,R%
 IF( (DF% AND 2)==0 ) THEN DrawModelRotate 5,0,-Y6%,0,R5%,-R4%,R%
END
'---------------------------------------
'--------------SEQ_MOVIE4---------------
'---------------------------------------
DIM MOVIE4Time%
COMMON DEF SEQ_MOVIE4
 MOVIE4Time%=0
 BGMSTOP
END
COMMON DEF SEQ_MOVIE4_UPDATE$()
 DIM NextSeq$="SEQ_MOVIE4"
 INC MOVIE4Time%
 'UPDATE
 IF(Movie4Time%==1)THEN
'  MessageWindow 8,"スペシャルミッション"
  MessageWindow 13,"Let's try this long stage!"
 ENDIF
 IF(MOVIE4Time%==90) THEN NextSeq$="SEQ_GAME"
 MessageCheck
 RETURN NextSeq$
END
COMMON DEF SEQ_MOVIE4_DRAW
 DIM PL%=GetParallaxLevel()
 DIM R#
 DIM D%,PX%
 R#= ((MOVIE4Time%-30)*3)*PI()/180
 D%= (MOVIE4Time%-30)*3+180
 PX%=400*SIN(R#)
 IF(MOVIE4Time%<30) THEN R#=0.0
 IF(MOVIE4Time%<30) THEN D%=180.0
 IF(MOVIE4Time%<30) THEN PX%=0
 'DISPLAY 0 'PI:no dual screen
 GPAGE 0,GetDrawPage()
 IF(Movie4Time%<60) THEN
  GCOPY 3,0,256, 239,239+256, (512-240)/2-PL%*2/3-PX%,(256-240)/2,1
  GCOPY 3,0,256, 239,239+256, (512-240)/2+PL%*2/3-PX%,(256-240)/2+256,1
 ENDIF
 DrawModelRotate gMyPlaneModel%,-200*SIN(R#),0,200*COS(R#)-20,0,0,D%
END
'---------------------------------------
'-------------SEQ_ENDMOVIE1-------------
'---------------------------------------
DIM ENDMOVIE1Time%
COMMON DEF SEQ_ENDMOVIE1
 ENDMOVIE1Time%=0
 BGMPLAY 0,40,gBGMVolume%
END
COMMON DEF SEQ_ENDMOVIE1_UPDATE$()
 DIM NextSeq$="SEQ_ENDMOVIE1"
 INC ENDMOVIE1Time%
 'UPDATE
 DIM T%=ENDMovie1Time%
 IF(T%==1)THEN
'  MessageWindow 7,"ハカセ\nたおしちゃった"
  MessageWindow 7,"I defeated Hakase...\nIs this...OK?"
 ENDIF
 IF(T%==100)THEN
'  MessageWindow 10,"とりあえず\nちきゅうに\nもどりますか"
  MessageWindow 10,"No idea. Anyway,\nlet's head back to Earth."
 ENDIF
 IF(T%==200)THEN
'  MessageWindow 7,"りょ \nりょうかいした \nインテリくん"
  MessageWindow 7,"Okay...copy that,\nMr. Intelligent."
 ENDIF
 IF(T%==300)THEN
'  MessageWindow 1,"こんどは\nまけんからな \nおぼえておれ"
  MessageWindow 1,"I'll get you for this someday!"
 ENDIF
 IF(T%==400)THEN
'  MessageWindow 4,"オレたちのことも\nわすれんなよ"
  MessageWindow 4,"Gotta tell ya, it's hard\nfor us to speak English\nor translate to it."
 ENDIF
 IF(T%==500)THEN
'  MessageWindow 8,"プチコンごう \nこれよりきかんする"
  MessageWindow 8,"Ready to reenter Earth now."
 ENDIF
 IF(ENDMOVIE1Time%==600) THEN NextSeq$="SEQ_ENDMOVIE2"
 MessageCheck
 RETURN NextSeq$
END
COMMON DEF SEQ_ENDMOVIE1_DRAW
 DIM PL%=GetParallaxLevel()
 DIM R#
 DIM D%,PX%
 DIM T%=ENDMovie1Time%
 R#= ((600-T%)*0.3) * PI()/180
 D%= ((600-T%)*0.3)
 PX%=300*SIN(R#)
 'DISPLAY 0 'PI:no dual screen
 GPAGE 0,GetDrawPage()
 IF(T%>300) THEN
  GCOPY 3,0,256, 239,239+148, (512-240)/2-PL%*2/3-PX%,(256-240)/2+120,1
  GCOPY 3,0,256, 239,239+148, (512-240)/2+PL%*2/3-PX%,(256-240)/2+256+120,1
 ENDIF
 DrawModelRotate gMyPlaneModel%,0,-90,-200,0,0,D%
 IF((  0<=T%)AND(T%<100))THEN
  C2MES "   PLANE 2 SOLID",3,6
'  C2MES "     スタッフクレジット",3,7
  C2MES "       STAFF",3,7
 ENDIF
 IF((130<=T%)AND(T%<200))THEN
'  C2MES "        きかく",3,6
  C2MES "     Planning",3,6
  C2MES "  SatoshiMcCloud",3,7
 ENDIF
 
 IF((220<=T%)AND(T%<290))THEN
'  C2MES "      ゲームデザイン",3,5
  C2MES "    Game Design",3,5
  C2MES "  SatoshiMcCloud",3,6
'  C2MES "      プログラミング",3,8
  C2MES "    Programmer",3,8
  C2MES "  SatoshiMcCloud",3,9
 ENDIF
 
 IF((310<=T%)AND(T%<380))THEN
'  C2MES "       せんきょく",3,5
  C2MES "  Sound Director",3,5
  C2MES "  SatoshiMcCloud",3,6
'  C2MES "      3Dモデリング",3,8
  C2MES "   Model Design",3,8
  C2MES "  SatoshiMcCloud",3,9
 ENDIF
 IF((410<=T%)AND(T%<500))THEN
'  C2MES "     パッケージデザイン",3,5
'  C2MES "    そんなの ないってば",3,6
  C2MES "  English version",3,4
  C2MES "    Supervisor",3,5
  C2MES "      Lohad L",3,6

'  C2MES "NASA アポロ17ごう のりくみいん",3,9
  C2MES " Photo of the Earth ",3,8
  C2MES " “The Blue Marble”",3,9
  C2MES "      by NASA",3,10
 ENDIF
 IF((530<=T%)AND(T%<600))THEN
  C2MES "   Special Thanks",3,6
  C2MES "        You",3,7
'  C2MES "       みなさん",3,8

 ENDIF
END
'---------------------------------------
'-------------SEQ_ENDMOVIE2-------------
'---------------------------------------
DIM ENDMOVIE2Time%
COMMON DEF SEQ_ENDMOVIE2
 ENDMOVIE2Time%=0
END
COMMON DEF SEQ_ENDMOVIE2_UPDATE$()
 DIM NextSeq$="SEQ_ENDMOVIE2"
 INC ENDMOVIE2Time%
 'UPDATE
 IF(ENDMovie2Time%==1)THEN
 ENDIF
 IF(ENDMOVIE2Time%>240) THEN
  IF( GetKeyF() AND 16) THEN
   NextSeq$="SEQ_CHECK"
  ENDIF
 ENDIF
 RETURN NextSeq$
END
COMMON DEF SEQ_ENDMOVIE2_DRAW
 DIM PL%=GetParallaxLevel()
 DIM T%=ENDMovie2Time%
 DIM Z%=T%*20
 DIM Y%=-90+T%*4
 DIM TOTAL%=gScore%[0]+gScore%[1]+gScore%[2]+gScore%[3]
 'DISPLAY 0 'PI:no dual screen
 GPAGE 0,GetDrawPage()
 GCOPY 3,0,256, 239,239+148, (512-240)/2-PL%*2/3,(256-240)/2+120,1
 GCOPY 3,0,256, 239,239+148, (512-240)/2+PL%*2/3,(256-240)/2+256+120,1
 DrawModelRotate gMyPlaneModel%,0,Y%,-200+Z%,0,0,0
 IF( 30 < T% ) THEN
  C2MES         "      RESULT"   ,3,0
 ENDIF
 IF( 60 < T% ) THEN
  C2MES FORMAT$(" MISSION 1     % 3D",gScore%[0]),3,3
 ENDIF
 IF( 75 < T% ) THEN
  C2MES FORMAT$(" MISSION 2    % 4D",gScore%[1]),3,4
 ENDIF
 IF( 90 < T% ) THEN
  C2MES FORMAT$(" MISSION 3    % 4D",gScore%[2]),3,5
 ENDIF
 IF( 105 < T% ) THEN
  C2MES FORMAT$(" FINAL MISSION% 4D",gScore%[3]),3,6
 ENDIF
 IF( 140 < T% ) THEN
  C2MES FORMAT$(" TOTAL SCORE  % 4D",TOTAL%),3,8
 ENDIF
 IF( 180 < T% ) THEN
  C2MES "     Thank you",3,10
  C2MES "    for playing",3,11
 ENDIF
 IF( 240 < T% ) THEN
  IF( (T% MOD 15) < 8) THEN
   C2MES "   PUSH A BUTTON",3,13
  ENDIF
 ENDIF

END
'---------------------------------------
'--------------SEQ_CONTINUE-------------
'---------------------------------------
DIM CONTINUE_MODE%
DIM CONTINUE_SELECT%
DIM CONTINUE_TIME%
COMMON DEF SEQ_CONTINUE
 CONTINUE_MODE%=0
 CONTINUE_SELECT%=0
 CONTINUE_TIME%=0
 BGMSTOP
END
COMMON DEF SEQ_CONTINUE_UPDATE$()
 DIM NextSeq$="SEQ_CONTINUE"
 'UPDATE
 INC CONTINUE_TIME%
 IF( CONTINUE_MODE% == 0 ) THEN
  IF( GetPadFAsUDLR() AND 1 ) THEN
   CONTINUE_SELECT% = 0
   BEEP 9
  ENDIF
  IF( GetPadFAsUDLR() AND 2 ) THEN
   CONTINUE_SELECT% = 1
   BEEP 9
  ENDIF
  IF( GetKeyF() AND 16 ) THEN
   CONTINUE_MODE%=1
   CONTINUE_TIME%=0
   IF(CONTINUE_SELECT%==0)THEN BEEP 7
   IF(CONTINUE_SELECT%==1)THEN BEEP 6
  ENDIF
 ENDIF
 IF( CONTINUE_MODE% == 1 ) THEN
  IF(CONTINUE_TIME% > 30 )  THEN
   IF(CONTINUE_SELECT%==0)   THEN
    NextSeq$="SEQ_GAME"
   ELSE
    NextSeq$="SEQ_CHECK"
   ENDIF
  ENDIF
 ENDIF
 RETURN NextSeq$
END

COMMON DEF SEQ_CONTINUE_DRAW
 C2MES "CONTINUE",5,5
 C2MES " YES",5,6
 C2MES " NO",5,7
 C2MES "",5,6+CONTINUE_SELECT%
 
END
'---------------------------------------
'----------------SEQ_GAME---------------
'---------------------------------------
DIM GameTime%
DIM GameStagePoint%
DIM GameStageMargin%
DIM GameOverFrag%
DIM GameClearFrag%
DIM GamePauseFrag%
DIM GamePauseMenu%
DIM GameCameraMode%
DIM GameStageScore%


DIM GamePlanePosX#
DIM GamePlanePosY#
DIM GamePlanePosZ#
DIM GamePlaneP#
DIM GamePlaneR#
DIM GamePlaneY#
DIM GamePlaneHP%
DIM GameBeamMax%=12
DIM GameBeam%[GameBeamMax%]
DIM GameBeamX#[GameBeamMax%]
DIM GameBeamY#[GameBeamMax%]
DIM GameBeamTime%

DIM GameEft%[30]
DIM GameEftX#[30]
DIM GameEftY#[30]
DIM GameEftZ#[30]

DIM GameEnemyMax%=50
DIM GameEnemy%[GameEnemyMax%]
DIM GameEnemyX#[GameEnemyMax%]
DIM GameEnemyY#[GameEnemyMax%]
DIM GameEnemyZ#[GameEnemyMax%]
DIM GameEnemyT%[GameEnemyMax%]
DIM GameEnemyHP%[GameEnemyMax%]
DIM GameEnemyParm1#[GameEnemyMax%]
DIM GameEnemyParm2#[GameEnemyMax%]
DIM GameEnemyParm3#[GameEnemyMax%]
DIM GameDamageTime%

DIM GameEnemyColX1#[9]
DIM GameEnemyColY1#[9]
DIM GameEnemyColZ1#[9]
DIM GameEnemyColX2#[9]
DIM GameEnemyColY2#[9]
DIM GameEnemyColZ2#[9]
DIM GamePlaneZV#'=3.0

DIM GameGuideZ%

DIM GameBossID%


'てき あたり はんてい
'ミサイル
GameEnemyColX1#[1] = -20
GameEnemyColY1#[1] = -20
GameEnemyColZ1#[1] = -25
GameEnemyColX2#[1] =  20
GameEnemyColY2#[1] =  20
GameEnemyColZ2#[1] =  20

'やっこさん
GameEnemyColX1#[2] = -30
GameEnemyColY1#[2] = -30
GameEnemyColZ1#[2] =  -5
GameEnemyColX2#[2] =  30
GameEnemyColY2#[2] =  30
GameEnemyColZ2#[2] =   5

'てきの うつ たま
GameEnemyColX1#[3] =  -8
GameEnemyColY1#[3] =  -8
GameEnemyColZ1#[3] =  -8
GameEnemyColX2#[3] =   8
GameEnemyColY2#[3] =   8
GameEnemyColZ2#[3] =   8

'ロボ
GameEnemyColX1#[4] = -100
GameEnemyColY1#[4] = -100
GameEnemyColZ1#[4] = -100
GameEnemyColX2#[4] =  100
GameEnemyColY2#[4] =  100
GameEnemyColZ2#[4] =  100

'かいふく
GameEnemyColX1#[5] = -50
GameEnemyColY1#[5] = -50
GameEnemyColZ1#[5] =   -1
GameEnemyColX2#[5] =  50
GameEnemyColY2#[5] =  50
GameEnemyColZ2#[5] =    1

'め
GameEnemyColX1#[6] = -35
GameEnemyColY1#[6] = -20
GameEnemyColZ1#[6] = -10
GameEnemyColX2#[6] =  35
GameEnemyColY2#[6] =  20
GameEnemyColZ2#[6] =  10
'とり
GameEnemyColX1#[7] = -30
GameEnemyColY1#[7] = -20
GameEnemyColZ1#[7] =   0
GameEnemyColX2#[7] =  30
GameEnemyColY2#[7] =  20
GameEnemyColZ2#[7] =   0
'たまダミー
GameEnemyColX1#[8] =  -8
GameEnemyColY1#[8] =  -8
GameEnemyColZ1#[8] =  -8
GameEnemyColX2#[8] =   8
GameEnemyColY2#[8] =   8
GameEnemyColZ2#[8] =   8


COMMON DEF SEQ_GAME
 ReadStageData FORMAT$("@STAGE%D",gStage%)
 GamePlanePosX#=0.0
 GamePlanePosY#=0.0
 GamePlanePosZ#=0.0
 GamePlaneP#=0.0
 GamePlaneR#=0.0
 GamePlaneY#=0.0
 GamePlaneHP%=gMyPlaneHPMax%
 GameDamageTime%=0
 GameTime%=0
 GameStageScore%=0
 GameStagePoint%=0
 GameStageMargin%=0
 GameOverFrag% = 0
 GameClearFrag% =0
 GamePauseFrag% =0
 GamePlaneZV#=3.0
 GameGuideZ%=50
 DIM N%
 FOR N%=0 TO GameBeamMax%-1
  GameBeam%[N%]=-1
 NEXT
 GameBeamTime%=0
 FOR N%=0 TO GameEnemyMax%-1
  GameEnemy%[N%] = -1
 NEXT
 FOR N%=0 TO 29
  GameEft%[N%]=-1
 NEXT
 GameBossID%=-1
END
'-------------------------
'----------UPDATE---------
'-------------------------
COMMON DEF SEQ_GAME_UPDATE$()
'----------INPUT----------
 DIM NextSeq$="SEQ_GAME"
 DIM PX#=GetPadX()
 DIM PY#=GetPadY()
 DIM N%,M%
 '-----UPDATE-----
 DIM CMDS$,P1%,P2%,P3%,P4%,PS1$
 IF(GameOverFrag%==0) THEN
 IF(GameClearFrag%==0) THEN
  'ポーズメニュー
  IF(GamePauseFrag%>1) THEN
   INC GamePauseFrag%
   IF( GamePauseFrag% > 30)THEN
    IF( GamePauseMenu% == 2 )THEN
     NextSeq$="SEQ_CHECK"
    ENDIF
    IF( GamePauseMenu% == 1 )THEN
     SEQ_GAME
     NextSeq$="SEQ_GAME"
    ENDIF
   ENDIF
   RETURN NextSeq$
  ENDIF

  IF(GetKeyF()AND 128)THEN
   GamePauseFrag% = 1 XOR GamePauseFrag%
   GamePauseMenu% = 0
   BEEP 116
   RETURN NextSeq$
  ENDIF

  IF(GamePauseFrag%==1) THEN
   IF( GetPadFAsUDLR() AND 1 ) THEN
    DEC GamePauseMenu%
   ENDIF
   IF( GetPadFAsUDLR() AND 2 ) THEN
    INC GamePauseMenu%
   ENDIF
   IF(GamePauseMenu%>=3)THEN GamePauseMenu%=2
   IF(GamePauseMenu%<0)THEN GamePauseMenu%=0
   IF( GetKeyF() AND 16 )THEN
    BEEP 116
    IF(GamePauseMenu%)THEN
     GamePauseFrag%=2
     BGMSTOP
    ELSE 
     GamePauseFrag%=0
    ENDIF
   ENDIF
   RETURN NextSeq$
  ENDIF
  'ポーズメニュー おわり
  INC GameTime%
  IF(GetKeyF()AND 64)THEN INC GameCameraMode%
  IF(2<GameCameraMode%)THEN GameCameraMode%=0
  IF(GameStageMargin%==0) THEN
   WHILE (GameStageMargin%==0)
    GetStageData GameStagePoint% OUT CMDS$,P1%,P2%,P3%,P4%,PS1$
    IF( CMDS$=="END" ) THEN
     GameStageMargin%=1000000
     GameClearFrag% = 1
    ENDIF
    IF( CMDS$=="BGM" ) THEN
     IF(P1%<0) THEN BGMSTOP ELSE BGMPLAY 0,P1%,gBGMVolume%
    ENDIF
    IF( CMDS$=="BEEP" ) THEN
     BEEP P1%,,gBGMVolume%
    ENDIF
    IF( CMDS$=="WAIT" ) THEN
     GameStageMargin% = P1%
    ENDIF
    IF( CMDS$=="TALK" ) THEN
     MessageWindow P1%,PS1$
    ENDIF
    IF( CMDS$=="ENEMY" ) THEN
     N%=EnemyAppear(P1%,P2%,P3%,P4%)
    ENDIF
    IF( CMDS$=="BOSS" ) THEN
     GameBossID%=EnemyAppear(P1%,P2%,P3%,P4%)
    ENDIF
    INC GameStagePoint%
   WEND
  ELSE
   DEC GameStageMargin%
  ENDIF
 ELSE
  INC GameClearFrag%
 ENDIF
 ELSE
  INC GameOverFrag%
 ENDIF
 '--------------
 DEC GameGuideZ%,GamePlaneZV#
 IF( GameGuideZ% < 0)THEN GameGuideZ%=50
 '-----BOSS-----
 IF( GameBossID% >= 0 ) THEN
  IF(GameEnemy%[GameBossID%] < 0) THEN
   GameBossID% = -1
  ELSE
   IF(GameEnemyHP%[GameBossID%]<=0) THEN
    GameBossID% = -1
   ENDIF
  ENDIF
 ENDIF
 IF( GameBossID% < 0 ) THEN
  GamePlaneZV# = 3.0
 ELSE
  GamePlaneZV# = 0.0
  INC GameStageMargin%
 ENDIF
 '-----EFT-----
 FOR N%=0 TO 29
  IF( GameEft%[N%] >= 0 ) THEN
   DEC GameEftZ#[N%],GamePlaneZV#
   DEC GameEft%[N%]
  ENDIF
 NEXT 
 '-----ジキ-----
 IF(GameOverFrag%==0) THEN
  IF(GameClearFrag%==0) THEN
   INC GamePlanePosX# ,  gMyPlaneSpeed#*PX#
   
   INC GamePlanePosY# , -gMyPlaneSpeed#*PY#
   GamePlaneR# =  PX#/2
   GamePlaneY# = -PX#/2
   GamePlaneP# =  PY#/2
   IF( GamePlanePosX#< -200) THEN GamePlanePosX#=-200
   IF( GamePlanePosX#>  200) THEN GamePlanePosX#= 200
   IF( GamePlanePosY#< -100) THEN GamePlanePosY#=-100
   IF( GamePlanePosY#>  100) THEN GamePlanePosY#= 100
   IF(GameDamageTime%) THEN DEC GameDamageTime%
   IF(gStage%==0) THEN
    IF((GameTime% MOD 60)==0) THEN
     DEC GamePlaneHP%
    ENDIF
   ENDIF
   IF( GamePlaneHP% <= 0 ) THEN
    GameOverFrag%=1
    BEEP 108,,gSEVolume%
    BGMSTOP
    EftAppear GamePlanePosX#+10,GamePlanePosY#+10,GamePlanePosZ#
    EftAppear GamePlanePosX#-10,GamePlanePosY#+10,GamePlanePosZ#
    EftAppear GamePlanePosX#+10,GamePlanePosY#-10,GamePlanePosZ#
    EftAppear GamePlanePosX#-10,GamePlanePosY#-10,GamePlanePosZ#
   ENDIF
  ELSE
   GamePlaneR# = 0
   GamePlaneY# = 0
   GamePlaneP# = 0
   INC GamePlanePosZ#,30
  ENDIF
 ENDIF
 '-----ビーム-----
 IF(GameOverFrag%==0) THEN
  IF(GameClearFrag%==0) THEN
   IF(GetKey() AND 48) THEN
    INC GameBeamTime%
    IF(GameBeamTime%>15) THEN GameBeamTime%=0
   ELSE
    GameBeamTime%=0
   ENDIF
   IF((GameBeamTime%==1)OR(GameBeamTime%==3)OR(GameBeamTime%==5)) THEN
    IF(gMyPlaneBeam%==0) THEN
     FOR N%=0 TO GameBeamMax%-1
      IF( GameBeam%[N%]<0 ) THEN
       GameBeam%[N%]=0
       GameBeamX#[N%]=GamePlanePosX#
       GameBeamY#[N%]=GamePlanePosY#'+10
       BEEP 120,,gSEVolume%/3
       BREAK
      ENDIF
     NEXT
    ELSE
     FOR N%=0 TO GameBeamMax%-1
      IF( GameBeam%[N%]<0 ) THEN
       GameBeam%[N%]=0
       GameBeamX#[N%]=GamePlanePosX#-20
       GameBeamY#[N%]=GamePlanePosY#
       BEEP 120,,gSEVolume%/3
       BREAK
      ENDIF
     NEXT
     FOR N%=0 TO GameBeamMax%-1
      IF( GameBeam%[N%]<0 ) THEN
       GameBeam%[N%]=0
       GameBeamX#[N%]=GamePlanePosX#+20
       GameBeamY#[N%]=GamePlanePosY#
       BREAK
      ENDIF
     NEXT
    ENDIF
   ENDIF
  ENDIF
 ENDIF
 FOR N%=0 TO GameBeamMax%-1
  IF( GameBeam%[N%]>=0 ) THEN
   INC GameBeam%[N%],50
  ENDIF
  IF( GameBeam%[N%]>580 ) THEN
   GameBeam%[N%]=-1
  ENDIF
 NEXT
 '-----テキ-----
 EnemyUpdate
 '---あたり はんてい---
 'テキ ⇔ ビーム
 DIM E%,X1#,X2#,Y1#,Y2#,Z1#,Z2#,BX#,BY#,BZ#
 FOR N%=0 TO GameBeamMax%-1
  IF( GameBeam%[N%] >= 0 ) THEN
   BX#=GameBeamX#[N%]
   BY#=GameBeamY#[N%]
   BZ#=GameBeam%[N%]
   FOR M%=0 TO GameEnemyMax%-1
    IF( GameEnemy%[M%]>0 ) THEN
    IF( GameEnemy%[M%]!=3) THEN
     IF( GameEnemy%[M%]!=5 ) THEN
      E%=GameEnemy%[M%]
      X1#=GameEnemyColX1#[E%]+GameEnemyX#[M%]
      Y1#=GameEnemyColY1#[E%]+GameEnemyY#[M%]
      Z1#=GameEnemyColZ1#[E%]+GameEnemyZ#[M%]
      X2#=GameEnemyColX2#[E%]+GameEnemyX#[M%]
      Y2#=GameEnemyColY2#[E%]+GameEnemyY#[M%]
      Z2#=GameEnemyColZ2#[E%]+GameEnemyZ#[M%]
      IF( (X1#<=BX#)&&(BX#<=X2#)&&(Y1#<=BY#)&&(BY#<=Y2#)&&(Z1#<BZ#)&&(BZ#-50<Z2#) ) THEN
       GameBeam%[N%]=-1
       DEC GameEnemyHP%[M%]
       IF( E% != 4 )THEN BEEP 13,,gSEVolume%
      ENDIF
     ENDIF
    ENDIF
    ENDIF
   NEXT
  ENDIF
 NEXT
 'テキ ⇔ じき
 DIM CPX1%,CPY1%,CPZ1%,CPX2%,CPY2%,CPZ2%
 DIM F%=0
 IF(GameOverFrag%==0) THEN
  IF(GameClearFrag%==0) THEN
   IF(GameDamageTime%==0) THEN
    CPX1% = GamePlanePosX# -  5
    CPX2% = GamePlanePosX# +  5
    CPY1% = GamePlanePosY# 
    CPY2% = GamePlanePosY# + 20
    CPZ1% = GamePlanePosZ# 
    CPZ2% = GamePlanePosZ# + 50
    
    FOR M%=0 TO GameEnemyMax%-1
     IF( GameEnemy%[M%]>0 ) THEN
     IF( GameEnemyHP%[M%]>0)THEN
      E%=GameEnemy%[M%]
      X1#=GameEnemyColX1#[E%]+GameEnemyX#[M%]
      Y1#=GameEnemyColY1#[E%]+GameEnemyY#[M%]
      Z1#=GameEnemyColZ1#[E%]+GameEnemyZ#[M%]
      X2#=GameEnemyColX2#[E%]+GameEnemyX#[M%]
      Y2#=GameEnemyColY2#[E%]+GameEnemyY#[M%]
      Z2#=GameEnemyColZ2#[E%]+GameEnemyZ#[M%]
      IF( (X1#<=CPX2%)&&(CPX1%<=X2#)&&(Y1#<=CPY2%)&&(CPY1%<=Y2#)&&(Z1#<CPZ2%)&&(CPZ1%<Z2#) )  THEN
       IF(GameEnemy%[M%] != 5 ) THEN
        F%=1
       ELSE
        GameEnemy%[M%] = -1
        INC GamePlaneHP%
        IF(gMyPlaneHPMax%<GamePlaneHP%)THEN
         GamePlaneHP%=gMyPlaneHPMax%
        ENDIF
        INC GameStageScore%
        BEEP 119,,gSEVolume%
       ENDIF
      ENDIF
     ENDIF
     ENDIF
    NEXT
    IF(F%) THEN
     DEC GamePlaneHP%
     GameDamageTime%=16
     BEEP 13,,gSEVolume%
    ENDIF
   ENDIF
  ENDIF
 ENDIF
 'ミス
 IF(GameOverFrag% == 3) THEN EftAppear GamePlanePosX#,GamePlanePosY#,GamePlanePosZ#
 IF(GameOverFrag% == 8) THEN EftAppear GamePlanePosX#,GamePlanePosY#,GamePlanePosZ#
 IF(GameStageScore%>9999) THEN GameStageScore%=9999
 'ゲームオーバー
 IF( GameOverFrag% > 120) THEN
  UpdateScore GameStageScore%,gStage%,gMyPlane%
  IF( gStage%==4 ) THEN 
   NextSeq$="SEQ_CHECK"
  ELSE
   NextSeq$="SEQ_CONTINUE"
  ENDIF
 ENDIF
 'クリア
 IF(GameClearFrag%) THEN
  IF( GameClearFrag%==150 ) THEN
   gScore%[gStage%]=GameStageScore%
  UpdateScore GameStageScore%,gStage%,gMyPlane%
   IF( gStage%==4 ) THEN
    NextSeq$="SEQ_CHECK"
   ELSEIF( gStage%==3 ) THEN
    NextSeq$="SEQ_ENDMOVIE1"
   ELSE
    INC gStage%
    NextSeq$= FORMAT$("SEQ_MOVIE%D",gStage%)
   ENDIF
  ENDIF
 ENDIF
 MessageCheck
 RETURN NextSeq$
END
DEF EftAppear PX#,PY#,PZ#
 DIM N%
 FOR N%=0 TO 29
  IF( GameEft%[N%]<0 ) THEN
   GameEft%[N%]=10
   GameEftX#[N%]=PX#
   GameEftY#[N%]=PY#
   GameEftZ#[N%]=PZ#
   BREAK
  ENDIF
 NEXT
END
'--------------
'---テキ しゅつげん---
'--------------
DEF EnemyAppear(EnemyType,PX#,PY#,PZ#)
 DIM N%,F%=-1,VX#,VY#,VZ#,V#
 FOR N%=0 TO GameEnemyMax%-1
  IF( GameEnemy%[N%] < 0 ) THEN
  'ミサイル
   IF(EnemyType==1) THEN
    GameEnemy%[N%]=1
    GameEnemyX#[N%]=PX#
    GameEnemyY#[N%]=PY#
    GameEnemyZ#[N%]=512
    GameEnemyT%[N%]=0
    GameEnemyHP%[N%]=9
    F%=N%
    BREAK
   ENDIF
   'やっこさん
   IF(EnemyType==2) THEN
    GameEnemy%[N%]=2
    GameEnemyX#[N%]=PX#
    GameEnemyY#[N%]=PY#
    GameEnemyZ#[N%]=470
    GameEnemyT%[N%]=0
    GameEnemyHP%[N%]=50
    GameEnemyParm1#[N%]=2
    F%=N%
    BREAK
   ENDIF
   'てきの うつ たま
   IF(EnemyType==3) THEN
    GameEnemy%[N%]=3
    GameEnemyX#[N%]=PX#
    GameEnemyY#[N%]=PY#
    GameEnemyZ#[N%]=PZ#
    GameEnemyT%[N%]=0
    GameEnemyHP%[N%]=1
    VX# = (GamePlanePosX# - PX#)
    VY# = (GamePlanePosY# - PY#)
    VZ# = (GamePlanePosZ# - PZ#)
    V# =SQR( VX#*VX# + VY#*VY# + VZ#*VZ# )
    GameEnemyParm1#[N%] = 16*VX# / V#
    GameEnemyParm2#[N%] = 16*VY# / V#
    GameEnemyParm3#[N%] = 16*VZ# / V#
    F%=N%
    BREAK
   ENDIF
   'ロボ
   IF(EnemyType==4) THEN
    GameEnemy%[N%]=4
    GameEnemyX#[N%]=0
    GameEnemyY#[N%]=0
    GameEnemyZ#[N%]=380
    GameEnemyT%[N%]=0
    GameEnemyHP%[N%]=65535
    GameEnemyParm1#[N%] = EnemyAppear(6,-45,-30,260)
    GameEnemyParm2#[N%] = EnemyAppear(6, 45,-30,260)
    GameEnemyParm3#[N%] = 0
    F%=N%
    BREAK
   ENDIF
   'かいふく
   IF(EnemyType==5) THEN
    GameEnemy%[N%]=5
    GameEnemyX#[N%]=PX#
    GameEnemyY#[N%]=PY#
    GameEnemyZ#[N%]=512
    GameEnemyT%[N%]=0
    GameEnemyHP%[N%]=100
    F%=N%
    BREAK
   ENDIF
   'め
   IF(EnemyType==6) THEN
    GameEnemy%[N%]=6
    GameEnemyX#[N%]=PX#
    GameEnemyY#[N%]=PY#
    GameEnemyZ#[N%]=PZ#
    GameEnemyT%[N%]=0
    GameEnemyHP%[N%]=50
    F%=N%
    BREAK
   ENDIF
   'とり
   IF(EnemyType==7) THEN
    GameEnemy%[N%]=7
    GameEnemyX#[N%]=PX#
    GameEnemyY#[N%]=PY#
    GameEnemyZ#[N%]=512
    GameEnemyT%[N%]=0
    GameEnemyHP%[N%]=4
    GameEnemyParm1#[N%]=( PZ# MOD 20 )
    GameEnemyParm2#[N%]=( PZ# DIV 20 )
    
    F%=N%
    BREAK
   ENDIF
   'たま まっすぐ
   IF(EnemyType==8) THEN
    GameEnemy%[N%]=3
    GameEnemyX#[N%]=PX#
    GameEnemyY#[N%]=PY#
    GameEnemyZ#[N%]=PZ#
    GameEnemyT%[N%]=0
    GameEnemyHP%[N%]=1
    GameEnemyParm1#[N%] = 0
    GameEnemyParm2#[N%] = 0
    GameEnemyParm3#[N%] = -16
    F%=N%
    BREAK
   ENDIF
  ENDIF
 NEXT
 RETURN F%
END
'--------------
'---テキupdate---
'--------------
DEF EnemyUpdate
 DIM N%,DX#,DY#,DZ#,T%,A%,B%,E1%,E2%,F%
 ' ふつうのUPDATE
 FOR N%=0 TO GameEnemyMax%-1
  'ミサイル
  IF( GameEnemy%[N%] == 1 ) THEN
   INC GameEnemyT%[N%]
   DEC GameEnemyZ#[N%],GamePlaneZV#
   DEC GameEnemyZ#[N%],4.0
   DX# = GameEnemyX#[N%] - GamePlanePosX#
   DY# = GameEnemyY#[N%] - GamePlanePosY#
   IF(DX#<-9.0) THEN INC GameEnemyX#[N%], 3.0
   IF(DX#> 9.0) THEN INC GameEnemyX#[N%],-3.0
   IF(DY#<-9.0) THEN INC GameEnemyY#[N%], 3.0
   IF(DY#> 9.0) THEN INC GameEnemyY#[N%],-3.0
   IF( GameEnemyZ#[N%] < 0 ) THEN
    GameEnemy%[N%]=-1
   ENDIF
   IF( GameEnemyHP%[N%] <= 0 ) THEN
    GameEnemy%[N%]=-1
    BEEP 13,,gSEVolume%
    EftAppear GameEnemyX#[N%],GameEnemyY#[N%],GameEnemyZ#[N%]
    INC GameStageScore%,5
   ENDIF
  ENDIF
  'やっこさん
  IF( GameEnemy%[N%] == 2 ) THEN
   INC GameEnemyT%[N%]
   DEC GameEnemyZ#[N%],GamePlaneZV#
   'モード0
   IF(GameEnemyParm1#[N%]==0) THEN
    GameEnemyParm1#[N%]=2+RND(3)
    GameEnemyT%[N%]=0
   ENDIF
   'モード2 12へのよびどうさ
   IF(GameEnemyParm1#[N%]==2) THEN
    F%=1
    IF( GameEnemyX#[N%] < 80 ) THEN
     INC GameEnemyX#[N%],5
     F%=0
    ENDIF
    IF( GameEnemyX#[N%] > 90 ) THEN
     INC GameEnemyX#[N%],-5
     F%=0
    ENDIF
    IF(F%) THEN
     GameEnemyParm1#[N%]=12
     GameEnemyT%[N%]=0
    ENDIF
   ENDIF
   'モード12
   IF(GameEnemyParm1#[N%]==12) THEN
    INC GameEnemyX#[N%],-2
    IF( (GameEnemyT%[N%] MOD 5)==0 )THEN
     A%=EnemyAppear(8,GameEnemyX#[N%],GameEnemyY#[N%],GameEnemyZ#[N%])
    ENDIF
    IF( (GameEnemyT%[N%] MOD 11)==0 )THEN
     BEEP 111,,gSEVolume%
     A%=EnemyAppear(3,GameEnemyX#[N%],GameEnemyY#[N%],GameEnemyZ#[N%])
    ENDIF
    IF(GameEnemyT%[N%]>90) THEN
     GameEnemyParm1#[N%]=0
     GameEnemyT%[N%]=0
    ENDIF
   ENDIF
   
   'モード3 13へのよびどうさ
   IF(GameEnemyParm1#[N%]==3) THEN
    F%=1
    IF( GameEnemyX#[N%] < -90 ) THEN
     INC GameEnemyX#[N%],5
     F%=0
    ENDIF
    IF( GameEnemyX#[N%] > -80 ) THEN
     INC GameEnemyX#[N%],-5
     F%=0
    ENDIF
    IF(F%) THEN
     GameEnemyParm1#[N%]=13
     GameEnemyT%[N%]=0
    ENDIF
   ENDIF
   'モード13
   IF(GameEnemyParm1#[N%]==13) THEN
    INC GameEnemyX#[N%], 2
    IF( (GameEnemyT%[N%] MOD 5)==0 )THEN
     A%=EnemyAppear(8,GameEnemyX#[N%],GameEnemyY#[N%],GameEnemyZ#[N%])
    ENDIF
    IF( (GameEnemyT%[N%] MOD 11)==0 )THEN
     BEEP 111,,gSEVolume%
     A%=EnemyAppear(3,GameEnemyX#[N%],GameEnemyY#[N%],GameEnemyZ#[N%])
    ENDIF
    IF(GameEnemyT%[N%]>90) THEN
     GameEnemyParm1#[N%]=0
     GameEnemyT%[N%]=0
    ENDIF
   ENDIF
   'モード4 14へのよびどうさ
   IF(GameEnemyParm1#[N%]==4) THEN
    F%=1
    IF( GameEnemyX#[N%] < -3 ) THEN
     INC GameEnemyX#[N%],5
     F%=0
    ENDIF
    IF( GameEnemyX#[N%] >  3 ) THEN
     INC GameEnemyX#[N%],-5
     F%=0
    ENDIF
    IF( GameEnemyY#[N%] < -3 ) THEN
     INC GameEnemyY#[N%],5
     F%=0
    ENDIF
    IF( GameEnemyY#[N%] >  3 ) THEN
     INC GameEnemyY#[N%],-5
     F%=0
    ENDIF
    IF(F%) THEN
     GameEnemyParm1#[N%]=14
     GameEnemyT%[N%]=0
     BEEP 118,,gSEVolume%
    ENDIF
   ENDIF
   'モード14
   IF(GameEnemyParm1#[N%]==14) THEN
    IF(GameEnemyT%[N%]>60) THEN
     DX#=RND(400)/100
     IF( GameEnemyX#[N%] < -100) THEN
      GameEnemyParm2#[N%]=DX#
     ELSE 
      GameEnemyParm2#[N%]=-DX#
     ENDIF
     DY#=RND(400)/100
     IF( GameEnemyY#[N%] < -50) THEN
      GameEnemyParm3#[N%]=DY#
     ELSE 
      GameEnemyParm3#[N%]=-DY#
     ENDIF
     GameEnemyParm1#[N%]=24
     GameEnemyT%[N%]=0
    ENDIF
   ENDIF
   'モード24
   IF(GameEnemyParm1#[N%]==24) THEN
    IF( (GameEnemyT%[N%] MOD 15)==0 )THEN
     BEEP 111,,gSEVolume%
     DX#=GameEnemyX#[N%]
     DY#=GameEnemyY#[N%]
     DZ#=GameEnemyZ#[N%]
     A%=EnemyAppear(3,DX#,DY#,DZ#)
     A%=EnemyAppear(3,DX#,DY#,DZ#)
     IF(A%>0) THEN
      INC GameEnemyParm1#[A%],5
     ENDIF
     A%=EnemyAppear(3,DX#,DY#,DZ#)
     IF(A%>0) THEN
      INC GameEnemyParm1#[A%],3.5
      INC GameEnemyParm2#[A%],3.5
     ENDIF
     A%=EnemyAppear(3,DX#,DY#,DZ#)
     IF(A%>0) THEN
      INC GameEnemyParm2#[A%],5
     ENDIF
     A%=EnemyAppear(3,DX#,DY#,DZ#)
     IF(A%>0) THEN
      INC GameEnemyParm1#[A%],-3.5
      INC GameEnemyParm2#[A%],3.5
     ENDIF
     A%=EnemyAppear(3,DX#,DY#,DZ#)
     IF(A%>0) THEN
      INC GameEnemyParm1#[A%],-5
     ENDIF
     A%=EnemyAppear(3,DX#,DY#,DZ#)
     IF(A%>0) THEN
      INC GameEnemyParm1#[A%],-3.5
      INC GameEnemyParm2#[A%],-3.5
     ENDIF
     A%=EnemyAppear(3,DX#,DY#,DZ#)
     IF(A%>0) THEN
      INC GameEnemyParm2#[A%],-5
     ENDIF
     A%=EnemyAppear(3,DX#,DY#,DZ#)
     IF(A%>0) THEN
      INC GameEnemyParm1#[A%], 3.5
      INC GameEnemyParm2#[A%],-3.5
     ENDIF
     DX#=RND(400)/100
     IF( GameEnemyX#[N%] < -100) THEN
      GameEnemyParm2#[N%]=DX#
     ELSE 
      GameEnemyParm2#[N%]=-DX#
     ENDIF
     DY#=RND(400)/100
     IF( GameEnemyY#[N%] < -50) THEN
      GameEnemyParm3#[N%]=DY#
     ELSE 
      GameEnemyParm3#[N%]=-DY#
     ENDIF
    ENDIF
    INC GameEnemyX#[N%],GameEnemyParm2#[N%]
    INC GameEnemyY#[N%],GameEnemyParm3#[N%]
    
    IF(GameEnemyT%[N%]>90) THEN
     GameEnemyParm1#[N%]=0
     GameEnemyT%[N%]=0
    ENDIF
   ENDIF
   'モード1 やられ
   IF(GameEnemyParm1#[N%]==1) THEN
    IF((GameEnemyT%[N%] MOD 5)==1) THEN
     EftAppear GameEnemyX#[N%]+RND(40)-20,GameEnemyY#[N%]+RND(40)-20,GameEnemyZ#[N%]+RND(40)-20
    ENDIF
    IF(GameEnemyT%[N%]>60) THEN
     BEEP 13,,gSEVolume%
     GameEnemy%[N%]=-1
     EftAppear GameEnemyX#[N%],GameEnemyY#[N%],GameEnemyZ#[N%]
     INC GameStageScore%,100
    ENDIF
   ENDIF
   'きえるしょり
   IF( GameEnemyZ#[N%] < 0 ) THEN
    GameEnemy%[N%]=-1
   ENDIF
   IF((GameEnemyHP%[N%]<=0)AND(GameEnemyParm1#[N%]!=1)) THEN
    GameEnemyParm1#[N%]=1
    GameEnemyT%[N%]=0
   ENDIF
  ENDIF
  'てきの うつ たま
  IF( GameEnemy%[N%] == 3 ) THEN
   INC GameEnemyT%[N%]
   INC GameEnemyX#[N%],GameEnemyParm1#[N%]
   INC GameEnemyY#[N%],GameEnemyParm2#[N%]
   INC GameEnemyZ#[N%],GameEnemyParm3#[N%]
   IF( GameEnemyT%[N%]> 30 ) THEN
    GameEnemy%[N%]=-1
   ENDIF
   IF( GameEnemyHP%[N%] <= 0 ) THEN
    GameEnemy%[N%]=-1
   ENDIF
  ENDIF
   'ロボ
  IF( GameEnemy%[N%] == 4 ) THEN
   INC GameEnemyT%[N%]
   DEC GameEnemyZ#[N%],GamePlaneZV#
   'モード0
   IF(GameEnemyParm3#[N%]==0) THEN
    GameEnemyParm3#[N%]=2+RND(3)
    GameEnemyT%[N%]=0
   ENDIF
   'モード2
   IF(GameEnemyParm3#[N%]==2) THEN
    IF(GameEnemyT%[N%]==8) THEN
     BEEP 121,,gSEVolume%
    ENDIF
    IF(GameEnemyT%[N%]>60) THEN
     GameEnemyParm3#[N%]=12
     GameEnemyT%[N%]=0
    ENDIF
   ENDIF
   IF(GameEnemyParm3#[N%]==12) THEN
    IF(GameEnemyT%[N%]<27) THEN
     INC GameEnemyZ#[N%],-10
    ENDIF
    IF(GameEnemyT%[N%]==20) THEN
     BEEP 124,,gSEVolume%
    ENDIF
    IF(GameEnemyT%[N%]>=43) THEN
     INC GameEnemyZ#[N%],10
    ENDIF
    IF(GameEnemyT%[N%]>70) THEN
     GameEnemyZ#[N%]=380
     GameEnemyParm3#[N%]=3+RND(2)
     GameEnemyT%[N%]=0
    ENDIF
   ENDIF
   'モード3
   IF(GameEnemyParm3#[N%]==3) THEN
    IF(GameEnemyT%[N%]>20) THEN
     IF((GameEnemyT%[N%] MOD 8)==0) THEN
      BEEP 111,,gSEVolume%
      DX#=GameEnemyX#[N%]
      DY#=GameEnemyY#[N%]+60
      DZ#=GameEnemyZ#[N%]-80
      A%=EnemyAppear(3,DX#,DY#,DZ#)
      A%=EnemyAppear(3,DX#,DY#,DZ#)
      IF(A%>0) THEN
       INC GameEnemyParm1#[A%],(RND(20)-10)
       INC GameEnemyParm2#[A%],(RND(20)-10)
      ENDIF
      A%=EnemyAppear(3,DX#,DY#,DZ#)
      IF(A%>0) THEN
       INC GameEnemyParm1#[A%],(RND(20)-10)
       INC GameEnemyParm2#[A%],(RND(20)-10)
      ENDIF
     ENDIF
    ENDIF
    IF(GameEnemyT%[N%]>180) THEN
     GameEnemyZ#[N%]=380
     IF(RND(3))THEN
      GameEnemyParm3#[N%]=4
     ELSE
      GameEnemyParm3#[N%]=2
     ENDIF
     GameEnemyT%[N%]=0
    ENDIF
   ENDIF
   'モード4
   IF(GameEnemyParm3#[N%]==4) THEN
    IF(GameEnemyT%[N%]>20) THEN
     IF((GameEnemyT%[N%] MOD 4)==0) THEN
      BEEP 111,,gSEVolume%
      DX#=GameEnemyX#[N%]
      DY#=GameEnemyY#[N%]+60
      DZ#=GameEnemyZ#[N%]-80
      A%=EnemyAppear(3,DX#,DY#,DZ#)
     ENDIF
    ENDIF
    IF(GameEnemyT%[N%]>180) THEN
     GameEnemyZ#[N%]=380
     IF(RND(3))THEN
      GameEnemyParm3#[N%]=3
     ELSE
      GameEnemyParm3#[N%]=2
     ENDIF
     GameEnemyT%[N%]=0
    ENDIF
   ENDIF
   E1%=GameEnemyParm1#[N%]
   E2%=GameEnemyParm2#[N%]
   IF( 0 <= E1% )THEN
    IF(GameEnemy%[GameEnemyParm1#[N%]]<0)THEN
     GameEnemyParm1#[N%]=-1
    ELSE
     GameEnemyZ#[E1%]=GameEnemyZ#[N%]-120
    ENDIF
   ENDIF
   IF( 0 <= E2% )THEN
    IF(GameEnemy%[GameEnemyParm2#[N%]]<0)THEN
     GameEnemyParm2#[N%]=-1
    ELSE
     GameEnemyZ#[E2%]=GameEnemyZ#[N%]-120
    ENDIF
   ENDIF
   E1%=GameEnemyParm1#[N%]
   E2%=GameEnemyParm2#[N%]
   'きえるしょり
   IF((E1%<0)AND(E2%<0)AND(GameEnemyParm3#[N%]!=1)) THEN
    GameEnemyHP%[N%]=0
    GameEnemyParm3#[N%]=1
    GameEnemyT%[N%]=0
    INC GameStageScore%,200
   ENDIF
   IF(GameEnemyParm3#[N%]==1) THEN
    INC GameEnemyY#[N%],2
    EftAppear GameEnemyX#[N%]+RND(200)-100,GameEnemyY#[N%]+RND(200)-100,GameEnemyZ#[N%]+RND(200)-100
    IF( (GameEnemyT%[N%] MOD 12)==0)THEN
     BEEP 13,,gSEVolume%
    ENDIF
    IF( GameEnemyT%[N%]>90)THEN
     GameEnemy%[N%]=-1
     EftAppear GameEnemyX#[N%]+RND(200)-100,GameEnemyY#[N%]+RND(200)-100,GameEnemyZ#[N%]+RND(200)-100
     EftAppear GameEnemyX#[N%]+RND(200)-100,GameEnemyY#[N%]+RND(200)-100,GameEnemyZ#[N%]+RND(200)-100
     EftAppear GameEnemyX#[N%]+RND(200)-100,GameEnemyY#[N%]+RND(200)-100,GameEnemyZ#[N%]+RND(200)-100
     EftAppear GameEnemyX#[N%]+RND(200)-100,GameEnemyY#[N%]+RND(200)-100,GameEnemyZ#[N%]+RND(200)-100
     EftAppear GameEnemyX#[N%]+RND(200)-100,GameEnemyY#[N%]+RND(200)-100,GameEnemyZ#[N%]+RND(200)-100
     BEEP 108,,gSEVolume%
    ENDIF
   ENDIF
  ENDIF
  'かいふく
  IF( GameEnemy%[N%] == 5 ) THEN
   INC GameEnemyT%[N%]
   DEC GameEnemyZ#[N%],GamePlaneZV#
   IF( GameEnemyZ#[N%] < 0 ) THEN
    GameEnemy%[N%]=-1
   ENDIF
  ENDIF
  'め
  IF( GameEnemy%[N%] == 6 ) THEN
   INC GameEnemyT%[N%]
   DEC GameEnemyZ#[N%],GamePlaneZV#
   IF( GameEnemyHP%[N%] <= 0 ) THEN
    GameEnemy%[N%]=-1
   ENDIF
  ENDIF
  'とり
  IF( GameEnemy%[N%] == 7 ) THEN
   INC GameEnemyT%[N%]
   T%=GameEnemyT%[N%]
   DEC GameEnemyZ#[N%],GamePlaneZV#
   'パターン1 しんりゃく
   IF(GameEnemyParm1#[N%]==1) THEN
    A% = FLOOR(T%/5) MOD 20
    IF(          (A%< 8)) THEN
     INC GameEnemyX#[N%],-3.0
     INC GameEnemyZ#[N%], 2.0
    ENDIF
    IF(( 8<=A%)AND(A%<10)) THEN
    ENDIF
    IF((10<=A%)AND(A%<18)) THEN
     INC GameEnemyX#[N%], 3.0
     INC GameEnemyZ#[N%], 2.0
    ENDIF
    IF((18<=A%)AND(A%<20)) THEN
    ENDIF
   ENDIF
   'パターン2 いったんとまる
   IF(GameEnemyParm1#[N%]==2) THEN
    IF((70<=T%)AND(T%<190)) THEN
     INC GameEnemyZ#[N%], 2.0
     IF( (T%==110)OR(T%==150) )THEN
      A%=EnemyAppear(3,GameEnemyX#[N%],GameEnemyY#[N%],GameEnemyZ#[N%]+5)
     ENDIF
    ENDIF
   ENDIF
   'パターン3 よこ1
   IF(GameEnemyParm1#[N%]==3) THEN
    IF((10<=T%)AND(T%<30)) THEN
     INC GameEnemyX#[N%], 4.0
     INC GameEnemyZ#[N%],-3.0
    ENDIF
   ENDIF
   'パターン4 よこ2
   IF(GameEnemyParm1#[N%]==4) THEN
    IF((20<=T%)AND(T%<40)) THEN
     INC GameEnemyX#[N%],-4.0
     INC GameEnemyZ#[N%],-3.0
    ENDIF
   ENDIF
   'パターン5 よこなみ
   IF(GameEnemyParm1#[N%]==5) THEN
     INC GameEnemyX#[N%],4.0*(COS(FLOOR(T%)/9))
   ENDIF
   'パターン6 たてなみ
   IF(GameEnemyParm1#[N%]==6) THEN
     INC GameEnemyY#[N%],4.0*(COS(FLOOR(T%)/9))
   ENDIF
   'パターン7 ぐるぐる
   IF(GameEnemyParm1#[N%]==7) THEN
     INC GameEnemyX#[N%],4.0*(COS(FLOOR(T%)/9))
     INC GameEnemyY#[N%],4.0*(SIN(FLOOR(T%)/9))
   ENDIF
   'パターン8 ぐるぐる2
   IF(GameEnemyParm1#[N%]==8) THEN
     INC GameEnemyX#[N%],4.0*(-COS(FLOOR(T%)/9))
     INC GameEnemyY#[N%],4.0*(SIN(FLOOR(T%)/9))
   ENDIF
   'パターン9 たて1
   IF(GameEnemyParm1#[N%]==9) THEN
    IF((10<=T%)AND(T%<30)) THEN
     INC GameEnemyY#[N%], 4.0
     INC GameEnemyZ#[N%],-3.0
    ENDIF
   ENDIF
   'パターン10 たて2
   IF(GameEnemyParm1#[N%]==10) THEN
    IF((20<=T%)AND(T%<40)) THEN
     INC GameEnemyY#[N%],-4.0
     INC GameEnemyZ#[N%],-3.0
    ENDIF
   ENDIF
   IF(GameEnemyZ#[N%]>80) THEN
    'こうげきパターン1
    IF(GameEnemyParm2#[N%]==1) THEN
     IF((T% MOD 13)==0)THEN
      A%=EnemyAppear(3,GameEnemyX#[N%],GameEnemyY#[N%],GameEnemyZ#[N%]+5)
     ENDIF
    ENDIF
   'こうげきパターン2
    IF(GameEnemyParm2#[N%]==2) THEN
     IF((T% MOD 23)==0)THEN
      A%=EnemyAppear(3,GameEnemyX#[N%],GameEnemyY#[N%],GameEnemyZ#[N%]+5)
     ENDIF
    ENDIF
   'こうげきパターン3
    IF(GameEnemyParm2#[N%]==3) THEN
     IF((T% MOD 29)==0)THEN
      A%=EnemyAppear(3,GameEnemyX#[N%],GameEnemyY#[N%],GameEnemyZ#[N%]+5)
     ENDIF
    ENDIF
   'こうげきパターン4
    IF(GameEnemyParm2#[N%]==4) THEN
     IF((T% MOD 31)==0)THEN
      A%=EnemyAppear(3,GameEnemyX#[N%],GameEnemyY#[N%],GameEnemyZ#[N%]+5)
     ENDIF
    ENDIF
   'こうげきパターン5
    IF(GameEnemyParm2#[N%]==5) THEN
     IF((T% MOD 37)==0)THEN
      A%=EnemyAppear(3,GameEnemyX#[N%],GameEnemyY#[N%],GameEnemyZ#[N%]+5)
     ENDIF
    ENDIF
   ENDIF
   'きえるしょり
   IF( GameEnemyZ#[N%] < -50 ) THEN
    GameEnemy%[N%]=-1
   ENDIF
   IF( GameEnemyHP%[N%] <= 0 ) THEN
    BEEP 13,,gSEVolume%
    GameEnemy%[N%]=-1
    EftAppear GameEnemyX#[N%],GameEnemyY#[N%],GameEnemyZ#[N%]
    INC GameStageScore%,2
   ENDIF
  ENDIF
 NEXT
 
END
'-------------------------
'-----------DRAW----------
'-------------------------
DIM GameStageTitle$[5]
'GameStageTitle$[0]="うちゅうへ とびだせ"
'GameStageTitle$[1]="ぼうそうぞくを たおせ"
'GameStageTitle$[2]="ハカセまで たどりつけ"
'GameStageTitle$[3]="ハカセを たおせ"
'GameStageTitle$[4]="てきを たおしまくれ"
'GameStageTitle$[0]="Escape from the Earth"
GameStageTitle$[0]="Flight to Space"
GameStageTitle$[1]="Defeat SpaceGang"
GameStageTitle$[2]="Go to SpaceStation"
GameStageTitle$[3]="Defeat Hakase"
GameStageTitle$[4]="Go to the Goal"
GameStageTitle$[4]="Defeat and Defeat!"

COMMON DEF SEQ_GAME_DRAW
 'DISPLAY 0 'PI:no dual screen
 GPAGE 0,GetDrawPage()
 IF( gStagE%==0 ) THEN
  IF(GameTime%<1800) THEN
   GCLS RGB(0,0,255-255*GameTime%/1800)
  ENDIF
 ENDIF
 DIM OX%=GamePlanePosX#/2
 DIM OY%=GamePlanePosY#/2
 DIM OZ%=240
 IF(GameCameraMode%==1) THEN
  OX%=GamePlanePosX#
  OY%=GamePlanePosY#
 ENDIF
 IF(GameCameraMode%==2) THEN
  OX%=0
  OY%=0
 ENDIF
 DIM RR% = GamePlaneR#*180/PI()
 DIM RP% = GamePlaneP#*180/PI()
 DIM RY% = GamePlaneY#*180/PI()
 DIM X%,Y%,Z%,N%,M%,R11%,R12%,R21%,R22%
 '-----ガイド-----
 GCOLOR RGB(255,255,255)
 FOR N%= -255 TO 255 STEP 50
  DrawP3D  200-OX%, 100-OY%,N%+GameGuideZ%
  DrawP3D -200-OX%, 100-OY%,N%+GameGuideZ%
  DrawP3D  200-OX%,-100-OY%,N%+GameGuideZ%
  DrawP3D -200-OX%,-100-OY%,N%+GameGuideZ%
 NEXT
 '-----テキをソートしておく-----
 DIM EnemySort%[GameEnemyMax%]
 DIM EnemySortZ#[GameEnemyMax%]
 DIM EnemyNum%=0
 FOR N%=0 TO GameEnemyMax%-1
  IF( GameEnemy%[N%] > 0) THEN
   EnemySort%[EnemyNum%] = N%
   EnemySortZ#[EnemyNum%] = GameEnemyZ#[N%] + GameEnemyColZ1#[ GameEnemy%[N%] ]
   INC EnemyNum%
  ENDIF
 NEXT
 IF(EnemyNum%) THEN RSORT 0,EnemyNum%,EnemySortZ#,EnemySort%
 '-----テキ-----
 FOR M%=0 TO EnemyNum%-1
  N% = EnemySort%[M%]
  'ミサイル
  IF( GameEnemy%[N%] == 1 ) THEN
   X% = GameEnemyX#[N%]-OX%
   Y% = GameEnemyY#[N%]-OY%
   Z% = GameEnemyZ#[N%]-OZ%
   DrawModelRotateNonSortZ 2,X%,Y%,Z%,5*GameEnemyT%[N%],0,0
  ENDIF
  'やっこさん
  IF( GameEnemy%[N%] == 2 ) THEN
   X% = GameEnemyX#[N%]-OX%
   Y% = GameEnemyY#[N%]-OY%
   Z% = GameEnemyZ#[N%]-OZ%
   DrawModelNonSortZ 3,X%,Y%,Z%
  ENDIF
  'てきの うつ たま
  IF( GameEnemy%[N%] == 3 ) THEN
   X% = GameEnemyX#[N%]-OX%
   Y% = GameEnemyY#[N%]-OY%
   Z% = GameEnemyZ#[N%]-OZ%
   GCOLOR RGB(255,255,0)
   DrawLine3D X%+8,Y%+8,Z%+8,X%-8,Y%-8,Z%-8
   DrawLine3D X%-8,Y%+8,Z%+8,X%+8,Y%-8,Z%-8
   DrawLine3D X%+8,Y%-8,Z%+8,X%-8,Y%+8,Z%-8
   DrawLine3D X%-8,Y%-8,Z%+8,X%+8,Y%+8,Z%-8
  ENDIF
  'ロボ
  IF( GameEnemy%[N%] == 4 ) THEN
   X% = GameEnemyX#[N%]-OX%
   Y% = GameEnemyY#[N%]-OY%
   Z% = GameEnemyZ#[N%]-OZ%
   DrawModel 4,X%,Y%,Z%
   DrawModelNonSortZ 5,X%,Y%,Z%
   DrawModelNonSortZ 6,X%,Y%,Z%
   DrawModelNonSortZ 7,X%,Y%+40,Z%
  ENDIF
  'かいふく
  IF( GameEnemy%[N%] == 5 ) THEN
   X% = GameEnemyX#[N%]-OX%
   Y% = GameEnemyY#[N%]-OY%
   Z% = GameEnemyZ#[N%]-OZ%
   GCOLOR RGB(255,255,0)
   DrawLine3D X%-50,Y%-50,Z%,X%-50,Y%+50,Z%
   DrawLine3D X%-50,Y%+50,Z%,X%+50,Y%+50,Z%
   DrawLine3D X%+50,Y%+50,Z%,X%+50,Y%-50,Z%
   DrawLine3D X%+50,Y%-50,Z%,X%-50,Y%-50,Z%
  ENDIF
  'め
  IF( GameEnemy%[N%] == 6 ) THEN
   X% = GameEnemyX#[N%]-OX%
   Y% = GameEnemyY#[N%]-OY%
   Z% = GameEnemyZ#[N%]-OZ%
   GCOLOR RGB(255,0,0)
   DrawLine3D X%-35,Y%-20,Z%,X%-35,Y%+20,Z%
   DrawLine3D X%-35,Y%+20,Z%,X%+35,Y%+20,Z%
   DrawLine3D X%+35,Y%+20,Z%,X%+35,Y%-20,Z%
   DrawLine3D X%+35,Y%-20,Z%,X%-35,Y%-20,Z%
  ENDIF
  'とり
  IF( GameEnemy%[N%] == 7 ) THEN
   X% = GameEnemyX#[N%]-OX%
   Y% = GameEnemyY#[N%]-OY%
   Z% = GameEnemyZ#[N%]-OZ%
   DrawModelNonSortZ 9,X%,Y%,Z%
  ENDIF
 NEXT
 '----EFT----
 GCOLOR RGB(255,255,0)
 FOR N%=0 TO 29
  IF( GameEft%[N%] >= 0 ) THEN
   X% = GameEftX#[N%]-OX%
   Y% = GameEftY#[N%]-OY%
   Z% = GameEftZ#[N%]-OZ%
   R11% = (10-GameEft%[N%])*5
   R12% = (11-GameEft%[N%])*5
   R21% = R11%*0.7
   R22% = R12%*0.7
   DrawLine3D X%+R11%,Y%,Z%,X%+R12%,Y%,Z%
   DrawLine3D X%-R11%,Y%,Z%,X%-R12%,Y%,Z%
   DrawLine3D X%,Y%+R11%,Z%,X%,Y%+R12%,Z%
   DrawLine3D X%,Y%-R11%,Z%,X%,Y%-R12%,Z%
   DrawLine3D X%+R21%,Y%+R21%,Z%,X%+R22%,Y%+R22%,Z%
   DrawLine3D X%-R21%,Y%+R21%,Z%,X%-R22%,Y%+R22%,Z%
   DrawLine3D X%+R21%,Y%-R21%,Z%,X%+R22%,Y%-R22%,Z%
   DrawLine3D X%-R21%,Y%-R21%,Z%,X%-R22%,Y%-R22%,Z%
  ENDIF
 NEXT 
 '-----ビーム-----
 GCOLOR RGB(255,255,0)
 FOR N%=0 TO GameBeamMax%-1
  IF( GameBeam%[N%]>=0 ) THEN
   X%=GameBeamX#[N%]-OX%
   Y%=GameBeamY#[N%]-OY%
   Z%=GameBeam%[N%]-OZ%
   DrawLine3D X%,Y%,Z%,X%+5,Y%  ,Z%-50
   DrawLine3D X%,Y%,Z%,X%  ,Y%  ,Z%-50
   DrawLine3D X%,Y%,Z%,X%+5,Y%+5,Z%-50
   DrawLine3D X%,Y%,Z%,X%  ,Y%+5,Z%-50
  ENDIF
 NEXT
 '-----ジキ-----
 IF(GameOverFrag%==0) THEN
  DrawModelRotate gMyPlaneModel%,GamePlanePosX#-OX%,GamePlanePosY#-OY%,GamePlanePosZ#-OZ%,RR%,RP%,RY%
 ENDIF
 '----インフォ----
 '--スコア--
 DIM ScoreTEXT$=FORMAT$("%03D",GameStageScore%)
 C2MES ScoreTEXT$,3,2
 '--HP--- PI: the original drew the gauge with large GREEN custom-font (BFONT) tiles;
 'the port lost that font (C2MES is plain white console text), so draw the HP gauge as
 'a green graphics bar on GRP0 (the front HUD layer, GPRIO -1).
 GPAGE 0,0
 DIM HPX%=48,HPY%=16,HPBW%=gMyPlaneHPMax%*16,HPBH%=14
 GFILL HPX%,HPY%,HPX%+HPBW%,HPY%+HPBH%,RGB(28,28,28) 'empty gauge
 DIM HPFW%=HPBW%*MAX(GamePlaneHP%,0)/gMyPlaneHPMax%
 IF(HPFW%>0) THEN GFILL HPX%,HPY%,HPX%+HPFW%,HPY%+HPBH%,RGB(0,224,64) 'green fill
 GLINE HPX%,HPY%       ,HPX%+HPBW%,HPY%       ,RGB(0,120,32)
 GLINE HPX%,HPY%+HPBH% ,HPX%+HPBW%,HPY%+HPBH% ,RGB(0,120,32)
 GLINE HPX%,HPY%       ,HPX%      ,HPY%+HPBH% ,RGB(0,120,32)
 GLINE HPX%+HPBW%,HPY% ,HPX%+HPBW%,HPY%+HPBH% ,RGB(0,120,32)
 IF(GamePauseFrag%) THEN
  C2MES "PAUSE",10,5
  C2MES "",           8, 7+GamePauseMenu%
  C2MES "Continue",    9, 7
  C2MES "Restart",     9, 8
  C2MES "Quit",        9, 9
 ELSE
  IF(GameTime%<120) THEN
   IF(gStage%==4) THEN
    C2MES "SPECIAL MISSION",3,6
   ELSEIF(gStage%==3) THEN
    C2MES "FINAL MISSION",3,6
   ELSE
    C2MES FORMAT$("MISSION %D",gStage%+1),3,6
   ENDIF
   C2MES GameStageTitle$[gStage%],3,7
  ENDIF
 ENDIF
 
 IF(GameClearFrag%) THEN
  IF( GameClearFrag%>15 ) THEN
   C2MES "MISSION",8,5
   C2MES "COMPLETE",8,6
  ENDIF
 ENDIF
END

