'===========================================================================
' Subject: SOLAR STRIKE V1.0                  Date: 06-01-99 (09:35)       
'  Author: Paul Crosland                      Code: QB, QBasic, PDS        
'  Origin: xflare@hotmail.com               Packet: GAMES.ABC
'===========================================================================
'Solar Strike V1.0
'Copyright (c) 1998 XFlareSoft
'This game was designed and programmed by Paul Crosland

DECLARE SUB DELAY ()
DECLARE SUB BOSSLASER ()
DECLARE SUB DRAWFLAME ()
DECLARE SUB ENEMYSHOT ()
DECLARE SUB FIRELASER ()
DECLARE SUB HITESHIP ()
DECLARE SUB HITPSHIP ()
DECLARE SUB INTRO ()
DECLARE SUB NPMOVEMENT ()
DECLARE SUB PODEFFECTS ()
DECLARE SUB ACTENEMY ()
DECLARE SUB ACTPOD ()
DECLARE SUB BEGINPLAY ()
DECLARE SUB BOSSLASER ()
DECLARE SUB BOSSPWR ()
DECLARE SUB CLEARKEYS ()
DECLARE SUB DRAWFLAME ()
DECLARE SUB ENDGAME ()
DECLARE SUB ENEMYSHOT ()
DECLARE SUB FIRELASER ()
DECLARE SUB GAMESET ()
DECLARE SUB HITESHIP ()
DECLARE SUB HITPSHIP ()
DECLARE SUB INTRO ()
DECLARE SUB LEVELSET ()
DECLARE SUB MASKFONT ()
DECLARE SUB NPMOVEMENT ()
DECLARE SUB PLACEOBJECTS ()
DECLARE SUB PLAYCHANGES ()
DECLARE SUB PLAYERCOMMAND ()
DECLARE SUB PODEFFECTS ()
DECLARE SUB SCORE ()
DECLARE SUB STARS ()
DECLARE SUB STARTLEVEL ()
DECLARE SUB STATISTICS ()
DECLARE SUB SOUNDEFFECTS ()
DECLARE SUB TITLESCREEN ()
DECLARE SUB VICTORY ()

DEFINT A-Z

DIM SHARED pship(500), mpship(500), warship(800), mwarship(800), eship(500)
DIM SHARED meship(500), flare(400), mflare(400)
DIM SHARED lifepod(50), pointpod(50), nukepod(50), sppod(50), weaponpod(50)
DIM SHARED fieldpod(50), mpod(50), podtype$(5), xpodmove(5), ypodmove(5)
DIM SHARED tpod(5), bkpod(5), fpod(5), bpod(5)
DIM SHARED marrow(50), arrow(50), xlv(5), ylv(5)
DIM SHARED xstar(50), ystar(50), starsp(50), starlook(50)
DIM SHARED xeshot(300), yeshot(300), efiring$(300), teshot(300)
DIM SHARED bkeshot(300), feshot(300), beshot(300), yeshotmove(300)
DIM SHARED xbfire(7), ybfire(7), bkblw(7), fblw(7)
DIM SHARED blwstatus$(7), firing$(10), firestart$(10), xfire(10), yfire(10)
DIM SHARED fshot(10), bkshot(10), tshot(10), bshot(10)
DIM SHARED yeplmove(300), xeplmove(300), eshipstatus$(300), teship(300)
DIM SHARED beship(300), feship(300), bkeship(300), etime(300)
DIM SHARED xflaremove(200), ftime(200), yflaremove(200), flarestatus$(200)
DIM SHARED fflare(200), tflare(200), bkflare(200), bflare(200)
DIM SHARED xstflaremove(200), fdir(200)
DIM SHARED xtline1(138), xtline2(138), ytline1(138), ytline2(138)
DIM SHARED xmline1(41), ymline1(41), xmline2(41), ymline2(41)
DIM SHARED sdigit(6), hsdigit(6), shipdigit(2)
DIM SHARED lC(50), lE(50), lH(50), lI(50), lO(50), lP(50), lR(50), lS(50)
DIM SHARED lX(50), mlC(50), mlE(50), mlH(50), mlI(50), mlO(50), mlP(50)
DIM SHARED mlR(50), mlS(50), mlX(50)
DIM SHARED n1(50), n2(50), n3(50), n4(50), n5(50), n6(50), n7(50), n8(50)
DIM SHARED n9(50), n0(50), mn1(50), mn2(50), mn3(50), mn4(50), mn5(50)
DIM SHARED mn6(50), mn7(50), mn8(50), mn9(50), mn0(50)

COMMON SHARED xpplmove, ypplmove, bkpwing, bpwing, tpwing
COMMON SHARED fpwing, bphead, fphead, tphead, bkphead
COMMON SHARED plstat$, pshipsp
COMMON SHARED shotnum, lasertype$, fieldstatus, fieldenergy, fieldtime#
COMMON SHARED firedelay, losedelay, infodelay, time, gamestatus$
COMMON SHARED levnum, wintime, starttime, showmission$
COMMON SHARED tflame#, bflame#, starplacement$, startype$
COMMON SHARED escr1, escr2, maxenum, minenum, enumtotal1, enumtotal2
COMMON SHARED enumtotal3, enum, ehit$
COMMON SHARED fscr1, fscr2, maxfnum, minfnum, flnumtotal1, flnumtotal2
COMMON SHARED flnumtotal3, fboss, bkboss, tboss, bboss, bfiring$
COMMON SHARED bfirestart$, bossenergy, bosshit$, bossstatus$, xbossmove
COMMON SHARED ybossmove, clearallkeys$, select1$, snumtotal, pnumtotal
COMMON SHARED effect$, gamesound$, code$, special$, c1, c2, dif$, exsp
COMMON SHARED startime, stardir, lcolor, pcolor

RANDOMIZE TIMER
SCREEN 7, 0, 2, 0: CLS : COLOR 15, 0
enumtotal1 = 98: enumtotal2 = 235: enumtotal3 = 271
flnumtotal1 = 40: flnumtotal2 = 158: flnumtotal3 = 196
snumtotal = 10: pnumtotal = 5
FOR find = 1 TO 180
   READ X, y
   PSET (X, y), 13
NEXT find
PAINT (1, 20), 5, 13
FOR find = 1 TO 37
   READ X, y
   PSET (X, y), 13
NEXT find
FOR find = 1 TO 11
   READ X1, Y1, X2, Y2
   LINE (X1, Y1)-(X2, Y2), 13
NEXT find
FOR find = 1 TO 8
   READ X1, Y1, X2, Y2
   LINE (X1, Y1)-(X2, Y2), 15
NEXT find
GET (0, 0)-(31, 40), warship: CLS
FOR find = 1 TO 84
   READ X, y
   PSET (X, y), 15
NEXT find
FOR find = 1 TO 21
   READ X1, Y1, X2, Y2
   LINE (X1, Y1)-(X2, Y2), 15
NEXT find
GET (0, 0)-(31, 40), mwarship: CLS
FOR find = 1 TO 22
   READ X, y
   PSET (X, y), 8
NEXT find
PAINT (1, 1), 7, 8
FOR find = 1 TO 3
   READ X, y
   PSET (X, y), 15
NEXT find
GET (0, 0)-(7, 7), arrow: CLS
FOR find = 1 TO 18
   READ X, y
   PSET (X, y), 15
NEXT find
GET (0, 0)-(7, 7), marrow: CLS
FOR find = 1 TO 78
   READ X, y
   PSET (X, y), 8
NEXT find
PAINT (2, 1), 7, 8
PAINT (3, 6), 7, 8
PAINT (11, 6), 7, 8
FOR find = 1 TO 30
   READ X, y
   PSET (X, y), 15
NEXT find
GET (0, 0)-(19, 14), pship: CLS
FOR find = 1 TO 109
   READ X, y
   PSET (X, y), 15
NEXT find
GET (0, 0)-(19, 14), mpship: CLS
FOR find = 1 TO 58
   READ X, y
   PSET (X, y), 8
NEXT find
PAINT (2, 1), 7, 8
FOR find = 1 TO 10
   READ X, y
   PSET (X, y), 15
NEXT find
GET (0, 0)-(9, 14), eship: CLS
FOR find = 1 TO 44
   READ X, y
   PSET (X, y), 15
NEXT find
GET (0, 0)-(9, 14), meship: CLS
FOR find = 1 TO 56
   READ X, y
   PSET (X, y), 14
NEXT find
PAINT (1, 2), 15, 14
GET (0, 0)-(9, 19), flare: CLS
FOR find = 1 TO 58
   READ X, y
   PSET (X, y), 15
NEXT find
GET (0, 0)-(9, 19), mflare: CLS
FOR find = 1 TO 24
   READ X, y
   PSET (X, y), 5
NEXT find
FOR find = 1 TO 28
   READ X, y
   PSET (X, y), 13
NEXT find
FOR find = 1 TO 16
   READ X, y
   PSET (X, y), 5
NEXT find
GET (0, 0)-(9, 9), lifepod: CLS
FOR find = 1 TO 24
   READ X, y
   PSET (X, y), 5
NEXT find
FOR find = 1 TO 24
   READ X, y
   PSET (X, y), 13
NEXT find
FOR find = 1 TO 20
   READ X, y
   PSET (X, y), 5
NEXT find
GET (0, 0)-(9, 9), pointpod: CLS
FOR find = 1 TO 24
   READ X, y
   PSET (X, y), 5
NEXT find
FOR find = 1 TO 24
   READ X, y
   PSET (X, y), 13
NEXT find
FOR find = 1 TO 20
   READ X, y
   PSET (X, y), 5
NEXT find
GET (0, 0)-(9, 9), nukepod: CLS
FOR find = 1 TO 24
   READ X, y
   PSET (X, y), 5
NEXT find
FOR find = 1 TO 27
   READ X, y
   PSET (X, y), 13
NEXT find
FOR find = 1 TO 17
   READ X, y
   PSET (X, y), 5
NEXT find
GET (0, 0)-(9, 9), sppod: CLS
FOR find = 1 TO 24
   READ X, y
   PSET (X, y), 5
NEXT find
FOR find = 1 TO 28
   READ X, y
   PSET (X, y), 13
NEXT find
FOR find = 1 TO 16
   READ X, y
   PSET (X, y), 5
NEXT find
GET (0, 0)-(9, 9), weaponpod: CLS
FOR find = 1 TO 24
   READ X, y
   PSET (X, y), 5
NEXT find
FOR find = 1 TO 28
   READ X, y
   PSET (X, y), 13
NEXT find
FOR find = 1 TO 16
   READ X, y
   PSET (X, y), 5
NEXT find
GET (0, 0)-(9, 9), fieldpod: CLS
FOR find = 1 TO 32
   READ X, y
   PSET (X, y), 15
NEXT find
GET (0, 0)-(9, 9), mpod: CLS
FOR enum = 1 TO enumtotal3
   READ etime, yeplmove
   etime(enum) = etime
   yeplmove(enum) = yeplmove
NEXT enum
FOR flnum = 1 TO flnumtotal1
   READ ftime, xstflaremove
   ftime(flnum) = ftime
   xstflaremove(flnum) = xstflaremove
   fdir(flnum) = -5
NEXT flnum
FOR flnum = flnumtotal1 + 1 TO flnumtotal3
   READ ftime, xstflaremove, fdir
   ftime(flnum) = ftime
   xstflaremove(flnum) = xstflaremove
   fdir(flnum) = fdir
NEXT flnum
FOR find = 1 TO 138
   READ X1, Y1, X2, Y2
   xtline1(find) = X1
   ytline1(find) = Y1
   xtline2(find) = X2
   ytline2(find) = Y2
NEXT find
FOR lnum = 1 TO 41
   READ X1, Y1, X2, Y2
   xmline1(lnum) = X1: xmline2(lnum) = X2
   ymline1(lnum) = Y1: ymline2(lnum) = Y2
NEXT lnum

CALL MASKFONT
gamestatus$ = "noplay"
gamesound$ = "active"
startime = 0: stardir = 1
FOR num = 1 TO 6
   hsdigit(num) = 0
NEXT num
DO
   WHILE gamestatus$ <> "startplay"
      IF gamestatus$ = "noplay" THEN CALL TITLESCREEN: CALL GAMESET
      IF gamestatus$ = "intro" THEN CALL INTRO
      IF gamestatus$ = "exit" THEN SCREEN 7, 0, 0, 0: CLS : END
   WEND
   CALL LEVELSET: CALL STARTLEVEL
   DO
      time1# = TIMER
      SCREEN 7, 0, 1, 0: CLS
      CALL CLEARKEYS: CALL STARS
      IF gamestatus$ = "play" THEN
         CALL ACTENEMY: CALL NPMOVEMENT
         IF plstat$ = "active" THEN
            CALL PLAYERCOMMAND
            bpwing = ypplmove + 14
            fpwing = xpplmove + 14
            tpwing = ypplmove
            bkpwing = xpplmove
            fphead = xpplmove + 19
            bkphead = xpplmove + 15
            bphead = ypplmove + 9
            tphead = ypplmove + 5
            CALL HITPSHIP
            CALL PODEFFECTS
         END IF
         CALL FIRELASER
         IF bossstatus$ <> "nonactive" THEN CALL BOSSLASER
         ehit$ = "sunflare": CALL HITESHIP: CALL ENEMYSHOT
         CALL PLACEOBJECTS
         IF plstat$ = "destroyed" THEN losedelay = losedelay + 1
         IF firedelay < 4 AND firedelay > 0 THEN
            firedelay = firedelay + 1
         ELSEIF firedelay = 4 THEN
            firedelay = 0
         END IF
         CALL PLAYCHANGES
         time = time + 1
         IF bosshit$ = "yes" THEN bosshit$ = "no"
      ELSEIF gamestatus$ = "startplay" AND select1$ = CHR$(32) THEN
         gamestatus$ = "play"
      ELSEIF gamestatus$ = "startplay" THEN
         CALL BEGINPLAY
      END IF
      CALL DRAWFLAME: CALL STATISTICS
      IF bossstatus$ = "active1" OR bossstatus$ = "active2" THEN CALL BOSSPWR
      PCOPY 1, 0
      IF losedelay = 25 OR gamestatus$ = "leveldone" THEN EXIT DO
      IF gamestatus$ = "noplay" THEN EXIT DO
      DO: LOOP UNTIL TIMER - time1# > .02
   LOOP
   IF startype$ = "nomove" THEN startype$ = "normal"
   IF plstat$ = "destroyed" THEN
      shipdigit(1) = shipdigit(1) - 1
      IF INSTR(code$, "forever") > 0 THEN
         lasertype$ = "super"
         pshipsp = 5
         fieldstatus = 1: fieldenergy = 6: fieldtime# = 0
         gamestatus$ = "startplay"
         losedelay = 0
      ELSE
         pshipsp = 2
         fieldenergy = 0: fieldstatus = 0
         gamestatus$ = "startplay"
         lasertype$ = "standard"
         losedelay = 0
      END IF
      IF shipdigit(1) < 0 AND shipdigit(2) = 0 THEN
         CALL ENDGAME
      ELSEIF shipdigit(1) < 0 THEN
         shipdigit(1) = 9 AND shipdigit(2) = shipdigit(2) - 1
      END IF
   END IF
   IF gamestatus$ = "leveldone" THEN
      levnum = levnum + 1: gamestatus$ = "startplay"
      showmission$ = "yes": starttime = 0
      IF levnum = 4 THEN CALL VICTORY: gamestatus$ = "noplay"
   END IF
