10 COM D$[11] 20 COM A$[20],B$[20],C$[20],M$[20],N$[20],O$[20],P$[20] 30 COM Q$[20],R$[20],S$[20],V$[20],X$[72],Y$[72],Z$[72] 40 COM A[50],B[50],C[50],D[50],E[50],F[50],G[10],H[10],I[50],J[50] 50 COM K[50],L[50],M[10,6],N[10,4],O[10],P[10,4],Q[10,4],R[10,4] 60 COM S[10,8],T[10,9],U[10,6],V[10,6],W[10],X[50],Y[50],Z[10,10] 70 COM A,D1,D2,I,I1,I2,K1,K2,K3,K4,N,N1,N2,O,O1,O2,P1,P2,P3,P4 80 COM T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,Z9 90 REM 100 REM TREK73: AN ADVANCED STAR TREK BATTLE SIMULATION 110 REM PROGRAMED BY WILLIAM K. CHAR AND ASSOCIATES, WILSON 120 REM EDP, 400 MANSELL, SAN FRAN, CA 94134, (415) 239-6460 130 REM 26 NOVEMBER 1973 ***FOR AUTHORIZED PERSONNEL ONLY*** 140 REM 150 REM MODIFIED BY DAVID SHAYER - SMHS - 6/04/80 160 REM 170 DEF FNA(X)=X*1.74533E-02 180 DEF FNB(X)=X*57.2958 190 DEF FNC(X)=X-INT(X*2.77778E-03)*360 200 DEF FNR(X)=INT(X*RND(1))+1 210 REM 220 GOTO O OF 230,510,730,980,1230,1490,1740,2060,2360,2720 230 REM ----- (1) FIRE BANKS ----- 240 PRINT " FIRE PHASERS [1-4] "; 250 GOSUB 3860 260 IF W=0 THEN 3170 270 IF W>10 THEN 3190 280 PRINT " SPREAD [10-45] "; 290 ENTER T2,T,B 300 PRINT 310 IF T<0 THEN 3170 320 IF B<10 OR B>45 THEN 3190 330 M[I,K1+1]=B 340 L1=0 350 FOR L=1 TO W 360 K=W[L] 370 IF K<1 OR K>K1 THEN 430 380 IF M[I,K]<0 THEN 430 390 IF M[I,K] >= 100 THEN 470 400 M[I,K]=M[I,K]+100 410 GOSUB 4070 420 IF M[I,K] >= 100 THEN 470 430 IF L1 THEN 460 440 PRINT "COMPUTER: PHASER(S) "; 450 L1=1 460 PRINT K; 470 NEXT L 480 IF L1=0 THEN 3310 490 PRINT "UNABLE TO FIRE." 500 GOTO 3310 510 REM ----- (2) FIRE TUBES ----- 520 PRINT " FIRE TUBES [1-6] "; 530 GOSUB 3860 540 IF W=0 THEN 3170 550 IF W>10 THEN 3190 560 L1=0 570 FOR L=1 TO W 580 K=W[L] 590 IF K<1 OR K>K2 THEN 690 600 IF T[I,K]<0 OR V[I,K]=0 THEN 650 610 IF T[I,K] >= 100 THEN 690 620 T[I,K]=T[I,K]+100 630 GOSUB 4240 640 IF T[I,K] >= 100 THEN 690 650 IF L1 THEN 680 660 PRINT "COMPUTER: TUBE(S) "; 670 L1=1 680 PRINT K; 690 NEXT L 700 IF L1=0 THEN 3310 710 PRINT "UNABLE TO FIRE." 720 GOTO 3310 730 REM ----- (3) LOCK PHASERS ----- 740 IF Z[I,1] THEN 3230 750 PRINT " LOCK PHASERS [1-4] "; 760 GOSUB 3860 770 IF W=0 THEN 3170 780 IF W>10 THEN 3190 790 PRINT " ON [WHOM] "; 800 GOSUB 3340 810 IF V1>10 THEN 3210 820 L1=0 830 FOR L=1 TO W 840 K=W[L] 850 IF K<1 OR K>K1 THEN 900 860 IF M[I,K]<0 THEN 900 870 M[I,K]=V1 880 GOSUB 4070 890 IF M[I,K]>0 THEN 940 900 IF L1 THEN 930 910 PRINT "COMPUTER: PHASER(S) "; 920 L1=1 930 PRINT K; 940 NEXT L 950 IF L1=0 THEN 3310 960 PRINT "UNABLE TO LOCK." 970 GOTO 3310 980 REM ----- (4) LOCK TUBES ----- 990 IF Z[I,1] THEN 3230 1000 PRINT " LOCK TUBES [1-6] "; 1010 GOSUB 3860 1020 IF W=0 THEN 3170 1030 IF W>10 THEN 3190 1040 PRINT " ON [WHOM] "; 1050 GOSUB 3340 1060 IF V1>10 THEN 3210 1070 L1=0 1080 FOR L=1 TO W 1090 K=W[L] 1100 IF K<1 OR K>K2 THEN 1150 1110 IF T[I,K]<0 THEN 1150 1120 T[I,K]=V1 1130 GOSUB 4240 1140 IF T[I,K] THEN 1190 1150 IF L1 THEN 1180 1160 PRINT "COMPUTER: TUBE(S) "; 1170 L1=1 1180 PRINT K; 1190 NEXT L 1200 IF L1=0 THEN 3310 1210 PRINT "UNABLE TO LOCK." 1220 GOTO 3310 1230 REM ----- (5) TURN PHASERS ----- 1240 PRINT " TURN PHASERS [1-4] "; 1250 GOSUB 3860 1260 IF W=0 THEN 3190 1270 IF W>10 THEN 3190 1280 PRINT " TO [0-360] "; 1290 ENTER T2,T,B 1300 PRINT 1310 IF T<0 THEN 3170 1320 IF B<0 OR B >= 360 THEN 3210 1330 L1=0 1340 FOR L=1 TO W 1350 K=W[L] 1360 IF K<1 OR K>K1 THEN 1410 1370 IF M[I,K]<0 THEN 1410 1380 M[I,K]=0 1390 N[I,K]=B 1400 GOTO 1450 1410 IF L1 THEN 1440 1420 PRINT "COMPUTER: PHASER(S) "; 1430 L1=1 1440 PRINT K; 1450 NEXT L 1460 IF L1=0 THEN 3310 1470 PRINT "UNABLE TO TURN." 1480 GOTO 3310 1490 REM ----- (6) TURN TUBES ----- 1500 PRINT " TURN TUBES [1-6] "; 1510 GOSUB 3860 1520 IF W=0 OR W>10 THEN 3190 1530 PRINT " TO [0-360] "; 1540 ENTER T2,T,B 1550 PRINT 1560 IF T<0 THEN 3170 1570 IF B<0 OR B >= 360 THEN 3210 1580 L1=0 1590 FOR L=1 TO W 1600 K=W[L] 1610 IF K<1 OR K>K2 THEN 1660 1620 IF T[I,K]<0 THEN 1660 1630 T[I,K]=0 1640 U[I,K]=B 1650 GOTO 1700 1660 IF L1 THEN 1690 1670 PRINT "COMPUTER: TUBE(S) "; 1680 L1=1 1690 PRINT K; 1700 NEXT L 1710 IF L1=0 THEN 3310 1720 PRINT "UNABLE TO TURN." 1730 GOTO 3310 1740 REM ----- (7) PHASER STATUS ----- 1750 PRINT '14"PHASERS"'14 1760 PRINT "CONTROL"; 1770 FOR K=1 TO K1 1780 PRINT TAB(8*K+2); 1790 IF M[I,K]>0 THEN 1850 1800 IF M[I,K]=0 THEN 1830 1810 PRINT "DAMAGED"; 1820 GOTO 1880 1830 PRINT "MANUAL"; 1840 GOTO 1880 1850 V=I[M[I,K]] 1860 GOSUB 3460 1870 PRINT V$[1,7]; 1880 NEXT K 1890 PRINT 1900 PRINT "TURNED"; 1910 FOR K=1 TO K1 1920 PRINT TAB(8*K+2);INT(N[I,K]); 1930 NEXT K 1940 PRINT " FIRING $S="M[I,K1+2] 1950 PRINT "LEVEL"; 1960 FOR K=1 TO K1 1970 PRINT TAB(8*K+2);INT(Q[I,K]); 1980 NEXT K 1990 PRINT 2000 PRINT "CHARGE"; 2010 FOR K=1 TO K1 2020 PRINT TAB(8*K+2);INT(R[I,K]); 2030 NEXT K 2040 PRINT 2050 GOTO 3310 2060 REM ----- (8) TUBE STATUS ----- 2070 PRINT '14"TORPEDOES"'14 2080 PRINT "CONTROL"; 2090 FOR K=1 TO K2 2100 PRINT TAB(8*K+2); 2110 IF T[I,K]>0 THEN 2170 2120 IF T[I,K]=0 THEN 2150 2130 PRINT "DAMAGED"; 2140 GOTO 2200 2150 PRINT "MANUAL"; 2160 GOTO 2200 2170 V=I[T[I,K]] 2180 GOSUB 3460 2190 PRINT V$[1,7]; 2200 NEXT K 2210 PRINT 2220 PRINT "TURNED"; 2230 FOR K=1 TO K2 2240 PRINT TAB(8*K+2);INT(U[I,K]); 2250 NEXT K 2260 PRINT 2270 PRINT "LEVELS"; 2280 FOR K=1 TO K2 2290 PRINT TAB(8*K+2);INT(V[I,K]); 2300 NEXT K 2310 PRINT 2320 PRINT "LAUNCH SPEED"T[I,K2+1] 2330 PRINT " TIME DELAY"T[I,K2+2] 2340 PRINT " PROX DELAY"T[I,K2+3] 2350 GOTO 3310 2360 REM ----- (9) LOAD/UNLOAD TUBES ----- 2370 PRINT " [LOAD OR UNLOAD?] "; 2380 ENTER T3,T,X$ 2390 PRINT 2400 X=1 2410 IF X$[1,1]="L" THEN 2440 2420 X=-1 2430 IF X$[1,1]#"U" THEN 3190 2440 PRINT " TUBES [1-6] "; 2450 GOSUB 3860 2460 IF W=0 THEN 3190 2470 IF W>10 THEN 3190 2480 FOR L=1 TO W 2490 K=W[L] 2500 IF K<1 OR K>K2 THEN 2620 2510 IF T[I,K]<0 THEN 2620 2520 IF X>0 THEN 2580 2530 Y=V[I,K] MIN H[I]-F[I] 2540 V[I,K]=V[I,K]-Y 2550 F[I]=F[I]+Y 2560 H[I]=H[I]+Y 2570 GOTO 2620 2580 Y=10-V[I,K] MIN F[I] 2590 V[I,K]=V[I,K]+Y 2600 F[I]=F[I]-Y 2610 H[I]=H[I]-Y 2620 NEXT L 2630 PRINT "SCOTT: TUBE UNITS NOW "; 2640 FOR K=1 TO K2 2650 IF T[I,K]<0 THEN 2680 2660 PRINT INT(V[I,K]); 2670 GOTO 2690 2680 PRINT " -- "; 2690 NEXT K 2700 PRINT "FUEL @"INT(F[I]) 2710 GOTO 3310 2720 REM ----- (10) LAUNCH PROBE ----- 2730 IF Z[I,3] THEN 3250 2740 PRINT "SCOTT: "F[I]"PODS AVAILABLE." 2750 IF F[I]<10 THEN 3270 2760 PRINT N$": NUMBER OF PODS TO LAUNCH [10-40] IS "; 2770 ENTER T3,T,Q1 2780 PRINT 2790 IF T<0 THEN 3170 2800 PRINT " SET TIME DELAY TO [0-15] "; 2810 ENTER T3,T,Q2 2820 PRINT 2830 IF T<0 THEN 3170 2840 PRINT " SET PROXIMITY DELAY TO [50-2000] "; 2850 ENTER T3,T,Q3 2860 PRINT 2870 IF T<0 THEN 3170 2880 IF Q1<10 OR Q1>40 OR Q1>F[I] OR Q2<0 OR Q2>15 THEN 3210 2890 IF Q3<20 OR Q3>2000 THEN 3210 2900 GOSUB 3690 2910 PRINT " LAUNCH TOWARDS [WHOM, IF ANYONE] "; 2920 GOSUB 3340 2930 IF V1>10 THEN 2990 2940 J=V1 2950 GOSUB 3570 2960 J[I3]=V1 2970 C[I3]=D[I3]=B 2980 GOTO 3040 2990 PRINT " COURSE [0-360] "; 3000 ENTER T3,T,D[I3] 3010 PRINT 3020 IF T<0 THEN 3170 3030 IF D[I3]<0 OR D[I3] >= 360 THEN 3210 3040 A[I3]=B[I3]=2 3050 F[I3]=Q1 3060 F[I]=F[I]-Q1 3070 H[I]=H[I]-Q1 3080 I[I3]=I[I]+20 3090 K[I3]=10000-Q2/D1 3100 L[I3]=Q3 3110 C3=FNA(C[I3]) 3120 X[I3]=X[I3]+A[I3]*COS(C3)*100*D1 3130 Y[I3]=Y[I3]+A[I3]*SIN(C3)*100*D1 3140 PRINT "SCOTT: PROBE # "I3"AWAY." 3150 GOTO 3310 3160 REM ----- ERROR MESSAGES ----- 3170 PRINT "**TIME**" 3180 GOTO 3310 3190 PRINT "CHEKOV: WHAT?" 3200 GOTO 3310 3210 PRINT "SPOCK: BAD PARAMETER(S)." 3220 GOTO 3310 3230 PRINT "SPOCK: QUITE IMPOSSIBLE, "O$", OUR COMPUTER IS DEAD." 3240 GOTO 3310 3250 PRINT "SCOTT: PROBE LAUNCHER DESTROYED." 3260 GOTO 3310 3270 PRINT "SCOTT: WE'VE NOT ENOUGH POWER." 3280 REM 3290 REM ----- EXIT ----- 3300 REM 3310 IF O<3 OR O>6 THEN 3330 3320 I=0 3330 CHAIN "*TREK07" 3340 REM ----- NAME COMPARISON SUBROUTINE ----- 3350 ENTER T3,T,X$ 3360 PRINT 3370 IF LEN(X$)=0 THEN 3440 3380 FOR V1=2 TO 10 3390 V=I[V1] 3400 IF NOT V OR V>10 THEN 3430 3410 GOSUB 3460 3420 IF X$[1,1]=V$[1,1] THEN 3450 3430 NEXT V1 3440 V1=11 3450 RETURN 3460 REM ----- NAME SELECTION SUBROUTINE ----- 3470 RESTORE 3480 3480 DATA "BISMARK","CENTAUR","DRADDOCK","FORBIN","KREIGER","SHLURG" 3490 DATA "TRAKKA","VARNOR","WARRIOR" 3500 IF V>1 THEN 3530 3510 V$=P$ 3520 RETURN 3530 FOR V2=2 TO V 3540 READ V$ 3550 NEXT V2 3560 RETURN 3570 REM ----- BEARING SUBROUTINE ----- 3580 X=X[J]-X[I] 3590 Y=Y[J]-Y[I] 3600 IF X=0 THEN 3630 3610 B=ATN(Y/X)*57.2958 3620 GOTO 3640 3630 B=90 3640 IF X >= 0 AND Y >= 0 THEN 3680 3650 B=B+180 3660 IF X<0 THEN 3680 3670 B=B+180 3680 RETURN 3690 REM ----- SLOT I SUBROUTINE ----- 3700 FOR I3=1 TO I2 3710 IF I[I3]=0 THEN 3770 3720 NEXT I3 3730 PRINT 3740 PRINT "GAME WILL TERMINATE BECAUSE OF INABILITY TO COPE WITH" 3750 PRINT "ALL THE JUNK (VESSELS, PROBES, TORPEDOES, ETC) IN SPACE." 3760 STOP 3770 I[I3]=1000 3780 A[I3]=B[I3]=C[I3]=D[I3]=E[I3]=F[I3]=J[I3]=K[I3]=L[I3]=0 3790 X[I3]=X[I] 3800 Y[I3]=Y[I] 3810 FOR I1=I2 TO 1 STEP -1 3820 IF I[I1]>0 THEN 3840 3830 NEXT I1 3840 I[I3]=0 3850 RETURN 3860 REM ----- CONVERSION SUBROUTINE ----- 3870 ENTER T3,T,X$ 3880 PRINT 3890 IF LEN(X$)=0 THEN 4050 3900 Y$="0123456789" 3910 MAT W=ZER[10] 3920 W=0 3930 FOR V2=1 TO LEN(X$) 3940 IF X$[V2,V2]=" " THEN 4030 3950 IF X$[V2,V2]="," THEN 4030 3960 FOR V3=1 TO 10 3970 IF X$[V2,V2]=Y$[V3,V3] THEN 4000 3980 NEXT V3 3990 GOTO 4030 4000 W=W+1 4010 IF W>10 THEN 4030 4020 W[W]=V3-1 4030 NEXT V2 4040 RETURN 4050 W=0 4060 RETURN 4070 REM ----- PHASER TRACKING SUBROUTINE ----- 4080 J=M[I,K] 4090 IF J<100 THEN 4110 4100 J=J-100 4110 IF J=0 THEN 4150 4120 IF I[J]=0 THEN 4180 4130 GOSUB 3570 4140 N[I,K]=FNC(B-C[I]) 4150 IF N[I,K]<125 OR N[I,K]>235 OR Z[I,5] THEN 4170 4160 M[I,K]=J 4170 RETURN 4180 V=I[I] 4190 IF V>1 THEN 4220 4200 GOSUB 3460 4210 PRINT " PHASER "K"DISENGAGING." 4220 M[I,K]=0 4230 RETURN 4240 REM ----- TORPEDO TRACKING SUBROUTINE ----- 4250 J=T[I,K] 4260 IF J<100 THEN 4280 4270 J=J-100 4280 IF J=0 THEN 4320 4290 IF I[J]=0 THEN 4350 4300 GOSUB 3570 4310 U[I,K]=FNC(B-C[I]) 4320 IF U[I,K]<135 OR U[I,K]>225 OR Z[I,5] THEN 4340 4330 T[I,K]=J 4340 RETURN 4350 V=I[I] 4360 IF V>1 THEN 4390 4370 GOSUB 3460 4380 PRINT " TUBE "K"DISENGAGING." 4390 T[I,K]=0 4400 RETURN 4410 END