'Red Baron 2573 (Version 1.1)
'Programmed by Adam Stanchos
'On AOL:  AdamS60982    On Prodigy:  TCMP46B
DECLARE SUB AddBonusPoints (Score%, Ships%)
DECLARE SUB LoadImages ()
DECLARE SUB EnemyPic (Filename$, Xpos%, Ypos%)
DECLARE SUB Sunset (rxpos%, rypos%)
DECLARE SUB ExtraShipCheck (Score%, Ships%, GainShip%)
DECLARE SUB EnMove (n%, ShipType%)
DECLARE SUB EnemyShipPicture (n%, ShipType%)
DECLARE SUB Statistics (Score%, Ships%)
DECLARE SUB ExplosiveSound ()
DECLARE SUB Explosion (x%, Y%)
DECLARE SUB UpRight (x%, Y%)
DECLARE SUB UpLeft (x%, Y%)
DECLARE SUB DownLeft (x%, Y%)
DECLARE SUB DownRight (x%, Y%)
DECLARE SUB MoveLeft (x%)
DECLARE SUB MoveUp (Y%)
DECLARE SUB MoveDown (Y%)
DECLARE SUB RedBaron ()
DECLARE SUB RedShip ()
DECLARE SUB RedShipMask ()
DECLARE SUB EFighter ()
DECLARE SUB EFighterMask ()
DECLARE SUB EElite ()
DECLARE SUB EEliteMask ()
DECLARE SUB ECommandShip ()
DECLARE SUB ECommandShipMask ()
DECLARE SUB PrivateASCII ()
DECLARE SUB MoveRight (x%)
DECLARE SUB stars ()
DECLARE SUB MainScreen (HScore%, ASCII%)
DECLARE SUB HelpScreen ()
DECLARE SUB Intro ()
DECLARE SUB Conclusion ()
DECLARE SUB Keypad ()
DECLARE SUB Title ()
DECLARE SUB PlaceEShip (x%, Y%, ELXC%, ELYC%, NumberofShips%, ShipType%, OutOf%, Score%, Ships%, LostAShip%)
DECLARE SUB Update (x%, Y%, ELXC%, ELYC%, NumberofShips%, ShipType%, Score%, Ships%, LostAShip%)
DECLARE SUB Shoot (x%, Y%, RangeLeft%, RangeRight%, NumberofShips%, ShipType%, Score%, ShipPoints%, Hits%, TempHits%, HitsTotal%, Defeated%, Ships%, GainShip%)
DECLARE SUB EShoot (n%, x%, Y%, ELXC%, ELYC%, ShipType%, Ships%, LostAShip%)
DECLARE SUB WaveSetup (Wave%, ASCII%, RangeLeft%, RangeRight%, ELXC%, ELYC%, ShipPoints%, ShipType%, OutOf%, Hits%, HitsTotal%)
DECLARE SUB WaveInfo (Wave%, NumberofShips%, Score%, Ships%)
DECLARE SUB YouLose (Score%, Ships%)
DEFINT A-Z
  SCREEN 7, 0, 2, 0
  DEF SEG = &HA000
    DIM SHARED RBaron%(1 TO 6000), RBaronMask%(1 TO 6000)
    DIM SHARED RShip%(1 TO 500), RShipMask%(1 TO 500)
    DIM SHARED EFShip%(1 TO 500), EFShipMask%(1 TO 500)
    DIM SHARED ESShip%(1 TO 500), ESShipMask%(1 TO 500)
    DIM SHARED EEShip%(1 TO 500), EEShipMask%(1 TO 500)
    DIM SHARED ECShip%(1 TO 1500), ECShipMask%(1 TO 1500)
    DIM SHARED EICShip%(1 TO 1500), EICShipMask%(1 TO 1500)
    DIM SHARED ASCII%(1 TO 500)
      CALL LoadImages
      CALL PrivateASCII
    DEF FNR (x) = INT(RND * x) + 1
    DIM SHARED SX(20), SY(20), ST(20)
      FOR I = 1 TO 20  'sprinkle some stars
        SX(I) = FNR(319): SY(I) = FNR(199)
        ST(I) = FNR(2)
      NEXT
    DIM SHARED EX(5), EY(5), Laser(5), Enemy(5), Eshot(5)
    DIM SHARED TempHits(5)
    HScore% = 0
    SCREEN 7, 0, 1, 0
LetsStart:
    CLS
    Score% = 0: Ships% = 3: x% = 150: Y% = 170: ASCII% = 0
    Defeated = 0: Wave = 1: GainShip = 0
    CALL MainScreen(HScore%, ASCII%)
DetermineWave:
    IF Ships% < 1 AND Score% > HScore% THEN
      HScore% = Score%
    END IF
    IF Ships% < 1 THEN
      CALL YouLose(Score%, Ships%): GOTO LetsStart
    END IF
    IF Wave > 50 THEN
      PLAY "o2 l4e l8d e l2 g"
      CALL AddBonusPoints(Score, Ships)
      CALL Conclusion
      IF Score% > HScore% THEN HScore% = Score%
      GOTO LetsStart
    END IF
'------
    CALL WaveSetup(Wave, ASCII, RangeLeft, RangeRight, ELXC, ELYC, ShipPoints, ShipType, OutOf, Hits, HitsTotal)
    CALL WaveInfo(Wave, NumberofShips, Score%, Ships%)
      FOR n = 1 TO NumberofShips
        Laser(n) = -10: Enemy(n) = 1: EY(n) = 29: Eshot(n) = 0
        TempHits(n) = Hits
      NEXT
    EX(1) = 137: EX(2) = 90: EX(3) = 200: EX(4) = 40
    EX(5) = 250: x% = 140: Y% = 170: RANDOMIZE TIMER
    GOTO Update

KeyboardInput:
  CALL PlaceEShip(x, Y, ELXC, ELYC, NumberofShips, ShipType, OutOf, Score, Ships, LostAShip)
    IF LostAShip = 1 THEN
      LostAShip = 0: Defeated = 0: CALL Explosion(x%, Y%): GOTO DetermineWave
      END IF
    IF Defeated = NumberofShips THEN
      Defeated = 0: Wave = Wave + 1: GOTO DetermineWave
      END IF
  A$ = INKEY$
    IF A$ = CHR$(0) + CHR$(77) THEN
       CALL MoveRight(x%): GOTO Update
       END IF
    IF A$ = CHR$(0) + CHR$(75) THEN
       CALL MoveLeft(x%): GOTO Update
       END IF
    IF A$ = CHR$(0) + CHR$(72) THEN
       CALL MoveUp(Y%): GOTO Update
       END IF
    IF A$ = CHR$(0) + CHR$(80) THEN
       CALL MoveDown(Y%): GOTO Update
       END IF
    IF A$ = CHR$(0) + CHR$(73) THEN
       CALL UpRight(x%, Y%): GOTO Update
       END IF
    IF A$ = CHR$(0) + CHR$(71) THEN
       CALL UpLeft(x%, Y%): GOTO Update
       END IF
    IF A$ = CHR$(0) + CHR$(79) THEN
       CALL DownLeft(x%, Y%): GOTO Update
       END IF
    IF A$ = CHR$(0) + CHR$(81) THEN
       CALL DownRight(x%, Y%): GOTO Update
       END IF
    IF A$ = CHR$(32) THEN CALL Shoot(x, Y, RangeLeft, RangeRight, NumberofShips, ShipType, Score, ShipPoints, Hits, TempHits, HitsTotal, Defeated, Ships, GainShip)
    IF A$ = "q" OR A$ = "Q" THEN Ships% = 0: GOTO DetermineWave
  GOTO KeyboardInput

