10  REM  WRITTEN BY  RICHARD MOREFIELD - ARAGON -  1974  (ITF)
20  REM  MODIFIED BY  JEFF BROWN  -  ARAGON  -  04/04/75   ( BOCES BASIC )
30  REM MODIFIED TO HP 2000 ACCESS BASIC   12/08/75  BY JEFF BROWN
40  REM 'TREK2' PITS YOU AGAINST 1-15 KLINGONS * 3660 WORDS = 15 REC'D
50  DIM F$[11],A$[1]
60  FILES *
70  DIM R[2],S[2],H[2],G[2],A[15,6],V[15]
80  F8=3.95
90  PRINT LIN(2);TAB(27)"+++ STAR TREK +++"LIN(1)
100  PRINT "DO YOU WANT INSTRUCTIONS  (YES OR NO)   ? ";
110  LINPUT A$[1,1]
120  IF A$#"Y" THEN 140
130  GOSUB 2130
140  PRINT "DO YOU WISH TO RETRIEVE A FILE  (YES OR NO)  ? ";
150  LINPUT A$[1,1]
160  IF A$#"Y" THEN 320
170  PRINT "WHAT IS THE NAME OF YOUR FILE  ";
180  INPUT F$[1,11]
190  ASSIGN F$,1,K
200  IF K=0 THEN 250
210  IF K <= 2 THEN 240
220  PRINT "THE FILE DOESN'T EXIST OR IT CANNOT BE ACCESSED."
230  STOP 
240  PRINT "THE FILE CAN BE READ ONLY."
250  IF  END #1 THEN 310
260  READ #1,1
270  MAT  READ #1;A,V,R,S,H
280  READ #1;S5,S0,P,S3,T5
290  PRINT  USING 1320;P/20,S3/15,T5/10
300  GOTO 1080
310  PRINT "NO GAME IN FILE"
320  PRINT "INPUT # OF SHIPS"
330  INPUT S5
340  IF S5>0 AND S5<16 AND S5=INT(S5) THEN 370
350  PRINT "THIS GAME ALLOWS FOR 1-15 KLINGON OPPONENTS."LIN(1)
360  GOTO 320
370  T5=0
380  S0=S5
390  H[1]=H[2]=R[1]=R[2]=S[1]=S[2]=0
400  MAT A=ZER
410  MAT V=ZER
420  P=2000
430  S3=1000+((S0>8)+(S0>10))*250
440  FOR X=1 TO S5
450  A[X,1]=INT(RND(0)*20+10)
460  IF INT(RND(0)*2)+1=2 THEN 480
470  A[X,1]=-A[X,1]
480  A[X,2]=INT(RND(0)*20)+10
490  IF INT(RND(0)*2)+1=2 THEN 510
500  A[X,2]=-A[X,2]
510  A[X,5]=100
520  A[X,6]=1000
530  V[X]=1
540  NEXT X
550  PRINT  USING 1320;P/20,S3/15,T5/10
560  PRINT "SENSOR SWEEP"
570  X1=0
580  FOR X=1 TO S5
590  IF V[X]=0 THEN 730
600  X2=INT(SQR((A[X,1]^2)+(A[X,2]^2))+.99) MAX 1
610  IF X2<100 THEN 640
620  X1=X1+1
630  GOTO 730
640  IF A[X,6]/X2<62+RND(0)*20 THEN 710
650  S3=S3-(INT(A[X,6]/X2)*F8)
660  PRINT "KLINGON FIRING  SHIELDS HOLDING AT ";
670  IF S3<0 THEN 1200
680  PRINT  USING 690;S3/15
690  IMAGE 3D.D,"%"
700  A[X,6]=0
710  PRINT  USING 720;A[X,1],A[X,2],X,X2,(A[X,6]/100),(A[X,5]/10)
720  IMAGE 6DX,"/",4D2X,"KLINGON",X2DX,"AT",X2D3X,2(X2D)
730  NEXT X
740  IF X1=0 THEN 1080
750  PRINT X1;" SHIPS OUT OF SENSOR RANGE"
760  GOTO 1080
770  FOR X=1 TO S5
780  IF A[X,5]<100 THEN 810
790  A[X,6]=(A[X,6]+100) MIN 1000
800  GOTO 820
810  A[X,5]=(A[X,5]+10) MIN 100
820  NEXT X
830  FOR T=1 TO 2
840  LET H[T]=H[T]-SGN(H[T])
850  NEXT T
860  FOR X=1 TO S5
870  R[1]=A[X,1]-H[1]
880  R[2]=A[X,2]-H[2]
890  S[1]=A[X,3]
900  S[2]=A[X,4]
910  FOR T=1 TO 2
920  IF R[T]<0 THEN 970
930  IF R[T]=0 THEN 990
940  S[T]=S[T]-1
950  R[T]=R[T]+S[T]
960  GOTO 1010
970  S[T]=S[T]+1
980  GOTO 950
990  IF S[T]<0 THEN 970
1000  GOTO 940
1010  NEXT T
1020  A[X,1]=R[1]
1030  A[X,2]=R[2]
1040  A[X,3]=S[1]
1050  A[X,4]=S[2]
1060  NEXT X
1070  GOTO 560
1080  PRINT "COMMAND ";
1090  INPUT R
1100  GOTO R+1 OF 2480,1170,1380,1400,1880,2110
1110  IF R >= -15 AND R <= -1 AND R=INT(R) THEN 1510
1120  PRINT "ILLEGAL COMMAND.  DO YOU WANT INSTRUCTIONS  ? ";
1130  LINPUT A$[1,1]
1140  IF A$#"Y" THEN 1080
1150  GOSUB 2130
1160  GOTO 1080
1170  P=(P+500) MIN 2000
1180  T5=T5+99
1190  IF T5<1000 THEN 1310
1200  PRINT "*** BOOM ***"LIN(1)
1210  GOTO (S0>3)+(S0>6)+(S0>8) OF 1240,1260,1280
1220  PRINT "   WELL, CAPTAIN DUNSEL!  ARE YOU PROUD OF YOURSELF?"
1230  GOTO 1290
1240  PRINT "   YOU SURE BLEW YOUR TRAINING LESSON!  THE ENTERPRISE AND"
1250  GOTO 1290
1260  PRINT "   YOU FAILED AT THE TEST, WE SUGGEST THAT YOU BLEW IT!"
1270  GOTO 1290
1280  PRINT "   YOU TRIED AGAINST INCREDIBLE ODDS (AND LOST), YOU SHIP AND"
1290  PRINT '7'7'7'7"YOU HAVE BEEN DESTROYED.  THE FEDERATION IS DOOMED !"'7'7LIN(1)
1300  STOP 
1310  PRINT  USING 1320;P/20,S3/15,T5/10
1320  IMAGE "PHASERS AT ",3D,"%, SHIELDS AT ",3D,"%, TEMP OVERLOAD AT ",3D,"%"
1330  IF H[1] THEN 1350
1340  IF H[2]=0 THEN 1370
1350  PRINT  USING 1360;H[1],H[2]
1360  IMAGE "YOU ARE GOING  ",3D," ,",3D
1370  GOTO 770
1380  S3=(S3+300) MIN 1500
1390  GOTO 1180
1400  PRINT "NEW SPEED: H,I"
1410  INPUT G[1],G[2]
1420  FOR T=1 TO 2
1430  IF ABS(G[T]-H[T]) <= 6 THEN 1470
1440  PRINT "*** TOO HIGH ***"
1450  PRINT  USING 1360;H[1],H[2]
1460  GOTO 1400
1470  NEXT T
1480  H[1]=INT(G[1])
1490  H[2]=INT(G[2])
1500  GOTO 1180
1510  Y1=ABS(R)
1520  IF V[Y1]=1 THEN 1550
1530  PRINT "THERE IS NO SUCH SHIP-CHECK AGAIN"
1540  GOTO 1080
1550  Y2=A[Y1,1]
1560  Y3=A[Y1,2]
1570  Y4=A[Y1,5]
1580  Y2=SQR((Y2*Y2)+(Y3*Y3)) MAX 1
1590  IF Y4>(P/Y2) THEN 2080
1600  P=P-(Y4*Y2)
1610  PRINT "*** BOOM *** KLINGON DESTROYED"
1620  V[Y1]=0
1630  FOR X2=1 TO S5
1640  IF V[X2]=1 THEN 1670
1650  X1=X2
1660  GOTO 1680
1670  NEXT X2
1680  FOR X2=X1 TO S5
1690  IF V[X2]=1 THEN 1720
1700  NEXT X2
1710  GOTO 1790
1720  FOR X3=1 TO 6
1730  A[X1,X3]=A[X2,X3]
1740  A[X2,X3]=0
1750  NEXT X3
1760  V[X1]=1
1770  V[X2]=0
1780  GOTO 1630
1790  PRINT "PHASER POWER =";
1800  PRINT  USING 690;INT(P/20)
1810  FOR X=1 TO S5
1820  IF V[X] THEN 1080
1830  NEXT X
1840  PRINT LIN(2);TAB(18)"*** HOORAY FOR THE FEDERATION ***"'7
1850  PRINT "     YOU HAVE DESTROYED THE LAST KLINGON IN THE GALAXY"
1860  STOP 
1870  GOTO 1080
1880  PRINT "WHAT FILE DO YOU WISH TO USE  ";
1890  INPUT F$[1,11]
1900  ASSIGN F$,1,K
1910  IF K=0 THEN 2040
1920  IF K>2 THEN 1950
1930  PRINT "THE FILE IS UNDER RESTRICTED ACCESS."
1940  GOTO 1080
1950  PRINT "DO YOU WISH TO HAVE IT CREATED  (YES OR NO)  ? ";
1960  LINPUT A$[1,1]
1970  IF A$#"Y" THEN 1080
1980  CREATE X,F$,1
1990  GOTO X+1 OF 1900,1900,2000,2020
2000  PRINT "ATTEMPT TO CREATE THE FILE UNSUCESSFUL."
2010  GOTO 1080
2020  PRINT "THERE IS NO ROOM ON THE ACCOUNT OR ELSE THE SYSTEM IS FULL."
2030  GOTO 1080
2040  READ #1,1
2050  MAT  PRINT #1;A,V,R,S,H
2060  PRINT #1;S5,S0,P,S3,T5
2070  GOTO 1080
2080  A[Y1,5]=INT(Y4-(P/Y2))
2090  P=0
2100  GOTO 1790
2110  T5=(T5-200) MAX 0
2120  GOTO 1310
2130  PRINT LIN(3)"STAR TREK #2 INSTRUCTIONS:"LIN(1)
2140  PRINT "YOU CAN DETERMINE THE DIFFICULTY OF THE GAME BY THE NUMBER OF"
2150  PRINT "KLINGONS AGAINST YOU."LIN(1)"   1-3  MIDSHIPMAN (PLEBE 1ST CLASS)"
2160  PRINT "   4-5  IN TRAINING"LIN(1)"   6-8  COMMANDER"
2170  PRINT "   9-10 CAPTAIN"LIN(1)"  11-15  YOU'RE BUCKING FOR ADMIRAL"
2180  PRINT LIN(2);TAB(7)"THE COMMANDS ARE:"LIN(1)
2190  PRINT "-1 TO -15 TO FIRE PHASERS AT SHIPS 1-15"
2200  PRINT " 0  END THE GAME"
2210  PRINT " 1  POWER TO PHASERS"
2220  PRINT " 2  POWER TO SHIELDS"
2230  PRINT " 3  MOVE"
2240  PRINT " 4  SAVE THE GAME IN A FILE OF YOUR CHOICE"
2250  PRINT " 5  COOL POWER REACTORS"
2260  PRINT "WARNING> DO NOT LET TEMP GO ABOVE 99% (OR ELSE ***BOOM***)"
2270  PRINT " THE KLINGONS START OUT HEADING TOWARD YOU AT VARYING DISTANCES"
2280  PRINT " FROM YOU.  THE SENSOR SCAN WILL SHOW THERE X,Y COORDINATES RE-"
2290  PRINT " LATIVE TO YOU (YOU ARE ALWAYS CONSIDERED TO BE AT 0,0), THEIR"
2300  PRINT " ASSIGNED NUMBER, THEIR DISTANCE FROM YOU AND THEIR SHIELD"
2310  PRINT " AND PHASER POWER.  THE FORM IS:"
2320  PRINT "    11 /  11  KLINGON  1 AT 17    9 1"LIN(3)
2330  PRINT "    IF YOU WISH TO MOVE (TO OVERTAKE OR ESCAPE FROM THE KLINGONS)"
2340  PRINT " YOU CAN DO SO BY USING COMMAND 3.  THIS WILL ALLOW YOU TO SPEED"
2350  PRINT " UP OR SLOW DOWN BY SIX UNITS PER POSITION (X AND Y) EACH TURN."
2360  PRINT " YOUR DEGREE OF MOVEMENT IS SUBTRACTED FROM THE KLINGONS X,Y"
2370  PRINT " COORDINATES TO GIVE YOU THEIR RELATIVE POSITIONS."LIN(1)
2380  PRINT "    WHEN YOU FIRE AT A KLINGON YOUR PHASERS CONTINUE FIRING UNTIL"
2390  PRINT " THE KLINGON IS DESTROYED OR YOUR PHASERS ARE EXHAUSTED.  AFTER"
2400  PRINT " THEY HAVE FIRED YOU WILL BE TOLD YOUR REMAINING PHASER POWER AND"
2410  PRINT " YOU CAN THEN INPUT ANOTHER COMMAND."LIN(1)
2420  PRINT "   THE KLINGONS WILL FIRE AT YOU WHEN THEY ARE TWELVE TO SIX-"
2430  PRINT " TEEN UNITS AWAY FROM YOU.  THE KLINGONS CANNOT SLOW DOWN"
2440  PRINT " IMMEDIATELY SO THEY WILL PROBABLY GET AS CLOSE AS FIVE UNITS FROM"
2450  PRINT " YOU.  YOU SHOULD WAIT UNTIL THEY ARE CLOSER (INSTEAD OF FIRING"
2460  PRINT " AT LONG RANGE) TO CONSERVE PHASER POWER."LIN(3)
2470  RETURN 
2480  END 
