10  FILES *
20  DIM O$[13],D$[13],C$[10],Q$[8],H$[15],S$[20]
30  DIM V$[4]
40  PRINT "INSTRUCTIONS?";
50  LINPUT Q$
60  IF Q$[1,1]="Y" THEN 80
70  GOTO 90
80  CHAIN "*TREKE1"
90  DIM G[8,8],Q[8,8],D[12],K[9,3],N[3],S[4],Y[2,7]
100  DEF FNF()=(1-SQR((K[I,1]-S1)^2+(K[I,2]-S2)^2)/)
110  Q$=".E+B*=GO"
120  PRINT "WHICH STARSHIP (1 TO 14)";
130  INPUT I
140  IF I<1 OR I>14 THEN 120
150  ASSIGN "*TREKE3",1,F0
160  FOR I1=1 TO I
170  READ #1;O$
180  NEXT I1
190  Q$[2,2]=O$[1,1]
200  DATA 0,12,50,5000,5000,10,10,20,20,250,0,0,0
210  READ L,D9,T9,E0,E,P0,P,U0,U,S9,B9,K9,R9
220  R1=1
230  ASSIGN "*TREKE4",1,F0
240  ADVANCE #1;1,F0
250  PRINT #1;O$
260  FOR X=3 TO 8
270  READ H$
280  PRINT #1;H$
290  NEXT X
300  DATA "KLINGON","STAR BASE","STAR","ROMULAN","GHOST SHIP","ROMRAY"
310  T0=INT(RND(0)*20+20)*100
320  T5=T=T0
330  GOSUB 4970
340  MAT D=ZER
350  REM-SET UP GALAXY
360  FOR I=1 TO 8
370  FOR J=1 TO 8
380  R=RND(0)
390  K3=0
400  IF R <= .7063 THEN 420
410  K3=1+INT(R+.016)+INT(R+.16)+INT(R+.098)+INT(R+.067)+INT(R+.05)
420  K9=K9+K3
430  B3=INT(RND(0)+.05)
440  B9=B9+B3
450  S3=INT(RND(0)*9+1)
460  R=RND(0)
470  R3=INT(R+.03)+INT(R+.24)
480  R9=R9+R3
490  G[I,J]=R3*1000+K3*100+B3*10+S3
500  NEXT J
510  NEXT I
520  K0=K9
530  R0=R9
540  IF B9>0 THEN 590
550  I=RND(0)*8+.5
560  J=RND(0)*8+.5
570  G[I,J]=G[I,J]+10
580  B9=1
590  I2=800+INT(RND(0)*41+1)*10
600  FOR I1=1 TO 4
610  S[I1]=I2
620  NEXT I1
630  PRINT "SHIELDS BROUGHT UP WITH"I2"UNITS EACH"
640  REM-SET UP QUAD
650  IF Q1<1 OR Q1>8 OR Q2<1 OR Q2>8 THEN 670
660  IF Q2 >= 1 OR Q2 <= 8 THEN 710
670  PRINT "* SPACE WRINKLE AT EDGE OF GALAXY"
680  PRINT "* ";O$;" FOLLOWS WRINKLE BACK"
690  PRINT "* TO UNDETERMINED PART OF GALAXY."
700  GOSUB 4970
710  MAT Q=ZER
720  MAT K=ZER
730  MAT Y=ZER
740  Y=0
750  X=G[Q1,Q2]/1000
760  R3=INT(X)
770  K3=INT((X-R3)*10)
780  B3=INT((X*10-R3*10-K3)*10)
790  S3=INT(G[Q1,Q2])-10*INT(.1*G[Q1,Q2])
800  Q[S1,S2]=1
810  FOR I=1 TO K3
820  GOSUB 4720
830  Q[X2,Y2]=2
840  K[I,1]=X2
850  K[I,2]=Y2
860  K[I,3]=S9+(405*RND(0))
870  NEXT I
880  FOR I=1 TO B3
890  GOSUB 4720
900  Q[X2,Y2]=3
910  NEXT I
920  FOR I=1 TO S3
930  GOSUB 4720
940  Q[X2,Y2]=4
950  NEXT I
960  IF RND(0)>.15 THEN 1010
970  GOSUB 4720
980  Q[X2,Y2]=6
990  E5=INT(RND(0)*1000+1)
1000  P5=INT(RND(0)*3)
1010  FOR I=1 TO R3
1020  GOSUB 1060
1030  NEXT I
1040  GOTO 1210
1050  REM-ROM FIRE
1060  GOSUB 4720
1070  Q[X2,Y2]=5
1080  Y[I,6]=X2
1090  Y[I,7]=Y2
1100  X2=Y[I,6]
1110  Y2=Y[I,7]
1120  GOSUB 4770
1130  Y[I,5]=C1
1140  GOSUB 4930
1150  Y[I,3]=X2
1160  Y[I,4]=Y2
1170  Y[I,1]=Y[I,6]
1180  Y[I,2]=Y[I,7]
1190  PRINT "O ROMRAY"I"ON COURSE"C1"AT SECTOR ("Y[I,1]","Y[I,2]")."
1200  RETURN 
1210  T3=T4=T
1220  T=T-.1
1230  REM-SHORT RANGE
1240  T=T+.1
1250  S4=S1-1
1260  S5=S1+1
1270  S6=S2-1
1280  S7=S2+1
1290  IF S4>0 THEN 1310
1300  S4=1
1310  IF S5<9 THEN 1330
1320  S5=8
1330  IF S6>0 THEN 1350
1340  S6=1
1350  IF S7<9 THEN 1370
1360  S7=8
1370  T9=50
1380  C$=" "
1390  FOR I=S4 TO S5
1400  FOR J=S6 TO S7
1410  IF Q[I,J]=3 THEN 1600
1420  IF Q[I,J]#6 THEN 1700
1430  IF C$#" " THEN 1450
1440  C$="EXPLORING"
1450  E=E+E5
1460  P=P+P5
1470  IF E5>0 OR P5>0 THEN 1500
1480  PRINT "NO SUPPLIES LEFT ON GHOST SHIP"
1490  GOTO 1700
1500  PRINT "FOUND GHOST SHIP WITH"E5"UNITS OF ENERGY LEFT"
1510  IF P5=0 THEN 1570
1520  PRINT "AND"P5"DUSTY TORPEDO";
1530  IF P5=1 THEN 1550
1540  PRINT "ES";
1550  PRINT ". THEY'VE BEEN ADDED"
1560  PRINT "TO THE ";O$;"'S STOCK."
1570  E5=0
1580  P5=0
1590  GOTO 1700
1600  C$="DOCKED"
1610  PRINT "DOCKED AT STARBASE, SHIELDS BROUGHT TO 1000 EACH."
1620  FOR I1=1 TO 4
1630  S[I1]=1000
1640  NEXT I1
1650  E=E0
1660  IF P>P0 THEN 1680
1670  P=P0
1680  U=U0
1690  GOTO 1420
1700  NEXT J
1710  NEXT I
1720  IF C$#"DOCKED" THEN 1770
1730  S$="@ DOCKED "
1740  T6=0
1750  GOSUB 4100
1760  T=T+T6
1770  IF C$#" " THEN 1850
1780  IF R3>0 OR K3>0 THEN 1820
1790  IF E<E0*.1 THEN 1840
1800  C$="GREEN"
1810  GOTO 1850
1820  C$="RED"
1830  GOTO 1850
1840  C$="YELLOW"
1850  GOSUB 4340
1860  IF E <= 0 THEN 4620
1870  IF T=T4 THEN 1910
1880  IF R3 <= 0 THEN 1910
1890  GOSUB 2390
1900  GOSUB 2390
1910  IF D[2] >= 0 THEN 2000
1920  PRINT "SHORT RANGE SENSORS DAMAGED, ";
1930  IF G[Q1,Q2]-INT(G[Q1,Q2])#0 THEN 1950
1940  G[Q1,Q2]=INT(G[Q1,Q2])+.1
1950  IF D[2] <= -3 THEN 1980
1960  PRINT "MAY GIVE ERRONEOUS RESULTS."
1970  GOTO 2010
1980  PRINT "COMPLETELY INOPERABLE."
1990  GOTO 2350
2000  G[Q1,Q2]=INT(G[Q1,Q2])+.2
2010  PRINT "# --1-2-3-4-5-6-7-8     STARDATE",T
2020  FOR I=1 TO 8
2030  IMAGE#,D
2040  PRINT  USING 2030;I
2050  PRINT " ^ ";
2060  FOR J=1 TO 8
2070  IF D[2] >= 0 THEN 2130
2080  R=RND(0)
2090  IF R>.2 THEN 2130
2100  R=INT(RND(0)*8+1)
2110  PRINT Q$[R,R];" ";
2120  GOTO 2140
2130  PRINT Q$[Q[I,J]+1,Q[I,J]+1];" ";
2140  NEXT J
2150  PRINT "    ";
2160  GOTO I OF 2170,2190,2210,2230,2250,2270,2290,2310
2170  PRINT "SHIELDS:"INT(S[1]);INT(S[2]);INT(S[3]);INT(S[4])
2180  GOTO 2320
2190  PRINT "CONDITION ";C$
2200  GOTO 2320
2210  PRINT "QUADRANT"Q1;Q2
2220  GOTO 2320
2230  PRINT "SECTOR"S1;S2
2240  GOTO 2320
2250  PRINT "ENERGY UNITS"E
2260  GOTO 2320
2270  PRINT "PHOTON TORPEDOES"P
2280  GOTO 2320
2290  PRINT "PROBES"U
2300  GOTO 2320
2310  PRINT "KLINGONS LEFT"K9
2320  NEXT I
2330  IF R9=0 THEN 2350
2340  PRINT TAB(24),"ROMULANS LEFT"R9
2350  IF R3 <= 0 THEN 3440
2360  GOSUB 2390
2370  GOSUB 2390
2380  GOTO 3440
2390  REM-ROMRAY
2400  FOR I=1 TO 2
2410  IF Y[I,1]=0 THEN 2520
2420  X=INT(Y[I,1]+.5)
2430  Y=INT(Y[I,2]+.5)
2440  IF Q[X,Y]#7 THEN 2460
2450  Q[X,Y]=0
2460  Y[I,1]=Y[I,1]+Y[I,3]
2470  Y[I,2]=Y[I,2]+Y[I,4]
2480  X=INT(Y[I,1]+.5)
2490  Y=INT(Y[I,2]+.5)
2500  IF X<1 OR X>8 OR Y<1 OR Y>8 THEN 2520
2510  GOTO 2580
2520  Y[I,1]=0
2530  IF Y[I,6]=0 THEN 3420
2540  X=Y[I,6]
2550  Y=Y[I,7]
2560  GOSUB 1100
2570  GOTO 3420
2580  Q=Q[X,Y]+1
2590  IF Q=1 THEN 3400
2600  ASSIGN "*TREKE4",1,F0
2610  ADVANCE #1;Q-1,F0
2620  READ #1;H$
2630  PRINT "O ROMRAY HIT ";H$;"."
2640  IF Q#3 THEN 2800
2650  FOR J=1 TO K3
2660  IF K[J,1]#X OR K[J,2]#Y THEN 2790
2670  IF K[J,3]>50 THEN 2750
2680  PRINT "**DESTROYED**"
2690  J1=I
2700  I=J
2710  GOSUB 4280
2720  I=J1
2730  K[J,3]=0
2740  GOTO 2790
2750  D8=RND(0)*.5
2760  K[J,3]=K[J,3]*D8
2770  PRINT "0 ";H$;" LOST"100*(1-D8)"PERCENT OF ITS ENERGY."
2780  PRINT K[J,3]"REMAINING ON ";H$;"."
2790  NEXT J
2800  IF Q#6 THEN 2870
2810  FOR J=1 TO 2
2820  IF Y[J,6]#X OR Y[J,7]#Y THEN 2860
2830  Y[J,6]=0
2840  Y[J,7]=0
2850  PRINT "O ROMULAN BADLY DAMAGED, UNABLE TO FIRE."
2860  NEXT J
2870  IF Q#2 THEN 3290
2880  GOSUB 2900
2890  GOTO 3420
2900  REM-ROMRAY HIT
2910  H=1000/SQR((Y[I,6]-S1)^2+(Y[I,7]-S2)^2)
2920  H=H*2.5
2930  Y=1
2940  C1=Y[I,5]
2950  GOSUB 2970
2960  GOTO 3290
2970  REM-SHIELD
2980  D8=H/2
2990  R1=(C1-1)/2+3
3000  R2=1-(R1-INT(R1))
3010  IF R1<5 THEN 3030
3020  R1=R1-4
3030  R1=INT(R1)
3040  R=R1+1
3050  S[R1]=S[R1]-H*R2
3060  IF R1<4 THEN 3080
3070  R=1
3080  S[R]=S[R]-H*(1-R2)
3090  R=R1
3100  IF R2=1 THEN 3120
3110  R=R1+1
3120  FOR J=R1 TO R
3130  K=J
3140  IF K<5 THEN 3160
3150  K=J-4
3160  IF S[K] >= 0 THEN 3180
3170  S[K]=0
3180  PRINT "SHIELD #"K"HIT,"S[K]"UNITS REMAINING."
3190  NEXT J
3200  R=K
3210  IF S[R]*S[R1]>0 THEN 3280
3220  IF Y=1 THEN 4620
3230  Y=0
3240  S$="* SHIELD BREAKDOWN"
3250  D8=H/D8*10
3260  R1=INT(RND(0)*D9+1)
3270  GOSUB 4030
3280  RETURN 
3290  Y[I,1]=0
3300  IF Q#5 THEN 3340
3310  S3=S3-1
3320  Q[X,Y]=0
3330  G[Q1,Q2]=G[Q1,Q2]-1
3340  IF Q#4 THEN 3390
3350  IF RND(0)<.7 THEN 3390
3360  B3=B3-1
3370  Q[X,Y]=0
3380  G[Q1,Q2]=G[Q1,Q2]-10
3390  RETURN 
3400  Q[X,Y]=7
3410  PRINT "O ROMRAY"I"ON COURSE"Y[I,5]"AT SECTOR ("X","Y")."
3420  NEXT I
3430  RETURN 
3440  T6=T
3450  PRINT "COMMAND: (0 TO 13)";
3460  INPUT A
3470  T=T6
3480  T=T+.01
3490  IF T<.5+T5 THEN 3510
3500  GOSUB 3900
3510  GOTO A+1 OF 3620,1230,5480,5670,5990,6730,6850,7080,7210,8400
3520  GOTO A-9 OF 8540,8750,3540,9160
3530  GOTO 3440
3540  ASSIGN "*TREKE2",1,F0
3550  FOR I=1 TO 12
3560  READ #1;H$
3570  PRINT I-1;H$
3580  NEXT I
3590  PRINT 12;"REVIEW COMMANDS"
3600  PRINT 13;"SELF-DESTRUCT"
3610  GOTO 3440
3620  REM-WARP DRIVE
3630  PRINT "WARP COURSE (1-8.99999):";
3640  INPUT C1
3650  IF C1=0 THEN 3440
3660  IF C1<1 OR C1 >= 9 THEN 3630
3670  W9=12
3680  IF D[1] >= 0 THEN 3740
3690  W9=ABS(1/D[1])
3700  IF W9 <= 12 THEN 3720
3710  W9=12
3720  IF W9>.2 THEN 3740
3730  W9=.2
3740  PRINT "WARP FACTOR (>0, <="W9"):";
3750  INPUT W1
3760  IF W1 <= 0 OR W1>12 THEN 3740
3770  IF D[1] >= 0 OR W1 <= W9 THEN 3800
3780  PRINT "WARP ENGINES DAMAGED. MAXIMUM WARP IS"W9
3790  GOTO 3740
3800  T=T+.9
3810  T3=T
3820  C=C1
3830  GOSUB 4340
3840  C1=C
3850  IF E <= 0 THEN 4620
3860  IF RND(0)>.3 THEN 5020
3870  D8=5*W1^2
3880  GOSUB 3990
3890  GOTO 5020
3900  REM-REPAIR
3910  T5=T-T5
3920  FOR I=1 TO D9
3930  D[I]=D[I]+T5
3940  IF D[I]<0 THEN 3960
3950  D[I]=0
3960  NEXT I
3970  T5=T
3980  RETURN 
3990  REM-DAM/REP
4000  R1=INT(RND(0)*D9+1)
4010  IF RND(0)>.7 THEN 4090
4020  S$="@ SPACE STORM"
4030  D[R1]=D[R1]-RND(0)*2
4040  ASSIGN "*TREKE2",1,F0
4050  ADVANCE #1;R1-1,F0
4060  READ #1;H$
4070  PRINT S$;", ";H$;" DAMAGED."
4080  GOTO 4270
4090  S$="CREW AT WORK"
4100  FOR I=R1 TO D9
4110  IF D[I]<0 THEN 4170
4120  NEXT I
4130  FOR I=1 TO R1-1
4140  IF D[I]<0 THEN 4210
4150  NEXT I
4160  GOTO 4270
4170  R1=I
4180  R=RND(0)
4190  D[I]=D[I]+R*4+1
4200  GOTO 4220
4210  D[I]=0
4220  ASSIGN "*TREKE2",1,F0
4230  ADVANCE #1;I-1,F0
4240  READ #1;H$
4250  PRINT S$", ";H$;" UNDER ACCELERATED REPAIR."
4260  T6=1
4270  RETURN 
4280  REM-KLINGON DEAD
4290  K3=K3-1
4300  K9=K9-1
4310  Q[K[I,1],K[I,2]]=0
4320  G[Q1,Q2]=R3*1000+K3*100+B3*10+S3+.2
4330  RETURN 
4340  REM-KLINGON ATTACK
4350  IF T#T3 AND T<T3+.6 THEN 4610
4360  T3=T
4370  IF K3 <= 0 THEN 4610
4380  PRINT "+ KLINGON ATTACK!"
4390  IF C$#"DOCKED" THEN 4420
4400  PRINT "STAR BASE SHIELDS PROTECT THE ";O$;"."
4410  GOTO 4610
4420  FOR I=1 TO K3
4430  GOSUB 4460
4440  NEXT I
4450  GOTO 4610
4460  IF K[I,3] <= 0 THEN 4600
4470  IF RND(0)>.5 THEN 4530
4480  Q[K[I,1],K[I,2]]=0
4490  GOSUB 4720
4500  K[I,1]=X2
4510  K[I,2]=Y2
4520  Q[X2,Y2]=2
4530  H=K[I,3]/FNF(77)
4540  K[I,3]=.9*K[I,3]
4550  X2=K[I,1]
4560  Y2=K[I,2]
4570  GOSUB 4770
4580  PRINT H"UNIT HIT ON ";O$;" FROM SECTOR ("K[I,1]","K[I,2]")"
4590  GOSUB 2970
4600  RETURN 
4610  RETURN 
4620  REM-LOSE
4630  PRINT "STARDATE:"T"THE ";O$;" IS DESTROYED!"
4640  PRINT "THERE ARE STILL"K9"KLINGONS AND"R9"ROMULANS LEFT!"
4650  GOTO 4680
4660  REM-WIN
4670  PRINT "STARDATE:"T"THE ";O$;" IS VICTORIOUS!"
4680  PRINT "AS THE COMMANDER OF THE ";O$;", YOU HAVE DESTROYED"K0-K9
4690  PRINT "KLINGONS AND"R0-R9"ROMULANS IN"T-T0"YEARS."
4700  PRINT "YOUR RATING IS"INT((K0-K9)/(T-T0)*1000)+(R0-R9)*100
4710  STOP 
4720  REM-QUAD COORDS
4730  X2=INT(RND(0)*8+1)
4740  Y2=INT(RND(0)*8+1)
4750  IF Q[X2,Y2]#0 THEN 4730
4760  RETURN 
4770  REM-COURSE CALC
4780  IF S2#Y2 THEN 4810
4790  C1=3
4800  GOTO 4890
4810  C1=(S1-X2)/(Y2-S2)
4820  IF C1 >= 0 THEN 4840
4830  C1=1/C1
4840  C1=ATN(C1)*57.2958
4850  IF C1 >= 0 THEN 4880
4860  C1=ABS(C1)/45+3
4870  GOTO 4890
4880  C1=C1/45+1
4890  IF X2>S1 THEN 4920
4900  IF S2>Y2 AND C1=1 THEN 4920
4910  C1=C1+4
4920  RETURN 
4930  REM-DIRECTION
4940  Y2=COS((C1-1)*3.14/4)
4950  X2=-SIN((C1-1)*3.14/4)
4960  RETURN 
4970  Q1=INT(RND(0)*8+1)
4980  Q2=INT(RND(0)*8+1)
4990  S1=INT(RND(0)*8+1)
5000  S2=INT(RND(0)*8+1)
5010  RETURN 
5020  REM-STARSHIP MOVEMENT
5030  N=INT(W1*8)
5040  E=E-(N+5)
5050  Q[S1,S2]=0
5060  IF T>T0+K0*2 THEN 4620
5070  GOSUB 4930
5080  W2=X2
5090  W3=Y2
5100  FOR I=1 TO N
5110  I1=I
5120  S1=S1+W2
5130  S2=S2+W3
5140  IF S1<.5 OR S1 >= 8.5 THEN 5390
5150  IF S2<.5 OR S2 >= 8.5 THEN 5390
5160  X=INT(S1+.5)
5170  Y=INT(S2+.5)
5180  IF Q[X,Y]#0 THEN 5210
5190  NEXT I
5200  GOTO 5350
5210  PRINT "* ";O$;" BLOCKED BY OBJECT AT SECTOR"X;Y
5220  IF Q[X,Y]#7 THEN 5280
5230  FOR I=1 TO 2
5240  IF INT(Y[I,1]+.5)#X OR INT(Y[I,2]+.5)#Y THEN 5260
5250  NEXT I
5260  GOSUB 2900
5270  GOTO 5350
5280  D8=2*W1^.2
5290  S$="COLLISION"
5300  R=RND(0)
5310  R1=INT(R*D9+1)
5320  GOSUB 4030
5330  S1=S1-W2
5340  S2=S2-W3
5350  S1=INT(S1+.5)
5360  S2=INT(S2+.5)
5370  Q[S1,S2]=1
5380  GOTO 1230
5390  Q1=Q1+(W1-I1/8)*W2+(S1-.5)/8
5400  Q2=Q2+(W1-I1/8)*W3+(S2-.5)/8
5410  S1=Q1
5420  S2=Q2
5430  Q1=INT(Q1)
5440  Q2=INT(Q2)
5450  S1=INT((S1-Q1)*8+1)
5460  S2=INT((S2-Q2)*8+1)
5470  GOTO 640
5480  REM-LONG RANGE SCAN
5490  IF D[3] >= 0 THEN 5520
5500  PRINT "L.R. SENSORS ARE DOWN."
5510  GOTO 3440
5520  PRINT "L.R. SENSOR SCAN"
5530  T=T+.1
5540  PRINT " #      "Q2-1;Q2;Q2+1
5550  FOR I=Q1-1 TO Q1+1
5560  MAT N=ZER
5570  FOR J=Q2-1 TO Q2+1
5580  IF I<1 OR I>8 THEN 5620
5590  IF J<1 OR J>8 THEN 5620
5600  N[J-Q2+2]=G[I,J]
5610  G[I,J]=INT(G[I,J])+.2
5620  NEXT J
5630  PRINT  USING 5640;I,N[1],INT(N[2]),N[3]
5640  IMAGEDD,3X,DDDD,3X,4D,3X,4D
5650  NEXT I
5660  GOTO 2350
5670  REM-PHASERS
5680  IF D[4] >= 0 THEN 5710
5690  PRINT "PHASERS ARE DISABLED"
5700  GOTO 3440
5710  PRINT "PHASERS LOCKED ON TARGET. ENERGY AVAILABLE,"E
5720  PRINT "NUMBER OF UNITS TO FIRE";
5730  INPUT X
5740  IF X <= 0 THEN 3440
5750  T=T+.1
5760  T3=T
5770  IF E-X<0 THEN 5710
5780  E=E-X
5790  IF K3 <= 0 THEN 5970
5800  FOR I=1 TO 9
5810  IF K[I,3] <= 0 THEN 5950
5820  E1=K[I,3]*FNF(77)
5830  IF E1 <= X THEN 5850
5840  E1=X
5850  X=X-E1
5860  H=(E1+1)/FNF(77)
5870  K[I,3]=K[I,3]-H
5880  PRINT O$;" HIT KLINGON AT SECTOR ("K[I,1]","K[I,2]") WITH"H"UNITS."
5890  IF K[I,3] <= 0 THEN 5920
5900  PRINT "("K[I,3]"REMAINING ON KLINGON)"
5910  GOTO 5950
5920  PRINT " *** DESTROYED ***"
5930  GOSUB 4280
5940  IF K9 <= 0 THEN 4660
5950  NEXT I
5960  GOSUB 4340
5970  IF E <= 0 THEN 4620
5980  GOTO 2380
5990  REM-PHOTON TORPEDOES
6000  IF D[5] >= 0 THEN 6030
6010  PRINT "PHOTON TUBES ARE INOPERABLE"
6020  GOTO 3440
6030  IF P>0 THEN 6060
6040  PRINT "ALL PHOTON TORPEDOES EXPENDED"
6050  GOTO 3440
6060  PRINT "TORPEDO COURSE (1 TO 8.99999):";
6070  INPUT C1
6080  IF C1=0 THEN 3440
6090  IF C1<1 OR C1 >= 9 THEN 6060
6100  T=T+.1
6110  T3=T
6120  GOSUB 4930
6130  X=S1
6140  Y=S2
6150  P=P-1
6160  PRINT "-TORPEDO TRACK-";
6170  X=X+X2
6180  Y=Y+Y2
6190  IF X<.5 OR X >= 8.5 OR Y<.5 OR Y >= 8.5 THEN 6680
6200  X1=INT(X+.5)
6210  Y1=INT(Y+.5)
6220  PRINT "-("X1","Y1")";
6230  Q=Q[X1,Y1]+1
6240  GOTO Q OF 6170,6590,6410,6510,6490,6260,6170,6360
6250  GOTO 6590
6260  FOR I=1 TO 2
6270  IF Y[I,6]#X1 OR Y[I,7]#Y1 THEN 6320
6280  Y[I,6]=0
6290  Y[I,7]=0
6300  IF X1#INT(Y[I,1]+.5) OR Y1#INT(Y[I,2]+.5) THEN 6320
6310  Y[I,1]=0
6320  NEXT I
6330  R9=R9-1
6340  R3=R3-1
6350  GOTO 6590
6360  FOR I=1 TO 2
6370  IF X1#INT(Y[I,1]+.5) OR Y1#INT(Y[I,2]) THEN 6390
6380  Y[I,1]=0
6390  NEXT I
6400  GOTO 6590
6410  K3=K3-1
6420  K9=K9-1
6430  FOR I=1 TO 9
6440  IF X1#K[I,1] THEN 6460
6450  IF Y1=K[I,2] THEN 6470
6460  NEXT I
6470  K[I,3]=0
6480  GOTO 6590
6490  S3=S3-1
6500  GOTO 6590
6510  B3=B3-1
6520  PRINT 
6530  S$="X BASE SHIELD BLAST"
6540  D8=9
6550  R1=INT(RND(0)*D9+1)
6560  GOSUB 4030
6570  PRINT "-- CONGRATULATIONS DINGBAT! --";
6580  C$=" "
6590  PRINT 
6600  ASSIGN "*TREKE4",1,F0
6610  ADVANCE #1;Q-1,F0
6620  READ #1;H$
6630  PRINT " ";H$;" DESTROYED."
6640  Q[X1,Y1]=0
6650  G[Q1,Q2]=R3*1000+K3*100+B3*10+S3+G[Q1,Q2]-INT(G[Q1,Q2])
6660  IF K9 <= 0 THEN 4660
6670  GOTO 6700
6680  PRINT 
6690  PRINT "-- TORPEDO MISSED."
6700  GOSUB 4340
6710  IF E <= 0 THEN 4620
6720  GOTO 2360
6730  REM-DAMAGE CONTROL REPORT
6740  IF D[6] >= 0 THEN 6770
6750  PRINT "DAMAGE CONTROL INOPERABLE"
6760  GOTO 3440
6770  T=T+.1
6780  PRINT "DEVICE          STATE OF REPAIR"
6790  ASSIGN "*TREKE2",1,F0
6800  FOR I=1 TO 12
6810  READ #1;H$
6820  PRINT H$,D[I]
6830  NEXT I
6840  GOTO 2360
6850  REM-MEMORY SCAN
6860  IF D[7] >= 0 THEN 6890
6870  PRINT "MEMORY SCAN NOT AVAILABLE"
6880  GOTO 3440
6890  T=T+.1
6900  PRINT "MEMORY SCAN"
6910  PRINT " #  ^---1---^---2---^---3---^---4---^---5---^---6---^---7---^---8---^"
6920  FOR I=1 TO 8
6930  PRINT  USING 6940;I
6940  IMAGE#,2DX
6950  FOR J=1 TO 8
6960  M=INT(G[I,J])
6970  IF G[I,J]-M=0 THEN 7000
6980  IF G[I,J]-M=.2 THEN 7010
6990  GOTO 7010
7000  M=0
7010  PRINT  USING 7020;M
7020  IMAGE#,4X4D
7030  NEXT J
7040  PRINT 
7050  NEXT I
7060  PRINT 
7070  GOTO 2360
7080  REM-IMPULSE ENGINES
7090  IF D[8] >= 0 THEN 7120
7100  PRINT "IMPUSLE ENGINES ARE KNOCKED OUT"
7110  GOTO 3440
7120  PRINT "IMPULSE COURSE (1-8.99999):";
7130  INPUT C1
7140  IF C1=0 THEN 3440
7150  IF C1<1 OR C1 >= 9 THEN 7120
7160  PRINT "IMPULSE FACTOR (0-.5):";
7170  INPUT W1
7180  IF W1<0 OR W1>.5 THEN 7120
7190  T=T+W1-.1
7200  GOTO 5020
7210  REM-TRACTOR BEAM
7220  IF D[9] >= 0 THEN 7250
7230  PRINT "TRACTOR BEAM CONTROL DAMAGED"
7240  GOTO 3440
7250  PRINT "ATTACH BEAM TO OBJECT AT WHAT SECTOR (#,#):";
7260  INPUT X,Y
7270  IF X<1 OR X>8 THEN 3440
7280  IF Y<1 OR Y>8 THEN 3440
7290  Q=Q[X,Y]+1
7300  ASSIGN "*TREKE4",1,F0
7310  ADVANCE #1;Q-1,F0
7320  READ #1;H$
7330  PRINT H$;" AT THAT SECTOR."
7340  T=T+.05
7350  IF Q=1 OR Q=2 THEN 7250
7360  X2=X
7370  Y2=Y
7380  GOSUB 4770
7390  PRINT "ACTION (1=PULL  2=MOVE L  3=PUSH  4=MOVE R):";
7400  INPUT F1
7410  IF F1=0 THEN 7330
7420  IF F1<1 OR F1>4 THEN 7390
7430  C1=C1-INT(F1-1)*2
7440  IF C1 >= 1 THEN 7460
7450  C1=C1+8
7460  PRINT "TRACTOR BEAM ENERGY (UNITS AVAILABLE"E"):";
7470  INPUT H
7480  IF H<0 OR H >= E THEN 7390
7490  T=T+.05
7500  E=E-H
7510  N=INT(H/15*(1-SQR((X-S1)^2+(Y-S2)^2)/22)+.7)
7520  IF Q#8 THEN 7590
7530  K4=0
7540  FOR I=1 TO 2
7550  IF INT(Y[I,1]+.5)#X OR INT(Y[I,2]+.5)#Y THEN 7580
7560  K4=1
7570  GOTO 7590
7580  NEXT I
7590  IF Q#6 THEN 7650
7600  FOR I=1 TO 2
7610  IF Y[I,6]#X OR Y[I,7]#Y THEN 7640
7620  K4=I
7630  GOTO 7650
7640  NEXT I
7650  IF Q#3 THEN 7710
7660  FOR I=1 TO K3
7670  IF K[I,1]#X OR K[I,2]#Y THEN 7700
7680  K4=I
7690  GOTO 7710
7700  NEXT I
7710  IF Q#4 AND Q#5 THEN 7790
7720  PRINT H$;" IMMOVABLE, ";O$;" MOVES IN REACTION."
7730  X=S1
7740  Y=S2
7750  Q=2
7760  C1=C1-4
7770  IF C1 >= 1 THEN 7790
7780  C1=C1+8
7790  GOSUB 4930
7800  Q[X,Y]=0
7810  FOR I=1 TO N
7820  X=X+X2
7830  Y=Y+Y2
7840  IF X<.5 OR X >= 8.5 THEN 8190
7850  IF Y<.5 OR Y >= 8.5 THEN 8190
7860  X1=INT(X+.5)
7870  Y1=INT(Y+.5)
7880  IF Q[X1,Y1]#0 THEN 7930
7890  PRINT "("X1","Y1")";
7900  NEXT I
7910  PRINT 
7920  GOTO 8230
7930  PRINT 
7940  ASSIGN "*TREKE4",1,F0
7950  ADVANCE #1;Q-1,F0
7960  READ #1;H$
7970  PRINT H$;" BLOCKED BY OBJECT AT SECTOR"X1","Y1
7980  D8=1
7990  IF Q#3 THEN 8140
8000  E1=INT(RND(0)*100+1)
8010  K[K4,3]=K[K4,3]-E1
8020  PRINT H$;" USED"E1"UNITS OF ENERGY TO ABSORB SHOCK."
8030  IF K[K4,3] <= 0 THEN 8060
8040  PRINT "("K[K4,3]"REMAINING ON ";H$;"."
8050  GOTO 8130
8060  PRINT " ** DESTROYED **";
8070  K[K4,3]=0
8080  Q[X-X2,Y-Y2]=0
8090  I8=I
8100  I=K4
8110  GOSUB 4280
8120  I=I8
8130  PRINT 
8140  IF Q#2 THEN 8210
8150  S$="TRACTOR COLLISION"
8160  R1=INT(RND(0)*D9+1)
8170  GOSUB 4030
8180  GOTO 8210
8190  PRINT 
8200  PRINT H$;" CAN'T TRACTOR BEYOND QUADRANT."
8210  X=X-X2
8220  Y=Y-Y2
8230  X=INT(X+.5)
8240  Y=INT(Y+.5)
8250  IF Q#2 THEN 8280
8260  S1=X
8270  S2=Y
8280  Q[X,Y]=Q-1
8290  IF Q#3 THEN 8320
8300  K[K4,1]=X
8310  K[K4,2]=Y
8320  IF Q#8 THEN 8350
8330  Y[K4,1]=X
8340  Y[K4,2]=Y
8350  IF Q#6 THEN 8380
8360  Y[K4,6]=X
8370  Y[K4,7]=Y
8380  PRINT "TRACTOR BEAM MOVEMENT COMPLETED."
8390  GOTO 2360
8400  REM-SHIELDS
8410  IF D[10] >= 0 THEN 8440
8420  PRINT "SHIELD CONTROL IS UNDER REPAIR"
8430  GOTO 3440
8440  PRINT "SHIELD REPORT AND CONTROL"
8450  T=T+.1
8460  FOR I=1 TO 4
8470  PRINT "SHIELD"I"AT"S[I]"AVAILABLE TO PUT IN"E":";
8480  INPUT H
8490  IF H>E OR -H*2-.01>S[I] THEN 8470
8500  E=E-H
8510  S[I]=S[I]+H*2
8520  NEXT I
8530  GOTO 2360
8540  REM-REPAIRS
8550  IF D[11] >= 0 THEN 8580
8560  PRINT "REPAIRS UNDER REPAIR"
8570  GOTO 3440
8580  PRINT "WHICH DEVICE: (0 TO 11)";
8590  INPUT V1
8600  T=T+.05
8610  IF V1 >= 0 AND V1 <= 12 THEN 8630
8620  GOTO 8580
8630  PRINT "HOW MUCH ENERGY: ("E"AVAILABLE)";
8640  INPUT V2
8650  IF V2>E THEN 8580
8660  E=E-V2
8670  D[V1+1]=D[V1+1]+V2/500
8680  IF D[V1+1]<0 THEN 8700
8690  D[V1+1]=0
8700  ASSIGN "*TREKE2",1,F0
8710  ADVANCE #1;V1,F0
8720  READ #1;H$
8730  PRINT H$" NOW AT"D[V1+1]
8740  GOTO 2360
8750  REM-PROBES
8760  IF D[12] >= 0 THEN 8790
8770  PRINT "PROBE BANKS BEING REPAIRED"
8780  GOTO 3440
8790  IF U>0 THEN 8820
8800  PRINT "NO PROBES LEFT"
8810  GOTO 3440
8820  PRINT "PROBE COURSE (1 TO 8.99999):";
8830  INPUT C1
8840  IF C1=0 THEN 3440
8850  IF C1<1 OR C1 >= 9 THEN 8760
8860  T=T+.1
8870  U=U-1
8880  X1=Q1
8890  Y1=Q2
8900  GOSUB 4930
8910  N=12
8920  X=Y=0
8930  FOR I=1 TO N
8940  X1=X1+X2
8950  Y1=Y1+Y2
8960  IF X1<.5 OR X1 >= 8.5 OR Y1<.5 OR Y1 >= 8.5 THEN 9140
8970  IF X=INT(X1+.5) AND Y=INT(Y1+.5) THEN 9130
8980  X=INT(X1+.5)
8990  Y=INT(Y1+.5)
9000  PRINT "--QUADRANT:";
9010  PRINT "("X","Y")";
9020  IF RND(0)>.2 THEN 9050
9030  PRINT "     ** DESTROYED **"
9040  GOTO 9150
9050  PRINT INT(G[X,Y]);
9060  IF G[X,Y]<100 THEN 9120
9070  PRINT "** EVASIVE MANEUVERS ";
9080  IF RND(0)>.4 THEN 9110
9090  PRINT "** DESTROYED **"
9100  GOTO 9150
9110  PRINT "** SUCCESSFUL **"
9120  G[X,Y]=INT(G[X,Y])+.2
9130  NEXT I
9140  PRINT "-- PROBE LEFT GALAXY."
9150  GOTO 2360
9160  REM-SELF DESTRUCT
9170  PRINT "BOOM!"
9180  PRINT "THE ";O$;" HAS SELF-DESTRUCTED!"
9190  GOTO 4680
9200  END 