Update:
  SCREEN 7, 0, 1, 0
  CLS
  CALL stars
  PUT (x%, Y%), RShipMask%, AND
  PUT (x%, Y%), RShip%, XOR
    FOR n = 1 TO NumberofShips
      IF Enemy(n) = 0 THEN GOTO DoneWithIt
      CALL EnemyShipPicture(n, ShipType)
      IF Eshot(n) = 1 THEN CALL EShoot(n, x, Y, ELXC, ELYC, ShipType, Ships, LostAShip) 'lasers be shown?
DoneWithIt:
    NEXT
    CALL Statistics(Score%, Ships%)
  SCREEN 7, 0, 0, 0: PCOPY 1, 0
    IF LostAShip = 1 THEN
      LostAShip = 0: Defeated = 0: CALL Explosion(x%, Y%): GOTO DetermineWave
      END IF
GOTO KeyboardInput

SUB AddBonusPoints (Score, Ships)
  Bonus = Ships% * 100
  Score% = Score% + Bonus
    FOR times = 1 TO 100
      SCREEN 7, 0, 1, 0
      CLS
      CALL stars
      LOCATE 12, 11: COLOR 12: PRINT "Ships"
      LOCATE 12, 29: COLOR 7: PRINT Ships%
      LOCATE 14, 11: COLOR 12: PRINT "Bonus"
      LOCATE 14, 26: COLOR 7: PRINT "x 100"
      LINE (200, 115)-(238, 115), 11
      LOCATE 16, 11: COLOR 12: PRINT "Final Score"
      LOCATE 16, 26: COLOR 15: PRINT Score%
      CALL Statistics(Score%, Ships%)
      SCREEN 7, 0, 0, 0: PCOPY 1, 0
    NEXT
END SUB

SUB Conclusion
  rxpos = 300: rypos = 80
Conc1:
  FOR pause = 1 TO 10000: NEXT
  SCREEN 7, 0, 1, 0
  CLS : CALL Sunset(rxpos, rypos)
  LOCATE 17, 1: COLOR 7
  PRINT "     Successfully destroying the evil"
  PRINT "Vordoxian fleet, you return to Earth."
  PRINT "Crowds cheer as they see your ship"
  PRINT "flying through the evening sky,"
  PRINT "realizing that the earth has been"
  PRINT "saved by the Red Baron!"
  SCREEN 7, 0, 0, 0: PCOPY 1, 0
   A$ = INKEY$
   IF A$ = CHR$(13) THEN GOTO ConclusionDone
   GOTO Conc1
ConclusionDone:
END SUB

SUB DownLeft (x%, Y%)
  x% = x% - 5: Y% = Y% + 5
  IF x% < 20 THEN x% = 20
  IF Y% > 170 THEN Y% = 170
END SUB

SUB DownRight (x%, Y%)
  x% = x% + 5: Y% = Y% + 5
  IF x% > 250 THEN x% = 250
  IF Y% > 170 THEN Y% = 170
END SUB

SUB EnemyPic (Filename$, Xpos, Ypos)
  DIM Vordoxians%(1 TO 6000)
  DEF SEG = VARSEG(Vordoxians%(1))
  BLOAD Filename$, VARPTR(Vordoxians%(1))
  PUT (Xpos, Ypos), Vordoxians%, PSET
END SUB

SUB EnemyShipPicture (n, ShipType)
  IF ShipType = 1 THEN
    PUT (EX(n), EY(n)), EFShipMask%, AND
    PUT (EX(n), EY(n)), EFShip%, XOR
  END IF
  IF ShipType = 2 THEN
    PUT (EX(n), EY(n)), ESShipMask%, AND
    PUT (EX(n), EY(n)), ESShip%, XOR
  END IF
  IF ShipType = 3 THEN
    PUT (EX(n), EY(n)), ECShipMask%, AND
    PUT (EX(n), EY(n)), ECShip%, XOR
  END IF
  IF ShipType = 4 THEN
    PUT (EX(n), EY(n)), EEShipMask%, AND
    PUT (EX(n), EY(n)), EEShip%, XOR
  END IF
  IF ShipType = 5 THEN
    PUT (EX(n), EY(n)), ASCII%, PSET
  END IF
  IF ShipType = 6 THEN
    PUT (EX(n), EY(n)), EICShipMask%, AND
    PUT (EX(n), EY(n)), EICShip%, XOR
  END IF
END SUB

SUB EnMove (n, ShipType)
  Direction = INT(RND * 8) + 1
  IF Direction = 1 THEN EY(n) = EY(n) - 5
  IF Direction = 2 THEN EX(n) = EX(n) + 5: EY(n) = EY(n) - 5
  IF Direction = 3 THEN EX(n) = EX(n) + 5
  IF Direction = 4 THEN EX(n) = EX(n) + 5: EY(n) = EY(n) + 5
  IF Direction = 5 THEN EY(n) = EY(n) - 5
  IF Direction = 6 THEN EX(n) = EX(n) - 5: EY(n) = EY(n) + 5
  IF Direction = 7 THEN EX(n) = EX(n) - 5
  IF Direction = 8 THEN EX(n) = EX(n) - 5: EY(n) = EY(n) - 5
    IF EX(n) < 20 THEN EX(n) = 20
    IF EX(n) > 250 THEN EX(n) = 250
      IF ShipType = 3 AND EX(n) > 200 THEN EX(n) = 200
      IF ShipType = 6 AND EX(n) > 200 THEN EX(n) = 200
    IF EY(n) < 15 THEN EY(n) = 15
    IF EY(n) > 100 THEN EY(n) = 100
END SUB

SUB EShoot (n, x, Y, ELXC, ELYC, ShipType, Ships, LostAShip)
  LINE (EX(n) + 2, Laser(n))-(EX(n) + 2, Laser(n) + 5), 4
  LINE (EX(n) + ELXC, Laser(n))-(EX(n) + ELXC, Laser(n) + 5), 4
    IF Eshot(n) = 1 AND EX(n) + 2 > x - 1 AND EX(n) + 2 < x + 35 AND Laser(n) > Y - 1 AND Laser(n) < Y + 14 THEN
      Ships% = Ships% - 1: LostAShip = 1: GOTO EShootDone
    END IF 'right laser cannon
                              
    IF Eshot(n) = 1 AND EX(n) + ELXC > x - 1 AND EX(n) + ELXC < x + 35 AND Laser(n) > Y - 1 AND Laser(n) < Y + 14 THEN
      Ships% = Ships% - 1: LostAShip = 1: GOTO EShootDone
    END IF 'left laser cannon
    IF ShipType = 3 OR ShipType = 6 THEN GOSUB ExtraShoot
  IF Eshot(n) = 1 AND Laser(n) > 209 THEN Eshot(n) = 0
GOTO EShootDone