LOOP

DATA 0,0, 0,4, 0,17, 0,20, 0,23, 0,36, 0,40, 1,1, 1,2, 1,4, 1,18, 1,19, 1,21
DATA 1,22, 1,36, 1,38, 1,39, 2,1, 2,3, 2,4, 2,8, 2,18, 2,22, 2,32, 2,36, 2,37
DATA 2,39, 3,0, 3,5, 3,6, 3,8, 3,16, 3,17, 3,23, 3,24, 3,32, 3,34, 3,35, 3,40
DATA 4,1, 4,7, 4,8, 4,12, 4,15, 4,25, 4,28, 4,32, 4,33, 4,39, 5,1, 5,9, 5,10
DATA 5,12, 5,15, 5,25, 5,28, 5,30, 5,31, 5,39, 6,0, 6,11, 6,12, 6,15, 6,25
DATA 6,28, 6,29, 6,40, 7,1, 7,13, 7,14, 7,26, 7,27, 7,39, 8,1, 8,39, 9,0
DATA 9,40, 10,1, 10,39, 11,1, 11,39, 12,0, 12,40, 13,1, 13,39, 14,1, 14,39
DATA 15,0, 15,40, 16,0, 16,40, 17,1, 17,39, 18,1, 18,39, 19,0, 19,40, 20,1
DATA 20,39, 21,1, 21,39, 22,0, 22,40, 23,1, 23,39, 24,1, 24,13, 24,14, 24,26
DATA 24,27, 24,39, 25,0, 25,11, 25,12, 25,15, 25,25, 25,28, 25,29, 25,40
DATA 26,1, 26,9, 26,10, 26,16, 26,24, 26,30, 26,31, 26,39
DATA 27,1, 27,7, 27,8, 27,17, 27,23, 27,32, 27,33, 27,39, 28,0, 28,5, 28,6
DATA 28,16, 28,24, 28,34, 28,35, 28,40, 29,1, 29,3, 29,4, 29,13, 29,14, 29,15
DATA 29,25, 29,26, 29,27, 29,36, 29,37, 29,39, 30,1, 30,2, 30,14, 30,18
DATA 30,19, 30,20, 30,21, 30,22, 30,26, 30,38, 30,39, 31,0, 31,15, 31,16
DATA 31,17, 31,23, 31,24, 31,25,31,40, 8,14,23,14, 5,20,18,20, 8,26,23,26
DATA 3,19, 3,20, 3,21, 4,18, 4,22, 5,17, 5,23, 6,19, 6,21, 7,18, 7,22, 8,17
DATA 8,23, 9,16, 9,24, 10,15, 10,25, 19,19, 19,21, 20,18, 20,22, 21,17, 21,23
DATA 22,16, 22,19, 22,21, 22,24, 23,15, 23,20, 23,25, 24,20, 25,18, 25,22
DATA 26,19, 26,21, 27,20, 28,20, 5,4,26,4, 7,7,24,7, 9,11,22,11, 8,14,23,14
DATA 11,17,18,17, 6,20,18,20, 11,23,19,23, 8,26,23,26, 9,29,22,29, 7,33,24,33
DATA 5,36,26,36, 7,3,24,3, 9,6,22,6, 11,10,20,10, 13,16,16,16, 13,24,16,24
DATA 11,30,20,30, 9,34,22,34, 7,37,24,37, 0,1, 0,2, 0,3, 0,18, 0,19, 0,21
DATA 0,22, 0,37, 0,38, 0,39, 1,0, 1,3, 1,37, 1,40, 2,0, 2,5, 2,6, 2,7, 2,33
DATA 2,34, 2,35, 2,40, 3,7, 3,33, 4,0, 4,9, 4,10, 4,11, 4,13, 4,14, 4,26
DATA 4,27, 4,29, 4,30, 4,31, 4,40, 5,0, 5,11, 5,13, 5,14, 5,26, 5,27, 5,29
DATA 5,40, 6,13, 6,14, 6,26, 6,27, 7,0, 7,40, 8,0, 8,40, 10,0, 10,40, 11,0
DATA 11,40, 13,0, 13,40, 14,0, 14,40, 17,0, 17,40, 18,0, 18,40, 20,0, 20,40
DATA 21,0, 21,40, 23,0, 23,40, 24,0, 24,40, 25,13, 25,14, 25,26, 25,27, 26,0
DATA 26,40, 27,0, 27,40, 29,0, 29,40, 30,0, 30,40, 0,5,0,16, 0,24,0,35
DATA 1,5,1,17, 1,23,1,35, 2,9,2,17, 2,23,2,31, 3,9,3,15, 3,25,3,31
DATA 26,11,26,15, 26,25,26,29, 27,9,27,16, 27,24,27,31, 28,7,28,15
DATA 28,25,28,33, 29,5,29,12, 29,28,29,35, 30,3,30,13, 30,27,30,37
DATA 31,1,31,14, 31,18,31,22, 31,26,31,39
DATA 0,0, 0,1, 0,2, 0,3, 0,4, 0,5, 0,6, 0,7, 1,0, 1,7, 2,0, 2,7, 3,1, 3,6
DATA 4,1, 4,6, 5,2, 5,5, 6,2, 6,5, 7,3, 7,4, 2,5, 3,4, 4,3
DATA 3,0, 3,7, 4,0, 4,7, 5,0, 5,1, 5,6, 5,7, 6,0, 6,1, 6,6, 6,7, 7,0, 7,1
DATA 7,2, 7,5, 7,6, 7,7
DATA 0,0, 0,4, 0,10, 0,14, 1,0, 1,1, 1,4, 1,5, 1,9, 1,10, 1,13, 1,14, 2,0
DATA 2,2, 2,5, 2,6, 2,8, 2,9, 2,12, 2,14
DATA 3,0, 3,3, 3,5, 3,7, 3,9, 3,11, 3,14, 4,0, 4,4, 4,10, 4,14, 5,1, 5,5
DATA 5,9, 5,13, 6,2, 6,6, 6,7, 6,8, 6,12, 7,2, 7,12, 8,1, 8,13, 9,0, 9,14
DATA 10,0, 10,6, 10,7, 10,8, 10,14
DATA 11,0, 11,5, 11,9, 11,14, 12,1, 12,4, 12,10, 12,13, 13,1, 13,3, 13,5
DATA 13,9, 13,11, 13,13, 14,2, 14,5, 14,9, 14,12, 15,5, 15,9, 16,5, 16,9
DATA 17,6, 17,8, 18,6, 18,8, 19,7, 4,2, 4,6, 4,8, 4,12, 5,3, 5,7, 5,11, 6,4
DATA 6,10, 7,5, 7,9, 8,5, 8,7, 8,9, 9,4, 9,6, 9,8, 9,10, 10,3, 10,11, 11,2
DATA 11,7, 11,12, 12,6, 12,7, 12,8, 13,7, 14,7, 15,7, 16,7
DATA 0,1, 0,2, 0,3, 0,5, 0,6, 0,7, 0,8, 0,9, 0,11, 0,12, 0,13, 1,2, 1,3
DATA 1,6, 1,7, 1,8, 1,11, 1,12, 2,3, 2,4, 2,7, 2,10, 2,11, 3,4, 3,10, 5,0
DATA 5,14, 6,0, 6,1, 6,13, 6,14, 7,0, 7,1, 7,13, 7,14, 8,0, 8,14
DATA 12,0, 12,14, 13,0, 13,4, 13,10, 13,14, 14,0, 14,1, 14,3, 14,4, 14,10
DATA 14,11, 14,13, 14,14, 15,0, 15,1, 15,2, 15,3, 15,4, 15,10, 15,11, 15,12
DATA 15,13, 15,14, 16,0, 16,1, 16,2, 16,3, 16,4, 16,10, 16,11, 16,12, 16,13
DATA 16,14, 17,0, 17,1, 17,2, 17,3, 17,4, 17,5, 17,9, 17,10, 17,11, 17,12
DATA 17,13, 17,14, 18,0, 18,1, 18,2, 18,3, 18,4, 18,5, 18,9, 18,10, 18,11
DATA 18,12, 18,13, 18,14, 19,0, 19,1, 19,2, 19,3, 19,4, 19,5, 19,6, 19,8
DATA 19,9, 19,10, 19,11, 19,12, 19,13, 19,14, 0,0, 0,7, 0,14, 1,0, 1,1, 1,7
DATA 1,13, 1,14, 2,0, 2,2, 2,3, 2,6, 2,7, 2,8, 2,11, 2,12, 2,14, 3,0, 3,4
DATA 3,6, 3,8, 3,10, 3,14, 4,0, 4,5, 4,9, 4,14, 5,0, 5,14, 6,0, 6,4, 6,5
DATA 6,9, 6,10, 6,14, 7,0, 7,2, 7,3, 7,6, 7,8, 7,11, 7,12, 7,14, 8,0, 8,1
DATA 8,5, 8,9, 8,13, 8,14, 9,0, 9,4, 9,5, 9,6, 9,7, 9,8, 9,9, 9,10, 9,14
DATA 4,2, 4,7, 4,12, 5,2, 5,7, 5,12, 6,7, 7,7, 8,6, 8,8
DATA 0,2, 0,2, 0,3, 0,4, 0,5, 0,6, 0,8 ,0,9, 0,10, 0,11, 0,12, 0,13, 1,2
DATA 1,3, 1,4, 1,5, 1,6, 1,8, 1,9, 1,10, 1,11, 1,12, 2,4, 2,5, 2,9, 2,10
DATA 3,5, 3,9, 7,4, 7,5, 7,9, 7,10, 8,2, 8,3, 8,4, 8,10, 8,11, 8,12, 9,1
DATA 9,2, 9,3, 9,11, 9,12, 9,13, 0,2, 0,3, 0,11, 0,17, 1,1, 1,4, 1,5, 1,10
DATA 1,12, 1,17, 1,18, 2,2, 2,6, 2,9, 2,12, 2,16, 2,19, 3,1, 3,2, 3,7, 3,8
DATA 3,13, 3,16, 3,19, 4,0, 4,13, 4,15, 4,18, 5,0, 5,14, 5,18, 6,1, 6,19
DATA 7,0, 7,3, 7,9, 7,10, 7,17, 7,18, 8,0, 8,2, 8,4, 8,5, 8,8, 8,10, 8,13
DATA 8,14, 8,16, 9,0, 9,1, 9,6, 9,7, 9,11, 9,12, 9,15, 9,16
DATA 0,0, 0,1, 0,4, 0,5, 0,6, 0,7, 0,8, 0,9, 0,10, 0,12, 0,13, 0,14, 0,15
DATA 0,16, 0,18, 0,19, 1,0, 1,6, 1,7, 1,8, 1,9, 1,13, 1,14, 1,15, 1,16
DATA 1,19, 2,0, 2,1, 2,7, 2,8, 2,13, 2,14, 2,15, 3,0, 3,14, 3,15, 4,14
DATA 4,19, 5,19, 6,0, 7,19, 8,3, 8,9, 8,17, 8,18, 8,19, 9,2, 9,3, 9,4, 9,5
DATA 9,8, 9,9, 9,10, 9,13, 9,14, 9,17, 9,18, 9,19, 0,4, 0,5, 1,2, 1,3, 1,6
DATA 1,7, 2,1, 2,8, 3,1, 3,8, 4,0, 4,9, 5,0, 5,9, 6,1, 6,8, 7,1, 7,8, 8,2
DATA 8,3, 8,6, 8,7, 9,4, 9,5, 1,4, 1,5, 2,2, 2,3, 2,4, 2,5, 2,6, 2,7, 4,1
DATA 4,8, 5,1, 5,2, 5,3, 5,4, 5,5, 5,8, 6,2, 6,3, 6,4, 6,5, 7,2, 7,3, 7,4
DATA 7,5, 8,4, 8,5, 7,6, 7,7, 3,2, 3,3, 3,4, 3,5, 3,6, 3,7, 4,2, 4,3, 4,4
DATA 4,5, 4,6, 4,7, 5,6, 5,7, 6,6, 6,7, 0,4, 0,5, 1,2, 1,3, 1,6, 1,7, 2,1
DATA 2,8, 3,1, 3,8, 4,0, 4,9, 5,0, 5,9, 6,1, 6,8, 7,1, 7,8, 8,2, 8,3, 8,6
DATA 8,7, 9,4, 9,5, 1,4, 1,5, 2,2, 2,3, 2,4, 2,5, 2,6, 2,7, 3,2, 4,1, 4,8
DATA 5,1, 5,4, 5,6, 5,7, 5,8, 6,6, 6,7, 7,2, 7,5, 7,6, 7,7, 8,4, 8,5
DATA 3,3, 3,4, 3,5, 3,6, 3,7, 4,2, 4,3, 4,4, 4,5, 4,6, 4,7, 5,2, 5,3, 5,5
DATA 6,2, 6,3, 6,4, 6,5, 7,3, 7,4, 0,4, 0,5, 1,2, 1,3, 1,6, 1,7, 2,1, 2,8
DATA 3,1, 3,8, 4,0, 4,9, 5,0, 5,9, 6,1, 6,8, 7,1, 7,8, 8,2, 8,3, 8,6, 8,7
DATA 9,4, 9,5, 1,4, 1,5, 2,2, 2,7, 3,2, 3,7, 4,1, 4,2, 4,5, 4,6, 4,7, 4,8
DATA 5,1, 5,2, 5,3, 5,6, 5,7, 5,8, 6,2, 6,7, 7,2, 7,7, 8,4, 8,5
DATA 2,3, 2,4, 2,5, 2,6, 3,3, 3,4, 3,5, 3,6, 4,3, 4,4, 5,4, 5,5, 6,3, 6,4
DATA 6,5, 6,6, 7,3, 7,4, 7,5, 7,6, 0,4, 0,5, 1,2, 1,3, 1,6, 1,7, 2,1, 2,8
DATA 3,1, 3,8, 4,0, 4,9, 5,0, 5,9, 6,1, 6,8, 7,1, 7,8, 8,2, 8,3, 8,6, 8,7
DATA 9,4, 9,5, 1,4, 1,5, 2,2, 2,3, 2,4, 2,5, 2,6, 2,7, 3,4, 3,5, 4,1, 4,6
DATA 4,8, 5,1, 5,3, 5,8, 6,2, 6,4, 6,7, 7,2, 7,3, 7,4, 7,5, 7,6, 7,7, 8,4
DATA 8,5, 3,2, 3,3, 3,6, 3,7, 4,2, 4,3, 4,4, 4,5, 4,7, 5,2, 5,4, 5,5, 5,6
DATA 5,7, 6,3, 6,5, 6,6, 0,4, 0,5, 1,2, 1,3, 1,6, 1,7, 2,1, 2,8, 3,1, 3,8
DATA 4,0, 4,9, 5,0, 5,9, 6,1, 6,8, 7,1, 7,8, 8,2, 8,3, 8,6, 8,7, 9,4, 9,5
DATA 1,4, 1,5, 2,2, 2,6, 2,7, 3,2, 3,3, 3,4, 3,7, 4,1, 4,2, 4,6, 4,7, 4,8
DATA 5,1, 5,2, 5,6, 5,7, 5,8, 6,2, 6,3, 6,4, 6,7, 7,2, 7,6, 7,7, 8,4, 8,5
DATA 2,3, 2,4, 2,5, 3,5, 3,6, 4,3, 4,4, 4,5, 5,3, 5,4, 5,5, 6,5, 6,6, 7,3
DATA 7,4, 7,5, 0,4, 0,5, 1,2, 1,3, 1,6, 1,7, 2,1, 2,8, 3,1, 3,8, 4,0, 4,9
DATA 5,0, 5,9, 6,1, 6,8, 7,1, 7,8, 8,2, 8,3, 8,6, 8,7, 9,4, 9,5
DATA 1,4, 1,5, 2,2, 2,3, 2,4, 2,5, 2,6, 2,7, 4,1, 4,8, 5,1, 5,3, 5,5, 5,6
DATA 5,7, 5,8, 6,3, 6,5, 6,6, 6,7, 7,2, 7,3, 7,4, 7,5, 7,6, 7,7, 8,4, 8,5
DATA 3,2, 3,3, 3,4, 3,5, 3,6, 3,7, 4,2, 4,3, 4,4, 4,5, 4,6, 4,7, 5,2, 5,4
DATA 6,2, 6,4, 0,0, 0,1, 0,2, 0,3, 0,6, 0,7, 0,8, 0,9, 1,0, 1,1, 1,8, 1,9
DATA 2,0, 2,9, 3,0, 3,9, 6,0, 6,9, 7,0, 7,9, 8,0, 8,1, 8,8, 8,9, 9,0, 9,1
DATA 9,2, 9,3, 9,6, 9,7, 9,8, 9,9
DATA 160,73, 210,33, 260,113, 300,93, 400,133, 410,133, 420,133, 470,33
DATA 480,33, 490,33, 590,73, 600,53, 600,93, 650,13, 660,33, 670,53, 720,133
DATA 730,133, 740,133, 790,33, 840,73, 840,93, 840,113, 890,13, 910,53
DATA 930,73, 940,73, 950,73, 970,33, 990,133
DATA 1040,33, 1050,33, 1070,93, 1080,93, 1100,73, 1110,73, 1130,13, 1140,13
DATA 1190,53, 1190,73, 1190,93
DATA 1230,133, 1250,13, 1300,53, 1300,93, 1310,73, 1360,53, 1360,93, 1370,73
DATA 1410,33, 1430,133, 1450,73
DATA 1820,93, 1820,53, 1830,73, 1850,33, 1870,133, 1880,113, 1890,93
DATA 1980,53, 1990,73, 2000,33
DATA 2020,73, 2030,73, 2040,73, 2060,13, 2070,13, 2080,13, 2100,133
DATA 2110,133, 2120,133
DATA 2170,53, 2170,93, 2180,73, 2220,73, 2280,13, 2280,33, 2280,53, 2280,73
DATA 2280,93, 2280,113, 2280,133
DATA 2510,53, 2510,93, 2520,73, 2540,133, 2550,133, 2570,13, 2580,13
DATA 2600,73, 2610,73, 2630,113, 2640,113, 2660,33, 2670,33, 2700,73
DATA 2750,53, 2800,93
DATA 270,93, 280,73, 280,113, 290,53, 290,133, 360,33, 360,153, 370,53
DATA 370,133, 380,113, 380,73
DATA 430,33, 430,93, 430,153, 440,33, 440,93, 440,153, 450,33, 450,93
DATA 450,153, 500,73, 500,113, 510,73, 510,113, 520,73, 520,113
DATA 570,53, 570,133, 580,33, 580,153, 620,93, 630,93, 650,33, 650,153
DATA 660,33, 660,153
DATA 700,153, 710,153, 720,153, 880,133, 890,113, 890,133, 890,153, 940,133
DATA 950,113, 950,133, 950,153, 1000,133, 1010,113, 1010,133, 1010,153
DATA 1310,53, 1320,53, 1330,53, 1350,33, 1350,73, 1360,33, 1360,73, 1440,53
DATA 1450,53, 1460,53, 1760,93, 1770,93, 1820,133, 1830,133, 1840,133
DATA 1860,53, 1870,53, 1880,53, 1900,133, 1910,133, 1920,133
DATA 1970,93, 1980,73, 1980,113, 1990,53, 1990,133, 2040,93, 2050,73
DATA 2050,113, 2060,53, 2060,133, 2110,93, 2120,73, 2120,113, 2130,53
DATA 2130,133, 2180,93, 2190,93, 2200,93, 2220,53, 2230,53, 2240,53
DATA 2510,53, 2520,53, 2530,53, 2580,33, 2580,73, 2590,33, 2590,73, 2600,33
DATA 2600,73, 2940,93, 2950,93, 2970,73, 2980,73, 3000,113, 3010,113
DATA 3030,93, 3040,93, 3090,53, 3090,133, 3100,73, 3100,113, 3110,93
DATA 3160,53, 3160,133, 3170,73, 3170,113, 3180,93, 3230,53, 3230,133
DATA 3240,73, 3240,113, 3250,93
DATA 3300,93, 3310,93, 3330,73, 3340,73, 3360,53, 3370,53, 3390,153
DATA 3400,153, 3420,133, 3430,133, 3450,113, 3460,113
DATA 160,73, 160,93, 160,113, 180,73, 180,93, 180,113, 200,73, 200,93
DATA 200,113, 220,93, 230,93, 240,93, 260,93, 270,93, 280,93, 300,93
DATA 310,93, 320,93
DATA 340,73, 340,113, 350,73, 350,113, 360,73, 360,113, 380,73, 380,113
DATA 390,73, 390,113, 400,73, 400,113, 420,73, 420,113, 430,73, 430,113
DATA 440,73, 440,113
DATA 1610,288, 1630,256, 1650,224, 1670,192, 1690,160, 1710,128, 1730,96
DATA 1750,64, 1770,32, 1940,192, 1960,128, 2130,224, 2130,96, 2150,160
DATA 2200,256, 2200,64, 2240,292, 2260,96
DATA 2330,192, 2330,64, 2350,224, 2350,96, 2370,160, 2380,256, 2390,128
DATA 2410,32, 2410,224, 2410,160, 2430,256, 2450,128
DATA 2450,160, 2450,64, 2470,192, 2490,256, 2490,32, 2540,128, 2540,92
DATA 2600,160, 2600,128, 2610,128
DATA 160,288,-5, 160,288,5, 180,224,-5, 180,224,5, 200,160,-5, 200,160,5
DATA 220,96,-5, 220,96,5, 240,32,-5, 240,32,5
DATA 340,256,-5, 340,256,5, 340,192,-5, 340,192,5, 340,128,-5, 340,128,5
DATA 40,64,-5, 340,64,5
DATA 450,224,-5, 450,96,-5, 450,160,-5, 630,288,-5, 640,224,-5, 650,160,-5
DATA 660,96,-5, 670,32,-5, 680,288,5, 690,224,5, 700,160,5, 710,96,5
DATA 720,32,5
DATA 1050,160,-5, 1050,160,5, 1090,224,5, 1090,96,-5, 1140,256,5
DATA 1140,160,-5, 1140,64,5
DATA 1170,160,-5, 1170,160,5, 1200,224,-5, 1200,96,5, 1230,192,5
DATA 1230,128,5, 1260,256,-5, 1260,64,-5, 1260,160,-5, 1290,256,5
DATA 1290,256,-5, 1290,160,-5, 1290,160,5, 1290,64,-5, 1290,64,5
DATA 1520,160,5, 1540,224,-5, 1540,96,-5, 1560,288,5, 1560,32,5
DATA 1600,256,-5, 1600,192,5, 1600,128,-5, 1620,160,-5, 1640,64,5
DATA 1660,256,-5, 1680,160,-5
DATA 2300,192,5, 2300,192,-5, 2300,128,5, 2300,128,-5, 2350,256,5
DATA 2350,256,-5, 2350,160,5, 2350,160,-5, 2350,64,5, 2350,64,-5
DATA 2400,288,-5, 2400,256,-5, 2420,224,-5, 2420,192,-5, 2440,160,-5
DATA 2440,128,-5, 2460,96,-5, 2460,64,-5
DATA 2600,160,5, 2620,224,5, 2620,96,-5, 2640,256,-5, 2650,128,5
DATA 2650,96,5, 2670,32,-5, 2670,192,5, 2690,224,-5, 2710,128,5
DATA 2710,288,5, 2710,288,-5, 2730,96,5, 2750,160,-5, 2770,256,5
DATA 2770,256,-5, 2790,64,-5, 2790,288,-5, 2810,160,-5, 2810,32,-5
DATA 2830,256,5, 2830,128,-5, 2850,32,-5, 2870,96,-5, 2870,224,5
DATA 2890,256,5, 2890,160,5
DATA 3510,160,-5, 3510,160,5, 3560,256,-5, 3560,256,5, 3560,64,-5
DATA 3560,64,5, 3560,160,-5, 3560,160,5
DATA 600,288,5, 600,288,-5, 620,256,5, 620,256,-5, 640,224,5, 640,224,-5
DATA 660,192,5, 660,192,-5, 680,160,5, 680,160,-5, 700,128,5, 700,128,-5
DATA 720,96,5, 720,96,-5, 740,64,5, 740,64,-5, 760,32,5, 760,32,-5
DATA 820,160,5, 900,128,-5, 900,192,-5, 1050,64,5, 1080,224,-5, 1180,96,5
DATA 1180,160,5, 1190,192,-5, 1260,32,-5, 1300,128,5, 1350,160,-5
DATA 1370,128,5, 1440,160,-5, 1440,96,5, 1470,224,-5, 1480,64,5, 1490,128,5
DATA 1560,160,-5, 1580,192,5, 1600,224,-5
DATA 55,61,55,69, 55,69,72,69, 72,69,72,48, 72,48,61,48, 61,48,61,36
DATA 61,36,66,36, 66,36,66,40, 66,40,72,40, 72,40,72,31, 72,31,55,31
DATA 55,31,55,53, 55,53,66,53, 66,53,66,64, 66,64,61,64, 61,64,61,61
DATA 61,61,55,61
DATA 74,69,91,69, 91,69,91,48, 91,48,74,48, 74,48,74,69, 80,64,85,64
DATA 85,64,85,53, 85,53,80,53, 80,53,80,64
DATA 93,69,110,69, 110,69,110,64, 110,64,99,64, 99,64,99,48, 99,48,93,48
DATA 93,48,93,69
DATA 112,69,118,69, 118,69,118,62, 118,62,123,62, 123,62,123,69
DATA 123,69,129,69, 129,69,129,48, 129,48,112,48, 112,48,112,69
DATA 118,57,123,57, 123,57,123,53, 123,53,118,53, 118,53,118,57
DATA 131,69,137,69, 137,69,137,62, 137,62,139,62, 139,62,139,69
DATA 139,69,148,69, 148,69,148,64, 148,64,145,64, 145,64,145,62
DATA 145,62,148,62, 148,62,148,48, 148,48,131,48, 131,48,131,69
DATA 137,57,142,57, 142,57,142,53, 142,53,137,53, 137,53,137,57
DATA 150,61,150,69, 150,69,167,69, 167,69,167,48, 167,48,156,48
DATA 156,48,156,36, 156,36,161,36, 161,36,161,40, 161,40,167,40
DATA 167,40,167,31, 167,31,150,31, 150,31,150,53, 150,53,161,53
DATA 161,53,161,64, 161,64,156,64, 156,64,156,61, 156,61,150,61
DATA 175,69,181,69, 181,69,181,53, 181,53,186,53, 186,53,186,48
DATA 186,48,169,48, 169,48,169,53, 169,53,175,53, 175,53,175,69
DATA 188,69,194,69, 194,69,194,62, 194,62,196,62, 196,62,196,69
DATA 196,69,205,69, 205,69,205,64, 205,64,202,64, 202,64,202,62
DATA 202,62,205,62, 205,62,205,48, 205,48,188,48, 188,48,188,69
DATA 194,57,199,57, 199,57,199,53, 199,53,194,53, 194,53,194,57
DATA 207,69,224,69, 224,69,224,64, 224,64,218,64, 218,64,218,53
DATA 218,53,224,53, 224,53,224,48, 224,48,207,48, 207,48,207,53
DATA 207,53,212,53, 212,53,212,64, 212,64,207,64, 207,64,207,69
DATA 226,69,232,69, 232,69,232,62, 232,62,234,62, 234,62,234,69
DATA 234,69,243,69, 243,69,243,64, 243,64,240,64, 240,64,240,53
DATA 240,53,243,53, 243,53,243,48, 243,48,234,48, 234,48,234,56
DATA 234,56,232,56, 232,56,232,48, 232,48,226,48, 226,48,226,69
DATA 245,69,262,69, 262,69,262,64, 262,64,250,64, 250,64,250,61
DATA 250,61,256,61, 256,61,256,56, 256,56,250,56, 250,56,250,53
DATA 250,53,262,53, 262,53,262,48, 262,48,245,48, 245,48,245,69
DATA 52,90,175,80, 175,80,180,83, 180,83,186,90, 186,90,184,96
DATA 184,96,195,110, 195,110,192,115,192,115,210,125, 210,125,212,130
DATA 212,130,220,135, 220,135,235,148
DATA 267,75,195,80, 195,80,193,82, 193,82,196,90, 196,90,206,93
DATA 206,93,214,98, 214,98,232,103, 232,103,229,98, 229,98,232,96
DATA 232,96,238,101, 238,101,244,99
DATA 244,99,250,103, 250,103,246,107, 246,107,238,108, 238,108,231,110
DATA 231,110,225,108, 225,108,216,106, 216,106,210,104, 210,104,202,99
DATA 202,99,199,98, 199,98,195,97
DATA 195,97,203,104, 203,104,207,110, 207,110,206,114, 206,114,216,120
DATA 216,120,219,125, 219,125,225,127, 225,127,232,131, 232,131,238,136
DATA 238,136,249,134, 249,134,256,137, 256,137,267,139

