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