'===========================================================================
' Subject: RED BARON 2573                     Date: 04-06-96 (00:00)       
'  Author: Adam Stanchos                      Code: QB, QBasic, PDS        
'  Origin: pages.prodigy.com/gamersp        Packet: GAMES.ABC
'===========================================================================
'For best play performance, compile Red Baron into an .EXE!
'Reply with any comments or questions and enjoy the game!  
'Red Baron 2573.  Programmed by Adam Stanchos              
'On Prodigy:  TCMP46B    On AOL:  AdamS60982               
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 WaveInfo (Wave%, NumberofShips%, Score%, Ships%)
DECLARE SUB YouLose (Score%, Ships%)
DEFINT A-Z
  SCREEN 7, 0, 2, 0
    DEF SEG = &HA000
    DIM SHARED RShip%(1 TO 500), RShipMask%(1 TO 500)

    DIM SHARED EFShip%(1 TO 500), EFShipMask%(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 ASCII%(1 TO 500)
      CALL RedShip: CALL RedShipMask
      CALL EFighter: CALL EFighterMask
      CALL EElite: CALL EEliteMask
      CALL ECommandShip: CALL ECommandShipMask
      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)
    HScore% = 0
    SCREEN 7, 0, 1, 0
LetsStart:                                                 
    CLS
    Score% = 0: Ships% = 3: X% = 150: Y% = 170: ASCII% = 0
    Defeated = 0: Wave = 1: ShipPoints% = 5: 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 > 25 THEN
      CALL Conclusion
      IF Score% > HScore% THEN HScore% = Score%
      GOTO LetsStart
    END IF
'------                                                    
    IF ASCII% = 1 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      Wave = 0: ShipPoints% = 100: ShipType = 4: OutOf = 20
    END IF
    IF Wave = 1 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 5: ShipType = 1: OutOf = 20
    END IF
    IF Wave = 15 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 10: ShipType = 2: OutOf = 1
    END IF
    IF Wave = 16 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 5: ShipType = 1: OutOf = 20
    END IF
    IF Wave = 17 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 10: ShipType = 2: OutOf = 1

    END IF
    IF Wave = 20 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 5: ShipType = 1: OutOf = 20
    END IF
    IF Wave = 21 THEN
      RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
      ShipPoints% = 10: ShipType = 2: OutOf = 1
    END IF
    IF Wave = 25 THEN
      RangeLeft = 89: RangeRight = 90
      ELXC = 88: ELYC = 43: HitC = 0: PLAY "mbo1l4dl16cl2f"
      ShipPoints% = 50: ShipType = 3: OutOf = 1
    END IF
    CALL WaveInfo(Wave, NumberofShips, Score%, Ships%)
      FOR n = 1 TO NumberofShips
        Laser(n) = -10: Enemy(n) = 1: EY(n) = 29
        Eshot(n) = 0
      NEXT
    EX(1) = 137: EX(2) = 90: EX(3) = 200: EX(4) = 40
    EX(5) = 250: X% = 140: Y% = 170: RANDOMIZE TIMER
    GOSUB Update
                                                            
KeyboardInput:                                             
  a$ = INKEY$
    IF a$ = CHR$(0) + CHR$(77) THEN
       CALL MoveRight(X%): GOSUB Update
       END IF
    IF a$ = CHR$(0) + CHR$(75) THEN
       CALL MoveLeft(X%): GOSUB Update
       END IF
    IF a$ = CHR$(0) + CHR$(72) THEN
       CALL MoveUp(Y%): GOSUB Update
       END IF
    IF a$ = CHR$(0) + CHR$(80) THEN
       CALL MoveDown(Y%): GOSUB Update
       END IF
    IF a$ = CHR$(0) + CHR$(73) THEN
       CALL UpRight(X%, Y%): GOSUB Update
       END IF
    IF a$ = CHR$(0) + CHR$(71) THEN
       CALL UpLeft(X%, Y%): GOSUB Update
       END IF
    IF a$ = CHR$(0) + CHR$(79) THEN
       CALL DownLeft(X%, Y%): GOSUB Update
       END IF
    IF a$ = CHR$(0) + CHR$(81) THEN
       CALL DownRight(X%, Y%): GOSUB Update
       END IF
    IF a$ = CHR$(32) THEN GOSUB Shoot
    IF a$ = "q" THEN Ships% = 0: GOTO DetermineWave
  GOSUB PlaceEShip
    IF Lostaship = 1 THEN
      Lostaship = 0: Defeated = 0: GOTO DetermineWave
      END IF

    IF Defeated = NumberofShips THEN
      Defeated = 0: Wave = Wave + 1: GOTO DetermineWave
      END IF
  GOTO KeyboardInput
                                                            
