1 REM THE VENERABLE STAR TREK COMPUTER GAME -- ANTTI J YLIKOSKI 12/19/2010 2 REM ENTERED, MODIFIED AND DEBUGGED BY ANTTI J YLIKOSKI 3 REM ORIGINALLY FROM: THE BEST OF CREATIVE COMPUTING, VOL 1, 4 REM EDITED BY DAVID H. AHL, CREATIVE COMPUTING PRESS, 5 REM P.O.BOX 789-M, MORRISTOWN, N. J. 07960, USA 6 REM ISBN 0-916688-01-1, (C) 1976 BY CREATIVE COMPUTING 7 REM 8 REM THE QB64 VERSION -- SOME IDIOSYNCRACIES FIXED 9 REM 10 REM [VERSION "STREK7", 1/12/75 RCL] 12 REM EDITED AND DEBUGGED BY ANTTI J. YLIKOSKI 02/10/2010 -- 14 REM THE PROGRAM EXHIBITS THE CONTROL STRUCTURE AFFECTIONATELY 18 REM CALLED A "RAT*S NEST". 20 REM IT PROBABLY STEMS FROM THE ERA OF THE GOTO AND THE GOSUB 25 REM ONCOLOGICAL SURGERY WOULD HAVE BEEN POSSIBLE BUT ANYWAY: 27 REM "IF IT AIN*T BROKEN, DON*T FIX IT!" 29 REM 30 REM 40 REM *** *** STAR TREK *** 50 REM *** SIMULATION OF A MISSION OF THE STARSHIP ENTERPRISE, 60 REM *** AS SEEN ON THE STAR TREK TV SHOW 70 REM *** ORIGINAL PROGRAM BY MIKE MAYFIELD, MODIFIED VERSION 80 REM *** PUBLISHED IN DEC*S *101 BASIC GAMES* BY DAVE AHL 90 REM *** MODIFICATIONS TO THE LATTER (PLUS DEBUGGINGS) BY 100 REM *** BOB LEEDOM -- APRIL & DECEMBER 1974, 110 REM *** WITH A LITTLE HELP FROM HIS FRIENDS... 120 REM *** COMMENTS, EPITETHS, AND SUGGESTIONS SOLICITED (IN 1975) 130 REM *** ADDRESS TO: R. C. LEEDOM 140 REM *** WESTINGHOUSE DEFENSE & ELECTRONIC SYSTEMS CNTR. 150 REM *** BOX 746, M. S. 338 BALTIMORE, MD 21283, USA 152 REM 153 REM ORIGINALLY CONVERTED TO THE FREEBASIC, SEE 154 REM HTTP://WWW.FREEBASIC.NET 155 REM AND THE DOCUMENTATION 156 REM HTTP://WWW.FREEBASIC.NET/WIKI/ 157 REM BY ANTTI J YLIKOSKI 10-16-2010 158 REM 159 REM QB64 VERSION BY ANTTI J. YLIKOSKI 12-19-2010, UPDATED 03-02-2012. 160 REM START THE QB64.EXE, OPEN THE PROGRAM FILE AND EXECUTE CTL-F5 161 REM TO ENJOY THE GAME -- GOOD LUCK, ADMIRAL!!!!! 164 REM 165 REM SEE http://www.qb64.net/ 166 REM 167 REM EXISTING BUGS: THE CALCLULATION OF THE PHOTON TORPEDO COURSE 168 REM IS PARTIALLY FLAWED. 169 REM 172 REM RANDOMIZE TIMER 175 PRINT TAB(15); "* * * STAR TREK * * *" 180 PRINT 190 PRINT "DO YOU NEED INSTRUCTIONS (YES/NO)"; 200 REM DIM A$ 210 INPUT A$ 219 REM IF UCASE$(A$) = "YES" THEN GOSUB 10000 220 IF A$ = "YES" THEN GOSUB 10000 240 REM THE PROGRAM BEGINS HERE.... 242 REM DIM Q9$ 244 REM DIM R9$ 246 REM DIM S4$ 250 REM DIM Z$ 251 DIM Q$(72) 252 DIM R$(72) 253 DIM S$(72) 260 REM DIM G1$ 261 REM DIM G2$ 262 REM DIM G3$ 263 REM DIM G4$ 265 REM DIM D7$ 270 LET Z$ = "" 272 LET Q$ = "" 274 LET R$ = "" 276 LET S$ = "" 278 FOR I = 1 TO 72 280 LET Z$ = Z$ + " " 290 LET Q$ = Q$ + " " 300 LET R$ = R$ + " " 310 LET S$ = S$ + " " 320 NEXT I 322 REM Z$ IS SO TO SPEAK A ZERO STRING -- FULL OF SPACES 324 REM Q$ + R$ + S$ ARE ALTOGETHER 3*72 = 216 CHARACTERS OF MEMORY 326 REM THE VIDEO OF THE CURRENT QUADRANT ARE (3*8)*8 CHARACTERS, IE. 327 REM 192 CHARACTERS, STORED IN THE STRINGS Q$+R$+S$. 330 DIM G(8, 8) AS INTEGER 331 DIM C(9, 2) AS INTEGER 332 DIM K(3, 3) AS INTEGER 333 DIM N(3) AS INTEGER 334 DIM Z(8, 8) AS INTEGER 340 REM DIM O1$ 341 REM DIM C$ 350 REM DIM A1$ 351 REM DIM T$ 360 REM DIM D$ 361 REM DIM O3$ 362 REM THE VARIABLE A1 IS THE GOOD LUCK FACTOR 363 REM A1 = 1 <=> ALMOST IMPOSSIBLE GAME 364 REM A1 = 3 <=> POSSIBLE GAME 365 REM A1 = 5 <=> EASY GAME 367 LET A1 = 5 370 DIM C9(1) AS DOUBLE, A9(1) AS DOUBLE, W9(1) AS DOUBLE, D4(1) AS DOUBLE, D1(1) AS DOUBLE 372 DIM P7(1) AS DOUBLE 374 DIM A8(1) AS DOUBLE, X8(1) AS DOUBLE 379 LET T = INT(RND(1) * 20 + 20) * 100 380 LET T0 = T 390 LET T9 = 30 + 5 * (A1 - 1): REM I WANT THE GAME TO BE WINNABLE 400 LET D0 = 0 410 LET E0 = 3000 * A1: REM THE ENERGY AVAILABLE 420 LET E = E0 430 LET P = 10 440 LET P0 = P 450 LET S9 = 200 460 LET S = 0 465 LET F7 = 0 470 REM AN AUXILIARY FUNCTION DEF FND(Z) SUBSTITUTED IN THE PROGRAM TEXT 485 REM INITIALIZE ENTERPRISE*S POSITION 490 LET Q1 = INT(RND(1) * 8 + 1) 500 LET Q2 = INT(RND(1) * 8 + 1) 510 LET S1 = INT(RND(1) * 8 + 1) 520 LET S2 = INT(RND(1) * 8 + 1) 530 REM MAT C=ZER 531 FOR F8 = 1 TO 9 532 FOR F9 = 1 TO 2 533 LET C(F8, F9) = 0 534 NEXT F9 535 NEXT F8 540 LET C(3, 1) = -1 550 LET C(2, 1) = -1 560 LET C(4, 1) = -1 570 LET C(4, 2) = -1 580 LET C(5, 2) = -1 590 LET C(6, 2) = -1 600 LET C(1, 2) = 1 610 LET C(2, 2) = 1 620 LET C(6, 1) = 1 630 LET C(7, 1) = 1 640 LET C(8, 1) = 1 650 LET C(8, 2) = 1 660 LET C(9, 2) = 1 670 DIM D(8) AS INTEGER 680 FOR I = 1 TO 8 690 LET D(I) = 0 700 NEXT I 710 LET A1$ = "NSLPTSDCX" 720 LET D$ = "WARP ENGINESS.R.SENSORS L.R.SENSORS PHASER CNTRL" 730 LET D$ = D$ + "PHOTON TUBESDAMAGE CNTRLSHIELD CNTRLCOMPUTER " 740 LET G4$ = "III" 750 LET G1$ = " ANTARES. SIRIUS. RIGEL. DENEB. PROCYON. CAPELLA. VEGA. " 760 LET G1$ = G1$ + "BETELGEUZE. CANOPUS. ALDEBARAN. ALTAIR. REGULUS. " 770 LET G1$ = G1$ + "SAGITTARIUS. ARCTURUS. POLLUX. SPICA. " 780 LET B9 = 0 790 LET K9 = 0 800 LET A1$ = "NSLPTSDCX" 810 REM SET UP WHAT EXISTS IN THE GALAXY.... 820 FOR I = 1 TO 8 830 FOR J = 1 TO 8 840 LET R1 = RND(1) 850 IF R1 > 0.98 THEN GOTO 900 860 IF R1 > 0.95 THEN GOTO 930 870 IF R1 > 0.8 THEN GOTO 960 880 LET K3 = 0 890 GOTO 980 900 LET K3 = 3 910 LET K9 = K9 + 3 920 GOTO 980 930 LET K3 = 2 940 LET K9 = K9 + 2 950 GOTO 980 960 LET K3 = 1 970 LET K9 = K9 + 1 980 LET R1 = RND(1) 990 IF R1 > 0.96 THEN GOTO 1020 1000 LET B3 = 0 1010 GOTO 1040 1020 LET B3 = 1 1030 LET B9 = B9 + 1 1040 LET S3 = INT(RND(1) * 8 + 1) 1050 LET G(I, J) = K3 * 100 + B3 * 10 + S3 1060 REM K3=#KLINGONS; B3=#STARBASES; S3=#STARS 1070 LET Z(I, J) = 0 1080 NEXT J 1090 NEXT I 1100 LET K7 = K9 1110 DIM X$(1) 1111 DIM X0$(1) 1120 LET X$ = "" 1130 LET X0$ = " IS " 1140 IF B9 <> 0 THEN GOTO 1200 1150 LET B9 = 1 1160 IF G(6, 3) = 200 THEN GOTO 1190 1170 LET G(6, 3) = G(6, 3) + 100 1180 LET K9 = K9 + 1 1190 G(6, 3) = G(6, 3) + 10 1200 IF B9 = 1 THEN GOTO 1230 1210 LET X$ = "S" 1220 LET X0$ = " ARE " 1230 PRINT 1235 PRINT "YOUR ORDERS ARE AS FOLLOWS:" 1240 PRINT " DESTROY THE"; K9; " KLINGON WARSHIPS WHICH HAVE INVADED" 1250 PRINT " THE GALAXY BEFORE THEY CAN ATTACK FEDERATION HEADQUARTERS" 1260 PRINT " ON STARDATE"; T0 + T9; "; THIS GIVES YOU"; T9; " DAYS. THERE"; X0$ 1270 PRINT " "; B9; " STARBASE"; X$; " IN THE GALAXY FOR RESUPPLYING YOUR SHIP." 1280 PRINT 1290 PRINT "HIT *RETURN* WHEN READY TO ASSUME COMMAND ----" 1300 INPUT A$ 1310 REM *** HERE ANY TIME ENTER NEW QUADRANT *** 1320 LET Z4 = Q1 1330 LET Z5 = Q2 1340 LET K3 = 0 1350 LET B3 = 0 1360 LET S3 = 0 1370 LET G5 = 0 1380 LET D4 = 0.5 * RND(1) 1385 REM EXCEEDING GALAXY BORDERS? 1390 IF Q1 < 1 THEN GOTO 1600 1400 IF Q1 > 8 THEN GOTO 1600 1410 IF Q2 < 1 THEN GOTO 1600 1420 IF Q2 > 8 THEN GOTO 1600 1430 GOSUB 9030 1440 PRINT 1450 IF T <> T0 THEN GOTO 1490 1460 PRINT "YOUR MISSION BEGINS WITH YOUR STARSHIP LOCATED" 1470 PRINT "IN THE GALACTIC QUADRANT, *"; G2$; "*." 1472 LET F7 = 1 1480 GOTO 1505 1490 PRINT "NOW ENTERING *"; G2$; "* QUARDANT ..." 1500 PRINT 1505 LET F7 = 1 1510 LET X = G(Q1, Q2) * 0.01 1520 LET K3 = INT(X) 1530 LET B3 = INT((X - K3) * 10) 1540 LET S3 = G(Q1, Q2) - INT(G(Q1, Q2) * 0.1) * 10 1550 IF K3 = 0 THEN GOTO 1590 1560 PRINT "COMBAT AREA CONDITION RED" 1570 IF S > 200 THEN GOTO 1590 1580 PRINT " SHIELDS DANGEROUSLY LOW" 1590 REM MAT K=ZER 1592 FOR F8 = 1 TO 3 1594 FOR F9 = 1 TO 3 1596 LET K(F8, F9) = 0 1597 NEXT F9 1598 NEXT F8 1600 FOR I = 1 TO 3 1610 LET K(I, 3) = 0 1620 NEXT I 1630 LET Q$ = Z$ 1640 LET R$ = Z$ 1650 LET S$ = MID$(Z$, 1, 48) 1660 REM POSITION ENTERPRISE IN QUADRANT, THEN PLACE *K3* KLINGONS, 1670 REM *B3* STARBASES, AND *S3* STARS ELSEWHERE 1680 LET A$ = "<*>" 1690 LET Z1 = S1 1700 LET Z2 = S2 1710 GOSUB 8670 1715 IF K3 <= 0 THEN GOTO 1815 1720 FOR I = 1 TO K3 1730 GOSUB 8590 1740 LET A$ = "+++" 1750 LET Z1 = R1 1760 LET Z2 = R2 1770 GOSUB 8670 1780 LET K(I, 1) = R1 1790 LET K(I, 2) = R2 1800 LET K(I, 3) = S9 1810 NEXT I 1815 IF B3 <= 0 THEN GOTO 1905 1820 FOR I = 1 TO B3 1830 GOSUB 8590 1840 LET A$ = ">!<" 1850 LET Z1 = R1 1860 LET Z2 = R2 1870 GOSUB 8670 1880 LET B4 = Z1 1890 LET B5 = Z2 1900 NEXT I 1905 IF S3 <= 0 THEN GOTO 1975 1910 FOR I = 1 TO S3 1920 GOSUB 8590 1930 LET A$ = " * " 1940 LET Z1 = R1 1950 LET Z2 = R2 1960 GOSUB 8670 1970 NEXT I 1975 REM 1980 GOSUB 6430 1985 REM ***** THE LOOP BEGINS HERE ***** CHECK ENERGY, RECEIVE COMMAND 1986 REM ***** LOOP BEGINS AT STATEMENT 1990 1990 IF S + E <= 10 THEN GOTO 2020 2000 IF E > 10 THEN GOTO 2060 2010 IF D(7) = 0 THEN GOTO 2060 2020 PRINT "** FATAL ERROR ** YOU*VE JUST STRANDED YOUR SHIP IN SPACE!!" 2030 PRINT "YOU HAVE INSUFFICIENT MANEUVERING ENERGY, AND SHIELD CONTROL" 2040 PRINT "IS PRESENTLY INCAPABLE OF CROSS-CIRCUITING TO ENGINE ROOM!" 2050 GOTO 6260 2060 PRINT "COMMAND (CAR RET FOR HELP) "; 2070 INPUT A$ 2072 DIM H9$(1) 2074 DIM I9$(1) 2076 DIM J9$(1) 2080 FOR I = 1 TO 9 2082 LET H9$ = MID$(A$, 1, 1) 2084 LET I9$ = MID$(A1$, I, 1) 2090 IF H9$ <> I9$ THEN GOTO 2160 2100 IF I <> 2 THEN GOTO 2140 2110 IF LEN(A$) < 2 THEN GOTO 2140 2115 LET J9$ = MID$(A$, 2, 1) 2120 IF J9$ = "R" THEN GOTO 2140 2130 LET I = 6 2140 ON I GOTO 2300, 1980, 4000, 4260, 4700, 5530, 5690, 7290 2150 IF A$ = "XXX" THEN GOTO 6270 2160 NEXT I 2170 PRINT "ENTER ONE OF THE FOLLOWING:" 2180 PRINT "NAV (TO SET COURSE)" 2190 PRINT "SRS (FOR SHORT RANGE SENSOR SCAN)" 2200 PRINT "LRS (FOR LONG RANGE SENSOR SCAN)" 2210 PRINT "PHA (TO FIRE PHASERS)" 2220 PRINT "TOR (TO FIRE PHOTON TODPEDOS)" 2230 PRINT "SHE (TO RAISE OR LOWER SHIELDS)" 2240 PRINT "DAM (FOR DAMAGE CONTROL REPORT)" 2250 PRINT "COM (TO CALL ON THE LIBRARY-COMPUTER" 2260 PRINT "XXX (TO RESIGN YOUR COMMAND)" 2270 PRINT 2280 GOTO 1990 2290 REM COURSE CONTROL BEGINS HERE 2300 PRINT "COURSE (1-9) "; 2310 INPUT C1 2320 IF C1 >= 1 THEN GOTO 2350 2330 PRINT " LT. SULU REPORTS, *INCORRECT COURSE DATA, SIR!*" 2340 GOTO 1990 2350 IF C1 < 9 THEN GOTO 2380 2360 IF C1 > 9 THEN GOTO 2330 2370 LET C1 = 1 2380 PRINT "WARP FACTOR (0-8) "; 2390 INPUT W1 2400 IF W1 <= 0 THEN GOTO 2420 2410 IF W1 <= 8 THEN GOTO 2450 2420 PRINT "CHIEF ENGINEER SCOTT REPORTS *THE ENGINES WON*T" 2430 PRINT " TAKE WARP "; W1; " !*" 2440 GOTO 1990 2450 IF D(1) >= 0 THEN GOTO 2490 2460 IF (W1 <= 0.2) THEN GOTO 2490 2465 IF (W1 = 0.2) THEN GOTO 2490 2470 PRINT "WARP ENGINES ARE DAMAGED. MAXIMUM SPEED = WARP 0.2" 2480 GOTO 2300 2490 LET N7 = INT(W1 * 8 + 0.5) 2500 IF E - N7 > 0 THEN GOTO 2590 2510 PRINT "ENGINEERING REPORTS *INSUFFICIENT ENRGY AVAILABLE" 2520 PRINT " FOR MANEUVERING AT WARP "; W1; "!*" 2530 IF S < N7 - E THEN GOTO 1990 2540 IF D(7) < 0 THEN GOTO 1990 2550 PRINT "DEFLECTOR CONTROL ROOM ACKNOWLEDGES "; S; " UNITS" 2560 PRINT " OF ENERGY DEPLOYED TO THE SHIELDS." 2570 GOTO 5530 2580 REM KLINGONS MOVE/FIRE ON MOVING STARSHIP............ 2590 FOR I = 1 TO K3 2600 IF K(I, 3) <= 0 THEN GOTO 2700 2610 LET A$ = " " 2620 LET Z1 = K(I, 1) 2630 LET Z2 = K(1, 2) 2640 GOSUB 8670 2650 GOSUB 8570 2660 LET K(I, 1) = Z1 2670 LET K(I, 2) = Z2 2680 LET A$ = "+++" 2690 GOSUB 8670 2700 NEXT I 2710 GOSUB 6000 2720 LET D1 = 0 2730 LET D6 = W1 2740 IF W1 < 1 THEN GOTO 2770 2750 LET D6 = 1 2760 REM MAKE REPAIRS TO THE SHIP 2770 FOR I = 1 TO 8 2780 IF D(I) >= 0 THEN GOTO 2880 2790 LET D(I) = D(I) + D6 2800 IF D(I) < 0 THEN GOTO 2880 2810 IF D1 = 1 THEN GOTO 2840 2820 LET D1 = 1 2830 PRINT "DAMAGE CONTROL REPORT: " 2840 PRINT " "; 2850 LET R1 = I 2860 GOSUB 8790 2870 PRINT " REPAIR COMPLETED" 2880 NEXT I 2890 REM DAMAGE/IMPROVEMENT DURING SOME VES 2900 IF (RND(1) > 0.2) THEN GOTO 3070 2910 LET R1 = INT(RND(1) * 8 + 1) 2920 IF (RND(1) >= 0.9) THEN GOTO 3000 2925 REM CHANGED 0.6 TO 0.9 TO MAKE THE GAME LESS IMPOSSIBLE - A. J. Y. 2930 LET D(R1) = D(R1) - (RND(1) * 5 + 1) / A1 2932 REM ADDED / A1 TO MAKE THE GAME LESS IMPOSSIBLE 2940 PRINT 2950 PRINT "DAMAGE CONTROL REPORT: "; 2960 GOSUB 8790 2970 PRINT " DAMAGED" 2980 PRINT 2990 GOTO 3070 3000 LET D(R1) = D(R1) + (RND(1) * 3.0 + 1.0) 3010 PRINT 3020 PRINT "DAMAGE CONTROL REPORT: "; 3030 GOSUB 8790 3040 PRINT " STATE OF REPAIR IMPROVED" 3050 PRINT 3060 REM BEGIN MOVING STARSHIP ** 3070 REM EMPTY THE STARSHIP*S PLACE ON THE SCREEN 3075 LET A$ = " " 3080 LET Z1 = INT(S1 + 0.5) 3090 LET Z2 = INT(S2 + 0.5) 3100 GOSUB 8670 3110 LET X1 = C(C1, 1) + (C(C1 + 1, 1) - C(C1, 1)) * (C1 - INT(C1)) 3120 LET X = S1 3130 LET Y = S2 3140 LET X2 = C(C1, 2) + (C(C1 + 1, 2) - C(C1, 2)) * (C1 - INT(C1)) 3150 LET Q4 = Q1 3160 LET Q5 = Q2 3164 DIM X8$(1) 3170 FOR I = 1 TO N7 3180 LET S1 = S1 + X1 3190 LET S2 = S2 + X2 3200 IF S1 < 1 THEN GOTO 3500 3210 IF S1 >= 9 THEN GOTO 3500 3220 IF S2 < 1 THEN GOTO 3500 3230 IF S2 >= 9 THEN GOTO 3500 3240 LET S8 = INT(S1 + 0.5) * 24 + INT(S2 + 0.5) * 3 - 26 3250 IF S8 > 72 THEN 3280 3255 LET X8$ = MID$(Q$, S8, 3) 3257 REM IF NAVIGATING THRU EMPTY SPACE, GO ON: 3260 IF X8$ = " " THEN GOTO 3360 3270 GOTO 3320 3280 IF S8 > 144 THEN GOTO 3310 3285 LET X8$ = MID$(R$, S8 - 72, 3) 3290 IF X8$ = " " THEN GOTO 3360 3300 GOTO 3320 3310 LET X8$ = MID$(S$, S8 - 144, 3) 3315 IF X8$ = " " THEN GOTO 3360 3320 LET S1 = S1 - X1 3330 LET S2 = S2 - X2 3340 PRINT "WARP ENGINES SHUT DOWN AT SECTOR "; S1; ", "; S2; " DUE TO " 3345 PRINT "BAD NAVIGATION" 3350 GOTO 3370 3360 NEXT I 3370 LET A$ = "<*>" 3380 LET Z1 = INT(S1 + 0.5) 3390 LET Z2 = INT(S2 + 0.5) 3400 GOSUB 8670 3410 GOSUB 3910 3420 LET T8 = 1 3430 IF W1 > 1 THEN GOTO 3450 3440 LET T8 = 0.1 * INT(10 * W1) 3450 LET T = T + T8 3460 IF T > T0 + T9 THEN GOTO 6220 3470 REM SEE IF DOCKED, THEN GET COMMAND 3480 GOTO 1980 3490 REM EXCEED QUADRANT LIMITS 3500 LET X = 8 * Q1 + X + N7 * X1 3510 LET Y = 8 * Q2 + Y + N7 * X2 3520 LET Q1 = INT(X / 8) 3530 LET Q2 = INT(Y / 8) 3540 LET S1 = INT(X - Q1 * 8) 3550 LET S2 = INT(Y - Q2 * 8) 3560 IF S1 <> 0 THEN GOTO 3590 3570 LET Q1 = Q1 - 1 3580 LET S1 = 8 3590 IF S2 <> 0 THEN GOTO 3620 3600 LET Q2 = Q2 - 1 3610 LET S2 = 8 3620 LET X5 = 0 3630 IF Q1 >= 1 THEN GOTO 3670 3640 LET X5 = 1 3650 LET Q1 = 1 3660 LET S1 = 1 3670 IF Q1 <= 8 THEN GOTO 3710 3680 LET X5 = 1 3690 LET Q1 = 8 3700 LET S1 = 8 3710 IF Q2 >= 1 THEN GOTO 3750 3720 LET X5 = 1 3730 LET Q2 = 1 3740 LET S2 = 1 3750 IF Q2 <= 8 THEN GOTO 3790 3760 LET X5 = 1 3770 LET Q2 = 8 3780 LET S2 = 8 3790 IF X5 = 0 THEN GOTO 3860 3800 PRINT "LT. UHURA REPORTS FROM STARFLEET COMMAND:" 3810 PRINT " *PERMISSION TO ATTEMPT CROSSING OF GALACTIC PERIMETER" 3820 PRINT " IS HEREBY *DENIED*. SHUT DOWN YOUR ENGINES.*" 3830 PRINT "CHIEF ENGINEER SCOTT REPORTS *WARP ENGINES SHUT DOWN" 3840 PRINT " AT SECTOR "; S1; " "; S2; " OF QUADRANT "; Q1; ", "; Q2; ".*" 3850 IF T > T0 + T9 THEN GOTO 3370 3860 REM REMOVED THIS MYSTERY LINE: IF (8*Q1 + Q2) = (8*Q4 + Q5) THEN GOTO 3370 3870 LET T = T + 1 3880 GOSUB 3910 3890 GOTO 1320 3900 REM MANEUVER ENERGY S/R 3910 LET E = E - N7 - 10 3920 IF E > 0 THEN GOTO 3980 3930 PRINT "SHIELD CONTROL SUPPLIED ENERGY TO COMPLETE THE MANEUVER." 3940 LET S = S + E 3950 LET E = 0 3960 IF S > 0 THEN GOTO 3980 3970 LET S = 0 3980 RETURN 3990 REM L. R. SCAN SENSOR SCAN CODE *** 4000 IF D(3) >= 0 THEN GOTO 4030 4010 PRINT "LONG RANGE SENSORS ARE INOPERABLE" 4020 GOTO 1990 4030 PRINT "LONG RANGE SENSOR SCAN FOR QUADRANT "; Q1; ", "; Q2 4040 LET O1$ = "................." 4050 PRINT O1$ 4060 FOR I = Q1 - 1 TO Q1 + 1 4070 DIM N(3) 4080 FOR I1 = 1 TO 3 4090 LET N(I1) = 0 4100 NEXT I1 4110 FOR J = Q2 - 1 TO Q2 + 1 4120 IF I < 1 THEN GOTO 4180 4130 IF I > 8 THEN GOTO 4180 4140 IF J < 1 THEN GOTO 4180 4150 IF J > 8 THEN GOTO 4180 4160 LET N(J - Q2 + 2) = G(I, J) 4170 LET Z(I, J) = G(I, J) 4180 NEXT J 4190 DIM P1$(1) 4200 LET P1$ = ": ### : ### : ### :" 4210 PRINT USING P1$; N(1), N(2), N(3) 4220 PRINT O1$ 4230 NEXT I 4240 GOTO 1990 4250 REM *** PHASER CONTROL CODE BEGINS HERE 4260 IF K3 > 0 THEN GOTO 4300 4270 PRINT "SCIENCE OFFICER SPOCK REPORTS *SENSORS SHOW" 4280 PRINT " NO ENEMY SHIPS IN THIS QUADRANT.*" 4290 GOTO 1990 4300 IF D(4) >= 0 THEN GOTO 4330 4310 PRINT "PHASERS INOPERATIVE" 4320 GOTO 1990 4330 IF D(8) >= 0 THEN GOTO 4350 4340 PRINT "COMPUTER FAILURE HAMPERS ACCURACY" 4350 PRINT "PHASERS LOCKED ON TARGET; " 4360 PRINT "ENERGY AVAILABLE ="; E 4370 PRINT "NUMBER OF UNITS TO FIRE: "; 4380 INPUT X 4390 IF X <= 0 THEN GOTO 1990 4400 IF E - X < 0 THEN GOTO 4360 4410 LET E = E - X 4420 GOSUB 6000 4430 IF D(7) >= 0 THEN GOTO 4450 4440 LET X = X * RND(1) 4450 LET H1 = INT(X / K3) 4460 FOR I = 1 TO 3 4470 IF K(I, 3) <= 0 THEN GOTO 4670 4480 LET H = INT((H1 / (SQR((K(I, 1) - S1) ** 2 + (K(I, 2) - S2) ** 2)) * (RND(1) + 2))) 4490 IF H > 0.15 * K(I, 3) THEN GOTO 4530 4500 PRINT "SENSORS SHOW NO DAMAGE" 4510 PRINT " TO ENEMY AT "; K(I, 1); ", "; K(I, 2) 4520 GOTO 4670 4530 LET K(I, 3) = K(I, 3) - H 4540 PRINT H; " UNIT HIT ON KLINGON AT SECTOR "; K(I, 1); ", "; K(I, 2) 4550 IF K(I, 3) <= O THEN GOTO 4580 4560 PRINT " (SENSORS SHOW "; K(I, 3), " UNITS REMAINING)" 4570 GOTO 4670 4580 PRINT " *** KLINGON DESTROYED ***" 4590 LET K3 = K3 - 1 4600 LET K9 = K9 - 1 4610 LET A$ = " " 4620 LET Z1 = K(I, 1) 4630 LET Z2 = K(I, 2) 4640 GOSUB 8670 4650 LET G(Q1, Q2) = K3 * 100 + B3 * 10 + S3 4655 LET Z(Q1, Q2) = G(Q1, Q2) 4660 IF K9 <= 0 THEN GOTO 6370 4670 NEXT I 4680 GOTO 1990 4690 REM PHOTON TORPEDO CODE BEGINS *** 4700 IF D(5) >= O THEN GOTO 4730 4710 PRINT "PHOTON TUBES ARE NOT OPERATIONAL " 4720 GOTO 1990 4730 IF P > 0 THEN GOTO 4760 4740 PRINT "ALL PHOTON TORPEDOS EXPENDED" 4750 GOTO 1990 4760 PRINT "TORPEDO COURSE (1-9) "; 4770 INPUT C1 4780 IF C1 >= 1 THEN GOTO 4810 4790 PRINT " ENSIGN CHEKOV REPORTS, *INCORRECT COURSE DATA, SIR!*" 4800 GOTO 1990 4810 IF C1 > 9 THEN GOTO 4790 4820 IF C1 < 9 THEN GOTO 4850 4830 IF C1 >= 9 THEN GOTO 4760 4840 LET C1 = 1 4850 LET X1 = C(C1, 1) + (C(C1 + 1, 1) - C(C1, 1)) * (C1 - INT(C1)) 4860 LET X2 = C(C1, 2) + (C(C1 + 1, 2) - C(C1, 2)) * (C1 - INT(C1)) 4870 LET E = E - 2 4880 LET X = S1 4890 LET Y = S2 4900 LET P = P - 1 4910 PRINT "TORPEDO TRACK:" 4920 LET X = X + X1 4930 LET Y = Y + X2 4940 LET X3 = INT(X + 0.5) 4950 LET Y3 = INT(Y + 0.5) 4960 IF X3 < 1 THEN GOTO 5490 4970 IF X3 >= 9 THEN GOTO 5490 4980 IF Y3 < 1 THEN GOTO 5490 4990 IF Y3 >= 9 THEN GOTO 5490 5000 PRINT " "; X3; ", "; Y3 5010 LET A$ = " " 5020 LET Z1 = X 5030 LET Z2 = Y 5040 GOSUB 8830 5050 IF Z3 <> 0 THEN GOTO 4920 5060 LET A$ = "+++" 5070 LET Z1 = X 5080 LET Z2 = Y 5090 GOSUB 8830 5100 IF Z3 = 0 THEN GOTO 5210 5110 PRINT "*** KLINGON DESTROYED ***" 5120 LET K3 = K3 - 1 5130 LET K9 = K9 - 1 5140 IF K9 <= 0 THEN GOTO 6370 5150 FOR I = 1 TO 3 5160 IF X3 <> K(I, 1) THEN GOTO 5180 5170 IF Y3 = K(I, 2) THEN GOTO 5190 5180 NEXT I 5190 LET K(I, 3) = 0 5200 GOTO 5430 5210 LET A$ = " * " 5220 LET Z1 = X 5230 LET Z2 = Y 5240 GOSUB 8830 5250 IF Z3 = 0 THEN GOTO 5280 5260 PRINT "STAR AT "; X3; ", "; Y3; " ABSORBED TORPEDO ENERGY" 5270 GOTO 5500 5280 LET A$ = ">!<" 5290 LET Z1 = X 5300 LET Z2 = Y 5310 GOSUB 8830 5320 IF Z3 = 0 THEN GOTO 4760 5330 PRINT "*** STARBASE DESTROYED ***" 5340 LET B3 = B3 - 1 5350 LET B9 = B9 - 1 5360 IF B9 > 0 THEN GOTO 5400 5370 PRINT "THAT DOES IT, CAPTAIN!! YOU ARE HEREBY RELIEVED OF COMMMAND" 5380 PRINT " AND SENTENCED TO 99 STARDATES AT HARD LABOR ON CYGNUS 12!!" 5390 GOTO 6270 5400 PRINT "STARFLEET COMMAND REVIEWING YOUR RECORD TO CONSIDER" 5410 PRINT " COURT MARTIAL!" 5420 LET D0 = 0 5430 LET A$ = " " 5440 LET Z1 = X 5450 LET Z2 = Y 5460 GOSUB 8670 5470 LET G(Q1, Q2) = K3 * 100 + B3 * 10 + S3 5480 GOTO 5500 5490 PRINT "TORPEDO MISSED" 5500 GOSUB 6000 5510 GOTO 1990 5520 REM ** SHIELD CONTROL STARTS HERE 5530 IF D(7) >= 0 THEN GOTO 5560 5540 PRINT "SHIELD CONTROL INOPERABLE" 5550 GOTO 1990 5560 PRINT "ENERGY AVAILABLE = "; E + S; " NUMBER OF UNITS TO SHIELDS: "; 5570 INPUT X 5580 IF X >= 0 THEN GOTO 5620 5590 IF S <> X THEN GOTO 5620 5600 PRINT "(SHIELDS UNCHANGED)" 5610 GOTO 1990 5620 IF E + S - X < 0 THEN GOTO 5560 5630 LET E = E + S - X 5640 LET S = X 5650 PRINT "DEFLECTOR CONTROL ROOM REPORT:" 5660 PRINT " *SHIELDS NOW AT "; S; " PER YOUR COMMAND*" 5670 GOTO 1990 5680 REM *** DAMAGE CONTROL STARTS HERE 5690 IF D(6) >= 0 THEN GOTO 5910 5700 PRINT "DAMAGE CONTROL REPORT NOT AVAILABLE" 5710 IF D0 = 0 THEN GOTO 1990 5720 LET D3 = 0 5730 FOR I = 1 TO 8 5740 IF D(I) >= 0 THEN GOTO 5760 5750 LET D3 = D3 + 0.1 5760 NEXT I 5770 IF D3 = 0 THEN GOTO 1990 5780 LET D3 = D3 + D4 5790 IF D3 < 1 THEN GOTO 5810 5800 LET D3 = 0.9 5810 PRINT "TECHNICIANS STANDING BY TO EFFECT REPAIRS TO YOUR SHIP." 5820 PRINT "ESTIMATED TIME TO REPAIR:"; 5830 PRINT USING ".# STARDATES"; D3 5840 PRINT "WILL YOU AUTHORIZE THE REPAIR ORDER (YES/NO)"; 5850 INPUT A$ 5860 IF A$ <> "YES" THEN GOTO 1990 5870 FOR I = 1 TO 8 5880 LET D(I) = 0 5890 NEXT I 5900 LET T = T + D3 + 0.1 5910 PRINT 5920 PRINT "DEVICE STATE OF REPAIR" 5930 FOR R1 = 1 TO 8 5940 GOSUB 8790 5950 PRINT USING " -##.##"; D(R1) 5960 NEXT R1 5970 PRINT 5980 GOTO 5710 5990 REM "KLINGONS SHOOTING" CODE BEGINS *** 6000 IF K3 <= O THEN GOTO 6210 6010 IF D0 = 0 THEN GOTO 6040 6020 PRINT "STAR BASE SHIELDS PROTECT THE ENTERPRISE" 6030 GOTO 6210 6040 FOR I = 1 TO 3 6050 IF K(I, 3) <= 0 THEN GOTO 6200 6060 LET H = INT((K(I, 3) / (SQR((K(I, 1) - S1) ** 2 + (K(I, 2) - S2) ** 2)) * (2 + RND(1)))) 6062 REM ADDED THE FOLLOWING TO MAKE THE GAME LESS IMPOSSIBLE 6064 LET H = INT(H / A1) 6070 LET S = S - H 6080 PRINT H; " UNIT HIT ON ENTERPRISE FROM SECTOR "; K(I, 1); ", "; K(I, 2) 6090 IF S < 0 THEN GOTO 6240 6100 PRINT " (SHIELDS DOWN TO "; S; " UNITS.)" 6110 IF H < 20 THEN GOTO 6200 6120 IF RND(1) > 0.6 THEN GOTO 6200 6130 IF H / S <= 0.02 THEN GOTO 6200 6140 LET D2 = H / S + 0.5 * RND(1) 6150 LET R1 = INT(RND(1) * 8 + 1) 6160 LET D(R1) = D(R1) - D2 6170 PRINT "DAMAGE CONTROL REPORTS *"; 6180 GOSUB 8790 6190 PRINT "DAMAGED BY THE HIT!*" 6200 NEXT I 6210 RETURN 6220 PRINT "IT IS STARDATE "; T 6230 GOTO 6270 6240 PRINT 6250 PRINT "THE ENTERPRISE HAS BEEN DESTROYED."; 6255 PRINT " THE FEDERATION WILL BE CONQUERED." 6260 PRINT "IT IS STARDATE "; T 6270 PRINT "THERE WERE "; K9; " KLINGON BATTLE CRUISERS LEFT AT" 6280 PRINT " THE END OF YOUR MISSION." 6290 PRINT 6300 PRINT 6310 PRINT "THE FEDERATION IS IN NEED OF A NEW STARSHIP COMMANDER" 6320 PRINT "FOR A SIMILAR MISSION -- IF THERE IS A VOLUNTEER," 6330 PRINT "LET HIM STEP FORWARD AND ENTER *AYE*." 6335 PRINT "OTHERWISE, DISCONTINUE PLAYING BY ENTERING (CAR RET)." 6340 INPUT A$ 6350 IF UCASE$(A$) = "AYE" THEN GOTO 240 6360 GOTO 9250 6370 PRINT "CONGRATULATIONS, CAPTAIN! THE LAST KLINGON BATTLE CRUISER" 6380 PRINT " MENACING THE FEDERATION HAS BEEN DESTROYED." 6390 PRINT 6400 PRINT "YOUR EFFICIENCY RATING IS "; ((K7 / (T - T0)) * 1000); ". " 6410 GOTO 6290 6420 REM S. R. SENSOR SCAN & STARTUP SUBR. *** 6430 FOR I = S1 - 1 TO S1 + 1 6440 FOR J = S2 - 1 TO S2 + 1 6450 IF INT(I + 0.5) < 1 THEN GOTO 6540 6460 IF INT(I + 0.5) > 8 THEN GOTO 6540 6470 IF INT(J + 0.5) < 1 THEN GOTO 6540 6480 IF INT(J + 0.5) > 8 THEN GOTO 6540 6490 LET A$ = ">!<" 6500 LET Z1 = I 6510 LET Z2 = J 6520 GOSUB 8830 6530 IF Z3 = 1 THEN GOTO 6580 6540 NEXT J 6550 NEXT I 6560 LET D0 = 0 6570 GOTO 6650 6580 LET D0 = 1 6590 LET C$ = "DOCKED" 6600 LET E = 3000 * A1 6602 REM THE VARIABLE E == ENERGY 6610 LET P = 10 6612 REM THE VARIABLE P == # OF TORPEDOS 6620 PRINT "SHIELDS DROPPED FOR DOCKING PURPOSES" 6630 LET S = 0 6632 REM THE VARIABLE S == ENERGY IN SHIELDS 6640 GOTO 6720 6650 IF K3 > 0 THEN GOTO 6690 6660 IF E < E0 * 0.1 THEN GOTO 6710 6670 LET C$ = "GREEN" 6680 GOTO 6720 6690 LET C$ = "*RED*" 6700 GOTO 6720 6710 LET C$ = "YELLOW" 6720 IF D(2) >= 0 THEN GOTO 6770 6730 PRINT 6740 PRINT "*** SHORT RANGE SENSORS ARE OUT ***" 6750 PRINT 6760 GOTO 7270 6770 LET Z4 = Q1 6771 LET Z5 = Q2 6772 LET Q5 = 0 6773 GOSUB 9030 6774 IF F7 = 1 THEN 6777 6775 PRINT "YOU ARE LOCATED IN THE GALACTIC QUADRANT, *"; G2$; "*..." 6777 PRINT 6778 LET F7 = 0 6779 LET O1$ = "---------------------------------" 6780 PRINT O1$ 6790 DIM N5$(1) 6800 LET N5$ = "#####" 6810 PRINT " "; 6820 FOR I = 1 TO 22 STEP 3 6825 LET Q9$ = MID$(Q$, I, 3) 6830 PRINT Q9$; " "; 6840 NEXT I 6850 PRINT 6860 PRINT " "; 6870 FOR I = 25 TO 46 STEP 3 6875 LET Q9$ = MID$(Q$, I, 3) 6880 PRINT Q9$; " "; 6890 NEXT I 6900 PRINT " STARDATE "; 6910 PRINT USING "####.#"; T 6920 PRINT " "; 6930 FOR I = 49 TO 70 STEP 3 6935 LET Q9$ = MID$(Q$, I, 3) 6940 PRINT Q9$; " "; 6950 NEXT I 6960 PRINT " CONDITION "; 6970 PRINT C$ 6980 PRINT " "; 6990 FOR I = 1 TO 22 STEP 3 6995 LET R9$ = MID$(R$, I, 3) 7000 PRINT R9$; " "; 7010 NEXT I 7020 PRINT " QUADRANT "; Q1; ", "; Q2 7030 PRINT " "; 7040 FOR I = 25 TO 46 STEP 3 7045 LET R9$ = MID$(R$, I, 3) 7050 PRINT R9$; " "; 7060 NEXT I 7070 PRINT " SECTOR "; S1; ", "; S2 7080 PRINT " "; 7090 FOR I = 49 TO 70 STEP 3 7095 LET R9$ = MID$(R$, I, 3) 7100 PRINT R9$; " "; 7110 NEXT I 7120 PRINT " TOTAL ENERGY "; 7130 PRINT USING N5$; E + S 7140 PRINT " "; 7150 FOR I = 1 TO 22 STEP 3 7155 LET S4$ = MID$(S$, I, 3) 7160 PRINT S4$; " "; 7170 NEXT I 7180 PRINT " PHOTON TORPEDOS "; 7190 PRINT USING N5$; P 7200 PRINT " "; 7210 FOR I = 25 TO 46 STEP 3 7215 LET S4$ = MID$(S$, I, 3) 7220 PRINT S4$; " "; 7230 NEXT I 7240 PRINT " SHIELDS "; 7250 PRINT USING N5$; S 7260 PRINT O1$ 7270 RETURN 7280 REM *** LIBRARY COMPUTER CODE BEGINS HERE 7290 IF D(8) >= 0 THEN GOTO 7320 7300 PRINT "COMPUTER DISABLED" 7310 GOTO 1990 7320 PRINT "COMPUTER ACTIVE AND AWAITING COMMAND: (9 FOR HELP) "; 7330 INPUT a 7340 IF a < 0 THEN GOTO 1990 7350 PRINT 7360 LET H8 = 1 7370 IF a = 0 THEN GOTO 7540 7380 ON a GOTO 7900, 8070, 8500, 8150, 7400 7390 GOTO 7450 7400 REM *** CREATED S/R 20000 TO FIX CRIPPLING BUGS 7410 LET H8 = 0 7420 LET Q5 = 1 7430 PRINT " THE GALAXY" 7440 GOSUB 20000 7445 GOTO 1990 7450 PRINT "FUNCTIONS AVAILABLE FROM LIBRARY-COMPUTER:" 7460 PRINT " 0 = CUMULATIVE GALACTIC RECORD" 7470 PRINT " 1 = STATUS REPORT" 7480 PRINT " 2 = PHOTON TORPEDO DATA" 7490 PRINT " 3 = STARBASE NAV DATA" 7500 PRINT " 4 = DIRECTION/DISTANCE CALCULATOR" 7510 PRINT " 5 = GALAXY *REGION NAME* MAP" 7520 GOTO 7320 7530 REM *** CUMULATIVE GALACTIC RECORD CODE BEGINS *** 7540 PRINT "COMPUTER RECORD OF GALAXY FOR QUADRANT "; Q1; ", "; Q2 7550 PRINT " 1 2 3 4 5 6 7 8" 7560 LET O3$ = " ----- ----- ----- ----- ----- ----- ----- -----" 7570 PRINT O3$ 7580 DIM N1$(1) 7582 DIM N2$(1) 7584 DIM N$(1) 7590 FOR I = 1 TO 8 7600 LET N1$ = "#" 7610 PRINT USING N1$; I; 7620 IF H8 = 0 THEN GOTO 7740 7630 FOR J = 1 TO 8 7640 LET N2$ = " ###" 7650 LET N$ = "" 7660 IF I <> Q1 THEN GOTO 7700 7670 IF J <> Q2 THEN GOTO 7700 7680 LET N$ = "" 7690 PRINT N$; 7700 PRINT USING N2$; Z(I, J); 7710 PRINT N$; 7720 NEXT J 7730 GOTO 7850 7740 LET Z4 = I 7750 LET Z5 = J 7760 GOSUB 9030 7770 LET J0 = INT(15 - 0.5 * LEN(G2$)) 7780 PRINT TAB(J0); 7790 PRINT G2$; 7800 LET Z5 = 5 7810 GOSUB 9030 7820 LET J0 = INT(39 - 0.5 * LEN(G2$)) 7830 PRINT TAB(J0); 7840 PRINT G2$; 7850 PRINT 7860 PRINT O3$ 7870 NEXT I 7880 GOTO 1990 7890 REM *** STATUS REPORT CODE BEGINS HERE *** 7900 PRINT " STATUS REPORT" 7910 LET X$ = "" 7920 IF K9 = 1 THEN GOTO 7940 7930 LET X$ = "S" 7940 PRINT K9; " KLINGON"; X$; " LEFT" 7950 LET V5 = (T0 + T9) - T 7960 PRINT USING "MISSION MUST BE COMPLETED IN ##.# STARDATES"; V5 7970 LET X$ = "" 7980 IF B9 = 1 THEN GOTO 8040 7990 LET X$ = "S" 8000 IF B9 <> 0 THEN GOTO 8040 8010 PRINT "YOUR STUPIDITY HAS LEFT YOU ON YOUR OWN IN" 8020 PRINT " THE GALAXY -- YOU HAVE NO STARBASES LEFT!" 8030 GOTO 5690 8040 PRINT "THE FEDERATION IS MAINTAINING "; B9; " STARBASE"; X$; 8045 PRINT " IN THE GALAXY" 8050 GOTO 5690 8060 REM CODE FOR TORPEDO DATA, BASE NAV, D/D CALCULATOR 8070 PRINT "PHOTON TORPEDO SIGINT, PLUS GATHERED HUMINT:" 8071 IF K3 = 0 THEN GOTO 8492 8072 LET H8 = 0 8074 LET K5 = 1 8080 FOR I = 1 TO 3 8090 IF K(I, 3) <= 0 THEN GOTO 8480 8100 LET W9 = CDBL(K(I, 2)) 8110 LET X9 = CDBL(K(I, 1)) 8120 LET C9 = CDBL(S2) 8130 LET A9 = CDBL(S1) 8140 GOTO 8220 8150 PRINT "DIRECTION/DISTANCE CALULATOR:" 8160 PRINT "YOU ARE AT QUADRANT ("; Q1; ", "; Q2; ") SECTOR ("; 8165 PRINT S1; ", "; S2; ")" 8170 PRINT "PLEASE ENTER --" 8180 PRINT " INITIAL COORDINATES (X, Y) "; 8190 INPUT C9, A9 8200 PRINT " FINAL COORDINATES (X, Y) "; 8210 INPUT W9, X9 8211 REM REWORKED THIS CODE ENTIRELY WITH THE ATN() FUNCTION /AJY 8212 LET P7 = ATN(1.0#) 8213 REM ARCUS TANGENS (1.0) = PI / 4.0 8214 LET P7 = 4.0# * P7 8215 PRINT "COMPUTER RESPONDS:" 8220 LET X8 = A9 - X9 8221 REM THE Y COORDINATE GROWS GOING DOWNWARDS 8222 REM X8 = DELTA(Y) 8230 LET A8 = W9 - C9 8331 REM THE X COORDINATE GROWS GOING LEFTWARDS 8232 REM A8 = DELTA(X) 8234 REM D-Y AND D-X 8250 IF (X8 > 0.0#) AND (A8 > 0.0#) THEN GOTO 8300 8260 IF (X8 < 0.0#) AND (A8 > 0.0#) THEN GOTO 8360 8270 IF (X8 < 0.0#) AND (A8 < 0.0#) THEN GOTO 8330 8280 IF (X8 > 0.0#) AND (A8 < 0.0#) THEN GOTO 8317 8282 IF (X8 = 0.0#) AND (A8 = 0.0#) THEN GOTO 8370 8284 IF (X8 = 0.0#) AND (A8 <> 0.0#) THEN GOTO 8401 8286 IF (X8 <> 0.0#) AND (A8 = 0.0#) THEN GOTO 8380 8290 PRINT "IMPOSSIBLE, I QUIT!" 8292 END 8300 REM HERE D-Y IS POS. AND D-X IS POS. 8305 GOSUB 30000 8310 PRINT "*DIRECTION = "; (D1 + 1.0#), 8315 GOTO 8460 8317 REM HERE D-Y IS POS. AND D-X IS NEG. 8318 GOSUB 30000 8320 PRINT "*DIRECTION = "; (5.0# - D1), 8322 GOTO 8460 8330 REM HERE D-Y AND D-Y ARE BOTH NEG. 8332 GOSUB 30000 8340 PRINT "*DIRECTION = "; (5.0# + D1), 8350 GOTO 8460 8360 REM HERE D-Y IS NEG. AND D-X IS POS. 8361 GOSUB 30000 8362 PRINT "*DIRECTION = "; (9.0# - D1), 8364 GOTO 8460 8370 PRINT "NO TRAVEL NECESSARY.*" 8372 GOTO 1990 8380 PRINT "*DIRECTION = "; 8382 IF X8 < 0 THEN GOTO 8390 8384 PRINT 1.0, 8386 GOTO 8460 8390 PRINT 5.0, 8400 GOTO 8460 8401 PRINT "*DIRECTION = "; 8402 IF A8 < 0 THEN GOTO 8390 8406 PRINT 3.0, 8410 GOTO 8460 8412 PRINT 7.0, 8414 GOTO 8460 8460 PRINT " DISTANCE = "; SQR(X8 ** 2 + A8 ** 2); "*" 8470 IF H8 = 1 THEN GOTO 1990 8480 NEXT I 8490 GOTO 1990 8492 PRINT "NO KLINGONS DETECTED." 8494 GOTO 1990 8500 IF B3 <> 0 THEN GOTO 8530 8510 PRINT "MR. SPOCK REPORTS, *SENSORS SHOW NO STARBASES IN THIS QUADRANT.*" 8520 GOTO 1990 8530 PRINT "FROM ENTERPRISE TO STARBASE:" 8532 PRINT "*"; 8540 LET W1 = B4 8550 LET X = B5 8560 GOTO 8120 8570 REM *** END OF LIBRARY-COMPUTER CODE 8580 REM S/R FINDS RANDOM HOLE IN QUADRANT 8590 LET R1 = INT(RND(1) * 8.0 + 1.0) 8600 LET R2 = INT(RND(1) * 8.0 + 1.0) 8610 LET A$ = " " 8620 LET Z1 = R1 8630 LET Z2 = R2 8640 GOSUB 8830 8650 IF Z3 = 0 THEN GOTO 8590 8660 RETURN 8670 REM *** INSERTION IN STRING ARRAY FOR QUARDANT *** 8680 LET S8 = INT(Z1 + 0.5) * 24 + INT(Z2 + 0.5) * 3 - 26 8690 IF S8 > 72 THEN GOTO 8720 8692 MID$(Q$, S8, 3) = A$ 8710 GOTO 8780 8720 IF S8 > 144 THEN GOTO 8760 8730 LET S8 = S8 - 72 8740 MID$(R$, S8, 3) = A$ 8750 GOTO 8780 8760 LET S8 = S8 - 144 8765 REM TO THE LOCATION OF S8 IS ASSIGNED THE CHAR STRING A$ 8770 MID$(S$, S8, 3) = A$ 8780 RETURN 8790 REM *** PRINTS DEVICE NAME FROM ARRAY *** 8800 LET S8 = R1 * 12 - 11 8807 LET D7$ = MID$(D$, S8, 12) 8810 PRINT D7$; " "; 8820 RETURN 8830 REM *** STRING COMPARISON IN QUADRANT ARRAY *** 8840 LET Z1 = INT(Z1 + 0.5) 8850 LET Z2 = INT(Z2 + 0.5) 8860 LET S8 = Z1 * 24 + Z2 * 3 - 26 8865 DIM X9$(1) 8870 LET Z3 = 0 8880 IF S8 > 72 THEN GOTO 8920 8890 LET X9$ = MID$(Q$, S8, 3) 8895 IF X9$ <> A$ THEN GOTO 9000 8900 LET Z3 = 1 8910 GOTO 9000 8920 IF S8 > 144 THEN GOTO 8970 8930 LET S8 = S8 - 72 8940 LET X9$ = MID$(R$, S8, 3) 8945 IF X9$ <> A$ THEN GOTO 9000 8950 LET Z3 = 1 8960 GOTO 9000 8970 LET S8 = S8 - 144 8980 LET X9$ = MID$(S$, S8, 3) 8985 IF X9$ <> A$ THEN GOTO 9000 8990 LET Z3 = 1 9000 RETURN 9010 REM *** S/R PRODUCES QUADRANT NAME IN G2$ FROM Z4, Z5 (=Q1,Q2) 9020 REM *** (CALL WITH Q5=1 TO GET REGION NAME ONLY) 9030 LET L2 = 2 9035 REM IF Z5 > 5 THEN IT IS THE RIGHTMOST OF A PAIR OF NAMES 9040 IF Z5 >= 5 THEN GOTO 9060 9050 LET L2 = 1 9060 LET L3 = 2 * (Z4 - 1) + L2 9070 LET I3 = 1 9080 LET I0 = 1 9085 DIM Y7$(1) 9090 FOR L = 1 TO LEN(G1$) 9095 LET Y7$ = MID$(G1$, L, 2) 9100 IF Y7$ <> ". " THEN GOTO 9140 9110 IF I3 = L3 THEN GOTO 9150 9120 LET I0 = L + 1 9130 LET I3 = I3 + 1 9140 NEXT L 9150 LET G2$ = MID$(G1$, I0 + 1, L - 1 - I0) 9160 IF Q5 = 1 THEN GOTO 9240 9170 LET L3 = 25 9180 IF Z5 <= 4 THEN GOTO 9200 9190 LET L3 = Z5 - 4 9200 LET G3$ = "IV" 9210 IF L3 = 4 THEN GOTO 9230 9220 LET G3$ = MID$(G4$, 1, L3) 9230 LET G2$ = G2$ + " " + G3$ 9240 RETURN 9250 END 10000 REM THE INSTRUCTIONS SUBROUTINE 10030 DIM A5$(1) 10040 FOR I = 1 TO 9 10050 ON I GOSUB 10240, 10360, 10540, 10640, 10720, 10780, 10860, 10910, 10960 10060 PRINT 10070 PRINT "(TO CONTINUE, HIT *RETURN*)" 10080 PRINT 10090 INPUT A5$: CLS 10100 NEXT I 10110 PRINT "1. WHEN YOU SEE *COMMAND ?* PRINTED, ENTER ONE OF THE LEGAL" 10120 PRINT " COMMANDS (NAV, SRS, LRS, PHA, TOR, SHE, DAM, COM, OR XXX)." 10130 PRINT "2. IF YOU SHOULD TYPE IN AN ILLEGAL COMMAND, YOU*LL GET A SHORT" 10140 PRINT " LIST OF THE LEGAL COMMANDS PRINTED OUT." 10150 PRINT "3. SOME COMMANDS REQUIRE YOU TO ENTER DATA. (FOR EXAMPLE, THE" 10160 PRINT " *NAV* COMMAND COMES BACK WITH *COURSE (1-9)?*. IF YOU" 10170 PRINT " TYPE IN ILLEGAL DATA (LIKE NEGATIVE NUMBERS), THAT COMMAND" 10180 PRINT " WILL BE ABORTED." 10190 PRINT 10200 PRINT "HIT (CAR RET) TO CONTINUE " 10210 INPUT A5$ 10215 PRINT 10220 RETURN 10230 REM ***** EXIT HERE ***** 10240 PRINT 10250 PRINT " INSTRUCTIONS FOR ** STAR TREK **" 10260 PRINT 10270 PRINT "THE GALAXY IS DIVIDED INTO AN 8 X 8 QUADRANT GRID," 10280 PRINT "AND EACH QUADRANT IS FURTHER DIVIDED INTO AN 8 X 8 SECTOR GRID." 10290 PRINT 10300 PRINT " YOU WILL BE ASSIGNED A STARTING POINT SOMEWHERE IN THE GALAXY" 10310 PRINT "TO BEGIN A TOUR OF DUTY AS COMMANDER OF THE STARSHIP *ENTERPRISE*;" 10320 PRINT "YOUR MISSION: TO SEEK AND DESTROY THE FLEET OF KLINGON WARSHIPS" 10330 PRINT "WHICH ARE MENACING THE UNITED FEREDATION OF PLANETS." 10340 PRINT 10350 RETURN 10360 PRINT 10370 PRINT "YOU HAVE THE FOLLOWING COMMANDS AVAILABLE TO YOU AS" 10380 PRINT "CAPTAIN OF THE STARSHIP:" 10390 PRINT "*NAV* COMMAND = WARP ENGINE CONTROL --" 10400 PRINT " COURSE IS IN A CIRCULAR NUMERICAL 4 3 2" 10410 PRINT " VECTOR ARRANGEMENT AS SHOWN. . . . " 10420 PRINT " INTEGER AND REAL VALUES MAY BE ... " 10430 PRINT " USED. (THUS, COURSE 1.5 IS HALF - 5-----1" 10440 PRINT " WAY BETWEEN 1 AND 2.) ... " 10450 PRINT " . . . " 10460 PRINT " VALUES MAY APPROACH 9.0, WHICH 6 7 8" 10470 PRINT " ITSELF IS EQUIVALENT TO 1.0." 10480 PRINT " COURSE " 10490 PRINT " ONE WARP FACTOR IS THE SIZE OF" 10500 PRINT " ONE QUADRANT. THEREFORE, TO GET" 10510 PRINT " FROM QUADRANT 6, 5 TO 5, 5, YOU WOULD" 10520 PRINT " USE COURSE 3, WARP FACTOR 1." 10530 RETURN 10540 PRINT 10545 PRINT "*SRS* COMMAND = SHORT RANGE SENSOR SCAN" 10550 PRINT " SHOWS YOU A SCAN OF YOUR PRESENT QUADRANT." 10560 PRINT " SYMBOLOGY ON YOUR SENSOR SCREEN IS A FOLLOWS:" 10570 PRINT " <*> = YOUR STARSHIP*S POSITION" 10580 PRINT " +++ = KLINGON BATTLE CRUISER" 10590 PRINT " >!< = FEDERATION STARBASE (REFUEL/REPAIR/RE-ARM HERE!)" 10600 PRINT " * = STAR" 10610 PRINT " A CONDENSED *STATUS REPORT* WILL ALSO BE PRESENTED." 10620 PRINT 10630 RETURN 10640 PRINT 10645 PRINT "*LRS* COMMAND = LONG RANGE SENSOR SCAN" 10650 PRINT " SHOWS CONDITIONS IN SPACE FOR ONE QUADRANT ON EACH SIDE" 10660 PRINT " OF THE ENTERPRISE (WHICH IS IN THE MIDDLE OF THE SCAN)" 10670 PRINT " THE SCAN IS CODED IN THE FORM *###*, WHERE THE UNITS DIGIT" 10680 PRINT " IS THE NUMBER OF STARS, TENS DIGIT IS THE NUMBER OF STARBASES," 10690 PRINT " AND HUNDREDS DIGIT IS THE NUMBER OF KLINGONS." 10700 PRINT " EXAMPLE -- 207 = 2 KLINGONS, NO STARBASES, 7 STARS." 10710 RETURN 10720 PRINT 10725 PRINT "*PHA* COMMAND = PHASER CONTROL" 10730 PRINT " ALLOWS YOU TO DESTROY THE KLINGON BATTLE CRUISERS BY" 10740 PRINT " ZAPPING THEM WITH SUITABLY LARGE UNITS OF ENERGY TO" 10750 PRINT " DEPLETE THEIR SHIELD POWER. (REMEMBER, KLINGONS HAVE" 10760 PRINT " PHASERS, TOO!)" 10770 RETURN 10780 PRINT 10785 PRINT "*TOR* COMMAND = PHOTON TORPEDO CONTROL." 10790 PRINT " TORPEDO COURSE IS THE SAME AS USED IN WARP ENGINE CONTROL." 10800 PRINT " IF YOU HIT THE KLINGON VESSEL, HE IS DESTROYED AND" 10810 PRINT " CANNOT FIRE BACK AT YOU. IF YOU MISS, YOU ARE SUBJECT TO" 10820 PRINT " HIS PHASER FIRE." 10830 PRINT " NOTE: THE LIBRARY-COMPUTER (*COM* COMMAND) HAS AN" 10840 PRINT " OPTION TO COMPUTE TORPEDO TRAJECTORY FOR YOU (OPTION 2))." 10850 RETURN 10860 PRINT 10865 PRINT "*SHE* COMMMAND = SHIELD CONTROL." 10870 PRINT " DEFINES NUMBER OF ENERGY UNITS TO BE ASSIGNED TO SHIELDS." 10880 PRINT " ENERGY IS TAKEN FROM TOTAL SHIP*S ENERGY. NOTE THAT THE" 10890 PRINT " TOTAL ENERGY INCLUDES SHIELD ENERGY." 10900 RETURN 10910 PRINT 10915 PRINT "*DAM* COMMAND = DAMAGE CONTROL REPORT" 10920 PRINT " GIVES STATE OF REPAIR OF ALL DEVICES, WHERE A NEGATIVE" 10930 PRINT " *STATE OF REPAIR* SHOWS THAT THE DEVICE IS TEMPORARILY" 10940 PRINT " DAMAGED." 10950 RETURN 10960 PRINT 10965 PRINT "*COM* COMMMAND = LIBRARY-COMPUTER" 10970 PRINT " THE LIBRARY-COMPUTER CONTAINS SIX OPTIONS:" 10980 PRINT " OPTION 0 = CUMULATIVE GALACTIC RECORD" 10990 PRINT " WHICH SHOWS COMPUTER MEMORY OF THE RESULTS OF ALL PREVIOUS" 11000 PRINT " LONG RANGE SENSOR SCANS." 11010 PRINT " OPTION 1 = STATUS REPORT" 11020 PRINT " WHICH THE NUMBER OF KLINGONS, STARDATES, AND STARBASES" 11030 PRINT " REMAINING IN THE GAME." 11040 PRINT " OPTION 2 = PHOTON TORPEDO DATA" 11050 PRINT " WHICH GIVES DIRECTIONS AND DISTANCE FROM THE ENTERPRISE" 11060 PRINT " TO ALL KLINGONS IN YOU QUADRANT" 11070 PRINT " OPTION 3 = STARBASE NAV DATA" 11080 PRINT " WHICH GIVES DIRECTION AND DISTANCE TO ANY STARBASE" 11090 PRINT " WITHIN YOUR QUADRANT" 11100 PRINT " OPTION 4 = DIRECTION/DISTANCE CALCULATOR" 11110 PRINT " WHICH ALLOWS YOU TO ENTER COORDINATES FOR" 11120 PRINT " DIRECTION/DISTANCE CALCULATIONS." 11130 PRINT " OPTION 5 = GALACTIC *REGION NAME* MAP" 11140 PRINT " WHICH PRINTS THE NAMES OF THE SIXTEEN MAJOR GALACTIC" 11150 PRINT " REGIONS REFERRED TO IN THE GAME." 11160 RETURN 20000 REM **** PROGRAMMMED A NEW SUBROUTINE TO DISPLAY THE GALAXY 20010 PRINT " 1 2 3 4 5 6 7 8" 20020 LET O3$ = " ----- ----- ----- ----- ----- ----- ----- -----" 20030 PRINT O3$ 20040 FOR J = 1 TO 8 20050 PRINT USING "#"; J; 20060 PRINT " "; 20065 LET Q5 = 1 20066 LET Z4 = J 20067 LET Z5 = 2 20070 GOSUB 9030 20080 PRINT G2$; 20082 FOR J9 = 1 TO (25 - LEN(G2$)) 20090 PRINT " "; 20092 NEXT J9 20100 LET Z5 = 7 20110 GOSUB 9030 20120 PRINT G2$ 20130 PRINT " I II III IV I II III IV" 20200 NEXT J 20210 LET Q5 = 0 20220 RETURN 30000 REM AUX S/R FOR DIRECTION/DISTANCE CALCLULATION 30005 REM REWORKED ALL OF THIS CODE TO USE TRIGONOMETRY A. J. Y. 10-18-2010 30010 LET D4 = ABS(ATN(ABS(X9) / ABS(A8))) 30012 LET P7 = ATN(1.0#) 30014 LET P7 = 4.0# * P7 30020 LET D1 = (D4 / (2.0# * P7)) * 8.0# 30030 RETURN 99999 END