DEFSNG A-Z
SUB ACTENEMY
DEFINT A-Z
     
check$ = "yes"
FOR enum = minenum TO maxenum
   IF etime(enum) > time THEN EXIT FOR
   IF etime(enum) = time AND eshipstatus$(enum) = "nonactive" THEN
   escr2 = enum: eshipstatus$(enum) = "active"
   END IF
   IF etime(enum) + 155 > time AND check$ = "yes" THEN
   escr1 = enum: check$ = "no"
   END IF
NEXT enum
check$ = "yes"
FOR flnum = minfnum TO maxfnum
   IF ftime(flnum) > time THEN EXIT FOR
   IF ftime(flnum) = time AND flarestatus$(flnum) = "nonactive" THEN
   fscr2 = flnum: flarestatus$(flnum) = "active"
   END IF
   IF ftime(flnum) + 36 > time AND check$ = "yes" THEN
   fscr1 = flnum: check$ = "no"
   END IF
NEXT flnum

END SUB

DEFSNG A-Z
SUB ACTPOD
DEFINT A-Z

IF dif$ <> "insane" THEN
   SELECT CASE dif$
      CASE "easy"
         comm = 100
      CASE "normal"
         comm = 200
      CASE "hard"
         comm = 450
   END SELECT
   item = INT(RND * comm) + 1
   FOR pnum = 1 TO pnumtotal
      IF podtype$(pnum) = "none" THEN
         SELECT CASE item
            CASE 1
               podtype$(pnum) = "life"
            CASE 2 TO 16
               podtype$(pnum) = "point"
            CASE 17 TO 21
               podtype$(pnum) = "nuke"
            CASE 22 TO 28
               podtype$(pnum) = "sp"
            CASE 28 TO 32
               podtype$(pnum) = "weapon"
            CASE 33 TO 35
               podtype$(pnum) = "field"
         END SELECT
         IF podtype$(pnum) <> "none" THEN
         xpodmove(pnum) = xeplmove(enum): ypodmove(pnum) = yeplmove(enum) + 3
         EXIT FOR
         END IF
      END IF
   NEXT pnum