Update:                                                    
  SCREEN 7, 0, 2, 0: PCOPY 1, 2
  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 GOSUB EShoot 'lasers be shown?      
DoneWithIt:                                                
    NEXT
    CALL Statistics(Score%, Ships%)
  SCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2
  RETURN
                                                            
PlaceEShip:                                                
  SCREEN 7, 0, 2, 0: PCOPY 1, 2
  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: GOSUB EShoot
        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": GOSUB EShoot
        END IF
DoneWithShip2:                                             
    NEXT
  PUT (X, Y), RShipMask%, AND
  PUT (X, Y), RShip%, XOR
  CALL Statistics(Score%, Ships%)
      IF Lostaship = 1 THEN CALL Explosion(X%, Y%)
  SCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2
  RETURN
                                                            
Shoot:                                                     
  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
        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 ShipType = 3 AND HitC > 100 THEN
              GOSUB YouKillMeBaby: RETURN
            END IF
            IF ShipType = 3 THEN
              HitC = HitC + 1: GOTO ShootPart2
            END IF
        GOSUB YouKillMeBaby
      END IF  '-Left laser cannon-                         

ShootPart2:                                                

      IF X + 26 > EX(n) - 2 AND X + 26 < EX(n) + RangeRight THEN
        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 ShipType = 3 AND HitC > 100 THEN
              GOSUB YouKillMeBaby: RETURN
            END IF
            IF ShipType = 3 THEN HitC = HitC + 1: RETURN
        GOSUB YouKillMeBaby
      END IF  '-Right laser cannon-                        
    NEXT
  RETURN
                                                            
YouKillMeBaby:                                             
  EX(n) = -10: EY(n) = -10: Enemy(n) = 0
  Score% = Score% + ShipPoints%
  Defeated = Defeated + 1
  CALL ExtraShipCheck(Score%, Ships%, GainShip%)
RETURN
                                                            
EShoot:                                                    
  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 + 12 THEN
      Ships% = Ships% - 1: Lostaship = 1: RETURN
    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 + 12 THEN
      Ships% = Ships% - 1: Lostaship = 1: RETURN
    END IF 'left laser cannon                              
    IF ShipType = 3 THEN GOSUB ExtraShoot
  IF Eshot(n) = 1 AND Laser(n) > 209 THEN Eshot(n) = 0
  RETURN
                                                            

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 + 12 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 + 12 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
                                                            
SUB Conclusion
  rxpos = 300: rypos = 80
