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 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 
