Tento zdrojový kód je k dispozici ke stažení zde: cmd_v12_2004_09_27.zip(~1 MB)
1: | 100 REM modified for Chipmunk Basic 96-feb-13 rhn |
2: | 110 REM From: whirata@pixi.com (Wayne R Hirata) Newsgroups: comp.lang.basic.misc |
3: | 120 REM Subject: Re: Old 1976 Star Trek in BASIC (no graphics) |
4: | 130 REM Date: Sun, 17 Sep 1995 08:11:44 GMT |
5: | 140 REM |
6: | 150 REM *** SUPER STAR TREK *** |
7: | 160 REM INTELLEC MDS VERSION |
8: | 170 REM WRITTEN IN BASIC BY RON WILLIAMS |
9: | 180 REM INTEL CORP. - 5/15/76 |
10: | 190 REM ADAPTED FROM A FORTRAN VERSION WRITTEN |
11: | 200 REM FOR THE CDC 6600 IN 1974. |
12: | 210 REM |
13: | 220 DIM g1$(16), v$(5, 5), c$(20), g(8, 8), d$(12), q$(10, 10), d4(12), d9(106) |
14: | 230 DIM s2(8, 8), t$(10), s$(10), c2$(10), c5(10), g1(10), f1(10), k4(10), k5(10) |
15: | 240 DIM k6(10), k7(10), k8(10), s7$(10), c1(10), c2(10), b2(10), b3(10): q$ = "?" |
16: | 250 DATA"S.R. SENSORS","L.R. SENSORS","PHASERS","PHOTON TUBES","LIFE SUPPORT" |
17: | 260 DATA"WARP ENGINES","IMPULSE ENGINES","SHIELDS","SUBSPACE RADIO" |
18: | 270 DATA"SHUTTLE CRAFT","COMPUTER","TRANSFER PANEL","ABANDON","CHART","COMPUTER" |
19: | 280 DATA"DAMAGES","DESTRUCT","DOCK","IDLE","IMPULSE","LRSCAN","NAVIGATE","PHASERS","QUIT" |
20: | 290 DATA"SHIELDS","SOS","SRSCAN","STATUS","TORPEDO","TRANSFER","VISUAL","WARP","SHORT" |
21: | 300 DATA"MEDIUM","LONG","BEGINNER","NOVICE","SENIOR","EXPERT","COURSE","WCOST","ICOST" |
22: | 310 DATA"PEFFECT","SCORE","END","ANTARES","SIRIUS","RIGEL","MERAK","PROCYON","CAPELLA" |
23: | 320 DATA"VEGA","DENEB","CANOPUS","ALDEBARAN","ALTAIR","REGULUS","BELLATRIX","ARCTURUS" |
24: | 330 DATA"POLLUX","SPICA",10.5,12,1.5,9,0,3,7.5,6,4.5 |
25: | 340 DEF fna (x) = INT(8 * RND(x)) + 1: DEF fnb (x) = INT(10 * RND(x)) + 1 |
26: | 350 DEF fnd (x) = x / 60 |
27: | 360 DEF fnr (x) = INT(x * 10 + .5) / 10: DEF fns (x) = INT(x * 100 + .5) / 100 |
28: | 370 GOSUB 16340 |
29: | 380 FOR i = 1 TO 12: READ d$(i): NEXT: FOR i = 1 TO 20: READ c$(i): NEXT |
30: | 390 FOR i = 1 TO 3: READ t$(i): NEXT: FOR i = 1 TO 4: READ s$(i): NEXT: FOR i = 1 TO 6 |
31: | 400 READ c2$(i): NEXT: FOR i = 1 TO 16: READ g1$(i): NEXT: FOR i = 1 TO 9: READ c5(i): NEXT |
32: | 410 REM CALL SETUP |
33: | 420 GOSUB 12470: s7$(1) = "": s7$(2) = " ": s7$(3) = " ": s7$(4) = "" |
34: | 430 IF a2 <> 0 THEN 1470 |
35: | 440 j4 = 0: t1 = 0: PRINT : INPUT "COMMAND "; a$: IF LEN(a$) > 1 THEN 460 |
36: | 450 PRINT "USE AT LEAST 2 LETTERS, PLEASE.": GOTO 440 |
37: | 460 FOR i = 1 TO 20 |
38: | 470 IF a$ = LEFT$(c$(i), LEN(a$)) THEN 540 |
39: | 480 NEXT |
40: | 490 INPUT "ILLEGAL COMMAND - DO YOU NEED A LIST "; b$ |
41: | 500 IF LEFT$(b$, 1) = "N" THEN 430 |
42: | 510 PRINT : FOR i = 1 TO 20 STEP 4 |
43: | 520 PRINT c$(i); TAB(12); c$(i + 1); TAB(22); c$(i + 2); TAB(32); c$(i + 3) |
44: | 530 NEXT: PRINT : GOTO 430 |
45: | 540 IF i < 11 THEN ON i GOTO 580, 610, 640, 670, 700, 720, 750, 820, 860, 890 |
46: | 550 ON i - 10 GOTO 930, 980, 1020, 1090, 1120, 1150, 1180, 1220, 1280, 1340 |
47: | 560 PRINT "ERROR AT 170 - SHOULD NOT BE HERE" |
48: | 570 STOP |
49: | 580 REM -ABANDON |
50: | 590 GOSUB 15830 |
51: | 600 GOTO 430 |
52: | 610 REM -CHART |
53: | 620 GOSUB 2880 |
54: | 630 GOTO 430 |
55: | 640 REM -COMPUTER |
56: | 650 GOSUB 3530 |
57: | 660 GOTO 430 |
58: | 670 REM -DAMAGES |
59: | 680 GOSUB 4630 |
60: | 690 GOTO 430 |
61: | 700 REM - DESTRUCT |
62: | 710 GOSUB 16080: GOTO 430 |
63: | 720 REM -DOCK |
64: | 730 GOSUB 4510 |
65: | 740 GOTO 430 |
66: | 750 REM -IOLE |
67: | 760 GOSUB 15190 |
68: | 770 IF j3 = 0 THEN 430 |
69: | 780 IF a2 <> 0 THEN 1470 |
70: | 790 IF g(q1, q2) = 1000 THEN 1420 |
71: | 800 GOSUB 1520 |
72: | 810 GOTO 430 |
73: | 820 REM -IMPULSE |
74: | 830 GOSUB 7500 |
75: | 840 IF j3 = 0 THEN 430 |
76: | 850 GOTO 1370 |
77: | 860 REM -LRSCAN |
78: | 870 GOSUB 7780 |
79: | 880 GOTO 430 |
80: | 890 REM -NAVIGATE |
81: | 900 GOSUB 15340 |
82: | 910 IF j3 = 0 THEN 430 |
83: | 920 GOTO 1370 |
84: | 930 REM -PHASERS |
85: | 940 GOSUB 10560 |
86: | 950 IF j3 = 0 THEN 430 |
87: | 960 GOSUB 1520 |
88: | 970 GOTO 430 |
89: | 980 REM -QUIT |
90: | 990 GOTO 1470 |
91: | 1000 PRINT "TOO BAD...WE HATE TO LOSE GOOD ASTRONAUTS!" |
92: | 1010 GOTO 16330 |
93: | 1020 REM -SHIELDS |
94: | 1030 GOSUB 13250 |
95: | 1040 IF j3 = 0 THEN 430 |
96: | 1050 IF a2 <> 0 THEN 1470 |
97: | 1060 GOSUB 1520 |
98: | 1070 s9 = 0 |
99: | 1080 GOTO 430 |
100: | 1090 REM -SOS |
101: | 1100 GOSUB 6800 |
102: | 1110 GOTO 430 |
103: | 1120 REM -SRSCAN |
104: | 1130 GOSUB 14010 |
105: | 1140 GOTO 430 |
106: | 1150 REM - STATUS |
107: | 1160 PRINT |
108: | 1170 GOSUB 16310: GOTO 430 |
109: | 1180 REM -TORPEDOS |
110: | 1190 GOSUB 10970 |
111: | 1200 IF j3 = 0 THEN 430 |
112: | 1210 GOTO 1370 |
113: | 1220 REM -TRANSFER |
114: | 1230 GOSUB 14510 |
115: | 1240 IF j3 = 0 THEN 430 |
116: | 1250 IF a2 <> 0 THEN 1470 |
117: | 1260 IF g(q1, q2) <> 1000 THEN 430 |
118: | 1270 GOTO 1420 |
119: | 1280 REM -VISUAL |
120: | 1290 GOSUB 14670 |
121: | 1300 IF j3 = 0 THEN 430 |
122: | 1310 IF a2 <> 0 THEN 1470 |
123: | 1320 IF g(q1, q2) <> 1000 THEN 430 |
124: | 1330 GOTO 1420 |
125: | 1340 REM -WARP |
126: | 1350 GOSUB 13050 |
127: | 1360 GOTO 430 |
128: | 1370 REM -AFTERMOVINGSTARSHIP |
129: | 1380 IF a2 <> 0 THEN 1470 |
130: | 1390 IF t1 <> 0 THEN GOSUB 4760 |
131: | 1400 IF a2 <> 0 THEN 1470 |
132: | 1410 IF g(q1, q2) < 1000 THEN 1450 |
133: | 1420 GOSUB 2380 |
134: | 1430 IF a2 <> 0 THEN 1470 |
135: | 1440 GOTO 1410 |
136: | 1450 GOSUB 1520 |
137: | 1460 GOTO 430 |
138: | 1470 REM -WE'RE FINISHED |
139: | 1480 PRINT : PRINT : INPUT "WOULD YOU LIKE TO TRY AGAIN "; a$ |
140: | 1490 IF LEFT$(a$, 1) = "Y" THEN 410 |
141: | 1500 GOTO 1000 |
142: | 1510 REM -BEGINSUBROUTINES |
143: | 1520 REM -ATTACK |
144: | 1530 IF (c3 <> 0) AND (j4 = 0) THEN GOSUB 8830 |
145: | 1540 IF k3 = 0 THEN RETURN |
146: | 1550 IF a2 <> 0 THEN RETURN |
147: | 1560 p2 = 1 / i8 |
148: | 1570 j5 = 0 |
149: | 1580 PRINT |
150: | 1590 IF c5$ = "DOCKED" THEN 2310 |
151: | 1600 h2 = 0: h3 = 0: c6 = 1 |
152: | 1610 IF s9 = 1 THEN c6 = .5 + .5 * RND(1) |
153: | 1620 a3 = 0 |
154: | 1630 FOR l = 1 TO k3 |
155: | 1640 IF k6(l) < 0 THEN 2070 |
156: | 1650 a3 = 1 |
157: | 1660 d6 = .8 + .05 * RND(1) |
158: | 1670 h4 = k6(l) * d6 ^ k8(l) |
159: | 1680 IF (s4 = 0) AND (s9 = 0) THEN 1750 |
160: | 1690 p3 = .1: IF p2 * s3 > p3 THEN p3 = p2 * s3 |
161: | 1700 h5 = p3 * c6 * h4 + 1 |
162: | 1710 IF h5 > s3 THEN h5 = s3 |
163: | 1720 s3 = s3 - h5 |
164: | 1730 h4 = h4 - h5 |
165: | 1740 IF (p3 > .1) AND (h4 < .005# * e1) THEN 2070 |
166: | 1750 j5 = 1 |
167: | 1760 PRINT fnr(h4); "UNIT HIT ON THE "; s5$; " FROM "; |
168: | 1770 j6 = k4(l): j7 = k5(l) |
169: | 1780 IF q$(j6, j7) = "K" THEN PRINT "KLINGON AT "; |
170: | 1790 IF q$(j6, j7) = "C" THEN PRINT "COMMANDER AT "; |
171: | 1800 PRINT j6; "-"; j7 |
172: | 1810 IF h4 > h2 THEN h2 = h4 |
173: | 1820 h3 = h3 + h4 |
174: | 1830 IF h4 < (275 - 25 * s8) * (1 + .5 * RND(1)) THEN 2060 |
175: | 1840 n4 = 1 + INT(h4 / (500 + 100 * RND(1))) |
176: | 1850 PRINT "***CRITICAL HIT--"; |
177: | 1860 k9 = 1 |
178: | 1870 FOR w4 = 1 TO n4 |
179: | 1880 j9 = INT(12 * RND(1)) + 1 |
180: | 1890 c5(w4) = j9 |
181: | 1900 e3 = (h4 * d5) / (n4 * (75 + 25 * RND(1))) |
182: | 1910 IF j9 = 6 THEN e3 = e3 / 3 |
183: | 1920 d4(j9) = d4(j9) + e3 |
184: | 1930 IF w4 = 1 THEN 2000 |
185: | 1940 FOR v = 1 TO w4 |
186: | 1950 IF j9 = c5(v - 1) THEN 2010 |
187: | 1960 NEXT v |
188: | 1970 k9 = k9 + 1 |
189: | 1980 IF k9 = 3 THEN PRINT |
190: | 1990 PRINT " AND "; |
191: | 2000 PRINT d$(j9); |
192: | 2010 NEXT w4 |
193: | 2020 PRINT " DAMAGED." |
194: | 2030 IF d4(8) = 0 THEN 2060 |
195: | 2040 IF s4 <> 0 THEN PRINT "*** SHIELDS KNOCKED DOWN." |
196: | 2050 s4 = 0 |
197: | 2060 e1 = e1 - h4 |
198: | 2070 NEXT l |
199: | 2080 IF a3 = 0 THEN RETURN |
200: | 2090 IF e1 <= 0 THEN 2280 |
201: | 2100 p4 = 100 * p2 * s3 + .5 |
202: | 2110 IF j5 <> 0 THEN 2140 |
203: | 2120 PRINT "KLINGONS ATTACK--SHIELD STRENGTH REDUCED TO "; |
204: | 2130 GOTO 2180 |
205: | 2140 PRINT "ENERGY LEFT:"; fns(e1); " SHIELDS "; |
206: | 2150 IF s4 <> 0 THEN PRINT "UP,"; |
207: | 2160 IF (s4 = 0) AND (d4(8) = 0) THEN PRINT "DOWN, "; |
208: | 2170 IF d4(8) > 0 THEN PRINT "DAMAGED, "; |
209: | 2180 PRINT INT(p4); "%" |
210: | 2190 IF (h2 < 200) AND (h3 < 500) THEN 2330 |
211: | 2200 j8 = INT(h3 * RND(1) * .015) |
212: | 2210 IF j8 < 2 THEN 2330 |
213: | 2220 PRINT |
214: | 2230 PRINT "MCCOY - 'SICKBAY TO BRIDGE. WE SUFFERED "; |
215: | 2240 PRINT j8; "CASUALTIES" |
216: | 2250 PRINT " IN THAT LAST ATTACK'" |
217: | 2260 c4 = c4 + j8 |
218: | 2270 GOTO 2330 |
219: | 2280 f9 = 5 |
220: | 2290 GOSUB 5940 |
221: | 2300 RETURN |
222: | 2310 PRINT "*** KLINGONS ATTACK-- STARBASE SHIELDS PROTECT "; |
223: | 2320 PRINT "THE "; s5$ |
224: | 2330 FOR w4 = 1 TO k3 |
225: | 2340 k8(w4) = k7(w4) |
226: | 2350 NEXT w4 |
227: | 2360 GOSUB 13880 |
228: | 2370 RETURN |
229: | 2380 REM -AUTO VER |
230: | 2390 PRINT |
231: | 2400 IF j4 = 0 THEN 2440 |
232: | 2410 PRINT "*** RED ALERT! RED ALERT!" |
233: | 2420 PRINT "***THE "; s5$; " HAS STOPPED IN A QUADRANT "; |
234: | 2430 PRINT "CONTAINING A SUPERNOVA." |
235: | 2440 PRINT "*** EMERGENCY AUTO -OVERRIDE ATTEMPTS TO HURL "; |
236: | 2450 PRINT s5$ |
237: | 2460 PRINT " SAFELY OUT OF THE QUADRANT." |
238: | 2470 s2(q1, q2) = 1 |
239: | 2480 GOSUB 9500 |
240: | 2490 IF d4(6) = 0 THEN 2690 |
241: | 2500 PRINT |
242: | 2510 PRINT "WARP ENGINES DAMAGED." |
243: | 2520 PRINT |
244: | 2530 PRINT "ATTEMPTING TO ENGAGE IMPULSE ENGINES..." |
245: | 2540 IF d4(7) = 0 THEN 2590 |
246: | 2550 PRINT "IMPULSE ENGINES DAMAGED." |
247: | 2560 f9 = 8 |
248: | 2570 GOSUB 5940 |
249: | 2580 RETURN |
250: | 2590 p2 = .75 * e1 |
251: | 2600 d6 = .004# * (p2 - 50) |
252: | 2610 d7 = 1.4142 + 1.2 * RND(1) |
253: | 2620 d1 = d6 |
254: | 2630 IF d6 > d7 THEN d1 = d7 |
255: | 2640 t1 = d1 / .4 |
256: | 2650 d2 = 12 * RND(1) |
257: | 2660 j4 = 0 |
258: | 2670 GOSUB 7720 |
259: | 2680 GOTO 2800 |
260: | 2690 w1 = 6 + 2 * RND(1) |
261: | 2700 w2 = w1 * w1 |
262: | 2710 p2 = .75 * e1 |
263: | 2720 d6 = p2 / (w1 * w1 * w1 * (s4 + 1)) |
264: | 2730 d7 = 1.4142 + 2 * RND(1) |
265: | 2740 d1 = d6 |
266: | 2750 IF d6 > d7 THEN d1 = d7 |
267: | 2760 t1 = 10 * d1 / w2 |
268: | 2770 d2 = 12 * RND(1) |
269: | 2780 j4 = 0 |
270: | 2790 GOSUB 15560 |
271: | 2800 IF j4 <> 0 THEN 2840 |
272: | 2810 f9 = 8 |
273: | 2820 GOSUB 5940 |
274: | 2830 RETURN |
275: | 2840 IF r1 <> 0 THEN RETURN |
276: | 2850 f9 = 1 |
277: | 2860 GOSUB 5940 |
278: | 2870 RETURN |
279: | 2880 REM -CHART |
280: | 2890 PRINT : PRINT " 1 2 3 4 5 6 7 8" |
281: | 2900 PRINT " --- --- --- --- --- --- --- ---" |
282: | 2910 FOR i = 1 TO 8 |
283: | 2920 PRINT i; " "; |
284: | 2930 FOR j = 1 TO 8 |
285: | 2940 ON SGN(s2(i, j)) + 2 GOTO 2960, 2980, 3000 |
286: | 2950 PRINT "ERR AT 3065": STOP |
287: | 2960 PRINT " .1."; |
288: | 2970 GOTO 3050 |
289: | 2980 PRINT " ..."; |
290: | 2990 GOTO 3050 |
291: | 3000 IF s2(i, j) > 1000 THEN 3040 |
292: | 3010 IF g(i, j) < 1000 THEN PRINT s7$(LEN(STR$(g(i, j)))); STR$(g(i, j)); |
293: | 3020 IF g(i, j) = 1000 THEN PRINT " ***"; |
294: | 3030 GOTO 3050 |
295: | 3040 PRINT s2(i, j) - 1000; |
296: | 3050 NEXT j |
297: | 3060 PRINT |
298: | 3070 NEXT i: GOSUB 9830 |
299: | 3080 PRINT |
300: | 3090 PRINT "THE "; s5$; " IS CURRENTLY IN "; g2$; " ("; q1; "-"; q2; ")" |
301: | 3100 RETURN |
302: | 3110 REM -CHOOSE |
303: | 3120 FOR i = 1 TO 10: PRINT : NEXT: FOR i = 1 TO 41: PRINT "*"; : NEXT: PRINT |
304: | 3130 PRINT "**"; TAB(39); "**" |
305: | 3140 PRINT "** WELCOME TO THE WORLD OF STAR TREK **" |
306: | 3150 PRINT "**"; TAB(39); "**": FOR i = 1 TO 41: PRINT "*"; : NEXT: PRINT |
307: | 3160 PRINT : PRINT |
308: | 3170 s8 = 0: l2 = 0 |
309: | 3180 PRINT "HOW LONG A GAME WOULD YOU LIKE "; |
310: | 3190 INPUT a$ |
311: | 3200 FOR i = 1 TO 3 |
312: | 3210 IF a$ = LEFT$(t$(i), LEN(a$)) THEN 3250 |
313: | 3220 NEXT i |
314: | 3230 PRINT "WOULD YOU LIKE A SHORT, MEDIUM OR LONG GAME "; |
315: | 3240 GOTO 3190 |
316: | 3250 l2 = i |
317: | 3260 PRINT "ARE YOU A BEGINNER, NOVICE, SENIOR OR EXPERT PLAYER "; |
318: | 3270 INPUT a$ |
319: | 3280 FOR i = 1 TO 4 |
320: | 3290 IF a$ = LEFT$(s$(i), LEN(a$)) THEN 3320 |
321: | 3300 NEXT i |
322: | 3310 GOTO 3260 |
323: | 3320 s8 = i |
324: | 3330 INPUT "ENTER YOUR MISSION PASSWORD... "; x$ |
325: | 3340 PRINT |
326: | 3350 PRINT "....SETTING UP THE GALAXY...." |
327: | 3360 j = RND(1) |
328: | 3370 REM -INITIALIZE |
329: | 3380 d5 = .5 * s8 |
330: | 3390 i2 = INT(l2 + 1 + RND(1) * 3) |
331: | 3400 IF i2 > 5 THEN i2 = 5 |
332: | 3410 r3 = i2 |
333: | 3420 i5 = 7 * l2 |
334: | 3430 r5 = i5 |
335: | 3440 r7 = (s8 - 2 * RND(1) + 1) * s8 * .1 + .1 |
336: | 3450 IF r7 < .2 THEN r7 = r7 + .1 |
337: | 3460 i1 = INT(2 * r7 * i5) |
338: | 3470 r1 = i1 |
339: | 3480 i4 = INT(s8 + .0625 * i1 * RND(1)) |
340: | 3490 r2 = i4 |
341: | 3500 i3 = (i1 + 4 * i4) * i5 |
342: | 3510 r4 = i3 |
343: | 3520 RETURN |
344: | 3530 REM -COMPUTE |
345: | 3540 IF d4(11) = 0 THEN 3570 |
346: | 3550 PRINT "LIBRARY COMPUTER DISABLED" |
347: | 3560 RETURN |
348: | 3570 PRINT "----LIBRARY COMPUTER ACTIVE----" |
349: | 3580 INPUT "PROGRAM NAME "; b$ |
350: | 3590 FOR i = 1 TO 6 |
351: | 3600 IF b$ = LEFT$(c2$(i), LEN(b$)) THEN 3660 |
352: | 3610 NEXT |
353: | 3620 PRINT "VALID PROGRAMS ARE:" |
354: | 3630 PRINT " COURSE WCOST ICOST" |
355: | 3640 PRINT " PEFFECT SCORE END" |
356: | 3650 GOTO 3580 |
357: | 3660 ON i GOTO 3670, 3920, 4000, 4070, 4130, 4160 |
358: | 3670 REM -COURSE&DIRECTION |
359: | 3680 INPUT "ENTER QUADRANT AND SECTOR - "; a3, a4 |
360: | 3690 IF (a3 <> INT(a3)) OR (a4 <> INT(a4)) THEN 4170 |
361: | 3700 IF a3 < 0 THEN 3580 |
362: | 3710 IF a3 = 0 THEN a3 = 10 * q1 + q2 |
363: | 3720 a3 = a3 + .5 |
364: | 3730 k = INT(a3 / 10) |
365: | 3740 IF (k < 1) OR (k > 8) THEN 4170 |
366: | 3750 c6(1) = k: k = INT(a3 - c6(1) * 10) |
367: | 3760 IF (k < 1) OR (k > 8) THEN 4170 |
368: | 3770 c6(2) = k: a4 = a4 + .5 |
369: | 3780 k = INT(a4 / 100) |
370: | 3790 IF (k < 1) OR (k > 10) THEN 4170 |
371: | 3800 c6(1) = c6(1) + (k - 1) / 10: k = INT(a4 - k * 100) |
372: | 3810 IF (k < 1) OR (k > 10) THEN 4170 |
373: | 3820 c6(2) = c6(2) + (k - 1) / 10 |
374: | 3830 x = q1 + ((s6 - 1) / 10) - c6(1): y = q2 + ((s7 - 1) / 10) - c6(2) |
375: | 3840 d1 = 0: d2 = 0: IF (x = 0) AND (y = 0) THEN 3900 |
376: | 3850 d1 = SQR(x * x + y * y) |
377: | 3860 IF x < 0 THEN z7 = SGN(y) * (3.1416 - ARCTAN(ABS(y / x))) |
378: | 3870 IF x = 0 THEN z7 = SGN(y) * 1.5708 |
379: | 3880 IF x > 0 THEN z7 = ARCTAN(y / x) |
380: | 3890 d2 = 12 - z7 * 1.909859: IF d2 > 12 THEN d2 = d2 - 12 |
381: | 3900 PRINT "COURSE IS "; fns(d2); " FOR A DISTANCE OF "; |
382: | 3910 PRINT fns(d1); "QUADRANTS.": GOTO 3580 |
383: | 3920 REM -COST FOR WARP DRIVE |
384: | 3930 INPUT "ENTER DISTANCE AND WARP FACTOR "; d1, a4 |
385: | 3940 IF (d1 < 0) THEN 3580 |
386: | 3950 c7 = d1 * a4 * a4 * a4 |
387: | 3960 t1 = (10 * d1) / (a4 * a4) |
388: | 3970 PRINT "IT WOULD TAKE "; fns(t1); "STARDATES AND USE" |
389: | 3980 PRINT fnr(c7); "UNITS OF ENERGY ("; fnr(c7 + c7); " IF SHIELDS ARE UP)" |
390: | 3990 GOTO 3580 |
391: | 4000 REM -COST FOR IMPULSE POWER |
392: | 4010 INPUT "ENTER DISTANCE... "; d1 |
393: | 4020 IF d1 < 0 THEN 3580 |
394: | 4030 c7 = 250 * d1 + 50: t1 = d1 / .4 |
395: | 4040 PRINT "IT WOULD TAKE "; fnr(t1); "STARDATES AND USE" |
396: | 4050 PRINT c7; "UNITS OF ENERGY" |
397: | 4060 GOTO 3580 |
398: | 4070 REM -PHASER EFFECTIVENESS |
399: | 4080 INPUT "ENTER PHASER RANGE IN QUADRANTS "; a3 |
400: | 4090 IF a3 < 0 THEN 3580 |
401: | 4100 a3 = a3 * 10: c7 = (.9 ^ a3) * 100 |
402: | 4110 PRINT "PHASERS ARE "; LEFT$(STR$(c7), 5); "% EFFECTIVE AT THAT RANGE" |
403: | 4120 GOTO 3580 |
404: | 4130 REM - SCORE |
405: | 4140 GOSUB 12110 |
406: | 4150 GOTO 3580 |
407: | 4160 RETURN |
408: | 4170 PRINT " FORMAT IS MN,XXYY...WHERE MN IS THE QUADRANT" |
409: | 4180 PRINT "AND XXYY IS THE SECTOR...E.G. 64,0307 REFERS" |
410: | 4190 PRINT "TO QUADRANT 6-4, SECTOR 3-7." |
411: | 4200 PRINT "NOTE: SECTOR COORDINATES MUST BE 4 DIGITS." |
412: | 4210 GOTO 3580 |
413: | 4220 REM - DEADKL |
414: | 4230 IF t2$ <> "C" THEN 4330 |
415: | 4240 c3 = 0: PRINT "***COMMANDER AT "; |
416: | 4250 FOR f = 1 TO r2 |
417: | 4260 IF (c1(f) = q1) AND (c2(f) = q2) THEN 4280 |
418: | 4270 NEXT f |
419: | 4280 c1(f) = c1(r2): c2(f) = c2(r2): c1(r2) = 0: c2(r2) = 0 |
420: | 4290 r2 = r2 - 1: f1(2) = 1E+30 |
421: | 4300 IF r2 <> 0 THEN f1(2) = d0 - (i4 / r2) * LOG(RND(1)) |
422: | 4310 k2 = k2 + 1 |
423: | 4320 GOTO 4350 |
424: | 4330 PRINT "***KLINGON AT "; |
425: | 4340 k1 = k1 + 1 |
426: | 4350 PRINT a5; "-"; a6; "DESTROYED." |
427: | 4360 q$(a5, a6) = ".": r1 = r1 - 1 |
428: | 4370 IF r1 = 0 THEN RETURN |
429: | 4380 r5 = r4 / (r1 + 4 * r2) |
430: | 4390 g(q1, q2) = g(q1, q2) - 100 |
431: | 4400 FOR f = 1 TO k3 |
432: | 4410 IF (k4(f) = a5) AND (k5(f) = a6) THEN 4430 |
433: | 4420 NEXT f |
434: | 4430 k3 = k3 - 1 |
435: | 4440 IF f > k3 THEN 4490 |
436: | 4450 FOR g = f TO k3 |
437: | 4460 k4(g) = k4(g + 1): k5(g) = k5(g + 1): k6(g) = k6(g + 1) |
438: | 4470 k7(g) = k7(g + 1): k8(g) = k7(g) |
439: | 4480 NEXT g |
440: | 4490 k4(k3 + 1) = 0: k5(k3 + 1) = 0: k7(k3 + 1) = 0: k8(k3 + 1) = 0: k6(k3 + 1) = 0 |
441: | 4500 RETURN |
442: | 4510 REM -DOCK |
443: | 4520 IF c5$ = "DOCKED" THEN 4610 |
444: | 4530 IF b6 = 0 THEN 4550 |
445: | 4540 IF (ABS(s6 - b6) <= 1) AND (ABS(s7 - b7) <= 1) THEN 4570 |
446: | 4550 PRINT s5$; " NOT ADJACENT TO A BASE." |
447: | 4560 RETURN |
448: | 4570 c5$ = "DOCKED" |
449: | 4580 PRINT "HELMSMAN SULU - 'DOCKING MANEUVER COMPLETED.'" |
450: | 4590 e1 = i7: s3 = i8: t4 = i9: l1 = j1 |
451: | 4600 RETURN |
452: | 4610 PRINT "MR. SULU - 'BUT CAPTAIN, WE'RE AL READ Y DOCKED!'" |
453: | 4620 RETURN |
454: | 4630 REM -DREPORT |
455: | 4640 j = 0 |
456: | 4650 PRINT |
457: | 4660 FOR i = 1 TO 12 |
458: | 4670 IF d4(i) <= 0 THEN 4730 |
459: | 4680 IF j <> 0 THEN 4720 |
460: | 4690 PRINT " DEVICE "; spc$(12); "-REPAIR TIMES-" |
461: | 4700 PRINT spc$(21); "IN FLIGHT DOCKED" |
462: | 4710 j = 1 |
463: | 4720 PRINT " "; d$(i); TAB(23); fns(d4(i)); TAB(33); fns(d3 * d4(i)) |
464: | 4730 NEXT i |
465: | 4740 IF j = 0 THEN PRINT "MR. SPOCK - 'ALL DEVICES FUNCTIONAL, CAPTAIN'" |
466: | 4750 RETURN |
467: | 4760 REM -EVENTS |
468: | 4770 m = 0: d7 = d0 + t1 |
469: | 4780 FOR l = 1 TO 5 |
470: | 4790 IF f1(l) > d7 THEN 4810 |
471: | 4800 m = l: d7 = f1(l) |
472: | 4810 NEXT l |
473: | 4820 x6 = d7 - d0: d0 = d7 |
474: | 4830 r4 = r4 - (r1 + 4 * r2) * x6 |
475: | 4840 r5 = r4 / (r1 + 4 * r2) |
476: | 4850 IF r5 > 0 THEN 4890 |
477: | 4860 f9 = 2 |
478: | 4870 GOSUB 5940 |
479: | 4880 RETURN |
480: | 4890 IF (d4(5) = 0) OR (c5$ = "DOCKED") THEN 4950 |
481: | 4900 IF (l1 >= x6) OR (d4(5) <= l1) THEN 4930 |
482: | 4910 f9 = 3: GOSUB 5940 |
483: | 4920 RETURN |
484: | 4930 l1 = l1 - x6 |
485: | 4940 IF d4(5) <= x6 THEN l1 = j1 |
486: | 4950 r = x6 |
487: | 4960 IF c5$ = "DOCKED" THEN r = x6 / d3 |
488: | 4970 FOR l = 1 TO 12 |
489: | 4980 IF d4(l) <= 0 THEN 5030 |
490: | 4990 d4(l) = d4(l) - r |
491: | 5000 IF d4(l) < 0 THEN d4(l) = 0 |
492: | 5010 IF d4(l) <> 0 THEN 5030 |
493: | 5020 PRINT : PRINT "DAMAGE CONTROL- '"; d$(l); " NOW OPERATIONAL.'" |
494: | 5030 NEXT l |
495: | 5040 IF m = 0 THEN RETURN |
496: | 5050 t1 = t1 - x6 |
497: | 5060 ON m GOTO 5070, 5120, 5350, 5440, 5650 |
498: | 5070 REM -SUPERNOVA |
499: | 5080 x2 = 0: y2 = 0: GOSUB 13410 |
500: | 5090 f1(1) = d0 - .5 * i5 * LOG(RND(1)) |
501: | 5100 IF g(q1, q2) = 1000 THEN RETURN |
502: | 5110 GOTO 4770 |
503: | 5120 REM -TRACTOR BEAM |
504: | 5130 IF r2 = 0 THEN 5340 |
505: | 5140 IF c5$ = "DOCKED" THEN 5320 |
506: | 5150 i = INT(RND(1) * r2) + 1 |
507: | 5160 y6 = (c1(i) - q1) ^ 2 + (c2(i) - q2) ^ 2 |
508: | 5170 IF y6 = 0 THEN 5320 |
509: | 5180 y6 = SQR(y6): t1 = .17778 * y6 |
510: | 5190 PRINT : PRINT "***"; s5$; " CAUGHT IN LONG-RANGE TRACTOR BEAM--" |
511: | 5200 q1 = c1(i): q2 = c2(i) |
512: | 5210 s6 = fnb(1): s7 = fnb(1) |
513: | 5220 PRINT " PULLED TO QUADRANT "; q1; "-"; q2; ", SECTOR "; s6; "-"; s7 |
514: | 5230 IF r6 <> 0 THEN PRINT "(REMAINDER OF IDLE PERIOD CANCELLED)" |
515: | 5240 r6 = 0 |
516: | 5250 IF s4 <> 0 THEN 5310 |
517: | 5260 IF (d4(8) = 0) AND (s3 > 0) THEN 5290 |
518: | 5270 PRINT "(SHIELDS NOT CURRENTLY USABLE.)" |
519: | 5280 GOTO 5310 |
520: | 5290 GOSUB 13280 |
521: | 5300 s9 = 0 |
522: | 5310 GOSUB 9500 |
523: | 5320 f1(2) = d0 + t1 - 1.5 * (i5 / r2) * LOG(RND(1)) |
524: | 5330 GOTO 4770 |
525: | 5340 f1(2) = 1E+30: GOTO 4770 |
526: | 5350 d9(1) = d0: d9(2) = r1: d9(3) = r2: d9(4) = r3: d9(5) = r4: d9(6) = r5 |
527: | 5360 d9(7) = s1: d9(8) = b1: d9(9) = k1: d9(10) = k2 |
528: | 5370 FOR i = 1 TO 8: FOR j = 1 TO 8: d9(i - 1 + 8 * (j - 1) + 11) = g(i, j): NEXT j: NEXT i |
529: | 5380 FOR i = 75 TO 84: d9(i) = c1(i - 74): NEXT |
530: | 5390 FOR i = 85 TO 94: d9(i) = c2(i - 84): NEXT |
531: | 5400 FOR i = 95 TO 99: d9(i) = b2(i - 94): NEXT |
532: | 5410 FOR i = 100 TO 104: d9(i) = b3(i - 99): NEXT |
533: | 5420 d9(105) = b4: d9(106) = b5 |
534: | 5430 s0 = 1: f1(3) = d0 - .3 * i5 * LOG(RND(1)): GOTO 4770 |
535: | 5440 REM - STARBASE ATTACK |
536: | 5450 IF (r2 = 0) OR (r3 = 0) THEN 5500 |
537: | 5460 FOR i = 1 TO r3: FOR j = 1 TO r2: IF (b2(i) = c1(j)) AND (b3(i) = c2(j)) THEN 5510 |
538: | 5470 NEXT j: NEXT i |
539: | 5480 f1(4) = d0 + .5 + 3 * RND(1) |
540: | 5490 f1(5) = 1E+30: GOTO 4770 |
541: | 5500 f1(4) = 1E+30: f1(5) = 1E+30: GOTO 4770 |
542: | 5510 b4 = b2(i): b5 = b3(i) |
543: | 5520 IF (b4 = q1) AND (b5 = q2) THEN 5480 |
544: | 5530 f1(5) = d0 + .5 + 3 * RND(1) |
545: | 5540 f1(4) = f1(5) - .3 * i5 * LOG(RND(1)) |
546: | 5550 IF d4(9) > 0 THEN 4770 |
547: | 5560 PRINT |
548: | 5570 PRINT "LT. UHURA- 'CAPTAIN, THE STARBASE IN "; b4; "-"; b5 |
549: | 5580 PRINT " REPORTS THAT IT IS UNDER ATTACK AND CAN HOLD OUT" |
550: | 5590 PRINT " ONLY UNTIL STARDATE "; fnr(f1(5)); "'" |
551: | 5600 IF r6 = 0 THEN 4770 |
552: | 5610 PRINT |
553: | 5620 INPUT "MR. SPOCK- 'CAPTAIN, SHALL WE CANCEL THE IDLE PERIOD "; b$ |
554: | 5630 IF LEFT$(b$, 1) = "Y" THEN r6 = 0 |
555: | 5640 GOTO 4770 |
556: | 5650 REM - STARBASE DESTROYED |
557: | 5660 f1(5) = 1E+30: IF (r2 = 0) OR (r3 = 0) THEN 4770 |
558: | 5670 k = INT(g(b4, b5) / 100): IF g(b4, b5) - k * 100 < 10 THEN 4770 |
559: | 5680 FOR i = 1 TO r2: IF (c1(i) = b4) AND (c2(i) = b5) THEN 5700 |
560: | 5690 NEXT: GOTO 4770 |
561: | 5700 IF s2(b4, b5) = -1 THEN s2(b4, b5) = 0 |
562: | 5710 IF s2(b4, b5) > 999 THEN s2(b4, b5) = s2(b4, b5) - 10 |
563: | 5720 IF (b4 <> q1) OR (b5 <> q2) THEN 5820 |
564: | 5730 FOR i = 1 TO k3: k = k4(i): l = k5(i) |
565: | 5740 IF q$(k, l) = "C" THEN 5760 |
566: | 5750 NEXT |
567: | 5760 IF k6(i) < 25 + 50 * RND(1) THEN 4770 |
568: | 5770 q$(b6, b7) = ".": b6 = 0: b7 = 0 |
569: | 5780 GOSUB 9450 |
570: | 5790 PRINT : PRINT "MR. SPOCK- 'CAPTAIN, I BELIEVE THE STARBASE HAS "; |
571: | 5800 PRINT " BEEN DESTROYED.'" |
572: | 5810 GOTO 5870 |
573: | 5820 IF (r3 = 1) OR (d4(9) > 0) THEN 5870 |
574: | 5830 PRINT |
575: | 5840 PRINT "LT. UHURA- 'CAPTAIN, STARFLEET COMMAND REPORTS THAT" |
576: | 5850 PRINT " THE STARBASE IN QUADRANT "; b4; "-"; b5; "HAS BEEN" |
577: | 5860 PRINT " DESTROYED BY A KLINGON COMMANDER.'" |
578: | 5870 g(b4, b5) = g(b4, b5) - 10 |
579: | 5880 IF r3 <= 1 THEN 5920 |
580: | 5890 FOR i = 1 TO r3: IF (b2(i) = b4) AND (b3(i) = b5) THEN 5910 |
581: | 5900 NEXT |
582: | 5910 b2(i) = b2(r3): b3(i) = b3(r3) |
583: | 5920 r3 = r3 - 1 |
584: | 5930 GOTO 4770 |
585: | 5940 REM -FINISH |
586: | 5950 a2 = 1: PRINT : PRINT "IT IS STARDATE "; fnr(d0): PRINT |
587: | 5960 IF f9 <= 8 THEN ON f9 GOTO 5980, 6210, 6300, 6360, 6380, 6410, 6420, 6450 |
588: | 5970 ON f9 - 8 GOTO 6480, 6540, 6570 |
589: | 5980 REM -THE GAME HAS BEEN WON |
590: | 5990 PRINT "YOU HAVE DESTROYED THE KLINGON INVASION FLEET" |
591: | 6000 PRINT |
592: | 6010 PRINT " ***THE FEDERATION IS SAVED***": g1 = 1 |
593: | 6020 IF (a1 = 0) OR (b1 <> 0) THEN 6190 |
594: | 6030 IF LEFT$(s5$, 1) <> "E" THEN 6190 |
595: | 6040 IF 3 * s1 + 35 * n1 + c4 >= 100 THEN 6190 |
596: | 6050 IF d0 - j2 <= 6 THEN 6080 |
597: | 6060 r8 = .1 * s8 * (s8 + 1) + .1 |
598: | 6070 IF (k1 + k2) / (d0 - j2) < r8 THEN 6190 |
599: | 6080 PRINT |
600: | 6090 PRINT "IN FACT, YOU HAVE DONE SO WELL THAT STARFLEET COMMAND" |
601: | 6100 IF s8 = 4 THEN 6160 |
602: | 6110 PRINT "PROMOTES YOU ON E STEP IN RANK, "; |
603: | 6120 IF s8 = 1 THEN PRINT "FROM BEGINNER TO NOVICE CLASS!" |
604: | 6130 IF s8 = 2 THEN PRINT "FROM NOVICE TO SENIOR CLASS!" |
605: | 6140 IF s8 = 3 THEN PRINT "FROM SENIOR TO EXPERT CLASS!" |
606: | 6150 PRINT " ***CONGRATULATIONS***": GOTO 6190 |
607: | 6160 PRINT "PROMOTES YOU TO 'COMMODORE EMERITUS'." |
608: | 6170 PRINT |
609: | 6180 PRINT "NOW YOU CAN RETIRE AND WRITE YOUR OWN STAR TREK GAME!" |
610: | 6190 GOSUB 12110 |
611: | 6200 RETURN |
612: | 6210 REM -FED RESOURCES DEPLETED |
613: | 6220 PRINT "YOUR TIME HAS RUN OUT, AND THE" |
614: | 6230 PRINT "FEDERATION HAS BEEN CONQUERED.": PRINT |
615: | 6240 PRINT "YOUR STARSHIP IS NOW KLINGON PROPERY, AND YOU ARE PUT" |
616: | 6250 PRINT "ON TRIAL AS A WAR CRIMINAL. ON THE BASIS OF YOUR RECORD," |
617: | 6260 IF r1 * 3 > i1 THEN 6290 |
618: | 6270 PRINT "YOU ARE FOUND GUILTY AND SENTENCED TO DEATH!" |
619: | 6280 a1 = 0: GOSUB 12110: RETURN |
620: | 6290 PRINT "YOU ARE ACQUITTED": GOSUB 12110: RETURN |
621: | 6300 REM - L.S. FAILURE |
622: | 6310 PRINT "YOUR LIFE SUPPORT RESERVES HAVE RUN OUT, AND" |
623: | 6320 PRINT "YOU WILL SOON DIE OF ASPHYXIATION" |
624: | 6330 PRINT |
625: | 6340 PRINT "YOUR STARSHIP IS A DERELICT IN SPACE." |
626: | 6350 GOTO 6590 |
627: | 6360 REM -ENERGY GONE |
628: | 6370 PRINT "YOUR ENERGY SUPPLY IS EXHAUSTED.": GOTO 6330 |
629: | 6380 REM -BATTLE DEFEAT |
630: | 6390 PRINT "THE "; s5$; " HAS BEEN DESTROYED IN BATTLE." |
631: | 6400 GOTO 6590 |
632: | 6410 PRINT "F9=6 INVALID": RETURN |
633: | 6420 REM -NOVA |
634: | 6430 PRINT "YOUR STARSHIP HAS BEEN DESTROYED BY A NOVA." |
635: | 6440 PRINT "NICE SHOT, YOU HOCKEY PUCK!": GOTO 6590 |
636: | 6450 REM -SUPERNOVA |
637: | 6460 PRINT "THE "; s5$; " HAS BEEN INCINERATED BY A SUPERNOVA." |
638: | 6470 GOTO 6590 |
639: | 6480 REM -ABANDON(NO BASES) |
640: | 6490 PRINT "YOU HAVE BEEN CAPTURED BY THE KLINGONS. IF YOU STILL" |
641: | 6500 PRINT "HAD A STARBASE TO BE RETURNED TO , YOU WOULD HAVE BEEN" |
642: | 6510 PRINT "REPATRIATED AND GIVEN ANOTHER CHANCE. SINCE YOU HAVE" |
643: | 6520 PRINT "NO STARBASES, YOU WILL BE MERCILESSLY TORTURED TO DEATH!" |
644: | 6530 GOTO 6590 |
645: | 6540 REM - SELF-DESTRUCT |
646: | 6550 PRINT : PRINT "THE "; s5$; " IS NOW AN EXPANDING CLOUD" |
647: | 6560 PRINT "OF SUB-ATO MIC PARTICLES...": GOTO 6590 |
648: | 6570 REM -NOT REMATERIALIZED |
649: | 6580 PRINT "STARBASE WAS UNABLE TO RE-MATERIALIZE YOUR STARSHIP." |
650: | 6590 PRINT |
651: | 6600 IF LEFT$(s5$, 1) = "F" THEN s5$ = "" |
652: | 6610 IF LEFT$(s5$, 1) = "E" THEN s5$ = "FAERIE QUEENE" |
653: | 6620 a1 = 0 |
654: | 6630 IF r1 = 0 THEN 6750 |
655: | 6640 g3 = r4 / i3: b8 = (r1 + 2 * r2) / (i1 + 2 * i4) |
656: | 6650 a3 = g3 / b8 |
657: | 6660 IF a3 < 1 + .5 + RND(1) THEN 6730 |
658: | 6670 PRINT "AS A RESULT OF YOUR ACTIONS, A TREATY WITH THE KLINGON" |
659: | 6680 PRINT "EMPIRE HAS BEEN SIGNED. THE TERMS OF THE TREATY ARE" |
660: | 6690 IF a3 < 3 * RND(1) THEN 6720 |
661: | 6700 PRINT "FAVORABLE TO THE FEDERATION.": PRINT |
662: | 6710 PRINT "CONGRATULATIONS.": GOTO 6740 |
663: | 6720 PRINT "HIGHLY UNFAVORABLE TO THE FEDERATION.": GOTO 6740 |
664: | 6730 PRINT "THE FEDERATION WILL BE DESTROYED!" |
665: | 6740 GOSUB 12110: RETURN |
666: | 6750 PRINT "SINCE YOU TO OK THE LAST KLINGON WITH YOU, YOU ARE" |
667: | 6760 PRINT "A MARTYR AND A HERO. SOMEDAY MAYBE THEY'LL ERECT" |
668: | 6770 PRINT "A STATUE IN YOUR MEMORY. REST IN PEACE AND TRY NOT" |
669: | 6780 PRINT "TO THINK ABOUT PIGEONS!": g1 = 1: a1 = 0 |
670: | 6790 GOSUB 12110: RETURN |
671: | 6800 REM - HELP |
672: | 6810 IF c5$ <> "DOCKED" THEN 6840 |
673: | 6820 PRINT "ENSIGN CHEKOV- 'BUT CAPTAIN, WE'RE AL READ Y DOCKED!'" |
674: | 6830 RETURN |
675: | 6840 IF d4(9) = 0 THEN 6860 |
676: | 6850 PRINT "SUBSPACE RADIO DAMAGED...CANNOT TRANSMIT.": RETURN |
677: | 6860 IF r3 <> 0 THEN 6890 |
678: | 6870 PRINT "LT. UHURA- 'CAPTAIN, I'M NOT GETTING ANY RESPONSE"; |
679: | 6880 PRINT " FROM STARBASE!'": RETURN |
680: | 6890 n1 = n1 + 1: IF b6 = 0 THEN 6910 |
681: | 6900 GOTO 6970 |
682: | 6910 d1 = 1E+30 |
683: | 6920 FOR l = 1 TO r3: x = 10 * SQR((b2(l) - q1) ^ 2 + (b3(l) - q2) ^ 2) |
684: | 6930 IF x > d1 THEN 6950 |
685: | 6940 d1 = x: k = l |
686: | 6950 NEXT l |
687: | 6960 q1 = b2(k): q2 = b3(k): GOSUB 9500 |
688: | 6970 q$(s6, s7) = "." |
689: | 6980 PRINT |
690: | 6990 PRINT "STARBASE IN QUADRANT "; q1; "-"; q2; "RESPONDS --"; |
691: | 7000 PRINT " "; s5$; " DEMATERIALIZES." |
692: | 7010 p2 = (1 - .98 ^ d1) ^ .333333 |
693: | 7020 FOR l = 1 TO 3 |
694: | 7030 IF l = 1 THEN PRINT "1ST "; |
695: | 7040 IF l = 2 THEN PRINT "2ND "; |
696: | 7050 IF l = 3 THEN PRINT "3RD "; |
697: | 7060 PRINT "ATTEMPT TO RE-MATERIALIZE THE "; s5$; ". . . . ."; |
698: | 7070 IF RND(1) > p2 THEN 7100 |
699: | 7080 PRINT "FAILS.": NEXT l |
700: | 7090 f9 = 11: GOSUB 5940: RETURN |
701: | 7100 FOR l = 1 TO 5: i = b6 + INT(3 * RND(1)) - 1 |
702: | 7110 IF (i < 1) OR (i > 10) THEN 7150 |
703: | 7120 j = b7 + INT(3 * RND(1)) - 1 |
704: | 7130 IF (j < 1) OR (j > 10) THEN 7150 |
705: | 7140 IF q$(i, j) = "." THEN 7160 |
706: | 7150 NEXT l: PRINT "FAILS.": GOTO 7090 |
707: | 7160 PRINT "SUCCEEDS.": s6 = i: s7 = j: q$(i, j) = LEFT$(s5$, 1) |
708: | 7170 GOSUB 4510: PRINT "LT. UHURA- 'CAPTAIN, WE MADE IT!'": RETURN |
709: | 7180 REM -HITEM |
710: | 7190 p4 = 2: l5 = k3: n = 1 |
711: | 7200 FOR k = 1 TO l5 |
712: | 7210 IF h3(k) = 0 THEN 7470 |
713: | 7220 d6 = .9 + .01 * RND(1): h2 = h3(k) * d6 ^ k7(n) |
714: | 7230 p3 = k6(n) |
715: | 7240 p = ABS(p3): IF p4 * h2 < p THEN p = p4 * h2 |
716: | 7250 k6(n) = p3 - SGN(p3) * ABS(p) |
717: | 7260 x8 = k4(n): y8 = k5(n) |
718: | 7270 IF h2 > 4.99 THEN 7290 |
719: | 7280 PRINT "VERY SMALL HIT ON ": GOTO 7300 |
720: | 7290 PRINT fnr(h2); "UNIT HIT ON "; |
721: | 7300 m$ = q$(x8, y8) |
722: | 7310 IF m$ = "K" THEN PRINT "KLINGON AT "; |
723: | 7320 IF m$ = "C" THEN PRINT "COMMANDER AT "; |
724: | 7330 PRINT x8; "-"; y8 |
725: | 7340 IF k6(n) <> 0 THEN 7380 |
726: | 7350 a5 = x8: a6 = y8: t2$ = q$(x8, y8): GOSUB 4220 |
727: | 7360 IF r1 <> 0 THEN 7480 |
728: | 7370 f9 = 1: GOSUB 5940: GOTO 7480 |
729: | 7380 IF k6(n) < 0 THEN 7470 |
730: | 7390 IF RND(1) < .9 THEN 7470 |
731: | 7400 IF k6(n) > (.4 + .4 * RND(1)) * p3 THEN 7470 |
732: | 7410 PRINT |
733: | 7420 PRINT "***MR. SPOCK - 'CAPTAIN, THE VESSEL AT SECTOR "; |
734: | 7430 PRINT x8; "-"; y8 |
735: | 7440 PRINT " HAS JUST LOST ITS FIREPOWER.'" |
736: | 7450 PRINT |
737: | 7460 k6(n) = -k6(n) |
738: | 7470 n = n + 1 |
739: | 7480 NEXT k |
740: | 7490 RETURN |
741: | 7500 REM - IMPULSE |
742: | 7510 j3 = 0 |
743: | 7520 IF d4(7) <> 0 THEN 7770 |
744: | 7530 IF e1 <= 75 THEN 7580 |
745: | 7540 INPUT "ENTER COURSE AND DISTANCE "; d2, d1 |
746: | 7550 IF d2 < 0 THEN RETURN |
747: | 7560 p3 = 50 + 250 * d1 |
748: | 7570 IF p3 < e1 THEN 7660 |
749: | 7580 PRINT |
750: | 7590 PRINT "1ST OFFICER SPOCK- 'CAPTAIN, THE IMPULSE ENGINES" |
751: | 7600 PRINT "REQUIRE 50 UNITS OF ENERGY TO ENGAGE, PLUS 250 UNITS" |
752: | 7610 PRINT "PER "; |
753: | 7620 IF e1 > 75 THEN 7640 |
754: | 7630 PRINT "QUADRANT. THEY ARE, THEREFORE, USELESS NOW.'": RETURN |
755: | 7640 PRINT "QUADRANT. WE CAN GO, THEREFORE, A MAXIMUM OF "; |
756: | 7650 PRINT fnr(.004 * (e1 - 50) - .05); "QUADRANTS.'": RETURN |
757: | 7660 t1 = d1 / .4 |
758: | 7670 IF t1 < r5 THEN 7720 |
759: | 7680 PRINT "1ST OFFICER SPOCK- 'CAPTAIN, OUR SPEED UNDER IMPULSE" |
760: | 7690 PRINT "POWER IS ONLY 4 SECTORS PER STARDATE. ARE YOU SURE" |
761: | 7700 INPUT "WE DARE SPEND THE TIME' "; b$ |
762: | 7710 IF LEFT$(b$, 1) <> "Y" THEN RETURN |
763: | 7720 GOSUB 8000: j3 = 1 |
764: | 7730 IF a2 <> 0 THEN RETURN |
765: | 7740 e1 = e1 - p3 |
766: | 7750 IF e1 > 0 THEN RETURN |
767: | 7760 f9 = 4: GOSUB 5940: RETURN |
768: | 7770 PRINT "IMPULSE ENGINES DAMAGED.": RETURN |
769: | 7780 REM - LRSCAN |
770: | 7790 n$ = " # " |
771: | 7800 PRINT |
772: | 7810 IF d4(2) <> 0 THEN 7990 |
773: | 7820 PRINT "L.R. SCAN FOR QUADRANT "; q1; "-"; q2: PRINT |
774: | 7830 i = q1 - 1: j = q1 + 1: k = q2 - 1: l = q2 + 1 |
775: | 7840 FOR m = i TO j: FOR n = k TO l |
776: | 7850 IF (m <= 0) OR (m > 8) THEN 7910 |
777: | 7860 IF (n <= 0) OR (n > 8) THEN 7910 |
778: | 7870 IF d4(11) = 0 THEN s2(m, n) = 1 |
779: | 7880 IF g(m, n) >= 1000 THEN PRINT " ***"; |
780: | 7890 IF g(m, n) < 1000 THEN PRINT spc$(5 - LEN(STR$(g(m, n)))); g(m, n); |
781: | 7900 GOTO 7920 |
782: | 7910 PRINT n$; |
783: | 7920 NEXT n |
784: | 7930 PRINT |
785: | 7940 NEXT m |
786: | 7950 IF d4(11) = 0 THEN RETURN |
787: | 7960 PRINT |
788: | 7970 PRINT "***WARNING*** - COMPUTER DISABLED - SCAN NOT RECORDED." |
789: | 7980 RETURN |
790: | 7990 PRINT "LONG RANGE SENSORS DAMAGED.": RETURN |
791: | 8000 REM - MOVE |
792: | 8010 a5 = (15 - d2) * .523599 |
793: | 8020 d4 = -SIN(a5): d6 = COS(a5) |
794: | 8030 b8 = ABS(d4) |
795: | 8040 IF ABS(d6) > b8 THEN b8 = ABS(d6) |
796: | 8050 d4 = d4 / b8: d6 = d6 / b8: t5 = 0: t6 = 0 |
797: | 8060 IF d0 + t1 < f1(2) THEN 8090 |
798: | 8070 t5 = 1: c5$ = "RED": d1 = d1 * (f1(2) - d0) / t1 + .1 |
799: | 8080 t1 = f1(2) - d0 + .00001# |
800: | 8090 q$(s6, s7) = ".": x7 = s6: y7 = s7: h9 = INT(10 * d1 * b8 + .5) |
801: | 8100 IF h9 = 0 THEN 8200 |
802: | 8110 FOR l = 1 TO h9 |
803: | 8120 x7 = x7 + d4: x1 = INT(x7 + .5): y7 = y7 + d6: y1 = INT(y7 + .5) |
804: | 8130 IF (x1 < 1) OR (x1 > 10) THEN 8370 |
805: | 8140 IF (y1 < 1) OR (y1 > 10) THEN 8370 |
806: | 8150 IF q$(x1, y1) = "O" THEN 8180 |
807: | 8160 IF q$(x1, y1) <> "." THEN 8250 |
808: | 8170 NEXT l |
809: | 8180 d1 = .1 * SQR((s6 - x1) ^ 2 + (s7 - y1) ^ 2) |
810: | 8190 s6 = x1: s7 = y1 |
811: | 8200 f4 = s6: f5 = s7 |
812: | 8210 IF q$(x1, y1) <> "O" THEN 8730 |
813: | 8220 t2 = fna(1): t3 = fna(1) |
814: | 8230 q1 = fna(1): q2 = fna(1): s6 = fnb(1): s7 = fnb(1): PRINT |
815: | 8240 PRINT "*** SPACE PORTAL ENTERED ***": GOTO 8700 |
816: | 8250 t6 = 1: k = 50 * d1 / t1: d1 = .1 * SQR((s6 - x1) ^ 2 + (s7 - y1) ^ 2) |
817: | 8260 IF (q$(x1, y1) = "K") OR (q$(x1, y1) = "C") THEN 8360 |
818: | 8270 PRINT : PRINT s5$; " BLOCKED BY "; |
819: | 8280 IF q$(x1, y1) = "*" THEN PRINT "STAR AT "; |
820: | 8290 IF q$(x1, y1) = "B" THEN PRINT "STARBASE AT "; |
821: | 8300 PRINT " SECTOR "; x1; "-"; y1; "...." |
822: | 8310 PRINT "EMERGENCY STOP REQUIRED "; fnr(k); "UNITS OF ENERGY." |
823: | 8320 e1 = e1 - k |
824: | 8330 s6 = INT(x7 - d4 + .5): f4 = s6: s7 = INT(y7 - d6 + .5): f5 = s7 |
825: | 8340 IF e1 > 0 THEN 8730 |
826: | 8350 f9 = 4: GOSUB 5940: RETURN |
827: | 8360 s6 = x1: s7 = y1: GOSUB 11950: f4 = s6: f5 = s7: GOTO 8730 |
828: | 8370 IF k3 = 0 THEN 8430 |
829: | 8380 FOR l = 1 TO k3 |
830: | 8390 f3 = SQR((x1 - k4(l)) ^ 2 + (y1 - k5(l)) ^ 2) |
831: | 8400 k8(l) = .5 * (f3 + k7(l)): NEXT l |
832: | 8410 IF g(q1, q2) <> 1000 THEN GOSUB 1520 |
833: | 8420 IF a2 <> 0 THEN RETURN |
834: | 8430 x7 = 10 * (q1 - 1) + s6: y7 = 10 * (q2 - 1) + s7 |
835: | 8440 x1 = INT(x7 + 10 * d1 * b8 * d4 + .5) |
836: | 8450 y1 = INT(y7 + 10 * d1 * b8 * d6 + .5): l6 = 0 |
837: | 8460 l5 = 0 |
838: | 8470 IF x1 > 0 THEN 8490 |
839: | 8480 x1 = -x1 + 1: l5 = 1 |
840: | 8490 IF y1 > 0 THEN 8510 |
841: | 8500 y1 = -y1 + 1: l5 = 1 |
842: | 8510 IF x1 <= 80 THEN 8530 |
843: | 8520 x1 = 161 - x1: l5 = 1 |
844: | 8530 IF y1 <= 80 THEN 8550 |
845: | 8540 y1 = 161 - y1: l5 = 1 |
846: | 8550 IF l5 = 0 THEN 8570 |
847: | 8560 l6 = 1: GOTO 8460 |
848: | 8570 IF l6 = 0 THEN 8670 |
849: | 8580 PRINT : PRINT "*** MESSAGE FROM STARFLEET COMMAND.....STARDATE "; |
850: | 8590 PRINT fnr(d0): PRINT : PRINT "'PERMISSION TO CROSS GALACTIC "; |
851: | 8600 PRINT "PERIMETER IS HEREBY DENIED.'" |
852: | 8610 PRINT " 'SHUT DOWN ENGINES IMMMEDIATELY!'" |
853: | 8620 PRINT |
854: | 8630 PRINT "SCOTT HERE - 'ENGINES SHUT DOWN AT "; |
855: | 8640 z1 = INT((x1 + 9) / 10): z2 = INT((y1 + 9) / 10) |
856: | 8650 PRINT "QUADRANT "; z1; "-"; z2; ", "; |
857: | 8660 PRINT "SECTOR "; x1 - 10 * (z1 - 1); "-"; y1 - 10 * (z2 - 1); "'" |
858: | 8670 IF t5 <> 0 THEN RETURN |
859: | 8680 q1 = INT((x1 + 9) / 10): q2 = INT((y1 + 9) / 10) |
860: | 8690 s6 = x1 - 10 * (q1 - 1): s7 = y1 - 10 * (q2 - 1) |
861: | 8700 GOSUB 9830 |
862: | 8710 PRINT : PRINT "ENTERING THE "; g2$; " QUADRANT ("; q1; "-"; q2; ")" |
863: | 8720 q$(s6, s7) = LEFT$(s5$, 1): GOSUB 9500: RETURN |
864: | 8730 q$(s6, s7) = LEFT$(s5$, 1) |
865: | 8740 IF l6 = 1 THEN RETURN |
866: | 8750 IF k3 = 0 THEN 8820 |
867: | 8760 FOR l = 1 TO k3 |
868: | 8770 f3 = SQR((f4 - k4(l)) ^ 2 + (f5 - k5(l)) ^ 2) |
869: | 8780 k8(l) = .5 * (k7(l) + f3) |
870: | 8790 k7(l) = f3 |
871: | 8800 NEXT l |
872: | 8810 GOSUB 13880 |
873: | 8820 GOSUB 9450: RETURN |
874: | 8830 REM -MOVECOM |
875: | 8840 a = 1: b = 1 |
876: | 8850 FOR k = 1 TO k3 |
877: | 8860 c = k4(k): d = k5(k) |
878: | 8870 IF q$(c, d) = "C" THEN 8890 |
879: | 8880 NEXT k |
880: | 8890 n = 0: f = k6(k) + 100 * k3 |
881: | 8900 IF f > 1000 THEN n = INT(RND(1) * k7(k) + 1) |
882: | 8910 IF ((c5$ = "DOCKED") AND ((b4 <> q1) OR (b5 <> q2))) THEN n = -s8 |
883: | 8920 IF n = 0 THEN n = INT(((f + 200 * RND(1)) / 150) - 5) |
884: | 8930 IF n = 0 THEN RETURN |
885: | 8940 IF (n > 0) AND (k7(k) < 1.5) THEN RETURN |
886: | 8950 IF ABS(n) > s8 THEN n = SGN(n) * ABS(s8) |
887: | 8960 t = ABS(n): p = s6 - c: q = s7 - d |
888: | 8970 IF 2 * ABS(p) < ABS(q) THEN p = 0 |
889: | 8980 IF 2 * ABS(q) < ABS(p) THEN q = 0 |
890: | 8990 IF p <> 0 THEN p = SGN(p * n) |
891: | 9000 IF q <> 0 THEN q = SGN(q * n) |
892: | 9010 r = c: s = d: q$(c, d) = "." |
893: | 9020 FOR l2 = 1 TO t: l = r + p: m = s + q |
894: | 9030 IF (l > 0) AND (l <= 10) THEN 9050 |
895: | 9040 ON SGN(n) + 2 GOTO 9280, 9140, 9140 |
896: | 9050 IF (m > 0) AND (m <= 10) THEN 9070 |
897: | 9060 ON SGN(n) + 2 GOTO 9280, 9080, 9080 |
898: | 9070 IF q$(l, m) = "." THEN 9200 |
899: | 9080 IF (q = b) OR (p = 0) THEN 9140 |
900: | 9090 m = s + b |
901: | 9100 IF (m > 0) AND (m <= 10) THEN 9120 |
902: | 9110 ON SGN(n) + 2 GOTO 9280, 9130, 9130 |
903: | 9120 IF q$(l, m) = "." THEN 9200 |
904: | 9130 b = -b |
905: | 9140 IF (p = a) OR (q = 0) THEN 9210 |
906: | 9150 l = r + a |
907: | 9160 IF (l > 0) AND (l <= 10) THEN 9180 |
908: | 9170 ON SGN(n) + 2 GOTO 9280, 9190, 9190 |
909: | 9180 IF q$(l, m) = "." THEN 9200 |
910: | 9190 a = -a: GOTO 9210 |
911: | 9200 r = l: s = m |
912: | 9210 NEXT l2 |
913: | 9220 q$(r, s) = "C" |
914: | 9230 IF (r = c) AND (s = d) THEN RETURN |
915: | 9240 k4(k) = r: k5(k) = s: k7(k) = SQR((s6 - r) ^ 2 + (s7 - s) ^ 2) |
916: | 9250 k8(k) = k7(k): IF n > 0 THEN PRINT "***COMMANDER ADVANCES TO "; |
917: | 9260 IF n < 0 THEN PRINT "***COMMANDER RETREATS TO "; |
918: | 9270 PRINT " SECTOR "; r; "-"; s: GOSUB 13880: RETURN |
919: | 9280 i = q1 + INT((l + 9) / 10) - 1: j = q2 + INT((m + 9) / 10) - 1 |
920: | 9290 IF (i < 1) OR (i > 8) THEN 9440 |
921: | 9300 IF (j < 1) OR (j > 8) THEN 9440 |
922: | 9310 FOR l3 = 1 TO r2 |
923: | 9320 IF (c1(l3) = i) AND (c2(l3) = j) THEN 9440 |
924: | 9330 NEXT l3: PRINT "***COMMANDER ESCAPES TO "; |
925: | 9340 PRINT "QUADRANT "; i; "-"; j; " (AND REGAINS STRENGTH)" |
926: | 9350 k4(k) = k4(k3): k5(k) = k5(k3): k7(k) = k7(k3): k8(k) = k8(k3) |
927: | 9360 k6(k) = k6(k3): k3 = k3 - 1: c3 = 0 |
928: | 9370 IF c5$ <> "DOCKED" THEN GOSUB 9450 |
929: | 9380 GOSUB 13880 |
930: | 9390 g(q1, q2) = g(q1, q2) - 100: g(i, j) = g(i, j) + 100 |
931: | 9400 FOR l3 = 1 TO r2 |
932: | 9410 IF (c1(l3) = q1) AND (c2(l3) = q2) THEN 9430 |
933: | 9420 NEXT l3 |
934: | 9430 c1(l3) = i: c2(l3) = j: RETURN |
935: | 9440 a = -a: b = -b: GOTO 9210 |
936: | 9450 REM - NEWCOND |
937: | 9460 c5$ = "GREEN" |
938: | 9470 IF e1 < 1000 THEN c5$ = "YELLOW" |
939: | 9480 IF g(q1, q2) > 99 THEN c5$ = "RED" |
940: | 9490 RETURN |
941: | 9500 REM - NEW QUAD |
942: | 9510 j4 = 1: b6 = 0: b7 = 0: k3 = 0: c3 = 0 |
943: | 9520 u = g(q1, q2) |
944: | 9530 IF u > 999 THEN 9810 |
945: | 9540 k3 = INT(.01 * u): FOR a = 1 TO 10: FOR b = 1 TO 10: q$(a, b) = ".": NEXT b: NEXT a |
946: | 9550 q$(s6, s7) = LEFT$(s5$, 1): u = g(q1, q2): IF u < 100 THEN 9670 |
947: | 9560 u = u - 100 * k3: FOR a = 1 TO k3 |
948: | 9570 s = fnb(1): k4(a) = s: t = fnb(1): k5(a) = t |
949: | 9580 IF q$(s, t) <> "." THEN 9570 |
950: | 9590 q$(s, t) = "K": k7(a) = SQR((s6 - s) ^ 2 + (s7 - t) ^ 2): k8(a) = k7(a) |
951: | 9600 k6(a) = RND(1) * 150 + 325: NEXT a |
952: | 9610 IF r2 = 0 THEN 9660 |
953: | 9620 FOR a = 1 TO r2 |
954: | 9630 IF (c1(a) = q1) AND (c2(a) = q2) THEN 9650 |
955: | 9640 NEXT a: GOTO 9660 |
956: | 9650 q$(s, t) = "C": k6(k3) = 1000 + 400 * RND(1): c3 = 1 |
957: | 9660 GOSUB 13880 |
958: | 9670 IF u < 10 THEN 9710 |
959: | 9680 u = u - 10 |
960: | 9690 b6 = fnb(1): b7 = fnb(1): IF q$(b6, b7) <> "." THEN 9690 |
961: | 9700 q$(b6, b7) = "B" |
962: | 9710 GOSUB 9450: IF u < 1 THEN RETURN |
963: | 9720 FOR a = 1 TO u |
964: | 9730 s = fnb(1): t = fnb(1): IF q$(s, t) <> "." THEN 9730 |
965: | 9740 q$(s, t) = "*": NEXT a |
966: | 9750 IF (t2 <> q1) OR (t3 <> q2) THEN RETURN |
967: | 9760 s = fnb(1): t = fnb(1): IF q$(s, t) <> "." THEN 9760 |
968: | 9770 q$(s, t) = "O": PRINT |
969: | 9780 PRINT "MR. SPOCK - 'CAPTAIN, THE SHORT-RANGE SENSORS DETECT A" |
970: | 9790 PRINT "SPACE WARP SOMEWHERE IN THIS QUADRANT.'" |
971: | 9800 RETURN |
972: | 9810 FOR a = 1 TO 10: FOR b = 1 TO 10: q$(a, b) = ".": NEXT b: NEXT a |
973: | 9820 q$(s6, s7) = LEFT$(s5$, 1): RETURN |
974: | 9830 g4$ = "III": l = 2: IF q2 >= 5 THEN 9850 |
975: | 9840 l = 1 |
976: | 9850 g2$ = g1$(2 * (q1 - 1) + l): l = q2 |
977: | 9860 IF l <= 4 THEN 9880 |
978: | 9870 l = q2 - 4 |
979: | 9880 g3$ = "IV": IF l = 4 THEN 9900 |
980: | 9890 g3$ = LEFT$(g4$, l) |
981: | 9900 g2$ = g2$ + " " + g3$: RETURN |
982: | 9910 REM - NOVA |
983: | 9920 IF RND(1) > .1 THEN 9940 |
984: | 9930 GOSUB 13410: RETURN |
985: | 9940 q$(a5, a6) = ".": PRINT "***STAR AT SECTOR "; a5; "-"; a6; "NOVAS." |
986: | 9950 g(q1, q2) = g(q1, q2) - 1: s1 = s1 + 1 |
987: | 9960 b9 = 1: t6 = 1: t7 = 1: k = 0: x1 = 0: y1 = 0 |
988: | 9970 h4(b9, 1) = a5: h4(b9, 2) = a6 |
989: | 9980 FOR m = b9 TO t6: FOR q = 1 TO 3: FOR j = 1 TO 3 |
990: | 9990 IF j * q = 4 THEN 10430 |
991: | 10000 j5 = h4(m, 1) + q - 2: j6 = h4(m, 2) + j - 2 |
992: | 10010 IF (j5 < 1) OR (j5 > 10) THEN 10430 |
993: | 10020 IF (j6 < 1) OR (j6 > 10) THEN 10430 |
994: | 10030 IF q$(j5, j6) = "." THEN 10430 |
995: | 10040 IF q$(j5, j6) = "O" THEN 10430 |
996: | 10050 IF q$(j5, j6) <> "*" THEN 10110 |
997: | 10060 IF RND(1) >= .1 THEN 10080 |
998: | 10070 x2 = j5: y2 = j6: GOSUB 13410: RETURN |
999: | 10080 t7 = t7 + 1: h4(t7, 1) = j5: h4(t7, 2) = j6: g(q1, q2) = g(q1, q2) - 1 |
1000: | 10090 s1 = s1 + 1: PRINT "***STAR AT SECTOR "; j5; "-"; j6; "NOVAS." |
1001: | 10100 GOTO 10420 |
1002: | 10110 IF q$(j5, j6) <> "B" THEN 10180 |
1003: | 10120 g(q1, q2) = g(q1, q2) - 10: FOR v = 1 TO r3 |
1004: | 10130 IF (b2(v) <> q1) OR (b3(v) <> q2) THEN 10150 |
1005: | 10140 b2(v) = b2(r3): b3(v) = b3(r3) |
1006: | 10150 NEXT v: r3 = r3 - 1: b6 = 0: b7 = 0: b1 = b1 + 1: GOSUB 9450 |
1007: | 10160 PRINT "***STARBASE AT SECTOR "; j5; "-"; j6; "DESTROYED." |
1008: | 10170 GOTO 10420 |
1009: | 10180 IF (s6 <> j5) OR (s7 <> j6) THEN 10280 |
1010: | 10190 PRINT "***STARSHIP BUFFETED BY NOVA.": IF s4 <> 0 THEN 10210 |
1011: | 10200 e1 = e1 - 1000: GOTO 10240 |
1012: | 10210 IF s3 >= 1000 THEN 10260 |
1013: | 10220 d6 = 1000 - s3: e1 = e1 - d6: GOSUB 9450: s3 = 0: s4 = 0 |
1014: | 10230 PRINT "***STARSHIP SHIELDS KNOCKED OUT.": d4(8) = .005 * d5 * RND(1) * d6 |
1015: | 10240 IF e1 > 0 THEN 10270 |
1016: | 10250 f9 = 7: GOSUB 5940: RETURN |
1017: | 10260 s3 = s3 - 1000 |
1018: | 10270 x1 = x1 + s6 - h4(m, 1): y1 = y1 + s7 - h4(m, 2): k = k + 1: GOTO 10430 |
1019: | 10280 IF q$(j5, j6) <> "C" THEN 10410 |
1020: | 10290 FOR v = 1 TO k3 |
1021: | 10300 IF (k4(v) = j5) AND (k5(v) = j6) THEN 10320 |
1022: | 10310 NEXT v |
1023: | 10320 k6(v) = k6(v) - 800: IF k6(v) <= 0 THEN 10410 |
1024: | 10330 n5 = j5 + j5 - h4(m, 1): n6 = j6 + j6 - h4(m, 2) |
1025: | 10340 PRINT "***COMMANDER AT SECTOR "; j5; "-"; j6; "DAMAGED"; |
1026: | 10350 IF (n5 < 1) OR (n5 > 10) OR (n6 < 1) OR (n6 > 10) THEN 10400 |
1027: | 10360 PRINT " AND BUFFETED TO SECTOR "; n5; "-"; n6 |
1028: | 10370 q$(n5, n6) = "C": k4(v) = n5: k5(v) = n6 |
1029: | 10380 k7(v) = SQR((s6 - n5) ^ 2 + (s7 - n6) ^ 2): k8(v) = k7(v) |
1030: | 10390 q$(j5, j6) = "." |
1031: | 10400 PRINT : GOTO 10430 |
1032: | 10410 a5 = j5: a6 = j6: t2$ = q$(j5, j6): GOSUB 4220: GOTO 10430 |
1033: | 10420 PRINT : q$(j5, j6) = "." |
1034: | 10430 NEXT j: NEXT q: NEXT m |
1035: | 10440 IF t6 = t7 THEN 10460 |
1036: | 10450 b9 = t6 + 1: t6 = t7: GOTO 9980 |
1037: | 10460 IF k = 0 THEN RETURN |
1038: | 10470 d1 = k * .1 |
1039: | 10480 IF x1 <> 0 THEN x1 = SGN(x1) |
1040: | 10490 IF y1 <> 0 THEN y1 = SGN(y1) |
1041: | 10500 i = 3 * (x1 + 1) + y1 + 2 |
1042: | 10510 d2 = c5(i) |
1043: | 10520 IF d2 = 0 THEN d1 = 0 |
1044: | 10530 IF d1 = 0 THEN RETURN |
1045: | 10540 PRINT : PRINT " FORCE OF NOVA DISPLACES STARSHIP." |
1046: | 10550 GOSUB 8000: RETURN |
1047: | 10560 REM -PHASERS |
1048: | 10570 p = 2: j3 = 1 |
1049: | 10580 IF c5$ <> "DOCKED" THEN 10600 |
1050: | 10590 PRINT "PHASERS CAN'T BE FIRED THRU BASE SHIELDS.": GOTO 10680 |
1051: | 10600 IF d4(3) = 0 THEN 10620 |
1052: | 10610 PRINT "PHASER BANKS DAMAGED.": GOTO 10680 |
1053: | 10620 IF s4 = 0 THEN 10640 |
1054: | 10630 PRINT "SHIELDS MUST BE DOWN TO FIRE PHASERS.": GOTO 10680 |
1055: | 10640 IF k3 > 0 THEN 10690 |
1056: | 10650 PRINT |
1057: | 10660 PRINT "MR. SPOCK - 'CAPTAIN, THE SHORT-RANGE SENSORS" |
1058: | 10670 PRINT " DETECT NO KLINGONS IN THIS QUADRANT.'" |
1059: | 10680 j3 = 0: RETURN |
1060: | 10690 PRINT "PHASERS LOCKED ON TARGET. ENERGY AVAILABLE="; |
1061: | 10700 PRINT .01 * INT(100 * e1) |
1062: | 10710 INPUT "UNITS TO FIRE "; p1: IF p1 < e1 THEN 10730 |
1063: | 10720 PRINT "ENERGY AVAILABLE ="; : GOTO 10700 |
1064: | 10730 IF p1 > 0 THEN 10750 |
1065: | 10740 j3 = 0: RETURN |
1066: | 10750 e1 = e1 - p1 |
1067: | 10760 IF d4(11) = 0 THEN 10790 |
1068: | 10770 p1 = p1 * (RND(1) * .5 + .5) |
1069: | 10780 PRINT : PRINT "COMPUTER MALFUNCTION HAMPERS PHASER ACCURACY.": PRINT |
1070: | 10790 e = p1: IF k3 = 0 THEN 10960 |
1071: | 10800 e = 0: t5 = (k3 * (k3 + 1)) / 2 |
1072: | 10810 FOR i = 1 TO k3: h3(i) = ((k3 + 1 - i) / t5) * p1 |
1073: | 10820 h5(i) = ABS(k6(i)) / (p * .9 ^ k7(i)) |
1074: | 10830 IF h3(i) <= h5(i) THEN 10850 |
1075: | 10840 e = e + (h3(i) - h5(i)): h3(i) = h5(i) |
1076: | 10850 NEXT i |
1077: | 10860 IF e = 0 THEN 10930 |
1078: | 10870 FOR i = 1 TO k3: r7 = h5(i) - h3(i) |
1079: | 10880 IF r7 <= 0 THEN 10910 |
1080: | 10890 IF r7 >= e THEN 10920 |
1081: | 10900 h3(i) = h5(i): e = e - r7 |
1082: | 10910 NEXT i: GOTO 10930 |
1083: | 10920 h3(i) = h3(i) + e: e = 0 |
1084: | 10930 GOSUB 7180 |
1085: | 10940 IF (e <> 0) AND (a2 = 0) THEN 10960 |
1086: | 10950 j3 = 1: RETURN |
1087: | 10960 PRINT fnr(e); "EXPENDED ON EMPTY SPACE.": j3 = 1: RETURN |
1088: | 10970 REM - PHOTO NS |
1089: | 10980 j3 = 1: IF d4(4) = 0 THEN 11000 |
1090: | 10990 PRINT "PHOTON TUBES DAMAGED.": GOTO 11040 |
1091: | 11000 IF t4 <> 0 THEN 11020 |
1092: | 11010 PRINT "NO TORPEDOS LEFT.": GOTO 11040 |
1093: | 11020 INPUT "TORPEDO COURSE "; c6 |
1094: | 11030 IF c6 >= 0 THEN 11050 |
1095: | 11040 j3 = 0: RETURN |
1096: | 11050 INPUT "BURST OF 3 "; b$: n = 1 |
1097: | 11060 IF LEFT$(b$, 1) = "N" THEN 11150 |
1098: | 11070 IF LEFT$(b$, 1) <> "Y" THEN 11050 |
1099: | 11080 IF t4 > 2 THEN 11100 |
1100: | 11090 PRINT "NO BURST. ONLY "; t4; "TORPEDOS LEFT.": GOTO 11040 |
1101: | 11100 INPUT "SPREAD ANGLE (3 - 30 DEG) "; g2 |
1102: | 11110 IF g2 < 0 THEN 11040 |
1103: | 11120 IF (g2 < 3) OR (g2 > 30) THEN 11100 |
1104: | 11130 g2 = fnd(g2) |
1105: | 11140 n = 3 |
1106: | 11150 REM - CONTINUE |
1107: | 11160 FOR z6 = 1 TO n |
1108: | 11170 IF c5$ <> "DOCKED" THEN t4 = t4 - 1 |
1109: | 11180 z7 = z6: r = RND(1) |
1110: | 11190 r = (r + RND(1)) * .5 - .5 |
1111: | 11200 IF (r >= -.4) AND (r <= .4) THEN 11270 |
1112: | 11210 r = (RND(1) + 1.2) * r: IF n = 3 THEN 11230 |
1113: | 11220 PRINT "***TORPEDO MISFIRES...": GOTO 11240 |
1114: | 11230 PRINT "***TORPEDO NUMBER "; z6; "MISFIRES..." |
1115: | 11240 IF RND(1) > .2 THEN 11270 |
1116: | 11250 PRINT "***PHOTO N TUBES DAMAGED BY MISFIRE." |
1117: | 11260 d4(4) = d5 * (1 + 2 * RND(1)): GOTO 11930 |
1118: | 11270 IF (s4 <> 0) OR (c5$ = "DOCKED") THEN r = r + .001# * s3 * r |
1119: | 11280 a3 = c6 + .25 * r: IF n = 1 THEN 11310 |
1120: | 11290 a8 = (15 - a3 + (2 - z6) * g2) * .523599: PRINT |
1121: | 11300 PRINT "TRACK FOR TORPEDO NUMBER "; z7; "--": GOTO 11320 |
1122: | 11310 PRINT : PRINT "TORPEDO TRACK --": a8 = (15 - a3) * .523599 |
1123: | 11320 x4 = -SIN(a8): y4 = COS(a8): b8 = ABS(x4) |
1124: | 11330 IF ABS(y4) > ABS(x4) THEN b8 = ABS(y4) |
1125: | 11340 x4 = x4 / b8: y4 = y4 / b8: x5 = s6: y5 = s7 |
1126: | 11350 FOR l9 = 1 TO 15: x5 = x5 + x4: a5 = INT(x5 + .5) |
1127: | 11360 IF (a5 < 1) OR (a5 > 10) THEN 11910 |
1128: | 11370 y5 = y5 + y4: a6 = INT(y5 + .5) |
1129: | 11380 IF (a6 < 1) OR (a6 > 10) THEN 11910 |
1130: | 11390 IF (l9 = 5) OR (l9 = 9) THEN PRINT |
1131: | 11400 PRINT fnr(x5); "-"; fnr(y5); ", "; |
1132: | 11410 IF q$(a5, a6) <> "." THEN 11430 |
1133: | 11420 GOTO 11900 |
1134: | 11430 PRINT : IF q$(a5, a6) = "K" THEN 11480 |
1135: | 11440 IF q$(a5, a6) <> "C" THEN 11700 |
1136: | 11450 IF RND(1) > .1 THEN 11480 |
1137: | 11460 PRINT "***COMMANDER AT SECTOR "; a5; "-"; a6; "USES ANTI-PHOTON "; |
1138: | 11470 PRINT " DEVICE!": PRINT " TORPEDO NEUTRALIZED.": GOTO 11920 |
1139: | 11480 FOR v = 1 TO k3 |
1140: | 11490 IF (a5 = k4(v)) AND (a6 = k5(v)) THEN 11510 |
1141: | 11500 NEXT v |
1142: | 11510 k = k6(v): w3 = 200 + 800 * RND(1) |
1143: | 11520 IF ABS(k) < w3 THEN w3 = ABS(k) |
1144: | 11530 k6(v) = k - SGN(k) * ABS(w3): IF k6(v) <> 0 THEN 11550 |
1145: | 11540 t2$ = q$(a5, a6): GOSUB 4220: GOTO 11920 |
1146: | 11550 IF q$(a5, a6) = "K" THEN PRINT "***KLINGON AT "; |
1147: | 11560 IF q$(a5, a6) = "C" THEN PRINT "***COMMANDER AT "; |
1148: | 11570 PRINT a5; "-"; a6; |
1149: | 11580 a7 = a8 + 2.5 * (RND(1) - .5) |
1150: | 11590 w3 = ABS(-SIN(a7)): IF ABS(COS(a7)) > w3 THEN w3 = ABS(COS(a7)) |
1151: | 11600 x7 = -SIN(a7) / w3: y7 = COS(a7) / w3 |
1152: | 11610 p = INT(a5 + x7 + .5): q = INT(a6 + y7 + .5) |
1153: | 11620 IF (p < 1) OR (p > 10) OR (q < 1) OR (q > 10) THEN 11690 |
1154: | 11630 IF q$(p, q) <> "." THEN 11690 |
1155: | 11640 q$(p, q) = q$(a5, a6): q$(a5, a6) = ".": PRINT "DAMAGED--" |
1156: | 11650 PRINT " DISPLACED BY BLAST TO SECTOR "; p; "-"; q |
1157: | 11660 k4(v) = p: k5(v) = q: k7(v) = SQR((s6 - p) ^ 2 + (s7 - q) ^ 2) |
1158: | 11670 k8(v) = k7(v) |
1159: | 11680 GOSUB 13880: GOTO 11920 |
1160: | 11690 PRINT "DAMAGED, BUT NOT DESTROYED.": GOTO 11920 |
1161: | 11700 IF q$(a5, a6) <> "B" THEN 11780 |
1162: | 11710 PRINT "***STARBASE DESTROYED...CONGRATULATIONS...YOU TURKEY!" |
1163: | 11720 IF s2(q1, q2) < 0 THEN s2(q1, q2) = 0 |
1164: | 11730 FOR w = 1 TO r3 |
1165: | 11740 IF (b2(w) <> q1) OR (b3(w) <> q2) THEN 11760 |
1166: | 11750 b2(w) = b2(r3): b3(w) = b3(r3) |
1167: | 11760 NEXT w: q$(a5, a6) = ".": r3 = r3 - 1: b6 = 0: b7 = 0 |
1168: | 11770 g(q1, q2) = g(q1, q2) - 10: b1 = b1 + 1: GOSUB 9450: GOTO 11920 |
1169: | 11780 IF q$(a5, a6) <> "*" THEN 11860 |
1170: | 11790 IF RND(1) > .15 THEN 11820 |
1171: | 11800 PRINT "***STAR AT SECTOR "; a5; "-"; a6; "UNAFFECTED BY PHOTON BLAST" |
1172: | 11810 GOTO 11920 |
1173: | 11820 x2 = a5: y2 = a6: GOSUB 9910: a5 = x2: a6 = y2 |
1174: | 11830 IF g(q1, q2) = 1000 THEN RETURN |
1175: | 11840 IF a2 <> 0 THEN RETURN |
1176: | 11850 GOTO 11920 |
1177: | 11860 PRINT : PRINT "AAAAAIIIIIIIEEEEEEEAAAAAAAUUUUUUGGGGGGGHHHHHHHHHH!!!" |
1178: | 11870 PRINT " HACK! HACK! COUGH! *CHOKE!*" |
1179: | 11880 PRINT : PRINT "MR. SPOCK- 'FASCINATING!'": q$(a5, a6) = "." |
1180: | 11890 t2 = 0: t3 = 0: GOTO 11920 |
1181: | 11900 NEXT l9 |
1182: | 11910 PRINT : PRINT "TORPEDO MISSED!" |
1183: | 11920 NEXT z6 |
1184: | 11930 IF r1 <> 0 THEN RETURN |
1185: | 11940 f9 = 1: GOSUB 5940: RETURN |
1186: | 11950 REM - RAM |
1187: | 11960 PRINT : PRINT "*** RED ALERT!! RED ALERT!! ***": PRINT |
1188: | 11970 PRINT "*** COLLISION IMMINENT!!": PRINT |
1189: | 11980 PRINT "*** "; s5$; " RAMS "; : w7 = 1: IF q$(s6, s7) = "C" THEN w7 = 2 |
1190: | 11990 IF w7 = 1 THEN PRINT "KLINGON AT "; |
1191: | 12000 IF w7 = 2 THEN PRINT "COMMANDER AT "; |
1192: | 12010 PRINT "SECTOR "; s6; "-"; s7: a5 = s6: a6 = s7: t2$ = q$(s6, s7) |
1193: | 12020 GOSUB 4220: PRINT "***"; s5$; " HEAVILY DAMAGED." |
1194: | 12030 k = INT(5 + RND(1) * 20): PRINT "***SICKBAY REPORTS "; k; "CASUALTIES!" |
1195: | 12040 c4 = c4 + k: FOR l = 1 TO 12: i = RND(1) |
1196: | 12050 j = (3.5 * w7 * (RND(1) + i) + 1) * d5 |
1197: | 12060 IF l = 6 THEN j = j / 3 |
1198: | 12070 d4(l) = d4(l) + t1 + j: NEXT l: d4(6) = d4(6) - 3 |
1199: | 12080 IF d4(6) < 0 THEN d4(6) = 0 |
1200: | 12090 s4 = 0: IF r1 <> 0 THEN RETURN |
1201: | 12100 f9 = 1: GOSUB 5940: RETURN |
1202: | 12110 REM - SCORE |
1203: | 12120 p = d0 - j2: IF (p <> 0) AND (r1 = 0) THEN 12140 |
1204: | 12130 IF p < 5 THEN p = 5 |
1205: | 12140 n = (k2 + k1) / p: k = INT(500 * n + .5): l = 0 |
1206: | 12150 IF g1 <> 0 THEN l = 100 * s8 |
1207: | 12160 i = 0 |
1208: | 12170 IF LEFT$(s5$, 1) = "E" THEN m = 0 |
1209: | 12180 IF LEFT$(s5$, 1) = "F" THEN m = 1 |
1210: | 12190 IF LEFT$(s5$, 1) = "" THEN m = 2 |
1211: | 12200 IF a1 = 0 THEN i = 200 |
1212: | 12210 j = 10 * k1 + 50 * k2 + k + l - i - 100 * b1 - 100 * m - 35 * n1 - 3 * s1 - c4 |
1213: | 12220 PRINT : IF j <> 0 THEN 12240 |
1214: | 12230 PRINT "AS YET, YOU HAVE NO SCORE.": RETURN |
1215: | 12240 PRINT "YOUR SCORE --": PRINT : IF k1 = 0 THEN 12260 |
1216: | 12250 PRINT k1; TAB(5); "ORDINARY KLINGON(S) DESTROYED"; TAB(36); 10 * k1 |
1217: | 12260 IF k2 = 0 THEN 12280 |
1218: | 12270 PRINT k2; TAB(5); "KLINGON COMMANDER(S) DESTROYED"; TAB(36); 50 * k2 |
1219: | 12280 IF k = 0 THEN 12310 |
1220: | 12290 PRINT fnr(n); TAB(5); "KLINGONS PER STARDATE, AVERAGE"; |
1221: | 12300 PRINT TAB(36); k |
1222: | 12310 IF s1 = 0 THEN 12330 |
1223: | 12320 PRINT s1; TAB(5); "STAR(S) DESTROYED"; TAB(36); -3 * s1 |
1224: | 12330 IF b1 = 0 THEN 12350 |
1225: | 12340 PRINT b1; TAB(5); "STARBASES DESTROYED"; TAB(36); -100 * b1 |
1226: | 12350 IF n1 = 0 THEN 12370 |
1227: | 12360 PRINT n1; TAB(5); "SOS CALL(S) TO A STARBASE"; TAB(36); -35 * n1 |
1228: | 12370 IF c4 = 0 THEN 12390 |
1229: | 12380 PRINT c4; TAB(5); "CASUALTIES INCURRED"; TAB(36); -c4 |
1230: | 12390 IF m = 0 THEN 12410 |
1231: | 12400 PRINT m; TAB(5); "SHIP(S) LOST OR DESTROYED"; TAB(36); -100 * m |
1232: | 12410 IF a1 <> 0 THEN 12430 |
1233: | 12420 PRINT "PENALTY FOR GETTING YOURSELF KILLED"; TAB(36); -200 |
1234: | 12430 IF g1 = 0 THEN 12450 |
1235: | 12440 PRINT TAB(5); "BONUS FOR WINNING "; s$(s8); " GAME"; TAB(36); l |
1236: | 12450 PRINT TAB(5); "-------------------------------------" |
1237: | 12460 PRINT TAB(28); "TOTAL"; TAB(36); j; "**": RETURN |
1238: | 12470 REM -SETUP |
1239: | 12480 a2 = 0: g1 = 0: GOSUB 3110: s5$ = "ENTERPRISE" |
1240: | 12490 i7 = 5000: e1 = i7: i8 = 2500: s3 = i8: s4 = 0: s9 = s4: j1 = 4: l1 = j1 |
1241: | 12500 q1 = fna(1): q2 = fna(1): s6 = fnb(1): s7 = fnb(1): i9 = 10: t4 = i9 |
1242: | 12510 w1 = 5: w2 = 25: FOR i = 1 TO 12: d4(i) = 0: NEXT |
1243: | 12520 j2 = 100 * INT(31 * RND(1) + 20): d0 = j2: k1 = 0: k2 = 0: n1 = 0: n2 = 0: r6 = 0: c4 = 0 |
1244: | 12530 a1 = 1: d3 = .25: FOR i = 1 TO 8: FOR j = 1 TO 8: s2(i, j) = 0: NEXT j: NEXT i |
1245: | 12540 f1(1) = d0 - .5 * i5 * LOG(RND(1)): f1(5) = 1e+30 |
1246: | 12550 f1(2) = d0 - 1.5 * (i5 / r2) * LOG(RND(1)): i6 = 0 |
1247: | 12560 f1(3) = d0 - .3 * i5 * LOG(RND(1)): f1(4) = d0 - .3 * i5 * LOG(RND(1)) |
1248: | 12570 FOR i = 1 TO 8: FOR j = 1 TO 8: k = INT(RND(1) * 9 + 1): i6 = i6 + k |
1249: | 12580 g(i, j) = k: NEXT j: NEXT i: s1 = 0 |
1250: | 12590 FOR i = 1 TO i2 |
1251: | 12600 x = INT(RND(1) * 6 + 2): y = INT(RND(1) * 6 + 2) |
1252: | 12610 IF g(x, y) >= 10 THEN 12600 |
1253: | 12620 IF i < 2 THEN 12660 |
1254: | 12630 k = i - 1: FOR j = 1 TO k: d1 = SQR((b2(j) - x) ^ 2 + (b3(j) - y) ^ 2) |
1255: | 12640 IF d1 < 2 THEN 12600 |
1256: | 12650 NEXT j |
1257: | 12660 b2(i) = x: b3(i) = y: s2(x, y) = -1: g(x, y) = g(x, y) + 10: NEXT i |
1258: | 12670 b1 = 0: k = i1 - i4: l = INT(.25 * s8 * (9 - l2) + 1) |
1259: | 12680 m = INT((1 - RND(1) ^ 2) * l): IF m > k THEN m = k |
1260: | 12690 n = 100 * m |
1261: | 12700 x = fna(1): y = fna(1): IF g(x, y) + n > 999 THEN 12700 |
1262: | 12710 g(x, y) = g(x, y) + n: k = k - m: IF k <> 0 THEN 12680 |
1263: | 12720 FOR i = 1 TO i4 |
1264: | 12730 x = fna(1): y = fna(1): IF (g(x, y) < 99) AND (RND(1) < .75) THEN 12730 |
1265: | 12740 IF g(x, y) > 899 THEN 12730 |
1266: | 12750 IF i = 1 THEN 12780 |
1267: | 12760 m = i - 1: FOR j = 1 TO m: IF (c1(j) = x) AND (c2(j) = y) THEN 12730 |
1268: | 12770 NEXT j |
1269: | 12780 g(x, y) = g(x, y) + 100: c1(i) = x: c2(i) = y: NEXT i |
1270: | 12790 i = INT(d0): PRINT : s0 = 0 |
1271: | 12800 t2 = fna(1): t3 = fna(1): IF g(t2, t3) < 100 THEN 12800 |
1272: | 12810 IF s8 <> 1 THEN 12940 |
1273: | 12820 PRINT "IT IS STARDATE "; i; "...THE ORGANIAN PEACE TREATY BETWEEN" |
1274: | 12830 PRINT "THE UNITED FEDERATION OF PLANETS AND THE KLINGON EMPIRE" |
1275: | 12840 PRINT "HAS COLLAPSED AND THE FEDERATION IS BEING ATTACKED BY A" |
1276: | 12850 PRINT "DEADLY KLINGON INVASION FLEET. AS CAPTAIN OF THE STARSHIP" |
1277: | 12870 PRINT "U.S.S. ENTERPRISE, IT IS YOUR MISSION TO SEEK OUT AND" |
1278: | 12880 PRINT "DESTROY THIS INVASION FORCE OF "; i1; "BATTLE CRUISERS." |
1279: | 12890 PRINT : PRINT "YOU HAVE AN INITIAL ALLOTMENT OF "; INT(i5); |
1280: | 12900 PRINT "STARDATES": PRINT "TO COMPLETE YOUR MISSION." |
1281: | 12910 PRINT "AS THE MISSION PROCEEDS, YOU MAY BE GIVEN MORE TIME." |
1282: | 12920 PRINT : PRINT "YOU WILL HAVE "; i2; "SUPPORTING STARBASE(S).": PRINT |
1283: | 12930 GOTO 13020 |
1284: | 12940 PRINT "STARDATE.............."; i |
1285: | 12950 PRINT "NUMBER OF KLINGONS...."; i1 |
1286: | 12960 PRINT "NUMBER OF STARDATES..."; INT(i5) |
1287: | 12970 PRINT "NUMBER OF STARBASES..."; i2 |
1288: | 12980 PRINT "STARBASE LOCATIONS...."; |
1289: | 12990 FOR i = 1 TO i2: PRINT b2(i); "-"; b3(i); |
1290: | 13000 IF i <> i2 THEN PRINT ", "; |
1291: | 13010 NEXT i: PRINT : PRINT |
1292: | 13020 GOSUB 9830 |
1293: | 13030 PRINT "THE "; s5$; " IS CURRENTLY IN THE "; g2$; " QUADRANT." |
1294: | 13040 GOSUB 9500: RETURN |
1295: | 13050 REM - SETWARP |
1296: | 13060 INPUT "WARP FACTOR "; k |
1297: | 13070 PRINT |
1298: | 13080 IF k < 1 THEN 13220 |
1299: | 13090 IF k > 10 THEN 13230 |
1300: | 13100 j = w1: w1 = k: w2 = w1 * w1 |
1301: | 13110 IF (w1 <= j) OR (w1 <= 6) THEN 13140 |
1302: | 13120 IF w1 <= 8 THEN 13150 |
1303: | 13130 IF w1 > 8 THEN 13170 |
1304: | 13140 PRINT "ENSIGN CHEKOV - 'WARP FACTOR "; w1; "CAPTAIN'": RETURN |
1305: | 13150 PRINT "ENGINEER SCOTT - 'AYE, BUT OUR MAXIMUM SAFE SPEED"; |
1306: | 13160 PRINT " IS WARP 6.'": RETURN |
1307: | 13170 IF w1 = 10 THEN 13200 |
1308: | 13180 PRINT "ENGINEER SCOTT-'AYE, CAPTAIN, BUT OUR ENGINES MAY NOT "; |
1309: | 13190 PRINT "TAKE IT.'": RETURN |
1310: | 13200 PRINT "ENGINEER SCOTT-'AYE, CAPTAIN, WE'LL GIVE IT A TRY.": RETURN |
1311: | 13220 PRINT "ENSIGN CHEKOV-'WE CAN'T GO BELOW WARP 1, CAPTAIN.'": RETURN |
1312: | 13230 PRINT "ENSIGN CHEKOV-'OUR TO P SPEED IS WARP 10, CAPTAIN.'" |
1313: | 13240 RETURN |
1314: | 13250 REM - SHIELDS |
1315: | 13260 j3 = 0: IF d4(8) <> 0 THEN 13380 |
1316: | 13270 IF s4 <> 0 THEN 13310 |
1317: | 13280 INPUT "SHIELDS ARE DOWN. DO YOU WANT THEM UP "; b$ |
1318: | 13290 IF LEFT$(b$, 1) = "Y" THEN 13340 |
1319: | 13300 RETURN |
1320: | 13310 INPUT "SHIELDS ARE UP. DO YOU WANT THEM DOWN "; b$ |
1321: | 13320 IF LEFT$(b$, 1) = "Y" THEN 13370 |
1322: | 13330 RETURN |
1323: | 13340 s4 = 1: s9 = 1: IF c5$ <> "DOCKED" THEN e1 = e1 - 50 |
1324: | 13350 PRINT "SHIELDS RAISED.": IF e1 <= 0 THEN 13390 |
1325: | 13360 j3 = 1: RETURN |
1326: | 13370 s4 = 0: s9 = 1: PRINT "SHIELDS LOWERED.": j3 = 1: RETURN |
1327: | 13380 PRINT "SHIELDS DAMAGED AND DOWN.": RETURN |
1328: | 13390 PRINT : PRINT "SHIELDS USE UP LAST OF THE ENERGY." |
1329: | 13400 f9 = 4: GOSUB 5940: RETURN |
1330: | 13410 REM - SUPERNOVA |
1331: | 13420 IF x2 <> 0 THEN 13520 |
1332: | 13430 n = INT(RND(1) * i6 + 1): FOR x = 1 TO 8: FOR y = 1 TO 8 |
1333: | 13440 n = n - (g(x, y) - INT(g(x, y) / 10) * 10): IF n <= 0 THEN 13460 |
1334: | 13450 NEXT y: NEXT x: RETURN |
1335: | 13460 IF (x <> q1) OR (y <> q2) THEN 13580 |
1336: | 13470 IF j4 <> 0 THEN 13580 |
1337: | 13480 n = INT(RND(1) * (g(x, y) - INT(g(x, y) / 10) * 10)) + 1 |
1338: | 13490 FOR x3 = 1 TO 10: FOR y3 = 1 TO 10: IF q$(x3, y3) <> "*" THEN 13510 |
1339: | 13500 n = n - 1: IF n = 0 THEN 13520 |
1340: | 13510 NEXT y3: NEXT x3 |
1341: | 13520 PRINT : PRINT "*** RED ALERT!! RED ALERT!! ***" |
1342: | 13530 x3 = x2: y3 = y2 |
1343: | 13540 PRINT "*** INCIPIENT SUPERNOVA DETECTED AT SECTOR "; x3; "-"; y3 |
1344: | 13550 x = q1: y = q2: k = (x2 - s6) ^ 2 + (y2 - s7) ^ 2 |
1345: | 13560 IF k > 1.5 THEN 13620 |
1346: | 13570 PRINT "*** EMERGENCY AUTO -OVERRIDE JAMMED ***": a2 = 1: GOTO 13620 |
1347: | 13580 IF d4(9) <> 0 THEN 13620 |
1348: | 13590 PRINT : PRINT "MESSAGE FROM STARFLEET COMMAND...STARDATE "; INT(d0) |
1349: | 13600 PRINT "'SUPERNOVA IN QUADRANT "; x; "-"; y; |
1350: | 13610 PRINT "....CAUTION ADVISED'" |
1351: | 13620 n = g(x, y): r = INT(n / 100): q = 0 |
1352: | 13630 IF (x <> q1) OR (y <> q2) THEN 13650 |
1353: | 13640 k3 = 0: c3 = 0 |
1354: | 13650 IF r = 0 THEN 13710 |
1355: | 13660 r1 = r1 - r: IF r2 = 0 THEN 13710 |
1356: | 13670 FOR l = 1 TO r2: IF (c1(l) <> x) OR (c2(l) <> y) THEN 13700 |
1357: | 13680 c1(l) = c1(r2): c2(l) = c2(r2): c1(r2) = 0: c2(r2) = 0 |
1358: | 13690 r2 = r2 - 1: r = r - 1: q = 1: IF r2 = 0 THEN f1(2) = 1E+30 |
1359: | 13700 NEXT l |
1360: | 13710 IF r3 = 0 THEN 13750 |
1361: | 13720 FOR l = 1 TO r3: IF (b2(l) <> x) OR (b3(l) <> y) THEN 13740 |
1362: | 13730 b2(l) = b2(r3): b3(l) = b3(r3): b2(r3) = 0: b3(r3) = 0: r3 = r3 - 1 |
1363: | 13740 NEXT l |
1364: | 13750 IF x2 = 0 THEN 13790 |
1365: | 13760 n = g(x, y) - INT(g(x, y) / 100) * 100 |
1366: | 13770 s1 = s1 + (n - INT(n / 10) * 10): b1 = b1 + INT(n / 10) |
1367: | 13780 k1 = k1 + r: k2 = k2 + q |
1368: | 13790 IF (s2(x, y) <> 0) AND (d4(9) <> 0) THEN s2(x, y) = 1000 + g(x, y) |
1369: | 13800 IF (d4(9) = 0) OR ((q1 = x) AND (q2 = y)) THEN s2(x, y) = 1 |
1370: | 13810 g(x, y) = 1000 |
1371: | 13820 IF (r1 <> 0) OR ((x = q1) AND (y = q2)) THEN 13860 |
1372: | 13830 PRINT : PRINT "MR. SPOCK- 'CAPTAIN, A SUPERNOVA IN QUADRANT "; |
1373: | 13840 PRINT x; "-"; y; "HAS JUST DESTROYED THE LAST OF THE KLINGONS.'" |
1374: | 13850 f9 = 1: GOSUB 5940: RETURN |
1375: | 13860 IF a2 = 0 THEN RETURN |
1376: | 13870 f9 = 8: GOSUB 5940: RETURN |
1377: | 13880 REM - SORTKL |
1378: | 13890 IF k3 <= 1 THEN RETURN |
1379: | 13900 z4 = 0 |
1380: | 13910 FOR o = 1 TO k3 - 1: IF k7(o) <= k7(o + 1) THEN 13980 |
1381: | 13920 k = k7(o): k7(o) = k7(o + 1): k7(o + 1) = k |
1382: | 13930 k = k8(o): k8(o) = k8(o + 1): k8(o + 1) = k |
1383: | 13940 k = k4(o): k4(o) = k4(o + 1): k4(o + 1) = k |
1384: | 13950 k = k5(o): k5(o) = k5(o + 1): k5(o + 1) = k |
1385: | 13960 k = k6(o): k6(o) = k6(o + 1): k6(o + 1) = k |
1386: | 13970 z4 = 1 |
1387: | 13980 NEXT o |
1388: | 13990 IF z4 <> 0 THEN 13900 |
1389: | 14000 RETURN |
1390: | 14010 REM -SRSCAN |
1391: | 14020 IF d4(1) <> 0 THEN 14260: REM damage ? rhn |
1392: | 14030 PRINT : PRINT " 1 2 3 4 5 6 7 8 9 10" |
1393: | 14040 FOR i = 1 TO 10: IF i < 10 THEN PRINT " "; |
1394: | 14050 PRINT i; : FOR j = 1 TO 10: PRINT q$(i, j); " "; : NEXT j |
1395: | 14060 IF i <= 5 THEN ON i GOTO 14080, 14090, 14110, 14120, 14170 |
1396: | 14070 ON i - 5 GOTO 14180, 14190, 14200, 14230, 14240 |
1397: | 14080 PRINT " STARDATE "; fnr(d0): GOTO 14250 |
1398: | 14090 IF c5$ <> "DOCKED" THEN GOSUB 9450 |
1399: | 14100 PRINT " CONDITION "; c5$: GOTO 14250 |
1400: | 14110 PRINT " POSITION "; q1; "-"; q2; ", "; s6; "-"; s7: GOTO 14250 |
1401: | 14120 PRINT " LIFE SUPPORT "; : IF d4(5) <> 0 THEN 14140 |
1402: | 14130 PRINT "ACTIVE": GOTO 14250 |
1403: | 14140 IF c5$ <> "DOCKED" THEN 14160 |
1404: | 14150 PRINT "DAMAGED, SUPPORTED BY STARBASE": GOTO 14250 |
1405: | 14160 PRINT "DAMAGED, RESERVES="; fns(l1): GOTO 14250 |
1406: | 14170 PRINT " WARP FACTOR "; fnr(w1): GOTO 14250 |
1407: | 14180 PRINT " ENERGY "; spc$(8); .01 * INT(100 * e1): GOTO 14250 |
1408: | 14190 PRINT " TORPEDOS "; t4: GOTO 14250 |
1409: | 14200 PRINT " SHIELDS "; : b$ = "DOWN,": IF s4 <> 0 THEN b$ = "UP," |
1410: | 14210 IF d4(8) > 0 THEN b$ = "DAMAGED," |
1411: | 14220 PRINT b$; INT(100 * s3 / i8 + .5); "%": GOTO 14250 |
1412: | 14230 PRINT " KLINGONS LEFT "; r1: GOTO 14250 |
1413: | 14240 PRINT " TIME LEFT "; fns(r5) |
1414: | 14250 NEXT i: RETURN |
1415: | 14260 PRINT "SHORT RANGE SENSORS DAMAGED.": RETURN |
1416: | 14270 REM - TIMEWARP |
1417: | 14280 PRINT : PRINT "*** TIME WARP ENTERED ***": PRINT "YOU ARE TRAVELING"; |
1418: | 14300 IF s0 <> 0 THEN 14340 |
1419: | 14310 t1 = -.5 * i5 * LOG(RND(1)) |
1420: | 14320 PRINT " FOR WARD IN TIME "; fnr(t1); "STARDATES." |
1421: | 14330 f1(2) = f1(2) + t1: GOTO 14500 |
1422: | 14340 m = d0: d0 = d9(1) |
1423: | 14350 PRINT "BACKWARD IN TIME "; fnr(m - d0); "STARDATES.": s0 = 0 |
1424: | 14360 r1 = d9(2): r2 = d9(3): r3 = d9(4): r4 = d9(5): r5 = d9(6) |
1425: | 14370 s1 = d9(7): b1 = d9(8): k1 = d9(9): k2 = d9(10) |
1426: | 14380 FOR i = 1 TO 8: FOR j = 1 TO 8: g(i, j) = d9(i - 1 + 8 * (j - 1) + 11): NEXT j: NEXT i |
1427: | 14390 FOR i = 75 TO 84: c1(i - 74) = d9(i): NEXT |
1428: | 14400 FOR i = 85 TO 94: c2(i - 84) = d9(i): NEXT |
1429: | 14410 FOR i = 95 TO 99: b2(i - 94) = d9(i): NEXT |
1430: | 14420 FOR i = 100 TO 104: b3(i - 99) = d9(i): NEXT: b4 = d9(105): b5 = d9(106) |
1431: | 14430 f1(1) = d0 - .5 * i5 * LOG(RND(1)) |
1432: | 14440 IF r2 <> 0 THEN f1(2) = d0 - (i5 / r2) * LOG(RND(1)) |
1433: | 14450 f1(3) = d0 - .5 * i5 * LOG(RND(1)) |
1434: | 14460 FOR i = 1 TO 8: FOR j = 1 TO 8: IF 1 < s2(i, j) THEN s2(i, j) = 1 |
1435: | 14470 NEXT j: NEXT i |
1436: | 14480 PRINT |
1437: | 14490 PRINT "SPOCK HAS RECONSTRUCTED A CORRECT STAR CHART FROM MEMORY." |
1438: | 14500 GOSUB 9500: RETURN |
1439: | 14510 REM - TRANSFER |
1440: | 14520 j3 = 0 |
1441: | 14530 IF d4(12) <> 0 THEN 14660 |
1442: | 14540 INPUT "NUMBER OF UNITS TO SHIELDS "; z3 |
1443: | 14550 IF z3 < 0 THEN RETURN |
1444: | 14560 IF e1 + s3 - z3 > 0 THEN 14590 |
1445: | 14570 PRINT "SCOTT HERE- 'WE ONLY HAVE "; fnr(e1 + s3); "UNITS LEFT.'" |
1446: | 14580 RETURN |
1447: | 14590 e1 = e1 + s3 - z3: s3 = z3: PRINT "--ENERGY TRANSFER COMPLETE--" |
1448: | 14600 PRINT "(SHIP ENERGY="; fnr(e1); " SHIELD ENERGY="; fnr(s3); ")" |
1449: | 14610 j3 = 1 |
1450: | 14620 t1 = .1: p5 = (k3 + 4 * c3) / 48: IF p5 < .1 THEN p5 = .1 |
1451: | 14630 IF p5 > RND(1) THEN GOSUB 1520 |
1452: | 14640 IF a2 <> 0 THEN RETURN |
1453: | 14650 GOSUB 4760: RETURN |
1454: | 14660 PRINT "TRANSFER PANEL DAMAGED.": RETURN |
1455: | 14670 REM - VISUAL |
1456: | 14680 INPUT "WHICH DIRECTION "; z |
1457: | 14690 PRINT |
1458: | 14700 j3 = 0: IF z < 0 THEN RETURN |
1459: | 14710 IF z <= 12 THEN 14730 |
1460: | 14720 PRINT "DIRECTIONS ARE FROM 0 TO 12 ONLY": GOTO 14680 |
1461: | 14730 t1 = .05: p = (k3 + 4 * c3) / 48: IF p < .05 THEN p = .05 |
1462: | 14740 IF p > RND(1) THEN GOSUB 1520 |
1463: | 14750 IF a2 <> 0 THEN RETURN |
1464: | 14760 GOSUB 4760: j3 = 1: IF a2 <> 0 THEN RETURN |
1465: | 14770 d5 = INT((z / 12) * 8 + 1.5): IF d5 > 8 THEN d5 = 1 |
1466: | 14780 FOR i = 1 TO 5: FOR j = 1 TO 5: v$(i, j) = " ": NEXT j: NEXT i: n = 0 |
1467: | 14790 v$(3, 3) = LEFT$(s5$, 1) |
1468: | 14800 ON d5 GOTO 14810, 14850, 14890, 14930, 14970, 15010, 15050, 15090 |
1469: | 14810 i = s6 - 2: j = s7 - 2: v$(1, 1) = q$: IF (j > 0) AND (i > 0) THEN v$(1, 1) = q$(i, j) |
1470: | 14820 i = s6 - 1: j = s7 - 1: v$(2, 2) = q$: IF (i > 0) AND (j > 0) THEN v$(2, 2) = q$(i, j) |
1471: | 14830 n = n + 1: IF n = 3 THEN 15140 |
1472: | 14840 i = s6 - 2: v$(1, 2) = q$: IF (i > 0) AND (j > 0) THEN v$(1, 2) = q$(i, j) |
1473: | 14850 i = s6 - 2: v$(1, 3) = q$: IF i > 0 THEN v$(1, 3) = q$(i, s7) |
1474: | 14860 i = s6 - 1: v$(2, 3) = q$: IF i > 0 THEN v$(2, 3) = q$(i, s7) |
1475: | 14870 n = n + 1: IF n = 3 THEN 15140 |
1476: | 14880 i = s6 - 2: j = s7 + 1: v$(1, 4) = q$: IF (i > 0) AND (j < 11) THEN v$(1, 4) = q$(i, j) |
1477: | 14890 i = s6 - 2: j = s7 + 2: v$(1, 5) = q$: IF (i > 0) AND (j < 11) THEN v$(1, 5) = q$(i, j) |
1478: | 14900 i = s6 - 1: j = s7 + 1: v$(2, 4) = q$: IF (i > 0) AND (j < 11) THEN v$(2, 4) = q$(i, j) |
1479: | 14910 n = n + 1: IF n = 3 THEN 15140 |
1480: | 14920 j = s7 + 2: v$(2, 5) = q$: IF (i > 0) AND (j < 11) THEN v$(2, 5) = q$(i, j) |
1481: | 14930 j = s7 + 2: v$(3, 5) = q$: IF j < 11 THEN v$(3, 5) = q$(s6, j) |
1482: | 14940 j = s7 + 1: v$(3, 4) = q$: IF j < 11 THEN v$(3, 4) = q$(s6, j) |
1483: | 14950 n = n + 1: IF n = 3 THEN 15140 |
1484: | 14960 i = s6 + 1: j = s7 + 2: v$(4, 5) = q$: IF (i < 11) AND (j < 11) THEN v$(4, 5) = q$(i, j) |
1485: | 14970 i = s6 + 2: j = s7 + 2: v$(5, 5) = q$: IF (i < 11) AND (j < 11) THEN v$(5, 5) = q$(i, j) |
1486: | 14980 i = s6 + 1: j = s7 + 1: v$(4, 4) = q$: IF (i < 11) AND (j < 11) THEN v$(4, 4) = q$(i, j) |
1487: | 14990 n = n + 1: IF n = 3 THEN 15140 |
1488: | 15000 i = s6 + 2: v$(5, 4) = q$: IF (i < 11) AND (j < 11) THEN v$(5, 4) = q$(i, j) |
1489: | 15010 i = s6 + 2: v$(5, 3) = q$: IF i < 11 THEN v$(5, 3) = q$(i, s7) |
1490: | 15020 i = s6 + 1: v$(4, 3) = q$: IF i < 11 THEN v$(4, 3) = q$(i, s7) |
1491: | 15030 n = n + 1: IF n = 3 THEN 15140 |
1492: | 15040 i = s6 + 2: j = s7 - 1: v$(5, 2) = q$: IF (i < 11) AND (j > 0) THEN v$(5, 2) = q$(i, j) |
1493: | 15050 i = s6 + 2: j = s7 - 2: v$(5, 1) = q$: IF (i < 11) AND (j > 0) THEN v$(5, 1) = q$(i, j) |
1494: | 15060 i = s6 + 1: j = s7 - 1: v$(4, 2) = q$: IF (i < 11) AND (j > 0) THEN v$(4, 2) = q$(i, j) |
1495: | 15070 n = n + 1: IF n = 3 THEN 15140 |
1496: | 15080 j = s7 - 2: v$(4, 1) = q$: IF (i < 11) AND (j > 0) THEN v$(4, 1) = q$(i, j) |
1497: | 15090 j = s7 - 2: v$(3, 1) = q$: IF j > 0 THEN v$(3, 1) = q$(s6, j) |
1498: | 15100 j = s7 - 1: v$(3, 2) = q$: IF j > 0 THEN v$(3, 2) = q$(s6, j) |
1499: | 15110 n = n + 1: IF n = 3 THEN 15140 |
1500: | 15120 i = s6 - 1: j = s7 - 2: v$(2, 1) = q$: IF (i > 0) AND (j > 0) THEN v$(2, 1) = q$(i, j) |
1501: | 15130 GOTO 14810 |
1502: | 15140 FOR i = 1 TO 5 |
1503: | 15150 IF (v$(i, 1) = " ") AND (v$(i, 3) = " ") AND (v$(i, 5) = " ") THEN 15180 |
1504: | 15160 PRINT " "; |
1505: | 15170 FOR j = 1 TO 5: PRINT v$(i, j); " "; : NEXT j: PRINT |
1506: | 15180 NEXT i: RETURN |
1507: | 15190 REM - WAIT |
1508: | 15200 j3 = 0: INPUT "HOW MANY STARDATES "; z5 |
1509: | 15210 IF (z5 < r5) AND (k3 = 0) THEN 15230 |
1510: | 15220 INPUT "ARE YOU SURE? "; b$: IF LEFT$(b$, 1) <> "Y" THEN RETURN |
1511: | 15230 r6 = 1 |
1512: | 15240 IF z5 <= 0 THEN r6 = 0 |
1513: | 15250 IF r6 = 0 THEN RETURN |
1514: | 15260 t1 = z5: z6 = z5 |
1515: | 15270 IF k3 = 0 THEN 15300 |
1516: | 15280 t1 = 1 + RND(1): IF z5 < t1 THEN t1 = z5 |
1517: | 15290 z6 = t1 |
1518: | 15300 IF t1 < z5 THEN GOSUB 1520 |
1519: | 15310 IF a2 <> 0 THEN RETURN |
1520: | 15320 GOSUB 4760: j3 = 1: IF a2 <> 0 THEN RETURN |
1521: | 15330 z5 = z5 - z6: GOTO 15240 |
1522: | 15340 REM :WARP |
1523: | 15350 j3 = 0: IF d4(6) <> 0 THEN 15820 |
1524: | 15360 INPUT "ENTER COURSE AND DISTANCE "; d2, d1 |
1525: | 15370 IF d2 < 0 THEN RETURN |
1526: | 15380 p = (d1 + .05) * w1 * w1 * w1 * (s4 + 1): IF p < e1 THEN 15500 |
1527: | 15390 j3 = 0: PRINT : PRINT "ENGINEERING TO BRIDGE--" |
1528: | 15400 IF (s4 = 0) OR (.5 * p > e1) THEN 15430 |
1529: | 15410 PRINT " WE HAVEN'T THE ENERGY TO GO THAT FAR WITH "; |
1530: | 15420 PRINT " THE SHIELDS UP.": RETURN |
1531: | 15430 w = INT((e1 / (d1 + .05)) ^ .333333): IF w <= 0 THEN 15480 |
1532: | 15440 PRINT " WE HAVEN'T THE ENERGY. BUT WE COULD DO IT AT WARP "; w |
1533: | 15450 IF s4 <> 0 THEN 15470 |
1534: | 15460 RETURN |
1535: | 15470 PRINT " IF YOU'LL LOWER THE SHIELDS.": RETURN |
1536: | 15480 PRINT " WE CAN'T DO IT, CAPTAIN. WE HAVEN'T GOT THE ENERGY." |
1537: | 15490 RETURN |
1538: | 15500 t1 = 10 * d1 / w2: IF t1 < .8 * r5 THEN 15560 |
1539: | 15510 PRINT : PRINT "MR. SPOCK - 'CAPTAIN, I COMPUTE THAT SUCH A TRIP" |
1540: | 15520 PRINT " WILL REQUIRE APPROXIMATELY "; fnr(100 * t1 / r5); |
1541: | 15530 PRINT "PERCENT": PRINT " OF OUR REMAINING TIME. ARE YOU SURE "; |
1542: | 15540 INPUT "THIS IS WISE "; b$: IF LEFT$(b$, 1) = "Y" THEN 15560 |
1543: | 15550 j3 = 0: RETURN |
1544: | 15560 q4 = 0: w = 0: IF w1 <= 6 THEN 15720 |
1545: | 15570 p = d1 * (6 - w1) ^ 2 / 66.66666: IF p > RND(1) THEN q4 = 1 |
1546: | 15580 IF q4 <> 0 THEN d1 = RND(1) * d1 |
1547: | 15590 w = 0: IF w1 < 10 THEN 15610 |
1548: | 15600 IF .25 * d1 > RND(1) THEN w = 1 |
1549: | 15610 IF (q4 = 0) AND (w = 0) THEN 15720 |
1550: | 15620 a = (15 - d2) * .5236: x1 = -SIN(a): x2 = COS(a) |
1551: | 15630 b8 = ABS(x1): IF ABS(x2) > ABS(x1) THEN b8 = ABS(x2) |
1552: | 15640 x1 = x1 / b8: y1 = y1 / b8: n = INT(10 * d1 * b8 + .5): x = s6: y = s7 |
1553: | 15650 IF n = 0 THEN 15720 |
1554: | 15660 FOR l = 1 TO n |
1555: | 15670 x = x + x1: q = INT(x + .5): IF (q < 1) OR (q > 10) THEN 15720 |
1556: | 15680 y = y + y1: r = INT(y + .5): IF (r < 1) OR (r > 10) THEN 15720 |
1557: | 15690 IF q$(q, r) = "." THEN 15710 |
1558: | 15700 q4 = 0: w = 0 |
1559: | 15710 NEXT l |
1560: | 15720 GOSUB 8000: IF a2 <> 0 THEN RETURN |
1561: | 15730 e1 = e1 - d1 * w1 * w1 * w1 * (s4 + 1): IF e1 > 0 THEN 15750 |
1562: | 15740 f9 = 4: GOSUB 5940: RETURN |
1563: | 15750 t1 = 10 * d1 / w2: IF w <> 0 THEN GOSUB 14270 |
1564: | 15760 IF q4 = 0 THEN 15810 |
1565: | 15770 PRINT : PRINT "ENGINEERING TO BRIDGE--": PRINT " SCOTT HERE- "; |
1566: | 15780 PRINT "'WE'VE JUST BLOWN THE WARP ENGINES." |
1567: | 15790 PRINT " WE'LL HAVE TO SHUT 'ER DOWN HERE, CAPTAIN.'" |
1568: | 15800 d4(6) = d5 * (3 * RND(1) + 1) |
1569: | 15810 j3 = 1: RETURN |
1570: | 15820 PRINT "WARP ENGINES DAMAGED.": RETURN |
1571: | 15830 REM - ABANDON |
1572: | 15840 ON SGN(d4(10)) + 2 GOTO 15850, 15870, 15860 |
1573: | 15850 PRINT "YE FAERIE QUEENE HAS NO SHUTTLE CRAFT.": RETURN |
1574: | 15860 PRINT "SHUTTLE CRAFT DAMAGED.": RETURN |
1575: | 15870 PRINT : PRINT "***ABANDON SHIP! ABANDON SHIP!" |
1576: | 15880 PRINT "***ALL HANDS ABANDON SHIP!": PRINT |
1577: | 15890 PRINT "YOU AND THE BRIDGE CREW ESCAPE IN THE GALILEO." |
1578: | 15900 PRINT "THE REMAINDER OF THE CREW BEAMS DOWN" |
1579: | 15910 PRINT "TO THE NEAREST HABITABLE PLANET.": IF r3 <> 0 THEN 15930 |
1580: | 15920 f9 = 9: GOSUB 5940: RETURN |
1581: | 15930 PRINT : PRINT "YOU ARE CAPTURED BY KLINGONS AND RELEASED TO " |
1582: | 15940 PRINT "THE FEDERATION IN A PRISONER-OF-WAR EXCHANGE." |
1583: | 15950 PRINT "STARFLEET PUTS YOU IN COMMAND OF ANOTHER SHIP," |
1584: | 15960 PRINT "THE FAERIE QUEENE WHICH IS ANTIQUATED, BUT" |
1585: | 15970 PRINT "STILL USABLE.": n = INT(RND(1) * r3 + 1): q1 = b2(n): q2 = b3(n) |
1586: | 15980 s6 = 5: s7 = 5: GOSUB 9500: q$(s6, s7) = "." |
1587: | 15990 FOR l = 1 TO 3: s6 = INT(3 * RND(1) - 1 + b6) |
1588: | 16000 IF (s6 < 1) OR (s7 > 10) THEN 16030 |
1589: | 16010 s7 = INT(3 * RND(1) - 1 + b7): IF (s7 < 1) OR (s7 > 10) THEN 16030 |
1590: | 16020 IF q$(s6, s7) = "." THEN 16040 |
1591: | 16030 NEXT l: GOTO 15980 |
1592: | 16040 s5$ = "FAERIE QUEENE": q$(s6, s7) = LEFT$(s5$, 1): c5$ = "DOCKED" |
1593: | 16050 FOR l = 1 TO 12: d4(l) = 0: NEXT: d4(10) = -1: e1 = 3000: i7 = e1 |
1594: | 16060 s3 = 1500: i8 = s3: t4 = 6: i9 = t4: l1 = 3: j1 = l1: s4 = 0: w1 = 5: w2 = 25 |
1595: | 16070 RETURN |
1596: | 16080 REM - DESTRUCT |
1597: | 16090 IF d4(11) = 0 THEN 16120 |
1598: | 16100 PRINT "COMPUTER DAMAGED - CANNOT EXECUTE DESTRUCT SEQUENCE" |
1599: | 16110 RETURN |
1600: | 16120 PRINT : PRINT " ---WORKING---" |
1601: | 16130 PRINT "IDENT IF ICATION-POSITIVE" |
1602: | 16140 PRINT "SELF-DESTRUCT-SEQUENCE-ACTIVATED": j = 3 |
1603: | 16150 FOR i = 10 TO 6 STEP -1: PRINT spc$(j); i: GOSUB 16300: j = j + 3: NEXT |
1604: | 16160 PRINT "ENTER-YOUR-MISSION-PASSWORD-TO -CONTINUE" |
1605: | 16170 PRINT "SELF-DESTRUCT-SEQUENCE-OTHERWISE-DESTRUCT" |
1606: | 16180 PRINT "SEQUENCE-WILL-BE-ABORTED" |
1607: | 16190 INPUT b$: IF b$ <> x$ THEN 16280 |
1608: | 16200 PRINT "PASSWORD-ACCEPTED": j = 10 |
1609: | 16210 FOR i = 5 TO 1 STEP -1: PRINT spc$(j); i: GOSUB 16300: j = j + 3: NEXT |
1610: | 16220 PRINT : PRINT "*****ENTROPY OF "; s5$; " MAXIMIZED*****" |
1611: | 16230 PRINT : IF k3 = 0 THEN 16270 |
1612: | 16240 w = 20 * e1: FOR l = 1 TO k3: IF k6(l) * k7(l) > w THEN 16260 |
1613: | 16250 a5 = k4(l): a6 = k5(l): t2$ = q$(a5, a6): GOSUB 4220 |
1614: | 16260 NEXT l |
1615: | 16270 f9 = 10: GOSUB 5940: RETURN |
1616: | 16280 PRINT "PASSWORD-REJECTED" |
1617: | 16290 PRINT "CONTINUITY-EFFECTED": PRINT : RETURN |
1618: | 16300 k = 12345: FOR m = 1 TO 90: k = k + 1: NEXT m: RETURN |
1619: | 16310 REM - STATUS |
1620: | 16320 FOR i = 1 TO 10: GOTO 14060: RETURN |
1621: | 16330 END:REM BYE |
1622: | 16340 REM rhn fixup |
1623: | 16350 DIM spc$(40) |
1624: | 16360 FOR j = 1 TO 40: spc$(j) = "" |
1625: | 16370 FOR i = 1 TO j: spc$(j) = spc$(j) + " ": NEXT i: NEXT j |
1626: | 16380 RETURN |