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  DEF FNS()=SQR((X[J]-X[I])^2+(Y[J]-Y[I])^2)
220  REM
230  GOTO 480
240  REM          ----- TORPEDO TRAJECTORY PLOTTING SUBROUTINE -----
250  J=ABS(U[I,K])
260  IF  NOT I[J] THEN 440
270  X2=X[J]
280  Y2=Y[J]
290  A0=A[J]
300  C3=FNA(C[J])
310  L1=0
320  L1=L1+1
330  IF L1>T[I,K2+2]*4 THEN 400
340  X[J]=X[J]+A0*COS(C3)*D3
350  Y[J]=Y[J]+A0*SIN(C3)*D3
360  IF ABS(FNS(X)-25*T[I,K2+1]*L1)>T[I,K2+3] THEN 320
370  GOSUB 3870
380  N6=FNC(B-C[I])
390  IF N6<135 OR N6>225 OR Z[I,5] THEN 410
400  T[I,K]=T[I,K]-100
410  X[J]=X2
420  Y[J]=Y2
430  RETURN 
440  IF I>1 THEN 460
450  PRINT "   TUBE "K"DISENGAGING."
460  U[I,K]=T[I,K]=0
470  RETURN 
480  REM     ----- ORDER AND MOVEMENT EXECUTION -----
490  D1=.25
500  D2=2
510  D3=D1*100
520  FOR D=1 TO D2/D1
530  FOR I=1 TO I1
540  I0=I[I]
550  IF  NOT I0 THEN 2330
560  M=V=I0-INT((I0-1)*.1)*10
570  IF I0>10 THEN 1280
580  REM IF NOT Z(I,6) THEN 7675
590  GOSUB 3760
600  M$=V$
610  J=I
620  REM            ----- PHASER FIRING ------
630  IF D>K1 THEN 990
640  FOR K=1 TO K1
650  IF M[I,K]>99 THEN 680
660  NEXT K
670  GOTO 990
680  GOSUB 4160
690  IF M[I,K]<100 THEN 990
700  REM (PHASER DAMAGES)
710  M[I,K]=M[I,K]-100
720  PRINT " <"'7M$" FRNG PHASERS>"'7
730  FOR J=1 TO I1
740  IF I=J OR  NOT I[J] THEN 950
750  GOSUB 4520
760  IF F=0 THEN 950
770  V=I[J]-INT((I[J]-1)*.1)*10
780  GOSUB 3760
790  GOTO INT((I[J]-1)/10)+1 OF 800,880,900,920
800  RESTORE 810
810  DATA 50,2,20,3,10,3
820  DATA 1000,"COMPUTER DESTROYED."
830  DATA 500,"SENSORS DEMOLISHED."
840  DATA 100,"PROBE LAUNCHER CRUSHED."
850  DATA 50,"WARP DRIVE DESTROYED."
860  GOSUB 4720
870  GOTO 950
880  PRINT V$"'S ENGINEERING HIT."
890  GOTO 930
900  PRINT "HIT ON PROBE"J
910  GOTO 930
920  PRINT "HIT ON TORPEDO"J
930  F[J]=F[J]-F/2 MAX 0
940  K[J]=10000 MAX K[J]
950  NEXT J
960  Q[I,K]=Q[I,K]-F1
970  GOTO 1280
980  REM          ----- TORPEDO FIRING -----
990  IF D>K2 THEN 1280
1000  FOR K=1 TO K2
1010  IF T[I,K]>99 THEN 1040
1020  NEXT K
1030  GOTO 1280
1040  IF U[I,K]<0 THEN 1070
1050  GOSUB 4350
1060  GOTO 1080
1070  GOSUB 240
1080  IF T[I,K]<100 THEN 1280
1090  IF V[I,K] THEN 1110
1100  GOTO 1280
1110  GOSUB 3990
1120  PRINT "<<"'7M$" FRNG TRPD"I3">>"'7
1130  A[I3]=B[I3]=T[I,K2+1]
1140  IF U[I,K]<0 THEN 1170
1150  C[I3]=D[I3]=FNC(U[I,K]+C[I])
1160  GOTO 1180
1170  C[I3]=D[I3]=FNC(N6+C[I])
1180  F[I3]=V[I,K]
1190  I[I3]=I0+30
1200  K[I3]=10000-T[I,K2+2]/D1
1210  L[I3]=T[I,K2+3]
1220  T[I,K]=T[I,K]-100
1230  V[I,K]=0
1240  X[I3]=X[I3]+A[I3]*COS(FNA(C[I3]))*D3
1250  Y[I3]=Y[I3]+A[I3]*SIN(FNA(C[I3]))*D3
1260  REM          ----- ANTI MATTER EFFECTS -----
1270  REM (TIME FUSE)
1280  K0=K[I]=K[I]+1
1290  IF K0>10000 THEN 1420
1300  REM (PROXIMITY FUSE)
1310  L0=L[I]
1320  FOR J=1 TO I1
1330  J1=I[J]
1340  IF  NOT J1 THEN 1390
1350  IF J1>20 THEN 1390
1360  IF J1=M THEN 1390
1370  IF J=I THEN 1390
1380  IF L0>SQR((X[I]-X[J])^2+(Y[I]-Y[J])^2) THEN 1420
1390  NEXT J
1400  GOTO 1870
1410  REM (DETONATION)
1420  V=M
1430  GOSUB 3760
1440  M$=V$
1450  GOTO INT((I0-1)*.1)+1 OF 1460,1540,1560,1580
1460  PRINT '7"+"'7"+"'7M$'7"+"'7"+"'7" DESTRUCT."
1470  FOR K=1 TO K1
1480  F[I]=F[I]+Q[I,K]
1490  NEXT K
1500  FOR K=1 TO K2
1510  F[I]=F[I]+V[I,K]
1520  NEXT K
1530  GOTO 1590
1540  PRINT '7"#"'7"#"M$"'S ENGINEERING#"'7"#"'7
1550  GOTO 1590
1560  PRINT "**"'7"  "I"**"'7
1570  GOTO 1590
1580  PRINT '7"::  "I'7"::"
1590  FOR J=1 TO I1
1600  IF I#ABS(J[J]) THEN 1620
1610  J[J]=0
1620  NEXT J
1630  REM  (ANTIMATTER DAMAGES)
1640  FOR J=1 TO I1
1650  IF I[J]=0 OR I=J THEN 1830
1660  GOSUB 4640
1670  IF F=0 THEN 1830
1680  V=I[J]-INT((I[J]-1)*.1)*10
1690  GOSUB 3760
1700  GOTO INT((I[J]-1)*.1)+1 OF 1710,1790,1810,1820
1710  RESTORE 1720
1720  DATA 100,3,10,2,7,6
1730  DATA 1500,"COMPUTER BANKS PIERCED."
1740  DATA 750,"SENSORS SMASHED."
1750  DATA 150,"PROBE LAUNCHER SHOT OFF."
1760  DATA 75,"WARP DRIVE DISABLED."
1770  GOSUB 4720
1780  GOTO 1830
1790  PRINT "HIT ON "V$"'S JETTISONED ENGINEERING"
1800  GOTO 1820
1810  PRINT "HIT ON PROBE"J
1820  K[J]=9999 MAX K[J]
1830  NEXT J
1840  I[I]=0
1850  GOTO 2330
1860  REM         ----- MOVEMENT SIMULATION -----
1870  A0=A[I]
1880  B0=B[I]
1890  C0=C[I]
1900  GOTO INT((I0-1)*.1)+1 OF 1910,2280,2220,2300
1910  D0=D[I]
1920  F0=F[I]
1930  J0=J[I]
1940  Z0=Z[I,4]
1950  REM  (FUEL CONSUMPTION)
1960  IF ABS(B0)<1 THEN 2040
1970  IF Z0 THEN 2020
1980  F[I]=F0=F0-ABS(B0)*E[I]*D1
1990  IF F0 >= 0 THEN 2040
2000  F[I]=0
2010  PRINT M$"'S WARP DRIVE BURNING OUT."
2020  B[I]=B0=SGN(B0)*(ABS(B0) MIN .99)
2030  REM (AUTO PILOT)
2040  IF J0=0 THEN 2120
2050  J=ABS(J0)
2060  GOSUB 3870
2070  IF J0>0 THEN 2100
2080  D0=FNC(B+180)
2090  GOTO 2120
2100  D0=B
2110  REM (TURN RATE)
2120  IF C0=D0 THEN 2280
2130  C1=FNC(D0-C0)
2140  IF C1<180 THEN 2160
2150  C1=C1-360
2160  C2=(10-ABS(B0))*5*D1
2170  IF  NOT Z0 THEN 2190
2180  C2=C2*.5
2190  C[I]=C0=FNC(C0+SGN(C1)*(ABS(C1) MIN C2))
2200  GOTO 2280
2210  REM (PROBES)
2220  IF  NOT J[I] THEN 2120
2230  J=J[I]
2240  GOSUB 3870
2250  C0=B
2260  GOTO 2300
2270  REM (ACCELERATION)
2280  A1=B0-A0
2290  A[I]=A0=A0+SGN(A1)*SQR(ABS(A1))*D1
2300  C3=FNA(C0)
2310  X[I]=X[I]+A0*COS(C3)*D3
2320  Y[I]=Y[I]+A0*SIN(C3)*D3
2330  NEXT I
2340  NEXT D
2350  REM     ----- DISTRIBUTION AND WEAPON LOCKS -----
2360  D4=D2
2370  FOR I=1 TO N
2380  IF  NOT I[I] OR I[I]>10 THEN 2490
2390  J=I
2400  GOSUB 5210
2410  FOR K=1 TO K1
2420  IF M[I,K]<0 THEN 2440
2430  GOSUB 4160
2440  NEXT K
2450  FOR K=1 TO K2
2460  IF T[I,K]<0 THEN 2480
2470  GOSUB 4350
2480  NEXT K
2490  NEXT I
2500  REM         ----- SELF-DESTRUCT WARNING -----
2510  IF I[1]#1 THEN 2570
2520  K0=(10000-K[1])*D1
2530  IF K0>15 THEN 2570
2540  IF K0=0 THEN 2570
2550  PRINT "COMPUTER:  "K0"SECONDS TO SELF-DESTRUCT."
2560  REM  (RUSES, BLUFFS, SURRENDERS)
2570  IF  NOT P1 THEN 2590
2580  P1=P1+1
2590  IF  NOT P2 THEN 2610
2600  P2=P2+1
2610  IF  NOT P3 THEN 2630
2620  P3=P3+1
2630  IF  NOT P4 THEN 2670
2640  P4=P4+1
2650  REM        ----- END GAME DECISION -----
2660  IF O1 THEN 3050
2670  I=N1=N2=0
2680  REM  (FEDERATION DISPOSITION)
2690  IF I[1]#1 OR  NOT Z[1,6] THEN 2770
2700  IF F[1]>10 AND (Z[1,3]=0 OR Z[1,4]=0) OR G[1]>1 THEN 2790
2710  FOR K=1 TO K1
2720  IF Q[1,K] THEN 2790
2730  NEXT K
2740  FOR K=1 TO K2
2750  IF V[1,K] THEN 2790
2760  NEXT K
2770  O1=1
2780  REM  (ENEMY DISPOSITION)
2790  K0=K[1]
2800  FOR J=2 TO N
2810  IF I[J]=0 OR I[J]>10 OR  NOT Z[J,6] THEN 2920
2820  IF O1 THEN 2950
2830  R=SQR((X[1]-X[J])^2+(Y[1]-Y[J])^2)
2840  IF (R>3500 AND Z[J,4]) OR (R>4500 AND K0>100) THEN 2940
2850  IF F[J]>10 THEN 2950
2860  FOR K=1 TO K1
2870  IF Q[J,K] THEN 2950
2880  NEXT K
2890  FOR K=1 TO K2
2900  IF V[J,K] THEN 2950
2910  NEXT K
2920  N1=N1+1
2930  GOTO 2950
2940  N2=N2+1
2950  NEXT J
2960  IF O1=0 AND N1+N2<A THEN 3600
2970  IF O1=1 AND N1+N2<A THEN 3060
2980  IF O1=0 AND N1=A THEN 3020
2990  IF O1=0 AND N1+N2=A THEN 3040
3000  IF O1=1 AND N1=A THEN 3540
3010  GOTO 3060
3020  O1=2
3030  GOTO 3060
3040  O1=3
3050  REM  (ANYTHING OTHER THAN VESSELS REMAINNG)
3060  FOR J=1 TO I1
3070  IF I[J]>10 THEN 3140
3080  NEXT J
3090  PRINT 
3100  PRINT "STARFLEET COMMAND:  ";
3110  ENTER 1,T,X$
3120  GOTO O1 OF 3220,3310,3380,3440,3510
3130  REM  (WARNING)
3140  IF O1=O2 THEN 3600
3150  O2=O1
3160  PRINT 
3170  GOTO O1 OF 3180,3270,3350,3420,3480
3180  PRINT S$":  MESSAGE TO THE FEDERATION:  THIS IS COMMANDER "S$" OF"
3190  PRINT "   THE "R$" EMPIRE.  WE HAVE DEFEATED THE "" AND ARE"
3200  PRINT "   DEPARTING THE QUADRANT."
3210  GOTO 3600
3220  PRINT "WE HAVE RECEIVED CONFIRMATION THAT THE"
3230  PRINT "  U.S.S. "", CAPTAINED BY "N$", WAS DESTROYED"
3240  PRINT "   BY "R$" BATTLE CRUISERS.  MAY FUTURE FEDERATION"
3250  PRINT "   OFFICERS PERFORM BETTER IN THEIR DUTIES."
3260  GOTO 3610
3270  PRINT "SPOCK:  ALL "R$" VESSELS HAVE BEEN EITHER DESTROYED OR"
3280  PRINT "   CRIPPLED.  WE STILL, HOWEVER, HAVE ANTIMATTER DEVICES TO"
3290  PRINT "   AVOID."
3300  GOTO 3600
3310  PRINT "WE COMMEND CAPTAIN "N$" AND HIS CREW"
3320  PRINT "   ON THEIR FINE PERFORMANCE AGAINST THE "R$"S.  MAY"
3330  PRINT "   HE BE AN INSPIRATION TO FUTURE STARSHIP CAPTAINS."
3340  GOTO 3610
3350  PRINT "SULU:  THE "R$"S ARE FALLING BEHIND AND SEEM TO BE"
3360  PRINT "   BREAKING OFF THEIR ATTACK."
3370  GOTO 3600
3380  PRINT "CAPTAIN "N$" OF THE STARSHIP "" HAS"
3390  PRINT "   OUT-MANEUVERED "R$" AGGRESSORS.  WE COMMEND HIS"
3400  PRINT "   TACTICAL ABILITY."
3410  GOTO 3610
3420  PRINT "UHURA:  I'M INFORMING STARFLEET COMMAND OF OUR DISPOSITION."
3430  GOTO 3600
3440  PRINT "CAPTAIN "N$" OF THE STARSHIP "" HAS"
3450  PRINT "   SURRENDERED HIS VESSEL TO THE "R$"S.  MAY CAPTAIN"
3460  PRINT "   DUNSELL BE REMEMBERED."
3470  GOTO 3610
3480  PRINT "SPOCK:  ALTHOUGH THE "R$"S HAVE SURRENDERED, THERE ARE"
3490  PRINT "   ANTI-MATTER DEVICES FLOATING AROUND US."
3500  GOTO 3600
3510  PRINT "WE HAVE RECEIVED WORD FROM THE "" THAT"
3520  PRINT "  THE "R$"S HAVE SURRENDERED."
3530  GOTO 3610
3540  PRINT 
3550  PRINT "STARFLEET COMMAND:  ";
3560  ENTER T1,T,X$
3570  PRINT "ONE OF OUR VESSELS HAS REPORTED THE WRECKAGE"
3580  PRINT "   OF THE "" AND  "A"OTHER "R$" VESSEL(S)."
3590  GOTO 3610
3600  CHAIN "*TREK07"
3610  PRINT 
3620  L=0
3630  FOR I=1 TO N
3640  V=I[I]
3650  IF V=0 OR V>10 THEN 3710
3660  IF L THEN 3680
3670  PRINT "SURVIVORS REPORTED:"
3680  L=1
3690  GOSUB 3760
3700  PRINT "   "V$"--"Z[I,6]
3710  NEXT I
3720  IF L THEN 3740
3730  PRINT "*** NO SURVIVORS REPORTED ***"
3740  PRINT 
3750  CHAIN "*TREK09"
3760  REM          ----- NAME SELECTION SUBROUTINE -----
3770  RESTORE 3780
3780  DATA "BISMARK","CENTAUR","DRADDOCK","FORBIN","KREIGER","SHLURG"
3790  DATA "TRAKKA","VARNOR","WARRIOR"
3800  IF V>1 THEN 3830
3810  V$=P$
3820  RETURN 
3830  FOR V2=2 TO V
3840  READ V$
3850  NEXT V2
3860  RETURN 
3870  REM          ----- BEARING SUBROUTINE -----
3880  X=X[J]-X[I]
3890  Y=Y[J]-Y[I]
3900  IF X=0 THEN 3930
3910  B=ATN(Y/X)*57.2958
3920  GOTO 3940
3930  B=90
3940  IF X >= 0 AND Y >= 0 THEN 3980
3950  B=B+180
3960  IF X<0 THEN 3980
3970  B=B+180
3980  RETURN 
3990  REM          ----- SLOT I SUBROUTINE -----
4000  FOR I3=1 TO I2
4010  IF I[I3]=0 THEN 4070
4020  NEXT I3
4030  PRINT 
4040  PRINT "GAME WILL TERMINATE BECAUSE OF INABILITY TO COPE WITH"
4050  PRINT "ALL THE JUNK (VESSELS, PROBES, TORPEDOES, ETC) IN SPACE."
4060  STOP 
4070  I[I3]=1000
4080  A[I3]=B[I3]=C[I3]=D[I3]=E[I3]=F[I3]=J[I3]=K[I3]=L[I3]=0
4090  X[I3]=X[I]
4100  Y[I3]=Y[I]
4110  FOR I1=I2 TO 1 STEP -1
4120  IF I[I1]>0 THEN 4140
4130  NEXT I1
4140  I[I3]=0
4150  RETURN 
4160  REM          ----- PHASER TRACKING SUBROUTINE -----
4170  J=M[I,K]
4180  IF LOG(J MAX 1)>15 THEN 4240
4190  IF J<100 THEN 4220
4200  J=J-100
4210  GOTO 4190
4220  IF J=0 THEN 4260
4230  IF I[J]=0 THEN 4290
4240  GOSUB 3870
4250  N[I,K]=FNC(B-C[I])
4260  IF N[I,K]<125 OR N[I,K]>235 OR Z[I,5] THEN 4280
4270  M[I,K]=J
4280  RETURN 
4290  V=I[I]
4300  IF V>1 THEN 4330
4310  GOSUB 3760
4320  PRINT "   PHASER  "K"DISENGAGING."
4330  M[I,K]=0
4340  RETURN 
4350  REM          ----- TORPEDO TRACKING SUBROUTINE -----
4360  J=T[I,K]
4370  IF J<100 THEN 4390
4380  J=J-100
4390  IF J=0 THEN 4430
4400  IF I[J]=0 THEN 4460
4410  GOSUB 3870
4420  U[I,K]=FNC(B-C[I])
4430  IF U[I,K]<135 OR U[I,K]>225 OR Z[I,5] THEN 4450
4440  T[I,K]=J
4450  RETURN 
4460  V=I[I]
4470  IF V>1 THEN 4500
4480  GOSUB 3760
4490  PRINT "   TUBE  "K"DISENGAGING."
4500  T[I,K]=0
4510  RETURN 
4520  REM          ----- PHASER HIT FACTOR SUBROUTINE -----
4530  F=0
4540  F1=M[I,K1+2]*Q[I,K]*.01
4550  GOSUB 3870
4560  F2=1000
4570  G2=SQR((X[I]-X[J])^2+(Y[I]-Y[J])^2)
4580  IF G2>F2 THEN 4630
4590  F3=M[I,K1+1]
4600  G3=FNC(C[I]+N[I,K]-B)
4610  IF G3>F3 AND 360-G3>F3 THEN 4630
4620  F=INT(F1*SQR(1-G2/F2)*45/F3)
4630  RETURN 
4640  REM          ----- ANTIMATTER HIT FACTOR SUBROUTINE -----
4650  F=0
4660  F1=F[I]*5
4670  G2=SQR((X[I]-X[J])^2+(Y[I]-Y[J])^2)
4680  F2=F1*10
4690  IF G2>F2 OR  NOT F1 THEN 4710
4700  F=INT(F1*SQR(1-G2/F2))
4710  RETURN 
4720  REM          ----- DAMAGE ASSESSMENT SUBROUTINE -----
4730  GOSUB 3870
4740  B1=FNC(B-C[J]+180)
4750  S=1
4760  IF B1<45 OR B1>315 THEN 4820
4770  S=2
4780  IF B1<135 THEN 4820
4790  S=3
4800  IF B1<225 THEN 4820
4810  S=4
4820  PRINT "HIT  "F"ON "V$"'S SHIELD"S
4830  READ Q1,Q2,Q3,Q4,Q5,Q6
4840  H=F*(1-S[J,S]*S[J,S+4]/100)
4850  E[J]=E[J]+H/Q1
4860  F[J]=F[J]-H/Q2 MAX 0
4870  G[J]=G[J]-H/Q3 MAX 0
4880  IF S>1 THEN 4900
4890  Q4=Q4*1.5
4900  S[J,S+4]=S[J,S+4]-F/Q4 MAX 0
4910  Z[J,6]=Z[J,6]-FNR(H*Q5) MAX 0
4920  FOR H1=1 TO H/Q6
4930  L=FNR(K1+K2)
4940  IF L>K1 THEN 5010
4950  IF M[J,L]<0 THEN 5070
4960  M[J,L]=-1
4970  Q[J,L]=R[J,L]=0
4980  IF J>1 THEN 5070
4990  PRINT "   PHASER  "L"DAMAGED."
5000  GOTO 5070
5010  L=L-K1
5020  IF T[J,L]<0 THEN 5070
5030  T[J,L]=-1
5040  V[J,L]=0
5050  IF J>1 THEN 5070
5060  PRINT "   TUBE  "L"DAMAGED."
5070  NEXT H1
5080  FOR L=1 TO 4
5090  READ Q,X$
5100  IF H<FNR(Q) THEN 5150
5110  IF Z[J,L] THEN 5150
5120  Z[J,L]=1
5130  IF J>1 THEN 5150
5140  PRINT "   "X$
5150  NEXT L
5160  IF H<43 THEN 5180
5170  K[J]=10000
5180  D4=D1
5190  GOSUB 5210
5200  RETURN 
5210  REM          ----- DISTRIBUTION SUBROUTINE -----
5220  H=F[J]+G[J]*D4
5230  FOR L=1 TO K1
5240  IF M[J,L]<0 OR R[J,L] >= 0 THEN 5280
5250  Q=-R[J,L]*D4 MIN Q[J,L]
5260  Q[J,L]=Q[J,L]-Q
5270  H=H+Q
5280  NEXT L
5290  FOR L=1 TO 4
5300  IF  NOT S[J,L+4] THEN 5340
5310  H1=S[J,L]*D4 MIN H
5320  H=H-H1
5330  S[J,L]=H1/D4
5340  NEXT L
5350  IF H=0 THEN 5440
5360  FOR L=1 TO K1
5370  IF Q[J,L] >= 10 THEN 5430
5380  IF M[J,L]<0 THEN 5430
5390  IF R[J,L]<0 THEN 5430
5400  H1=H MIN 10-Q[J,L] MIN R[J,L]*D4
5410  H=H-H1
5420  Q[J,L]=Q[J,L]+H1
5430  NEXT L
5440  F[J]=H MIN H[J]
5450  H=H-F[J]
5460  IF H <= 0 THEN 5540
5470  FOR L=1 TO K1
5480  IF M[J,L]<0 THEN 5530
5490  H1=10-Q[J,L] MIN H
5500  Q[J,L]=Q[J,L]+H1
5510  H=H-H1
5520  IF H <= 0 THEN 5540
5530  NEXT L
5540  RETURN 
5550  REM          ----- TRACTOR BEAM HIT FACTOR SUBROUTINE -----
5560  F=0
5570  F1=P[I,1]*P[I,2]*.1
5580  GOSUB 3870
5590  F2=3500
5600  G2=SQR((X[I]-X[J])^2+(Y[I]-Y[J])^2)
5610  IF G2>F2 THEN 5660
5620  F3=P[I,3]
5630  G3=FNC(C[I]+P[I,4]-B)
5640  IF G3>F3 AND 360-G3>F3 THEN 5660
5650  F=INT(F1*SQR(1-G2/F2)*45/F3)
5660  RETURN 
5670  REM          ----- TORPEDO TRAJECTORY PLOTTING SUBROUTINE -----
5680  GOSUB 3870
5690  J=ABS(U[I,K])
5700  IF  NOT I[J] THEN 5780
5710  N3=ABS(A[J])/T[I,K2+1]*SIN(FNA(ABS(A[J])-B))
5720  N4=FNB(ATN(N3/SQR(1-N3)))
5730  N5=(B+N4+360)/360
5740  N6=(N5-INT(N5))*360
5750  IF N6<135 OR N6>225 OR Z[I,5] THEN 5770
5760  T[I,K]=T[I,K]-100
5770  RETURN 
5780  IF I>1 THEN 5800
5790  PRINT "   TUBE "K"DISENGAGING."
5800  U[I,K]=T[I,K]=0
5810  RETURN 
5820  END 