ExtraShoot:
  LINE (EX(n) + 17, Laser(n))-(EX(n) + 17, Laser(n) + 5), 1
  LINE (EX(n) + 73, Laser(n))-(EX(n) + 73, Laser(n) + 5), 1
    IF Eshot(n) = 1 AND EX(n) + 17 > x - 1 AND EX(n) + 2 < x + 35 AND Laser(n) > Y - 1 AND Laser(n) < Y + 14 THEN
      Ships% = Ships% - 1: LostAShip = 1: RETURN
    END IF 'right laser cannon
                             
    IF Eshot(n) = 1 AND EX(n) + 73 > x - 1 AND EX(n) + 73 < x + 35 AND Laser(n) > Y - 1 AND Laser(n) < Y + 14 THEN
      Ships% = Ships% - 1: LostAShip = 1: RETURN
    END IF 'left laser cannon
  IF Eshot(n) = 1 AND Laser(n) > 209 THEN Eshot(n) = 0
RETURN

EShootDone:
END SUB

SUB Explosion (x%, Y%)
  FOR Grow = 1 TO 5
    CIRCLE (x + 17, Y + 6), Grow, 14: NEXT
    CALL ExplosiveSound
  FOR Grow = 6 TO 8
    CIRCLE (x + 17, Y + 6), Grow, 12: NEXT
  FOR Grow = 9 TO 10
    CIRCLE (x + 17, Y + 6), Grow, 4: NEXT
END SUB

SUB ExplosiveSound
  FOR s = 850 TO 810 STEP -1
  SOUND (RND * 100 + s / 10 + 30), .1
  NEXT
END SUB

SUB ExtraShipCheck (Score%, Ships%, GainShip%)
    IF Score% >= 100 AND GainShip = 0 THEN
      Ships% = Ships% + 1: GainShip = 1
      GOSUB Toon: GOTO OutCheck
    END IF
    IF Score% >= 200 AND GainShip = 1 THEN
      Ships% = Ships% + 1: GainShip = 2
      GOSUB Toon: GOTO OutCheck
    END IF
    IF Score% >= 300 AND GainShip = 2 THEN
      Ships% = Ships% + 1: GainShip = 3
      GOSUB Toon: GOTO OutCheck
    END IF
    IF Score% >= 400 AND GainShip = 3 THEN
      Ships% = Ships% + 1: GainShip = 4
      GOSUB Toon: GOTO OutCheck
    END IF
    IF Score% >= 500 AND GainShip = 4 THEN
      Ships% = Ships% + 1: GainShip = 5
      GOSUB Toon: GOTO OutCheck
    END IF
    GOTO OutCheck
Toon:
  PLAY "mbo2l16ddeeffgg": RETURN
OutCheck:
END SUB

SUB HelpScreen
HelpPart1:
  SCREEN 7, 0, 1, 0
  CLS : LOCATE 25, 1: COLOR 5
    PRINT "Press     to exit or     for next page."
  LOCATE 25, 7: COLOR 11: PRINT "ESC"
  LOCATE 1, 1: COLOR 12: PRINT "Instructions"
  LOCATE 1, 30: COLOR 15: PRINT "Page 1 of 3"
  LINE (0, 9)-(319, 9), 4
  LOCATE 3, 1: COLOR 15
  PRINT "Blast your way through fifty waves of"
  LOCATE 4, 1: PRINT "Vordoxian scum to save the earth!"
    PUT (10, 48), RShip%, PSET
    PUT (15, 121), EFShip%, PSET
  LOCATE 8, 24: COLOR 14: PRINT "The Red Baron"
  LOCATE 10, 1: COLOR 7
    PRINT "Your fighter.  Armed with the latest in"
    PRINT "laser technology, the Red Baron's dual"
    PRINT "laser cannons will cut through an enemy"
    PRINT "fighter craft like a chainsaw through"
    PRINT "a teenager!  Or so I've heard..."
  LOCATE 17, 20: COLOR 14: PRINT "Vordoxian Fighter"
  LOCATE 19, 1: COLOR 7
    PRINT "The most common type of space craft"
    PRINT "employed by the enemy.  These ships"
    PRINT "are armed with two laser cannons,"
    PRINT "although not nearly as powerful as"
    PRINT "the Red Baron's."
  LOCATE 23, 19: COLOR 3: PRINT "(5 points)"
  LINE (173, 188)-(183, 198), 4, B
  PAINT (174, 189), 12, 4: LINE (178, 190)-(178, 196), 0
  LINE (177, 195)-(179, 195), 0
  LINE (176, 194)-(180, 194), 0
  PSET (182, 189), 15
  SCREEN 7, 0, 0, 0: PCOPY 1, 0
UserInput2:
   A$ = INKEY$
   IF A$ = CHR$(0) + CHR$(80) THEN GOTO HelpPart2
   IF A$ = CHR$(27) THEN GOTO HelpDone
   GOTO UserInput2
HelpPart2:
  SCREEN 7, 0, 1, 0
  CLS : LOCATE 25, 3: COLOR 5
    PRINT "Press     to exit or     or     ."
  LOCATE 25, 9: COLOR 11: PRINT "ESC"
  LOCATE 1, 1: COLOR 12: PRINT "Instructions"
  LOCATE 1, 30: COLOR 15: PRINT "Page 2 of 3"
  LINE (0, 9)-(319, 9), 4
    PUT (15, 13), ESShip%, PSET

  LOCATE 3, 20: COLOR 14: PRINT "Vordoxian Striker"
  LOCATE 5, 1: COLOR 7
    PRINT "The pilots of these ships are a little"
    PRINT "more trigger happy than the norm."
    PRINT "Always joined by fellow striking ships,"
    PRINT "they will often fire in sync."
  LOCATE 9, 1: COLOR 3: PRINT "(10 points)"
  LOCATE 12, 14: COLOR 14: PRINT "Vordoxian Elite Fighter"
  LOCATE 14, 1: COLOR 7
    PRINT "Not only do they fire like the Vordoxian"
    PRINT "Striker, but these ships also carry a"
    PRINT "deflector battery which reduce damage."
  LOCATE 17, 1: COLOR 3: PRINT "(20 points)"
  LOCATE 19, 3: COLOR 9: PRINT "?"
  LOCATE 19, 5: COLOR 10: PRINT "?"
  LOCATE 19, 12: COLOR 14: PRINT "Vordoxian Command Vessels"
  LOCATE 21, 1: COLOR 7
    PRINT "Chances are, the command ships leading"
    PRINT "the Vordoxian fleet are pretty powerful."
  LOCATE 23, 1: COLOR 3: PRINT "(Depending on type, 50 or 100 points)"
  LINE (188, 188)-(198, 198), 4, B
  PAINT (189, 189), 12, 4: LINE (193, 190)-(193, 196), 0
  LINE (192, 191)-(194, 191), 0
  LINE (191, 192)-(195, 192), 0
  PSET (197, 189), 15
  LINE (248, 188)-(258, 198), 4, B
  PAINT (249, 189), 12, 4: LINE (253, 190)-(253, 196), 0
  LINE (252, 194)-(254, 194), 0
  LINE (251, 193)-(255, 193), 0
  PSET (257, 189), 15
  SCREEN 7, 0, 0, 0: PCOPY 1, 0
UserInput3:
   A$ = INKEY$
   IF A$ = CHR$(0) + CHR$(80) THEN GOTO HelpPart3
   IF A$ = CHR$(0) + CHR$(72) THEN GOTO HelpPart1
   IF A$ = CHR$(27) THEN GOTO HelpDone
   GOTO UserInput3
