5748339 [rkeene@sledge /home/rkeene/devel/archive/quickbasic]$ cat -n redbaron.bas
   1: 'Red Baron 2573 (Version 1.1)
   2: 'Programmed by Adam Stanchos
   3: 'On AOL:  AdamS60982    On Prodigy:  TCMP46B
   4: DECLARE SUB AddBonusPoints (Score%, Ships%)
   5: DECLARE SUB LoadImages ()
   6: DECLARE SUB EnemyPic (Filename$, Xpos%, Ypos%)
   7: DECLARE SUB Sunset (rxpos%, rypos%)
   8: DECLARE SUB ExtraShipCheck (Score%, Ships%, GainShip%)
   9: DECLARE SUB EnMove (n%, ShipType%)
  10: DECLARE SUB EnemyShipPicture (n%, ShipType%)
  11: DECLARE SUB Statistics (Score%, Ships%)
  12: DECLARE SUB ExplosiveSound ()
  13: DECLARE SUB Explosion (x%, Y%)
  14: DECLARE SUB UpRight (x%, Y%)
  15: DECLARE SUB UpLeft (x%, Y%)
  16: DECLARE SUB DownLeft (x%, Y%)
  17: DECLARE SUB DownRight (x%, Y%)
  18: DECLARE SUB MoveLeft (x%)
  19: DECLARE SUB MoveUp (Y%)
  20: DECLARE SUB MoveDown (Y%)
  21: DECLARE SUB RedBaron ()
  22: DECLARE SUB RedShip ()
  23: DECLARE SUB RedShipMask ()
  24: DECLARE SUB EFighter ()
  25: DECLARE SUB EFighterMask ()
  26: DECLARE SUB EElite ()
  27: DECLARE SUB EEliteMask ()
  28: DECLARE SUB ECommandShip ()
  29: DECLARE SUB ECommandShipMask ()
  30: DECLARE SUB PrivateASCII ()
  31: DECLARE SUB MoveRight (x%)
  32: DECLARE SUB stars ()
  33: DECLARE SUB MainScreen (HScore%, ASCII%)
  34: DECLARE SUB HelpScreen ()
  35: DECLARE SUB Intro ()
  36: DECLARE SUB Conclusion ()
  37: DECLARE SUB Keypad ()
  38: DECLARE SUB Title ()
  39: DECLARE SUB PlaceEShip (x%, Y%, ELXC%, ELYC%, NumberofShips%, ShipType%, OutOf%, Score%, Ships%, LostAShip%)
  40: DECLARE SUB Update (x%, Y%, ELXC%, ELYC%, NumberofShips%, ShipType%, Score%, Ships%, LostAShip%)
  41: DECLARE SUB Shoot (x%, Y%, RangeLeft%, RangeRight%, NumberofShips%, ShipType%, Score%, ShipPoints%, Hits%, TempHits%, HitsTotal%, Defeated%, Ships%, GainShip%)
  42: DECLARE SUB EShoot (n%, x%, Y%, ELXC%, ELYC%, ShipType%, Ships%, LostAShip%)
  43: DECLARE SUB WaveSetup (Wave%, ASCII%, RangeLeft%, RangeRight%, ELXC%, ELYC%, ShipPoints%, ShipType%, OutOf%, Hits%, HitsTotal%)
  44: DECLARE SUB WaveInfo (Wave%, NumberofShips%, Score%, Ships%)
  45: DECLARE SUB YouLose (Score%, Ships%)
  46: DEFINT A-Z
  47:   SCREEN 7, 0, 2, 0
  48:   DEF SEG = &HA000
  49:     DIM SHARED RBaron%(1 TO 6000), RBaronMask%(1 TO 6000)
  50:     DIM SHARED RShip%(1 TO 500), RShipMask%(1 TO 500)
  51:     DIM SHARED EFShip%(1 TO 500), EFShipMask%(1 TO 500)
  52:     DIM SHARED ESShip%(1 TO 500), ESShipMask%(1 TO 500)
  53:     DIM SHARED EEShip%(1 TO 500), EEShipMask%(1 TO 500)
  54:     DIM SHARED ECShip%(1 TO 1500), ECShipMask%(1 TO 1500)
  55:     DIM SHARED EICShip%(1 TO 1500), EICShipMask%(1 TO 1500)
  56:     DIM SHARED ASCII%(1 TO 500)
  57:       CALL LoadImages
  58:       CALL PrivateASCII
  59:     DEF FNR (x) = INT(RND * x) + 1
  60:     DIM SHARED SX(20), SY(20), ST(20)
  61:       FOR I = 1 TO 20  'sprinkle some stars
  62:         SX(I) = FNR(319): SY(I) = FNR(199)
  63:         ST(I) = FNR(2)
  64:       NEXT
  65:     DIM SHARED EX(5), EY(5), Laser(5), Enemy(5), Eshot(5)
  66:     DIM SHARED TempHits(5)
  67:     HScore% = 0
  68:     SCREEN 7, 0, 1, 0
  69: LetsStart:
  70:     CLS
  71:     Score% = 0: Ships% = 3: x% = 150: Y% = 170: ASCII% = 0
  72:     Defeated = 0: Wave = 1: GainShip = 0
  73:     CALL MainScreen(HScore%, ASCII%)
  74: DetermineWave:
  75:     IF Ships% < 1 AND Score% > HScore% THEN
  76:       HScore% = Score%
  77:     END IF
  78:     IF Ships% < 1 THEN
  79:       CALL YouLose(Score%, Ships%): GOTO LetsStart
  80:     END IF
  81:     IF Wave > 50 THEN
  82:       PLAY "o2 l4e l8d e l2 g"
  83:       CALL AddBonusPoints(Score, Ships)
  84:       CALL Conclusion
  85:       IF Score% > HScore% THEN HScore% = Score%
  86:       GOTO LetsStart
  87:     END IF
  88: '------
  89:     CALL WaveSetup(Wave, ASCII, RangeLeft, RangeRight, ELXC, ELYC, ShipPoints, ShipType, OutOf, Hits, HitsTotal)
  90:     CALL WaveInfo(Wave, NumberofShips, Score%, Ships%)
  91:       FOR n = 1 TO NumberofShips
  92:         Laser(n) = -10: Enemy(n) = 1: EY(n) = 29: Eshot(n) = 0
  93:         TempHits(n) = Hits
  94:       NEXT
  95:     EX(1) = 137: EX(2) = 90: EX(3) = 200: EX(4) = 40
  96:     EX(5) = 250: x% = 140: Y% = 170: RANDOMIZE TIMER
  97:     GOTO Update
  98: 
  99: KeyboardInput:
 100:   CALL PlaceEShip(x, Y, ELXC, ELYC, NumberofShips, ShipType, OutOf, Score, Ships, LostAShip)
 101:     IF LostAShip = 1 THEN
 102:       LostAShip = 0: Defeated = 0: CALL Explosion(x%, Y%): GOTO DetermineWave
 103:       END IF
 104:     IF Defeated = NumberofShips THEN
 105:       Defeated = 0: Wave = Wave + 1: GOTO DetermineWave
 106:       END IF
 107:   A$ = INKEY$
 108:     IF A$ = CHR$(0) + CHR$(77) THEN
 109:        CALL MoveRight(x%): GOTO Update
 110:        END IF
 111:     IF A$ = CHR$(0) + CHR$(75) THEN
 112:        CALL MoveLeft(x%): GOTO Update
 113:        END IF
 114:     IF A$ = CHR$(0) + CHR$(72) THEN
 115:        CALL MoveUp(Y%): GOTO Update
 116:        END IF
 117:     IF A$ = CHR$(0) + CHR$(80) THEN
 118:        CALL MoveDown(Y%): GOTO Update
 119:        END IF
 120:     IF A$ = CHR$(0) + CHR$(73) THEN
 121:        CALL UpRight(x%, Y%): GOTO Update
 122:        END IF
 123:     IF A$ = CHR$(0) + CHR$(71) THEN
 124:        CALL UpLeft(x%, Y%): GOTO Update
 125:        END IF
 126:     IF A$ = CHR$(0) + CHR$(79) THEN
 127:        CALL DownLeft(x%, Y%): GOTO Update
 128:        END IF
 129:     IF A$ = CHR$(0) + CHR$(81) THEN
 130:        CALL DownRight(x%, Y%): GOTO Update
 131:        END IF
 132:     IF A$ = CHR$(32) THEN CALL Shoot(x, Y, RangeLeft, RangeRight, NumberofShips, ShipType, Score, ShipPoints, Hits, TempHits, HitsTotal, Defeated, Ships, GainShip)
 133:     IF A$ = "q" OR A$ = "Q" THEN Ships% = 0: GOTO DetermineWave
 134:   GOTO KeyboardInput
 135: 
 136: Update:
 137:   SCREEN 7, 0, 1, 0
 138:   CLS
 139:   CALL stars
 140:   PUT (x%, Y%), RShipMask%, AND
 141:   PUT (x%, Y%), RShip%, XOR
 142:     FOR n = 1 TO NumberofShips
 143:       IF Enemy(n) = 0 THEN GOTO DoneWithIt
 144:       CALL EnemyShipPicture(n, ShipType)
 145:       IF Eshot(n) = 1 THEN CALL EShoot(n, x, Y, ELXC, ELYC, ShipType, Ships, LostAShip) 'lasers be shown?
 146: DoneWithIt:
 147:     NEXT
 148:     CALL Statistics(Score%, Ships%)
 149:   SCREEN 7, 0, 0, 0: PCOPY 1, 0
 150:     IF LostAShip = 1 THEN
 151:       LostAShip = 0: Defeated = 0: CALL Explosion(x%, Y%): GOTO DetermineWave
 152:       END IF
 153: GOTO KeyboardInput
 154: 
 155: SUB AddBonusPoints (Score, Ships)
 156:   Bonus = Ships% * 100
 157:   Score% = Score% + Bonus
 158:     FOR times = 1 TO 100
 159:       SCREEN 7, 0, 1, 0
 160:       CLS
 161:       CALL stars
 162:       LOCATE 12, 11: COLOR 12: PRINT "Ships"
 163:       LOCATE 12, 29: COLOR 7: PRINT Ships%
 164:       LOCATE 14, 11: COLOR 12: PRINT "Bonus"
 165:       LOCATE 14, 26: COLOR 7: PRINT "x 100"
 166:       LINE (200, 115)-(238, 115), 11
 167:       LOCATE 16, 11: COLOR 12: PRINT "Final Score"
 168:       LOCATE 16, 26: COLOR 15: PRINT Score%
 169:       CALL Statistics(Score%, Ships%)
 170:       SCREEN 7, 0, 0, 0: PCOPY 1, 0
 171:     NEXT
 172: END SUB
 173: 
 174: SUB Conclusion
 175:   rxpos = 300: rypos = 80
 176: Conc1:
 177:   FOR pause = 1 TO 10000: NEXT
 178:   SCREEN 7, 0, 1, 0
 179:   CLS : CALL Sunset(rxpos, rypos)
 180:   LOCATE 17, 1: COLOR 7
 181:   PRINT "     Successfully destroying the evil"
 182:   PRINT "Vordoxian fleet, you return to Earth."
 183:   PRINT "Crowds cheer as they see your ship"
 184:   PRINT "flying through the evening sky,"
 185:   PRINT "realizing that the earth has been"
 186:   PRINT "saved by the Red Baron!"
 187:   SCREEN 7, 0, 0, 0: PCOPY 1, 0
 188:    A$ = INKEY$
 189:    IF A$ = CHR$(13) THEN GOTO ConclusionDone
 190:    GOTO Conc1
 191: ConclusionDone:
 192: END SUB
 193: 
 194: SUB DownLeft (x%, Y%)
 195:   x% = x% - 5: Y% = Y% + 5
 196:   IF x% < 20 THEN x% = 20
 197:   IF Y% > 170 THEN Y% = 170
 198: END SUB
 199: 
 200: SUB DownRight (x%, Y%)
 201:   x% = x% + 5: Y% = Y% + 5
 202:   IF x% > 250 THEN x% = 250
 203:   IF Y% > 170 THEN Y% = 170
 204: END SUB
 205: 
 206: SUB EnemyPic (Filename$, Xpos, Ypos)
 207:   DIM Vordoxians%(1 TO 6000)
 208:   DEF SEG = VARSEG(Vordoxians%(1))
 209:   BLOAD Filename$, VARPTR(Vordoxians%(1))
 210:   PUT (Xpos, Ypos), Vordoxians%, PSET
 211: END SUB
 212: 
 213: SUB EnemyShipPicture (n, ShipType)
 214:   IF ShipType = 1 THEN
 215:     PUT (EX(n), EY(n)), EFShipMask%, AND
 216:     PUT (EX(n), EY(n)), EFShip%, XOR
 217:   END IF
 218:   IF ShipType = 2 THEN
 219:     PUT (EX(n), EY(n)), ESShipMask%, AND
 220:     PUT (EX(n), EY(n)), ESShip%, XOR
 221:   END IF
 222:   IF ShipType = 3 THEN
 223:     PUT (EX(n), EY(n)), ECShipMask%, AND
 224:     PUT (EX(n), EY(n)), ECShip%, XOR
 225:   END IF
 226:   IF ShipType = 4 THEN
 227:     PUT (EX(n), EY(n)), EEShipMask%, AND
 228:     PUT (EX(n), EY(n)), EEShip%, XOR
 229:   END IF
 230:   IF ShipType = 5 THEN
 231:     PUT (EX(n), EY(n)), ASCII%, PSET
 232:   END IF
 233:   IF ShipType = 6 THEN
 234:     PUT (EX(n), EY(n)), EICShipMask%, AND
 235:     PUT (EX(n), EY(n)), EICShip%, XOR
 236:   END IF
 237: END SUB
 238: 
 239: SUB EnMove (n, ShipType)
 240:   Direction = INT(RND * 8) + 1
 241:   IF Direction = 1 THEN EY(n) = EY(n) - 5
 242:   IF Direction = 2 THEN EX(n) = EX(n) + 5: EY(n) = EY(n) - 5
 243:   IF Direction = 3 THEN EX(n) = EX(n) + 5
 244:   IF Direction = 4 THEN EX(n) = EX(n) + 5: EY(n) = EY(n) + 5
 245:   IF Direction = 5 THEN EY(n) = EY(n) - 5
 246:   IF Direction = 6 THEN EX(n) = EX(n) - 5: EY(n) = EY(n) + 5
 247:   IF Direction = 7 THEN EX(n) = EX(n) - 5
 248:   IF Direction = 8 THEN EX(n) = EX(n) - 5: EY(n) = EY(n) - 5
 249:     IF EX(n) < 20 THEN EX(n) = 20
 250:     IF EX(n) > 250 THEN EX(n) = 250
 251:       IF ShipType = 3 AND EX(n) > 200 THEN EX(n) = 200
 252:       IF ShipType = 6 AND EX(n) > 200 THEN EX(n) = 200
 253:     IF EY(n) < 15 THEN EY(n) = 15
 254:     IF EY(n) > 100 THEN EY(n) = 100
 255: END SUB
 256: 
 257: SUB EShoot (n, x, Y, ELXC, ELYC, ShipType, Ships, LostAShip)
 258:   LINE (EX(n) + 2, Laser(n))-(EX(n) + 2, Laser(n) + 5), 4
 259:   LINE (EX(n) + ELXC, Laser(n))-(EX(n) + ELXC, Laser(n) + 5), 4
 260:     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
 261:       Ships% = Ships% - 1: LostAShip = 1: GOTO EShootDone
 262:     END IF 'right laser cannon
 263:                               
 264:     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
 265:       Ships% = Ships% - 1: LostAShip = 1: GOTO EShootDone
 266:     END IF 'left laser cannon
 267:     IF ShipType = 3 OR ShipType = 6 THEN GOSUB ExtraShoot
 268:   IF Eshot(n) = 1 AND Laser(n) > 209 THEN Eshot(n) = 0
 269: GOTO EShootDone
 270: 
 271: ExtraShoot:
 272:   LINE (EX(n) + 17, Laser(n))-(EX(n) + 17, Laser(n) + 5), 1
 273:   LINE (EX(n) + 73, Laser(n))-(EX(n) + 73, Laser(n) + 5), 1
 274:     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
 275:       Ships% = Ships% - 1: LostAShip = 1: RETURN
 276:     END IF 'right laser cannon
 277:                              
 278:     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
 279:       Ships% = Ships% - 1: LostAShip = 1: RETURN
 280:     END IF 'left laser cannon
 281:   IF Eshot(n) = 1 AND Laser(n) > 209 THEN Eshot(n) = 0
 282: RETURN
 283: 
 284: EShootDone:
 285: END SUB
 286: 
 287: SUB Explosion (x%, Y%)
 288:   FOR Grow = 1 TO 5
 289:     CIRCLE (x + 17, Y + 6), Grow, 14: NEXT
 290:     CALL ExplosiveSound
 291:   FOR Grow = 6 TO 8
 292:     CIRCLE (x + 17, Y + 6), Grow, 12: NEXT
 293:   FOR Grow = 9 TO 10
 294:     CIRCLE (x + 17, Y + 6), Grow, 4: NEXT
 295: END SUB
 296: 
 297: SUB ExplosiveSound
 298:   FOR s = 850 TO 810 STEP -1
 299:   SOUND (RND * 100 + s / 10 + 30), .1
 300:   NEXT
 301: END SUB
 302: 
 303: SUB ExtraShipCheck (Score%, Ships%, GainShip%)
 304:     IF Score% >= 100 AND GainShip = 0 THEN
 305:       Ships% = Ships% + 1: GainShip = 1
 306:       GOSUB Toon: GOTO OutCheck
 307:     END IF
 308:     IF Score% >= 200 AND GainShip = 1 THEN
 309:       Ships% = Ships% + 1: GainShip = 2
 310:       GOSUB Toon: GOTO OutCheck
 311:     END IF
 312:     IF Score% >= 300 AND GainShip = 2 THEN
 313:       Ships% = Ships% + 1: GainShip = 3
 314:       GOSUB Toon: GOTO OutCheck
 315:     END IF
 316:     IF Score% >= 400 AND GainShip = 3 THEN
 317:       Ships% = Ships% + 1: GainShip = 4
 318:       GOSUB Toon: GOTO OutCheck
 319:     END IF
 320:     IF Score% >= 500 AND GainShip = 4 THEN
 321:       Ships% = Ships% + 1: GainShip = 5
 322:       GOSUB Toon: GOTO OutCheck
 323:     END IF
 324:     GOTO OutCheck
 325: Toon:
 326:   PLAY "mbo2l16ddeeffgg": RETURN
 327: OutCheck:
 328: END SUB
 329: 
 330: SUB HelpScreen
 331: HelpPart1:
 332:   SCREEN 7, 0, 1, 0
 333:   CLS : LOCATE 25, 1: COLOR 5
 334:     PRINT "Press     to exit or     for next page."
 335:   LOCATE 25, 7: COLOR 11: PRINT "ESC"
 336:   LOCATE 1, 1: COLOR 12: PRINT "Instructions"
 337:   LOCATE 1, 30: COLOR 15: PRINT "Page 1 of 3"
 338:   LINE (0, 9)-(319, 9), 4
 339:   LOCATE 3, 1: COLOR 15
 340:   PRINT "Blast your way through fifty waves of"
 341:   LOCATE 4, 1: PRINT "Vordoxian scum to save the earth!"
 342:     PUT (10, 48), RShip%, PSET
 343:     PUT (15, 121), EFShip%, PSET
 344:   LOCATE 8, 24: COLOR 14: PRINT "The Red Baron"
 345:   LOCATE 10, 1: COLOR 7
 346:     PRINT "Your fighter.  Armed with the latest in"
 347:     PRINT "laser technology, the Red Baron's dual"
 348:     PRINT "laser cannons will cut through an enemy"
 349:     PRINT "fighter craft like a chainsaw through"
 350:     PRINT "a teenager!  Or so I've heard..."
 351:   LOCATE 17, 20: COLOR 14: PRINT "Vordoxian Fighter"
 352:   LOCATE 19, 1: COLOR 7
 353:     PRINT "The most common type of space craft"
 354:     PRINT "employed by the enemy.  These ships"
 355:     PRINT "are armed with two laser cannons,"
 356:     PRINT "although not nearly as powerful as"
 357:     PRINT "the Red Baron's."
 358:   LOCATE 23, 19: COLOR 3: PRINT "(5 points)"
 359:   LINE (173, 188)-(183, 198), 4, B
 360:   PAINT (174, 189), 12, 4: LINE (178, 190)-(178, 196), 0
 361:   LINE (177, 195)-(179, 195), 0
 362:   LINE (176, 194)-(180, 194), 0
 363:   PSET (182, 189), 15
 364:   SCREEN 7, 0, 0, 0: PCOPY 1, 0
 365: UserInput2:
 366:    A$ = INKEY$
 367:    IF A$ = CHR$(0) + CHR$(80) THEN GOTO HelpPart2
 368:    IF A$ = CHR$(27) THEN GOTO HelpDone
 369:    GOTO UserInput2
 370: HelpPart2:
 371:   SCREEN 7, 0, 1, 0
 372:   CLS : LOCATE 25, 3: COLOR 5
 373:     PRINT "Press     to exit or     or     ."
 374:   LOCATE 25, 9: COLOR 11: PRINT "ESC"
 375:   LOCATE 1, 1: COLOR 12: PRINT "Instructions"
 376:   LOCATE 1, 30: COLOR 15: PRINT "Page 2 of 3"
 377:   LINE (0, 9)-(319, 9), 4
 378:     PUT (15, 13), ESShip%, PSET
 379: 
 380:   LOCATE 3, 20: COLOR 14: PRINT "Vordoxian Striker"
 381:   LOCATE 5, 1: COLOR 7
 382:     PRINT "The pilots of these ships are a little"
 383:     PRINT "more trigger happy than the norm."
 384:     PRINT "Always joined by fellow striking ships,"
 385:     PRINT "they will often fire in sync."
 386:   LOCATE 9, 1: COLOR 3: PRINT "(10 points)"
 387:   LOCATE 12, 14: COLOR 14: PRINT "Vordoxian Elite Fighter"
 388:   LOCATE 14, 1: COLOR 7
 389:     PRINT "Not only do they fire like the Vordoxian"
 390:     PRINT "Striker, but these ships also carry a"
 391:     PRINT "deflector battery which reduce damage."
 392:   LOCATE 17, 1: COLOR 3: PRINT "(20 points)"
 393:   LOCATE 19, 3: COLOR 9: PRINT "?"
 394:   LOCATE 19, 5: COLOR 10: PRINT "?"
 395:   LOCATE 19, 12: COLOR 14: PRINT "Vordoxian Command Vessels"
 396:   LOCATE 21, 1: COLOR 7
 397:     PRINT "Chances are, the command ships leading"
 398:     PRINT "the Vordoxian fleet are pretty powerful."
 399:   LOCATE 23, 1: COLOR 3: PRINT "(Depending on type, 50 or 100 points)"
 400:   LINE (188, 188)-(198, 198), 4, B
 401:   PAINT (189, 189), 12, 4: LINE (193, 190)-(193, 196), 0
 402:   LINE (192, 191)-(194, 191), 0
 403:   LINE (191, 192)-(195, 192), 0
 404:   PSET (197, 189), 15
 405:   LINE (248, 188)-(258, 198), 4, B
 406:   PAINT (249, 189), 12, 4: LINE (253, 190)-(253, 196), 0
 407:   LINE (252, 194)-(254, 194), 0
 408:   LINE (251, 193)-(255, 193), 0
 409:   PSET (257, 189), 15
 410:   SCREEN 7, 0, 0, 0: PCOPY 1, 0
 411: UserInput3:
 412:    A$ = INKEY$
 413:    IF A$ = CHR$(0) + CHR$(80) THEN GOTO HelpPart3
 414:    IF A$ = CHR$(0) + CHR$(72) THEN GOTO HelpPart1
 415:    IF A$ = CHR$(27) THEN GOTO HelpDone
 416:    GOTO UserInput3
 417: HelpPart3:
 418:   SCREEN 7, 0, 1, 0
 419:   CLS : LOCATE 25, 1: COLOR 5
 420:     PRINT "Press     to exit or     for prev page."
 421:   LOCATE 25, 7: COLOR 11: PRINT "ESC"
 422:   LOCATE 1, 1: COLOR 12: PRINT "Instructions"
 423:   LOCATE 1, 30: COLOR 15: PRINT "Page 3 of 3"
 424:   LINE (0, 9)-(319, 9), 4
 425:   CALL Keypad
 426:   LOCATE 5, 10: COLOR 7
 427:   PRINT "Although you can use the"
 428:   LOCATE 6, 10: PRINT "separate arrow keys, it's"
 429:   LOCATE 7, 10: PRINT "recommended that you use"
 430:   LOCATE 8, 10: PRINT "the keypad, as this will"
 431:   LOCATE 9, 10: PRINT "allow you to move in all"
 432:   LOCATE 10, 10: PRINT "eight directions."
 433:   LOCATE 15, 1: PRINT "Press the"
 434:   LOCATE 15, 11: COLOR 15: PRINT "SPACE BAR"
 435:   LOCATE 15, 21: COLOR 7: PRINT "to fire."
 436:   COLOR 3
 437:   LOCATE 11, 10: PRINT "(Number Lock must be off.)"
 438:   LOCATE 17, 1: COLOR 7
 439:   PRINT "For every 100 points, up to 500, you"
 440:   PRINT "will receive an extra ship."
 441:   LOCATE 20, 1: COLOR 7
 442:   PRINT "If you wish to end the game while"
 443:   PRINT "playing, just press `"
 444:   LOCATE 21, 22: COLOR 15: PRINT "q"
 445:   LOCATE 21, 23: COLOR 7: PRINT "' to quit."
 446:   LOCATE 23, 1: COLOR 3: PRINT "Programmed by Adam Stanchos"
 447:   LINE (173, 188)-(183, 198), 4, B
 448:   PAINT (174, 189), 12, 4: LINE (178, 190)-(178, 196), 0
 449:   LINE (177, 191)-(179, 191), 0
 450:   LINE (176, 192)-(180, 192), 0
 451:   PSET (182, 189), 15
 452:   SCREEN 7, 0, 0, 0: PCOPY 1, 0
 453: UserInput4:
 454:    A$ = INKEY$
 455:    IF A$ = CHR$(0) + CHR$(72) THEN GOTO HelpPart2
 456:    IF A$ = CHR$(27) THEN GOTO HelpDone
 457:    GOTO UserInput4
 458: HelpDone:
 459: END SUB
 460: 
 461: SUB Intro
 462: Intro1:
 463:   SCREEN 7, 0, 1, 0
 464:   CLS : CALL RedBaron: LOCATE 17, 1: COLOR 7
 465:   PRINT "     The Red Baron.  That is what the"
 466:   PRINT "media has called it.  The vigilante"
 467:   PRINT "space craft has been known to appear"
 468:   PRINT "in distant areas of space, aiding small"
 469:   PRINT "colonies in defense from pirates and"
 470:   PRINT "scavengers."
 471:   SCREEN 7, 0, 0, 0: PCOPY 1, 0
 472:    A$ = INKEY$
 473:    IF A$ = CHR$(13) THEN GOTO Intro2
 474:    GOTO Intro1
 475: Intro2:
 476:   SCREEN 7, 0, 1, 0
 477:   CLS : CALL RedBaron: LOCATE 17, 1: COLOR 7
 478:   PRINT "     No one knows who the pilot is."
 479:   PRINT "A He?  She?  It?  The authorities have"
 480:   PRINT "been desparate to catch the pilot."
 481:   PRINT "Even more so now than before due to"
 482:   PRINT "the recent events..."
 483:   SCREEN 7, 0, 0, 0: PCOPY 1, 0
 484:    A$ = INKEY$
 485:    IF A$ = CHR$(13) THEN GOTO Intro3
 486:    GOTO Intro2
 487: Intro3:
 488:   SCREEN 7, 0, 1, 0
 489:   CLS : LOCATE 17, 1: COLOR 7
 490:   PRINT "     An alien race, known as the"
 491:   PRINT "Vordoxians, has declared war on mankind."
 492:   PRINT "Their first attack was swift and deadly."
 493:   PRINT "Capturing a distant communications"
 494:   PRINT "outpost, the Vordoxians released the"
 495:   PRINT "most powerful computer virus ever known"
 496:   PRINT "to man."
 497: SwitchPicture1:
 498:   Filename$ = "RBVORDOX.ABS"
 499:   Xpos = 70: Ypos = 20
 500:   CALL EnemyPic(Filename$, Xpos, Ypos)
 501:   SCREEN 7, 0, 0, 0: PCOPY 1, 0
 502: I3:
 503:    A$ = INKEY$
 504:    IF A$ = CHR$(13) THEN GOTO Intro4
 505:    GOTO I3
 506: Intro4:
 507:   SCREEN 7, 0, 1, 0
 508:   CLS : LOCATE 17, 1: COLOR 7
 509:   PRINT "     The virus infected everything."
 510:   PRINT "No matter how well secure the system,"
 511:   PRINT "the computer virus was able to penetrate"
 512:   PRINT "its defenses.  After only twentyfour"
 513:   PRINT "hours, virtually everything electronic"
 514:   PRINT "was rendered useless."
 515:   Filename$ = "RBVORDOX.ABS"
 516:   Xpos = 70: Ypos = 20
 517:   CALL EnemyPic(Filename$, Xpos, Ypos)
 518:   SCREEN 7, 0, 0, 0: PCOPY 1, 0
 519: I4:
 520:    A$ = INKEY$
 521:    IF A$ = CHR$(13) THEN GOTO Intro5
 522:    GOTO I4
 523: Intro5:
 524:   SCREEN 7, 0, 1, 0
 525:   CLS : LOCATE 17, 1: COLOR 7
 526:   PRINT "     Astronomers, using nothing more"
 527:   PRINT "than simple telescopes, then discovered"
 528:   PRINT "the second part in this evil attack."
 529:   PRINT "Hordes of Vordoxian fighters had been"
 530:   PRINT "sighted entering Earth's solar system!"
 531:   PRINT "Without a solid defense after the virus"
 532:   PRINT "the end of the Human race was eminent."
 533: SwitchPicture2:
 534:   Filename$ = "RBHORDE.ABS"
 535:   Xpos = 35: Ypos = 20
 536:   CALL EnemyPic(Filename$, Xpos, Ypos)
 537:   SCREEN 7, 0, 0, 0: PCOPY 1, 0
 538: I5:
 539:    A$ = INKEY$
 540:    IF A$ = CHR$(13) THEN GOTO Intro6
 541:    GOTO I5
 542: Intro6:
 543:   SCREEN 7, 0, 1, 0
 544:   CLS : CALL RedBaron: LOCATE 17, 1: COLOR 7
 545:   PRINT "     Then miraculously, the Red Baron"
 546:   PRINT "was sighted!  Somehow escaping the"
 547:   PRINT "clutches of the Vordoxian computer"
 548:   PRINT "virus, the red ship was seen heading"
 549:   PRINT "on an intercept course for the enemy."
 550:   PRINT "Now the Red Baron was the last hope"
 551:   PRINT "for the Human race..."
 552:   SCREEN 7, 0, 0, 0: PCOPY 1, 0
 553:    A$ = INKEY$
 554:    IF A$ = CHR$(13) THEN GOTO IntroDone
 555:    GOTO Intro6
 556: IntroDone:
 557: END SUB
 558: 
 559: SUB Keypad
 560:   LINE (10, 35)-(20, 45), 8, B: PAINT (11, 36), 7, 8
 561:   LINE (22, 35)-(32, 45), 8, B: PAINT (23, 36), 7, 8
 562:   LINE (34, 35)-(44, 45), 8, B: PAINT (35, 36), 7, 8
 563:   LINE (46, 35)-(56, 45), 8, B: PAINT (47, 36), 7, 8
 564:   LINE (46, 47)-(56, 69), 8, B: PAINT (47, 48), 7, 8
 565:   LINE (46, 71)-(56, 93), 8, B: PAINT (47, 73), 7, 8
 566:   LINE (10, 83)-(32, 93), 8, B: PAINT (11, 84), 7, 8
 567:   LINE (34, 83)-(44, 93), 8, B: PAINT (35, 84), 7, 8
 568:   LINE (10, 47)-(20, 57), 7, B: PAINT (11, 48), 15, 7
 569:   LINE (22, 47)-(32, 57), 7, B: PAINT (23, 48), 15, 7
 570:   LINE (34, 47)-(44, 57), 7, B: PAINT (35, 48), 15, 7
 571:   LINE (10, 59)-(20, 69), 7, B: PAINT (11, 60), 15, 7
 572:   LINE (22, 59)-(32, 69), 7, B: PAINT (23, 60), 15, 7
 573:   LINE (34, 59)-(44, 69), 7, B: PAINT (35, 60), 15, 7
 574:   LINE (10, 71)-(20, 81), 7, B: PAINT (11, 72), 15, 7
 575:   LINE (22, 71)-(32, 81), 7, B: PAINT (23, 72), 15, 7
 576:   LINE (34, 71)-(44, 81), 7, B: PAINT (35, 72), 15, 7
 577:   LINE (13, 50)-(17, 54), 0
 578:   LINE (13, 51)-(14, 50), 0: LINE (13, 52)-(15, 50), 0
 579:   LINE (27, 50)-(27, 54), 0
 580:   LINE (26, 51)-(28, 51), 0: LINE (25, 52)-(29, 52), 0
 581:   LINE (37, 54)-(41, 50), 0
 582:   LINE (40, 50)-(41, 51), 0: LINE (39, 50)-(41, 52), 0
 583:   LINE (13, 64)-(17, 64), 0
 584:   LINE (14, 63)-(14, 65), 0: LINE (15, 62)-(15, 66), 0
 585:   LINE (37, 64)-(41, 64), 0
 586:   LINE (40, 63)-(40, 65), 0: LINE (39, 62)-(39, 66), 0
 587:   LINE (13, 78)-(17, 74), 0
 588:   LINE (13, 77)-(14, 78), 0: LINE (13, 76)-(15, 78), 0
 589:   LINE (27, 74)-(27, 78), 0
 590:   LINE (26, 77)-(28, 77), 0: LINE (25, 76)-(29, 76), 0
 591:   LINE (37, 74)-(41, 78), 0
 592:   LINE (40, 78)-(41, 77), 0: LINE (39, 78)-(41, 76), 0
 593: END SUB
 594: 
 595: SUB LoadImages
 596:   DEF SEG = VARSEG(RBaron%(1))
 597:   BLOAD "RBSHIP.ABS", VARPTR(RBaron%(1))
 598:   DEF SEG = VARSEG(RBaronMask%(1))
 599:   BLOAD "RBSHIPM.ABS", VARPTR(RBaronMask%(1))
 600:   DEF SEG = VARSEG(RShip%(1))
 601:   BLOAD "RB1.ABS", VARPTR(RShip%(1))
 602:   DEF SEG = VARSEG(RShipMask%(1))
 603:   BLOAD "RB2.ABS", VARPTR(RShipMask%(1))
 604:   DEF SEG = VARSEG(EFShip%(1))
 605:   BLOAD "VF1.ABS", VARPTR(EFShip%(1))
 606:   DEF SEG = VARSEG(EFShipMask%(1))
 607:   BLOAD "VF2.ABS", VARPTR(EFShipMask%(1))
 608:   DEF SEG = VARSEG(ESShip%(1))
 609:   BLOAD "VS1.ABS", VARPTR(ESShip%(1))
 610:   DEF SEG = VARSEG(ESShipMask%(1))
 611:   BLOAD "VS2.ABS", VARPTR(ESShipMask%(1))
 612:   DEF SEG = VARSEG(EEShipMask%(1))
 613:   BLOAD "VE2.ABS", VARPTR(EEShipMask%(1))
 614:   DEF SEG = VARSEG(ECShip%(1))
 615:   BLOAD "VC1.ABS", VARPTR(ECShip%(1))
 616:   DEF SEG = VARSEG(ECShipMask%(1))
 617:   BLOAD "VC2.ABS", VARPTR(ECShipMask%(1))
 618:   DEF SEG = VARSEG(EICShip%(1))
 619:   BLOAD "VIC1.ABS", VARPTR(EICShip%(1))
 620:   DEF SEG = VARSEG(EICShipMask%(1))
 621:   BLOAD "VIC2.ABS", VARPTR(EICShipMask%(1))
 622: END SUB
 623: 
 624: SUB MainScreen (HScore%, ASCII%)
 625: Start:
 626:   SCREEN 7, 0, 1, 0
 627:   CLS : CALL Title
 628:   LOCATE 12, 16: COLOR 9: PRINT "High Score:"
 629:   LOCATE 13, 15: COLOR 11: PRINT HScore%
 630:   LINE (90, 120)-(229, 183), 4, B
 631:   LINE (91, 121)-(228, 182), 12, B
 632:   LINE (92, 122)-(227, 181), 4, B
 633:   COLOR 11: LOCATE 17, 18: PRINT "Select:"
 634:   C1 = 15: C2 = 4: C3 = 4: C4 = 4
 635:   highlight = 1
 636:   SCREEN 7, 0, 0, 0: PCOPY 1, 0
 637: DisplayText1:
 638:   COLOR C1: LOCATE 19, 15: PRINT "Introduction"
 639:   COLOR C2: LOCATE 20, 16: PRINT "Play Game"
 640:   COLOR C3: LOCATE 21, 19: PRINT "Help"
 641:   COLOR C4: LOCATE 22, 19: PRINT "Quit"
 642: 
 643: UserInput1:
 644:    A$ = INKEY$
 645:    IF A$ = CHR$(0) + CHR$(72) THEN
 646:       highlight = highlight - 1: GOTO HightOfMyLight1
 647:    END IF
 648:    IF A$ = CHR$(0) + CHR$(80) THEN
 649:       highlight = highlight + 1: GOTO HightOfMyLight1
 650:    END IF
 651:    IF A$ = CHR$(13) THEN GOTO DetermineSelection1
 652:    IF A$ = "a" OR A$ = "A" THEN ASCII% = 1
 653:    GOTO UserInput1
 654:                                                     
 655: HightOfMyLight1:
 656:    IF highlight > 4 THEN highlight = 1
 657:    IF highlight < 1 THEN highlight = 4
 658:    IF highlight = 1 THEN C1 = 15: C2 = 4: C3 = 4: C4 = 4
 659:    IF highlight = 2 THEN C2 = 15: C1 = 4: C3 = 4: C4 = 4
 660:    IF highlight = 3 THEN C3 = 15: C1 = 4: C2 = 4: C4 = 4
 661:    IF highlight = 4 THEN C4 = 15: C1 = 4: C2 = 4: C3 = 4
 662:    GOTO DisplayText1
 663:                                                     
 664: DetermineSelection1:
 665:   IF highlight = 1 THEN CALL Intro: GOTO Start
 666:   IF highlight = 2 THEN GOTO Done1
 667:   IF highlight = 3 THEN CALL HelpScreen: GOTO Start
 668:   IF highlight = 4 THEN CLS : SYSTEM
 669:   GOTO DisplayText1
 670: Done1:
 671: END SUB
 672: 
 673: SUB MoveDown (Y%)
 674:   Y% = Y% + 5
 675:   IF Y% > 170 THEN Y% = 170
 676: END SUB
 677: 
 678: SUB MoveLeft (x%)
 679:   x% = x% - 5
 680:   IF x% < 20 THEN x% = 20
 681: END SUB
 682: 
 683: SUB MoveRight (x%)
 684:   x% = x% + 5
 685:   IF x% > 250 THEN x% = 250
 686: END SUB
 687: 
 688: SUB MoveUp (Y%)
 689:   Y% = Y% - 5
 690:   IF Y% < 100 THEN Y% = 100
 691: END SUB
 692: 
 693: SUB PlaceEShip (x, Y, ELXC, ELYC, NumberofShips, ShipType, OutOf, Score, Ships, LostAShip)
 694:   SCREEN 7, 0, 1, 0
 695:   CLS
 696:   CALL stars
 697:     FOR n = 1 TO NumberofShips
 698:       IF Enemy(n) = 0 THEN GOTO DoneWithShip2
 699:     CALL EnMove(n, ShipType)
 700:       CALL EnemyShipPicture(n, ShipType)
 701:       IF Eshot(n) = 1 THEN
 702:         Laser(n) = Laser(n) + 5: CALL EShoot(n, x, Y, ELXC, ELYC, ShipType, Ships, LostAShip)
 703:         END IF
 704:     Doesitshoot = INT(RND * OutOf) + 1
 705:       IF Doesitshoot = 1 AND Eshot(n) = 0 THEN
 706:         Eshot(n) = 1: Laser(n) = EY(n) + ELYC
 707:         PLAY "o4mbl64 a": CALL EShoot(n, x, Y, ELXC, ELYC, ShipType, Ships, LostAShip)
 708:         END IF
 709: DoneWithShip2:
 710:     NEXT
 711:   PUT (x, Y), RShipMask%, AND
 712:   PUT (x, Y), RShip%, XOR
 713:   CALL Statistics(Score%, Ships%)
 714:   SCREEN 7, 0, 0, 0: PCOPY 1, 0
 715: END SUB
 716: 
 717: SUB PrivateASCII
 718:   CLS : LOCATE 1, 3: COLOR 12: PRINT "O"
 719:   LOCATE 2, 2: PRINT "/"
 720:   LOCATE 2, 3: COLOR 10: PRINT "|"
 721:   LOCATE 2, 4: COLOR 12: PRINT "\"
 722:   LOCATE 3, 2: COLOR 9: PRINT "/ \"
 723:   GET (8, 0)-(30, 22), ASCII%
 724:   CLS
 725: END SUB
 726: 
 727: SUB RedBaron
 728:   PSET (10, 40), 9: PSET (280, 50), 9
 729:   PSET (40, 90), 9: PSET (110, 15), 1
 730:   PSET (30, 100), 1: PSET (150, 90), 9
 731:   PSET (250, 70), 9: PSET (100, 100), 1
 732:   PSET (200, 20), 9: PSET (290, 105), 1
 733:   RDirect = INT(RND * 4) + 1
 734:   IF RDirect = 1 THEN ry = -5
 735:   IF RDirect = 2 THEN rx = 5
 736:   IF RDirect = 3 THEN ry = 5
 737:   IF RDirect = 4 THEN rx = -5
 738:   PUT (25 + rx, 20 + ry), RBaronMask%, AND
 739:   PUT (25 + rx, 20 + ry), RBaron%, XOR
 740:   LDirect = INT(RND * 5) + 1
 741:   IF LDirect = 1 THEN
 742:     LINE (106 + rx, 59 + ry)-(166 + rx, 110 + ry), 1
 743:     LINE (243 + rx, 59 + ry)-(303 + rx, 110 + ry), 1
 744:   END IF
 745: END SUB
 746: 
 747: SUB Shoot (x, Y, RangeLeft, RangeRight, NumberofShips, ShipType, Score, ShipPoints, Hits, TempHits, HitsTotal, Defeated, Ships, GainShip)
 748:   LINE (x + 7, Y + 5)-(x + 7, 8), 1
 749:   LINE (x + 27, Y + 5)-(x + 27, 8), 1
 750:   PLAY "o4mbl64 a b"
 751:     FOR n = 1 TO NumberofShips
 752:       IF x + 5 > EX(n) - 3 AND x + 5 < EX(n) + RangeLeft THEN
 753:         TempHits(n) = TempHits(n) + 1 'inflict a damage point
 754:         FOR Grow = 1 TO 5
 755:           CIRCLE (x + 7, EY(n) + 10), Grow, 14: NEXT
 756:         CALL ExplosiveSound
 757:         FOR Grow = 6 TO 8
 758:           CIRCLE (x + 7, EY(n) + 10), Grow, 12: NEXT
 759:         FOR Grow = 9 TO 10
 760:           CIRCLE (x + 7, EY(n) + 10), Grow, 4: NEXT
 761:             IF TempHits(n) > HitsTotal THEN
 762:               TempHits(n) = Hits: GOSUB YouKillMeBaby
 763:             END IF
 764:       END IF  '-Left laser cannon-
 765: ShootPart2:
 766:       IF x + 26 > EX(n) - 2 AND x + 26 < EX(n) + RangeRight THEN
 767:         TempHits(n) = TempHits(n) + 1 'inflict a damage point
 768:         FOR Grow = 1 TO 5
 769:           CIRCLE (x + 27, EY(n) + 10), Grow, 14: NEXT
 770:         CALL ExplosiveSound
 771:         FOR Grow = 6 TO 8
 772:           CIRCLE (x + 27, EY(n) + 10), Grow, 12: NEXT
 773:         FOR Grow = 9 TO 10
 774:           CIRCLE (x + 27, EY(n) + 10), Grow, 4: NEXT
 775:             IF TempHits(n) > HitsTotal THEN
 776:               TempHits(n) = Hits: GOSUB YouKillMeBaby
 777:             END IF
 778:       END IF  '-Right laser cannon-
 779:     NEXT
 780:   GOTO DoneShoot
 781: 
 782: YouKillMeBaby:
 783:   IF ShipType = 3 OR ShipType = 6 THEN GOSUB ExtraExplode
 784:   EX(n) = -100: EY(n) = -50: Enemy(n) = 0
 785:   Score% = Score% + ShipPoints%
 786:   Defeated = Defeated + 1
 787:   CALL ExtraShipCheck(Score%, Ships%, GainShip%)
 788: RETURN
 789: 
 790: ExtraExplode:
 791:   FOR Extra = 1 TO 4
 792:     RANDOMIZE TIMER
 793:     ExplodeX = INT(RND * 80) + 1
 794:     ExplodeY = INT(RND * 40) + 1
 795:     FOR Grow = 1 TO 5
 796:       CIRCLE (EX(n) + ExplodeX, EY(n) + ExplodeY), Grow, 14: NEXT
 797:       CALL ExplosiveSound
 798:     FOR Grow = 6 TO 8
 799:       CIRCLE (EX(n) + ExplodeX, EY(n) + ExplodeY), Grow, 12: NEXT
 800:     FOR Grow = 9 TO 10
 801:       CIRCLE (EX(n) + ExplodeX, EY(n) + ExplodeY), Grow, 4: NEXT
 802:   NEXT Extra
 803: 'Final really big explosion
 804:     FOR Grow = 1 TO 3
 805:       CIRCLE (EX(n) + 45, EY(n) + 20), Grow, 15: NEXT
 806:     FOR Grow = 4 TO 10
 807:       CIRCLE (EX(n) + 45, EY(n) + 20), Grow, 14: NEXT
 808:       CALL ExplosiveSound
 809:     FOR Grow = 11 TO 16
 810:       CIRCLE (EX(n) + 45, EY(n) + 20), Grow, 12: NEXT
 811:     FOR Grow = 17 TO 20
 812:       CIRCLE (EX(n) + 45, EY(n) + 20), Grow, 4: NEXT
 813:       CALL ExplosiveSound
 814: RETURN
 815: DoneShoot:
 816: END SUB
 817: 
 818: SUB stars
 819:     FOR I = 1 TO 20
 820:       IF ST(I) = 1 THEN C = 1 ELSE C = 9
 821:       PSET (SX(I), SY(I)), C
 822:       SY(I) = SY(I) + ST(I) + 1
 823:       IF SY(I) > 199 THEN
 824:         SY(I) = 0: SY(I) = FNR(1)
 825:         ST(I) = FNR(2)
 826:       END IF
 827:     NEXT
 828: END SUB
 829: 
 830: SUB Statistics (Score%, Ships%)
 831:   LINE (7, 0)-(13, 7), 7, BF: LINE (13, 1)-(13, 7), 15
 832:   LINE (7, 0)-(12, 0), 8: LINE (7, 1)-(7, 6), 8
 833:   LINE (8, 7)-(13, 7), 15: LINE (304, 0)-(310, 7), 7, BF
 834:   LINE (310, 1)-(310, 7), 15: LINE (304, 0)-(309, 0), 8
 835:   LINE (304, 0)-(304, 6), 8: LINE (305, 7)-(310, 7), 15
 836:   LINE (112, 0)-(215, 7), 7, BF: LINE (112, 0)-(112, 6), 8
 837:   LINE (112, 0)-(214, 0), 8: LINE (215, 1)-(215, 7), 15
 838:   LINE (113, 7)-(214, 7), 15
 839:   LOCATE 1, 3: COLOR 4: PRINT "Score:"
 840:   LOCATE 1, 9: COLOR 11: PRINT Score%
 841:   LOCATE 1, 29: COLOR 10: PRINT "Ships:"
 842:   LOCATE 1, 35: COLOR 11: PRINT Ships%
 843: END SUB
 844: 
 845: SUB Sunset (rxpos, rypos)
 846:   LINE (19, 40)-(300, 55), 4, BF
 847:   LINE (19, 55)-(300, 70), 12, BF
 848:   LINE (19, 70)-(300, 90), 14, BF
 849:   LINE (19, 30)-(300, 30), 4
 850:   LINE (19, 38)-(300, 38), 4: LINE (19, 35)-(300, 35), 4
 851:   LINE (19, 45)-(300, 45), 12
 852:   LINE (19, 50)-(300, 50), 12: LINE (19, 53)-(300, 53), 12
 853:   LINE (19, 60)-(300, 60), 14
 854:   LINE (19, 68)-(300, 68), 14: LINE (19, 65)-(300, 65), 14
 855:   CIRCLE (155, 90), 20, 15
 856:   PAINT (155, 90), 15, 15
 857:   LINE (0, 91)-(319, 110), 0, BF
 858:   LINE (19, 55)-(25, 60), 0: LINE (25, 60)-(35, 65), 0
 859:   LINE (35, 65)-(44, 80), 0: LINE (44, 80)-(60, 90), 0
 860:   PAINT (21, 60), 0, 0
 861:   LINE (250, 90)-(270, 80), 0: LINE (270, 80)-(275, 75), 0
 862:   LINE (276, 75)-(290, 90), 0: PAINT (260, 88), 0, 0
 863:   PSET (100, 20), 1: PSET (250, 25), 8: PSET (50, 28), 8
 864:   PSET (70, 36), 1: PSET (200, 33), 1: PSET (210, 10), 1
 865:   PSET (20, 20), 9: PSET (55, 10), 9: PSET (170, 15), 9
 866:   PSET (150, 13), 9: PSET (149, 13), 1: PSET (151, 13), 1
 867:   PSET (150, 12), 1: PSET (150, 14), 1: PSET (280, 20), 1
 868:   IF rxpos < 1 THEN rxpos = 300: rypos = 80
 869:   rxpos = rxpos - 5: rypos = rypos - 1
 870:   LINE (rxpos, rypos)-(rxpos + 3, rypos), 0, BF'ship
 871: SunsetDone:
 872: END SUB
 873: 
 874: SUB Title
 875:   'r
 876:   LINE (35, 10)-(75, 10), 4: LINE (35, 10)-(40, 15), 4
 877:   LINE (40, 15)-(40, 30), 4: LINE (40, 30)-(35, 35), 4
 878:   LINE (35, 35)-(55, 35), 4: LINE (55, 35)-(50, 30), 4
 879:   LINE (50, 30)-(50, 15), 4: LINE (50, 15)-(65, 15), 4
 880:   LINE (65, 15)-(85, 35), 4: LINE (75, 10)-(85, 20), 4
 881:   LINE (55, 20)-(85, 20), 4: LINE (55, 20)-(65, 30), 4
 882:   LINE (65, 30)-(60, 35), 4: LINE (60, 35)-(85, 35), 4
 883:   'e
 884:   LINE (85, 10)-(90, 15), 4: LINE (85, 10)-(135, 10), 4
 885:   LINE (135, 10)-(130, 15), 4: LINE (130, 15)-(100, 15), 4
 886:   LINE (90, 15)-(90, 30), 4: LINE (90, 30)-(85, 35), 4
 887:   LINE (85, 35)-(135, 35), 4: LINE (135, 35)-(130, 30), 4
 888:   LINE (130, 30)-(100, 30), 4: LINE (100, 15)-(100, 20), 4
 889:   LINE (100, 30)-(100, 25), 4: LINE (100, 20)-(120, 20), 4
 890:   LINE (100, 25)-(120, 25), 4: LINE (120, 20)-(120, 25), 4
 891:   'd
 892:   LINE (135, 10)-(175, 10), 4: LINE (135, 10)-(140, 15), 4
 893:   LINE (140, 15)-(140, 30), 4: LINE (140, 30)-(135, 35), 4
 894:   LINE (135, 35)-(175, 35), 4: LINE (150, 15)-(150, 30), 4
 895:   LINE (150, 15)-(170, 15), 4: LINE (150, 30)-(170, 30), 4
 896:   LINE (175, 10)-(185, 20), 4: LINE (175, 35)-(185, 25), 4
 897:   LINE (185, 20)-(185, 25), 4: LINE (170, 15)-(175, 20), 4
 898:   LINE (170, 30)-(175, 25), 4: LINE (175, 20)-(175, 25), 4
 899:   'b
 900:   LINE (35, 40)-(75, 40), 4: LINE (35, 40)-(40, 45), 4
 901:   LINE (40, 45)-(40, 60), 4: LINE (40, 60)-(35, 65), 4
 902:   LINE (35, 65)-(75, 65), 4: LINE (75, 40)-(85, 50), 4
 903:   LINE (75, 65)-(85, 55), 4: LINE (85, 50)-(83, 52), 4
 904:   LINE (85, 55)-(83, 53), 4: LINE (50, 45)-(70, 45), 4
 905:   LINE (70, 45)-(75, 50), 4: LINE (75, 50)-(50, 50), 4
 906:   LINE (50, 45)-(50, 50), 4: LINE (50, 60)-(70, 60), 4
 907:   LINE (70, 60)-(75, 55), 4: LINE (75, 55)-(50, 55), 4
 908:   LINE (50, 55)-(50, 60), 4
 909:   'a
 910:   LINE (110, 40)-(85, 65), 4: LINE (110, 40)-(135, 65), 4
 911:   LINE (85, 65)-(105, 65), 4: LINE (105, 65)-(100, 60), 4
 912:   LINE (100, 60)-(105, 55), 4: LINE (105, 55)-(115, 55), 4
 913:   LINE (135, 65)-(115, 65), 4: LINE (115, 65)-(120, 60), 4
 914:   LINE (120, 60)-(115, 55), 4
 915:   'r
 916:   LINE (135, 40)-(175, 40), 4: LINE (135, 40)-(140, 45), 4
 917:   LINE (140, 45)-(140, 60), 4: LINE (140, 60)-(135, 65), 4
 918:   LINE (135, 65)-(155, 65), 4: LINE (155, 65)-(150, 60), 4
 919:   LINE (150, 60)-(150, 45), 4: LINE (150, 45)-(165, 45), 4
 920:   LINE (165, 45)-(185, 65), 4: LINE (175, 40)-(185, 50), 4
 921:   LINE (155, 50)-(185, 50), 4: LINE (155, 50)-(165, 60), 4
 922:   LINE (165, 60)-(160, 65), 4: LINE (160, 65)-(185, 65), 4
 923:   'o
 924:   LINE (195, 40)-(225, 40), 4: LINE (195, 40)-(190, 45), 4
 925:   LINE (225, 40)-(230, 45), 4: LINE (190, 45)-(190, 60), 4
 926:   LINE (230, 45)-(230, 60), 4: LINE (190, 60)-(195, 65), 4
 927:   LINE (230, 60)-(225, 65), 4: LINE (195, 65)-(225, 65), 4
 928:   LINE (200, 45)-(220, 60), 4, B
 929:   'n
 930:   LINE (235, 40)-(240, 45), 4: LINE (240, 45)-(240, 60), 4
 931:   LINE (240, 60)-(235, 65), 4: LINE (235, 40)-(250, 40), 4
 932:   LINE (250, 40)-(265, 55), 4: LINE (235, 65)-(255, 65), 4
 933:   LINE (255, 65)-(250, 60), 4: LINE (250, 60)-(250, 50), 4
 934:   LINE (250, 50)-(265, 65), 4: LINE (265, 55)-(265, 40), 4
 935:   LINE (265, 40)-(280, 40), 4: LINE (280, 40)-(275, 45), 4
 936:   LINE (275, 45)-(275, 65), 4: LINE (275, 65)-(265, 65), 4
 937:   PAINT (37, 11), 12, 4: PAINT (62, 34), 12, 4
 938:   PAINT (87, 11), 12, 4: PAINT (137, 11), 12, 4
 939:   PAINT (37, 41), 12, 4: PAINT (110, 41), 12, 4
 940:   PAINT (137, 41), 12, 4: PAINT (162, 64), 12, 4
 941:   PAINT (195, 41), 12, 4: PAINT (237, 41), 12, 4
 942:   LINE (216, 25)-(245, 25), 12
 943:   LOCATE 3, 28: COLOR 4: PRINT "2573"
 944: END SUB
 945: 
 946: SUB Update (x, Y, ELXC, ELYC, NumberofShips, ShipType, Score, Ships, LostAShip)
 947: END SUB
 948: 
 949: SUB UpLeft (x%, Y%)
 950:   x% = x% - 5: Y% = Y% - 5
 951:   IF x% < 20 THEN x% = 20
 952:   IF Y% < 100 THEN Y% = 100
 953: END SUB
 954: 
 955: SUB UpRight (x%, Y%)
 956:   x% = x% + 5: Y% = Y% - 5
 957:   IF x% > 250 THEN x% = 250
 958:   IF Y% < 100 THEN Y% = 100
 959: END SUB
 960: 
 961: SUB WaveInfo (Wave, NumberofShips, Score%, Ships%)
 962:     IF Wave = 0 THEN NumberofShips = 5
 963:     IF Wave = 1 THEN NumberofShips = 1
 964:     IF Wave = 2 THEN NumberofShips = 2
 965:     IF Wave = 3 THEN NumberofShips = 2
 966:     IF Wave = 4 THEN NumberofShips = 3
 967:     IF Wave = 5 THEN NumberofShips = 3
 968:     IF Wave = 6 THEN NumberofShips = 3
 969:     IF Wave = 7 THEN NumberofShips = 4
 970:     IF Wave = 8 THEN NumberofShips = 4
 971:     IF Wave = 9 THEN NumberofShips = 4
 972:     IF Wave = 10 THEN NumberofShips = 4
 973:     IF Wave = 11 THEN NumberofShips = 5
 974:     IF Wave = 12 THEN NumberofShips = 5
 975:     IF Wave = 13 THEN NumberofShips = 5
 976:     IF Wave = 14 THEN NumberofShips = 5
 977:     IF Wave = 15 THEN NumberofShips = 2
 978:     IF Wave = 16 THEN NumberofShips = 5
 979:     IF Wave = 17 THEN NumberofShips = 3
 980:     IF Wave = 18 THEN NumberofShips = 4
 981:     IF Wave = 19 THEN NumberofShips = 5
 982:     IF Wave = 20 THEN NumberofShips = 5
 983:     IF Wave = 21 THEN NumberofShips = 5
 984:     IF Wave = 22 THEN NumberofShips = 5
 985:     IF Wave = 23 THEN NumberofShips = 5
 986:     IF Wave = 24 THEN NumberofShips = 5
 987:     IF Wave = 25 THEN NumberofShips = 1
 988:     IF Wave = 26 THEN NumberofShips = 5
 989:     IF Wave = 27 THEN NumberofShips = 5
 990:     IF Wave = 28 THEN NumberofShips = 5
 991:     IF Wave = 29 THEN NumberofShips = 5
 992:     IF Wave = 30 THEN NumberofShips = 1
 993:     IF Wave = 31 THEN NumberofShips = 5
 994:     IF Wave = 32 THEN NumberofShips = 5
 995:     IF Wave = 33 THEN NumberofShips = 5
 996:     IF Wave = 34 THEN NumberofShips = 5
 997:     IF Wave = 35 THEN NumberofShips = 1
 998:     IF Wave = 36 THEN NumberofShips = 2
 999:     IF Wave = 37 THEN NumberofShips = 3
