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 1280 230 GOTO O-10 OF 240,880,1280,1760,1760,2010,2180,2180,2720,2990 240 REM ----- (11) PROBE CONTROL ----- 250 K=0 260 FOR J=1 TO I1 270 IF I[J]#I[I]+20 THEN 420 280 IF K THEN 320 290 PRINT 300 PRINT "PROBE BEARNG RANGE COURSE TIME PROX UNITS DIST TARGET" 310 K=1 320 GOSUB 3770 330 R=SQR(X*X+Y*Y) 340 PRINT J;INT(B);INT(R);TAB(21);INT(C[J]);INT((10000-K[J])*D1); 350 PRINT INT(L[J]);INT(F[J]); 360 IF J[J]=0 THEN 410 370 V=I[J[J]] 380 GOSUB 3660 390 PRINT INT(SQR((X[J]-X[J[J]])^2+(Y[J]-Y[J[J]])^2)+.5);TAB(55);V$ 400 GOTO 420 410 PRINT 0;TAB(55);"NONE" 420 NEXT J 430 PRINT 440 IF K THEN 470 450 PRINT "SULU: WHAT PROBES?" 460 GOTO 3530 470 PRINT "CHEKOV: DETONATE ALL PROBES?" 480 PRINT N$": [YES OR NO] "; 490 ENTER T2,T,X$ 500 PRINT 510 IF LEN(X$)=0 THEN 590 520 IF X$[1,1]="N" THEN 590 530 PRINT "CHEKOV: AYE, "O$"." 540 FOR J=1 TO I1 550 IF I[J]#I[I]+20 THEN 570 560 K[J]=10000 570 NEXT J 580 GOTO 3530 590 PRINT " CONTROL PROBE [#] "; 600 ENTER T2,T,J 610 PRINT 620 IF T<0 THEN 3390 630 IF J<1 OR J>I1 THEN 3390 640 IF I[J]#I[I]+20 THEN 3390 650 PRINT "CHEKOV: DETONATE IT?" 660 PRINT N$": [YES OR NO] "; 670 ENTER T2,T,X$ 680 PRINT 690 IF LEN(X$)=0 THEN 730 700 IF X$[1,1]="N" THEN 730 710 K[J]=10000 720 GOTO 3530 730 PRINT " LOCK IT ONTO [WHOM?] "; 740 GOSUB 3540 750 IF V1>10 THEN 790 760 PRINT "CHEKOV: LOCKING." 770 J[J]=V1 780 GOTO 3530 790 PRINT " SET IT TO COURSE [0-360] "; 800 ENTER T2,T,C 810 PRINT 820 IF T<0 THEN 3390 830 IF C<0 OR C >= 360 THEN 3390 840 PRINT "SULU: SETTING IN NEW COURSE." 850 D[J]=C 860 J[J]=0 870 GOTO 3530 880 REM ----- (12) *POSITION REPORT ----- 890 REM (LONGEST NAME) 900 L=0 910 FOR J=1 TO N 920 V=I[J] 930 IF V=0 OR V>10 THEN 970 940 GOSUB 3660 950 IF LEN(V$)10 THEN 1240 1040 GOSUB 3660 1050 PRINT '27"="; 1060 PRINT CHR$(J+1); 1070 PRINT "="; 1080 PRINT TAB(L-LEN(V$));V$": "; 1090 PRINT USING 1100;INT(10*A[J]+.5)*.1,INT(C[J]+.5) 1100 IMAGE #,3D.D,6D,2X 1110 IF J=I THEN 1160 1120 GOSUB 3770 1130 R=SQR(X*X+Y*Y) 1140 PRINT " "INT(B+.5);INT(R+.5); 1150 GOTO 1230 1160 IF J[J]=0 THEN 1230 1170 V=I[ABS(J[J])] 1180 GOSUB 3660 1190 IF J[J]>0 THEN 1220 1200 PRINT "ELUDING "V$; 1210 GOTO 1230 1220 PRINT "PURSUING "V$; 1230 PRINT 1240 NEXT J 1250 I=1 1260 PRINT '30;LIN(13); 1270 GOTO 3530 1280 REM ----- (13) *POSITION DISPLAY ----- 1290 IF Z[I,2] THEN 3470 1300 T=2 1310 Z=5000 1320 PRINT '26; 1330 IF T<0 THEN 1350 1340 IF Z >= 100 AND Z <= 5000 THEN 1370 1350 PRINT "SPOCK: DESIGNATE BETWEEN 100 AND 5000." 1360 GOTO 1300 1370 X=Z/10 1380 Y=Z/6 1390 FOR K=1 TO 21 1400 Y$[K,K]=" " 1410 Z$[K,K]="-" 1420 NEXT K 1430 FOR K=6 TO -6 STEP -1 1440 IF ABS(K)=6 THEN 1470 1450 X$=Y$ 1460 GOTO 1480 1470 X$=Z$ 1480 FOR L=1 TO I1 1490 IF NOT I[L] OR I=L THEN 1630 1500 IF K#INT((Y[L]-Y[I])/Y+.5) THEN 1630 1510 Z=INT((X[L]-X[I])/X+10.5) 1520 IF Z<1 OR Z>21 THEN 1630 1530 GOTO INT((I[L]-1)*.1)+1 OF 1540,1570,1590,1610 1540 V=I[L] 1550 GOSUB 3660 1560 GOTO 1620 1570 V$="#" 1580 GOTO 1620 1590 V$="*" 1600 GOTO 1620 1610 V$=":" 1620 X$[Z,Z]=V$[1,1] 1630 NEXT L 1640 IF K#0 THEN 1660 1650 X$[11,11]="+" 1660 FOR L=21 TO 1 STEP -1 1670 IF X$[L,L]#" " THEN 1710 1680 NEXT L 1690 PRINT LIN(-1); 1700 GOTO 1720 1710 PRINT X$[1,L] 1720 NEXT K 1730 PRINT 1740 I=1 1750 GOTO 880 1760 REM ----- (14 AND 15) PURSUE OR RUN ----- 1770 IF Z[I,1] THEN 3450 1780 IF O=15 THEN 1810 1790 PRINT " CHEKOV, PURSUE [WHOM?] "; 1800 GOTO 1820 1810 PRINT " CHEKOV, RUN FROM [WHOM?] "; 1820 GOSUB 3540 1830 IF V1>10 THEN 3390 1840 PRINT " WARP FACTOR [-8 TO 8] "; 1850 ENTER T3,T,Z 1860 PRINT 1870 IF T<0 THEN 3390 1880 IF ABS(Z)>8 THEN 3430 1890 IF ABS(Z) >= 1 AND Z[I,4] THEN 3490 1900 B[I]=Z 1910 J=V1 1920 GOSUB 3770 1930 PRINT "CHEKOV: AYE, "O$", COMING TO COURSE"; 1940 IF O=15 THEN 1980 1950 PRINT INT(B) 1960 J[I]=J 1970 GOTO 3530 1980 J[I]=-J 1990 PRINT INT(FNC(B+180)) 2000 GOTO 3530 2010 REM ----- (16) MANUAL HELM ----- 2020 PRINT " HELMSMAN, COME TO COURSE [0-360] "; 2030 ENTER T3,T,Z 2040 PRINT 2050 IF T<0 THEN 3390 2060 IF Z<0 OR Z>360 THEN 3430 2070 D[I]=Z 2080 J[I]=0 2090 PRINT " WARP FACTOR [-8 TO 8] "; 2100 ENTER T3,T,Z 2110 PRINT 2120 IF T<0 THEN 3390 2130 IF ABS(Z)>8 THEN 3430 2140 IF ABS(Z) >= 1 AND Z[I,4] THEN 3490 2150 B[I]=Z 2160 PRINT "SULU: AYE, "O$"." 2170 GOTO 3530 2180 REM ----- (17 AND 18) DAMAGE/SCAN REPORT ----- 2190 IF O=18 THEN 2240 2200 J=I 2210 V=I[I] 2220 GOSUB 3660 2230 GOTO 2290 2240 IF Z[I,2] THEN 3470 2250 PRINT " SPOCK, SCAN [WHOM?] "; 2260 GOSUB 3540 2270 IF V1>10 THEN 3430 2280 J=V1 2290 PRINT 2300 PRINT "DAMAGES TO "V$":" 2310 PRINT 2320 RESTORE 2330 2330 DATA "COMPUTER INOPERABLE","SENSORS ANNIHILATED" 2340 DATA "PROBE LAUNCHER SHOT","WARP DRIVE DISABLED" 2350 DATA "ENGINEERING JETTISONED" 2360 FOR K=1 TO 5 2370 READ X$ 2380 IF Z[J,K]=0 THEN 2400 2390 PRINT X$". "; 2400 NEXT K 2410 PRINT "SURVIVORS:"Z[J,6] 2420 PRINT 2430 PRINT "PHASERS: "; 2440 FOR K=1 TO K1 2450 IF M[J,K]<0 THEN 2480 2460 PRINT INT(Q[J,K]); 2470 GOTO 2490 2480 PRINT " XX "; 2490 NEXT K 2500 PRINT 2510 PRINT " TUBES: "; 2520 FOR K=1 TO K2 2530 IF T[J,K]<0 THEN 2560 2540 PRINT INT(V[J,K]); 2550 GOTO 2570 2560 PRINT " XX "; 2570 NEXT K 2580 PRINT 2590 PRINT "SHIELDS: "; 2600 FOR K=1 TO 4 2610 PRINT INT(S[J,K]*S[J,K+4]); 2620 NEXT K 2630 PRINT 2640 PRINT 2650 PRINT " EFFICIENCY:"E[J] 2660 PRINT "REGENERATION:"G[J] 2670 PRINT "FUEL REMAINING:"INT(F[J]+.5) 2680 PRINT "FUEL CAPACITY:"INT(H[J]+.5) 2690 PRINT 2700 I=((O=18) AND NOT Z9) 2710 GOTO 3530 2720 REM ----- (19) POWER DISTRIBUTION ----- 2730 PRINT 2740 PRINT "SCOTT: REGENERATION RATE IS"G[I] 2750 MAT W=ZER[4] 2760 PRINT " DESIGNATE SHIELD DRAIN (X,X,X,X)." 2770 PRINT N$": SHIELD DRAINS ARE [0-1] "; 2780 MAT INPUT W 2790 FOR K=1 TO 4 2800 IF W[K] >= 0 AND W[K] <= 1 THEN 2840 2810 PRINT "MINIMUM DRAIN FOR SHIELDS IS ZERO (0), MAXIMUM IS ONE (1)." 2820 PRINT "TRY AGAIN." 2830 GOTO 2760 2840 S[I,K]=W[K] 2850 NEXT K 2860 MAT W=ZER[K1] 2870 PRINT "SCOTT: DESIGNATE PHASER DRAIN/DISCHARGE (X,X,X,X)." 2880 PRINT N$": CHARGE/DISCHARGE RATES ARE [-10 TO 10] "; 2890 MAT INPUT W 2900 FOR K=1 TO K1 2910 IF W[K] >= -10 AND W[K] <= 10 THEN 2950 2920 PRINT "FOR PHASERS, MAXIMUM DISCHARGE IS -10, MAXIMUM CHARGE IS 10." 2930 PRINT "TRY AGAIN." 2940 GOTO 2870 2950 R[I,K]=W[K] 2960 NEXT K 2970 PRINT 2980 GOTO 3530 2990 REM ----- (20) FIRING PARAMETERS ----- 3000 PRINT 3010 PRINT "CHEKOV: RESET TUBES, "O$"?" 3020 PRINT N$": [YES OR NO] "; 3030 ENTER T2,T,X$ 3040 PRINT 3050 IF X$[1,1]="" THEN 3250 3060 IF X$[1,1]="N" THEN 3250 3070 PRINT " SET LAUNCH SPEED TO [0-12] "; 3080 ENTER T2,T,Q1 3090 PRINT 3100 IF T<0 THEN 3130 3110 IF Q1<0 OR Q1>12 THEN 3130 3120 T[I,K2+1]=Q1 3130 PRINT " ...TIME DELAY TO [0-10] "; 3140 ENTER T2,T,Q2 3150 PRINT 3160 IF T<0 THEN 3190 3170 IF Q2<0 OR Q2>10 THEN 3190 3180 T[I,K2+2]=Q2 3190 PRINT " ...PROXIMITY DELAY TO [0-500] "; 3200 ENTER T2,T,Q3 3210 PRINT 3220 IF T<0 THEN 3250 3230 IF Q3<0 OR Q3>500 THEN 3250 3240 T[I,K2+3]=Q3 3250 PRINT "CHEKOV: RESET PHASERS, "O$"?" 3260 PRINT N$": [YES OR NO] "; 3270 ENTER T2,T,X$ 3280 PRINT 3290 IF X$[1,1]="" THEN 3530 3300 IF X$[1,1]="N" THEN 3530 3310 PRINT " RESET FIRING PERCENTAGE TO [0-100] "; 3320 ENTER T3,T,X 3330 PRINT 3340 IF T<0 THEN 3390 3350 IF X<0 OR X>100 THEN 3430 3360 M[I,K1+2]=X 3370 GOTO 3530 3380 REM ----- ERROR MESSAGES ----- 3390 PRINT "**TIME**" 3400 GOTO 3530 3410 PRINT "CHEKOV: WHAT?" 3420 GOTO 3530 3430 PRINT "SPOCK: BAD PARAMETER(S)." 3440 GOTO 3530 3450 PRINT "SPOCK: IMPOSSIBLE, "O$", OUR COMPUTER IS INOPERABLE." 3460 GOTO 3530 3470 PRINT "SPOCK: OUR SENSORS ARE DAMAGED." 3480 GOTO 3530 3490 PRINT "SCOTT: WARP DRIVE IS DEAD." 3500 GOTO 3530 3510 REM 3520 REM ----- EXIT ----- 3530 CHAIN "*TREK07",330 3540 REM ----- NAME COMPARISON SUBROUTINE ----- 3550 ENTER T3,T,X$ 3560 PRINT 3570 IF LEN(X$)=0 THEN 3640 3580 FOR V1=2 TO 10 3590 V=I[V1] 3600 IF NOT V OR V>10 THEN 3630 3610 GOSUB 3660 3620 IF X$[1,1]=V$[1,1] THEN 3650 3630 NEXT V1 3640 V1=11 3650 RETURN 3660 REM ----- NAME SELECTION SUBROUTINE ----- 3670 RESTORE 3680 3680 DATA "BISMARK","CENTAUR","DRADDOCK","FORBIN","KREIGER","SHLURG" 3690 DATA "TRAKKA","VARNOR","WARRIOR" 3700 IF V>1 THEN 3730 3710 V$=P$ 3720 RETURN 3730 FOR V2=2 TO V 3740 READ V$ 3750 NEXT V2 3760 RETURN 3770 REM ----- BEARING SUBROUTINE ----- 3780 X=X[J]-X[I] 3790 Y=Y[J]-Y[I] 3800 IF X=0 THEN 3830 3810 B=ATN(Y/X)*57.2958 3820 GOTO 3840 3830 B=90 3840 IF X >= 0 AND Y >= 0 THEN 3880 3850 B=B+180 3860 IF X<0 THEN 3880 3870 B=B+180 3880 RETURN 3890 REM ----- SLOT I SUBROUTINE ----- 3900 FOR I3=1 TO I2 3910 IF I[I3]=0 THEN 3970 3920 NEXT I3 3930 PRINT 3940 PRINT "GAME WILL TERMINATE BECAUSE OF INABILITY TO COPE WITH" 3950 PRINT "ALL THE JUNK (VESSELS, PROBES, TORPEDOES, ETC) IN SPACE." 3960 STOP 3970 I[I3]=1000 3980 A[I3]=B[I3]=C[I3]=D[I3]=E[I3]=F[I3]=J[I3]=K[I3]=L[I3]=0 3990 X[I3]=X[I] 4000 Y[I3]=Y[I] 4010 FOR I1=I2 TO 1 STEP -1 4020 IF I[I1]>0 THEN 4050 4030 NEXT I1 4040 I[I3]=0 4050 RETURN 4060 END