HelpPart3:
  SCREEN 7, 0, 1, 0
  CLS : LOCATE 25, 1: COLOR 5
    PRINT "Press     to exit or     for prev page."
  LOCATE 25, 7: COLOR 11: PRINT "ESC"
  LOCATE 1, 1: COLOR 12: PRINT "Instructions"
  LOCATE 1, 30: COLOR 15: PRINT "Page 3 of 3"
  LINE (0, 9)-(319, 9), 4
  CALL Keypad
  LOCATE 5, 10: COLOR 7
  PRINT "Although you can use the"
  LOCATE 6, 10: PRINT "separate arrow keys, it's"
  LOCATE 7, 10: PRINT "recommended that you use"
  LOCATE 8, 10: PRINT "the keypad, as this will"
  LOCATE 9, 10: PRINT "allow you to move in all"
  LOCATE 10, 10: PRINT "eight directions."
  LOCATE 15, 1: PRINT "Press the"
  LOCATE 15, 11: COLOR 15: PRINT "SPACE BAR"
  LOCATE 15, 21: COLOR 7: PRINT "to fire."
  COLOR 3
  LOCATE 11, 10: PRINT "(Number Lock must be off.)"
  LOCATE 17, 1: COLOR 7
  PRINT "For every 100 points, up to 500, you"
  PRINT "will receive an extra ship."
  LOCATE 20, 1: COLOR 7
  PRINT "If you wish to end the game while"
  PRINT "playing, just press `"
  LOCATE 21, 22: COLOR 15: PRINT "q"
  LOCATE 21, 23: COLOR 7: PRINT "' to quit."
  LOCATE 23, 1: COLOR 3: PRINT "Programmed by Adam Stanchos"
  LINE (173, 188)-(183, 198), 4, B
  PAINT (174, 189), 12, 4: LINE (178, 190)-(178, 196), 0
  LINE (177, 191)-(179, 191), 0
  LINE (176, 192)-(180, 192), 0
  PSET (182, 189), 15
  SCREEN 7, 0, 0, 0: PCOPY 1, 0
UserInput4:
   A$ = INKEY$
   IF A$ = CHR$(0) + CHR$(72) THEN GOTO HelpPart2
   IF A$ = CHR$(27) THEN GOTO HelpDone
   GOTO UserInput4
HelpDone:
END SUB

SUB Intro
Intro1:
  SCREEN 7, 0, 1, 0
  CLS : CALL RedBaron: LOCATE 17, 1: COLOR 7
  PRINT "     The Red Baron.  That is what the"
  PRINT "media has called it.  The vigilante"
  PRINT "space craft has been known to appear"
  PRINT "in distant areas of space, aiding small"
  PRINT "colonies in defense from pirates and"
  PRINT "scavengers."
  SCREEN 7, 0, 0, 0: PCOPY 1, 0
   A$ = INKEY$
   IF A$ = CHR$(13) THEN GOTO Intro2
   GOTO Intro1
Intro2:
  SCREEN 7, 0, 1, 0
  CLS : CALL RedBaron: LOCATE 17, 1: COLOR 7
  PRINT "     No one knows who the pilot is."
  PRINT "A He?  She?  It?  The authorities have"
  PRINT "been desparate to catch the pilot."
  PRINT "Even more so now than before due to"
  PRINT "the recent events..."
  SCREEN 7, 0, 0, 0: PCOPY 1, 0
   A$ = INKEY$
   IF A$ = CHR$(13) THEN GOTO Intro3
   GOTO Intro2
Intro3:
  SCREEN 7, 0, 1, 0
  CLS : LOCATE 17, 1: COLOR 7
  PRINT "     An alien race, known as the"
  PRINT "Vordoxians, has declared war on mankind."
  PRINT "Their first attack was swift and deadly."
  PRINT "Capturing a distant communications"
  PRINT "outpost, the Vordoxians released the"
  PRINT "most powerful computer virus ever known"
  PRINT "to man."
SwitchPicture1:
  Filename$ = "RBVORDOX.ABS"
  Xpos = 70: Ypos = 20
  CALL EnemyPic(Filename$, Xpos, Ypos)
  SCREEN 7, 0, 0, 0: PCOPY 1, 0
I3:
   A$ = INKEY$
   IF A$ = CHR$(13) THEN GOTO Intro4
   GOTO I3
Intro4:
  SCREEN 7, 0, 1, 0
  CLS : LOCATE 17, 1: COLOR 7
  PRINT "     The virus infected everything."
  PRINT "No matter how well secure the system,"
  PRINT "the computer virus was able to penetrate"
  PRINT "its defenses.  After only twentyfour"
  PRINT "hours, virtually everything electronic"
  PRINT "was rendered useless."
  Filename$ = "RBVORDOX.ABS"
  Xpos = 70: Ypos = 20
  CALL EnemyPic(Filename$, Xpos, Ypos)
  SCREEN 7, 0, 0, 0: PCOPY 1, 0
I4:
   A$ = INKEY$
   IF A$ = CHR$(13) THEN GOTO Intro5
   GOTO I4
Intro5:
  SCREEN 7, 0, 1, 0
  CLS : LOCATE 17, 1: COLOR 7
  PRINT "     Astronomers, using nothing more"
  PRINT "than simple telescopes, then discovered"
  PRINT "the second part in this evil attack."
  PRINT "Hordes of Vordoxian fighters had been"
  PRINT "sighted entering Earth's solar system!"
  PRINT "Without a solid defense after the virus"
  PRINT "the end of the Human race was eminent."
SwitchPicture2:
  Filename$ = "RBHORDE.ABS"
  Xpos = 35: Ypos = 20
  CALL EnemyPic(Filename$, Xpos, Ypos)
  SCREEN 7, 0, 0, 0: PCOPY 1, 0
I5:
   A$ = INKEY$
   IF A$ = CHR$(13) THEN GOTO Intro6
   GOTO I5
Intro6:
  SCREEN 7, 0, 1, 0
  CLS : CALL RedBaron: LOCATE 17, 1: COLOR 7
  PRINT "     Then miraculously, the Red Baron"
  PRINT "was sighted!  Somehow escaping the"
  PRINT "clutches of the Vordoxian computer"
  PRINT "virus, the red ship was seen heading"
  PRINT "on an intercept course for the enemy."
  PRINT "Now the Red Baron was the last hope"
  PRINT "for the Human race..."
  SCREEN 7, 0, 0, 0: PCOPY 1, 0
   A$ = INKEY$
   IF A$ = CHR$(13) THEN GOTO IntroDone
   GOTO Intro6
IntroDone:
END SUB