Conc1:                                                     
  FOR pause = 1 TO 10000: NEXT
  SCREEN 7, 0, 2, 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 2, 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 ECommandShip
  CLS
  LINE (50, 10)-(54, 50), 8, B: PAINT (51, 11), 7, 8
  LINE (52, 11)-(52, 49), 15
  PSET (52, 10), 7: PSET (52, 50), 7
  PSET (50, 10), 0: PSET (54, 10), 0
  LINE (55, 11)-(57, 11), 1: LINE (58, 12)-(78, 12), 1
  LINE (78, 12)-(78, 32), 1: LINE (78, 32)-(58, 32), 1

  LINE (58, 32)-(55, 35), 1: LINE (55, 35)-(55, 11), 1
  LINE (77, 12)-(77, 32), 1: PAINT (56, 12), 9, 1
  LINE (58, 31)-(76, 31), 11: PSET (57, 32), 11
  LINE (65, 15)-(70, 15), 4: LINE (65, 18)-(70, 18), 4
  LINE (65, 20)-(70, 20), 4: LINE (65, 20)-(70, 32), 4, BF
  LINE (65, 31)-(70, 31), 12: PSET (77, 31), 9
  LINE (80, 8)-(90, 10), 8, B: PAINT (81, 9), 7, 8
  LINE (100, 8)-(110, 10), 8, B: PAINT (101, 9), 7, 8
  LINE (80, 12)-(80, 37), 1: LINE (80, 37)-(83, 40), 1
  LINE (83, 12)-(83, 40), 1: LINE (80, 12)-(83, 12), 1
  LINE (82, 12)-(82, 39), 1: PAINT (81, 13), 9, 1

  LINE (85, 11)-(85, 42), 1: LINE (85, 42)-(95, 52), 1
  LINE (85, 11)-(105, 11), 1: LINE (105, 11)-(105, 42), 1
  LINE (105, 42)-(95, 52), 1: PAINT (86, 12), 9, 1
  LINE (107, 12)-(107, 40), 1: LINE (108, 39)-(110, 37), 1
  LINE (110, 12)-(110, 36), 1: LINE (108, 12)-(110, 12), 1
  PAINT (109, 13), 9, 1: LINE (90, 12)-(90, 42), 1
  PSET (91, 43), 1: PSET (99, 43), 11
  LINE (92, 44)-(95, 44), 1: LINE (100, 12)-(100, 42), 11
  LINE (97, 44)-(98, 44), 11
  PSET (93, 41), 0: PSET (95, 41), 14
  PSET (94, 41), 6: PSET (96, 41), 15: PSET (97, 41), 0
  LINE (93, 40)-(97, 40), 0: LINE (94, 42)-(96, 42), 0
  LINE (112, 12)-(112, 32), 1: LINE (112, 12)-(132, 12), 1
  LINE (112, 32)-(132, 32), 1: LINE (133, 11)-(135, 11), 1
  LINE (135, 12)-(135, 35), 0: LINE (134, 11)-(134, 34), 1
  LINE (132, 32)-(135, 35), 1: PAINT (113, 13), 9, 1
  LINE (133, 11)-(133, 31), 1: LINE (114, 31)-(131, 31), 11
  LINE (120, 15)-(125, 15), 4: LINE (120, 18)-(125, 18), 4
  LINE (120, 20)-(125, 20), 4
  LINE (120, 20)-(125, 32), 4, BF
  LINE (120, 31)-(125, 31), 12
  LINE (136, 10)-(140, 50), 8, B
  PAINT (137, 11), 7, 8: LINE (138, 11)-(138, 49), 15
  PSET (138, 10), 7: PSET (138, 50), 7
  PSET (136, 10), 0: PSET (140, 10), 0
  LINE (65, 33)-(69, 50), 8, B: PAINT (66, 34), 7, 8
  LINE (67, 34)-(67, 49), 15
  PSET (67, 33), 7: PSET (67, 50), 7
  LINE (121, 33)-(125, 50), 8, B: PAINT (122, 34), 7, 8
  LINE (123, 34)-(123, 49), 15
  PSET (123, 33), 7: PSET (123, 50), 7
  GET (50, 8)-(140, 53), ECShip%
  CLS 'clean up screen                                     
END SUB

SUB ECommandShipMask
  CLS
  LINE (50, 8)-(79, 8), 15: LINE (50, 9)-(79, 9), 15
  LINE (54, 10)-(79, 10), 15: LINE (58, 11)-(79, 11), 15
  PSET (50, 10), 15: PSET (140, 10), 15
  LINE (91, 8)-(99, 10), 15, BF: LINE (111, 8)-(140, 8), 15
  LINE (111, 9)-(140, 9), 15: LINE (111, 10)-(136, 10), 15
  LINE (111, 11)-(132, 11), 15: LINE (50, 53)-(140, 53), 15
  LINE (50, 51)-(50, 52), 15: LINE (140, 51)-(140, 52), 15

  LINE (94, 52)-(80, 38), 15: LINE (79, 37)-(79, 33), 15
  LINE (78, 33)-(70, 33), 15: LINE (70, 33)-(70, 51), 15
  LINE (70, 51)-(64, 51), 15: LINE (64, 51)-(64, 33), 15
  LINE (64, 33)-(58, 33), 15: LINE (58, 33)-(55, 36), 15
  LINE (55, 36)-(55, 51), 15: LINE (55, 51)-(50, 51), 15
  PAINT (56, 52), 15, 15
  LINE (96, 52)-(110, 38), 15: LINE (111, 37)-(111, 33), 15
  LINE (112, 33)-(120, 33), 15
  LINE (120, 33)-(120, 51), 15
  LINE (120, 51)-(126, 51), 15
  LINE (126, 51)-(126, 33), 15
  LINE (126, 33)-(132, 33), 15
  LINE (133, 34)-(135, 36), 15
  LINE (135, 37)-(135, 51), 15
  LINE (135, 51)-(140, 51), 15
  PAINT (100, 49), 15, 15
  GET (50, 8)-(140, 53), ECShipMask%
  CLS 'clean up screen                                     
