A large commit.
[pdp8.git] / sw / src / basic / STARTR.BA
CommitLineData
81e70d48
PH
110 REM ********** STAR TREK SPACE SIMULATOR **********
220 REM
330 PRINT\PRINT\PRINT "STAR TREK SPACE SIMULATOR"
440 RANDOMIZE
570 DEF FNA(X)=INT(X*RND(1)+1)
680 DIM G(8,8),Z$(20),X$(24)
790 T0=(FNA(20)+20)*100
891 T=T0
9100 E=3000
10110 P=15
11120 S=0
12130 X$="------------------------"
13140 DEF FND(D)=SQR((K(I,1)-S1)^2+(K(I,2)-S2)^2)
14150 Q1=FNA(8)
15151 Q2=Q1
16152 S1=Q1
17153 S2=Q1
18160 DIM C(9,2)
19161 FOR I=1 TO 9\FOR J=1 TO 2\C(I,J)=1\NEXT J\NEXT I
20170 C(2,1)=-1\C(3,1)=-1\C(4,1)=-1\C(4,2)=-1\C(5,2)=-1\C(6,2)=-1
21180 C(1,1)=0\C(3,2)=0\C(5,1)=0\C(7,2)=0\C(9,1)=0
22190 DIM D(6)\FOR I=1 TO 6\D(I)=0\NEXT I
23200 B9=0\K9=0
24210 FOR I=1 TO 8
25220 FOR J=1 TO 8
26230 K3=0\B3=0
27240 IF RND(1)<.8 THEN 270
28250 K3=FNA(3)
29260 K9=K9+K3
30270 IF RND(1)<.96 THEN 300
31280 B3=1
32290 B9=B9+1
33300 S3=FNA(5)
34310 G(I,J)=K3*100+B3*10+S3
35320 NEXT J
36330 NEXT I
37340 IF K9=0 THEN 200\IF B9=0 THEN 200
38350 GOTO 3570
39360 IF Q1>=1 THEN 380
40370 S1=1\Q1=1
41380 IF Q1<=8 THEN 400
42390 S1=8\Q1=8
43400 IF Q2>=1 THEN 420
44410 S2=1\Q2=1
45420 IF Q2<=8 THEN 440
46430 S2=8\Q2=8
47440 X=G(Q1,Q2)/100
48450 K3=INT(X)
49460 B3=INT((X-K3)*10)
50470 S3=G(Q1,Q2)-((B3*10)+(K3*100))
51480 IF K3=0 THEN 520
52490 PRINT "COMBAT AREA","CONDITION RED"
53500 IF S>(K3*100) THEN 520
54510 PRINT " SHIELDS DANGEROUSLY LOW"
55520 DIM K(3,3)\FOR I=1 TO 3\FOR J=1 TO 3\K(I,J)=0\NEXT J\NEXT I
56530 DIM Q(8,8)\FOR I=1 TO 8\FOR J=1 TO 8\Q(I,J)=0\NEXT J\NEXT I
57540 Q(S1,S2)=1
58550 FOR I=1 TO K3
59560 GOSUB 3500
60570 Q(R1,R2)=2
61580 K(I,1)=R1
62590 K(I,2)=R2
63600 K(I,3)=200
64610 NEXT I
65620 IF B3=0 THEN 650
66630 GOSUB 3500
67640 Q(R1,R2)=4
68650 FOR I=1 TO S3
69660 GOSUB 3500
70670 Q(R1,R2)=3
71680 NEXT I
72690 GOSUB 2600
73700 PRINT "COMMAND";
74710 INPUT A
75720 IF A<1 THEN 780\IF A>5 THEN 780\IF A<>INT(A) THEN 780
76730 R1=A+1
77740 IF D(R1)>=0 THEN 780
78750 GOSUB 3420
79760 PRINT Z$;" NOT OPERATIONAL."
80770 GOTO 700
81780 IF A+1=1 GOTO 890\IF A+1=2 GOTO 1520\IF A+1=3 GOTO 1640
82781 IF A+1=4 GOTO 1800\IF A+1=5 GOTO 2200\IF A+1=6 GOTO 3010
83782 IF A+1=7 GOTO 3550
84790 PRINT
85800 PRINT "0=SET COURSE";TAB(20);"4 3 2"
86810 PRINT "1=LONG RANGE SCAN";TAB(21);PNT(220);" ^ /"
87820 PRINT "2=PHASER CTRL.";TAB(22);PNT(220);"^/"
88830 PRINT "3=TORPEDO CTRL.";TAB(18);"5 ------- 1"
89840 PRINT "4=SHIELDS";TAB(22);"/^";PNT(220)
90850 PRINT "5=LIBRARY COMPUTER";TAB(21);"/ ^ ";PNT(220)
91860 PRINT "6=RESIGNATION";TAB(20);"6 7 8"
92870 PRINT
93880 GOTO 700
94890 PRINT "COURSE (1-8)";
95900 INPUT C1
96910 IF C1<1 THEN 700\IF C1>=9 THEN 700
97920 PRINT "WARP FACTOR (0-8)";
98930 INPUT W1
99940 IF W1<=0 THEN 700\IF W1>8 THEN 700
100950 IF D(1)>=0 THEN 980\IF W1<=.5 THEN 980
101960 PRINT "ENGINES ARE DAMAGED. MAXIMUM SPEED = WARP 0.5"
102970 GOTO 920
103980 IF E-(W1*8)>0 THEN 1030
104990 IF S<1 THEN 2470
1051000 PRINT "YOU ONLY HAVE";E;"UNITS. SUGGEST YOU TRANSFER FROM"
1061010 PRINT "SHIELDS WHICH HAVE";S;"UNITS."
1071020 GOTO 700
1081030 FOR I=1 TO 6
1091040 IF D(I)>=0 THEN 1060
1101050 D(I)=D(I)+1
1111060 NEXT I
1121070 IF FNA(10)<>5 THEN 1120\IF W1<2 THEN 1120
1131080 R1=FNA(6)
1141090 D(R1)=D(R1)-FNA(5)
1151100 GOSUB 3420
1161110 PRINT\PRINT "DAMAGE CONTROL REPORTS '";Z$;"' DAMAGED."\PRINT
1171120 N=INT(W1*8)
1181130 Q(S1,S2)=0
1191140 X=S1
1201150 Y=S2
1211160 C2=INT(C1)
1221170 X1=C(C2,1)+(C(C2+1,1)-C(C2,1))*(C1-C2)
1231180 X2=C(C2,2)+(C(C2+1,2)-C(C2,2))*(C1-C2)
1241190 FOR I=1 TO N
1251200 S1=S1+X1
1261210 S2=S2+X2
1271220 IF S1<1 THEN 1360\IF S1>8 THEN 1360\IF S2<1 THEN 1360
1281221 IF S2>8 THEN 1360
1291230 IF Q(INT(S1),INT(S2))=0 THEN 1270
1301240 S1=S1-X1
1311250 S2=S2-X2
1321260 PRINT "DANGER AHEAD, ENTERPRISE STOPPED"\GOTO 1280
1331270 NEXT I
1341280 S1=INT(S1)
1351290 S2=INT(S2)
1361300 Q(S1,S2)=1
1371310 E=E-N
1381320 IF W1<1 THEN 690
1391330 T=T+1
1401340 IF T>T0+30 THEN 2500
1411350 GOTO 690
1421360 X=Q1*8+X+X1*N
1431370 Y=Q2*8+Y+X2*N
1441380 Q1=INT(X/8)
1451390 Q2=INT(Y/8)
1461400 S1=INT(X-Q1*8+.5)
1471410 S2=INT(Y-Q2*8+.5)
1481420 IF S1>0 THEN 1450
1491430 Q1=Q1-1
1501440 S1=8
1511450 IF S2>0 THEN 1480
1521460 Q2=Q2-1
1531470 S2=8
1541480 T=T+1
1551490 E=E-N+5
1561500 IF T>T0+30 THEN 2500
1571510 GOTO 360
1581520 PRINT X$(1,17)
1591525 DIM N(3)
1601530 FOR I=Q1-1 TO Q1+1
1611540 N(1)=0\N(2)=0\N(3)=0
1621550 FOR J=Q2-1 TO Q2+1
1631560 IF I<1 THEN 1580\IF I>8 THEN 1580
1641565 IF J<1 THEN 1580\IF J>8 THEN 1580
1651570 N(J-Q2+2)=G(I,J)
1661580 NEXT J
1671590 PRINT ":";N(1);TAB(7);":";N(2);TAB(13);":";N(3);TAB(19);":";
1681600 PRINT X$(1,17)
1691610 NEXT I
1701620 GOTO 700
1711640 IF K3=0 THEN 2350
1721650 PRINT "ENERGY AVAILABLE =";E
1731660 PRINT "NUMBER OF UNITS TO FIRE =";
1741670 INPUT X
1751680 IF X<1 THEN 700
1761690 IF E-X<0 THEN 1660
1771700 E=E-X
1781710 FOR I=1 TO 3
1791720 IF K(I,3)=0 THEN 1780
1801730 H=INT(X/K3/(FND(0)))
1811740 K(I,3)=K(I,3)-H
1821750 PRINT H;"UNIT HIT ON KLINGON"
1831760 IF K(I,3)>0 THEN 1780
1841770 GOSUB 2050
1851780 NEXT I
1861790 GOTO 2030
1871800 IFP>0 THEN 1830
1881810 PRINT "ALL PHOTON TORPEDOES EXPENDED."
1891820 GOTO 700
1901830 PRINT "TORPEDO COURSE (1-9)";
1911840 INPUT C1
1921850 IF C1<1 THEN 700\IF C1=>9 THEN 700
1931860 C2=INT(C1)
1941870 X1=C(C2,1)+(C(C2+1,1)-C(C2,1))*(C1-C2)
1951880 X2=C(C2,2)+(C(C2+1,2)-C(C2,2))*(C1-C2)
1961890 X=S1
1971900 Y=S2
1981910 P=P-1
1991920 PRINT
2001930 X=X+X1
2011940 Y=Y+X2
2021950 IF X<1 THEN 2180\IF X>8 THEN 2180\IF Y<1 THEN 2180\IF Y>8 THEN 2180
2031960 IF Q(INT(X),INT(Y))<>0 THEN 1970
2041961 IF Q(INT(X+.5),INT(Y+.5))<>0 THEN 1970
2051962 GOTO 1930
2061970 FOR I=1 TO 3
2071980 IF INT(X)<>K(I,1) THEN 1990
2081981 IF INT(Y)<>K(I,2) THEN 1990
2091982 GOTO 2020
2101990 IF INT(X+.5)<>K(I,1) THEN 2000
2111991 IF INT(Y+.5)<>K(I,2) THEN 2000
2121993 GOTO 2020
2132000 NEXT I
2142010 GOTO 2120
2152020 GOSUB 2050
2162030 GOSUB 2370
2172040 GOTO 700
2182050 K(I,3)=0\Q(K(I,1),K(I,2))=0
2192060 PRINT "***KLINGON DESTROYED***"
2202070 K3=K3-1
2212080 K9=K9-1
2222090 IF K9=0 THEN 2550
2232100 G(Q1,Q2)=G(Q1,Q2)-100
2242110 RETURN
2252120 IF Q(INT(X),INT(Y))<>3 THEN 2150
2262130 PRINT "YOU CAN'T DESTROY STARS, SILLY!"
2272140 GOTO 2180
2282150 PRINT "***STARBASE DESTROYED***"
2292160 PRINT "YOU ARE HEREBY RELIEVED OF DUTY!! CONGRATULATIONS!"
2302170 GOTO 2530
2312180 PRINT "TORPEDO MISSED."
2322190 GOTO 2030
2332200 PRINT "ENERGY AVAILABLE";E+5
2342210 PRINT "NUMBER OF UNITS TO SHIELDS";
2352220 INPUT X
2362230 IF X<0 THEN 700
2372240 IF E+S-X<0 THEN 2210
2382250 E=E+S-X
2392260 S=X
2402270 GOTO 700
2412280 PRINT\PRINT "DEVICE","STATE OF REPAIR"
2422290 FOR R1=1 TO 6
2432300 GOSUB 3420
2442310 PRINT Z$,D(R1)
2452320 NEXT R1
2462330 PRINT
2472340 GOTO 700
2482350 PRINT "SHORT RANGE SENSORS REPORT NO KLINGONS IN THIS QUADRENT."
2492360 GOTO 700
2502370 IF C$="DOCKED" THEN 2460
2512380 IF K3=0 THEN 2460
2522390 FOR I=1 TO 3
2532400 IF K(I,3)=0 THEN 2450
2542410 H=INT(K(I,3)/FND(0)+1)
2552420 S=S-H
2562430 PRINT H;"UNIT HIT ON ENTERPRISE."
2572440 IF S<0 THEN 2520
2582450 NEXT I
2592460 RETURN
2602470 PRINT "***FATAL ERROR***"
2612480 PRINT "THE ENTERPRISE IS DEAD IN SPACE, AND MUST BE EVACUATED!!"
2622490 GOTO 2530
2632500 PRINT\PRINT "IT IS STARDATE";T
2642510 GOTO 2530
2652520 PRINT\PRINT " *** THE ENTERPRISE HAS BEEN DESTROYED ***"
2662530 PRINT\PRINT "THE FEDERATION WILL BE CONQUERED!!!"
2672540 GOTO 3560
2682550 PRINT
2692560 PRINT "THE LAST KLINGON CRUSER HAS BEEN DESTROYED!!"
2702570 PRINT "THE FEDERATION HAS BEEN SAVED!!"
2712580 PRINT
2722590 GOTO 3560
2732600 FOR I=S1-1 TO S1+1
2742610 FOR J=S2-1 TO S2+1
2752620 IF I<1 THEN 2640\IF I>8 THEN 2640
2762621 IF J<1 THEN 2640\IF J>8 THEN 2640
2772630 IF Q(I,J)=4 THEN 2670
2782640 NEXT J
2792650 NEXT I
2802660 GOTO 2730
2812670 C$="DOCKED"
2822680 E=3000
2832690 P=15
2842700 FOR I=1 TO 6\D(I)=0\NEXT I
2852710 S=0
2862720 GOTO 2810
2872730 PRINT
2882740 IF K3>0 THEN 2780
2892750 IF E<300 THEN 2800
2902760 C$="GREEN"
2912770 GOTO 2810
2922780 C$="RED"
2932790 GOTO 2810
2942800 C$="YELLOW"
2952810 PRINT X$
2962820 Z=0
2972830 GOSUB 3330
2982840 PRINT
2992850 GOSUB 3330
3002860 PRINT "STARDATE ";T
3012870 GOSUB 3330
3022880 PRINT "CONDITION ";C$
3032890 GOSUB 3330
3042900 PRINT "ENERGY ";E
3052910 GOSUB 3330
3062920 PRINT "TORPEDOES ";P
3072930 GOSUB 3330
3082940 PRINT "SHIELDS ";S
3092950 GOSUB 3330
3102960 PRINT "KLINGONS ";K9
3112970 GOSUB 3330
3122980 PRINT
3132990 PRINT X$
3143000 RETURN
3153010 PRINT "COMPUTER ACTIVE AND AWAITING COMMAND";
3163020 INPUT A
3173030 IF A+1=1 GOTO 2280\IF A+1=2 GOTO 3100\IF A+1=3 GOTO 3310
3183040 PRINT "FUNCTIONS AVAILABLE FROM COMPUTER:"
3193050 PRINT " 0=DAMAGE REPORT"
3203060 PRINT " 1=PHOTON TORPEDO DATA"
3213070 PRINT " 2=SHORT RANGE SCAN"
3223080 PRINT
3233090 GOTO 3010
3243100 PRINT
3253110 FOR I=1 TO 3
3263120 IF K(I,3)<=0 THEN 3200
3273130 X=K(I,2)-S2
3283140 Y=S1-K(I,1)
3293150 IF X=0 THEN 3240
3303160 A=INT(((57.3*ATN(Y/X))/45+1)*100)/100
3313170 IF X<=0 THEN 3180\IF Y=>0 THEN 3180\GOTO 3290
3323180 IF X<0 THEN 3220
3333190 PRINT "DIRECTION=";A
3343200 NEXT I
3353210 GOTO 700
3363220 A=A+4
3373230 GOTO 3190
3383240 IF Y<0 THEN 3270
3393250 A=3
3403260 GOTO 3190
3413270 A=7
3423280 GOTO 3190
3433290 A=A+8
3443300 GOTO 3190
3453310 GOSUB 2600
3463320 GOTO 700
3473330 REM *****OUTPUT QUADRENT*****
3483340 Z=Z+1
3493350 FOR I=1 TO 8
3503360 Z$=" <*>+++ * >!<"
3513370 PRINT SEG$(Z$,Q(Z,I)*3+1,Q(Z,I)*3+3);
3523380 NEXT I
3533390 IF Z=1 THEN 3410\IF Z=8 THEN 3410
3543400 PRINT " ";
3553410 RETURN
3563420 REM *****PRINTS DEVICE NAME*****
3573430 DIM Z9$(6,15)\Z9$(1)="WARP ENGINES"\Z9$(2)="SCANNERS"
3583440 Z9$(3)="PHASER BANKS"\Z9$(4)="TORPEDO TUBES"
3593450 Z9$(5)="SHIELD CONTROL"\Z9$(6)="COMPUTER"
3603470 Z$=Z9$(R1)
3613490 RETURN
3623500 REM ***PLACEMENT IN QUADRANT ARRAY***
3633510 R1=FNA(8)
3643520 R2=FNA(8)
3653530 IF Q(R1,R2)<>0 THEN 3510
3663540 RETURN
3673550 PRINT\PRINT "YOUR RESIGNATION HAS BEEN ACCEPTED."
3683560 STOP
3693570 PRINT
3703572 PRINT "DO YOU NEED INSTRUCTIONS";
3713580 INPUT A4$
3723590 PRINT\PRINT\PRINT
3733600 IF A4$="N" THEN 440\IF A$="NO" THEN 440
3743601 IF A4$="Y" THEN 3605\IF A4$="YES" THEN 3605\GOTO 3570
3753605 PRINT TAB(20);"STAR TREK SPACE SIMULATOR"\PRINT
3763606 PRINT "AS CAPTAIN OF THE ENTERPRISE, YOU HAVE 30 STARDATES"
3773607 PRINT "TO DESTROY THE KLINGONS. ONE STARDATE TRANSPIRES EACH TIME"
3783608 PRINT "YOU MOVE TO A NEW SECTOR. (THE UNIVERSE IS 8X8 SECTORS)."
3793609 PRINT\PRINT "SCAN CHART SYMBOLS:"
3803610 PRINT TAB(5);"<*> = ENTERPRISE"
3813620 PRINT TAB(5);" * = STAR"
3823630 PRINT TAB(5);"+++ = KLINGON"
3833640 PRINT TAB(5);">!< = STARBASE"
3843650 PRINT\PRINT "OPERATING COMMANDS FOR THE ENTERPRISE:"
3853660 PRINT\PRINT "COMMAND 0 = WARP ENGINES."
3863670 PRINT " COURSE IS IN A CIRCULAR VECTOR AS SHOWN.";TAB(50);"4 3 2"
3873680 PRINT " REAL VALUES MAY BE USED. FOR EXAMPLE";
3883681 PRINT TAB(51);PNT(220);" ^ /"
3893690 PRINT " 1.2 WOULD BE HALF WAY BETWEEN 1 AND 2.";
3903691 PRINT TAB(52);PNT(220);"^/"
3913700 PRINT TAB(48);"5 ------- 1"
3923710 PRINT " A 'WARP FACTOR' IS THE SIZE OF ONE QUARDRANT.";
3933711 PRINT TAB(52);"/^";PNT(220)
3943720 PRINT TAB(51);"/ ^ ";PNT(220)
3953730 PRINT TAB(50);"6 7 8"
3963740 PRINT\PRINT "COMMAND 1 = LONG RANGE SCAN."
3973750 PRINT " CODED IN THE FORM XXX, WHERE THE UNITS ARE THE NUMBER"
3983760 PRINT " OF STARS, TENS THE NUMBER OF STARBASES, AND HUNDREDS"
3993770 PRINT " THE NUMBER OF KLINGONS."
4003780 PRINT\PRINT "COMMAND 2 = PHASERS."
4013790 PRINT " YOU MAY DESTROY THE KLINGON BY USING ENOUGH PHASER"
4023800 PRINT " POWER AS TO DEPLETE HIS SHIELDS. KEEP IN MIND THAT WHEN"
4033810 PRINT " YOU FIRE AT HIM, HE WILL FIRE BACK!"
4043820 PRINT\PRINT "COMMAND 3 = PHOTON TORPEDOES."
4053830 PRINT " COURSE IS THE SAME AS WITH WARP ENGINES. THE LIBRARY"
4063840 PRINT " COMPUTER WILL COMPUTE TRAJECTORIES FOR YOU (OPTION 1)."
4073850 PRINT\PRINT "COMMAND 4 = SHIELDS."
4083860 PRINT " DEFINES THE AMOUNT OF ENERGY TO BE ASSIGNED TO SHIELDS."
4093870 PRINT\PRINT "COMMAND 5 = LIBRARY COMPUTER."
4103880 PRINT " OPTION 0 = DAMMAGE REPORT."
4113890 PRINT " A STATE OF REPAIR OF LESS THAN ZERO INDICATES THAT"
4123900 PRINT " THE DEVICE IS TEMPORARILY DISABLED."
4133910 PRINT " OPTION 1 = PHOTON TORPEDO DATA."
4143920 PRINT " GIVES DIRECTION TO ALL KLINGONS IN YOUR QUADRANT."
4153930 PRINT " OPTION 2 = SHORT RANGE SCAN."
4163940 PRINT " ALSO GIVEN AUTOMATICALLY AFTER SUCCESSFUL COMPLETION"
4173950 PRINT " OF WARP ENGINE MANUVERS."
4183960 PRINT\PRINT "COMMAND 6 = RESIGNATION."
4193970 PRINT\PRINT "GOOD LUCK!"
4203980 GOTO 440
4213990 END
422