SUB Keypad
  LINE (10, 35)-(20, 45), 8, B: PAINT (11, 36), 7, 8
  LINE (22, 35)-(32, 45), 8, B: PAINT (23, 36), 7, 8
  LINE (34, 35)-(44, 45), 8, B: PAINT (35, 36), 7, 8
  LINE (46, 35)-(56, 45), 8, B: PAINT (47, 36), 7, 8
  LINE (46, 47)-(56, 69), 8, B: PAINT (47, 48), 7, 8
  LINE (46, 71)-(56, 93), 8, B: PAINT (47, 73), 7, 8
  LINE (10, 83)-(32, 93), 8, B: PAINT (11, 84), 7, 8
  LINE (34, 83)-(44, 93), 8, B: PAINT (35, 84), 7, 8
  LINE (10, 47)-(20, 57), 7, B: PAINT (11, 48), 15, 7
  LINE (22, 47)-(32, 57), 7, B: PAINT (23, 48), 15, 7
  LINE (34, 47)-(44, 57), 7, B: PAINT (35, 48), 15, 7
  LINE (10, 59)-(20, 69), 7, B: PAINT (11, 60), 15, 7
  LINE (22, 59)-(32, 69), 7, B: PAINT (23, 60), 15, 7
  LINE (34, 59)-(44, 69), 7, B: PAINT (35, 60), 15, 7
  LINE (10, 71)-(20, 81), 7, B: PAINT (11, 72), 15, 7
  LINE (22, 71)-(32, 81), 7, B: PAINT (23, 72), 15, 7
  LINE (34, 71)-(44, 81), 7, B: PAINT (35, 72), 15, 7
  LINE (13, 50)-(17, 54), 0
  LINE (13, 51)-(14, 50), 0: LINE (13, 52)-(15, 50), 0
  LINE (27, 50)-(27, 54), 0
  LINE (26, 51)-(28, 51), 0: LINE (25, 52)-(29, 52), 0
  LINE (37, 54)-(41, 50), 0
  LINE (40, 50)-(41, 51), 0: LINE (39, 50)-(41, 52), 0
  LINE (13, 64)-(17, 64), 0
  LINE (14, 63)-(14, 65), 0: LINE (15, 62)-(15, 66), 0
  LINE (37, 64)-(41, 64), 0
  LINE (40, 63)-(40, 65), 0: LINE (39, 62)-(39, 66), 0
  LINE (13, 78)-(17, 74), 0
  LINE (13, 77)-(14, 78), 0: LINE (13, 76)-(15, 78), 0
  LINE (27, 74)-(27, 78), 0
  LINE (26, 77)-(28, 77), 0: LINE (25, 76)-(29, 76), 0
  LINE (37, 74)-(41, 78), 0
  LINE (40, 78)-(41, 77), 0: LINE (39, 78)-(41, 76), 0
END SUB

SUB LoadImages
  DEF SEG = VARSEG(RBaron%(1))
  BLOAD "RBSHIP.ABS", VARPTR(RBaron%(1))
  DEF SEG = VARSEG(RBaronMask%(1))
  BLOAD "RBSHIPM.ABS", VARPTR(RBaronMask%(1))
  DEF SEG = VARSEG(RShip%(1))
  BLOAD "RB1.ABS", VARPTR(RShip%(1))
  DEF SEG = VARSEG(RShipMask%(1))
  BLOAD "RB2.ABS", VARPTR(RShipMask%(1))
  DEF SEG = VARSEG(EFShip%(1))
  BLOAD "VF1.ABS", VARPTR(EFShip%(1))
  DEF SEG = VARSEG(EFShipMask%(1))
  BLOAD "VF2.ABS", VARPTR(EFShipMask%(1))
  DEF SEG = VARSEG(ESShip%(1))
  BLOAD "VS1.ABS", VARPTR(ESShip%(1))
  DEF SEG = VARSEG(ESShipMask%(1))
  BLOAD "VS2.ABS", VARPTR(ESShipMask%(1))
  DEF SEG = VARSEG(EEShipMask%(1))
  BLOAD "VE2.ABS", VARPTR(EEShipMask%(1))
  DEF SEG = VARSEG(ECShip%(1))
  BLOAD "VC1.ABS", VARPTR(ECShip%(1))
  DEF SEG = VARSEG(ECShipMask%(1))
  BLOAD "VC2.ABS", VARPTR(ECShipMask%(1))
  DEF SEG = VARSEG(EICShip%(1))
  BLOAD "VIC1.ABS", VARPTR(EICShip%(1))
  DEF SEG = VARSEG(EICShipMask%(1))
  BLOAD "VIC2.ABS", VARPTR(EICShipMask%(1))
END SUB

SUB MainScreen (HScore%, ASCII%)
Start:
  SCREEN 7, 0, 1, 0
  CLS : CALL Title
  LOCATE 12, 16: COLOR 9: PRINT "High Score:"
  LOCATE 13, 15: COLOR 11: PRINT HScore%
  LINE (90, 120)-(229, 183), 4, B
  LINE (91, 121)-(228, 182), 12, B
  LINE (92, 122)-(227, 181), 4, B
  COLOR 11: LOCATE 17, 18: PRINT "Select:"
  C1 = 15: C2 = 4: C3 = 4: C4 = 4
  highlight = 1
  SCREEN 7, 0, 0, 0: PCOPY 1, 0
DisplayText1:
  COLOR C1: LOCATE 19, 15: PRINT "Introduction"
  COLOR C2: LOCATE 20, 16: PRINT "Play Game"
  COLOR C3: LOCATE 21, 19: PRINT "Help"
  COLOR C4: LOCATE 22, 19: PRINT "Quit"

UserInput1:
   A$ = INKEY$
   IF A$ = CHR$(0) + CHR$(72) THEN
      highlight = highlight - 1: GOTO HightOfMyLight1
   END IF
   IF A$ = CHR$(0) + CHR$(80) THEN
      highlight = highlight + 1: GOTO HightOfMyLight1
   END IF
   IF A$ = CHR$(13) THEN GOTO DetermineSelection1
   IF A$ = "a" OR A$ = "A" THEN ASCII% = 1
   GOTO UserInput1
                                                    
HightOfMyLight1:
   IF highlight > 4 THEN highlight = 1
   IF highlight < 1 THEN highlight = 4
   IF highlight = 1 THEN C1 = 15: C2 = 4: C3 = 4: C4 = 4
   IF highlight = 2 THEN C2 = 15: C1 = 4: C3 = 4: C4 = 4
   IF highlight = 3 THEN C3 = 15: C1 = 4: C2 = 4: C4 = 4
   IF highlight = 4 THEN C4 = 15: C1 = 4: C2 = 4: C3 = 4
   GOTO DisplayText1
                                                    
DetermineSelection1:
  IF highlight = 1 THEN CALL Intro: GOTO Start
  IF highlight = 2 THEN GOTO Done1
  IF highlight = 3 THEN CALL HelpScreen: GOTO Start
  IF highlight = 4 THEN CLS : SYSTEM
  GOTO DisplayText1
Done1:
END SUB

SUB MoveDown (Y%)
  Y% = Y% + 5
  IF Y% > 170 THEN Y% = 170
END SUB

SUB MoveLeft (x%)
  x% = x% - 5
  IF x% < 20 THEN x% = 20
END SUB

SUB MoveRight (x%)
  x% = x% + 5
  IF x% > 250 THEN x% = 250
END SUB

SUB MoveUp (Y%)
  Y% = Y% - 5
  IF Y% < 100 THEN Y% = 100
END SUB

SUB PlaceEShip (x, Y, ELXC, ELYC, NumberofShips, ShipType, OutOf, Score, Ships, LostAShip)
  SCREEN 7, 0, 1, 0
  CLS
  CALL stars
    FOR n = 1 TO NumberofShips
      IF Enemy(n) = 0 THEN GOTO DoneWithShip2
    CALL EnMove(n, ShipType)
      CALL EnemyShipPicture(n, ShipType)
      IF Eshot(n) = 1 THEN
        Laser(n) = Laser(n) + 5: CALL EShoot(n, x, Y, ELXC, ELYC, ShipType, Ships, LostAShip)
        END IF
    Doesitshoot = INT(RND * OutOf) + 1
      IF Doesitshoot = 1 AND Eshot(n) = 0 THEN
        Eshot(n) = 1: Laser(n) = EY(n) + ELYC
        PLAY "o4mbl64 a": CALL EShoot(n, x, Y, ELXC, ELYC, ShipType, Ships, LostAShip)
        END IF
