Add README.md
[pdp8.git] / sw / src / basic / STARTR.BA
1 10 REM ********** STAR TREK SPACE SIMULATOR **********
2 20 REM
3 30 PRINT\PRINT\PRINT "STAR TREK SPACE SIMULATOR"
4 40 RANDOMIZE
5 70 DEF FNA(X)=INT(X*RND(1)+1)
6 80 DIM G(8,8),Z$(20),X$(24)
7 90 T0=(FNA(20)+20)*100
8 91 T=T0
9 100 E=3000
10 110 P=15
11 120 S=0
12 130 X$="------------------------"
13 140 DEF FND(D)=SQR((K(I,1)-S1)^2+(K(I,2)-S2)^2)
14 150 Q1=FNA(8)
15 151 Q2=Q1
16 152 S1=Q1
17 153 S2=Q1
18 160 DIM C(9,2)
19 161 FOR I=1 TO 9\FOR J=1 TO 2\C(I,J)=1\NEXT J\NEXT I
20 170 C(2,1)=-1\C(3,1)=-1\C(4,1)=-1\C(4,2)=-1\C(5,2)=-1\C(6,2)=-1
21 180 C(1,1)=0\C(3,2)=0\C(5,1)=0\C(7,2)=0\C(9,1)=0
22 190 DIM D(6)\FOR I=1 TO 6\D(I)=0\NEXT I
23 200 B9=0\K9=0
24 210 FOR I=1 TO 8
25 220 FOR J=1 TO 8
26 230 K3=0\B3=0
27 240 IF RND(1)<.8 THEN 270
28 250 K3=FNA(3)
29 260 K9=K9+K3
30 270 IF RND(1)<.96 THEN 300
31 280 B3=1
32 290 B9=B9+1
33 300 S3=FNA(5)
34 310 G(I,J)=K3*100+B3*10+S3
35 320 NEXT J
36 330 NEXT I
37 340 IF K9=0 THEN 200\IF B9=0 THEN 200
38 350 GOTO 3570
39 360 IF Q1>=1 THEN 380
40 370 S1=1\Q1=1
41 380 IF Q1<=8 THEN 400
42 390 S1=8\Q1=8
43 400 IF Q2>=1 THEN 420
44 410 S2=1\Q2=1
45 420 IF Q2<=8 THEN 440
46 430 S2=8\Q2=8
47 440 X=G(Q1,Q2)/100
48 450 K3=INT(X)
49 460 B3=INT((X-K3)*10)
50 470 S3=G(Q1,Q2)-((B3*10)+(K3*100))
51 480 IF K3=0 THEN 520
52 490 PRINT "COMBAT AREA","CONDITION RED"
53 500 IF S>(K3*100) THEN 520
54 510 PRINT " SHIELDS DANGEROUSLY LOW"
55 520 DIM K(3,3)\FOR I=1 TO 3\FOR J=1 TO 3\K(I,J)=0\NEXT J\NEXT I
56 530 DIM Q(8,8)\FOR I=1 TO 8\FOR J=1 TO 8\Q(I,J)=0\NEXT J\NEXT I
57 540 Q(S1,S2)=1
58 550 FOR I=1 TO K3
59 560 GOSUB 3500
60 570 Q(R1,R2)=2
61 580 K(I,1)=R1
62 590 K(I,2)=R2
63 600 K(I,3)=200
64 610 NEXT I
65 620 IF B3=0 THEN 650
66 630 GOSUB 3500
67 640 Q(R1,R2)=4
68 650 FOR I=1 TO S3
69 660 GOSUB 3500
70 670 Q(R1,R2)=3
71 680 NEXT I
72 690 GOSUB 2600
73 700 PRINT "COMMAND";
74 710 INPUT A
75 720 IF A<1 THEN 780\IF A>5 THEN 780\IF A<>INT(A) THEN 780
76 730 R1=A+1
77 740 IF D(R1)>=0 THEN 780
78 750 GOSUB 3420
79 760 PRINT Z$;" NOT OPERATIONAL."
80 770 GOTO 700
81 780 IF A+1=1 GOTO 890\IF A+1=2 GOTO 1520\IF A+1=3 GOTO 1640
82 781 IF A+1=4 GOTO 1800\IF A+1=5 GOTO 2200\IF A+1=6 GOTO 3010
83 782 IF A+1=7 GOTO 3550
84 790 PRINT
85 800 PRINT "0=SET COURSE";TAB(20);"4 3 2"
86 810 PRINT "1=LONG RANGE SCAN";TAB(21);PNT(220);" ^ /"
87 820 PRINT "2=PHASER CTRL.";TAB(22);PNT(220);"^/"
88 830 PRINT "3=TORPEDO CTRL.";TAB(18);"5 ------- 1"
89 840 PRINT "4=SHIELDS";TAB(22);"/^";PNT(220)
90 850 PRINT "5=LIBRARY COMPUTER";TAB(21);"/ ^ ";PNT(220)
91 860 PRINT "6=RESIGNATION";TAB(20);"6 7 8"
92 870 PRINT
93 880 GOTO 700
94 890 PRINT "COURSE (1-8)";
95 900 INPUT C1
96 910 IF C1<1 THEN 700\IF C1>=9 THEN 700
97 920 PRINT "WARP FACTOR (0-8)";
98 930 INPUT W1
99 940 IF W1<=0 THEN 700\IF W1>8 THEN 700
100 950 IF D(1)>=0 THEN 980\IF W1<=.5 THEN 980
101 960 PRINT "ENGINES ARE DAMAGED. MAXIMUM SPEED = WARP 0.5"
102 970 GOTO 920
103 980 IF E-(W1*8)>0 THEN 1030
104 990 IF S<1 THEN 2470
105 1000 PRINT "YOU ONLY HAVE";E;"UNITS. SUGGEST YOU TRANSFER FROM"
106 1010 PRINT "SHIELDS WHICH HAVE";S;"UNITS."
107 1020 GOTO 700
108 1030 FOR I=1 TO 6
109 1040 IF D(I)>=0 THEN 1060
110 1050 D(I)=D(I)+1
111 1060 NEXT I
112 1070 IF FNA(10)<>5 THEN 1120\IF W1<2 THEN 1120
113 1080 R1=FNA(6)
114 1090 D(R1)=D(R1)-FNA(5)
115 1100 GOSUB 3420
116 1110 PRINT\PRINT "DAMAGE CONTROL REPORTS '";Z$;"' DAMAGED."\PRINT
117 1120 N=INT(W1*8)
118 1130 Q(S1,S2)=0
119 1140 X=S1
120 1150 Y=S2
121 1160 C2=INT(C1)
122 1170 X1=C(C2,1)+(C(C2+1,1)-C(C2,1))*(C1-C2)
123 1180 X2=C(C2,2)+(C(C2+1,2)-C(C2,2))*(C1-C2)
124 1190 FOR I=1 TO N
125 1200 S1=S1+X1
126 1210 S2=S2+X2
127 1220 IF S1<1 THEN 1360\IF S1>8 THEN 1360\IF S2<1 THEN 1360
128 1221 IF S2>8 THEN 1360
129 1230 IF Q(INT(S1),INT(S2))=0 THEN 1270
130 1240 S1=S1-X1
131 1250 S2=S2-X2
132 1260 PRINT "DANGER AHEAD, ENTERPRISE STOPPED"\GOTO 1280
133 1270 NEXT I
134 1280 S1=INT(S1)
135 1290 S2=INT(S2)
136 1300 Q(S1,S2)=1
137 1310 E=E-N
138 1320 IF W1<1 THEN 690
139 1330 T=T+1
140 1340 IF T>T0+30 THEN 2500
141 1350 GOTO 690
142 1360 X=Q1*8+X+X1*N
143 1370 Y=Q2*8+Y+X2*N
144 1380 Q1=INT(X/8)
145 1390 Q2=INT(Y/8)
146 1400 S1=INT(X-Q1*8+.5)
147 1410 S2=INT(Y-Q2*8+.5)
148 1420 IF S1>0 THEN 1450
149 1430 Q1=Q1-1
150 1440 S1=8
151 1450 IF S2>0 THEN 1480
152 1460 Q2=Q2-1
153 1470 S2=8
154 1480 T=T+1
155 1490 E=E-N+5
156 1500 IF T>T0+30 THEN 2500
157 1510 GOTO 360
158 1520 PRINT X$(1,17)
159 1525 DIM N(3)
160 1530 FOR I=Q1-1 TO Q1+1
161 1540 N(1)=0\N(2)=0\N(3)=0
162 1550 FOR J=Q2-1 TO Q2+1
163 1560 IF I<1 THEN 1580\IF I>8 THEN 1580
164 1565 IF J<1 THEN 1580\IF J>8 THEN 1580
165 1570 N(J-Q2+2)=G(I,J)
166 1580 NEXT J
167 1590 PRINT ":";N(1);TAB(7);":";N(2);TAB(13);":";N(3);TAB(19);":";
168 1600 PRINT X$(1,17)
169 1610 NEXT I
170 1620 GOTO 700
171 1640 IF K3=0 THEN 2350
172 1650 PRINT "ENERGY AVAILABLE =";E
173 1660 PRINT "NUMBER OF UNITS TO FIRE =";
174 1670 INPUT X
175 1680 IF X<1 THEN 700
176 1690 IF E-X<0 THEN 1660
177 1700 E=E-X
178 1710 FOR I=1 TO 3
179 1720 IF K(I,3)=0 THEN 1780
180 1730 H=INT(X/K3/(FND(0)))
181 1740 K(I,3)=K(I,3)-H
182 1750 PRINT H;"UNIT HIT ON KLINGON"
183 1760 IF K(I,3)>0 THEN 1780
184 1770 GOSUB 2050
185 1780 NEXT I
186 1790 GOTO 2030
187 1800 IFP>0 THEN 1830
188 1810 PRINT "ALL PHOTON TORPEDOES EXPENDED."
189 1820 GOTO 700
190 1830 PRINT "TORPEDO COURSE (1-9)";
191 1840 INPUT C1
192 1850 IF C1<1 THEN 700\IF C1=>9 THEN 700
193 1860 C2=INT(C1)
194 1870 X1=C(C2,1)+(C(C2+1,1)-C(C2,1))*(C1-C2)
195 1880 X2=C(C2,2)+(C(C2+1,2)-C(C2,2))*(C1-C2)
196 1890 X=S1
197 1900 Y=S2
198 1910 P=P-1
199 1920 PRINT
200 1930 X=X+X1
201 1940 Y=Y+X2
202 1950 IF X<1 THEN 2180\IF X>8 THEN 2180\IF Y<1 THEN 2180\IF Y>8 THEN 2180
203 1960 IF Q(INT(X),INT(Y))<>0 THEN 1970
204 1961 IF Q(INT(X+.5),INT(Y+.5))<>0 THEN 1970
205 1962 GOTO 1930
206 1970 FOR I=1 TO 3
207 1980 IF INT(X)<>K(I,1) THEN 1990
208 1981 IF INT(Y)<>K(I,2) THEN 1990
209 1982 GOTO 2020
210 1990 IF INT(X+.5)<>K(I,1) THEN 2000
211 1991 IF INT(Y+.5)<>K(I,2) THEN 2000
212 1993 GOTO 2020
213 2000 NEXT I
214 2010 GOTO 2120
215 2020 GOSUB 2050
216 2030 GOSUB 2370
217 2040 GOTO 700
218 2050 K(I,3)=0\Q(K(I,1),K(I,2))=0
219 2060 PRINT "***KLINGON DESTROYED***"
220 2070 K3=K3-1
221 2080 K9=K9-1
222 2090 IF K9=0 THEN 2550
223 2100 G(Q1,Q2)=G(Q1,Q2)-100
224 2110 RETURN
225 2120 IF Q(INT(X),INT(Y))<>3 THEN 2150
226 2130 PRINT "YOU CAN'T DESTROY STARS, SILLY!"
227 2140 GOTO 2180
228 2150 PRINT "***STARBASE DESTROYED***"
229 2160 PRINT "YOU ARE HEREBY RELIEVED OF DUTY!! CONGRATULATIONS!"
230 2170 GOTO 2530
231 2180 PRINT "TORPEDO MISSED."
232 2190 GOTO 2030
233 2200 PRINT "ENERGY AVAILABLE";E+5
234 2210 PRINT "NUMBER OF UNITS TO SHIELDS";
235 2220 INPUT X
236 2230 IF X<0 THEN 700
237 2240 IF E+S-X<0 THEN 2210
238 2250 E=E+S-X
239 2260 S=X
240 2270 GOTO 700
241 2280 PRINT\PRINT "DEVICE","STATE OF REPAIR"
242 2290 FOR R1=1 TO 6
243 2300 GOSUB 3420
244 2310 PRINT Z$,D(R1)
245 2320 NEXT R1
246 2330 PRINT
247 2340 GOTO 700
248 2350 PRINT "SHORT RANGE SENSORS REPORT NO KLINGONS IN THIS QUADRENT."
249 2360 GOTO 700
250 2370 IF C$="DOCKED" THEN 2460
251 2380 IF K3=0 THEN 2460
252 2390 FOR I=1 TO 3
253 2400 IF K(I,3)=0 THEN 2450
254 2410 H=INT(K(I,3)/FND(0)+1)
255 2420 S=S-H
256 2430 PRINT H;"UNIT HIT ON ENTERPRISE."
257 2440 IF S<0 THEN 2520
258 2450 NEXT I
259 2460 RETURN
260 2470 PRINT "***FATAL ERROR***"
261 2480 PRINT "THE ENTERPRISE IS DEAD IN SPACE, AND MUST BE EVACUATED!!"
262 2490 GOTO 2530
263 2500 PRINT\PRINT "IT IS STARDATE";T
264 2510 GOTO 2530
265 2520 PRINT\PRINT " *** THE ENTERPRISE HAS BEEN DESTROYED ***"
266 2530 PRINT\PRINT "THE FEDERATION WILL BE CONQUERED!!!"
267 2540 GOTO 3560
268 2550 PRINT
269 2560 PRINT "THE LAST KLINGON CRUSER HAS BEEN DESTROYED!!"
270 2570 PRINT "THE FEDERATION HAS BEEN SAVED!!"
271 2580 PRINT
272 2590 GOTO 3560
273 2600 FOR I=S1-1 TO S1+1
274 2610 FOR J=S2-1 TO S2+1
275 2620 IF I<1 THEN 2640\IF I>8 THEN 2640
276 2621 IF J<1 THEN 2640\IF J>8 THEN 2640
277 2630 IF Q(I,J)=4 THEN 2670
278 2640 NEXT J
279 2650 NEXT I
280 2660 GOTO 2730
281 2670 C$="DOCKED"
282 2680 E=3000
283 2690 P=15
284 2700 FOR I=1 TO 6\D(I)=0\NEXT I
285 2710 S=0
286 2720 GOTO 2810
287 2730 PRINT
288 2740 IF K3>0 THEN 2780
289 2750 IF E<300 THEN 2800
290 2760 C$="GREEN"
291 2770 GOTO 2810
292 2780 C$="RED"
293 2790 GOTO 2810
294 2800 C$="YELLOW"
295 2810 PRINT X$
296 2820 Z=0
297 2830 GOSUB 3330
298 2840 PRINT
299 2850 GOSUB 3330
300 2860 PRINT "STARDATE ";T
301 2870 GOSUB 3330
302 2880 PRINT "CONDITION ";C$
303 2890 GOSUB 3330
304 2900 PRINT "ENERGY ";E
305 2910 GOSUB 3330
306 2920 PRINT "TORPEDOES ";P
307 2930 GOSUB 3330
308 2940 PRINT "SHIELDS ";S
309 2950 GOSUB 3330
310 2960 PRINT "KLINGONS ";K9
311 2970 GOSUB 3330
312 2980 PRINT
313 2990 PRINT X$
314 3000 RETURN
315 3010 PRINT "COMPUTER ACTIVE AND AWAITING COMMAND";
316 3020 INPUT A
317 3030 IF A+1=1 GOTO 2280\IF A+1=2 GOTO 3100\IF A+1=3 GOTO 3310
318 3040 PRINT "FUNCTIONS AVAILABLE FROM COMPUTER:"
319 3050 PRINT " 0=DAMAGE REPORT"
320 3060 PRINT " 1=PHOTON TORPEDO DATA"
321 3070 PRINT " 2=SHORT RANGE SCAN"
322 3080 PRINT
323 3090 GOTO 3010
324 3100 PRINT
325 3110 FOR I=1 TO 3
326 3120 IF K(I,3)<=0 THEN 3200
327 3130 X=K(I,2)-S2
328 3140 Y=S1-K(I,1)
329 3150 IF X=0 THEN 3240
330 3160 A=INT(((57.3*ATN(Y/X))/45+1)*100)/100
331 3170 IF X<=0 THEN 3180\IF Y=>0 THEN 3180\GOTO 3290
332 3180 IF X<0 THEN 3220
333 3190 PRINT "DIRECTION=";A
334 3200 NEXT I
335 3210 GOTO 700
336 3220 A=A+4
337 3230 GOTO 3190
338 3240 IF Y<0 THEN 3270
339 3250 A=3
340 3260 GOTO 3190
341 3270 A=7
342 3280 GOTO 3190
343 3290 A=A+8
344 3300 GOTO 3190
345 3310 GOSUB 2600
346 3320 GOTO 700
347 3330 REM *****OUTPUT QUADRENT*****
348 3340 Z=Z+1
349 3350 FOR I=1 TO 8
350 3360 Z$=" <*>+++ * >!<"
351 3370 PRINT SEG$(Z$,Q(Z,I)*3+1,Q(Z,I)*3+3);
352 3380 NEXT I
353 3390 IF Z=1 THEN 3410\IF Z=8 THEN 3410
354 3400 PRINT " ";
355 3410 RETURN
356 3420 REM *****PRINTS DEVICE NAME*****
357 3430 DIM Z9$(6,15)\Z9$(1)="WARP ENGINES"\Z9$(2)="SCANNERS"
358 3440 Z9$(3)="PHASER BANKS"\Z9$(4)="TORPEDO TUBES"
359 3450 Z9$(5)="SHIELD CONTROL"\Z9$(6)="COMPUTER"
360 3470 Z$=Z9$(R1)
361 3490 RETURN
362 3500 REM ***PLACEMENT IN QUADRANT ARRAY***
363 3510 R1=FNA(8)
364 3520 R2=FNA(8)
365 3530 IF Q(R1,R2)<>0 THEN 3510
366 3540 RETURN
367 3550 PRINT\PRINT "YOUR RESIGNATION HAS BEEN ACCEPTED."
368 3560 STOP
369 3570 PRINT
370 3572 PRINT "DO YOU NEED INSTRUCTIONS";
371 3580 INPUT A4$
372 3590 PRINT\PRINT\PRINT
373 3600 IF A4$="N" THEN 440\IF A$="NO" THEN 440
374 3601 IF A4$="Y" THEN 3605\IF A4$="YES" THEN 3605\GOTO 3570
375 3605 PRINT TAB(20);"STAR TREK SPACE SIMULATOR"\PRINT
376 3606 PRINT "AS CAPTAIN OF THE ENTERPRISE, YOU HAVE 30 STARDATES"
377 3607 PRINT "TO DESTROY THE KLINGONS. ONE STARDATE TRANSPIRES EACH TIME"
378 3608 PRINT "YOU MOVE TO A NEW SECTOR. (THE UNIVERSE IS 8X8 SECTORS)."
379 3609 PRINT\PRINT "SCAN CHART SYMBOLS:"
380 3610 PRINT TAB(5);"<*> = ENTERPRISE"
381 3620 PRINT TAB(5);" * = STAR"
382 3630 PRINT TAB(5);"+++ = KLINGON"
383 3640 PRINT TAB(5);">!< = STARBASE"
384 3650 PRINT\PRINT "OPERATING COMMANDS FOR THE ENTERPRISE:"
385 3660 PRINT\PRINT "COMMAND 0 = WARP ENGINES."
386 3670 PRINT " COURSE IS IN A CIRCULAR VECTOR AS SHOWN.";TAB(50);"4 3 2"
387 3680 PRINT " REAL VALUES MAY BE USED. FOR EXAMPLE";
388 3681 PRINT TAB(51);PNT(220);" ^ /"
389 3690 PRINT " 1.2 WOULD BE HALF WAY BETWEEN 1 AND 2.";
390 3691 PRINT TAB(52);PNT(220);"^/"
391 3700 PRINT TAB(48);"5 ------- 1"
392 3710 PRINT " A 'WARP FACTOR' IS THE SIZE OF ONE QUARDRANT.";
393 3711 PRINT TAB(52);"/^";PNT(220)
394 3720 PRINT TAB(51);"/ ^ ";PNT(220)
395 3730 PRINT TAB(50);"6 7 8"
396 3740 PRINT\PRINT "COMMAND 1 = LONG RANGE SCAN."
397 3750 PRINT " CODED IN THE FORM XXX, WHERE THE UNITS ARE THE NUMBER"
398 3760 PRINT " OF STARS, TENS THE NUMBER OF STARBASES, AND HUNDREDS"
399 3770 PRINT " THE NUMBER OF KLINGONS."
400 3780 PRINT\PRINT "COMMAND 2 = PHASERS."
401 3790 PRINT " YOU MAY DESTROY THE KLINGON BY USING ENOUGH PHASER"
402 3800 PRINT " POWER AS TO DEPLETE HIS SHIELDS. KEEP IN MIND THAT WHEN"
403 3810 PRINT " YOU FIRE AT HIM, HE WILL FIRE BACK!"
404 3820 PRINT\PRINT "COMMAND 3 = PHOTON TORPEDOES."
405 3830 PRINT " COURSE IS THE SAME AS WITH WARP ENGINES. THE LIBRARY"
406 3840 PRINT " COMPUTER WILL COMPUTE TRAJECTORIES FOR YOU (OPTION 1)."
407 3850 PRINT\PRINT "COMMAND 4 = SHIELDS."
408 3860 PRINT " DEFINES THE AMOUNT OF ENERGY TO BE ASSIGNED TO SHIELDS."
409 3870 PRINT\PRINT "COMMAND 5 = LIBRARY COMPUTER."
410 3880 PRINT " OPTION 0 = DAMMAGE REPORT."
411 3890 PRINT " A STATE OF REPAIR OF LESS THAN ZERO INDICATES THAT"
412 3900 PRINT " THE DEVICE IS TEMPORARILY DISABLED."
413 3910 PRINT " OPTION 1 = PHOTON TORPEDO DATA."
414 3920 PRINT " GIVES DIRECTION TO ALL KLINGONS IN YOUR QUADRANT."
415 3930 PRINT " OPTION 2 = SHORT RANGE SCAN."
416 3940 PRINT " ALSO GIVEN AUTOMATICALLY AFTER SUCCESSFUL COMPLETION"
417 3950 PRINT " OF WARP ENGINE MANUVERS."
418 3960 PRINT\PRINT "COMMAND 6 = RESIGNATION."
419 3970 PRINT\PRINT "GOOD LUCK!"
420 3980 GOTO 440
421 3990 END
422