10  DIM G[8,8],M[8,8],Q[8,8],K[9,3]
20  REM DIM A$[50],C$[72],D$[10],L$[4],I$[15]
30  REM READ D$,L$,A$,O2,O3,O4,O5,O8,E1,K1
32  READ O2,O3,O4,O5,O8,E1,K1
40  REM WRITTEN BY JOE ALTMAIER SOMETIME IN THE LATE 70S
42  REM PAPERTAPE HP BASIC CONVERSION 6/2010 BY WTN...
43  REM STARTING W/TSB-E CONVERSION 8/06 REMOVED STRINGS,
44  REM RECODED GOTO N OF STATEMENTS, ADDED POSITION INDICATOR TO
45  REM GALACTIC MAP, NUMERICAL COMMANDS (1 FREE HELP FOR EACH INPUT)
46  REM ADDED INSTRUCTIONS AND PROMPTS FOR RANDOM SEED
47  REM ADDED NUMBER PRINT SUBROUTINE FOR BETTER FORMATTING
55  REM DATA ".123456789",".BE"," .  + 'O'/^\>!<***",2,3,4,5,8,10,12
57  DATA 2,3,4,5,8,10,12
60  DEF FNO(Q)=Q<O1 OR Q>O8
65  DEF FNR(X)=INT(RND(O1)*X)+O1
70  LET F1=F2=F3=O1=1
80  LET I1=I2=O0=0
90  LET A1=1
92  PRINT 
93  PRINT 
94  PRINT "WELCOME TO TTY TREK 3"
95  PRINT "1)LIST ALL 2)PAGE INSTRUCTIONS, OR ENTER SEED ";
96  INPUT Z9
97  IF Z9#1 AND Z9#2 THEN 107
98  GOSUB 8000
99  IF Z9#2 THEN 105
100  PRINT "ENTER 2 TO REPEAT INSTRUCTIONS, OR ENTER SEED ";
101  INPUT Z9
102  IF Z9=2 THEN 98
103  GOTO 107
105  PRINT "ENTER SEED ";
106  INPUT Z9
107  FOR I=0 TO Z9
108  LET Z8=RND(1)
109  NEXT I
110  REM GALAXY STARTUP
120  FOR I=O1 TO O8
130  FOR J=O1 TO O8
140  LET G[I,J]=RND(O1)^O2
150  IF I>O2 OR J>O2 THEN 180
160  LET G[I,J]=G[I,J]+O3
170  GOTO 200
180  IF RND(O1)>.125 THEN 200
190  LET G[I,J]=G[I,J]+10
200  NEXT J
210  NEXT I
220  LET G[O1,O1]=G[O1,O1]+20
230  MAT M=G
240  REM SHIP STARTUP
250  READ X,Y,X1,Y1,E,P,S,H
260  DATA 5,5,3,3,1000,10,0,55
265  PRINT "DIFFICULTY FACTOR(1-10) ";
270  INPUT M
275  LET M=M/10
280  GOTO 1660
290  REM PRINT NEW SCREEN
300  IF F1=O0 THEN 700
310  FOR I=O1 TO O8
320  FOR J=O1 TO O8
330  REM PRINT A$[(Q[J,I]+O1)*O3-O2,(Q[J,I]+O1)*O3];
332  LET Z9=Q[J,I]
333  IF Z9=1 THEN 350
334  IF Z9=2 THEN 360
335  IF Z9=3 THEN 370
336  IF Z9=4 THEN 380
337  IF Z9=5 THEN 390
340  PRINT " . ";
345  GOTO 480
350  PRINT " + ";
355  GOTO 480
360  PRINT "'O'";
365  GOTO 480
370  PRINT "/^\";
375  GOTO 480
380  PRINT ">!<";
385  GOTO 480
390  PRINT "***";
480  NEXT J
485  PRINT " ";
490  REM PRINT VITAL INFO
500  IF I<O3 THEN 620
510  REM GOTO I-O2 OF 520,540,560,580,600,630
511  IF I=3 THEN 520
512  IF I=4 THEN 540
513  IF I=5 THEN 560
514  IF I=6 THEN 580
515  IF I=7 THEN 600
516  IF I=8 THEN 630
520  PRINT "HULL TEMP "INT(H)
530  GOTO 630
540  PRINT "ENERGY    "E
550  GOTO 630
560  PRINT "PHOTONS   "P
570  GOTO 630
580  PRINT "SHIELDS   "S
590  GOTO 630
600  REM PRINT "QUADRANT  "X;Y
601  PRINT "QUADRANT   ";
602  LET Z9=X
603  GOSUB 7400
604  PRINT ",";
605  LET Z9=Y
606  GOSUB 7400
607  PRINT 
610  GOTO 630
620  PRINT 
630  NEXT I
635  PRINT 
640  LET F1=O0
690  REM VICTORY/DEATH
700  IF E1=O0 AND K1=O0 THEN 9800
710  IF S<O0 THEN 9950
720  IF H>400 THEN 9900
730  LET H=H-H/(LOG(10)/LOG(H))/10
990  REM COMMAND INPUT
1000  REM INPUT C$
1005  REM C$=UPS$(C$)
1010  REM I=POS("MPTELSGAR",C$[O1,O1])
1030  REM GOTO I OF 1100,2100,2500,3000,3500,4000,4500,5000,5500
1031  LET Z8=0
1032  INPUT Z9
1033  IF Z9=1 THEN 1100
1034  IF Z9=2 THEN 2100
1035  IF Z9=3 THEN 2500
1036  IF Z9=4 THEN 3000
1037  IF Z9=5 THEN 3500
1038  IF Z9=6 THEN 4000
1039  IF Z9=7 THEN 5500
1040  IF Z9=8 THEN 5000
1041  IF Z9=9 THEN 4500
1045  IF Z8>0 THEN 6000
1050  PRINT "1)MOVE        2)PHASER      3)TORPEDO"
1060  PRINT "4)ENERGY AL.  5)LONG SCAN   6)SHORT SCAN"
1070  PRINT "7)REPORT      8)AUTO SCAN   9)GALACTIC RECORD"
1080  REM GOTO 6000
1082  LET Z8=Z8+1
1083  GOTO 1032
1090  REM MOVING
1100  PRINT "COURSE(1-9),WARP(0-3) ";
1110  INPUT C,W
1115  IF W>O3 OR W<O0 THEN 1100
1120  LET F1=A1
1130  GOSUB 9000
1140  IF S1=O0 THEN 1500
1144  REM CHECK IF GOT THAT FAR
1145  IF (W*O8*I1)^O2+(W*O8*I2)^O2<(S1-X1)^O2+(S2-Y1)^O2 THEN 1500
1150  PRINT "COLLISION WITH ";
1160  REM GOTO Q[S1,S2] OF 1180,6000,1210,1240,1340
1161  LET Z9=Q[S1,S2]
1162  IF Z9=1 THEN 1180
1163  IF Z9=2 THEN 6000
1164  IF Z9=3 THEN 1210
1165  IF Z9=4 THEN 1240
1166  IF Z9=5 THEN 1340
1170  PRINT "**ERROR**"
1180  PRINT "STAR."
1190  LET H=H+1000/(S+O1)*100
1200  GOTO 1350
1210  PRINT "KLINGON!"
1220  GOTO 1350
1240  PRINT "BASE. ";
1250  IF F3=O0 THEN 1280
1260  PRINT "BACK AGAIN?  SORRY, WE'RE CLOSED."
1270  GOTO 1350
1280  PRINT "DOCKING."
1290  LET E=E+2000
1300  LET P=P+O5
1310  LET H=55
1320  LET F3=O1
1330  GOTO 1350
1340  PRINT "ENEMY BASE!"
1350  LET S1=S1-I1
1360  LET S2=S2-I2
1370  IF Q[S1,S2]=O0 THEN 1430
1380  IF Q[S1,S2]#O2 THEN 1350
1390  LET F1=O0
1400  GOTO 6000
1430  LET Q[X1,Y1]=O0
1435  LET X1=INT(S1+.5)
1440  LET Y1=INT(S2+.5)
1445  LET Q[X1,Y1]=O2
1450  GOTO 6000
1490  REM CLEAR PATH
1500  LET S1=INT(X1+W*O8*I1+.5)
1510  LET S2=INT(Y1+W*O8*I2+.5)
1520  IF FNO(S1)=O0 AND FNO(S2)=O0 THEN 1370
1590  REM CHANGE QUADRANT
1600  LET F3=O0
1605  IF FNO(S1)=O0 THEN 1630
1610  LET X=X+INT((S1-O1)/O8)
1620  IF FNO(S2)=O0 THEN 1640
1630  LET Y=Y+INT((S2-O1)/O8)
1640  LET X1=S1+O8-INT((S1+7)/O8)*O8
1650  LET Y1=S2+O8-INT((S2+7)/O8)*O8
1655  REM CREATE NEW QUADRANT
1660  MAT Q=ZER
1665  LET K2=O0
1670  LET X1=INT(X1+.5)
1680  LET Y1=INT(Y1+.5)
1690  LET Q[X1,Y1]=O2
1700  IF FNO(X)=O1 OR FNO(Y)=O1 THEN 6000
1710  LET C1=G[X,Y]
1712  LET M[X,Y]=C1
1715  REM ENEMY BASE
1720  IF C1<20 THEN 1850
1730  LET Q[O4,O4]=Q[O4,O5]=Q[O5,O4]=Q[O5,O5]=O5
1740  IF Q[X1,Y1]#O5 THEN 1790
1750  LET X1=X1-I1
1760  LET Y1=Y1-I2
1770  GOTO 1740
1790  LET X1=INT(X1+.5)
1800  LET Y1=INT(Y1+.5)
1810  LET Q[X1,Y1]=O2
1820  GOTO 1900
1840  REM BASE
1850  IF C1<10 THEN 1900
1860  LET R1=FNR(O8)
1870  LET R2=FNR(O8)
1880  IF Q[R1,R2]#O0 THEN 1860
1890  LET Q[R1,R2]=O4
1895  REM STARS
1900  LET C2=(C1-INT(C1))*10
1910  FOR I=O1 TO C2
1920  LET R1=FNR(O8)
1930  LET R2=FNR(O8)
1940  IF Q[R1,R2]#O0 THEN 1920
1950  LET Q[R1,R2]=O1
1960  NEXT I
1965  REM KLINGONS
1970  LET C3=C1-C2/10-INT(C1/10)*10
1980  FOR I=O1 TO C3
1990  LET R1=FNR(O8)
2000  LET R2=FNR(O8)
2010  IF Q[R1,R2]#O0 THEN 1990
2020  LET Q[R1,R2]=O3
2030  LET K[I,O1]=R1
2040  LET K[I,O2]=R2
2050  LET K[I,O3]=1000
2060  NEXT I
2070  LET K2=C3
2080  GOTO 6000
2090  REM PHASERING
2100  PRINT "AVAILABLE ENERGY"E
2105  PRINT "HOW MANY UNITS TO FIRE";
2110  INPUT U
2120  IF U>E OR U<O0 THEN 2100
2130  LET E=E-U
2140  REM PRINT INT(E+.5)"LEFT. ";
2142  LET Z9=INT(E+.5)
2143  GOSUB 7400
2144  PRINT " UNITS LEFT. ";
2150  LET Q=K2
2160  FOR I=O1 TO K2
2170  IF I>K2 THEN 2260
2180  LET H1=U/SQR((X1-K[I,O1])^O2+(Y1-K[I,O2])^O2)
2190  LET K[I,O3]=K[I,O3]-H1
2200  IF K[I,O3]>O0 THEN 2250
2210  LET Q[K[I,O1],K[I,O2]]=O0
2220  GOSUB 9200
2230  REM PRINT "KILLED"Q-K2"KLINGONS!";
2232  PRINT "KILLED ";
2233  LET Z9=Q-K2
2234  GOSUB 7400
2235  IF Z9>1 THEN 2238
2236  PRINT " KLINGON!";
2237  GOTO 2240
2238  PRINT " KLINGONS!";
2240  GOTO 2170
2250  NEXT I
2260  IF Q=K2 THEN 2290
2270  PRINT 
2280  GOTO 6000
2290  PRINT "NONE KILLED"
2300  GOTO 6000
2490  REM TORPEDOING
2500  IF P#O0 THEN 2530
2510  PRINT "OUT OF TORPEDOES."
2520  GOTO 6000
2530  LET P=P-O1
2540  PRINT "DIRECTION(1-9)";
2550  INPUT C
2560  GOSUB 9000
2570  IF S1=O0 THEN 2950
2580  LET F1=A1
2590  LET C1=Q[S1,S2]
2610  PRINT "HIT A";
2620  REM GOTO C1 OF 2630,2630,2650,2810,2850
2621  IF C1=3 THEN 2650
2622  IF C1=4 THEN 2810
2623  IF C1=5 THEN 2850
2630  PRINT " STAR."
2640  LET F1=O0
2645  GOTO 6000
2650  PRINT " KLINGON!"
2653  LET Q[S1,S2]=O0
2655  LET S1=INT(S1+.5)
2657  LET S2=INT(S2+.5)
2660  FOR I=O1 TO K2
2670  IF K[I,1]#S1 OR K[I,O2]#S2 THEN 2780
2680  GOSUB 9200
2760  GOTO 6000
2780  NEXT I
2790  PRINT "PROGRAM CONFUSED."
2800  GOTO 6000
2810  PRINT " STARBASE! YOU FOOL!"
2815  LET Q[S1,S2]=O0
2820  LET G[X,Y]=G[X,Y]-10
2830  LET M[X,Y]=G[X,Y]
2840  GOTO 6000
2850  PRINT " AN ENEMY BASE!"
2860  LET E1=E1-O1
2870  IF E1<O1 THEN 2880
2874  LET F1=O0
2876  GOTO 6000
2880  PRINT " IT IS DESTROYED!"
2890  LET G[X,Y]=G[X,Y]-20
2900  LET M[X,Y]=G[X,Y]
2910  LET Q[O4,O4]=Q[O4,O5]=Q[O5,O4]=Q[O5,O5]=O0
2920  GOTO 6000
2950  PRINT "MISSED!"
2960  GOTO 6000
2990  REM ENERGY ALLOCATION
3000  LET E=E+S
3010  PRINT "AVAILABLE ENERGY"E
3012  PRINT "HOW MANY UNITS TO SHIELDS";
3020  INPUT S
3025  IF S<O0 THEN 3010
3030  IF E-S<O0 THEN 3010
3040  LET E=E-S
3050  REM PRINT E"UNITS LEFT."
3052  LET Z9=E
3053  GOSUB 7400
3054  PRINT " UNITS LEFT."
3060  GOTO 6000
3490  REM LONG RANGE SCAN
3500  FOR I=Y-O1 TO Y+O1
3510  IF FNO(I)=O0 THEN 3540
3520  PRINT " .  .  ."
3530  GOTO 3640
3540  FOR J=X-O1 TO X+O1
3550  LET C2=O4
3555  LET C3=O1
3560  IF FNO(J)=O1 THEN 3610
3570  LET C1=G[J,I]
3580  LET M[J,I]=C1
3590  LET C2=INT(C1/10)+O1
3600  LET C3=INT(C1-(C2-O1)*10)+O1
3610  REM PRINT L$[C2,C2];D$[C3,C3];" ";
3611  GOSUB 3700
3620  NEXT J
3630  PRINT 
3640  NEXT I
3650  GOTO 6000
3698  REM PRINT SUB TO ELIMINATE STRINGS
3700  IF C2=2 THEN 3710
3702  IF C2=3 THEN 3720
3705  PRINT ".";
3707  GOTO 3730
3710  PRINT "B";
3715  GOTO 3730
3720  PRINT "E";
3730  IF C3=2 THEN 3750
3731  IF C3=3 THEN 3760
3732  IF C3=4 THEN 3770
3733  IF C3=5 THEN 3780
3734  IF C3=6 THEN 3790
3735  IF C3=7 THEN 3800
3736  IF C3=8 THEN 3810
3737  IF C3=9 THEN 3820
3738  IF C3=10 THEN 3830
3740  PRINT ".";
3745  GOTO 3840
3750  PRINT "1";
3755  GOTO 3840
3760  PRINT "2";
3765  GOTO 3840
3770  PRINT "3";
3775  GOTO 3840
3780  PRINT "4";
3785  GOTO 3840
3790  PRINT "5";
3795  GOTO 3840
3800  PRINT "6";
3805  GOTO 3840
3810  PRINT "7";
3815  GOTO 3840
3820  PRINT "8";
3825  GOTO 3840
3830  PRINT "9";
3840  IF Z9#9 OR I#Y OR J=8 THEN 3880
3850  IF J#X THEN 3860
3855  PRINT "<";
3857  RETURN 
3860  IF J#X-1 THEN 3880
3865  PRINT ">";
3870  RETURN 
3880  PRINT " ";
3890  RETURN 
3990  REM SHORT RANGE SCAN
4000  LET F1=O1
4010  GOTO 6000
4490  REM GALACTIC MAP
4500  FOR I=O1 TO O8
4510  FOR J=O1 TO O8
4520  LET C1=M[J,I]
4530  LET C2=INT(C1/10)+O1
4540  LET C3=INT(C1-(C2-O1)*10)+O1
4550  REM PRINT L$[C2,C2];D$[C3,C3];" ";
4551  GOSUB 3700
4560  NEXT J
4570  PRINT 
4580  NEXT I
4590  GOTO 6000
4990  REM AUTO SCAN TOGGLE
5000  LET A1=O1-A1
5010  LET F1=A1
5020  GOTO 6000
5490  REM REPORT OF SHIP STATUS
5500  REM PRINT "SHIELDS  "S"QUADRANT "X;Y
5501  REM PRINT "HULL TEMP"INT(H)"ENERGY"E"PHOTONS"P
5502  REM PRINT "KLINGONS "K1"ENEMY BASE"E1" LEVEL"INT(M*10)
5503  PRINT "SHIELDS   ";
5504  LET Z9=S
5505  GOSUB 7400
5506  PRINT TAB(17);"QUADRANT ";
5507  LET Z9=X
5508  GOSUB 7400
5509  PRINT ",";
5510  LET Z9=Y
5511  GOSUB 7400
5512  PRINT 
5515  PRINT "HULL TEMP ";
5516  LET Z9=INT(H)
5517  GOSUB 7400
5518  PRINT TAB(17);"ENERGY   ";
5519  LET Z9=E
5520  GOSUB 7400
5522  PRINT TAB(34);"PHOTONS"P
5530  PRINT "KLINGONS  ";
5531  LET Z9=K1
5532  GOSUB 7400
5533  PRINT TAB(17);"ENEMY BASE ";
5534  LET Z9=E1
5535  GOSUB 7400
5540  PRINT TAB(34);"LEVEL"INT(M*10)
5590  GOTO 6000
5990  REM KLINGON FIRING
6000  IF K2=O0 THEN 6100
6005  FOR I=O1 TO K2
6010  LET H1=INT((K[I,O3]/10)+.5)
6020  LET K[I,O3]=K[I,O3]-H1
6025  IF S<1 THEN 6040
6030  LET H=H+(H1/(S+10))*100
6040  LET S=S-H1
6050  PRINT "INCOMING!"H1
6070  NEXT I
6080  PRINT 
6090  REM KLINGON FILTERING
6100  FOR I=O1 TO O8
6110  FOR J=O1 TO O8
6120  LET C1=G[I,J]
6130  IF C1 >= 20 OR C1<10 THEN 6220
6140  FOR J2=I-O1 TO I+O1
6150  IF FNO(J2) THEN 6200
6160  FOR J3=J-O1 TO J+O1
6170  IF FNO(J3) THEN 6190
6180  LET M[J2,J3]=G[J2,J3]
6190  NEXT J3
6200  NEXT J2
6210  GOTO 6520
6220  IF I=X AND J=Y THEN 6520
6225  LET C2=C1-INT(C1/10)*10
6230  LET S1=S2=O0
6240  IF C2<O1 THEN 6520
6250  FOR J2=I-O1 TO I+O1
6260  IF FNO(J2) THEN 6470
6270  FOR J3=J-O1 TO J+O1
6280  IF FNO(J3) THEN 6460
6285  IF J2=X AND J3=Y THEN 6460
6290  LET C3=G[J2,J3]
6300  IF C3<10 OR C3 >= 20 THEN 6430
6310  LET G[I,J]=C1-O1
6320  LET M[I,J]=G[I,J]
6330  LET C3=C3+O1
6340  LET G[J2,J3]=C3
6350  REM PRINT "KLINGON ATTACKING"J2;J3;
6352  PRINT "KINGON ATTACKING BASE AT ";
6353  LET Z9=J2
6354  GOSUB 7400
6355  PRINT ",";
6356  LET Z9=J3
6357  GOSUB 7400
6358  PRINT TAB(34);
6360  IF C3-INT(C3/10)*10 >= O3 THEN 6390
6365  PRINT 
6370  LET M[J2,J3]=G[J2,J3]
6380  GOTO 6520
6390  PRINT "AHRGH!"
6400  LET G[J2,J3]=C3-10
6410  LET M[J2,J3]=G[J2,J3]
6420  GOTO 6520
6430  IF C3-INT(C3/10)*10 >= O3 THEN 6460
6440  LET S1=J2
6450  LET S2=J3
6460  NEXT J3
6470  NEXT J2
6480  IF S1=O0 THEN 6520
6484  IF I#O1 OR J#O1 THEN 6490
6486  IF C2>6 THEN 6500
6488  GOTO 6520
6490  IF RND(O1)>M/O3 THEN 6520
6500  LET G[I,J]=C1-O1
6510  LET G[S1,S2]=G[S1,S2]+O1
6520  NEXT J
6530  NEXT I
6540  REM KLINGON GENERATION
6550  IF E1=O0 THEN 300
6560  IF X=O1 AND Y=O1 THEN 300
6570  IF INT(G[O1,O1]-20)=9 THEN 300
6580  IF RND(O1)>M THEN 300
6590  LET G[O1,O1]=G[O1,O1]+O1
6600  LET K1=K1+O1
6610  GOTO 300
7395  REM *** INTEGER PRINT SUBROUTINE ***
7396  REM UP TO 6 DIGITS -999999 to 999999, NO SPACES PRINTED
7397  REM NUMBER TO PRINT IN Z9, Z8 AND Z7 USED FOR TEMPS
7398  REM IF OUT OF RANGE JUST PRINTS
7400  IF ABS(Z9) <= 999999. THEN 7405
7402  PRINT Z9
7403  RETURN 
7405  IF Z9 >= 0 THEN 7420
7410  PRINT "-";
7420  LET Z8=ABS(Z9)
7430  LET Z8=INT(Z8)
7440  IF Z8<10 THEN 7560
7450  IF Z8<100 THEN 7530
7460  IF Z8<1000 THEN 7500
7461  IF Z8<10000 THEN 7470
7462  IF Z8<100000. THEN 7466
7463  LET Z7=INT(Z8/100000.)
7464  LET Z8=Z8-Z7*100000.
7465  GOSUB 7700
7466  LET Z7=INT(Z8/10000)
7467  LET Z8=Z8-Z7*10000
7468  GOSUB 7700
7470  LET Z7=INT(Z8/1000)
7480  LET Z8=Z8-Z7*1000
7490  GOSUB 7700
7500  LET Z7=INT(Z8/100)
7510  LET Z8=Z8-Z7*100
7520  GOSUB 7700
7530  LET Z7=INT(Z8/10)
7540  LET Z8=Z8-Z7*10
7550  GOSUB 7700
7560  LET Z7=Z8
7570  GOSUB 7700
7580  RETURN 
7695  REM DIGIT PRINT SUBROUTINE, DIGIT IN Z7
7700  IF Z7=1 THEN 7810
7710  IF Z7=2 THEN 7830
7720  IF Z7=3 THEN 7850
7730  IF Z7=4 THEN 7870
7740  IF Z7=5 THEN 7890
7750  IF Z7=6 THEN 7910
7760  IF Z7=7 THEN 7930
7770  IF Z7=8 THEN 7950
7780  IF Z7=9 THEN 7970
7790  PRINT "0";
7800  RETURN 
7810  PRINT "1";
7820  RETURN 
7830  PRINT "2";
7840  RETURN 
7850  PRINT "3";
7860  RETURN 
7870  PRINT "4";
7880  RETURN 
7890  PRINT "5";
7900  RETURN 
7910  PRINT "6";
7920  RETURN 
7930  PRINT "7";
7940  RETURN 
7950  PRINT "8";
7960  RETURN 
7970  PRINT "9";
7980  RETURN 
7990  REM INSTRUCTIONS FOR PAPERTAPE VERSION OF TTYTRK
8000  PRINT 
8010  PRINT "INSTRUCTIONS FOR TTY TREK 3"
8015  PRINT 
8020  PRINT "THE GALAXY IS DIVIDED INTO 64 QUADRANTS ARRANGED ON AN"
8025  PRINT "8 BY 8 GRID, EACH QUADRANT IS SUBDIVIDED INTO 64 SECTORS"
8030  PRINT "WHICH CAN CONTAIN STARS, BASES, KLINGONS AND THE";
8031  PRINT " ENTERPRISE."
8035  PRINT "AS TIME PASSES MESSAGES ARE PRINTED INDICATING BASES";
8036  PRINT " UNDER"
8040  PRINT "ATTACK, IF KLINGONS ARE PRESENT THEY FIRE AND DRAIN YOUR"
8045  PRINT "SHIELDS. THE KLINGONS MOVE AROUND AND REGENERATE AND HAVE"
8050  PRINT "BEEN KNOWN TO CLOAK. AS COMMANDER OF THE ENTERPRISE YOU"
8055  PRINT "MUST RID THE GALAXY OF KLINGONS AND THEIR BASE."
8060  PRINT 
8065  PRINT "THIS VERSION OF TTY TREK HAS BEEN ADAPTED FOR THE"
8070  PRINT "CONFINES OF A MORE PRIMITIVE CONTROL SYSTEM THAT DOES"
8075  PRINT "NOT PERMIT ALPHABETIC ENTRY, THUS COMMANDS MUST BE";
8076  PRINT " SPECIFIED"
8080  PRINT "USING NUMERIC CODES. ENTER COMMAND 0 FOR HELP, ENTERING"
8082  PRINT "0 A SECOND TIME CAUSES TIME TO PASS."
8085  PRINT 
8090  PRINT "WHEN PROMPTED ENTER A SEED VALUE TO INFLUENCE THE INITIAL"
8095  PRINT "CONDITIONS, THEN ENTER THE DESIRED LEVEL OF DIFFICULTY."
8105  PRINT 
8111  IF Z9#2 THEN 8120
8112  PRINT 
8113  PRINT 
8115  GOSUB 8600
8120  PRINT "THE FOLLOWING COMMANDS CAN BE GIVEN:"
8130  PRINT 
8140  PRINT "1 - MOVE. MOVEMENT IS SPECIFIED AS DIR,WARP WHERE DIR";
8141  PRINT " IS A"
8150  PRINT "DIRECTION FROM 1-9 AND WARP IS THE NUMBER OF QUADRANTS TO"
8160  PRINT "TRAVERSE. SPECIFY FRACTIONAL WARP TO MOVE WITHIN A";
8161  PRINT " QUADRANT."
8170  PRINT "DIRECTIONS ARE AS FOLLOWS..."
8180  PRINT 
8190  PRINT "  4   3   2"
8200  PRINT "    \ | /"
8210  PRINT "  5--'O'--1"
8220  PRINT "    / | \"
8230  PRINT "  6   7   8"
8240  PRINT 
8250  PRINT "2 - PHASORS. ENTER HOW MUCH ENERGY TO FIRE AT ENEMY";
8251  PRINT " SHIPS."
8260  PRINT "3 - TORPEDO. ENTER A DIRECTION NUMBER TO FIRE A TORPEDO."
8270  PRINT "4 - ENERGY ALLOCATE. ENTER HOW MUCH TO DIVERT TO SHIELDS."
8280  PRINT 
8290  PRINT "5 - LONG RANGE SCAN OF SURROUNDING QUADRANTS. DIGITS";
8291  PRINT " INDICATE"
8300  PRINT "THE NUMBER OF ENEMY SHIPS, B FOR STAR BASE, E FOR ENEMY";
8301  PRINT " BASE."
8310  PRINT "EMPTY SPACE EXCEPT FOR STARS IS INDICATED BY .."
8320  PRINT "SINGLE PERIODS INDICATE THE EDGE OF THE GALAXY."
8330  PRINT 
8331  IF Z9#2 THEN 8340
8332  GOSUB 8600
8340  PRINT "6 - SHORT RANGE SCAN OF CURRENT QUADRANT. THE + SYMBOLS";
8341  PRINT " ARE"
8350  PRINT "STARS, 'O' IS THE ENTERPRISE, /^\ ARE KLINGONS, >!< IS";
8351  PRINT " A BASE"
8360  PRINT "WHICH YOU CAN DOCK WITH TO REPLENISH ENERGY AND";
8361  PRINT " TORPEDOES."
8370  PRINT "THE ENEMY BASE IS INDICATED BY A BLOCK OF *** SYMBOLS."
8380  PRINT "PERIODS INDICATE EMPTY SPACE."
8390  PRINT 
8400  PRINT "7 - REPORT OF VITAL STATS AND STUFF."
8410  PRINT "8 - TOGGLES AUTOSCAN OFF AND ON. WHEN ON, A SHORT-RANGE";
8411  PRINT " SCAN"
8420  PRINT "IS AUTOMATICALLY PERFORMED AFTER MOVING. DEFAULT IS ON."
8430  PRINT "9 - GALAXY RECORD, SAME FORMAT AS LONG RANGE SCAN."
8450  PRINT 
8460  PRINT "INITIALLY YOU HAVE 1000 UNITS OF ENERGY AND 10";
8461  PRINT " TORPEDOS, DOCK"
8470  PRINT "WITH A STARBASE (BY COLLIDING WITH IT) FOR 2000 MORE";
8471  PRINT " UNITS OF"
8480  PRINT "ENERGY AND 5 MORE TORPEDOS. HINTS... WHEN SPECIFYING";
8481  PRINT " DIRECTION"
8490  PRINT "USE FP NUMBERS FOR FRACTIONAL DIRECTIONS, FOR EXAMPLE 2";
8491  PRINT " CLICKS"
8500  PRINT "TO THE RIGHT AND 4 CLICKS UP IS A DIRECTION OF 2.5 AND";
8501  PRINT " 3 CLICKS"
8510  PRINT "TO THE LEFT AND 1 CLICK DOWN IS A DIRECTION OF 5.33.";
8511  PRINT " FOR WARP"
8520  PRINT "SPECIFY .125 FOR EACH SECTOR DISTANCE, REMEMBER THAT";
8521  PRINT " DIAGONALS"
8530  PRINT "ARE LONGER, 1 QUADRANT LEFT AND 1 UP IS A DISTANCE OF";
8531  PRINT " 1.414."
8540  PRINT 
8550  IF Z9#2 THEN 8590
8552  PRINT 
8553  PRINT 
8590  RETURN 
8600  PRINT TAB(54);"(# FOR NEXT PAGE) ";
8610  INPUT Z8
8620  PRINT 
8630  RETURN 
8990  REM COLLISION SUBROUTINE
9000  LET I1=COS((C-O1)*.785398)
9010  LET I2=-SIN((C-O1)*.785398)
9020  LET S1=X1
9030  LET S2=Y1
9040  LET S1=S1+I1
9050  LET S2=S2+I2
9060  IF FNO(INT(S1+.5))=O1 OR FNO(INT(S2+.5))=O1 THEN 9100
9070  IF Q[S1,S2]=O0 THEN 9040
9080  IF Q[S1,S2]=O2 THEN 9040
9090  RETURN 
9100  LET S1=O0
9110  RETURN 
9190  REM DELETE KLINGON
9200  FOR J2=I TO K2-O1
9210  FOR J3=O1 TO O3
9220  LET K[J2,J3]=K[J2+O1,J3]
9230  NEXT J3
9240  NEXT J2
9250  LET G[X,Y]=G[X,Y]-O1
9260  LET M[X,Y]=G[X,Y]
9270  LET K2=K2-O1
9280  LET K1=K1-O1
9290  LET F1=A1
9300  RETURN 
9790  REM VICTORY
9800  PRINT 
9810  PRINT "YOU HAVE PURGED THE GALAXY OF KLINGONS!"
9820  PRINT "YOU WILL BE AWARDED THE MEDAL OF VALOR";
9830  IF H <= 500 AND S >= O0 THEN 9999
9840  PRINT ", POSTHUMOUSELY."
9850  STOP 
9890  REM DEATH
9900  PRINT "YOU MELTED! WHAT A HORRIBLE END!"
9920  STOP 
9950  PRINT "SHIELDS HAVE BUCKLED! YOUR SHIP IS GONE!"
9999  END 