DoneWithShip2:
    NEXT
  PUT (x, Y), RShipMask%, AND
  PUT (x, Y), RShip%, XOR
  CALL Statistics(Score%, Ships%)
  SCREEN 7, 0, 0, 0: PCOPY 1, 0
END SUB

SUB PrivateASCII
  CLS : LOCATE 1, 3: COLOR 12: PRINT "O"
  LOCATE 2, 2: PRINT "/"
  LOCATE 2, 3: COLOR 10: PRINT "|"
  LOCATE 2, 4: COLOR 12: PRINT "\"
  LOCATE 3, 2: COLOR 9: PRINT "/ \"
  GET (8, 0)-(30, 22), ASCII%
  CLS
END SUB

SUB RedBaron
  PSET (10, 40), 9: PSET (280, 50), 9
  PSET (40, 90), 9: PSET (110, 15), 1
  PSET (30, 100), 1: PSET (150, 90), 9
  PSET (250, 70), 9: PSET (100, 100), 1
  PSET (200, 20), 9: PSET (290, 105), 1
  RDirect = INT(RND * 4) + 1
  IF RDirect = 1 THEN ry = -5
  IF RDirect = 2 THEN rx = 5
  IF RDirect = 3 THEN ry = 5
  IF RDirect = 4 THEN rx = -5
  PUT (25 + rx, 20 + ry), RBaronMask%, AND
  PUT (25 + rx, 20 + ry), RBaron%, XOR
  LDirect = INT(RND * 5) + 1
  IF LDirect = 1 THEN
    LINE (106 + rx, 59 + ry)-(166 + rx, 110 + ry), 1
    LINE (243 + rx, 59 + ry)-(303 + rx, 110 + ry), 1
  END IF
END SUB

SUB Shoot (x, Y, RangeLeft, RangeRight, NumberofShips, ShipType, Score, ShipPoints, Hits, TempHits, HitsTotal, Defeated, Ships, GainShip)
  LINE (x + 7, Y + 5)-(x + 7, 8), 1
  LINE (x + 27, Y + 5)-(x + 27, 8), 1
  PLAY "o4mbl64 a b"
    FOR n = 1 TO NumberofShips
      IF x + 5 > EX(n) - 3 AND x + 5 < EX(n) + RangeLeft THEN
        TempHits(n) = TempHits(n) + 1 'inflict a damage point
        FOR Grow = 1 TO 5
          CIRCLE (x + 7, EY(n) + 10), Grow, 14: NEXT
        CALL ExplosiveSound
        FOR Grow = 6 TO 8
          CIRCLE (x + 7, EY(n) + 10), Grow, 12: NEXT
        FOR Grow = 9 TO 10
          CIRCLE (x + 7, EY(n) + 10), Grow, 4: NEXT
            IF TempHits(n) > HitsTotal THEN
              TempHits(n) = Hits: GOSUB YouKillMeBaby
            END IF
      END IF  '-Left laser cannon-
ShootPart2:
      IF x + 26 > EX(n) - 2 AND x + 26 < EX(n) + RangeRight THEN
        TempHits(n) = TempHits(n) + 1 'inflict a damage point
        FOR Grow = 1 TO 5
          CIRCLE (x + 27, EY(n) + 10), Grow, 14: NEXT
        CALL ExplosiveSound
        FOR Grow = 6 TO 8
          CIRCLE (x + 27, EY(n) + 10), Grow, 12: NEXT
        FOR Grow = 9 TO 10
          CIRCLE (x + 27, EY(n) + 10), Grow, 4: NEXT
            IF TempHits(n) > HitsTotal THEN
              TempHits(n) = Hits: GOSUB YouKillMeBaby
            END IF
      END IF  '-Right laser cannon-
    NEXT
  GOTO DoneShoot

YouKillMeBaby:
  IF ShipType = 3 OR ShipType = 6 THEN GOSUB ExtraExplode
  EX(n) = -100: EY(n) = -50: Enemy(n) = 0
  Score% = Score% + ShipPoints%
  Defeated = Defeated + 1
  CALL ExtraShipCheck(Score%, Ships%, GainShip%)
RETURN

ExtraExplode:
  FOR Extra = 1 TO 4
    RANDOMIZE TIMER
    ExplodeX = INT(RND * 80) + 1
    ExplodeY = INT(RND * 40) + 1
    FOR Grow = 1 TO 5
      CIRCLE (EX(n) + ExplodeX, EY(n) + ExplodeY), Grow, 14: NEXT
      CALL ExplosiveSound
    FOR Grow = 6 TO 8
      CIRCLE (EX(n) + ExplodeX, EY(n) + ExplodeY), Grow, 12: NEXT
    FOR Grow = 9 TO 10
      CIRCLE (EX(n) + ExplodeX, EY(n) + ExplodeY), Grow, 4: NEXT
  NEXT Extra
'Final really big explosion
    FOR Grow = 1 TO 3
      CIRCLE (EX(n) + 45, EY(n) + 20), Grow, 15: NEXT
    FOR Grow = 4 TO 10
      CIRCLE (EX(n) + 45, EY(n) + 20), Grow, 14: NEXT
      CALL ExplosiveSound
    FOR Grow = 11 TO 16
      CIRCLE (EX(n) + 45, EY(n) + 20), Grow, 12: NEXT
    FOR Grow = 17 TO 20
      CIRCLE (EX(n) + 45, EY(n) + 20), Grow, 4: NEXT
      CALL ExplosiveSound
RETURN
DoneShoot:
END SUB

SUB stars
    FOR I = 1 TO 20
      IF ST(I) = 1 THEN C = 1 ELSE C = 9
      PSET (SX(I), SY(I)), C
      SY(I) = SY(I) + ST(I) + 1
      IF SY(I) > 199 THEN
        SY(I) = 0: SY(I) = FNR(1)
        ST(I) = FNR(2)
      END IF
    NEXT
END SUB

SUB Statistics (Score%, Ships%)
  LINE (7, 0)-(13, 7), 7, BF: LINE (13, 1)-(13, 7), 15
  LINE (7, 0)-(12, 0), 8: LINE (7, 1)-(7, 6), 8
  LINE (8, 7)-(13, 7), 15: LINE (304, 0)-(310, 7), 7, BF
  LINE (310, 1)-(310, 7), 15: LINE (304, 0)-(309, 0), 8
  LINE (304, 0)-(304, 6), 8: LINE (305, 7)-(310, 7), 15
  LINE (112, 0)-(215, 7), 7, BF: LINE (112, 0)-(112, 6), 8
  LINE (112, 0)-(214, 0), 8: LINE (215, 1)-(215, 7), 15
  LINE (113, 7)-(214, 7), 15
  LOCATE 1, 3: COLOR 4: PRINT "Score:"
  LOCATE 1, 9: COLOR 11: PRINT Score%
  LOCATE 1, 29: COLOR 10: PRINT "Ships:"
  LOCATE 1, 35: COLOR 11: PRINT Ships%
END SUB