END SUB

SUB EElite
  CLS
  LINE (140, 100)-(144, 115), 5, B
  LINE (165, 100)-(161, 115), 5, B
  LINE (145, 105)-(150, 100), 5
  LINE (145, 110)-(150, 115), 5
  LINE (160, 105)-(155, 100), 5
  LINE (160, 110)-(155, 115), 5
  LINE (150, 100)-(155, 100), 5
  LINE (150, 115)-(155, 115), 5
  PAINT (151, 101), 13, 5: PAINT (141, 101), 13, 5
  PAINT (162, 101), 13, 5
  LINE (142, 100)-(142, 115), 13
  LINE (142, 101)-(142, 114), 15
  LINE (163, 100)-(163, 115), 13
  LINE (163, 101)-(163, 114), 15
  LINE (150, 111)-(155, 111), 0
  LINE (150, 112)-(155, 112), 0
  LINE (151, 113)-(154, 113), 0
  LINE (151, 112)-(154, 112), 9
  PSET (151, 112), 1: PSET (153, 112), 11
  LINE (151, 103)-(154, 103), 5
  LINE (151, 105)-(154, 105), 5
  LINE (151, 107)-(154, 107), 5
  GET (140, 100)-(165, 115), EEShip%
  CLS 'clean up screen                                     
END SUB

SUB EEliteMask
  CLS
  LINE (145, 100)-(149, 100), 15
  LINE (145, 100)-(145, 104), 15
  LINE (145, 104)-(149, 100), 15: PAINT (146, 101), 15
  LINE (156, 100)-(160, 100), 15
  LINE (160, 100)-(160, 104), 15

  LINE (160, 104)-(156, 100), 15: PAINT (158, 101), 15
  LINE (145, 115)-(149, 115), 15
  LINE (145, 115)-(145, 111), 15
  LINE (145, 111)-(149, 115), 15: PAINT (146, 114), 15
  LINE (156, 115)-(160, 115), 15
  LINE (156, 115)-(160, 111), 15
  LINE (160, 111)-(160, 115), 15: PAINT (158, 114), 15
  GET (140, 100)-(165, 115), EEShipMask%
  CLS 'clean up screen                                     
END SUB

SUB EFighter
  CLS
  LINE (150, 100)-(155, 100), 8
  LINE (149, 101)-(149, 109), 8
  LINE (156, 101)-(156, 109), 8
  LINE (148, 110)-(147, 111), 8
  LINE (157, 110)-(158, 111), 8
  LINE (145, 111)-(146, 111), 8
  LINE (159, 111)-(160, 111), 8
  LINE (140, 100)-(144, 115), 8, B
  LINE (165, 100)-(161, 115), 8, B
  LINE (145, 113)-(150, 115), 8
  LINE (151, 115)-(156, 115), 8
  LINE (157, 114)-(158, 114), 8
  LINE (159, 114)-(160, 113), 8
  PAINT (151, 101), 7, 8: PAINT (141, 101), 7, 8
  PAINT (162, 101), 7, 8
  LINE (142, 100)-(142, 115), 7
  LINE (142, 101)-(142, 114), 15
  LINE (163, 100)-(163, 115), 7
  LINE (163, 101)-(163, 114), 15
  LINE (150, 111)-(155, 111), 0
  LINE (150, 112)-(155, 112), 0
  LINE (151, 113)-(154, 113), 0
  LINE (151, 112)-(154, 112), 9
  PSET (151, 112), 1: PSET (153, 112), 11
  LINE (151, 103)-(154, 103), 8
  LINE (151, 105)-(154, 105), 8
  LINE (151, 107)-(154, 107), 8
  GET (140, 100)-(165, 115), EFShip%
  CLS 'clean up screen                                     
