1 REM Extracted from HP tape image 16-Nov-2003 by Pete Turnbull
3 1 REM **** HP BASIC PROGRAM LIBRARY ******************************
7 5 REM 36243 REV B -- 10/73
9 7 REM **** CONTRIBUTED PROGRAM ***********************************
10 100 REM *****************************************************************
12 120 REM *** STAR TREK: BY MIKE MAYFIELD, CENTERLINE ENGINEERING ***
14 140 REM *** TOTAL INTERACTION GAME - ORIG. 20 OCT 1972
16 160 REM *****************************************************************
18 180 PRINT " STAR TREK "
19 190 PRINT "DO YOU WANT INSTRUCTIONS (THEY'RE LONG!)";
21 210 IF A$ <> "YES" THEN 230
23 230 REM ***** PROGRAM STARTS HERE *****
26 260 DIM G[8,8],C[9,2],K[3,3],N[3],Z[8,8]
27 270 DIM C$[6],D$[72],E$[24],A$[3],Q$[72],R$[72],S$[48]
29 290 T0=T=INT(RND(1)*20+20)*100
36 360 DEF FND(D)=SQR((K[I,1]-S1)^2+(K[I,2]-S2)^2)
37 370 Q1=INT(RND(1)*8+1)
38 380 Q2=INT(RND(1)*8+1)
39 390 S1=INT(RND(1)*8+1)
40 400 S2=INT(RND(1)*8+1)
41 410 T7=TIM(0)+60*TIM(1)
42 420 C[2,1]=C[3,1]=C[4,1]=C[4,2]=C[5,2]=C[6,2]=-1
43 430 C[1,1]=C[3,2]=C[5,1]=C[7,2]=C[9,1]=0
44 440 C[1,2]=C[2,2]=C[6,1]=C[7,1]=C[8,1]=C[8,2]=C[9,2]=1
46 460 D$="WARP ENGINESS.R. SENSORSL.R. SENSORSPHASER CNTRL"
47 470 D$[49]="PHOTON TUBESDAMAGE CNTRL"
48 480 E$="SHIELD CNTRLCOMPUTER"
53 530 IF R1>.98 THEN 580
54 540 IF R1>.95 THEN 610
67 670 IF R1>.96 THEN 700
72 720 S3=INT(RND(1)*8+1)
73 730 G[I,J]=K3*100+B3*10+S3
78 775 IF B9 <= 0 OR K9 <= 0 THEN 490
79 780 PRINT "YOU MUST DESTROY"K9;" KLINGONS IN"T9;" STARDATES WITH"B9;" STARBASES"
81 820 IF Q1<1 OR Q1>8 OR Q2<1 OR Q2>8 THEN 920
85 860 S3=G[Q1,Q2]-INT(G[Q1,Q2]*.1)*10
88 890 PRINT "COMBAT AREA CONDITION RED"
89 900 PRINT " SHIELDS DANGEROUSLY LOW"
126 1270 PRINT "COMMAND:";
128 1290 GOTO A+1 OF 1410,1260,2330,2530,2800,3460,3560,4630
130 1310 PRINT " 0 = SET COURSE"
131 1320 PRINT " 1 = SHORT RANGE SENSOR SCAN"
132 1330 PRINT " 2 = LONG RANGE SENSOR SCAN"
133 1340 PRINT " 3 = FIRE PHASERS"
134 1350 PRINT " 4 = FIRE PHOTON TORPEDOES"
135 1360 PRINT " 5 = SHIELD CONTROL"
136 1370 PRINT " 6 = DAMAGE CONTROL REPORT"
137 1380 PRINT " 7 = CALL ON LIBRARY COMPUTER"
140 1410 PRINT "COURSE (1-9):";
142 1430 IF C1=0 THEN 1270
143 1440 IF C1<1 OR C1 >= 9 THEN 1410
144 1450 PRINT "WARP FACTOR (0-8):";
146 1470 IF W1<0 OR W1>8 THEN 1410
147 1480 IF D[1] >= 0 OR W1 <= .2 THEN 1510
148 1490 PRINT "WARP ENGINES ARE DAMAGED, MAXIMUM SPEED = WARP .2"
150 1510 IF K3 <= 0 THEN 1560
152 1530 IF K3 <= 0 THEN 1560
153 1540 IF S<0 THEN 4000
155 1560 IF E>0 THEN 1610
156 1570 IF S<1 THEN 3920
157 1580 PRINT "YOU HAVE"E" UNITS OF ENERGY"
158 1590 PRINT "SUGGEST YOU GET SOME FROM YOUR SHIELDS WHICH HAVE"S" UNITS LEFT"
161 1620 IF D[I] >= 0 THEN 1640
164 1650 IF RND(1)>.2 THEN 1810
165 1660 R1=INT(RND(1)*8+1)
166 1670 IF RND(1) >= .5 THEN 1750
167 1680 D[R1]=D[R1]-(RND(1)*5+1)
169 1700 PRINT "DAMAGE CONTROL REPORT:";
171 1720 PRINT " DAMAGED"
174 1750 D[R1]=D[R1]+(RND(1)*5+1)
176 1770 PRINT "DAMAGE CONTROL REPORT:";
178 1790 PRINT " STATE OF REPAIR IMPROVED"
188 1890 X1=C[C2,1]+(C[C2+1,1]-C[C2,1])*(C1-C2)
189 1900 X2=C[C2,2]+(C[C2+1,2]-C[C2,2])*(C1-C2)
193 1940 IF S1<.5 OR S1 >= 8.5 OR S2<.5 OR S2 >= 8.5 THEN 2170
198 1990 IF Z3 <> 0 THEN 2070
199 2030 PRINT USING 5370;S1,S2
211 2130 IF W1<1 THEN 2150
213 2150 IF T>T0+T9 THEN 3970
219 2210 S1=INT(X-Q1*8+.5)
220 2220 S2=INT(Y-Q2*8+.5)
221 2230 IF S1 <> 0 THEN 2260
224 2260 IF S2 <> 0 THEN 2290
229 2310 IF T>T0+T9 THEN 3970
231 2330 IF D[3] >= 0 THEN 2370
232 2340 PRINT "LONG RANGE SENSORS ARE INOPERABLE"
233 2350 IMAGE "LONG RANGE SENSOR SCAN FOR QUADRANT",D,",",D
235 2370 PRINT USING 2350;Q1,Q2
236 2380 PRINT USING 2520
237 2390 FOR I=Q1-1 TO Q1+1
239 2410 FOR J=Q2-1 TO Q2+1
240 2420 IF I<1 OR I>8 OR J<1 OR J>8 THEN 2460
241 2430 N[J-Q2+2]=G[I,J]
242 2440 IF D[7]<0 THEN 2460
245 2470 PRINT USING 2510;N[1],N[2],N[3]
246 2480 PRINT USING 2520
249 2510 IMAGE ": ",3(3D," :")
250 2520 IMAGE "-----------------"
251 2530 IF K3 <= 0 THEN 3670
252 2540 IF D[4] >= 0 THEN 2570
253 2550 PRINT "PHASER CONTROL IS DISABLED"
255 2570 IF D[7] >= 0 THEN 2590
256 2580 PRINT " COMPUTER FAILURE HAMPERS ACCURACY"
257 2590 PRINT "PHASERS LOCKED ON TARGET. ENERGY AVAILABLE="E
258 2600 PRINT "NUMBER OF UNITS TO FIRE:";
260 2620 IF X <= 0 THEN 1270
261 2630 IF E-X<0 THEN 2570
264 2660 IF D[7] >= 0 THEN 2680
267 2690 IF K[I,3] <= 0 THEN 2770
268 2700 H=(X/K3/FND(0))*(2*RND(1))
270 2720 PRINT USING 2730;H,K[I,1],K[I,2],K[I,3]
271 2730 IMAGE 4D," UNIT HIT ON KLINGON AT SECTOR ",D,",",D," (",3D," LEFT)"
272 2740 IF K[I,3]>0 THEN 2770
274 2760 IF K9 <= 0 THEN 4040
276 2780 IF E<0 THEN 4000
278 2800 IF D[5] >= 0 THEN 2830
279 2810 PRINT "PHOTON TUBES ARE NOT OPERATIONAL"
281 2830 IF P>0 THEN 2860
282 2840 PRINT "ALL PHOTON TORPEDOES EXPENDED"
284 2860 PRINT "TORPEDO COURSE (1-9):";
286 2880 IF C1=0 THEN 1270
287 2890 IF C1<1 OR C1 >= 9 THEN 2860
289 2900 X1=C[C2,1]+(C[C2+1,1]-C[C2,1])*(C1-C2)
290 2910 X2=C[C2,2]+(C[C2+1,2]-C[C2,2])*(C1-C2)
294 2950 PRINT "TORPEDO TRACK:"
297 2980 IF X<.5 OR X >= 8.5 OR Y<.5 OR Y >= 8.5 THEN 3420
298 2990 PRINT USING 3000;X,Y
299 3000 IMAGE 15X,D,",",D
304 3050 IF Z3=0 THEN 3070
310 3110 IF Z3=0 THEN 3220
311 3120 PRINT "*** KLINGON DESTROYED ***"
314 3150 IF K9 <= 0 THEN 4040
316 3170 IF INT(X+.5) <> K[I,1] THEN 3190
317 3180 IF INT(Y+.5)=K[I,2] THEN 3200
325 3260 IF Z3=0 THEN 3290
326 3270 PRINT "YOU CAN'T DESTROY STARS SILLY"
332 3330 IF Z3=0 THEN 2960
333 3340 PRINT "*** STAR BASE DESTROYED *** .......CONGRATULATIONS"
339 3400 G[Q1,Q2]=K3*100+B3*10+S3
341 3420 PRINT "TORPEDO MISSED"
343 3440 IF E<0 THEN 4000
345 3460 IF D[7] >= 0 THEN 3490
346 3470 PRINT "SHIELD CONTROL IS NON-OPERATIONAL"
348 3490 PRINT "ENERGY AVAILABLE ="E+S" NUMBER OF UNITS TO SHIELDS:";
350 3510 IF X <= 0 THEN 1270
351 3520 IF E+S-X<0 THEN 3490
355 3560 IF D[6] >= 0 THEN 3590
356 3570 PRINT "DAMAGE CONTROL REPORT IS NOT AVAILABLE"
359 3600 PRINT "DEVICE STATE OF REPAIR"
366 3670 PRINT "SHORT RANGE SENSORS REPORT NO KLINGONS IN THIS QUADRANT"
368 3690 PRINT USING 3700;K[I,1],K[I,2]
369 3700 IMAGE "KLINGON AT SECTOR ",D,",",D," DESTROYED ****"
376 3770 G[Q1,Q2]=K3*100+B3*10+S3
378 3790 IF C$ <> "DOCKED" THEN 3820
379 3800 PRINT "STAR BASE SHIELDS PROTECT THE ENTERPRISE"
381 3820 IF K3 <= 0 THEN 3910
383 3840 IF K[I,3] <= 0 THEN 3900
384 3850 H=(K[I,3]/FND(0))*(2*RND(1))
386 3870 PRINT USING 3880;H,K[I,1],K[I,2],S
387 3880 IMAGE 4D," UNIT HIT ON ENTERPRISE AT SECTOR ",D,",",D," (",4D," LEFT)"
388 3890 IF S<0 THEN 4000
391 3920 PRINT "THE ENTERPRISE IS DEAD IN SPACE. IF YOU SURVIVE ALL IMPENDING"
392 3930 PRINT "ATTACK YOU WILL BE DEMOTED TO THE RANK OF PRIVATE"
393 3940 IF K3 <= 0 THEN 4020
397 3980 PRINT "IT IS STARDATE"T
400 4010 PRINT "THE ENTERPRISE HAS BEEN DESTROYED. THE FEDERATION WILL BE CONQUERED"
401 4020 PRINT "THERE ARE STILL"K9" KLINGON BATTLE CRUISERS"
404 4050 PRINT "THE LAST KLINGON BATTLE CRUISER IN THE GALAXY HAS BEEN DESTROYED"
405 4060 PRINT "THE FEDERATION HAS BEEN SAVED !!!"
407 4080 PRINT "YOUR EFFICIENCY RATING ="((K7/(T-T0))*1000)
408 4090 T1=TIM(0)+TIM(1)*60
409 4100 PRINT "YOUR ACTUAL TIME OF MISSION ="INT((((T1-T7)*.4)-T7)*100)" MINUTES"
411 4120 FOR I=S1-1 TO S1+1
412 4130 FOR J=S2-1 TO S2+1
413 4140 IF I<1 OR I>8 OR J<1 OR J>8 THEN 4200
418 4190 IF Z3=1 THEN 4240
427 4280 PRINT "SHIELDS DROPPED FOR DOCKING PURPOSES"
430 4310 IF K3>0 THEN 4350
431 4320 IF E<E0*.1 THEN 4370
437 4380 IF D[2] >= 0 THEN 4430
439 4400 PRINT "*** SHORT RANGE SENSORS ARE OUT ***"
442 4430 PRINT USING 4540
443 4440 PRINT USING 4550;Q$[1,3],Q$[4,6],Q$[7,9],Q$[10,12],Q$[13,15],Q$[16,18],Q$[19,21],Q$[22,24]
444 4450 PRINT USING 4560;Q$[25,27],Q$[28,30],Q$[31,33],Q$[34,36],Q$[37,39],Q$[40,42],Q$[43,45],Q$[46,48],T
445 4460 PRINT USING 4570;Q$[49,51],Q$[52,54],Q$[55,57],Q$[58,60],Q$[61,63],Q$[64,66],Q$[67,69],Q$[70,72],C$
446 4470 PRINT USING 4580;R$[1,3],R$[4,6],R$[7,9],R$[10,12],R$[13,15],R$[16,18],R$[19,21],R$[22,24],Q1,Q2
447 4480 PRINT USING 4590;R$[25,27],R$[28,30],R$[31,33],R$[34,36],R$[37,39],R$[40,42],R$[43,45],R$[46,48],S1,S2
448 4490 PRINT USING 4600;R$[49,51],R$[52,54],R$[55,57],R$[58,60],R$[61,63],R$[64,66],R$[67,69],R$[70,72],E
449 4500 PRINT USING 4610;S$[1,3],S$[4,6],S$[7,9],S$[10,12],S$[13,15],S$[16,18],S$[19,21],S$[22,24],P
450 4510 PRINT USING 4620;S$[25,27],S$[28,30],S$[31,33],S$[34,36],S$[37,39],S$[40,42],S$[43,45],S$[46,48],S
451 4520 PRINT USING 4540
453 4540 IMAGE "---------------------------------"
455 4560 IMAGE 8(X,3A),8X,"STARDATE",8X,5D
456 4570 IMAGE 8(X,3A),8X,"CONDITION",8X,6A
457 4580 IMAGE 8(X,3A),8X,"QUADRANT",9X,D,",",D
458 4590 IMAGE 8(X,3A),8X,"SECTOR",11X,D,",",D
459 4600 IMAGE 8(X,3A),8X,"ENERGY",9X,6D
460 4610 IMAGE 8(X,3A),8X,"PHOTON TORPEDOES",3D
461 4620 IMAGE 8(X,3A),8X,"SHIELDS",8X,6D
462 4630 IF D[8] >= 0 THEN 4660
463 4640 PRINT "COMPUTER DISABLED"
465 4660 PRINT "COMPUTER ACTIVE AND AWAITING COMMAND";
467 4680 GOTO A+1 OF 4740,4830,4880
468 4690 PRINT "FUNCTIONS AVAILABLE FROM COMPUTER"
469 4700 PRINT " 0 = CUMULATIVE GALACTIC RECORD"
470 4710 PRINT " 1 = STATUS REPORT"
471 4720 PRINT " 2 = PHOTON TORPEDO DATA"
473 4740 PRINT USING 4750;Q1,Q2
474 4750 IMAGE "COMPUTER RECORD OF GALAXY FOR QUADRANT ",D,",",D
475 4760 PRINT USING 5330
476 4770 PRINT USING 5360
478 4790 PRINT USING 5350;I,Z[I,1],Z[I,2],Z[I,3],Z[I,4],Z[I,5],Z[I,6],Z[I,7],Z[I,8]
479 4800 PRINT USING 5360
482 4830 PRINT "\012 STATUS REPORT\012"
483 4840 PRINT "NUMBER OF KLINGONS LEFT ="K9
484 4850 PRINT "NUMBER OF STARDATES LEFT ="(T0+T9)-T
485 4860 PRINT "NUMBER OF STARBASES LEFT ="B9
490 4910 IF K[I,3] <= 0 THEN 5260
496 4970 PRINT USING 4980;Q1,Q2,S1,S2
497 4980 IMAGE "YOU ARE AT QUADRANT ( ",D,",",D," ) SECTOR ( ",D,",",D," )"
498 4990 PRINT "SHIP'S & TARGET'S COORDINATES ARE";
502 5030 IF X<0 THEN 5130
503 5040 IF A<0 THEN 5190
504 5050 IF X>0 THEN 5070
505 5060 IF A=0 THEN 5150
507 5080 IF ABS(A) <= ABS(X) THEN 5110
508 5090 PRINT "DIRECTION ="C1+(((ABS(A)-ABS(X))+ABS(A))/ABS(A))
510 5110 PRINT "DIRECTION ="C1+(ABS(A)/ABS(X))
512 5130 IF A>0 THEN 5170
513 5140 IF X=0 THEN 5190
519 5200 IF ABS(A) >= ABS(X) THEN 5230
520 5210 PRINT "DIRECTION ="C1+(((ABS(X)-ABS(A))+ABS(X))/ABS(X))
522 5230 PRINT "DIRECTION ="C1+(ABS(X)/ABS(A))
523 5240 PRINT "DISTANCE ="(SQR(X^2+A^2))
524 5250 IF H8=1 THEN 5320
527 5280 PRINT "DO YOU WANT TO USE THE CALCULATOR";
529 5300 IF A$="YES" THEN 4970
530 5310 IF A$ <> "NO" THEN 5280
532 5330 IMAGE " 1 2 3 4 5 6 7 8"
533 5340 IMAGE "---------------------------------------------------"
534 5350 IMAGE D,8(3X,3D)
535 5360 IMAGE " ----- ----- ----- ----- ----- ----- ----- -----"
536 5370 IMAGE " WARP ENGINES SHUTDOWN AT SECTOR ",D,",",D," DUE TO BAD NAVIGATION"
537 5380 R1=INT(RND(1)*8+1)
538 5390 R2=INT(RND(1)*8+1)
543 5440 IF Z3=0 THEN 5380
550 5510 REM ****** INSERTION IN STRING ARRAY FOR QUADRANT ******
551 5520 S8=Z1*24+Z2*3-26
552 5530 IF S8>72 THEN 5560
555 5560 IF S8>144 THEN 5590
556 5570 R$[S8-72,S8-70]=A$
558 5590 S$[S8-144,S8-142]=A$
560 5610 REM **** PRINTS DEVICE NAME FROM ARRAY *****
562 5630 IF S8>72 THEN 5660
563 5640 PRINT D$[S8,S8+11];
565 5660 PRINT E$[S8-72,S8-61];
567 5680 REM ******* STRING COMPARISON IN QUADRANT ARRAY **********
570 5690 S8=Z1*24+Z2*3-26
572 5710 IF S8>72 THEN 5750
573 5720 IF Q$[S8,S8+2] <> A$ THEN 5810
576 5750 IF S8>144 THEN 5790
577 5760 IF R$[S8-72,S8-70] <> A$ THEN 5810
580 5790 IF S$[S8-144,S8-142] <> A$ THEN 5810
583 5820 PRINT " INSTRUCTIONS:"
584 5830 PRINT "<*> = ENTERPRISE"
585 5840 PRINT "+++ = KLINGON"
586 5850 PRINT ">!< = STARBASE"
587 5860 PRINT " * = STAR"
588 5870 PRINT "COMMAND 0 = WARP ENGINE CONTROL"
589 5880 PRINT " 'COURSE' IS IN A CIRCULAR NUMERICAL 4 3 2"
590 5890 PRINT " VECTOR ARRANGEMENT AS SHOWN. \ ^ /"
591 5900 PRINT " INTERGER AND REAL VALUES MAY BE \^/"
592 5910 PRINT " USED. THEREFORE COURSE 1.5 IS 5 ----- 1"
593 5920 PRINT " HALF WAY BETWEEN 1 AND 2. /^\"
595 5940 PRINT " A VECTOR OF 9 IS UNDEFINED, BUT 6 7 8"
596 5950 PRINT " VALUES MAY APPROACH 9."
598 5970 PRINT " ONE 'WARP FACTOR' IS THE SIZE OF"
599 5980 PRINT " ONE QUADRANT. THEREFORE TO GET"
600 5990 PRINT " FROM QUADRANT 6,5 TO 5,5 YOU WOULD"
601 6000 PRINT " USE COURSE 3, WARP FACTOR 1"
602 6010 PRINT "COMMAND 1 = SHORT RANGE SENSOR SCAN"
603 6020 PRINT " PRINTS THE QUADRANT YOU ARE CURRENTLY IN, INCLUDING"
604 6030 PRINT " STARS, KLINGONS, STARBASES, AND THE ENTERPRISE; ALONG"
605 6040 PRINT " WITH OTHER PERTINATE INFORMATION."
606 6050 PRINT "COMMAND 2 = LONG RANGE SENSOR SCAN"
607 6060 PRINT " SHOWS CONDITIONS IN SPACE FOR ONE QUADRANT ON EACH SIDE"
608 6070 PRINT " OF THE ENTERPRISE IN THE MIDDLE OF THE SCAN. THE SCAN"
609 6080 PRINT " IS CODED IN THE FORM XXX, WHERE THE UNITS DIGIT IS THE"
610 6090 PRINT " NUMBER OF STARS, THE TENS DIGIT IS THE NUMBER OF STAR-"
611 6100 PRINT " BASES, THE HUNDREDS DIGIT IS THE NUMBER OF KLINGONS."
612 6110 PRINT "COMMAND 3 = PHASER CONTROL"
613 6120 PRINT " ALLOWS YOU TO DESTROY THE KLINGONS BY HITTING HIM WITH"
614 6130 PRINT " SUITABLY LARGE NUMBERS OF ENERGY UNITS TO DEPLETE HIS "
615 6140 PRINT " SHIELD POWER. KEEP IN MIND THAT WHEN YOU SHOOT AT"
616 6150 PRINT " HIM, HE GONNA DO IT TO YOU TOO."
617 6160 PRINT "COMMAND 4 = PHOTON TORPEDO CONTROL"
618 6170 PRINT " COURSE IS THE SAME AS USED IN WARP ENGINE CONTROL"
619 6180 PRINT " IF YOU HIT THE KLINGON, HE IS DESTROYED AND CANNOT FIRE"
620 6190 PRINT " BACK AT YOU. IF YOU MISS, HE WILL SHOOT HIS PHASERS AT"
622 6210 PRINT " NOTE: THE LIBRARY COMPUTER (COMMAND 7) HAS AN OPTION"
623 6220 PRINT " TO COMPUTE TORPEDO TRAJECTORY FOR YOU (OPTION 2)."
624 6230 PRINT "COMMAND 5 = SHIELD CONTROL"
625 6240 PRINT " DEFINES NUMBER OF ENERGY UNITS TO BE ASSIGNED TO SHIELDS"
626 6250 PRINT " ENERGY IS TAKEN FROM TOTAL SHIP'S ENERGY."
627 6260 PRINT "COMMAND 6 = DAMAGE CONTROL REPORT"
628 6270 PRINT " GIVES STATE OF REPAIRS OF ALL DEVICES. A STATE OF REPAIR"
629 6280 PRINT " LESS THAN ZERO SHOWS THAT THAT DEVICE IS TEMPORARALY"
630 6290 PRINT " DAMAGED."
631 6300 PRINT "COMMAND 7 = LIBRARY COMPUTER"
632 6310 PRINT " THE LIBRARY COMPUTER CONTAINS THREE OPTIONS:"
633 6320 PRINT " OPTION 0 = CUMULATIVE GALACTIC RECORD"
634 6330 PRINT " SHOWS COMPUTER MEMORY OF THE RESULTS OF ALL PREVIOUS"
635 6340 PRINT " LONG RANGE SENSOR SCANS"
636 6350 PRINT " OPTION 1 = STATUS REPORT"
637 6360 PRINT " SHOWS NUMBER OF KLINGONS, STARDATES AND STARBASES"
639 6380 PRINT " OPTION 2 = PHOTON TORPEDO DATA"
640 6390 PRINT " GIVES TRAJECTORY AND DISTANCE BETWEEN THE ENTERPRISE"
641 6400 PRINT " AND ALL KLINGONS IN YOUR QUADRANT"