SUB Sunset (rxpos, rypos)
  LINE (19, 40)-(300, 55), 4, BF
  LINE (19, 55)-(300, 70), 12, BF
  LINE (19, 70)-(300, 90), 14, BF
  LINE (19, 30)-(300, 30), 4
  LINE (19, 38)-(300, 38), 4: LINE (19, 35)-(300, 35), 4
  LINE (19, 45)-(300, 45), 12
  LINE (19, 50)-(300, 50), 12: LINE (19, 53)-(300, 53), 12
  LINE (19, 60)-(300, 60), 14
  LINE (19, 68)-(300, 68), 14: LINE (19, 65)-(300, 65), 14
  CIRCLE (155, 90), 20, 15
  PAINT (155, 90), 15, 15
  LINE (0, 91)-(319, 110), 0, BF
  LINE (19, 55)-(25, 60), 0: LINE (25, 60)-(35, 65), 0
  LINE (35, 65)-(44, 80), 0: LINE (44, 80)-(60, 90), 0
  PAINT (21, 60), 0, 0
  LINE (250, 90)-(270, 80), 0: LINE (270, 80)-(275, 75), 0
  LINE (276, 75)-(290, 90), 0: PAINT (260, 88), 0, 0
  PSET (100, 20), 1: PSET (250, 25), 8: PSET (50, 28), 8
  PSET (70, 36), 1: PSET (200, 33), 1: PSET (210, 10), 1
  PSET (20, 20), 9: PSET (55, 10), 9: PSET (170, 15), 9
  PSET (150, 13), 9: PSET (149, 13), 1: PSET (151, 13), 1
  PSET (150, 12), 1: PSET (150, 14), 1: PSET (280, 20), 1
  IF rxpos < 1 THEN rxpos = 300: rypos = 80
  rxpos = rxpos - 5: rypos = rypos - 1
  LINE (rxpos, rypos)-(rxpos + 3, rypos), 0, BF'ship
SunsetDone:
END SUB

SUB Title
  'r
  LINE (35, 10)-(75, 10), 4: LINE (35, 10)-(40, 15), 4
  LINE (40, 15)-(40, 30), 4: LINE (40, 30)-(35, 35), 4
  LINE (35, 35)-(55, 35), 4: LINE (55, 35)-(50, 30), 4
  LINE (50, 30)-(50, 15), 4: LINE (50, 15)-(65, 15), 4
  LINE (65, 15)-(85, 35), 4: LINE (75, 10)-(85, 20), 4
  LINE (55, 20)-(85, 20), 4: LINE (55, 20)-(65, 30), 4
  LINE (65, 30)-(60, 35), 4: LINE (60, 35)-(85, 35), 4
  'e
  LINE (85, 10)-(90, 15), 4: LINE (85, 10)-(135, 10), 4
  LINE (135, 10)-(130, 15), 4: LINE (130, 15)-(100, 15), 4
  LINE (90, 15)-(90, 30), 4: LINE (90, 30)-(85, 35), 4
  LINE (85, 35)-(135, 35), 4: LINE (135, 35)-(130, 30), 4
  LINE (130, 30)-(100, 30), 4: LINE (100, 15)-(100, 20), 4
  LINE (100, 30)-(100, 25), 4: LINE (100, 20)-(120, 20), 4
  LINE (100, 25)-(120, 25), 4: LINE (120, 20)-(120, 25), 4
  'd
  LINE (135, 10)-(175, 10), 4: LINE (135, 10)-(140, 15), 4
  LINE (140, 15)-(140, 30), 4: LINE (140, 30)-(135, 35), 4
  LINE (135, 35)-(175, 35), 4: LINE (150, 15)-(150, 30), 4
  LINE (150, 15)-(170, 15), 4: LINE (150, 30)-(170, 30), 4
  LINE (175, 10)-(185, 20), 4: LINE (175, 35)-(185, 25), 4
  LINE (185, 20)-(185, 25), 4: LINE (170, 15)-(175, 20), 4
  LINE (170, 30)-(175, 25), 4: LINE (175, 20)-(175, 25), 4
  'b
  LINE (35, 40)-(75, 40), 4: LINE (35, 40)-(40, 45), 4
  LINE (40, 45)-(40, 60), 4: LINE (40, 60)-(35, 65), 4
  LINE (35, 65)-(75, 65), 4: LINE (75, 40)-(85, 50), 4
  LINE (75, 65)-(85, 55), 4: LINE (85, 50)-(83, 52), 4
  LINE (85, 55)-(83, 53), 4: LINE (50, 45)-(70, 45), 4
  LINE (70, 45)-(75, 50), 4: LINE (75, 50)-(50, 50), 4
  LINE (50, 45)-(50, 50), 4: LINE (50, 60)-(70, 60), 4
  LINE (70, 60)-(75, 55), 4: LINE (75, 55)-(50, 55), 4
  LINE (50, 55)-(50, 60), 4
  'a
  LINE (110, 40)-(85, 65), 4: LINE (110, 40)-(135, 65), 4
  LINE (85, 65)-(105, 65), 4: LINE (105, 65)-(100, 60), 4
  LINE (100, 60)-(105, 55), 4: LINE (105, 55)-(115, 55), 4
  LINE (135, 65)-(115, 65), 4: LINE (115, 65)-(120, 60), 4
  LINE (120, 60)-(115, 55), 4
  'r
  LINE (135, 40)-(175, 40), 4: LINE (135, 40)-(140, 45), 4
  LINE (140, 45)-(140, 60), 4: LINE (140, 60)-(135, 65), 4
  LINE (135, 65)-(155, 65), 4: LINE (155, 65)-(150, 60), 4
  LINE (150, 60)-(150, 45), 4: LINE (150, 45)-(165, 45), 4
  LINE (165, 45)-(185, 65), 4: LINE (175, 40)-(185, 50), 4
  LINE (155, 50)-(185, 50), 4: LINE (155, 50)-(165, 60), 4
  LINE (165, 60)-(160, 65), 4: LINE (160, 65)-(185, 65), 4
  'o
  LINE (195, 40)-(225, 40), 4: LINE (195, 40)-(190, 45), 4
  LINE (225, 40)-(230, 45), 4: LINE (190, 45)-(190, 60), 4
  LINE (230, 45)-(230, 60), 4: LINE (190, 60)-(195, 65), 4
  LINE (230, 60)-(225, 65), 4: LINE (195, 65)-(225, 65), 4
  LINE (200, 45)-(220, 60), 4, B
  'n
  LINE (235, 40)-(240, 45), 4: LINE (240, 45)-(240, 60), 4
  LINE (240, 60)-(235, 65), 4: LINE (235, 40)-(250, 40), 4
  LINE (250, 40)-(265, 55), 4: LINE (235, 65)-(255, 65), 4
  LINE (255, 65)-(250, 60), 4: LINE (250, 60)-(250, 50), 4
  LINE (250, 50)-(265, 65), 4: LINE (265, 55)-(265, 40), 4
  LINE (265, 40)-(280, 40), 4: LINE (280, 40)-(275, 45), 4
  LINE (275, 45)-(275, 65), 4: LINE (275, 65)-(265, 65), 4
  PAINT (37, 11), 12, 4: PAINT (62, 34), 12, 4
  PAINT (87, 11), 12, 4: PAINT (137, 11), 12, 4
  PAINT (37, 41), 12, 4: PAINT (110, 41), 12, 4
  PAINT (137, 41), 12, 4: PAINT (162, 64), 12, 4
  PAINT (195, 41), 12, 4: PAINT (237, 41), 12, 4
  LINE (216, 25)-(245, 25), 12
  LOCATE 3, 28: COLOR 4: PRINT "2573"