END SUB

SUB EFighterMask
  CLS
  LINE (145, 100)-(147, 110), 15, BF
  LINE (148, 100)-(148, 109), 15
  LINE (158, 100)-(160, 110), 15, BF
  LINE (157, 100)-(157, 109), 15
  LINE (145, 115)-(148, 115), 15
  LINE (157, 115)-(160, 115), 15
  PSET (145, 114), 15: PSET (160, 114), 15
  PSET (149, 100), 15: PSET (156, 100), 15
  GET (140, 100)-(165, 115), EFShipMask%

  CLS 'clean up screen                                     
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)), EEShipMask%, AND
    PUT (EX(n), EY(n)), EEShip%, 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)), ASCII%, PSET
  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 EY(n) < 15 THEN EY(n) = 15
    IF EY(n) > 100 THEN EY(n) = 100
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, 2, 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 twentyfive waves"
  LOCATE 4, 1: PRINT "of 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 2, 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, 2, 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), EEShip%, PSET
  LOCATE 3, 14: COLOR 14: PRINT "Vordoxian Elite Fighter"
  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 Elite ships,"
    PRINT "they will often fire in sync."
  LOCATE 9, 1: COLOR 3: PRINT "(10 points)"
  LOCATE 12, 4: COLOR 9: PRINT "?"
  LOCATE 12, 13: COLOR 14: PRINT "Vordoxian Command Vessel"
  LOCATE 14, 1: COLOR 7
    PRINT "Chances are, the command ship leading"
    PRINT "the Vordoxian fighters is pretty"
    PRINT "powerful."
  LOCATE 16, 12: COLOR 3: PRINT "(50 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 2, 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, 2, 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."
  SCREEN 7, 0, 0, 0: PCOPY 2, 0
  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
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, 2, 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 2, 0
   a$ = INKEY$
   IF a$ = CHR$(13) THEN GOTO Intro2
   GOTO Intro1
Intro2:                                                    
  SCREEN 7, 0, 2, 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 2, 0
   a$ = INKEY$
   IF a$ = CHR$(13) THEN GOTO Intro3
   GOTO Intro2
Intro3:                                                    
  SCREEN 7, 0, 2, 0
  CLS : CALL RedBaron: 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."
  SCREEN 7, 0, 0, 0: PCOPY 2, 0
   a$ = INKEY$
   IF a$ = CHR$(13) THEN GOTO Intro4
   GOTO Intro3
Intro4:                                                    
  SCREEN 7, 0, 2, 0
  CLS : CALL RedBaron: 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."
  SCREEN 7, 0, 0, 0: PCOPY 2, 0
   a$ = INKEY$
   IF a$ = CHR$(13) THEN GOTO Intro5
   GOTO Intro4
Intro5:                                                    
  SCREEN 7, 0, 2, 0
  CLS : CALL RedBaron: 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."
  SCREEN 7, 0, 0, 0: PCOPY 2, 0
   a$ = INKEY$
   IF a$ = CHR$(13) THEN GOTO Intro6
   GOTO Intro5
Intro6:                                                    
  SCREEN 7, 0, 2, 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 2, 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 MainScreen (HScore%, ASCII%)
