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()=*.0174533
180  DEF FNB()=*57.2958
190  DEF FNC()=-INT(*.00277778)*360
200  DEF FNR()=INT(*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$)<L THEN 970
960  L=LEN(V$)
970  NEXT J
980  REM  (REPORT)
990  PRINT '27"=";'1"=";
1000  PRINT TAB(L)"   WARP COURSE BEARING RANGE"
1010  FOR J=1 TO I1
1020  V=I[J]
1030  IF V=0 OR 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 