END SUB

SUB Update (x, Y, ELXC, ELYC, NumberofShips, ShipType, Score, Ships, LostAShip)
END SUB

SUB UpLeft (x%, Y%)
  x% = x% - 5: Y% = Y% - 5
  IF x% < 20 THEN x% = 20
  IF Y% < 100 THEN Y% = 100
END SUB

SUB UpRight (x%, Y%)
  x% = x% + 5: Y% = Y% - 5
  IF x% > 250 THEN x% = 250
  IF Y% < 100 THEN Y% = 100
END SUB

SUB WaveInfo (Wave, NumberofShips, Score%, Ships%)
    IF Wave = 0 THEN NumberofShips = 5
    IF Wave = 1 THEN NumberofShips = 1
    IF Wave = 2 THEN NumberofShips = 2
    IF Wave = 3 THEN NumberofShips = 2
    IF Wave = 4 THEN NumberofShips = 3
    IF Wave = 5 THEN NumberofShips = 3
    IF Wave = 6 THEN NumberofShips = 3
    IF Wave = 7 THEN NumberofShips = 4
    IF Wave = 8 THEN NumberofShips = 4
    IF Wave = 9 THEN NumberofShips = 4
    IF Wave = 10 THEN NumberofShips = 4
    IF Wave = 11 THEN NumberofShips = 5
    IF Wave = 12 THEN NumberofShips = 5
    IF Wave = 13 THEN NumberofShips = 5
    IF Wave = 14 THEN NumberofShips = 5
    IF Wave = 15 THEN NumberofShips = 2
    IF Wave = 16 THEN NumberofShips = 5
    IF Wave = 17 THEN NumberofShips = 3
    IF Wave = 18 THEN NumberofShips = 4
    IF Wave = 19 THEN NumberofShips = 5
    IF Wave = 20 THEN NumberofShips = 5
    IF Wave = 21 THEN NumberofShips = 5
    IF Wave = 22 THEN NumberofShips = 5
    IF Wave = 23 THEN NumberofShips = 5
    IF Wave = 24 THEN NumberofShips = 5
    IF Wave = 25 THEN NumberofShips = 1
    IF Wave = 26 THEN NumberofShips = 5
    IF Wave = 27 THEN NumberofShips = 5
    IF Wave = 28 THEN NumberofShips = 5
    IF Wave = 29 THEN NumberofShips = 5
    IF Wave = 30 THEN NumberofShips = 1
    IF Wave = 31 THEN NumberofShips = 5
    IF Wave = 32 THEN NumberofShips = 5
    IF Wave = 33 THEN NumberofShips = 5
    IF Wave = 34 THEN NumberofShips = 5
    IF Wave = 35 THEN NumberofShips = 1
    IF Wave = 36 THEN NumberofShips = 2
    IF Wave = 37 THEN NumberofShips = 3
    IF Wave = 38 THEN NumberofShips = 4
    IF Wave > 38 AND Wave < 49 THEN NumberofShips = 5
    IF Wave = 49 THEN NumberofShips = 2
    IF Wave = 50 THEN NumberofShips = 1
    FOR times = 1 TO 40
      SCREEN 7, 0, 1, 0
      CLS
      CALL stars
      LOCATE 13, 18: COLOR 12: PRINT "Wave"; Wave
        IF Wave = 0 THEN
          LOCATE 14, 12: COLOR 15
          PRINT "ASCIIs in Space!!!"
        END IF
      CALL Statistics(Score%, Ships%)
      SCREEN 7, 0, 0, 0: PCOPY 1, 0
    NEXT
END SUB

SUB WaveSetup (Wave, ASCII, RangeLeft, RangeRight, ELXC, ELYC, ShipPoints, ShipType, OutOf, Hits, HitsTotal)
    IF ASCII% = 1 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      Wave = 0: ShipPoints% = 100: ShipType = 5: OutOf = 20
      Hits = 0: HitsTotal = 0
    END IF
    IF Wave = 1 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 5: ShipType = 1: OutOf = 20
      Hits = 0: HitsTotal = 0
    END IF
    IF Wave = 15 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 10: ShipType = 2: OutOf = 1
      Hits = 0: HitsTotal = 0
    END IF
    IF Wave = 16 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 5: ShipType = 1: OutOf = 20
      Hits = 0: HitsTotal = 0
    END IF
    IF Wave = 17 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 10: ShipType = 2: OutOf = 1
      Hits = 0: HitsTotal = 0
    END IF
    IF Wave = 20 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 5: ShipType = 1: OutOf = 20
      Hits = 0: HitsTotal = 0
    END IF
    IF Wave = 21 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 10: ShipType = 2: OutOf = 1
      Hits = 0: HitsTotal = 0
    END IF
    IF Wave = 25 THEN
      RangeLeft = 89: RangeRight = 90
      ELXC = 88: ELYC = 43: PLAY "mbo1l4dl16cl2f"
      ShipPoints% = 50: ShipType = 3: OutOf = 1
      Hits = 0: HitsTotal = 25
    END IF
    IF Wave = 26 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 5: ShipType = 1: OutOf = 20
      Hits = 0: HitsTotal = 0
    END IF
    IF Wave = 28 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 10: ShipType = 2: OutOf = 1
      Hits = 0: HitsTotal = 0
    END IF
    IF Wave = 30 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 20: ShipType = 4: OutOf = 1
      Hits = 0: HitsTotal = 4
    END IF
    IF Wave = 31 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 5: ShipType = 1: OutOf = 20
      Hits = 0: HitsTotal = 0
    END IF
    IF Wave = 32 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 10: ShipType = 2: OutOf = 1
      Hits = 0: HitsTotal = 0
    END IF
    IF Wave = 35 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 20: ShipType = 4: OutOf = 1
      Hits = 0: HitsTotal = 4
    END IF
    IF Wave = 46 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 5: ShipType = 1: OutOf = 20
      Hits = 0: HitsTotal = 0
    END IF
    IF Wave = 47 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 10: ShipType = 2: OutOf = 1
      Hits = 0: HitsTotal = 0
    END IF
    IF Wave = 48 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 20: ShipType = 4: OutOf = 1
      Hits = 0: HitsTotal = 4
    END IF
    IF Wave = 49 THEN
      RangeLeft = 89: RangeRight = 90
      ELXC = 88: ELYC = 43: PLAY "mbo1l4dl16cl2f"
      ShipPoints% = 100: ShipType = 3: OutOf = 1
      Hits = 0: HitsTotal = 25
    END IF
    IF Wave = 50 THEN
      RangeLeft = 89: RangeRight = 90
      ELXC = 88: ELYC = 43: PLAY "mbo1l4dl16cl2f"
      ShipPoints% = 100: ShipType = 6: OutOf = 1
      Hits = 0: HitsTotal = 75
    END IF
END SUB

SUB YouLose (Score%, Ships%)
  FOR times = 1 TO 50
    SCREEN 7, 0, 1, 0
    CLS
    CALL stars: CALL Statistics(Score%, Ships%)
    LOCATE 13, 17: COLOR 12: PRINT "Game Over"
    SCREEN 7, 0, 0, 0: PCOPY 1, 0
  NEXT
END SUB