END IF

END SUB

DEFSNG A-Z
SUB BEGINPLAY
DEFINT A-Z

SELECT CASE infodelay
   CASE 1 TO 5
      COLOR 15: LOCATE 13, 14: PRINT "PRESS"
      LOCATE 13, 20: PRINT "SPACEBAR"
      infodelay = infodelay + 1
   CASE 6 TO 9
      infodelay = infodelay + 1
   CASE 10
      infodelay = 1
END SELECT

END SUB

DEFSNG A-Z
SUB BOSSLASER
DEFINT A-Z

IF bfiring$ = "yes" THEN
   IF bfirestart$ = "yes" THEN
      effect$ = "bosslaser": CALL SOUNDEFFECTS
      ybfire(1) = ybossmove + 4
      ybfire(2) = ybossmove + 8
      ybfire(3) = ybossmove + 12
      ybfire(4) = ybossmove + 28
      ybfire(5) = ybossmove + 32
      ybfire(6) = ybossmove + 36
      ybfire(7) = ybossmove + 20
      xbfire(1) = xbossmove - 2
      xbfire(2) = xbossmove
      xbfire(3) = xbossmove + 2
      xbfire(4) = xbossmove + 2
      xbfire(5) = xbossmove
      xbfire(6) = xbossmove - 2
      xbfire(7) = xbossmove - 2
      FOR shotnum = 1 TO 7: blwstatus$(shotnum) = "active": NEXT shotnum
      bfirestart$ = "no"
   END IF
   bfiring$ = "no"
   FOR shotnum = 1 TO 7
      IF blwstatus$(shotnum) = "active" THEN
         bkblw(shotnum) = xbfire(shotnum)
         fblw(shotnum) = xbfire(shotnum) - 5
         doso$ = "no"
         IF plstat$ = "active" THEN
            IF fpwing >= fblw(shotnum) AND bkpwing <= bkblw(shotnum) THEN
               IF tpwing <= ybfire(shotnum) AND bpwing >= ybfire(shotnum) THEN
                  doso$ = "yes"
               END IF
            END IF
            IF fphead >= fblw(shotnum) AND bkphead <= bkblw(shotnum) THEN
               IF tphead <= ybfire(shotnum) AND bphead >= ybfire(shotnum) THEN
                  doso$ = "yes"
               END IF
            END IF
         END IF
         IF doso$ = "yes" THEN
            IF fieldenergy > 0 THEN
               effect$ = "hitfield": CALL SOUNDEFFECTS
               IF INSTR(code$, "forever") = 0 THEN
                 fieldenergy = fieldenergy - 2: fieldtime# = 0
                 IF fieldenergy <= 0 THEN fieldstatus = 0
               END IF
               blwstatus$(shotnum) = "nonactive"
            ELSE
               effect$ = "hitship": CALL SOUNDEFFECTS
               plstat$ = "destroyed"
               EXIT FOR
            END IF
         END IF
      END IF
   NEXT shotnum
   FOR shotnum = 1 TO 7
      IF blwstatus$(shotnum) = "active" THEN
         LINE (bkblw(shotnum), ybfire(shotnum))-(fblw(shotnum), ybfire(shotnum)), 13
         xbfire(shotnum) = xbfire(shotnum) - 6 * exsp
         IF bkblw(shotnum) < 0 THEN blwstatus$(shotnum) = "nonactive"
         bfiring$ = "yes"
      END IF
   NEXT shotnum
END IF

END SUB

DEFSNG A-Z
SUB BOSSPWR
DEFINT A-Z

LINE (109, 186)-(211, 195), 14, B
IF bossenergy < 100 THEN
   LINE (110 + bossenergy, 186)-(110 + bossenergy, 194), 14
   PAINT (210, 194), 14, 14
END IF
IF bossenergy > 0 THEN PAINT (110, 194), 2, 14
LINE (109, 186)-(211, 195), 1, B

END SUB

DEFSNG A-Z
SUB CLEARKEYS
DEFINT A-Z

select1$ = INKEY$
IF clearallkeys$ = "yes" THEN
   select1$ = "0": clearallkeys$ = "no"
END IF
FOR times = 1 TO 14
   select2$ = INKEY$
NEXT times

END SUB

DEFSNG A-Z
SUB DRAWFLAME
DEFINT A-Z