Start:                                                     
  SCREEN 7, 0, 2, 0
  CLS : CALL Title
  LOCATE 12, 16: COLOR 9: PRINT "High Score:"
  LOCATE 13, 15: COLOR 11: PRINT HScore%

  LINE (99, 120)-(220, 183), 4, B
  LINE (100, 121)-(219, 182), 12, B
  LINE (101, 122)-(218, 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 2, 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 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
  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
  CIRCLE (125 + rx, 80 + ry), 11, 4
  PAINT (130 + rx, 85 + ry), 4, 4
  CIRCLE (125 + rx, 80 + ry), 8, 0
  CIRCLE (125 + rx, 80 + ry), 2, 0
  PAINT (125 + rx, 80 + ry), 0, 0
  LINE (90 + rx, 60 + ry)-(115 + rx, 85 + ry), 4
  LINE (100 + rx, 50 + ry)-(135 + rx, 75 + ry), 4
  LINE (100 + rx, 50 + ry)-(97 + rx, 49 + ry), 4
  LINE (97 + rx, 49 + ry)-(90 + rx, 50 + ry), 4
  LINE (89 + rx, 51 + ry)-(88 + rx, 52 + ry), 4
  LINE (88 + rx, 52 + ry)-(88 + rx, 56 + ry), 4
  LINE (88 + rx, 57 + ry)-(89 + rx, 59 + ry), 4
  PAINT (92 + rx, 60 + ry), 12, 4
  LINE (95 + rx, 50 + ry)-(122 + rx, 70 + ry), 15
  CIRCLE (225 + rx, 80 + ry), 11, 4
  PAINT (230 + rx, 85 + ry), 4, 4
  CIRCLE (225 + rx, 80 + ry), 8, 0
  CIRCLE (225 + rx, 80 + ry), 2, 0
  PAINT (225 + rx, 80 + ry), 0, 0
  LINE (180 + rx, 60 + ry)-(215 + rx, 85 + ry), 4
  LINE (190 + rx, 50 + ry)-(234 + rx, 74 + ry), 4
  LINE (190 + rx, 50 + ry)-(187 + rx, 49 + ry), 4
  LINE (187 + rx, 49 + ry)-(180 + rx, 50 + ry), 4
  LINE (179 + rx, 51 + ry)-(178 + rx, 52 + ry), 4
  LINE (178 + rx, 52 + ry)-(178 + rx, 56 + ry), 4
  LINE (178 + rx, 57 + ry)-(179 + rx, 59 + ry), 4
  PAINT (192 + rx, 60 + ry), 12, 4
  LINE (185 + rx, 50 + ry)-(221 + rx, 70 + ry), 15
  LINE (118 + rx, 55 + ry)-(165 + rx, 55 + ry), 4
  LINE (118 + rx, 55 + ry)-(113 + rx, 58 + ry), 4
  LINE (166 + rx, 55 + ry)-(184 + rx, 58 + ry), 4

  LINE (185 + rx, 59 + ry)-(205 + rx, 71 + ry), 4
  LINE (205 + rx, 71 + ry)-(185 + rx, 71 + ry), 4
  LINE (192 + rx, 71 + ry)-(205 + rx, 75 + ry), 4, BF
  LINE (130 + rx, 71 + ry)-(145 + rx, 71 + ry), 4
  LINE (135 + rx, 75 + ry)-(145 + rx, 75 + ry), 4
  LINE (145 + rx, 71 + ry)-(145 + rx, 75 + ry), 4
  LINE (145 + rx, 71 + ry)-(180 + rx, 96 + ry), 4
  LINE (155 + rx, 82 + ry)-(180 + rx, 100 + ry), 4
  LINE (140 + rx, 75 + ry)-(150 + rx, 82 + ry), 4
  LINE (150 + rx, 82 + ry)-(155 + rx, 82 + ry), 4
  LINE (147 + rx, 74 + ry)-(147 + rx, 76 + ry), 4
  LINE (147 + rx, 76 + ry)-(145 + rx, 78 + ry), 4
  LINE (185 + rx, 71 + ry)-(220 + rx, 96 + ry), 4
  PAINT (190 + rx, 72 + ry), 4, 4
  LINE (180 + rx, 96 + ry)-(191 + rx, 102 + ry), 4
  LINE (180 + rx, 100 + ry)-(190 + rx, 103 + ry), 4
  LINE (220 + rx, 96 + ry)-(221 + rx, 100 + ry), 4
  LINE (220 + rx, 101 + ry)-(215 + rx, 103 + ry), 4
  LINE (214 + rx, 103 + ry)-(205 + rx, 104 + ry), 4
  LINE (204 + rx, 104 + ry)-(195 + rx, 103 + ry), 4
  LINE (195 + rx, 103 + ry)-(189 + rx, 103 + ry), 4
  PAINT (170 + rx, 90 + ry), 4, 4
  PAINT (188 + rx, 102 + ry), 4, 4
  PAINT (180 + rx, 70 + ry), 12, 4
  PAINT (140 + rx, 72 + ry), 4, 4
  LINE (179 + rx, 59 + ry)-(194 + rx, 70 + ry), 12
  PSET (120 + rx, 62 + ry), 4: PSET (125 + rx, 65 + ry), 4
  PSET (179 + rx, 100 + ry), 0
  PSET (181 + rx, 101 + ry), 0
  LINE (184 + rx, 90 + ry)-(205 + rx, 90 + ry), 0
  LINE (184 + rx, 90 + ry)-(190 + rx, 95 + ry), 0
  LINE (191 + rx, 95 + ry)-(197 + rx, 96 + ry), 0
  LINE (205 + rx, 90 + ry)-(210 + rx, 93 + ry), 0
  LINE (211 + rx, 94 + ry)-(207 + rx, 96 + ry), 0
  LINE (207 + rx, 96 + ry)-(198 + rx, 96 + ry), 0
  PAINT (200 + rx, 91 + ry), 14, 0
  CIRCLE (193 + rx, 93 + ry), 1, 15
  LINE (191 + rx, 93 + ry)-(195 + rx, 93 + ry), 15
  LINE (200 + rx, 95 + ry)-(206 + rx, 95 + ry), 6
  LINE (207 + rx, 94 + ry)-(208 + rx, 94 + ry), 6
  PSET (194 + rx, 95 + ry), 6
  PSET (205 + rx, 91 + ry), 6
  LINE (207 + rx, 92 + ry)-(208 + rx, 93 + ry), 6
  LINE (70 + rx, 73 + ry)-(106 + rx, 73 + ry), 4
  LINE (106 + rx, 73 + ry)-(98 + rx, 65 + ry), 4
  LINE (102 + rx, 72 + ry)-(96 + rx, 66 + ry), 12
  LINE (70 + rx, 73 + ry)-(98 + rx, 65 + ry), 4
  PAINT (75 + rx, 72 + ry), 12, 4
  LINE (234 + rx, 73 + ry)-(245 + rx, 73 + ry), 4
  LINE (245 + rx, 73 + ry)-(220 + rx, 66 + ry), 4
  PAINT (238 + rx, 72 + ry), 12, 4
  PSET (224 + rx, 68 + ry), 12
  PSET (114 + rx, 83 + ry), 12
  LINE (160 + rx, 75 + ry)-(175 + rx, 85 + ry), 4
  LINE (183 + rx, 75 + ry)-(198 + rx, 85 + ry), 4

  LINE (150 + rx, 59 + ry)-(145 + rx, 64 + ry), 15
  LINE (146 + rx, 65 + ry)-(168 + rx, 70 + ry), 4
  LINE (151 + rx, 59 + ry)-(168 + rx, 62 + ry), 4
  LINE (168 + rx, 63 + ry)-(169 + rx, 70 + ry), 4
  LINE (129 + rx, 71 + ry)-(130 + rx, 71 + ry), 0
  LINE (131 + rx, 72 + ry)-(132 + rx, 72 + ry), 0
  LINE (132 + rx, 72 + ry)-(135 + rx, 75 + ry), 0
  LDirect = INT(RND * 5) + 1
  IF LDirect = 1 THEN
    LINE (125 + rx, 80 + ry)-(165 + rx, 110 + ry), 1
    LINE (225 + rx, 80 + ry)-(275 + rx, 110 + ry), 1
  END IF
  PSET (10, 40), 9: PSET (280, 50), 9
  PSET (40, 90), 9: PSET (110, 35), 1
  PSET (30, 100), 1: PSET (150, 90), 9
  PSET (250, 70), 9: PSET (100, 100), 1
  PSET (200, 45), 9: PSET (290, 105), 1
END SUB

SUB RedShip
  CLS
  LINE (140, 150)-(144, 160), 4, B
  PAINT (141, 151), 12, 4
  LINE (142, 150)-(142, 160), 12
  LINE (142, 151)-(142, 159), 15
  PSET (140, 160), 0: PSET (144, 160), 0
  LINE (145, 158)-(148, 160), 4
  LINE (149, 160)-(156, 160), 4
  LINE (159, 158)-(157, 160), 4
  LINE (145, 153)-(148, 153), 4
  LINE (159, 153)-(156, 153), 4
  LINE (148, 153)-(148, 145), 4
  LINE (156, 153)-(156, 145), 4
  LINE (149, 144)-(153, 143), 4
  LINE (154, 143)-(156, 145), 4
  LINE (160, 150)-(164, 160), 4, B
  PAINT (150, 150), 12, 4
  LINE (151, 154)-(149, 156), 4
  LINE (149, 156)-(151, 158), 4
  LINE (153, 154)-(155, 156), 15
  LINE (153, 158)-(154, 157), 15
  PSET (152, 154), 4: PSET (152, 158), 15
  LINE (150, 147)-(154, 147), 0
  PSET (150, 146), 0: PSET (154, 146), 0
  LINE (151, 145)-(153, 145), 0
  LINE (151, 146)-(153, 146), 6
  PSET (152, 146), 14: PSET (153, 146), 15
  PAINT (161, 151), 12, 4
  LINE (162, 150)-(162, 160), 12
  LINE (162, 151)-(162, 159), 15
  PSET (160, 160), 0: PSET (164, 160), 0
  LINE (135, 153)-(139, 153), 4
  LINE (135, 153)-(139, 155), 4
  LINE (165, 153)-(169, 153), 4
  LINE (165, 155)-(166, 155), 4

  LINE (167, 154)-(168, 154), 4
  LINE (138, 154)-(139, 154), 12
  LINE (165, 154)-(166, 154), 12
  LINE (150, 149)-(150, 152), 4
  LINE (154, 149)-(154, 152), 4
  GET (135, 143)-(169, 160), RShip%
END SUB

SUB RedShipMask
  CLS
  LINE (140, 143)-(149, 143), 15
  LINE (155, 143)-(164, 143), 15
  LINE (140, 144)-(148, 144), 15
  LINE (156, 144)-(164, 144), 15
  LINE (140, 145)-(147, 149), 15, BF
  LINE (135, 143)-(139, 152), 15, BF
  LINE (165, 143)-(169, 152), 15, BF
  LINE (145, 150)-(147, 150), 15
  LINE (145, 151)-(147, 151), 15
  LINE (145, 152)-(147, 152), 15
  LINE (157, 145)-(164, 149), 15, BF
  LINE (157, 150)-(159, 150), 15
  LINE (157, 151)-(159, 151), 15
  LINE (157, 152)-(159, 152), 15
  PSET (145, 159), 15
  LINE (144, 160)-(146, 160), 15
  PSET (159, 159), 15
  LINE (158, 160)-(160, 160), 15
  LINE (135, 156)-(139, 160), 15, BF
  LINE (165, 156)-(169, 160), 15, BF
  PSET (140, 160), 15: PSET (164, 160), 15
  LINE (135, 155)-(137, 155), 15
  LINE (167, 155)-(169, 155), 15
  PSET (135, 154), 15: PSET (169, 154), 15
  GET (135, 143)-(169, 160), RShipMask%
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 (106, 0)-(215, 7), 7, BF: LINE (106, 0)-(106, 6), 8
  LINE (106, 0)-(214, 0), 8: LINE (215, 1)-(215, 7), 15
  LINE (107, 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 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
    FOR times = 1 TO 50
      SCREEN 7, 0, 2, 0: PCOPY 1, 2
      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 2, 0: PCOPY 1, 2
    NEXT
END SUB

SUB YouLose (Score%, Ships%)
  FOR times = 1 TO 50
    SCREEN 7, 0, 2, 0: PCOPY 1, 2

    CALL stars: CALL Statistics(Score%, Ships%)
    LOCATE 13, 17: COLOR 12: PRINT "Game Over"
    SCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2
  NEXT
END SUB

