1
1
Fork 0
mirror of https://github.com/QB64Official/qb64.git synced 2024-09-04 11:10:15 +00:00
qb64/programs/samples/misc/xwing.bas
SMcNeill 6e01fc8dce Altered string compare routines (<,<=,>,>=) so they don't give false results with CHR$(0).
Added new _STRCMP and _STRICMP commands for quick string comparisons.
Cleaned up QB64 to finish removing the QUI (quick user insert) code and folders.
Altered UCASE and LCASE routines to be faster in some situations for us.
2014-09-22 08:19:03 -04:00

816 lines
38 KiB
QBasic

'CONTROLS:
'ARROW KEYS - AIM UP/DOWN/LEFT/RIGHT
'SPACE - FIRE CANNON
'ENTER - FIRE TORPEDO
'1-9 - CHANGE ENGINE SPEED
'KEY OFF
DEFINT A-Z: DEFSNG G, J, O, S
CLS
SCREEN 0
WIDTH 40
PRINT "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿"
PRINT "³ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿³"
PRINT "³³ ³³"
PRINT "³³ 2060-A.BAS ³³"
PRINT "³³ XWING ³³"
PRINT "³³ ³³"
PRINT "³³ BROUGHT TO YOU BY DATATECH ³³"
PRINT "³³ ³³"
PRINT "³³ MICHAEL KNOX WAUSAU WI 54403 ³³"
PRINT "³³ ³³"
PRINT "³³ ³³"
PRINT "³³ MODIFIED BY GALLEON TO ³³"
PRINT "³³ BE QBASIC COMPATIBLE ³³"
PRINT "³³ ³³"
PRINT "³³ ³³"
PRINT "³³ QB64 DEMO #5: X-WING FIGHTER ³³"
PRINT "³³ ³³"
PRINT "³³ ³³"
PRINT "³ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ³"
PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ"
PRINT
PRINT " PRESS ANY KEY TO CONTINUE"
260 A$ = INKEY$: IF A$ = "" THEN 260
WIDTH 80
CLS
REM * STAR PILOT GAME *
REM * WRITTEN BY MICHAEL KNOX WAUSAU WI *
REM * FOR PUBLIC DOMAIN UNLESS MOVIEMAKERS OBJECT *
REM * VERSION 2.0 JANUARY 4, 1996 *
REM * PRODUCED BY WILD BOAR PRODUCTIONS *
REM * WILD BOAR PRODUCTIONS WAUSAU WI *
REM * JANUARY 1996 *
'KEY OFF
CLS : WIDTH 80: DEF SEG = 0: A = PEEK(&H410): POKE &H410, (A AND &HCF) OR &H20
WIDTH 40: SCREEN 1: SCREEN 0: WIDTH 80: WIDTH 40: SCREEN 1: COLOR 0, 1
GOTO 1200
1100 V = V - 1: IF V < -3 THEN V = -3
RETURN
1120 W = W - 1: IF W < -5 THEN W = -5
RETURN
1140 W = W + 1: IF W > 5 THEN W = 5
RETURN
1160 V = V + 1: IF V > 3 THEN V = 3
RETURN
1180 RETURN 'KEY(1) ON: KEY(2) ON: KEY(11) ON: KEY(12) ON: KEY(13) ON: KEY(14) ON: RETURN
1190 RETURN 'KEY(1) STOP: KEY(2) STOP: KEY(11) STOP: KEY(12) STOP: KEY(13) STOP: KEY(14) STOP: RETURN
1200 LOCATE 8, 1: PRINT "****************************************";
PRINT "* *";
PRINT "* X W I N G F I G H T E R *";
PRINT "* *";
PRINT "****************************************";
SOUND 525.25, 18.2: SOUND 783.99, 18.2 / 2: SOUND 698.46, 18.2 / 6: SOUND 659.26, 18.2 / 6: SOUND 587.33, 18.2 / 6: SOUND 1046.6, 18.2: SOUND 783.99, 18.2 / 2: SOUND 698.46, 18.2 / 6: SOUND 659.26, 18.2 / 6: SOUND 587.33, 18.2 / 6
SOUND 1046.5, 18.2: SOUND 783.99, 18.2 / 2: SOUND 698.46, 18.2 / 6: SOUND 659.26, 18.2 / 6: SOUND 698.46, 18.2 / 6: SOUND 587.33, 18.2
1270 LOCATE 16, 1: PRINT "DO YOU WANT INSTRUCTIONS (Y OR N)?";
K$ = INKEY$: IF K$ = "Y" OR K$ = "y" GOTO 6930
IF K$ <> "N" AND K$ <> "n" GOTO 1270
1300 CLS
IF RESTARTED% THEN END ELSE RESTARTED% = 1
RANDOMIZE (VAL(RIGHT$(TIME$, 2)))
'ON KEY(1) GOSUB 5350: ON KEY(2) GOSUB 5750: ON KEY(11) GOSUB 1100: ON KEY(12) GOSUB 1120: ON KEY(13) GOSUB 1140: ON KEY(14) GOSUB 1160
LOCATE 8, 1: PRINT "IMPERIAL FIGHTER: ": DRAW2$ = "C2;BM145,59;M+0,0;BM+10,1;M+0,-2;M+2,2;M+0,-2;BM+10,-1;M+0,4;BM+6,-4;M+0,4;M+0,-2;M-6,0": GOSUB DRAW2
DIM IM(6): DIM IM1(6): DIM IM2(6): DIM IM3(6): GET (145, 59)-(145, 59), IM: GET (145, 59)-(145, 59), IM1: GET (155, 58)-(157, 60), IM2: GET (167, 57)-(173, 61), IM3
DIM IM4(13): IM4(0) = 22: IM4(1) = 7: IM4(2) = 128: IM4(3) = -32760: IM4(4) = 2048: IM4(5) = 128: IM4(6) = -22008: IM4(7) = -22358: IM4(8) = 128: IM4(9) = -32760: IM4(10) = 2048: IM4(11) = 128: IM4(12) = 8
DIM IM5(20): IM5(0) = 26: IM5(1) = 9: IM5(2) = 128: IM5(3) = -32768!: IM5(4) = 128: IM5(5) = -32768!: IM5(6) = 128: IM5(7) = -32768!: IM5(8) = 128: IM5(9) = -32768!: IM5(10) = -21846: IM5(11) = -32598: IM5(12) = 128
IM5(13) = -32768!: IM5(14) = 128: IM5(15) = -32768!: IM5(16) = 128: IM5(17) = -32768!: IM5(18) = 128: IM5(19) = -32768!
DIM IM6(44): IM6(0) = 34: IM6(1) = 17: IM6(2) = 2048: IM6(5) = 32: IM6(7) = -32768!: IM6(9) = 512: IM6(12) = -32760: IM6(14) = 8192: IM6(15) = 32: IM6(17) = 2176: IM6(20) = 2: IM6(23) = 128: IM6(25) = 8192: IM6(28) = 8
IM6(29) = 128: IM6(30) = 512: IM6(31) = 2: IM6(33) = -30720: IM6(36) = 32: IM6(38) = -32768!: IM6(40) = 512: IM6(43) = 8
DIM IM7(44)
IM7(0) = 30: IM7(1) = 21: IM7(2) = -22006: IM7(3) = -22358: IM7(4) = 32: IM7(5) = 8192: IM7(6) = -21846: IM7(7) = -32598: IM7(8) = 2048: IM7(9) = 128
IM7(10) = 2048: IM7(11) = 128: IM7(12) = 2048: IM7(13) = 128: IM7(14) = 2048: IM7(15) = 128: IM7(16) = 2048: IM7(17) = 128: IM7(18) = 2048: IM7(19) = 128
IM7(20) = 2560: IM7(21) = 32: IM7(22) = 2048: IM7(23) = 128: IM7(24) = 8704: IM7(25) = 128: IM7(26) = 2048: IM7(27) = 128: IM7(28) = 2048: IM7(29) = 128
IM7(30) = 2048: IM7(31) = 128: IM7(32) = 2048: IM7(33) = 128: IM7(34) = 2048: IM7(35) = 128: IM7(36) = 2048: IM7(37) = 128: IM7(38) = -22518: IM7(39) = -22358
IM7(40) = 2592: IM7(41) = 8192: IM7(42) = -21846: IM7(43) = -32598
DIM IM8(102)
IM8(0) = 50: IM8(1) = 29: IM8(3) = 2048: IM8(7) = 10: IM8(10) = 2048: IM8(11) = 128: IM8(14) = 8200: IM8(17) = 2048: IM8(18) = 8: IM8(21) = 514
IM8(25) = -32640: IM8(28) = 8192: IM8(29) = 32: IM8(32) = 2184: IM8(35) = 514: IM8(36) = 2: IM8(38) = 2048: IM8(39) = -32760: IM8(40) = 128: IM8(42) = 8352
IM8(43) = -32736: IM8(45) = 8194: IM8(46) = 2176: IM8(47) = 128: IM8(48) = 512: IM8(49) = 34: IM8(50) = -32766: IM8(51) = 128: IM8(52) = 10250: IM8(54) = -24448
IM8(55) = 8704: IM8(56) = 32: IM8(58) = 136: IM8(59) = -24446: IM8(61) = -32256: IM8(62) = 514: IM8(63) = 128: IM8(65) = -30592: IM8(66) = 8: IM8(68) = 8192
IM8(69) = 8224: IM8(72) = 8200: IM8(73) = 128: IM8(75) = 512: IM8(76) = 34: IM8(79) = -22528: IM8(80) = 128: IM8(83) = 8224: IM8(86) = 2048: IM8(87) = 8
IM8(90) = 2050: IM8(94) = 136: IM8(97) = 10240: IM8(101) = 8
LOCATE 10, 1: PRINT "DARTH VADER : ": DRAW2$ = "C2;BM145,75;M+0,0;BM+10,1;M+0,-2;M+2,2;M+0,-2;BM+11,-1;M-1,1;M+0,2;M+1,1;BM+4,-4;M+1,1;M+0,2;M-1,1;BM+1,-2;M-6,0": GOSUB DRAW2
DIM DV(6): DIM DV1(6): DIM DV2(6): DIM DV3(6): GET (145, 75)-(145, 75), DV: GET (145, 75)-(145, 75), DV1: GET (155, 74)-(157, 76), DV2: GET (167, 73)-(173, 77), DV3
DIM DV4(13)
DV4(0) = 22: DV4(1) = 7: DV4(2) = 8: DV4(3) = 8320: DV4(4) = 8192: DV4(5) = 128: DV4(6) = -22008: DV4(7) = -22358: DV4(8) = 128: DV4(9) = 8200
DV4(10) = 8192: DV4(11) = 8: DV4(12) = 128
DIM DV5(20)
DV5(0) = 26: DV5(1) = 9: DV5(2) = 8: DV5(3) = 8: DV5(4) = 32: DV5(5) = 2: DV5(6) = 128: DV5(7) = -32768!: DV5(8) = 128: DV5(9) = -32768!
DV5(10) = -21846: DV5(11) = -32598: DV5(12) = 128: DV5(13) = -32768!: DV5(14) = 128: DV5(15) = -32768!: DV5(16) = 32: DV5(17) = 2: DV5(18) = 8: DV5(19) = 8
DIM DV6(32)
DV6(0) = 30: DV6(1) = 15: DV6(2) = -22528: DV6(4) = 2: DV6(6) = 8: DV6(8) = 34: DV6(10) = -32640: DV6(12) = 8320: DV6(14) = 2176: DV6(16) = 512
DV6(19) = 2176: DV6(21) = 2080: DV6(23) = 2056: DV6(25) = 8194: DV6(27) = -32768!: DV6(29) = 2: DV6(31) = 168
DIM DV7(44)
DV7(0) = 32: DV7(1) = 21: DV7(2) = 10752: DV7(3) = -24406: DV7(4) = -32768!: DV7(5) = -30720: DV7(6) = -22014: DV7(7) = 682: DV7(8) = 520: DV7(9) = -30688
DV7(10) = 544: DV7(11) = 8224: DV7(12) = 512: DV7(13) = 32: DV7(14) = 512: DV7(15) = 32: DV7(16) = 512: DV7(17) = 32: DV7(18) = 512: DV7(19) = 32
DV7(20) = 512: DV7(21) = 136: DV7(22) = 512: DV7(23) = 32: DV7(24) = 2048: DV7(25) = 160: DV7(26) = 512: DV7(27) = 32: DV7(28) = 512: DV7(29) = 32
DV7(30) = 512: DV7(31) = 32: DV7(32) = 512: DV7(33) = 32: DV7(34) = 520: DV7(35) = 544: DV7(36) = 546: DV7(37) = 2080: DV7(38) = -21888: DV7(39) = -24534
DV7(40) = 546: DV7(41) = -32640: DV7(42) = -22006: DV7(43) = 170
DIM DV8(76)
DV8(0) = 46: DV8(1) = 25: DV8(3) = 10752: DV8(4) = 128: DV8(6) = -32768!: DV8(7) = 32: DV8(9) = -22526: DV8(10) = 8: DV8(12) = 512: DV8(13) = 2
DV8(16) = -32640: DV8(18) = 512: DV8(19) = 8224: DV8(21) = 2048: DV8(22) = 2056: DV8(24) = 8192: DV8(25) = 2082: DV8(27) = -32766: DV8(28) = -30592: DV8(30) = -32248
DV8(31) = 10240: DV8(32) = 128: DV8(33) = -30712: DV8(34) = 2048: DV8(35) = 128: DV8(36) = -24536: DV8(37) = 2048: DV8(38) = 128: DV8(39) = -32630: DV8(40) = 2048
DV8(41) = 672: DV8(42) = -32760: DV8(44) = 2184: DV8(45) = 10: DV8(47) = 8322: DV8(48) = 32: DV8(50) = -32640: DV8(51) = 128: DV8(53) = -32224: DV8(56) = -30712
DV8(59) = -24062: DV8(62) = -32768!: DV8(63) = 168: DV8(65) = 8192: DV8(66) = 136: DV8(68) = 2048: DV8(69) = 136: DV8(71) = 512: DV8(72) = 136: DV8(75) = 168
LOCATE 12, 1: PRINT "DEATH STAR : ": DRAW2$ = "C3;BM145,91;M+0,0;BM+11,-1;M-1,1;M+2,0;M-1,1;BM+12,-3;M+1,0;M+1,1;M-3,0;M+0,1;M+3,0;M-1,1;M-1,0": GOSUB DRAW2
DRAW2$ = "C3;BM+12,-5;M+2,0;M+1,1;M-4,0;M-1,1;M+6,0;M+0,1;M-6,0;M+0,1;M+6,0;M-1,1;M-4,0;M+1,1;M+2,0": GOSUB DRAW2
DIM DS(8): DIM DS1(8): DIM DS2(8): DIM DS3(8): DIM DS4(8): GET (145, 91)-(145, 91), DS: GET (145, 91)-(145, 91), DS1: GET (155, 90)-(157, 92), DS2: GET (167, 89)-(170, 92), DS3: GET (178, 87)-(184, 93), DS4
DIM EXPL3(18): DIM EXPL4(18): DIM EXPL5(18): DIM EXPL6(18): DIM EXPL7(18): DIM EXPL8(18)
DATA 22,11,0,0,0,8194,0,-32608,-22006,2560,-32598,-22006,128,168,8706,0,0,0,0
FOR i = 0 TO 18: READ EXPL3(i): NEXT i
DATA 22,11,-30720,2048,136,-30718,-24544,-32608,-22006,-21848,-22358,-22006,-23936,10274,-30206,2048,-32632,-30720,0
FOR i = 0 TO 18: READ EXPL4(i): NEXT i
DATA 22,11,-30712,512,136,8194,-32760,-24416,-21974,-21976,-22358,-21974,-32608,2216,-30206,512,138,-30712,128
FOR i = 0 TO 18: READ EXPL5(i): NEXT i
DATA 22,11,-30712,2048,136,8194,-24536,-32608,-22006,-21976,-22358,-22006,-24448,10408,8706,2048,-32632,-30712,128
FOR i = 0 TO 18: READ EXPL6(i): NEXT i
DATA 22,11,-30688,2048,2080,8194,-32736,-32608,-21974,-22008,-22358,-22006,-24448,10408,8706,2048,-32632,-30688,32
FOR i = 0 TO 18: READ EXPL7(i): NEXT i
DATA 22,11,-30688,2048,2184,-30718,-24544,-32608,-22006,-21848,-22358,-22006,-23936,10274,-30206,2048,-32632,-30688,32
FOR i = 0 TO 18: READ EXPL8(i): NEXT i
1920 LOCATE 17, 1: PRINT "SELECT SKILL LEVEL FROM 0 TO 3"
S$ = INKEY$: IF S$ <> "0" AND S$ <> "1" AND S$ <> "2" AND S$ <> "3" GOTO 1920
SKILL = VAL(S$): CLS
DIM LASAR(381)
LASAR(0) = 148: LASAR(1) = 40: LASAR(2) = 64: LASAR(11) = 5136: LASAR(20) = 16385: LASAR(21) = 16385: LASAR(29) = 5120: LASAR(31) = 20: LASAR(38) = 256: LASAR(39) = 64: LASAR(40) = 256: LASAR(41) = 64: LASAR(48) = 20
LASAR(50) = 5120: LASAR(57) = 16385: LASAR(60) = 16385: LASAR(66) = 5120: LASAR(70) = 20: LASAR(75) = 256: LASAR(76) = 64: LASAR(79) = 256: LASAR(85) = 4: LASAR(89) = 20480: LASAR(94) = 20480: LASAR(99) = 5
LASAR(103) = 1280: LASAR(109) = 80: LASAR(113) = 80: LASAR(118) = 1280: LASAR(122) = 5: LASAR(128) = 20480: LASAR(131) = 20480: LASAR(138) = 5: LASAR(140) = 1280: LASAR(148) = 80: LASAR(150) = 80
LASAR(157) = 1024: LASAR(159) = 1: LASAR(167) = 16385: LASAR(168) = 5120: LASAR(177) = 276: LASAR(178) = 64: LASAR(186) = 256: LASAR(187) = 84: LASAR(196) = 21505: LASAR(205) = 5120: LASAR(206) = 16385
LASAR(214) = 256: LASAR(215) = 64: LASAR(216) = 20: LASAR(224) = 4: LASAR(225) = 256: LASAR(233) = 20480: LASAR(235) = 20480: LASAR(242) = 1280: LASAR(245) = 5: LASAR(252) = 80: LASAR(255) = 80
LASAR(261) = 5: LASAR(264) = 1280: LASAR(270) = 20480: LASAR(274) = 20480: LASAR(279) = 1280: LASAR(284) = 5: LASAR(289) = 80: LASAR(294) = 80: LASAR(298) = 1: LASAR(303) = 1024: LASAR(307) = 5120
LASAR(313) = 16385: LASAR(316) = 256: LASAR(317) = 64: LASAR(323) = 20: LASAR(326) = 20: LASAR(332) = 256: LASAR(333) = 64: LASAR(335) = 16385: LASAR(342) = 5120: LASAR(344) = 5120: LASAR(352) = 16385
LASAR(353) = 256: LASAR(354) = 64: LASAR(362) = 20: LASAR(363) = 20: LASAR(371) = 256: LASAR(372) = 16448: LASAR(381) = 4096
REM * INITIALIZE VARIABLES *
M = INT(RND * 61) + 10: N = INT(RND * 21) + 10: O = INT(RND * 32001) + 70000!
E = INT(RND * 61) + 10: F = INT(RND * 21) + 10: G = 25000
H = INT(RND * 61) + 10: i = INT(RND * 21) + 10: J = INT(RND * 32001) + 40000!
Q = 5: Z = 3
IMX = 38: IMY = 21: IMR1 = 1: IMR2 = 1
DVX = 38: DVY = 21: DVR1 = 1: DVR2 = 1
IF SKILL = 0 THEN A1 = 5: A2 = 0: BYPASS = 3
IF SKILL = 1 THEN A1 = 3: A2 = 0: BYPASS = 2
IF SKILL = 2 THEN A1 = 2: A2 = 45: BYPASS = 1
IF SKILL = 3 THEN A1 = 2: A2 = 30
K$ = "5"
LINE (1, 1)-(76, 42), 3, B
DRAW2$ = "C3;BM2,21;M+0,0;BM+6,0;M+0,0;BM+6,0;M+0,0;BM+6,0;M+0,0;BM+6,0;M+0,0;BM+6,0;M+0,0;BM+12,0;M+0,0;BM+6,0;M+0,0;BM+6,0;M+0,0;BM+6,0;M+0,0;BM+6,0;M+0,0;BM+6,0;M+0,0": GOSUB DRAW2
DRAW2$ = "C3;BM38,3;M+0,0;BM+0,3;M+0,0;BM+0,3;M+0,0;BM+0,3;M+0,0;BM+0,3;M+0,0;BM+0,3;M+0,0;BM+0,6;M+0,0;BM+0,3;M+0,0;BM+0,3;M+0,0;BM+0,3;M+0,0;BM+0,3;M+0,0;BM+0,3;M+0,0": GOSUB DRAW2
LOCATE 8, 1: PRINT "REPUBLIC X-WING STAR FIGHTER"
LOCATE 10, 5: PRINT "TORPEDOES"
LOCATE 12, 1: PRINT "HOR. VERT. DIRECTION"
LOCATE 15, 1: PRINT "SPEED MACH"
LOCATE 17, 1: PRINT "RADAR TARGETS"
LOCATE 18, 8: PRINT "KM TO IMPERIAL FIGHTER"
LOCATE 19, 8: PRINT "KM TO DARTH VADER"
LOCATE 20, 8: PRINT "KM TO DEATH STAR"
LOCATE 22, 1: PRINT "TIME REMAINING"
'PLAY "T250"
SEC1 = VAL(RIGHT$(TIME$, 2))
GOSUB 1180
REM * MASTER CONTROL ROUTINE *
2320 GOSUB 1190
PUT (38, 21), DS1
LOCATE 10, 1: PRINT Z
LOCATE 13, 1: PRINT W; " "; -V
LOCATE 15, 12: PRINT Q * 10
GS = G - S: IF GS < 0 THEN GS = 0
LOCATE 18, 1: PRINT GS
JS = J - S: IF JS < 0 THEN JS = 0
LOCATE 19, 1: PRINT JS
OS = O - S: IF OS < 0 THEN OS = 0
LOCATE 20, 1: PRINT OS
LOCATE 22, 16: PRINT A1; ":"; A2NEW
SOUND 37 * Q, 1
PUT (38, 21), DS1
GOSUB 1180
REM * DISPLAY DEATH STAR *
IF O - S = 30000 OR O - S > 30000 GOTO 2840
IF O - S < 20000 AND DSTAR2 = 0 THEN DSTAR2 = 1: DSFLAG = 1: DS(0) = DS2(0): DS(1) = DS2(1): DS(2) = DS2(2): DS(3) = DS2(3)
IF O - S < 10000 AND DSTAR3 = 0 THEN DSTAR3 = 1: DSFLAG = 2: DS(0) = DS3(0): DS(1) = DS3(1): DS(2) = DS3(2): DS(3) = DS3(3)
IF O - S < 5000 AND DSTAR4 = 0 THEN DSTAR4 = 1: DSFLAG = 3: DS(0) = DS4(0): DS(1) = DS4(1): DS(2) = DS4(2): DS(3) = DS4(3): DS(4) = DS4(4): DS(5) = DS4(5): DS(6) = DS4(6): DS(7) = DS4(7): DS(8) = DS4(8)
IF FLAG1 <> BYPASS THEN FLAG1 = FLAG1 + 1: GOTO 2550
FLAG1 = 0
M = M + INT(RND * 5) - 2: N = N + INT(RND * 5) - 2
2550 M = M - W: N = N - V
IF M < 2 THEN M = 2 + INT(RND * 3)
IF M > 69 THEN M = 69 - INT(RND * 3)
IF N < 2 THEN N = 2 + INT(RND * 3)
IF N > 35 THEN N = 35 - INT(RND * 3)
GOSUB 1190
PUT (M, N), DS
IF DSNEW = 0 THEN DSNEW = 1: GOTO 2680
IF DSFLAG = 0 GOTO 2670
IF DSFLAG = 1 THEN DSFLAG = 0: PUT (MP, NP), DS1: GOTO 2680
IF DSFLAG = 2 THEN DSFLAG = 0: PUT (MP, NP), DS2: GOTO 2680
IF DSFLAG = 3 THEN DSFLAG = 0: PUT (MP, NP), DS3: GOTO 2680
2670 PUT (MP, NP), DS
2680 GOSUB 1180
MP = M: NP = N
IF O - S > 10000 OR FLAG = 1 GOTO 2840
GOSUB 1190
FOR K = 1 TO 2
LOCATE 24, 1: PRINT "*** DEATH STAR WITHIN TORPEDO RANGE ***";
DELAYPERIOD% = 2: GOSUB DELAY 'PLAY "L2 N0"
LOCATE 24, 1: PRINT " ";
DELAYPERIOD% = 16: GOSUB DELAY 'PLAY "L16 N0"
NEXT K
LOCATE 24, 1: PRINT "*** DEATH STAR WITHIN TORPEDO RANGE ***";
DELAYPERIOD% = 1: GOSUB DELAY: GOSUB DELAY 'PLAY "L1 N0": PLAY "L1 N0"
LOCATE 24, 1: PRINT " ";
GOSUB 1180
FLAG = 1
REM * DISPLAY IMPERIAL FIGHTER *
2840 GOSUB 1190
IF G - S > 26000 THEN GOSUB 1180: GOTO 3910
IF G - S < 20000 AND IMPFIGH2 = 0 THEN IMPFIGH2 = 1: IMFLAG = 1: IM(0) = IM2(0): IM(1) = IM2(1): IM(2) = IM2(2): IM(3) = IM2(3): IMX = 37: IMY = 20: IMR1 = 2: IMR2 = 2
IF G - S < 10000 AND IMPFIGH3 = 0 THEN IMPFIGH3 = 1: IMFLAG = 2: IM(0) = IM3(0): IM(1) = IM3(1): IM(2) = IM3(2): IM(3) = IM3(3): IM(4) = IM3(4): IM(5) = IM3(5): IM(6) = IM3(6): IMX = 35: IMY = 19: IMR1 = 4: IMR2 = 3
IF FLAG2 <> BYPASS THEN FLAG2 = FLAG2 + 1: GOTO 2910
FLAG2 = 0
E = E + INT(RND * 5) - 2: F = F + INT(RND * 5) - 2
2910 E = E - W: F = F - V
IF E < 2 THEN E = 2 + INT(RND * 3)
IF E > 69 THEN E = 69 - INT(RND * 3)
IF F < 2 THEN F = 2 + INT(RND * 3)
IF F > 37 THEN F = 37 - INT(RND * 3)
PUT (E, F), IM
IF IMNEW = 0 THEN IMNEW = 1: GOTO 3020
IF IMFLAG = 0 GOTO 3010
IF IMFLAG = 1 THEN IMFLAG = 0: PUT (EP, FP), IM1: GOTO 3020
IF IMFLAG = 2 THEN IMFLAG = 0: PUT (EP, FP), IM2: GOTO 3020
3010 PUT (EP, FP), IM
3020 GOSUB 1180
EP = E: FP = F
IF G - S > 5000 OR FLAG3 = 1 GOTO 3170
GOSUB 1190
FOR K = 1 TO 2
LOCATE 24, 1: PRINT "**** IMPERIAL FIGHTER ATTACKS ****";
DELAYPERIOD% = 2: GOSUB DELAY 'PLAY "L2 N0"
LOCATE 24, 1: PRINT " ";
DELAYPERIOD% = 16: GOSUB DELAY 'PLAY "L16 N0"
NEXT K
LOCATE 24, 1: PRINT "**** IMPERIAL FIGHTER ATTACKS ****";
DELAYPERIOD% = 1: GOSUB DELAY: GOSUB DELAY 'PLAY "L1 N0": PLAY "L1 N0"
LOCATE 24, 1: PRINT " ";
GOSUB 1180
FLAG3 = 1
3170 IF G > S THEN GOTO 3910
REM * IMPERIAL FIGHTER ATTACKS *
FLAG3 = 0: IMNEW = 0: IMNEW1 = 0: IMPFIGH2 = 0: IMPFIGH3 = 0: PUT (E, F), IM
GOSUB 1190
3210 DELTAX = 29 - E: DELTAY = 19 - F
IF DELTAX > 0 THEN E = E + 1
IF DELTAX < 0 THEN E = E - 1
IF DELTAY > 0 THEN F = F + 1
IF DELTAY < 0 THEN F = F - 1
IF DELTAX = 0 AND DELTAY = 0 GOTO 3320
PUT (E, F), IM: IF IMNEW1 = 0 THEN IMNEW1 = 1: GOTO 3290
PUT (EP, FP), IM
3290 EP = E: FP = F
DELAYPERIOD% = 32: GOSUB DELAY 'PLAY "P32"
GOTO 3210
3320 PUT (EP - 4, FP - 1), IM4
PUT (EP, FP), IM
DELAYPERIOD% = 4: GOSUB DELAY 'PLAY "P4"
PUT (EP - 9, FP - 2), IM5
PUT (EP - 4, FP - 1), IM4
DELAYPERIOD% = 4: GOSUB DELAY 'PLAY "P4"
PUT (EP - 12, FP - 6), IM6
PUT (EP - 9, FP - 2), IM5
DELAYPERIOD% = 4: GOSUB DELAY 'PLAY "P4"
PUT (EP - 9, FP - 7), IM7
PUT (EP - 12, FP - 6), IM6
DELAYPERIOD% = 4: GOSUB DELAY 'PLAY "P4"
PUT (EP - 20, FP - 14), IM8
PUT (EP - 9, FP - 7), IM7
DELAYPERIOD% = 4: GOSUB DELAY 'PLAY "P4"
PUT (EP - 20, FP - 14), IM8
FOR J2 = 10000 TO 100 STEP -500
SOUND J2, .001 * 18.2
NEXT J2
FOR A = 1 TO 50: NEXT A
FOR J2 = 10000 TO 100 STEP -500
SOUND J2, .001 * 18.2
NEXT J2
G = G + 25000
E = INT(RND * 61) + 10: F = INT(RND * 21) + 10
K = INT(RND * 10)
IF K > SKILL THEN 3790
'KEY(1) OFF: KEY(2) OFF: KEY(11) OFF: KEY(12) OFF: KEY(13) OFF: KEY(14) OFF
3600 CLS
PRINT "BLAM!"
FOR J2 = 1000 TO 37 STEP -10
SOUND J2, .01 * 18.2
NEXT J2
PRINT
DELAYPERIOD% = 1: GOSUB DELAY: GOSUB DELAY: GOSUB DELAY 'PLAY "L1 N0": PLAY "L1 N0": PLAY "L1 N0"
PRINT "YOU HAVE JUST BEEN SHOT DOWN BY AN";
PRINT "IMPERIAL SKY FIGHTER!"
PRINT
DELAYPERIOD% = 1: GOSUB DELAY: GOSUB DELAY: GOSUB DELAY 'PLAY "L1 N0": PLAY "L1 N0": PLAY "L1 N0"
PRINT "YOU ARE A HERO!"
PRINT
PRINT "UNFORTUNATELY, YOU ARE A DEAD HERO AND";
PRINT "DEAD HEROES DON'T WIN WARS. DARTH VADER";
PRINT "WINS!"
PRINT
PRINT "********* YOU LOSE!! *********"
GOTO 5310
3790 FOR K = 1 TO 2
LOCATE 24, 1: PRINT "**** IMPERIAL FIGHTER MISSED ****";
DELAYPERIOD% = 2: GOSUB DELAY 'PLAY "L2 N0"
LOCATE 24, 1: PRINT " ";
DELAYPERIOD% = 16: GOSUB DELAY 'PLAY "L16 N0"
NEXT K
LOCATE 24, 1: PRINT "**** IMPERIAL FIGHTER MISSED ****";
DELAYPERIOD% = 1: GOSUB DELAY: GOSUB DELAY 'PLAY "L1 N0": PLAY "L1 N0"
LOCATE 24, 1: PRINT " ";
IM(0) = IM1(0): IM(1) = IM1(1): IM(2) = IM1(2): IM(3) = IM1(3): IM(4) = IM1(4): IM(5) = IM1(5): IM(6) = IM1(6)
GOSUB 1180
REM * DISPLAY DARTH VADER *
3910 GOSUB 1190
IF J - S > 26000 THEN GOSUB 1180: GOTO 5140
IF J - S < 20000 AND DVADER2 = 0 THEN DVADER2 = 1: DVFLAG = 1: DV(0) = DV2(0): DV(1) = DV2(1): DV(2) = DV2(2): DV(3) = DV2(3): DVX = 37: DVY = 20: DVR1 = 2: DVR2 = 2
IF J - S < 10000 AND DVADER3 = 0 THEN DVADER3 = 1: DVFLAG = 2: DV(0) = DV3(0): DV(1) = DV3(1): DV(2) = DV3(2): DV(3) = DV3(3): DV(4) = DV3(4): DV(5) = DV3(5): DV(6) = DV3(6): DVX = 35: DVY = 19: DVR1 = 4: DVR2 = 3
IF FLAG2 <> BYPASS THEN FLAG2 = FLAG2 + 1: GOTO 3980
FLAG2 = 0
H = H + INT(RND * 5) - 2: i = i + INT(RND * 5) - 2
3980 H = H - W: i = i - V
IF H < 2 THEN H = 2 + INT(RND * 3)
IF H > 69 THEN H = 69 - INT(RND * 3)
IF i < 2 THEN i = 2 + INT(RND * 3)
IF i > 37 THEN i = 37 - INT(RND * 3)
PUT (H, i), DV
IF DVNEW = 0 THEN DVNEW = 1: GOTO 4090
IF DVFLAG = 0 GOTO 4080
IF DVFLAG = 1 THEN DVFLAG = 0: PUT (HP, IP), DV1: GOTO 4090
IF DVFLAG = 2 THEN DVFLAG = 0: PUT (HP, IP), DV2: GOTO 4090
4080 PUT (HP, IP), DV
4090 GOSUB 1180
HP = H: IP = i
IF J - S > 5000 OR FLAG4 = 1 GOTO 4350
GOSUB 1190
IF DVGONE = 0 GOTO 4240
FOR K = 1 TO 2
LOCATE 24, 1: PRINT "**** IMPERIAL FIGHTER ATTACKS ****";
DELAYPERIOD% = 2: GOSUB DELAY 'PLAY "L2 N0"
LOCATE 24, 1: PRINT " ";
DELAYPERIOD% = 16: GOSUB DELAY 'PLAY "L16 N0"
NEXT K
LOCATE 24, 1: PRINT "**** IMPERIAL FIGHTER ATTACKS ****";
DELAYPERIOD% = 1: GOSUB DELAY: GOSUB DELAY 'PLAY "L1 N0": PLAY "L1 N0"
LOCATE 24, 1: PRINT " ";
GOTO 4330
4240 FOR K = 1 TO 2
LOCATE 24, 1: PRINT "**** DARTH VADER ATTACKS ****";
DELAYPERIOD% = 2: GOSUB DELAY 'PLAY "L2 N0"
LOCATE 24, 1: PRINT " ";
DELAYPERIOD% = 16: GOSUB DELAY 'PLAY "L16 N0"
NEXT K
LOCATE 24, 1: PRINT "**** DARTH VADER ATTACKS ****";
DELAYPERIOD% = 1: GOSUB DELAY: GOSUB DELAY 'PLAY "L1 N0": PLAY "L1 N0"
LOCATE 24, 1: PRINT " ";
4330 FLAG4 = 1
GOSUB 1180
4350 IF J > S THEN GOTO 5140
REM * DARTH VADER ATTACKS *
FLAG4 = 0: DVNEW = 0: DVNEW1 = 0: DVADER2 = 0: DVADER3 = 0: PUT (H, i), DV
GOSUB 1190
4390 DELTAX = 41 - H: DELTAY = 19 - i
IF DELTAX > 0 THEN H = H + 1
IF DELTAX < 0 THEN H = H - 1
IF DELTAY > 0 THEN i = i + 1
IF DELTAY < 0 THEN i = i - 1
IF DELTAX = 0 AND DELTAY = 0 GOTO 4500
PUT (H, i), DV: IF DVNEW1 = 0 THEN DVNEW1 = 1: GOTO 4470
PUT (HP, IP), DV
4470 HP = H: IP = i
DELAYPERIOD% = 32: GOSUB DELAY 'PLAY "P32"
GOTO 4390
4500 IF DVGONE = 0 THEN PUT (HP, IP - 1), DV4 ELSE PUT (HP, IP - 1), IM4
PUT (HP, IP), DV
DELAYPERIOD% = 4: GOSUB DELAY 'PLAY "P4"
IF DVGONE = 0 THEN PUT (HP + 3, IP - 2), DV5 ELSE PUT (HP + 3, IP - 2), IM5
IF DVGONE = 0 THEN PUT (HP, IP - 1), DV4 ELSE PUT (HP, IP - 1), IM4
DELAYPERIOD% = 4: GOSUB DELAY 'PLAY "P4"
IF DVGONE = 0 THEN PUT (HP + 2, IP - 6), DV6 ELSE PUT (HP + 2, IP - 6), IM6
IF DVGONE = 0 THEN PUT (HP + 3, IP - 2), DV5 ELSE PUT (HP + 3, IP - 2), IM5
DELAYPERIOD% = 4: GOSUB DELAY 'PLAY "P4"
IF DVGONE = 0 THEN PUT (HP + 1, IP - 6), DV7 ELSE PUT (HP + 1, IP - 6), IM7
IF DVGONE = 0 THEN PUT (HP + 2, IP - 6), DV6 ELSE PUT (HP + 2, IP - 6), IM6
DELAYPERIOD% = 4: GOSUB DELAY 'PLAY "P4"
IF DVGONE = 0 THEN PUT (HP + 2, IP - 6), DV8 ELSE PUT (HP + 2, IP - 6), IM8
IF DVGONE = 0 THEN PUT (HP + 1, IP - 6), DV7 ELSE PUT (HP + 1, IP - 6), IM7
DELAYPERIOD% = 4: GOSUB DELAY 'PLAY "P4"
IF DVGONE = 0 THEN PUT (HP + 2, IP - 6), DV8 ELSE PUT (HP + 2, IP - 6), IM8
FOR J2 = 10000 TO 100 STEP -500
SOUND J2, .001 * 18.2
NEXT J2
FOR A = 1 TO 50: NEXT A
FOR J2 = 10000 TO 100 STEP -500
SOUND J2, .001 * 18.2
NEXT J2
J = J + 25000
H = INT(RND * 61) + 10: i = INT(RND * 21) + 10
K = INT(RND * 10)
IF K > SKILL + 1 THEN 4910
'KEY(1) OFF: KEY(2) OFF: KEY(11) OFF: KEY(12) OFF: KEY(13) OFF: KEY(14) OFF
4780 CLS : PRINT "**** B O O M ! ****"
FOR J2 = 1000 TO 37 STEP -10
SOUND J2, .01 * 18.2
NEXT J2
PRINT
DELAYPERIOD% = 1: GOSUB DELAY: GOSUB DELAY: GOSUB DELAY 'PLAY "L1 N0": PLAY "L1 N0": PLAY "L1 N0"
IF DVGONE = 1 THEN PRINT "TOO BAD. YOU HAVE BEEN SHOT DOWN.": GOTO 4880
PRINT "YOU HAVE JUST BEEN PERSONALLY SHOT DOWN";
PRINT "BY DARTH VADER. THE FORCE WAS NOT WITH";
PRINT "YOU."
4880 PRINT
PRINT "********* YOU LOSE!! *********"
GOTO 5310
4910 IF DVGONE = 0 GOTO 5030
FOR K = 1 TO 2
LOCATE 24, 1: PRINT "**** IMPERIAL FIGHTER MISSED ****";
DELAYPERIOD% = 2: GOSUB DELAY 'PLAY "L2 N0"
LOCATE 24, 1: PRINT " ";
DELAYPERIOD% = 16: GOSUB DELAY 'PLAY "L16 N0"
NEXT K
LOCATE 24, 1: PRINT "**** IMPERIAL FIGHTER MISSED ****";
DELAYPERIOD% = 1: GOSUB DELAY: GOSUB DELAY 'PLAY "L1 N0": PLAY "L1 N0"
LOCATE 24, 1: PRINT " ";
DV(0) = DV1(0): DV(1) = DV1(1): DV(2) = DV1(2): DV(3) = DV1(3)
GOTO 5140
5030 FOR K = 1 TO 2
LOCATE 24, 1: PRINT "**** DARTH VADER MISSED ****";
DELAYPERIOD% = 2: GOSUB DELAY 'PLAY "L2 N0"
LOCATE 24, 1: PRINT " ";
DELAYPERIOD% = 16: GOSUB DELAY 'PLAY "L16 N0"
NEXT K
LOCATE 24, 1: PRINT "**** DARTH VADER MISSED ****";
DELAYPERIOD% = 1: GOSUB DELAY: GOSUB DELAY 'PLAY "L1 N0": PLAY "L1 N0"
LOCATE 24, 1: PRINT " ";
DV(0) = DV1(0): DV(1) = DV1(1): DV(2) = DV1(2): DV(3) = DV1(3): DV(4) = DV1(4): DV(5) = DV1(5): DV(6) = DV1(6)
REM * X - WING FIGHTER ROUTINE *
5140 GOSUB 1180
Z$ = INKEY$
IF LEN(Z$) = 1 THEN
IF ASC(Z$) > 48 AND ASC(Z$) <= 57 THEN Q = ASC(Z$) - 48
IF Z$ = " " THEN GOSUB 5350
IF Z$ = CHR$(13) THEN GOSUB 5750
END IF
IF LEN(Z$) = 2 THEN
IF Z$ = CHR$(0) + "H" THEN GOSUB 1100 'UP
IF Z$ = CHR$(0) + "K" THEN GOSUB 1120 'LEFT
IF Z$ = CHR$(0) + "M" THEN GOSUB 1140 'RIGHT
IF Z$ = CHR$(0) + "P" THEN GOSUB 1160 'DOWN
END IF
S = S + Q * 100
IF S > O GOTO 6410
REM * TIME ROUTINE *
SEC2 = VAL(RIGHT$(TIME$, 2))
SECNEW = SEC2
IF SECNEW = SECOLD GOTO 5280
IF SECNEW < SECOLD THEN N8 = N8 + 1
SECOLD = SEC2
A2NEW = A2 - (SEC2 + (60 * N8) - SEC1)
IF A2NEW < 0 THEN A2NEW = A2NEW + 60: A1 = A1 - 1: A2 = A2 + 60
IF A1 < 0 GOTO 6760
5280 GOTO 2320
REM * DISPLAY SKY FIGHTER *
IF J - S < 10000 THEN A = 3
5310 REM * NEW GAME *
PRINT
PRINT "HIT ENTER TO PLAY AGAIN, ESC TO GIVE UP"
'5340 B$ = INKEY$: IF B$ = CHR$(13) THEN GOTO 1300 ELSE IF B$ = CHR$(27) THEN CLS : WIDTH 80: SCREEN 0: KEY ON: GOTO 9911 ELSE GOTO 5340
5340 B$ = INKEY$: IF B$ = CHR$(13) THEN GOTO 1300 ELSE IF B$ = CHR$(27) THEN CLS : WIDTH 80: SCREEN 0: GOTO 9911 ELSE GOTO 5340
5350 REM * FIRE CANNON *
'KEY(2) STOP: KEY(11) STOP: KEY(12) STOP: KEY(13) STOP: KEY(14) STOP
PUT (2, 2), LASAR
FOR J2 = 5000 TO 100 STEP -250
SOUND J2, .01 * 18.2
NEXT J2
PUT (2, 2), LASAR
IF G - S < 26000 AND ABS(IMX - E) < IMR1 AND ABS(IMY - F) < IMR2 GOTO 5450
IF J - S < 26000 AND ABS(DVX - H) < DVR1 AND ABS(DVY - i) < DVR2 GOTO 5580
GOTO 5730
5450 FOR I9 = 1 TO 2: PUT (E - 2, F - 3), EXPL3: DELAYPERIOD% = 64: GOSUB DELAY: PUT (E - 2, F - 3), EXPL3: NEXT I9
FOR I9 = 1 TO 2: PUT (E - 2, F - 3), EXPL4: DELAYPERIOD% = 64: GOSUB DELAY: PUT (E - 2, F - 3), EXPL4: NEXT I9
PUT (E, F), IM
IF IMR2 = 1 GOTO 5540
FOR I9 = 1 TO 2: PUT (E - 2, F - 3), EXPL5: DELAYPERIOD% = 64: GOSUB DELAY: PUT (E - 2, F - 3), EXPL5: NEXT I9
FOR I9 = 1 TO 2: PUT (E - 2, F - 3), EXPL6: DELAYPERIOD% = 64: GOSUB DELAY: PUT (E - 2, F - 3), EXPL6: NEXT I9
IF IMR2 = 2 GOTO 5540
FOR I9 = 1 TO 2: PUT (E - 2, F - 3), EXPL7: DELAYPERIOD% = 64: GOSUB DELAY: PUT (E - 2, F - 3), EXPL7: NEXT I9
FOR I9 = 1 TO 2: PUT (E - 2, F - 3), EXPL8: DELAYPERIOD% = 64: GOSUB DELAY: PUT (E - 2, F - 3), EXPL8: NEXT I9
5540 G = G + 25000: E = INT(RND * 61) + 10: F = INT(RND * 21) + 10: FLAG3 = 0: IMNEW = 0: IMPFIGH2 = 0: IMPFIGH3 = 0
IMX = 38: IMY = 21: IMR1 = 1: IMR2 = 1
IM(0) = IM1(0): IM(1) = IM1(1): IM(2) = IM1(2): IM(3) = IM1(3): IM(4) = IM1(4): IM(5) = IM1(5): IM(6) = IM1(6)
GOTO 5730
5580 FOR I9 = 1 TO 2: PUT (H - 2, i - 3), EXPL3: DELAYPERIOD% = 64: GOSUB DELAY: PUT (H - 2, i - 3), EXPL3: NEXT I9
FOR I9 = 1 TO 2: PUT (H - 2, i - 3), EXPL4: DELAYPERIOD% = 64: GOSUB DELAY: PUT (H - 2, i - 3), EXPL4: NEXT I9
PUT (H, i), DV
IF DVR2 = 1 GOTO 5670
FOR I9 = 1 TO 2: PUT (H - 2, i - 3), EXPL5: DELAYPERIOD% = 64: GOSUB DELAY: PUT (H - 2, i - 3), EXPL5: NEXT I9
FOR I9 = 1 TO 2: PUT (H - 2, i - 3), EXPL6: DELAYPERIOD% = 64: GOSUB DELAY: PUT (H - 2, i - 3), EXPL6: NEXT I9
IF DVR2 = 2 GOTO 5670
FOR I9 = 1 TO 2: PUT (H - 2, i - 3), EXPL7: DELAYPERIOD% = 64: GOSUB DELAY: PUT (H - 2, i - 3), EXPL7: NEXT I9
FOR I9 = 1 TO 2: PUT (H - 2, i - 3), EXPL8: DELAYPERIOD% = 64: GOSUB DELAY: PUT (H - 2, i - 3), EXPL8: NEXT I9
5670 J = J + 25000: H = INT(RND * 61) + 10: i = INT(RND * 21) + 10: FLAG4 = 0: LOCATE 19, 8: PRINT "KM TO IMPERIAL FIGHTER";
DVNEW = 0: DVADER2 = 0: DVADER3 = 0
DVX = 38: DVY = 21: DVR1 = 1: DVR2 = 1
IF DVGONE = 0 THEN DV3(0) = IM3(0): DV3(1) = IM3(1): DV3(2) = IM3(2): DV3(3) = IM3(3): DV3(4) = IM3(4): DV3(5) = IM3(5): DV3(6) = IM3(6)
DV(0) = DV1(0): DV(1) = DV1(1): DV(2) = DV1(2): DV(3) = DV1(3): DV(4) = DV1(4): DV(5) = DV1(5): DV(6) = DV1(6)
DVGONE = 1
5730 'KEY(2) ON: KEY(11) ON: KEY(12) ON: KEY(13) ON: KEY(14) ON
RETURN
5750 REM * FIRE TORPEDO *
'KEY(1) STOP: KEY(11) STOP: KEY(12) STOP: KEY(13) STOP: KEY(14) STOP
IF Z = 0 THEN 3600
FOR J2 = 1500 TO 100 STEP -20
SOUND J2, .01 * 18.2
SOUND 3600 - J2, .01 * 18.2
NEXT J2
Z = Z - 1
IF O - S > 10000 THEN 5990
IF POINT(38, 21) <> 3 THEN 5880
IF SKILL = 0 GOTO 6100
K = INT(RND * 10)
IF K > SKILL + 1 THEN 6100
5880 FOR K = 1 TO 2
LOCATE 24, 1: PRINT "**** TORPEDO MISSED ****";
DELAYPERIOD% = 2: GOSUB DELAY 'PLAY "L2 N0"
LOCATE 24, 1: PRINT " ";
DELAYPERIOD% = 16: GOSUB DELAY 'PLAY "L16 N0"
NEXT K
LOCATE 24, 1: PRINT "**** TORPEDO MISSED ****";
DELAYPERIOD% = 1: GOSUB DELAY: GOSUB DELAY 'PLAY "L1 N0": PLAY "L1 N0"
LOCATE 24, 1: PRINT " ";
IF Z <= 0 THEN 4780
GOTO 6080
5990 FOR K = 1 TO 2
LOCATE 24, 1: PRINT "**** OUT OF RANGE ****";
DELAYPERIOD% = 2: GOSUB DELAY 'PLAY "L2 N0"
LOCATE 24, 1: PRINT " ";
DELAYPERIOD% = 16: GOSUB DELAY 'PLAY "L16 N0"
NEXT K
LOCATE 24, 1: PRINT "**** OUT OF RANGE ****";
DELAYPERIOD% = 1: GOSUB DELAY: GOSUB DELAY 'PLAY "L1 N0": PLAY "L1 N0"
LOCATE 24, 1: PRINT " ";
6080 'KEY(1) ON: KEY(11) ON: KEY(12) ON: KEY(13) ON: KEY(14) ON
RETURN
6100 REM * GAME WON *
'KEY(1) OFF: KEY(2) OFF: KEY(11) OFF: KEY(12) OFF: KEY(13) OFF: KEY(14) OFF
FOR SCALE = 1 TO 24
'DRAW "C3;S=SCALE;BM38,21;NM+6,0;NM-6,0;NM+0,-3;NM+0,3;NM-6,3;NM+6,-3;NM-6,-3;NM+6,3;NM+3,-3;NM-3,3;NM+3,3;NM-3,-3;NM+6,2;NM-6,-2;NM-6,1;NM+6,-1;NM+1,3;NM-1,-3"
D2S = SCALE
DRAW2$ = "C3;BM38,21;NM+6,0;NM-6,0;NM+0,-3;NM+0,3;NM-6,3;NM+6,-3;NM-6,-3;NM+6,3;NM+3,-3;NM-3,3;NM+3,3;NM-3,-3;NM+6,2;NM-6,-2;NM-6,1;NM+6,-1;NM+1,3;NM-1,-3": GOSUB DRAW2
D2S = 0
NEXT SCALE
CLS
FOR K = 1 TO 5
SOUND 37, .1 * 18.2
SCREEN 0: WIDTH 40
FOR A = 1 TO 10: NEXT A
SCREEN 1: WIDTH 80
NEXT K
WIDTH 40
CLS : PRINT : PRINT : PRINT
PRINT "* * * * * * * * * * * * * * * * * * * *";
PRINT "* *";
PRINT "* *";
PRINT "* THE FORCE IS WITH YOU !! *";
PRINT "* *";
PRINT "* YOU HAVE DESTROYED THE DEATH STAR ! *";
PRINT "* *";
PRINT "* YOU HAVE SAVED THE REPUBLIC ! *";
PRINT "* *";
PRINT "* PRINCESS LEAH WILL LOVE YOU ALWAYS! *";
PRINT "* *";
PRINT "* * * * * * * * * * * * * * * * * * * *"
SOUND 525.25, 18.2: SOUND 783.99, 18.2 / 2: SOUND 698.46, 18.2 / 6: SOUND 659.26, 18.2 / 6: SOUND 587.33, 18.2 / 6: SOUND 1046.6, 18.2: SOUND 783.99, 18.2 / 2: SOUND 698.46, 18.2 / 6: SOUND 659.26, 18.2 / 6: SOUND 587.33, 18.2 / 6
SOUND 1046.5, 18.2: SOUND 783.99, 18.2 / 2: SOUND 698.46, 18.2 / 6: SOUND 659.26, 18.2 / 6: SOUND 698.46, 18.2 / 6: SOUND 587.33, 18.2
PRINT
GOTO 5310
REM * COLLISION WITH DEATH STAR *
6410 'KEY(1) OFF: KEY(2) OFF: KEY(11) OFF: KEY(12) OFF: KEY(13) OFF: KEY(14) OFF
6420 DELTAX = 35 - M: DELTAY = 18 - N
IF DELTAX > 0 THEN M = M + 1
IF DELTAX < 0 THEN M = M - 1
IF DELTAY > 0 THEN N = N + 1
IF DELTAY < 0 THEN N = N - 1
IF DELTAX = 0 AND DELTAY = 0 GOTO 6530
PUT (M, N), DS
PUT (MP, NP), DS
MP = M: NP = N
DELAYPERIOD% = 32: GOSUB DELAY 'PLAY "P32"
GOTO 6420
6530 FOR RAD = 4 TO 20
CIRCLE (38, 21), RAD, 3
DELAYPERIOD% = 32: GOSUB DELAY 'PLAY "P32"
NEXT RAD
CLS : PRINT "CRASH"
FOR J2 = 1000 TO 37 STEP -10
SOUND J2, .01 * 18.2
NEXT J2
DELAYPERIOD% = 1: GOSUB DELAY: GOSUB DELAY: GOSUB DELAY 'PLAY "L1 N0": PLAY "L1 N0": PLAY "L1 N0"
PRINT
PRINT "DARTH VADER IS LAUGHING AT YOU."
DELAYPERIOD% = 1: GOSUB DELAY: GOSUB DELAY: GOSUB DELAY 'PLAY "L1 N0": PLAY "L1 N0": PLAY "L1 N0"
PRINT
PRINT "YOU HAVE JUST COLLIDED WITH THE DEATH";
PRINT "STAR. THEY DID NOT EVEN HEAR THE";
PRINT "COLLISION. YOU DID NOT EVEN SCRATCH";
PRINT "THE DEATH STAR'S PAINT, BUT YOU ARE ";
PRINT "DEAD!"
PRINT
PRINT "********* YOU LOSE!! *********"
PRINT
GOTO 5310
REM * OUT OF TIME *
6760 'KEY(1) OFF: KEY(2) OFF: KEY(11) OFF: KEY(12) OFF: KEY(13) OFF: KEY(14) OFF
CLS : PRINT "TOO LATE!"
FOR J2 = 1000 TO 37 STEP -10
SOUND J2, .01 * 18.2
NEXT J2
DELAYPERIOD% = 1: GOSUB DELAY: GOSUB DELAY: GOSUB DELAY 'PLAY "L1 N0": PLAY "L1 N0": PLAY "L1 N0"
PRINT
PRINT "DARTH VADER IS LAUGHING AT YOU."
DELAYPERIOD% = 1: GOSUB DELAY: GOSUB DELAY: GOSUB DELAY 'PLAY "L1 N0": PLAY "L1 N0": PLAY "L1 N0"
PRINT
PRINT "THE DEATH STAR HAS JUST DESTROYED";
PRINT "PRINCESS LEAH AND THE ENTIRE REBEL";
PRINT "STRONGHOLD";
PRINT
PRINT "********* YOU LOSE!! *********"
PRINT
GOTO 5310
6930 CLS
PRINT " STAR PILOT INSTRUCTIONS"
PRINT
PRINT " THE DEATH STAR SPACE STATION, UNDER";
PRINT "THE COMMAND OF DARTH VADER, IS THE MOST";
PRINT "POWERFUL WEAPON THE UNIVERSE HAS EVER";
PRINT "KNOWN. A FRONTAL ATTACK BY ANY OTHER";
PRINT "CRAFT WOULD BE ABSOLUTE SUICIDE. HOWEVER";
PRINT "INTELLIGENCE DELIVERED TO OUR REPUBLIC";
PRINT "HEADQUARTERS BY THE ANDROIDS R2D2 AND";
PRINT "C3PO GIVES A FAINT HOPE OF A SUCCESSFUL";
PRINT "ATTACK BY A SMALL ONE OR TWO PASSENGER";
PRINT "X-WING FIGHTER."
PRINT
PRINT " THERE IS A SMALL, UNSHIELDED EXHAUST";
PRINT "PORT ON THE SURFACE OF THE DEATH STAR";
PRINT "THAT LEADS DIRECTLY TO THE MAIN REACTOR.";
PRINT "SINCE IT IS AN EMERGENCY THERMAL PORT IN";
PRINT "CASE THE REACTOR OVERHEATS, IT COULD NOT";
PRINT "BE SHIELDED."
PRINT
INPUT " (PRESS ENTER TO CONTINUE)", B$
CLS
PRINT
PRINT " IF YOU CAN SLIP YOUR SMALL FIGHTER";
PRINT "PAST THE DEATH STAR'S DEFENSES AND MAKE";
PRINT "A DIRECT HIT ON THE THERMAL EXHAUST PORT";
PRINT "WITH A TORPEDO, THERE IS A CHANCE THAT";
PRINT "THE TORPEDO WILL PENETRATE TO THE";
PRINT "MAIN REACTOR AND START A CHAIN REACTION,";
PRINT "DESTROYING THE DEATH STAR."
PRINT
PRINT " IT IS A SLIM CHANCE, BUT IT IS THE";
PRINT "ONLY HOPE THE REPUBLIC HAS. OBI-WAN";
PRINT "KENOBI GAVE HIS LIFE TO GET THE MESSAGE";
PRINT "HERE, SO HE CONSIDERED IT IMPORTANT."
PRINT : PRINT : PRINT : PRINT
PRINT "PRESS ENTER FOR X-WING FIGHTER ";
INPUT " FAMILIARIZATION", B$
CLS
PRINT " REPUBLIC X-WING FIGHTER "
PRINT
PRINT " THE X-WING FIGHTER IS A SMALL ONE";
PRINT "MAN SPACESHIP THAT IS, QUITE FRANKLY,";
PRINT "OBSOLETE. IT IS ARMED ONLY WITH A LASER";
PRINT "CANNON AND THREE TORPEDOES. USE THE";
PRINT "LASER CANNON TO FIGHT OFF ANY IMPERIAL";
PRINT "FIGHTERS AND SAVE THE TORPEDOES FOR THE";
PRINT "DEATH STAR."
PRINT
PRINT " THE TARGET ACQUISITION RADAR CAN";
PRINT "DETECT IN EXCESS OF 100,000 KILOMETERS";
PRINT "AWAY, BUT CAN ONLY DISPLAY TARGETS WITH-";
PRINT "IN 20,000 KM. THEREFORE, YOU WILL BE";
PRINT "WARNED OF APPROACHING TARGETS ON YOUR";
PRINT "CONTROL PANEL BEFORE THEY ARE DISPLAYED";
PRINT "ON THE RADAR SCREEN."
PRINT
INPUT " (PRESS ENTER TO CONTINUE)", B$
CLS
PRINT
PRINT " THE LASER CANNON IS AN ANTIQUATED";
PRINT "WEAPON. TO HIT AN ENEMY, YOU MUST HAVE";
PRINT "HIM IN THE EXACT CENTER OF THE CROSS";
PRINT "HAIRS ON YOUR RADAR SCREEN. THEN YOU MAY";
PRINT "FIRE THE LASER CANNON BY PRESSING THE";
PRINT "SPACE BAR ON YOUR CONTROL PANEL."
PRINT
PRINT " YOUR THREE TORPEDOES ARE COMPUTER";
PRINT "GUIDED, BUT ALSO QUITE LIMITED. MAKE";
PRINT "SURE THAT YOU ARE WITHIN 10000 KM OF THE";
PRINT "DEATH STAR AND THAT YOU HAVE SOME PART";
PRINT "OF THE SPACE STATION IN THE CENTER OF";
PRINT "THE CROSS HAIRS ON YOUR RADAR SCREEN.";
PRINT "EVEN THEN, SINCE IT TAKES A PERFECT HIT";
PRINT "ON THE EXHAUST PORT TO DESTROY THE DEATH";
PRINT "STAR, YOU MAY REQUIRE MORE THAN ONE";
PRINT "TORPEDO. PRESS THE ENTER KEY TO FIRE THE";
PRINT "TORPEDO."
PRINT
INPUT " (PRESS ENTER TO CONTINUE)", B$
CLS
PRINT
PRINT " THE SPEED OF YOUR SHIP IS CONTROLLED";
PRINT "BY TYPING THE NUMBERS 1 THROUGH 9 (FOR";
PRINT "MACH 10 THROUGH 90 RESPECTIVELY). THE";
PRINT "MOVEMENT OF YOUR SHIP IS CONTROLLED BY";
PRINT "THE CURSOR CONTROLS. SINCE THESE INPUTS";
PRINT "MOVE YOUR SHIP AND NOT THE TARGETS, THE";
PRINT "TARGETS APPEAR TO MOVE IN THE OPPOSITE";
PRINT "DIRECTION. ALSO, YOU CAN EXPECT THE";
PRINT "ENEMY TO TAKE EVASIVE ACTION."
PRINT
PRINT " WHEN SELECTING THE SKILL LEVEL, 0 IS";
PRINT "THE EASIEST GAME AND 3 IS THE HARDEST.";
PRINT "SKILL LEVEL 0 PROVIDES THE BEST CHANCE";
PRINT "OF BEING MISSED BY THE FIGHTERS AND OF";
PRINT "HITTING THE DEATH STAR. LEVEL 0 ALSO";
PRINT "PROVIDES THE LARGEST TIME LIMIT BEFORE";
PRINT "THE DEATH STAR DESTROYS THE REBEL BASE."
PRINT
PRINT
INPUT "PRESS ENTER FOR TAKE-OFF", B$
CLS
PRINT "****************************************"
PRINT
PRINT " MAY THE FORCE BE WITH YOU"
PRINT
PRINT "****************************************"
DELAYPERIOD% = 1: GOSUB DELAY: GOSUB DELAY 'PLAY "L1 N0": PLAY "L1 N0"
GOTO 1300
9911 CLS
END
'PAUSES FOR THE DURATION OF PLAY "P?" WHERE DELAYPERIOD%=?
'EG. DELAYPERIOD%=1: GOSUB DELAY
DELAY:
TIMERTICKS% = 1 / DELAYPERIOD% * 18.2
IF TIMERTICKS% = 0 THEN TIMERTICKS% = 1
LASTTIMERVALUE! = TIMER
FOR TIMERTICK% = 1 TO TIMERTICKS%
DO: TIMERVALUE! = TIMER: LOOP WHILE TIMERVALUE! = LASTTIMERVALUE!
LASTTIMERVALUE! = TIMERVALUE!
NEXT
RETURN
'DRAW2 IS A WORKAROUND FOR THE DRAW STATEMENT USING STRING DRAW2$
'*VERY LIMITED FUNCTIONALITY*
DRAW2:
IF D2S = 0 THEN D2S2! = 1 ELSE D2S2! = D2S / 4
D2D$ = ""
DO WHILE LEN(DRAW2$)
D2$ = LEFT$(DRAW2$, 1): DRAW2$ = RIGHT$(DRAW2$, LEN(DRAW2$) - 1)
IF D2$ = "C" THEN
D2V = VAL(DRAW2$): D2L = LEN(LTRIM$(RTRIM$(STR$(D2V)))): DRAW2$ = RIGHT$(DRAW2$, LEN(DRAW2$) - D2L)
D2COL = D2V
D2D$ = D2D$ + "C" + STR$(D2COL)
END IF
IF D2$ = "B" THEN D2NODRAW = 1: D2D$ = D2D$ + "B"
IF D2$ = "N" THEN D2NOMOVE = 1: D2D$ = D2D$ + "N"
IF D2$ = "M" THEN
D2D$ = D2D$ + "M"
D2$ = LEFT$(DRAW2$, 1)
IF D2$ = "+" OR D2$ = "-" THEN
D2RELATIVE = 1
IF D2$ = "+" THEN DRAW2$ = RIGHT$(DRAW2$, LEN(DRAW2$) - 1): D2D$ = D2D$ + "+"
END IF
D2V = VAL(DRAW2$): D2L = LEN(LTRIM$(RTRIM$(STR$(D2V)))): DRAW2$ = RIGHT$(DRAW2$, LEN(DRAW2$) - D2L)
D2X = D2V
D2D$ = D2D$ + STR$(D2X) + ","
DRAW2$ = RIGHT$(DRAW2$, LEN(DRAW2$) - 1) 'SKIP COMMA
D2V = VAL(DRAW2$): D2L = LEN(LTRIM$(RTRIM$(STR$(D2V)))): DRAW2$ = RIGHT$(DRAW2$, LEN(DRAW2$) - D2L)
D2Y = D2V
D2D$ = D2D$ + STR$(D2Y)
'ASSUME NODRAW AND NOMOVE ARE USED EXCLUSIVELY
IF D2NOMOVE = 0 AND D2NODRAW = 0 THEN
IF D2RELATIVE THEN LINE -STEP(D2X * D2S2!, D2Y * D2S2!), D2COL ELSE LINE -(D2X, D2Y), D2COL
END IF
IF D2NODRAW THEN
IF D2RELATIVE THEN PSET STEP(D2X * D2S2!, D2Y * D2S2!), D2COL ELSE PSET (D2X, D2Y), D2COL
END IF
IF D2NOMOVE THEN
'ASSUME RELATIVE
LINE -STEP(D2X * D2S2!, D2Y * D2S2!), D2COL: LINE -STEP(-D2X * D2S2!, -D2Y * D2S2!), D2COL
END IF
D2RELATIVE = 0: D2NODRAW = 0: D2NOMOVE = 0
END IF
LOOP
RETURN