flamestatus$ = "drawing"
yline1 = INT(RND * 8)
xline1 = 0
DO
   IF flamestatus$ = "drawing" THEN
      yline2 = INT(RND * 8)
      xline2 = INT(RND * 10) + 5 + xline1
      IF xline2 > 319 THEN xline2 = 319
      IF tflame# > 0 THEN
      LINE (xline1, yline1 + tflame#)-(xline2, yline2 + tflame#), c1
      END IF
      IF bflame# > 0 THEN
         LINE (xline1, yline1 + 192 - bflame#)-(xline2, yline2 + 192 - bflame#), c1
      END IF
      yline1 = yline2
      xline1 = xline2
   END IF
   IF xline2 = 319 THEN flamestatus$ = "finished"
LOOP UNTIL flamestatus$ = "finished"
IF bflame# > 0 THEN PAINT (0, 199), c2, c1
IF tflame# > 0 THEN PAINT (0, 0), c2, c1

END SUB

DEFSNG A-Z
SUB ENDGAME
DEFINT A-Z

DO
   time1# = TIMER
   SCREEN 7, 0, 1, 0: CLS
   clearallkeys$ = "yes": CALL CLEARKEYS: CALL STARS
   LOCATE 13, 16: PRINT "GAME": LOCATE 13, 21: PRINT "OVER"
   PCOPY 1, 0
   enddelay = enddelay + 1
   DO: LOOP UNTIL TIMER - time1# > .02
LOOP UNTIL enddelay = 150
enddelay = 0
gamestatus$ = "noplay"

END SUB

DEFSNG A-Z
SUB ENEMYSHOT
DEFINT A-Z

FOR enum = escr1 TO escr2
   IF eshipstatus$(enum) = "active" AND efiring$(enum) = "no" THEN
      SELECT CASE dif$
         CASE "easy"
            comm = 70
         CASE "normal"
            comm = 30
         CASE "hard", "insane"
            comm = 10
      END SELECT
      efire = (RND * comm)
      IF efire = 0 THEN
         efiring$(enum) = "yes"
         yeshotmove(enum) = (RND * 3) - 1
         xeshot(enum) = feship(enum) - 2
         yeshot(enum) = teship(enum) + 7
         effect$ = "projectile": CALL SOUNDEFFECTS
      END IF
   END IF
   IF efiring$(enum) = "yes" THEN
      feshot(enum) = xeshot(enum) - 1
      bkeshot(enum) = xeshot(enum) + 1
      teshot(enum) = yeshot(enum) - 1
      beshot(enum) = yeshot(enum) + 1
   END IF
   IF feshot(enum) < 0 THEN efiring$(enum) = "no"
   doso$ = "no"
   IF plstat$ = "active" AND efiring$(enum) = "yes" THEN
      IF fpwing >= feshot(enum) AND bkpwing <= bkeshot(enum) THEN
         IF tpwing <= beshot(enum) AND bpwing >= teshot(enum) THEN
            doso$ = "yes"
         END IF
      END IF
   END IF
   IF plstat$ = "active" AND efiring$(enum) = "yes" THEN
      IF fphead >= feshot(enum) AND bkphead <= bkeshot(enum) THEN
         IF tphead <= beshot(enum) AND bphead >= teshot(enum) THEN
            doso$ = "yes"
         END IF
      END IF
   END IF
   IF doso$ = "yes" THEN
      IF fieldstatus = 0 THEN
         effect$ = "hitship": CALL SOUNDEFFECTS
         plstat$ = "destroyed"
      ELSE
         effect$ = "hitfield": CALL SOUNDEFFECTS
         IF INSTR(code$, "forever") = 0 THEN fieldenergy = fieldenergy - 1: fieldtime# = 0
         IF fieldenergy = 0 THEN fieldstatus = 0
      END IF
      efiring$(enum) = "no"
   END IF
   IF efiring$(enum) = "yes" THEN
      CIRCLE (xeshot(enum), yeshot(enum)), 1, 10
      PSET (xeshot(enum), yeshot(enum)), 10
      xeshot(enum) = xeshot(enum) - 3 * exsp
      yeshot(enum) = yeshot(enum) + yeshotmove(enum)
   END IF
NEXT enum

END SUB

DEFSNG A-Z
SUB FIRELASER
DEFINT A-Z

FOR shotnum = 1 TO snumtotal
   IF firing$(shotnum) = "yes" THEN
      IF firestart$(shotnum) = "yes" THEN
         effect$ = "yourlaser": CALL SOUNDEFFECTS
         yfire(shotnum) = ypplmove + 7
         xfire(shotnum) = fphead + 2
         firestart$(shotnum) = "no"
      END IF
      SELECT CASE lasertype$
         CASE "standard"
     bkshot(shotnum) = xfire(shotnum): fshot(shotnum) = xfire(shotnum) + 5
     bshot(shotnum) = yfire(shotnum): tshot(shotnum) = yfire(shotnum)
         CASE "double"
  bkshot(shotnum) = xfire(shotnum): fshot(shotnum) = xfire(shotnum) + 5
  bshot(shotnum) = yfire(shotnum) + 1: tshot(shotnum) = yfire(shotnum) - 1
         CASE "pulse"
     bkshot(shotnum) = xfire(shotnum): fshot(shotnum) = xfire(shotnum) + 5
  bshot(shotnum) = yfire(shotnum) + 2: tshot(shotnum) = yfire(shotnum) - 2
         CASE "super"
     bkshot(shotnum) = xfire(shotnum): fshot(shotnum) = xfire(shotnum) + 5
  bshot(shotnum) = yfire(shotnum) + 6: tshot(shotnum) = yfire(shotnum) - 6
      END SELECT
      ehit$ = "laser": CALL HITESHIP
      IF bossstatus$ = "active1" OR bossstatus$ = "active2" THEN
      doso$ = "no"
      IF fshot(shotnum) >= fboss AND bkshot(shotnum) <= bkboss THEN
      IF bshot(shotnum) >= tboss AND tshot(shotnum) <= bboss THEN
      doso$ = "yes"
      END IF
      END IF
      IF doso$ = "yes" THEN
            IF bosshit$ = "no" THEN
               bosshit$ = "yes": bossenergy = bossenergy - 1
               IF bossenergy > 0 THEN
                  effect$ = "hitobject": CALL SOUNDEFFECTS
               ELSEIF bossenergy = 0 THEN
                  bossstatus$ = "destroyed": wintime = time + 50
                  effect$ = "hitship": CALL SOUNDEFFECTS
                  sdigit(4) = sdigit(4) + 7: CALL SCORE
               END IF
               firing$(shotnum) = "no"
               firestart$(shotnum) = "yes"
            END IF
         END IF
      END IF
      IF firing$(shotnum) = "yes" THEN
         SELECT CASE lasertype$
            CASE "standard"
LINE (bkshot(shotnum), tshot(shotnum))-(fshot(shotnum), tshot(shotnum)), 11
            CASE "double"
LINE (bkshot(shotnum), tshot(shotnum))-(fshot(shotnum), tshot(shotnum)), 11
LINE (bkshot(shotnum), bshot(shotnum))-(fshot(shotnum), bshot(shotnum)), 11
            CASE "pulse"
               CIRCLE (xfire(shotnum) + 2, yfire(shotnum)), 2, 11
               PAINT (xfire(shotnum) + 2, yfire(shotnum)), 11, 11
            CASE "super"
               CIRCLE (bkshot(shotnum) + 3, tshot(shotnum) + 3), 2, 11
               PAINT (bkshot(shotnum) + 3, tshot(shotnum) + 3), 11, 11
               CIRCLE (bkshot(shotnum) + 3, bshot(shotnum) - 3), 2, 11
               PAINT (bkshot(shotnum) + 3, bshot(shotnum) - 3), 11, 11
         END SELECT
         xfire(shotnum) = xfire(shotnum) + 6
         IF bkshot(shotnum) > 319 THEN
            firing$(shotnum) = "no": firestart$(shotnum) = "yes"
         END IF
      END IF
   END IF
NEXT shotnum

END SUB

DEFSNG A-Z
SUB GAMESET
DEFINT A-Z

starttime = 0
starplacement$ = "yes"
showmission$ = "yes"
special$ = "yes"
IF dif$ = "insane" THEN
   exsp = 1.5
ELSE
   exsp = 1
END IF
IF INSTR(code$, "finale") > 0 THEN
   levnum = 3
   special$ = "no"
ELSE
   levnum = 1
END IF
IF INSTR(code$, "fleet") > 0 THEN
   shipdigit(1) = 9: shipdigit(2) = 9
   special$ = "no"
ELSE
   shipdigit(1) = 3: shipdigit(2) = 0
END IF
IF INSTR(code$, "forever") > 0 THEN
   lasertype$ = "super"
   pshipsp = 5
   fieldstatus = 1: fieldenergy = 6: fieldtime# = 0
   special$ = "no"
ELSE
   lasertype$ = "standard"
   pshipsp = 2
   fieldstatus = 0
END IF
IF INSTR(code$, "oceanstar") > 0 THEN
   c1 = 3: c2 = 9
ELSE
   c1 = 4: c2 = 12
END IF
FOR num = 1 TO 6
   sdigit(num) = 0
NEXT num

END SUB

DEFSNG A-Z
SUB HITESHIP
DEFINT A-Z

FOR enum = escr1 TO escr2
   IF ehit$ = "laser" THEN
      doso$ = "no"
  IF eshipstatus$(enum) = "active" AND fshot(shotnum) >= feship(enum) THEN
  IF bkshot(shotnum) <= bkeship(enum) AND bshot(shotnum) >= teship(enum) THEN
  IF tshot(shotnum) <= beship(enum) THEN
  doso$ = "yes"
  END IF
  END IF
  END IF
  IF doso$ = "yes" THEN
         effect$ = "hitobject": CALL SOUNDEFFECTS
  IF lasertype$ <> "pulse" AND lasertype$ <> "super" THEN
  firing$(shotnum) = "no": firestart$(shotnum) = "yes"
         END IF
         eshipstatus$(enum) = "destroyed"
         sdigit(3) = sdigit(3) + 1
         CALL SCORE: CALL ACTPOD
      END IF
   END IF
   IF ehit$ = "sunflare" THEN
      FOR flnum = fscr1 TO fscr2
  doso$ = "no"
  IF eshipstatus$(enum) = "active" AND flarestatus$(flnum) = "active" THEN
  IF fflare(flnum) <= bkeship(enum) AND bkflare(flnum) >= feship(enum) THEN
  IF bflare(flnum) >= teship(enum) AND tflare(flnum) <= beship(enum) THEN
  doso$ = "yes"
  END IF
  END IF
  END IF
  IF doso$ = "yes" THEN
            effect$ = "hitobject": CALL SOUNDEFFECTS
            eshipstatus$(enum) = "destroyed"
         END IF
      NEXT flnum
   END IF
NEXT enum

END SUB

DEFSNG A-Z
SUB HITPSHIP
DEFINT A-Z

FOR enum = escr1 TO escr2
   doso$ = "no"
   IF plstat$ = "active" AND eshipstatus$(enum) = "active" THEN
   IF fpwing >= feship(enum) AND bkpwing <= bkeship(enum) THEN
   IF tpwing <= beship(enum) AND bpwing >= teship(enum) THEN
   doso$ = "yes"
   END IF
   END IF
   END IF
   IF plstat$ = "active" AND eshipstatus$(enum) = "active" THEN
   IF fphead >= feship(enum) AND bkphead <= bkeship(enum) THEN
   IF tphead <= beship(enum) AND bphead >= teship(enum) THEN
   doso$ = "yes"
   END IF
   END IF
   END IF
   IF doso$ = "yes" THEN
      IF fieldenergy > 0 THEN
         effect$ = "hitobject": CALL SOUNDEFFECTS
      IF INSTR(code$, "forever") = 0 THEN fieldenergy = fieldenergy - 2: fieldtime# = 0
         IF fieldenergy <= 0 THEN fieldstatus = 0
         eshipstatus$(enum) = "destroyed"
         sdigit(3) = sdigit(3) + 1
         CALL SCORE
      ELSE
         effect$ = "hitship": CALL SOUNDEFFECTS
         plstat$ = "destroyed"
      END IF
   END IF
NEXT enum
FOR flnum = fscr1 TO fscr2
   doso$ = "no"
   IF plstat$ = "active" AND flarestatus$(flnum) = "active" THEN
   IF fpwing >= fflare(flnum) AND bkpwing <= bkflare(flnum) THEN
   IF tpwing <= bflare(flnum) AND bpwing >= tflare(flnum) THEN
   doso$ = "yes"
   END IF
   END IF
   END IF
   IF plstat$ = "active" AND flarestatus$(flnum) = "active" THEN
   IF fphead >= fflare(flnum) AND bkphead <= bkflare(flnum) THEN
   IF tphead <= bflare(flnum) AND bphead >= tflare(flnum) THEN
   doso$ = "yes"
    END IF
    END IF
    END IF
      IF doso$ = "yes" THEN
      IF fieldenergy > 0 THEN
         effect$ = "hitobject": CALL SOUNDEFFECTS
     IF INSTR(code$, "forever") = 0 THEN fieldenergy = fieldenergy - 2: fieldtime# = 0
         IF fieldenergy <= 0 THEN fieldstatus = 0
         flarestatus$(flnum) = "destroyed"
         sdigit(3) = sdigit(3) + 5
         CALL SCORE
      ELSE
         effect$ = "hitship": CALL SOUNDEFFECTS
         plstat$ = "destroyed"
      END IF
   END IF
NEXT flnum
doso$ = "no"
IF plstat$ = "active" AND bflame# > 0 AND bpwing >= 192 - bflame# THEN
doso$ = "yes"
END IF
IF plstat$ = "active" AND tflame# > 0 AND tpwing <= 7 + tflame# THEN
doso$ = "yes"
END IF
IF doso$ = "yes" THEN
   effect$ = "hitship": CALL SOUNDEFFECTS
   plstat$ = "destroyed"
END IF
IF bossstatus$ = "active1" OR bossstatus$ = "active2" THEN
   doso$ = "no"
   IF plstat$ = "active" AND fpwing >= fboss AND bkpwing <= bkboss THEN
   IF tpwing <= bboss AND bpwing >= tboss THEN
   doso$ = "yes"
   END IF
   END IF
   IF plstat$ = "active" AND fphead >= fboss AND bkphead <= bkboss THEN
   IF tphead <= bboss AND bphead >= tboss THEN
   doso$ = "yes"
   END IF
   END IF
   IF doso$ = "yes" THEN
      effect$ = "hitship": CALL SOUNDEFFECTS
      plstat$ = "destroyed"
   END IF
END IF

END SUB

DEFSNG A-Z
SUB INTRO
DEFINT A-Z

display = 1
clearallkeys$ = "yes"
starplacement$ = "yes": startype$ = "warpsp"
DO
   time1# = TIMER
   SCREEN 7, 0, 1, 0: CLS
   CALL CLEARKEYS: CALL STARS
   yship1 = 13 + INT(RND * 3) - 1: yship2 = 73 + INT(RND * 3) - 1
   yship3 = 113 + INT(RND * 3) - 1: yship4 = 33 + INT(RND * 3) - 1
   IF display < 8 THEN xship1 = 60: xship2 = 120: xship3 = 180: xship4 = 240
   IF display > 7 THEN xship1 = xship1 + 2: xship2 = xship2 + 2
   xship3 = xship3 + 2: xship4 = xship4 + 2
   IF xship1 < 302 THEN
   PUT (xship1, yship1), mpship, AND: PUT (xship1, yship1), pship, XOR
   END IF
   IF xship2 < 302 THEN
   PUT (xship2, yship2), mpship, AND: PUT (xship2, yship2), pship, XOR
   END IF
   IF xship3 < 302 THEN
   PUT (xship3, yship3), mpship, AND: PUT (xship3, yship3), pship, XOR
   END IF
   IF xship4 < 302 THEN
   PUT (xship4, yship4), mpship, AND: PUT (xship4, yship4), pship, XOR
   END IF
   LOCATE 20, 1: COLOR 10
   SELECT CASE display
      CASE 1
         PRINT "In a far away galaxy, violence cripples ";
         PRINT "two advanced civilizations. The         ";
         PRINT "Celcians, intent on destroying their    ";
         PRINT "peaceful rivals, the Tenacians, have    ";
         PRINT "constructed the most powerful warship   ";
         LOCATE 25, 1: PRINT "since the dawn of time...               ";
      CASE 2
         PRINT "Taking nearly thirty years to complete, ";
         PRINT "it has been sent to Octain, a large red ";
         PRINT "giant, located several light years from ";
         PRINT "the Tenacian homeworld of Marudian. If  ";
         PRINT "the ship succeeds in exploding the star,";
         LOCATE 25, 1: PRINT "the resulting wave of energy would      ";
      CASE 3
         PRINT "easily reach the Tenacian solar system, ";
         PRINT "eliminating all life in that region.    ";
         PRINT "To accomplish this task, the enemy must ";
         PRINT "actually enter the star, to reach its   ";
         PRINT "core. Narrow passageways of only several";
         LOCATE 25, 1: PRINT "hundred feet in width are the only means";
      CASE 4
         PRINT "of doing so. It is thought however, that";
         PRINT "the ship's shields can withstand the    ";
         PRINT "extreme temperatures of the star itself.";
         PRINT "You must lead a team of four prototype  ";
         PRINT "fighters through theses fiery tunnels,  ";
         LOCATE 25, 1: PRINT "to find and destroy the enemy ship      ";
      CASE 5
         PRINT "before it is too late. Celcian Tri-wings";
         PRINT "are thought to be in the area, so expect";
         PRINT "to encounter a lot of resistence. As    ";
         PRINT "your squadron races through space to    ";
         PRINT "intercept the enemy, hope of survival   ";
         LOCATE 25, 1: PRINT "bk on your planet diminishes for each ";
      CASE 6
         PRINT "passing second. Only you can change the ";
         PRINT "almost certain fate of your race, to    ";
         PRINT "complete your mission, and return home. ";
         PRINT "Succeed, and you will be honoured with  ";
         PRINT "everything your people have to offer.   ";
         LOCATE 25, 1: PRINT "Die, and your battered remains will     ";
      CASE 7
         PRINT "drift away into space, to be quickly    ";
         PRINT "absorbed by intense heat and fire, as   ";
         PRINT "your civilization vanishes in less than ";
         PRINT "a breath. You are the last, and only    ";
         PRINT "hope for the continual existence of our ";
         LOCATE 25, 1: PRINT "species. The only hope for our lives... ";
   END SELECT
   textdelay = textdelay + 1
   IF textdelay = 200 THEN display = display + 1: textdelay = 0
   PCOPY 1, 0
   DO: LOOP UNTIL TIMER - time1# > .02
LOOP UNTIL display = 9 OR select1$ = CHR$(13)
IF select1$ = CHR$(13) THEN effect$ = "select": CALL SOUNDEFFECTS
gamestatus$ = "noplay"
startype$ = "normal"

END SUB

DEFSNG A-Z
SUB LEVELSET
DEFINT A-Z

time = starttime
escr1 = 0: escr2 = 0
fscr1 = 0: fscr2 = 0
IF INSTR(code$, "fullstop") > 0 THEN startype$ = "nomove": special$ = "no"
SELECT CASE levnum
   CASE 1
      tflame# = 0: bflame# = 40
      minenum = 1: maxenum = enumtotal1
      minfnum = 1: maxfnum = flnumtotal1
   CASE 2
      IF time = 0 THEN tflame# = 1: bflame# = 1
      IF time = 1700 THEN tflame# = 41: bflame# = 41
      minenum = enumtotal1 + 1: maxenum = enumtotal2
      minfnum = flnumtotal1 + 1: maxfnum = flnumtotal2
   CASE 3
      IF time = 0 THEN tflame# = 41: bflame# = 41
      minenum = enumtotal2 + 1: maxenum = enumtotal3
      minfnum = flnumtotal2 + 1: maxfnum = flnumtotal3
END SELECT
xpplmove = 140: ypplmove = 93
ybossmove = 0: xbossmove = 250
bfiring$ = "no": bosshit$ = "no"
bossstatus$ = "nonactive": bossenergy = 100
plstat$ = "active"
FOR enum = minenum TO maxenum
   eshipstatus$(enum) = "nonactive"
   xeplmove(enum) = 310
   efiring$(enum) = "no"
NEXT enum
FOR flnum = minfnum TO maxfnum
   flarestatus$(flnum) = "nonactive"
   IF fdir(flnum) = -5 THEN
      yflaremove(flnum) = 180
   ELSEIF fdir(flnum) = 5 THEN
      yflaremove(flnum) = 0
   END IF
   xflaremove(flnum) = xstflaremove(flnum)
NEXT flnum
FOR shotnum = 1 TO snumtotal
   firestart$(shotnum) = "yes"
   firing$(shotnum) = "no"
NEXT shotnum
FOR starnum = 1 TO 50
   xstar(starnum) = 319
NEXT starnum
FOR pnum = 1 TO pnumtotal
   podtype$(pnum) = "none"
NEXT pnum

END SUB

DEFSNG A-Z
SUB MASKFONT
DEFINT A-Z

SCREEN 7, 0, 2, 0: CLS : COLOR , 0
COLOR 15: PRINT "C": GET (0, 0)-(7, 7), lC: CLS
COLOR 7: PRINT "C"
PAINT (0, 0), 15, 7
PAINT (0, 7), 15, 7
PAINT (0, 4), 0, 15
GET (0, 0)-(7, 7), mlC: CLS
COLOR 15: PRINT "E": GET (0, 0)-(7, 7), lE: CLS
COLOR 7: PRINT "E"
PAINT (0, 1), 15, 7
PAINT (0, 7), 15, 7
PAINT (1, 0), 0, 15
GET (0, 0)-(7, 7), mlE: CLS
COLOR 15: PRINT "H": GET (0, 0)-(7, 7), lH: CLS
COLOR 7: PRINT "H"
PAINT (2, 0), 15, 7
PAINT (0, 7), 15, 7
PAINT (0, 0), 0, 15
GET (0, 0)-(7, 7), mlH: CLS
COLOR 15: PRINT "I": GET (0, 0)-(7, 7), lI: CLS
COLOR 7: PRINT "I"
PAINT (0, 0), 15, 7
PAINT (2, 0), 0, 15
GET (0, 0)-(7, 7), mlI: CLS
COLOR 15: PRINT "O": GET (0, 0)-(7, 7), lO: CLS
COLOR 7: PRINT "O"
PAINT (0, 0), 15, 7
PAINT (0, 7), 15, 7
PAINT (3, 3), 15, 7
PAINT (3, 0), 0, 15
GET (0, 0)-(7, 7), mlO: CLS
COLOR 15: PRINT "P": GET (0, 0)-(7, 7), lP: CLS
COLOR 7: PRINT "P"
PAINT (0, 1), 15, 7
PAINT (0, 7), 15, 7
PAINT (3, 1), 15, 7
PAINT (0, 0), 0, 15
GET (0, 0)-(7, 7), mlP: CLS
COLOR 15: PRINT "R": GET (0, 0)-(7, 7), lR: CLS
COLOR 7: PRINT "R"
PAINT (0, 1), 15, 7
PAINT (0, 7), 15, 7
PAINT (3, 1), 15, 7
PAINT (0, 0), 0, 15
GET (0, 0)-(7, 7), mlR: CLS
COLOR 15: PRINT "S": GET (0, 0)-(7, 7), lS: CLS
COLOR 7: PRINT "S"
PAINT (0, 0), 15, 7
PAINT (0, 7), 15, 7
PAINT (0, 4), 15, 7
PAINT (1, 0), 0, 15
GET (0, 0)-(7, 7), mlS: CLS
COLOR 15: PRINT "X": GET (0, 0)-(7, 7), lX: CLS
COLOR 7: PRINT "X"
PAINT (2, 1), 15, 7
PAINT (0, 2), 15, 7
PAINT (7, 2), 15, 7
PAINT (0, 0), 0, 15
GET (0, 0)-(7, 7), mlX: CLS
COLOR 15: PRINT "1": GET (0, 0)-(7, 7), n1: CLS
COLOR 7: PRINT "1"
PAINT (0, 0), 15, 7
PAINT (0, 7), 15, 7
PAINT (3, 0), 0, 15
GET (0, 0)-(7, 7), mn1: CLS
COLOR 15: PRINT "2": GET (0, 0)-(7, 7), n2: CLS
COLOR 7: PRINT "2"
PAINT (0, 0), 15, 7
PAINT (0, 7), 15, 7
PAINT (0, 3), 15, 7
PAINT (3, 0), 0, 15
GET (0, 0)-(7, 7), mn2: CLS
COLOR 15: PRINT "3": GET (0, 0)-(7, 7), n3: CLS
COLOR 7: PRINT "3"
PAINT (0, 0), 15, 7
PAINT (0, 7), 15, 7
PAINT (0, 3), 15, 7
PAINT (2, 0), 0, 15
GET (0, 0)-(7, 7), mn3: CLS
COLOR 15: PRINT "4": GET (0, 0)-(7, 7), n4: CLS
COLOR 7: PRINT "4"
PAINT (0, 0), 15, 7
PAINT (0, 7), 15, 7
PAINT (3, 3), 15, 7
PAINT (3, 1), 0, 15
GET (0, 0)-(7, 7), mn4: CLS
COLOR 15: PRINT "5": GET (0, 0)-(7, 7), n5: CLS
COLOR 7: PRINT "5"
PAINT (0, 4), 15, 7
PAINT (0, 7), 15, 7
PAINT (0, 0), 0, 15
GET (0, 0)-(7, 7), mn5: CLS
COLOR 15: PRINT "6": GET (0, 0)-(7, 7), n6: CLS
COLOR 7: PRINT "6"
PAINT (0, 0), 15, 7
PAINT (0, 7), 15, 7
PAINT (3, 4), 15, 7
PAINT (3, 0), 0, 15
GET (0, 0)-(7, 7), mn6: CLS
COLOR 15: PRINT "7": GET (0, 0)-(7, 7), n7: CLS
COLOR 7: PRINT "7"
PAINT (0, 7), 15, 7
PAINT (0, 0), 0, 15
GET (0, 0)-(7, 7), mn7: CLS
COLOR 15: PRINT "8": GET (0, 0)-(7, 7), n8: CLS
COLOR 7: PRINT "8"
PAINT (0, 0), 15, 7
PAINT (0, 3), 15, 7
PAINT (0, 7), 15, 7
PAINT (3, 1), 15, 7
PAINT (3, 5), 15, 7
PAINT (1, 0), 0, 15
GET (0, 0)-(7, 7), mn8: CLS
COLOR 15: PRINT "9": GET (0, 0)-(7, 7), n9: CLS
COLOR 7: PRINT "9"
PAINT (0, 0), 15, 7
PAINT (0, 7), 15, 7
PAINT (3, 2), 15, 7
PAINT (1, 0), 0, 15
GET (0, 0)-(7, 7), mn9: CLS
COLOR 15: PRINT "0": GET (0, 0)-(7, 7), n0: CLS
COLOR 7: PRINT "0"
PAINT (0, 0), 15, 7
PAINT (0, 7), 15, 7
PAINT (2, 2), 15, 7
PAINT (3, 5), 15, 7
PAINT (1, 0), 0, 15
GET (0, 0)-(7, 7), mn0: CLS

END SUB

DEFSNG A-Z
SUB NPMOVEMENT
DEFINT A-Z

FOR enum = escr1 TO escr2
   IF xeplmove(enum) - 2 < 0 AND eshipstatus$(enum) = "active" THEN
   eshipstatus$(enum) = "nonactive"
   END IF
   IF eshipstatus$(enum) = "active" THEN
      feship(enum) = xeplmove(enum)
      bkeship(enum) = xeplmove(enum) + 9
      teship(enum) = yeplmove(enum)
      beship(enum) = yeplmove(enum) + 14
   END IF
NEXT enum
FOR flnum = minfnum TO maxfnum
   IF flarestatus$(flnum) = "active" THEN
      fflare(flnum) = xflaremove(flnum)
      bkflare(flnum) = xflaremove(flnum) + 9
      tflare(flnum) = yflaremove(flnum)
      bflare(flnum) = yflaremove(flnum) + 19
   END IF
   doso$ = "no"
IF flarestatus$(flnum) = "active" AND tflare(flnum) + fdir(flnum) < 0 THEN
doso$ = "yes"
END IF
IF flarestatus$(flnum) = "active" AND bflare(flnum) + fdir(flnum) > 199 THEN
doso$ = "yes"
END IF
IF fflare(flnum) - 1 < 0 THEN
doso$ = "yes"
END IF
IF doso$ = "yes" THEN flarestatus$(flnum) = "nonactive"
NEXT flnum
FOR pnum = 1 TO pnumtotal
   IF podtype$(pnum) <> "none" THEN
      tpod(pnum) = ypodmove(pnum)
      bkpod(pnum) = xpodmove(pnum) + 9
      fpod(pnum) = xpodmove(pnum)
      bpod(pnum) = ypodmove(pnum) + 9
      IF xpodmove(pnum) < 0 THEN podtype$(pnum) = "none"
   END IF
NEXT pnum
SELECT CASE bossstatus$
   CASE "active1"
      ybossmove = ybossmove + 1
      IF ybossmove = 81 THEN bossstatus$ = "active2"
   CASE "active2"
      SELECT CASE dif$
         CASE "easy"
            bossaction = 15
         CASE "normal"
            bossaction = 10
         CASE "hard", "insane"
            bossaction = 7
      END SELECT
      action = INT(RND * bossaction)
      IF ypplmove + 7 >= ybossmove + 20 AND action < 4 THEN
         ybossmove = ybossmove + 1
      ELSEIF ypplmove + 7 <= ybossmove + 20 AND action < 4 THEN
         ybossmove = ybossmove - 1
      ELSEIF action < 5 AND bfiring$ = "no" THEN
         bfiring$ = "yes"
         bfirestart$ = "yes"
      ELSEIF action < 7 AND action > 4 THEN
         bdir = INT(RND * 2)
         IF bdir = 0 THEN bdir = -1
         ybossmove = ybossmove + bdir
      END IF
END SELECT
IF bossstatus$ = "active1" OR bossstatus$ = "active2" THEN
   fboss = xbossmove
   bkboss = xbossmove + 31
   tboss = ybossmove
   bboss = ybossmove + 40
END IF

END SUB

DEFSNG A-Z
SUB PLACEOBJECTS
DEFINT A-Z

FOR pnum = 1 TO pnumtotal
   IF podtype$(pnum) <> "none" THEN
      PUT (xpodmove(pnum), ypodmove(pnum)), mpod, AND
      SELECT CASE podtype$(pnum)
         CASE "life"
            PUT (xpodmove(pnum), ypodmove(pnum)), lifepod, XOR
         CASE "point"
            PUT (xpodmove(pnum), ypodmove(pnum)), pointpod, XOR
         CASE "nuke"
            PUT (xpodmove(pnum), ypodmove(pnum)), nukepod, XOR
         CASE "sp"
            PUT (xpodmove(pnum), ypodmove(pnum)), sppod, XOR
         CASE "weapon"
            PUT (xpodmove(pnum), ypodmove(pnum)), weaponpod, XOR
         CASE "field"
            PUT (xpodmove(pnum), ypodmove(pnum)), fieldpod, XOR
      END SELECT
      xpodmove(pnum) = xpodmove(pnum) - 1
   END IF
NEXT pnum
FOR enum = escr1 TO escr2
   IF eshipstatus$(enum) = "active" THEN
      PUT (xeplmove(enum), yeplmove(enum)), meship, AND
      PUT (xeplmove(enum), yeplmove(enum)), eship, XOR
      xeplmove(enum) = xeplmove(enum) - 2
   END IF
NEXT enum
FOR flnum = fscr1 TO fscr2
   IF flarestatus$(flnum) = "active" THEN
      PUT (xflaremove(flnum), yflaremove(flnum)), mflare, AND
      PUT (xflaremove(flnum), yflaremove(flnum)), flare, XOR
      yflaremove(flnum) = yflaremove(flnum) + fdir(flnum)
      xflaremove(flnum) = xflaremove(flnum) - 1
   END IF
NEXT flnum
IF plstat$ = "active" THEN
   IF fieldstatus > 0 THEN
      SELECT CASE fieldenergy
         CASE 5 TO 6
            fieldtime# = fieldtime# + .5
         CASE 3 TO 4
            fieldtime# = fieldtime# + 1
         CASE 1 TO 2
            fieldtime# = fieldtime# + 2
      END SELECT
      CIRCLE (xpplmove + 8, ypplmove + 7), 12 + fieldstatus, 2, , , .78
      PAINT (xpplmove + 7, ypplmove + 6), 10, 2
      IF fieldtime# = 2 THEN
         fieldstatus = fieldstatus + 1
         IF fieldstatus = 3 THEN fieldstatus = 1
         fieldtime# = 0
      END IF
   END IF
   PUT (xpplmove, ypplmove), mpship, AND
   PUT (xpplmove, ypplmove), pship, XOR
END IF
IF bossstatus$ <> "nonactive" AND bossstatus$ <> "destroyed" THEN
IF bosshit$ = "no" THEN
   PUT (xbossmove, ybossmove), mwarship, AND
   PUT (xbossmove, ybossmove), warship, XOR
END IF
END IF

END SUB

DEFSNG A-Z
SUB PLAYCHANGES
DEFINT A-Z

SELECT CASE levnum
   CASE 1
      SELECT CASE time
         CASE 1530
            starttime = 1530
         CASE 2980
            gamestatus$ = "leveldone"
         END SELECT
   CASE 2
      SELECT CASE time
         CASE 1 TO 100
            tflame# = tflame# + .2: bflame# = bflame# + .2
         CASE 820 TO 860
            tflame# = tflame# + 2
         CASE 1170 TO 1210
            tflame# = tflame# - .5
         CASE 1210 TO 1330
            tflame# = tflame# - .5: bflame# = bflame# + .5
         CASE 1330 TO 1370
            bflame# = bflame# + .5
         CASE 1500 TO 1540
            bflame# = bflame# - .5: tflame# = tflame# + .5
         CASE 1540 TO 1620
            bflame# = bflame# - .5
         CASE 1700
            starttime = 1700
         CASE 2350 TO 2430
            bflame# = bflame# + .5
         CASE 2430 TO 2470
            bflame# = bflame# + .5: tflame# = tflame# - .5
         CASE 2760 TO 2960
            bflame# = bflame# - .2: tflame# = tflame# + .2
         CASE 2960 TO 3120
            bflame# = bflame# - .25: tflame# = tflame# - .25
         CASE 3670
            gamestatus$ = "leveldone"
      END SELECT
   CASE 3
      SELECT CASE time
         CASE wintime
            IF bossstatus$ = "destroyed" THEN gamestatus$ = "leveldone"
         CASE 50 TO 150
            tflame# = tflame# + .2
            bflame# = bflame# + .2
         CASE 450 TO 550
            tflame# = tflame# - .2
            bflame# = bflame# - .2
         CASE 810
            bossstatus$ = "active1"
         CASE 810 TO 1010
            tflame# = tflame# - .2
            bflame# = bflame# + .2
         CASE 1010 TO 1410
            tflame# = tflame# + .2
            bflame# = bflame# - .2
         CASE 1410 TO 1610
            tflame# = tflame# - .2
            bflame# = bflame# + .2
         CASE IS > 1610
            IF bossstatus$ = "active2" THEN
               tflame# = tflame# + .1
               bflame# = bflame# + .1
            END IF
      END SELECT
END SELECT

END SUB

DEFSNG A-Z
SUB PLAYERCOMMAND
DEFINT A-Z

SELECT CASE select1$
   CASE CHR$(0) + CHR$(72)
      IF tpwing - pshipsp > 9 THEN ypplmove = ypplmove - pshipsp
   CASE CHR$(0) + CHR$(80)
      IF bpwing + pshipsp < 190 THEN ypplmove = ypplmove + pshipsp
   CASE CHR$(0) + CHR$(75)
      IF bkpwing - pshipsp > 9 THEN xpplmove = xpplmove - pshipsp
   CASE CHR$(0) + CHR$(77)
      IF fphead + pshipsp < 310 THEN xpplmove = xpplmove + pshipsp
   CASE CHR$(32)
      IF firedelay = 0 THEN
         FOR shotnum = 1 TO snumtotal
            IF firing$(shotnum) = "no" THEN
               firing$(shotnum) = "yes"
               firedelay = 1
               EXIT FOR
            END IF
         NEXT shotnum
      END IF
   CASE "p", "P"
      DO: LOOP UNTIL INKEY$ <> ""
   CASE "S", "s"
      IF gamesound$ = "active" THEN
         gamesound$ = "nonactive"
      ELSEIF gamesound$ = "nonactive" THEN
         gamesound$ = "active"
      END IF
   CASE "Q", "q"
      gamestatus$ = "noplay"
END SELECT

END SUB

DEFSNG A-Z
SUB PODEFFECTS
DEFINT A-Z

FOR pnum = 1 TO pnumtotal
   doso$ = "no"
   IF podtype$(pnum) <> "none" AND fpwing >= fpod(pnum) THEN
   IF bkpwing <= bkpod(pnum) AND tpwing <= bpod(pnum) THEN
   IF bpwing >= tpod(pnum) THEN
   doso$ = "yes"
   END IF
   END IF
   END IF
   IF podtype$(pnum) <> "none" AND fphead >= fpod(pnum) THEN
   IF bkphead <= bkpod(pnum) AND tphead <= bpod(pnum) THEN
   IF bphead >= tpod(pnum) THEN
   doso$ = "yes"
   END IF
   END IF
   END IF
   IF doso$ = "yes" THEN
      effect$ = "pod": CALL SOUNDEFFECTS
      SELECT CASE podtype$(pnum)
         CASE "life"
            effect$ = "life": CALL SOUNDEFFECTS
            shipdigit(1) = shipdigit(1) + 1
            IF shipdigit(1) = 10 THEN
               shipdigit(1) = 0: shipdigit(2) = shipdigit(2) + 1
            END IF
            IF shipdigit(2) = 10 THEN shipdigit(1) = 9: shipdigit(2) = 9
         CASE "point"
            sdigit(4) = sdigit(4) + 1
            CALL SCORE
         CASE "nuke"
            FOR enum = escr1 TO escr2
               efiring$(enum) = "no"
               IF eshipstatus$(enum) = "active" THEN
                  eshipstatus$(enum) = "destroyed"
                  sdigit(3) = sdigit(3) + 1
                  CALL SCORE
                  CALL ACTPOD
               END IF
            NEXT enum
            FOR flnum = fscr1 TO fscr2
               IF flarestatus$(flnum) = "active" THEN
                  flarestatus$(flnum) = "destroyed"
                  sdigit(3) = sdigit(3) + 5
                  CALL SCORE
               END IF
            NEXT flnum
         CASE "sp"
            pshipsp = pshipsp + 1
            IF pshipsp = 6 THEN pshipsp = 5
         CASE "weapon"
            SELECT CASE lasertype$
               CASE "standard"
                  lasertype$ = "double"
               CASE "double"
                  lasertype$ = "pulse"
               CASE "pulse"
                  lasertype$ = "super"
               CASE "super"
                  lasertype$ = "super"
            END SELECT
         CASE "field"
            fieldstatus = 1
            IF INSTR(code$, "forever") = 0 THEN
               fieldenergy = 6
            ELSE
               fieldenergy = 400
            END IF
            fieldtime# = 0
      END SELECT
      podtype$(pnum) = "none"
   END IF
NEXT pnum

END SUB

DEFSNG A-Z
SUB SCORE
DEFINT A-Z

IF sdigit(3) >= 10 THEN
   sdigit(3) = sdigit(3) - 10: sdigit(4) = sdigit(4) + 1
END IF
IF sdigit(4) >= 10 THEN
   sdigit(4) = sdigit(4) - 10: sdigit(5) = sdigit(5) + 1
   effect$ = "life": CALL SOUNDEFFECTS
   shipdigit(1) = shipdigit(1) + 1
   IF shipdigit(1) = 10 THEN
   shipdigit(1) = 0: shipdigit(2) = shipdigit(2) + 1
   END IF
   IF shipdigit(2) = 10 THEN shipdigit(1) = 9: shipdigit(2) = 9
END IF
IF sdigit(5) >= 10 THEN
sdigit(5) = sdigit(5) - 10: sdigit(6) = sdigit(6) + 1
END IF
IF sdigit(6) >= 10 THEN
sdigit(6) = 9: sdigit(5) = 9: sdigit(4) = 9: sdigit(3) = 9
END IF
change$ = "no"
FOR dnum = 6 TO 3 STEP -1
   IF change$ = "no" THEN
      IF sdigit(dnum) < hsdigit(dnum) THEN EXIT FOR
      IF sdigit(dnum) > hsdigit(dnum) THEN change$ = "yes"
   END IF
   IF change$ = "yes" THEN hsdigit(dnum) = sdigit(dnum)
NEXT dnum

END SUB

DEFSNG A-Z
SUB SOUNDEFFECTS
DEFINT A-Z

IF gamesound$ = "active" THEN
   SELECT CASE effect$
      CASE "yourlaser"
         PLAY "MB ML L60 O4 C#DE"
      CASE "projectile"
         PLAY "MB O3 ML L35 AG"
      CASE "bosslaser"
         PLAY "MB O3 ML L35 DEF"
      CASE "hitobject"
         PLAY "MB O3 ML L35 FEDG"
      CASE "hitship"
         PLAY "MB ML L40 O4 GECA O3 L25 FDB"
      CASE "life"
         PLAY "MB O3 L20 GCG"
      CASE "pod"
         PLAY "MB O3 L30 CFC"
      CASE "select"
         PLAY "MB O5 L50 G"
      CASE "hitfield"
         PLAY "MB ML L30 O2 C#DB"
   END SELECT
END IF

END SUB

DEFSNG A-Z
SUB STARS
DEFINT A-Z

IF stardir = 1 THEN
   ystarstart = 199: xstarstart = 319
ELSEIF stardir = -1 THEN
   ystarstart = 0: xstarstart = 319
END IF
FOR starnum = 1 TO 50
doso$ = "no"
IF starplacement$ = "yes" THEN doso$ = "yes"
IF xstar(starnum) - starsp(starnum) * stardir < 0 THEN doso$ = "yes"
IF ystar(starnum) - starsp * stardir < 0 THEN doso$ = "yes"
IF ystar(starnum) - starsp(starnum) * stardir > 199 THEN doso$ = "yes"
IF doso$ = "yes" THEN
     
      IF starplacement$ = "yes" THEN
         start = 3
      ELSE
         start = INT(RND * 3)
      END IF
      IF start = 1 OR start = 2 THEN
         ystar(starnum) = ystarstart: xstar(starnum) = INT(RND * 320)
      ELSEIF start = 0 THEN
         ystar(starnum) = INT(RND * 200): xstar(starnum) = xstarstart
      ELSEIF start = 3 THEN
         ystar(starnum) = INT(RND * 200): xstar(starnum) = INT(RND * 319)
      END IF
      IF startype$ = "warpsp" THEN
         starsp(starnum) = INT(RND * 3) + 3
         IF starsp(starnum) < 4 THEN starlook(starnum) = 1
         IF starsp(starnum) > 3 THEN starlook(starnum) = 9
      ELSE
         starsp(starnum) = INT(RND * 3) + 1
         IF starsp(starnum) < 2 THEN starlook(starnum) = 1
         IF starsp(starnum) > 1 THEN starlook(starnum) = 9
      END IF
   ELSE
      IF startype$ <> "nomove" THEN
         xstar(starnum) = xstar(starnum) - starsp(starnum)
         ystar(starnum) = ystar(starnum) - starsp(starnum) * stardir
      END IF
   END IF
   PSET (xstar(starnum), ystar(starnum)), starlook(starnum)
NEXT starnum
startime = startime + 1
IF startime = 200 THEN
   IF stardir = -1 THEN
      stardir = 1
   ELSEIF stardir = 1 THEN
      stardir = -1
   END IF
   startime = 0
END IF
starplacement$ = "no"

END SUB

DEFSNG A-Z
SUB STARTLEVEL
DEFINT A-Z

starplacement$ = "yes"
clearallkeys$ = "yes"
infodelay = 1
xlv(1) = 75: ylv(1) = 82: xlv(2) = 184: ylv(2) = 75: xlv(3) = 200: ylv(3) = 114: xlv(4) = 240: ylv(4) = 143
IF showmission$ = "yes" THEN
   DO
      time1# = TIMER
      SCREEN 7, 0, 1, 0: CLS : COLOR 15
      CALL CLEARKEYS
      LOCATE 2, 17: PRINT "STAGE"; levnum
      LINE (51, 36)-(268, 149), c1, B
      FOR lnum = 1 TO 41
      LINE (xmline1(lnum), ymline1(lnum))-(xmline2(lnum), ymline2(lnum)), c1
      NEXT lnum
      PAINT (267, 138), c2, c1: PAINT (52, 148), c2, c1
      LINE (49, 34)-(270, 151), 10, B: LINE (50, 35)-(269, 150), 15, B
      LINE (51, 36)-(268, 149), 10, B
      SELECT CASE levnum
         CASE 1
            LOCATE 4, 15: PRINT "SURFACE AREA"
            COLOR 10: LOCATE 21, 1
            PRINT "The surface of Octain is very unstable. ";
            PRINT "To reach the tunnels, you must lead your";
            PRINT "team of fighters some distance across   ";
            PRINT "the star. Good luck!                    ";
         CASE 2
            LOCATE 4, 13: PRINT "CAVERNS OF FIRE"
            COLOR 10: LOCATE 21, 1
            PRINT "These dangerous passageways must be     ";
            PRINT "travelled along in order to reach the   ";
            PRINT "star's core. Scanners show that the     ";
            PRINT "enemy will soon reach its destination.  ";
         CASE 3
            LOCATE 4, 14: PRINT "OCTAIN'S CORE"
            COLOR 10: LOCATE 21, 1
            PRINT "You are nearing the heart of the red   ";
            PRINT "giant. To destroy the star, the enemy  ";
            PRINT "ship will try to detonate an antiproton";
            PRINT "bomb. You must intercept it!           ";
      END SELECT
      FOR num = 1 TO levnum
         lnum = num - 1
         CIRCLE (xlv(num), ylv(num)), 4, 2: PAINT (xlv(num) - 1, ylv(num) - 1), 2, 2
         IF num >= 2 THEN
         LINE (xlv(lnum), ylv(lnum))-(xlv(num), ylv(num)), 2
         END IF
      NEXT num
      SELECT CASE infodelay
         CASE 1 TO 10
            LINE (xlv(levnum), ylv(levnum))-(xlv(levnum + 1), ylv(levnum + 1)), 2
            CIRCLE (xlv(levnum + 1), ylv(levnum + 1)), 4, 2:
            PAINT (xlv(levnum + 1) - 1, ylv(levnum + 1) - 1), 2, 2
            infodelay = infodelay + 1
         CASE 11 TO 19
            infodelay = infodelay + 1
         CASE 20
            infodelay = 1
      END SELECT
      PCOPY 1, 0
      DO: LOOP UNTIL TIMER - time1# > .02
   LOOP UNTIL select1$ = CHR$(13)
   effect$ = "select": CALL SOUNDEFFECTS
END IF
showmission$ = "no"
infodelay = 1

END SUB

DEFSNG A-Z
SUB STATISTICS
DEFINT A-Z

PUT (2, 2), mlS, AND: PUT (2, 2), lS, XOR
PUT (10, 2), mlC, AND: PUT (10, 2), lC, XOR
PUT (18, 2), mlO, AND: PUT (18, 2), lO, XOR
PUT (26, 2), mlR, AND: PUT (26, 2), lR, XOR
PUT (34, 2), mlE, AND: PUT (34, 2), lE, XOR
PUT (130, 2), mlH, AND: PUT (130, 2), lH, XOR
PUT (138, 2), mlI, AND: PUT (138, 2), lI, XOR
PUT (239, 2), mlS, AND: PUT (239, 2), lS, XOR
PUT (247, 2), mlH, AND: PUT (247, 2), lH, XOR
PUT (255, 2), mlI, AND: PUT (255, 2), lI, XOR
PUT (263, 2), mlP, AND: PUT (263, 2), lP, XOR
PUT (271, 2), mlS, AND: PUT (271, 2), lS, XOR
PUT (287, 2), mlX, AND: PUT (287, 2), lX, XOR
change$ = "none"
DO
   IF change$ = "hiscore" THEN change$ = "ships": len1 = 1: len2 = 2
   IF change$ = "score" THEN change$ = "hiscore": len1 = 1: len2 = 6
   IF change$ = "none" THEN change$ = "score": len1 = 1: len2 = 6
   FOR length = len2 TO len1 STEP -1
      IF change$ = "score" THEN
      scorechange = sdigit(length): xcoord = 98 - length * 8
      END IF
      IF change$ = "hiscore" THEN
      scorechange = hsdigit(length): xcoord = 202 - length * 8
      END IF
      IF change$ = "ships" THEN
      scorechange = shipdigit(length): xcoord = 319 - length * 8
      END IF
      SELECT CASE scorechange
         CASE 0
            PUT (xcoord, 2), mn0, AND: PUT (xcoord, 2), n0, XOR
         CASE 1
            PUT (xcoord, 2), mn1, AND: PUT (xcoord, 2), n1, XOR
         CASE 2
            PUT (xcoord, 2), mn2, AND: PUT (xcoord, 2), n2, XOR
         CASE 3
            PUT (xcoord, 2), mn3, AND: PUT (xcoord, 2), n3, XOR
         CASE 4
            PUT (xcoord, 2), mn4, AND: PUT (xcoord, 2), n4, XOR
         CASE 5
            PUT (xcoord, 2), mn5, AND: PUT (xcoord, 2), n5, XOR
         CASE 6
            PUT (xcoord, 2), mn6, AND: PUT (xcoord, 2), n6, XOR
         CASE 7
            PUT (xcoord, 2), mn7, AND: PUT (xcoord, 2), n7, XOR
         CASE 8
            PUT (xcoord, 2), mn8, AND: PUT (xcoord, 2), n8, XOR
         CASE 9
            PUT (xcoord, 2), mn9, AND: PUT (xcoord, 2), n9, XOR
      END SELECT
   NEXT length
LOOP UNTIL change$ = "ships"

END SUB

DEFSNG A-Z
SUB TITLESCREEN
DEFINT A-Z

lcolor = 10
highlight = 1
selection$ = "no"
code$ = ""
dif$ = "normal"
clearallkeys$ = "yes"
starplacement$ = "yes"
DO
   time1# = TIMER
   SCREEN 7, 0, 1, 0: CLS
   CALL CLEARKEYS: CALL STARS
   LINE (50, 27)-(267, 73), 15, BF
   FOR lnum = 1 TO 138
      LINE (xtline1(lnum), ytline1(lnum))-(xtline2(lnum), ytline2(lnum)), lcolor
   NEXT lnum
   LINE (49, 26)-(268, 74), lcolor, B
   LINE (48, 25)-(269, 75), 15, B
   LINE (47, 24)-(270, 76), 10, B
   PAINT (51, 28), 2, lcolor
   PAINT (81, 54), 2, lcolor
   PAINT (119, 54), 2, lcolor
   PAINT (138, 54), 2, lcolor
   PAINT (195, 54), 2, lcolor
   LINE (49, 26)-(268, 74), 10, B
   SELECT CASE select1$
      CASE CHR$(0) + CHR$(72)
         effect$ = "select": CALL SOUNDEFFECTS
         highlight = highlight - 1
         IF highlight < 1 THEN highlight = 5
      CASE CHR$(0) + CHR$(80)
         effect$ = "select": CALL SOUNDEFFECTS
         highlight = highlight + 1
         IF highlight > 5 THEN highlight = 1
      CASE CHR$(13), CHR$(0) + CHR$(77), CHR$(0) + CHR$(75)
         IF highlight = 3 THEN
            IF select1$ = CHR$(0) + CHR$(77) OR select1$ = CHR$(13) THEN
               IF dif$ = "easy" THEN
                  dif$ = "normal"
               ELSEIF dif$ = "normal" THEN
                  dif$ = "hard"
               ELSEIF dif$ = "hard" THEN
                  IF INSTR(code$, "oceanstar") > 0 THEN
                     dif$ = "insane"
                  ELSE
                     dif$ = "easy"
                  END IF
               ELSEIF dif$ = "insane" THEN
                  dif$ = "easy"
               END IF
            ELSEIF select1$ = CHR$(0) + CHR$(75) THEN
               IF dif$ = "easy" THEN
                  IF INSTR(code$, "oceanstar") > 0 THEN
                     dif$ = "insane"
                  ELSE
                     dif$ = "hard"
                  END IF
               ELSEIF dif$ = "normal" THEN
                  dif$ = "easy"
               ELSEIF dif$ = "hard" THEN
                  dif$ = "normal"
               ELSEIF dif$ = "insane" THEN
                  dif$ = "hard"
               END IF
            END IF
         effect$ = "select": CALL SOUNDEFFECTS
         ELSEIF highlight = 4 THEN
            IF gamesound$ = "active" THEN
               gamesound$ = "nonactive"
            ELSEIF gamesound$ = "nonactive" THEN
               gamesound$ = "active"
            END IF
         effect$ = "select": CALL SOUNDEFFECTS
         ELSE
            IF select1$ = CHR$(13) THEN
               selection$ = "yes": effect$ = "select": CALL SOUNDEFFECTS
            END IF
         END IF
      CASE "A" TO "Z", "a" TO "z"
         code$ = code$ + LCASE$(select1$)
         IF LEN(code$) > 30 THEN code$ = RIGHT$(code$, 30)
   END SELECT
   COLOR 15
   IF highlight = 1 THEN COLOR 10
   LOCATE 13, 15: PRINT "START": LOCATE 13, 21: PRINT "GAME": COLOR 15
   IF highlight = 2 THEN COLOR 10
   LOCATE 15, 15: PRINT "PLAY": LOCATE 15, 20: PRINT "INTRO": COLOR 15
   IF highlight = 3 THEN COLOR 10
   LOCATE 17, 15: PRINT "<"; UCASE$(dif$)
   LOCATE 17, LEN(dif$) + 17: PRINT "MODE>": COLOR 15
   IF gamesound$ = "active" THEN
      stext$ = "ON"
   ELSEIF gamesound$ = "nonactive" THEN
      stext$ = "OFF"
   END IF
   IF highlight = 4 THEN COLOR 10
   LOCATE 19, 15: PRINT "<SOUND": LOCATE 19, 22: PRINT stext$; ">": COLOR 15
   IF highlight = 5 THEN COLOR 10
   LOCATE 21, 15: PRINT "EXIT": COLOR 15
   SELECT CASE highlight
      CASE 1
         yarrow = 96: gamestatus$ = "startplay"
      CASE 2
         yarrow = 112: gamestatus$ = "intro"
      CASE 3
         yarrow = 128
      CASE 4
         yarrow = 144
      CASE 5
         yarrow = 160: gamestatus$ = "exit"
   END SELECT
   PUT (96, yarrow), marrow, AND: PUT (96, yarrow), arrow, XOR
   COLOR 11
   LOCATE 24, 3: PRINT "COPYRIGHT";
   LOCATE 24, 13: PRINT "1998";
   LOCATE 24, 18: PRINT "XFLARE";
   LOCATE 24, 25: PRINT "ENTERTAINMENT";
   PCOPY 1, 0
   IF lcolor = 10 THEN
      lcolor = 2
   ELSEIF lcolor = 2 THEN
      lcolor = 10
   END IF
   DO: LOOP UNTIL TIMER - time1# > .02
LOOP UNTIL selection$ = "yes"

END SUB

DEFSNG A-Z
SUB VICTORY
DEFINT A-Z

display = 1
clearallkeys$ = "yes"
cchange = 0
pcolor = 7
starplacement$ = "yes": startype$ = "nomove"
xship = 50: yship = 23
sunlook = c2
totalscore = sdigit(3) + sdigit(4) * 10 + sdigit(5) * 100 + sdigit(6) * 1000
hiscore = hsdigit(3) + hsdigit(4) * 10 + hsdigit(5) * 100 + hsdigit(6) * 1000
SELECT CASE totalscore
   CASE IS < 10
      drawscore1$ = "000#00"
   CASE IS < 100
      drawscore1$ = "00##00"
   CASE IS < 1000
      drawscore1$ = "0###00"
   CASE ELSE
      drawscore1$ = "####00"
END SELECT
SELECT CASE hiscore
   CASE IS < 10
      drawscore2$ = "000#00"
   CASE IS < 100
      drawscore2$ = "00##00"
   CASE IS < 1000
      drawscore2$ = "0###00"
   CASE ELSE
      drawscore2$ = "####00"
END SELECT
DO
   time1# = TIMER
   SCREEN 7, 0, 1, 0: CLS
   CALL CLEARKEYS: CALL STARS
   PSET (xship, yship), 8
   LINE (0, 120)-(320, 100), 11: PAINT (0, 121), pcolor, 11
   CIRCLE (50, 20), 1, c1: PAINT (50, 20), c2, c1
   LOCATE 20, 1: COLOR 10
   SELECT CASE display
      CASE 1
         PRINT "Cries of victory, and sobs of salvation ";
         PRINT "surround you and your crew as the doors ";
         PRINT "of your ship open to a long red carpet, ";
         PRINT "lined by the Planetary High Guard.      ";
         PRINT "Spectators toss flowers in your path as ";
         LOCATE 25, 1: PRINT "you make your way into the building at  ";
      CASE 2
         PRINT "its end, to await a ceremony by which   ";
         PRINT "you shall be awarded medals of honour,  ";
         PRINT "to forever remember the person who      ";
         PRINT "brought peace to a race on the verge of ";
         PRINT "extinction. Fireworks light the night   ";
         LOCATE 25, 1: PRINT "outside, as you celebrate until the     ";
      CASE 3
         PRINT "early hours of next morning. You meet   ";
         PRINT "someone the following day who makes a   ";
         PRINT "sudden proposal, and you decide to get  ";
         PRINT "married and have children. Your name has";
         PRINT "been recorded in Tenacian hisory, and   ";
         LOCATE 25, 1: PRINT "will never be forgotten. Until the end. ";
      CASE 4
         PRINT STRING$(40, " ");
         PRINT STRING$(40, " ");
         PRINT "          TOTAL SCORE: ";
         PRINT USING drawscore1$; totalscore; : PRINT STRING$(11, " ");
         PRINT STRING$(40, " ");
         PRINT "          HI SCORE:    ";
         PRINT USING drawscore2$; hiscore; : PRINT STRING$(11, " ");
         LOCATE 25, 1: PRINT STRING$(40, " ");
      CASE 5
         IF dif$ = "hard" AND special$ = "yes" THEN
            PRINT STRING$(40, " ");
            PRINT "Congratulations, you have truly won the ";
            PRINT "battle against the Celcians. Type in the";
            PRINT "word OCEANSTAR on the title screen for  ";
            PRINT "a top secret special mode of play, and a";
            LOCATE 25, 1: PRINT "whole new appearance!";
            PRINT STRING$(19, " ");
         ELSEIF dif$ = "insane" AND special$ = "yes" THEN
            PRINT STRING$(40, " ");
            PRINT "You have done what few may even hope of ";
            PRINT "accomplishing... Therefore, the game is ";
            PRINT "now in your command. Type in FOREVER on ";
            PRINT "the title screen, and go for a high     ";
            LOCATE 25, 1: PRINT "score!"; : PRINT STRING$(34, " ");
         ELSEIF dif$ = "normal" AND special$ = "yes" THEN
            PRINT STRING$(40, " ");
            PRINT STRING$(40, " ");
            PRINT "Good going! Type in FULLSTOP on the     ";
            PRINT "title screen for something special. Now ";
            PRINT "try beating the game on the Hard Mode...";
            LOCATE 25, 1: PRINT STRING$(40, " ");
         ELSEIF dif$ = "easy" AND special$ = "yes" THEN
            PRINT STRING$(40, " ");
            PRINT STRING$(40, " ");
            PRINT STRING$(40, " ");
            PRINT "  Good Job! Now try the Normal Mode...  ";
            PRINT STRING$(40, " ");
            LOCATE 25, 1: PRINT STRING$(40, " ");
         ELSE
            PRINT STRING$(40, " ");
            PRINT STRING$(40, " ");
            PRINT STRING$(40, " ");
            PRINT "  Cheater! Cheater! Cheater! Cheater!   ";
            PRINT STRING$(40, " ");
            LOCATE 25, 1: PRINT STRING$(40, " ");
         END IF
   END SELECT
   textdelay = textdelay + 1
 IF textdelay = 200 AND display < 5 THEN display = display + 1: textdelay = 0
   plmove = plmove + 1: IF plmove = 6 THEN plmove = 1
   IF plmove = 5 THEN xship = xship + 2: yship = yship + 1
   SELECT CASE c2
      CASE 12
         c2 = 4
      CASE 4
         c2 = 12
      CASE 9
         c2 = 3
      CASE 3
         c2 = 9
   END SELECT
   IF cchange = 3 THEN
      IF pcolor = 7 THEN
         pcolor = 3
      ELSEIF pcolor = 3 THEN
         pcolor = 7
      END IF
      cchange = 0
   END IF
   PCOPY 1, 0
   cchange = cchange + 1
   DO: LOOP UNTIL TIMER - time1# > .02
LOOP UNTIL select1$ = CHR$(13) AND display = 5
gamestatus$ = "noplay"
startype$ = "normal"

END SUB