1000:     IF Wave = 38 THEN NumberofShips = 4
1001:     IF Wave > 38 AND Wave < 49 THEN NumberofShips = 5
1002:     IF Wave = 49 THEN NumberofShips = 2
1003:     IF Wave = 50 THEN NumberofShips = 1
1004:     FOR times = 1 TO 40
1005:       SCREEN 7, 0, 1, 0
1006:       CLS
1007:       CALL stars
1008:       LOCATE 13, 18: COLOR 12: PRINT "Wave"; Wave
1009:         IF Wave = 0 THEN
1010:           LOCATE 14, 12: COLOR 15
1011:           PRINT "ASCIIs in Space!!!"
1012:         END IF
1013:       CALL Statistics(Score%, Ships%)
1014:       SCREEN 7, 0, 0, 0: PCOPY 1, 0
1015:     NEXT
1016: END SUB
1017: 
1018: SUB WaveSetup (Wave, ASCII, RangeLeft, RangeRight, ELXC, ELYC, ShipPoints, ShipType, OutOf, Hits, HitsTotal)
1019:     IF ASCII% = 1 THEN
1020:       RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
1021:       Wave = 0: ShipPoints% = 100: ShipType = 5: OutOf = 20
1022:       Hits = 0: HitsTotal = 0
1023:     END IF
1024:     IF Wave = 1 THEN
1025:       RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
1026:       ShipPoints% = 5: ShipType = 1: OutOf = 20
1027:       Hits = 0: HitsTotal = 0
1028:     END IF
1029:     IF Wave = 15 THEN
1030:       RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
1031:       ShipPoints% = 10: ShipType = 2: OutOf = 1
1032:       Hits = 0: HitsTotal = 0
1033:     END IF
1034:     IF Wave = 16 THEN
1035:       RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
1036:       ShipPoints% = 5: ShipType = 1: OutOf = 20
1037:       Hits = 0: HitsTotal = 0
1038:     END IF
1039:     IF Wave = 17 THEN
1040:       RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
1041:       ShipPoints% = 10: ShipType = 2: OutOf = 1
1042:       Hits = 0: HitsTotal = 0
1043:     END IF
1044:     IF Wave = 20 THEN
1045:       RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
1046:       ShipPoints% = 5: ShipType = 1: OutOf = 20
1047:       Hits = 0: HitsTotal = 0
1048:     END IF
1049:     IF Wave = 21 THEN
1050:       RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
1051:       ShipPoints% = 10: ShipType = 2: OutOf = 1
1052:       Hits = 0: HitsTotal = 0
1053:     END IF
1054:     IF Wave = 25 THEN
1055:       RangeLeft = 89: RangeRight = 90
1056:       ELXC = 88: ELYC = 43: PLAY "mbo1l4dl16cl2f"
1057:       ShipPoints% = 50: ShipType = 3: OutOf = 1
1058:       Hits = 0: HitsTotal = 25
1059:     END IF
1060:     IF Wave = 26 THEN
1061:       RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
1062:       ShipPoints% = 5: ShipType = 1: OutOf = 20
1063:       Hits = 0: HitsTotal = 0
1064:     END IF
1065:     IF Wave = 28 THEN
1066:       RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
1067:       ShipPoints% = 10: ShipType = 2: OutOf = 1
1068:       Hits = 0: HitsTotal = 0
1069:     END IF
1070:     IF Wave = 30 THEN
1071:       RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
1072:       ShipPoints% = 20: ShipType = 4: OutOf = 1
1073:       Hits = 0: HitsTotal = 4
1074:     END IF
1075:     IF Wave = 31 THEN
1076:       RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
1077:       ShipPoints% = 5: ShipType = 1: OutOf = 20
1078:       Hits = 0: HitsTotal = 0
1079:     END IF
1080:     IF Wave = 32 THEN
1081:       RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
1082:       ShipPoints% = 10: ShipType = 2: OutOf = 1
1083:       Hits = 0: HitsTotal = 0
1084:     END IF
1085:     IF Wave = 35 THEN
1086:       RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
1087:       ShipPoints% = 20: ShipType = 4: OutOf = 1
1088:       Hits = 0: HitsTotal = 4
1089:     END IF
1090:     IF Wave = 46 THEN
1091:       RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
1092:       ShipPoints% = 5: ShipType = 1: OutOf = 20
1093:       Hits = 0: HitsTotal = 0
1094:     END IF
1095:     IF Wave = 47 THEN
1096:       RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
1097:       ShipPoints% = 10: ShipType = 2: OutOf = 1
1098:       Hits = 0: HitsTotal = 0
1099:     END IF
1100:     IF Wave = 48 THEN
1101:       RangeLeft = 24: RangeRight = 25: ELXC = 23: ELYC = 16
1102:       ShipPoints% = 20: ShipType = 4: OutOf = 1
1103:       Hits = 0: HitsTotal = 4
1104:     END IF
1105:     IF Wave = 49 THEN
1106:       RangeLeft = 89: RangeRight = 90
1107:       ELXC = 88: ELYC = 43: PLAY "mbo1l4dl16cl2f"
1108:       ShipPoints% = 100: ShipType = 3: OutOf = 1
1109:       Hits = 0: HitsTotal = 25
1110:     END IF
1111:     IF Wave = 50 THEN
1112:       RangeLeft = 89: RangeRight = 90
1113:       ELXC = 88: ELYC = 43: PLAY "mbo1l4dl16cl2f"
1114:       ShipPoints% = 100: ShipType = 6: OutOf = 1
1115:       Hits = 0: HitsTotal = 75
1116:     END IF
1117: END SUB
1118: 
1119: SUB YouLose (Score%, Ships%)
1120:   FOR times = 1 TO 50
1121:     SCREEN 7, 0, 1, 0
1122:     CLS
1123:     CALL stars: CALL Statistics(Score%, Ships%)
1124:     LOCATE 13, 17: COLOR 12: PRINT "Game Over"
1125:     SCREEN 7, 0, 0, 0: PCOPY 1, 0
1126:   NEXT
1127: END SUB
1128: 
5748340 [rkeene@sledge /home/rkeene/devel/archive/quickbasic]$

Click here to go back to the directory listing.
Click here to download this file.
last modified: 2000-05-09 21:08:35