	REM---------------------------------------------------------
	REM		S  T  A  R  T  R  E  K
	REM---------------------------------------------------------


	DIM GALAXY(8,8), GALAXY$(8,8), C(9,2), KLING(3,3), GMAP(8,8) 
	DIM DAMAGE(8), QUAD.NAME$(16), SEGMENT$(4), DAM$(8)
	DIM PRINT.QUAD(3)
ESC$=CHR$(27)
EN$=ESC$+" "
IVB$=EN$
BLNK$=EN$
BELL$=CHR$(7)
NORM$=EN$+" "
	EMPTY$="."
	BASE$="B"
	KLINGON$="K"
	ENTERPRISE$="E"
	STAR$="*"
	CRUD$="?"
	FIRST.TIME.FLAG=1
	DOT$="........................"
	PRINT
	PRINT TAB(20);"S  T  A  R  T  R  E  K"
	PRINT
240	INPUT "       ENTER YOUR NAME, CAPTAIN: "; CAPTAIN$
	PRINT
	PRINT "WELCOME ABOARD CAPTAIN: ";CAPTAIN$
     PRINT TAB(15);"DO YOU WANT INSTRUCTIONS";
     INPUT ANS$
	RANDOMIZE
     IF LEFT$(ANS$,1)="Y" THEN GOSUB 999999
	PRINT CHR$(26)
	PRINT "MISSION ADVISORY: ";
	PRINT "STAND BY"
     LET T=INT(RND*20+20)*100
     T0=T
     T9=26+INT(RND*8+1)
     DOCKED=0
     ENERGY.NORMAL=3000
     ENERGY=ENERGY.NORMAL
     TORPS=10
     TORPS.NORMAL=TORPS
     SHIELD.NORMAL=200
     SHIELDS=SHIELD.NORMAL+10
	FOR I=1 TO 8
		FOR J=1 TO 8
			GALAXY$(I,J)=EMPTY$
		NEXT J
	NEXT I
     
	REM-----------F U N C T I O N S---------------------
	DEF FN8=INT(RND*8+1)
	DEF FNROUND(D)=INT(D+.5)
	DEF FND=SQR((ABS(KLING(I,1)-SX))^2+(ABS(KLING(I,2)-SY))^2)

     REM   ***  INITIALIZE ENTERPRISE'S POSITION

     QX=FN8
     QY=FN8
     EX=FN8
     EY=FN8
	SX=EX
	SY=EY
     C(3,1)=-1
     C(2,1)=-1
     C(4,1)=-1
     C(4,2)=-1
     C(5,2)=-1
     C(6,2)=-1
     C(1,2)=1
     C(2,2)=1
     C(6,1)=1
     C(7,1)=1
     C(8,1)=1
     C(8,2)=1
     C(9,2)=1
     FOR I=1 TO 8
		LET DAMAGE(I)=(INT(RND*30+1)/10)
     NEXT I
	DAM$(1)="WARP ENGINES"
	DAM$(2)="SHORT RANGE SENSORS"
	DAM$(3)="LONG RANGE SENSORS"
	DAM$(4)="PHASER CONTROL"
	DAM$(5)="PHOTON TORPEDO TUBES"
	DAM$(6)="DAMAGE CONTROL"
	DAM$(7)="SHIELD CONTROL"
	DAM$(8)="COMPUTER"

	QUAD.NAME$(01)="ANTARES"
	QUAD.NAME$(02)="SIRIUS"
	QUAD.NAME$(03)="RIGEL"
	QUAD.NAME$(04)="DENEB"
	QUAD.NAME$(05)="PROCYON"
	QUAD.NAME$(06)="CAPELLA"
	QUAD.NAME$(07)="VEGA"
	QUAD.NAME$(08)="BETELGEUSE"
	QUAD.NAME$(09)="CANOPUS"
	QUAD.NAME$(10)="ALDEBARAN"
	QUAD.NAME$(11)="ALTAIR"
	QUAD.NAME$(12)="REGULUS"
	QUAD.NAME$(13)="SAGITTARIUS"
	QUAD.NAME$(14)="ARCTURUS"
	QUAD.NAME$(15)="POLLUX"
	QUAD.NAME$(16)="SPICA"
	SEGMENT$(1)=" I"
	SEGMENT$(2)=" II"
	SEGMENT$(3)=" III"
	SEGMENT$(4)=" IV"

     TOT.BASES=0
     TOT.KLINGONS=0
     
     REM   ***  SET UP WHAT EXISTS IN GALAXY.

     FOR I=1 TO 8
         FOR J=1 TO 8
             R1=RND
             IF R1>.98 THEN \
			KLINGONS=3 :\
			GOTO 900
             IF R1>.95 THEN \
			KLINGONS=2 :\
			GOTO 900
             IF R1>.8  THEN \
			KLINGONS=1 :\
			GOTO 900
             KLINGONS=0
900		REM
		TOT.KLINGONS=TOT.KLINGONS+KLINGONS
		IF RND>.96 THEN \
			BASES=1 :\
		ELSE \
			BASES=0
		TOT.BASES=TOT.BASES+BASES
         STARS=FN8
		GALAXY(I,J)=KLINGONS*100+BASES*10+STARS
             GMAP(I,J)=0
         NEXT J
     NEXT I
     K7=TOT.KLINGONS
	IF TOT.BASES>0 THEN \
		GOTO 1200
	X=FN8
	Y=FN8
	GALAXY(X,Y)=GALAXY(X,Y)+10 	REM ADD A BASE
	BASES=1
	TOT.BASES=BASES
1200	REM
	IF TOT.BASES=1 THEN \
		A$=" IS " :\
		B$="" :\
	ELSE \
		A$=" ARE " :\
		B$="S"
	PRINT "YOUR ORDERS ARE AS FOLLOWS:"
     PRINT "DESTROY THE ";TOT.KLINGONS;"KLINGON WARSHIPS WHICH HAVE INVADED"
     PRINT "THE GALAXY BEFORE THEY CAN ATTACK FEDERATION HEADQUARTERS"
     PRINT "ON STARDATE ";T0+T9;".  THIS GIVES YOU ";T9;"DAYS.  THERE";
     PRINT A$
     PRINT TOT.BASES;"STARBASE";B$;" IN THE GALAXY FOR RESUPPLYING YOUR SHIP."
     PRINT
     PRINT "     TYPE 'GO' WHEN READY TO ASSUME COMMAND."
     INPUT RAND$
 
1320 	REM----------ENTER NEW QUADRANT--------------------
	FOR J=1 TO 8
		FOR I=1 TO 8
			GALAXY$(I,J)=EMPTY$
		NEXT I
	NEXT J
     KLINGONS=0
     BASES=0
     STARS=0
	GALAXY$(EX,EY)=ENTERPRISE$
     G5=0
	GOSUB 9030		REM GET QUADRANT NAME
     PRINT
	IF FIRST.TIME.FLAG=1 THEN \
		FIRST.TIME.FLAG=0 :\
		PRINT "YOUR MISSION BEGINS WITH YOUR STARSHIP LOCATED" :\
		PRINT "IN THE GALACTIC QUADRANT: ";QUADRANT$; :\
	ELSE \
		PRINT "NOW ENTERING QUADRANT:  ";QUADRANT$
1500 PRINT
     X=GALAXY(QX,QY)*.01
     KLINGONS=INT(X)
     BASES=INT((X-KLINGONS)*10)
     STARS=GALAXY(QX,QY)-INT(GALAXY(QX,QY)*.1)*10
	IF KLINGONS>0 THEN \
		PRINT "COMBAT AREA    ";BLNK$;"KLINGON ALERT"
	IF SHIELDS<=SHIELD.NORMAL THEN \
		PRINT "WARNING: LOW SHIELDS"
     FOR X=1 TO 3
		FOR Y=1 TO 3
			KLING(X,Y)=0
		NEXT Y
     NEXT X
1600 REM
	IF KLINGONS=0 THEN \
		GOTO 1705
	FOR X=1 TO KLINGONS
		GOSUB 9500		REM FIND EMPTY SECTOR
		GALAXY$(SX,SY)=KLINGON$ 
		KLING(X,1)=SX
		KLING(X,2)=SY
		KLING(X,3)=SHIELD.NORMAL
	NEXT X
1705	REM
	IF BASES=0 THEN \
		GOTO 1710
	FOR X=1 TO BASES
		GOSUB 9500		REM FIND EMPTY SECTOR
		GALAXY$(SX,SY)=BASE$
		BX=SX
		BY=SY
	NEXT X
1710	REM
	IF STARS<=0 THEN \
		GOTO 1980
	FOR X=1 TO STARS
		GOSUB 9500		REM FIND EMPTY SECTOR
		GALAXY$(SX,SY)=STAR$ 
	NEXT X
1980 GOSUB 6430			REM SHORT RANGE SENSOR RTN
1990 IF SHIELDS+ENERGY<=10 OR (DAMAGE(7)<0 AND ENERGY<=10) THEN  \
		PRINT BLNK$;"**FATAL ERROR**" :\
		PRINT "YOU'VE JUST STRANDED YOUR SHIP IN SPACE!" :\
		PRINT "YOU HAVE INSUFFICIENT MANEUVERING ENERGY AND" :\
		PRINT "SHIELD CONTROL IS PRESENTLY INCAPABLE OF CROSS-" :\
		PRINT "CIRCUITING TO THE ENGINE ROOM!" :\
		GOTO 6260

2060	REM-----C O M M A N D--------------------------------
	IF T>T0+T9 THEN \
		GOTO 6220		REM YOU LOSE!
	PRINT CAPTAIN$;":  ";
	INPUT COMMAND$
	IF LEFT$(COMMAND$,1)="N" THEN GOTO 2300
	IF LEFT$(COMMAND$,1)="S" THEN GOTO 1980
	IF LEFT$(COMMAND$,1)="L" THEN GOTO 4000
	IF LEFT$(COMMAND$,1)="P" THEN GOTO 4260
	IF LEFT$(COMMAND$,1)="T" THEN GOTO 4700
	IF LEFT$(COMMAND$,1)="E" THEN GOTO 5530
	IF LEFT$(COMMAND$,1)="D" THEN GOTO 5690
	IF LEFT$(COMMAND$,1)="C" THEN GOTO 7290
	IF LEFT$(COMMAND$,1)="Q" THEN GOTO 6270
     PRINT "ENTER ONE OF THE FOLLOWING:"
	PRINT "N-AVIGATE"
	PRINT "S-HORT RANGE SCAN"
	PRINT "L-ONG RANGE SCAN"
	PRINT "P-HASERS"
	PRINT "T-ORPEDOS"
	PRINT "E-NGINEERING"
	PRINT "D-AMAGE CONTROL"
	PRINT "C-OMPUTER"
	PRINT "Q-UIT"
     PRINT
     GOTO 2060
     REM**********> COURSE CONTROL BEGINS HERE.
2300 PRINT "COURSE (1-9) ";
     INPUT COURSE
	IF COURSE>=1 AND COURSE<=9 THEN  \
		GOTO 2350
	PRINT "LT. SULU:"; 
	PRINT "   INCORRECT COURSE DATA, SIR." 
	GOOF1=GOOF1+.1
	IF RND+GOOF1>.85 THEN \
	PRINT "MISSION ADVISORY: ";:\
       PRINT "CAPTAIN ";CAPTAIN$;", I STRONGLY SUGGEST YOU GET YOURSELF" :\
        PRINT "ORGANIZED BEFORE THE KLINGONS BLAST US TO SMITHEREENS."
	GOTO 2300
2350	REM-----COURSE IS OK-----
2380 PRINT "WARP FACTOR (0-8) ";
     INPUT WARP
	IF WARP>=0 AND WARP<=8 THEN \
		GOTO 2450		REM WARP OK
	PRINT "ENGINEERING OFCR SCOTT:";
	PRINT "THE ENGINES WON'T TAKE WARP ";WARP;"!"
	GOOF2=GOOF2+.1
	IF RND+GOOF2>.85 THEN \
		PRINT "MISSION ADVISORY: "; :\
		PRINT "WARP ";WARP;"!  WHAT A GALACTIC JACKASS!"
	GOTO 2350
2450	REM-------
	IF DAMAGE(1)>=0 THEN \
		GOTO 2490
	PRINT DAM$(1);" DAMAGED"
	IF WARP>.2 THEN \
		PRINT "MAXIMUM WARP:  0.2" :\
		GOTO 2350
2490	REM
	E.NEEDED=FNROUND(WARP*8)
     IF ENERGY-E.NEEDED>=0 THEN GOTO 2590
	PRINT "ENGINEERING OFCR SCOTT:";
	PRINT "NOT ENOUGH ENERGY LEFT"
	IF SHIELDS<E.NEEDED-ENERGY THEN \
		GOTO 2350		REM ASK FOR NEW WARP
	IF DAMAGE(7)<0 THEN \
		GOTO 2350
     PRINT "SHIELD CONTROL ROOM REPORTS ";SHIELDS;" UNITS"
     PRINT "OF ENERGY PRESENTLY DEPLOYED TO SHIELDS."
     GOTO 5530			REM SHIELD CONTROL
     REM*******> KLINGONS MOVE/FIRE ON MOVING STARSHIP . . ÿ
	IF KLINGONS=0 THEN \
		GOTO 2750
2590	REM
	FOR I=1 TO KLINGONS
		IF KLING(I,3)<=0 THEN GOTO 2700
		GALAXY$(KLING(I,1),KLING(I,2))=EMPTY$
		GOSUB 9500		REM FIND EMPTY SECTOR
		KLING(I,1)=SX
		KLING(I,2)=SY
		GALAXY$(KLING(I,1),KLING(I,2))=KLINGON$
2700 NEXT I
2750	REM
     GOSUB 6000			REM KLINGONS SHOOT
     D1=0
	D6=INT(WARP*10)/10
     REM****> MAKE REPAIRS TO THE SHIP.
2770 FOR I=1 TO 8
         IF DAMAGE(I)>=0 THEN GOTO 2880
         DAMAGE(I)=DAMAGE(I)+D6
         IF DAMAGE(I)<0 THEN GOTO 2880
		IF D1=0 THEN \
			D1=1 :\
			PRINT "DAMAGE CONTROL REPORT"
         PRINT TAB(8);
	PRINT DAM$(I);
         PRINT TAB(32);"REPAIR COMPLETED"
2880 NEXT I
     REM--------> DAMAGE/IMPROVEMENT DURING SOME VES
     IF RND>.2 THEN GOTO 3070
	R1=FN8
     IF RND>=.6 THEN GOTO 3000
	DAMAGE(R1)=DAMAGE(R1)-INT((RND*5+1)*10)/10
     PRINT
     PRINT "DAMAGE CONTROL REPORT:"
	PRINT DAM$(R1);
     PRINT TAB(32);"DAMAGED"
     PRINT
     GOTO 3070
3000	REM
	DAMAGE(R1)=DAMAGE(R1)+INT((RND*3+1)*10)/10
     PRINT
     PRINT "DAMAGE CONTROL REPORT:"
	PRINT DAM$(R1);
     PRINT TAB(32);"STATE OF REPAIR IMPROVED"
     PRINT
3070	REM-----BEGIN MOVING STARSHIP---------------------
	GALAXY$(EX,EY)=EMPTY$
	T.CRSE=INT(COURSE)
     DELTA.X=C(T.CRSE,1)+(C(T.CRSE+1,1)-C(T.CRSE,1))*(COURSE-INT(COURSE))
     X=EX
     Y=EY
     TEMP.EX=EX
     TEMP.EY=EY
     DELTA.Y=C(T.CRSE,2)+(C(T.CRSE+1,2)-C(T.CRSE,2))*(COURSE-INT(COURSE))
     OLD.QX=QX
     OLD.QY=QY
     FOR I=1 TO E.NEEDED
          X=X+DELTA.X
          Y=Y+DELTA.Y
		EX=FNROUND(X)
		EY=FNROUND(Y)
		IF EX<1 OR \
		   EX>8 OR \
		   EY<1 OR \
		   EY>8 THEN \
			GOTO 3500
		IF GALAXY$(EX,EY)=EMPTY$ THEN \
			LAST.X=0 :\
			LAST.Y=0 :\
			GOTO 3360
		OBJECT$=GALAXY$(EX,EY)
		IF OBJECT$=KLINGON$ THEN OBJECT$="KLINGON"
		IF OBJECT$=STAR$ THEN OBJECT$="STAR"
		IF OBJECT$=BASE$ THEN OBJECT$="STARBASE"
		IF OBJECT$=CRUD$ THEN OBJECT$="SPACECRUD"
		EX=FNROUND(X-DELTA.X)
		EY=FNROUND(Y-DELTA.Y)
		PRINT "LT SULU:";
		PRINT " EMERGENCY STOP!"
		PRINT
		PRINT "MISSION ADVISORY: ";
		PRINT "WE ALMOST RAMMED RIGHT INTO THAT ";OBJECT$;" AT ";
		PRINT "WARP ";WARP;"!!"
		GOOF3=GOOF3+.1
		IF RND+GOOF3>.75 THEN \
			PRINT "CAPTAIN ";CAPTAIN$;", DON'T YOU THINK IT'S TIME" :\
			PRINT "YOU RECONSIDER THAT DESK JOB AT FEDERATION HQ?"
          GOTO 3370
3360 NEXT I
3370	REM------PUT THE ENTERPRISE IN ITS NEW PLACE-----
	GALAXY$(EX,EY)=ENTERPRISE$
	GOSUB 3910		REM SUBTRACT THE ENERGY NEEDED
     T8=1
	IF WARP<1 THEN \
		T8=.1*INT(10*WARP)
	T=T+T8
     IF T>T0+T9 THEN GOTO 6220
     GOTO 1980		REM SEE IF DOCKED THEN GET COMMAND

3500	REM-----EXCEEDED QUADRANT LIMITS----------------
     X=8*QX+TEMP.EX+E.NEEDED*DELTA.X
     Y=8*QY+TEMP.EY+E.NEEDED*DELTA.Y
     QX=INT(X/8)
     QY=INT(Y/8)
     EX=INT(X-QX*8)
     EY=INT(Y-QY*8)
	PERIMETER.FLAG=0
	IF EX=0 THEN \
		QX=QX-1 :\
		EX=8
	IF EY=0 THEN \
		QY=QY-1 :\
		EY=8
	IF QX<1 THEN \
		QX=1:EX=1 :\
		PERIMETER.FLAG=1
	IF QX>8 THEN \
		QX=8:EX=8 :\
		PERIMETER.FLAG=1
	IF QY<1 THEN \
		QY=1:EY=1 :\
		PERIMETER.FLAG=1
	IF QY>8 THEN \
		QY=8:EY=8 :\
		PERIMETER.FLAG=1
	IF PERIMETER.FLAG=0 THEN \
		GOTO 3860
     PRINT "LT. UHURA:"
	PRINT "STARFLEET COMMAND REPORTS:"
	PRINT "'PERMISSION TO CROSS GALACTIC PERIMETER"
     PRINT "IS ";BLNK$;"*DENIED*";NORM$;".  SHUT DOWN YOUR ENGINES."
     PRINT "ENGINEERING OFCR SCOTV:";
	PRINT "WARP ENGINES SHUT DOWN"
     PRINT "AT SECTOR ";EX;EY;" OF QUADRANT ";QX;QY;"."
     IF T>T0+T9 THEN GOTO 6220
3860	REM
	IF QX=OLD.QX AND QY=OLD.QY THEN \
		GOTO 3370
     T=T+1
     GOSUB 3910			REM SUBTRACT THE NEEDED ENERGY
     GOTO 1320			REM ANNOUNCE THE NEW QUADRANT

3910	 REM---------> MANEUVER ENERGY S/R
	ENERGY=ENERGY-E.NEEDED-10
     IF ENERGY>=0 THEN GOTO 3980
     PRINT "SHIELD CONTROL SUPPLIED ENERGY TO COMPLETE THE MANEUVER."
      IF RND>.6 THEN GOTO 3911
	PRINT "MISSION ADVISORY: ";
	PRINT "CAPTAIN ";CAPTAIN$;
     IF RND>.5 THEN PRINT " THAT WAS EXTREMELY CLOSE EVEN FOR THE ENTERPRISE" :\
     ELSE \
     PRINT " WE'RE GOING TO NEED THOSE SHIELDS BEFORE LONG, YOU KNOW.'"
3911 REM
     SHIELDS=SHIELDS+ENERGY
     ENERGY=0
	IF SHIELDS<0 THEN \
		SHIELDS=0
3980 RETURN

4000 REM-----------> LONG RANGE SENSOR SCAN CODE
	IF DAMAGE(3)<0 THEN \
		PRINT DAM$(3);" DAMAGED" :\
		GOTO 1990
4030 PRINT DAM$(3);" SCAN FOR QUADRANT ";QX;QY
	PRINT
	FOR J=QY-1 TO QY+1
		Q=0
		FOR I=QX-1 TO QX+1
			Q=Q+1
			IF I<1 OR I>8 OR J<1 OR J>8 THEN \
				PRINT.QUAD(Q)=0 :\
			ELSE \
				PRINT.QUAD(Q)=GALAXY(I,J) :\
				GMAP(I,J)=GALAXY(I,J)
		NEXT I
		FOR Q=1 TO 3
	IF PRINT.QUAD(Q)=0 THEN 4100
	YYY=Q*6
	IF PRINT.QUAD(Q)<100 THEN YYY=YYY+1
	IF PRINT.QUAD(Q)<10 THEN YYY=YYY+1
			PRINT ;TAB(YYY);PRINT.QUAD(Q);
4040		NEXT Q
	PRINT : PRINT
	NEXT J
	PRINT
	GOTO 1990
4100			PRINT ;TAB(Q*6);"***";
	GOTO 4040

4260 REM----------> PHASER CONTROL BEGINS HERE
	SX=EX
	SY=EY
	IF KLINGONS=0 THEN \
		PRINT "MISSION ADVISORY: "; :\
		PRINT "SENSORS SHOW NO ENEMY SHIPS IN THIS QUADRANT" :\
		GOTO 1990
	IF DAMAGE(4)<0 THEN \
		PRINT DAM$(4);" DAMAGED" :\
		GOTO 1990
	IF DAMAGE(8)<0 THEN \
		PRINT DAM$(8);" MALFUNCTION REDUCES ACCURACY" 
4350 PRINT "PHASERS LOCKED ON TARGET; "
4360 PRINT "ENERGY AVAILABLE = ";ENERGY
     PRINT "NUMBER OF UNITS TO FIRE: ";
     INPUT RATE.OF.FIRE
     IF RATE.OF.FIRE<=0 THEN GOTO 1990
     IF RATE.OF.FIRE>ENERGY THEN GOTO 4360
     ENERGY=ENERGY-RATE.OF.FIRE
     GOSUB 6000			REM   KLINGONS SHOOT
	IF DAMAGE(7)<0 OR DAMAGE(4)<1 THEN \
		DRAIN=RND :\
		RATE.OF.FIRE=RATE.OF.FIRE*DRAIN :\
		DRAIN=INT((1-DRAIN)*100) :\
		PRINT "MISSION ADVISORY: "; :\
		PRINT DRAIN;"% OF PHASER POWER WAS DIVERTED TO DAMAGE CONTROL"
4450 TOTAL.HIT=INT(RATE.OF.FIRE/KLINGONS)
     FOR I=1 TO 3
         IF KLING(I,3)<=0 THEN GOTO 4670
         HIT=INT((TOTAL.HIT/FND)*(RND+1.5))
	IF HIT<.15*KLING(I,3) THEN \
		PRINT "SENSORS SHOW NO DAMAGE "; :\
		PRINT "TO ENEMY AT ";KLING(I,1);KLING(I,2) :\
		GOTO 4670
4530     KLING(I,3)=KLING(I,3)-HIT*(RND+.3)
         PRINT HIT;" UNIT HIT ON KLINGON AT SECTOR ";KLING(I,1);KLING(I,2)
         IF KLING(I,3)<=0 THEN GOTO 4580
	IF RND>.7 THEN \
		PRINT "SENSORS SHOW ";KLING(I,3);" UNITS REMAINING" 
	GOTO 4670
4580     PRINT BELL$; BLNK$;" << KLINGON DESTROYED >>"
         KLINGONS=KLINGONS-1
         TOT.KLINGONS=TOT.KLINGONS-1
		GALAXY$(KLING(I,1),KLING(I,2))=EMPTY$
         GALAXY(QX,QY)=KLINGONS*100+BASES*10+STARS
	IF GMAP(QX,QY)<>0 THEN \
		GMAP(QX,QY)=GALAXY(QX,QY)
         IF TOT.KLINGONS<=0 THEN GOTO 6370
4670 NEXT I
     GOTO 1990

4700 REM---------> PHOTON TORPEDO CODE BEGINS
	GOSUB 6000		REM KLINGONS SHOOT
	SX=EX
	SY=EY
     IF DAMAGE(5)<0 THEN \
		PRINT DAM$(5);" DAMAGED" :\
		     GOTO 1990
	IF TORPS<=0 THEN \
		PRINT "ALL PHOTON TORPEDOES EXPENDED" :\
		GOTO 1990
4760 PRINT "TORPEDO COURSE (1-9) ";
     INPUT COURSE
	IF COURSE<1 OR COURSE>9 THEN \
		PRINT "ENSIGN CHEKOV:"; :\
		PRINT "INCORRECT COURSE DATA, SIR!" :\
		ON FNROUND(RND)+1 GOTO 1990, 4760
	T.CRSE=INT(COURSE)
4850 DELTA.X=C(T.CRSE,1)+(C(T.CRSE+1,1)-C(T.CRSE,1))*(COURSE-INT(COURSE))
     DELTA.Y=C(T.CRSE,2)+(C(T.CRSE+1,2)-C(T.CRSE,2))*(COURSE-INT(COURSE))
     ENERGY=ENERGY-2
     X=SX
     Y=SY
     TORPS=TORPS-1
     PRINT "TORPEDO TRACK---> ";
4920 X=X+DELTA.X
     Y=Y+DELTA.Y
	ROUND.X=FNROUND(X)
	ROUND.Y=FNROUND(Y)
	IF ROUND.X<1 OR \
	   ROUND.X>8 OR \
	   ROUND.Y<1 OR \
	   ROUND.Y>8 THEN \
		PRINT "TORPEDO MISSED" :\
		GOTO 5500
     PRINT " ";ROUND.X;ROUND.Y;
	IF GALAXY$(ROUND.X,ROUND.Y)=EMPTY$ THEN \
		GOTO 4920
	IF GALAXY$(ROUND.X,ROUND.Y)=KLINGON$ THEN \
		GOTO 5100
	IF GALAXY$(ROUND.X,ROUND.Y)=STAR$ THEN \
		GOTO 5210
	IF GALAXY$(ROUND.X,ROUND.Y)=BASE$ THEN \
		GOTO 5280
	IF GALAXY$(ROUND.X,ROUND.Y)=CRUD$ THEN \
		GOTO 4920
	GOTO 4920		REM DEFENSIVE PROGRAMMING

5100	REM-----HIT A KLINGON--------------------------
     PRINT BELL$;BLNK$;"<< KLINGON DESTROYED >>"
	ON FN8 GOTO 5177, 5177, 5177, 5177, 5177, 5176, 5178, 5178
5176	REM
	PRINT "EXCELLENT WORK WITH THE TORPEDOES, CAPTAIN."
	GOTO 5177
5178	REM
	PRINT "MISSION ADVISORY: ";
	PRINT "VERY GOOD SHOOTING, CAPTAIN ";CAPTAIN$
5177	REM
	GALAXY$(X,Y)=EMPTY$
     KLINGONS=KLINGONS-1
     TOT.KLINGONS=TOT.KLINGONS-1
     IF TOT.KLINGONS<=0 THEN GOTO 6370
     FOR I=1 TO 3
         IF ROUND.X<>KLING(I,1) THEN GOTO 5180
         IF ROUND.Y=KLING(I,2) THEN GOTO 5190
5180 NEXT I
5190 KLING(I,3)=0
     GOTO 5430
5210	REM-----HIT A STAR------------------------
     PRINT "STAR AT ";ROUND.X;ROUND.Y;" ABSORBED TORPEDO ENERGY"
     IF RND>.7 THEN GOTO 5214
	PRINT "COMMAND INQUIRY: ";
	PRINT "WAS IT YOUR INTENTION TO WASTE A VALUABLE"
	PRINT "TORPEDO ON THAT STAR, CAPTAIN?"
5214 REM
     GOTO 5500
5280	REM------HIT A STARBASE-------------------
     PRINT BELL$;IVB$;">> STARBASE DESTROYED <<"
     BASES=BASES-1
     TOT.BASES=TOT.BASES-1
	GALAXY$(X,Y)=EMPTY$
      IF TOT.BASES>0 THEN GOTO 5400
	PRINT "MISSION ADVISORY: ";
	PRINT "CAPTAIN ";CAPTAIN$;" I'M AFRAID THAT YOU HAVE BLOWN IT"
     GOTO 6270
5400 PRINT "STARFLEET COMMAND IS REVIEWING YOUR RECORD TO CONSIDER"
     PRINT "A GENERAL COURT-MARTIAL."
     DOCKED=0
5430	REM-------END OF ENTERPRISE SHOOTING-------
     GALAXY(QX,QY)=KLINGONS*100+BASES*10+STARS
	IF GMAP(QX,QY)<>0 THEN \
		GMAP(QX,QY)=GALAXY(QX,QY)
5500	REM
	IF RND>.7 THEN \
		GOSUB 6000	REM KLINGONS MAY SHOOT AGAIN
     GOTO 1990

5530 REM---------SHIELD CONTROL STARTS HERE-----------------
	IF DAMAGE(7)<0 THEN \
		PRINT DAM$(7);" DAMAGED" :\
		GOTO 1990
5560 PRINT "ENERGY AVAILABLE=";ENERGY+SHIELDS
	PRINT "DIVERT TO SHIELDS ";
     INPUT DIVERTED
	IF DIVERTED<0 OR DIVERTED=SHIELDS THEN \
		PRINT "SHIELDS UNCHANGED" :\
		GOTO 1990
	IF DIVERTED>SHIELDS+ENERGY THEN \
		PRINT "CAN'T DIVERT" :\
		GOTO 5560
	ENERGY=ENERGY+SHIELDS-DIVERTED
	SHIELDS=DIVERTED
     PRINT "DEFLECTOR CONTROL ROOM REPORT: ";
	PRINT "SHIELDS NOW AT ";SHIELDS
	GOTO 1990

5690 REM------------DAMAGE CONTROL STARTS HERE----------------
	IF DOCKED=1 THEN GOTO 5710
	IF DAMAGE(6)<0 THEN \
		PRINT DAM$(6);" DAMAGED" :\
		GOTO 1990
	GOSUB 5910		REM PRINT DAMAGE RPT
	GOTO 1990
5710	REM----------D O C K E D------------------------------
     D3=0
     FOR I=1 TO 8
        IF DAMAGE(I)>=.7 THEN GOTO 5760
        D3=D3+.5
5760 NEXT I
     IF D3=0 THEN GOTO 1990
     D3=D3+(.5*RND)
	IF D3>1 THEN \
		D3=RND
5810	REM
	PRINT "TECHS STANDING BY TO REPAIR THE SHIP."
	PRINT "ESTIMATED TIME: ";D3;"STARDATES"
	PRINT "AUTHORIZE (Y/N) ";
	INPUT A$
	IF LEFT$(A$,1)<>"Y" THEN GOTO 1990
     FOR I=1 TO 8
5815		REM
		IF DAMAGE(I)<=.7 THEN \
			DAMAGE(I)=DAMAGE(I)+1 :\
			GOTO 5815
     NEXT I
     T=T+D3+.1
	GOSUB 5910		REM PRINT DAMAGE RPT
	GOTO 1990

5910	REM-----PRINT DAMAGE RPT---------------------
	PRINT
	PRINT "   DEVICE";TAB(27);"CONDITION"
	FOR X=1 TO 8
		PRINT DAM$(X);TAB(30);DAMAGE(X)
	NEXT X
	PRINT
	RETURN

6000 REM-------------KLINGONS SHOOTING ROUTINE------------
	SX=EX
	SY=EY
     IF KLINGONS<=0 THEN GOTO 6210
	IF DOCKED=1 THEN \
		PRINT "STARBASE SHIELDS PROTECT THE ENTERPRISE" :\
		RETURN
    FOR I=1 TO 3
       IF KLING(I,3)<=0 THEN GOTO 6200
       HIT=INT((KLING(I,3)/FND)*(2+RND))
       SHIELDS=SHIELDS-INT(HIT*RND)
       PRINT BELL$;"----> ";HIT;" UNIT HIT ON ENTERPRISE FROM SECTOR ";
       PRINT KLING(I,1);KLING(I,2)
	GOOF4=GOOF4+.1
	IF RND+GOOF4>.7 THEN \
		PRINT "SHIELDS DOWN TO ";SHIELDS;"UNITS"
       	IF HIT<20 OR \
	   HIT/SHIELDS<.02 THEN \
		GOTO 6200
	GOSUB 6100		REM DAMAGE RTN
	IF SHIELDS<0 THEN \
		GOSUB 6100
6200	REM
	NEXT I
6210	RETURN

6100	REM------DAMAGE TO ENTERPRISE--------------------------
	TEMP=SHIELDS
	IF SHIELDS<=0 THEN TEMP=1
	NEW.DAMAGE=HIT/TEMP+.5*RND
	NEW.DAMAGE=INT(NEW.DAMAGE*10)/10
	R1=FN8
	DAMAGE(R1)=DAMAGE(R1)-NEW.DAMAGE
	PRINT "DAMAGE CONTROL REPORTS"
	PRINT DAM$(R1);TAB(32);" DAMAGED"
	RETURN

6220 PRINT "IT IS STARDATE ";T
     GOTO 6270
6240 PRINT
     PRINT "THE ENTERPRISE HAS BEEN DESTROYED."
     PRINT "  THE FEDERATION WILL BE CONQUERED."
6260 PRINT "IT IS STARDATE ";T
6270 PRINT "THERE WERE ";TOT.KLINGONS;" KLINGON BATTLE CRUISERS LEFT AT THE"
     PRINT "   END OF YOUR MISSION."
6290 PRINT
     PRINT
     PRINT "THE FEDERATION IS IN NEED OF A NEW STARSHIP COMMANDER"
     PRINT "FOR A SIMILAR MISSION -- IF THERE IS A VOLUNTEER,"
     PRINT "LET HIM STEP FORWARD AND ENTER 'AYE'.";
     INPUT A$
	IF LEFT$(A$,1)="A" THEN 240
	PRINT "STARBASE TO ENTERPRISE:  ";
	PRINT "WE ARE TERMINATING COMMUNICATIONS"
	STOP
6370 PRINT "CONGRATULATIONS, CAPTAIN!  THE LAST KLINGON BATTLE CRUISER"
     PRINT "MENACING THE FEDERATION HAS BEEN DESTROYED."
     PRINT
     PRINT "YOUR EFFICIENCY RATING IS ";(K7/(T-T0))*1000
     PRINT 
	PRINT "MISSION ADVISORY: ";
	PRINT "CONFIDENTIALLY SPEAKING, CAPTAIN ";CAPTAIN$;", I BELIEVE"
     PRINT "THAT THE PERFORMANCE YOU HAVE JUST GIVEN ON THE "
     PRINT "FIELD OF BATTLE HAS BEEN SO COMMENDABLE AS TO VIRTUALLY"
     PRINT "ASSURE THAT YOUR NAME WILL COME UP ON THE FEDERATION"
     PRINT "NAVY PROMOTION LIST QUITE SOON.  EVEN THOUGH I AM AN"
     PRINT "UNEMOTIONAL VULCAN, I WAS PROFOUNDLY STIRRED BY YOUR"
     PRINT "DEMONSTRATION OF SKILL AND JUDGMENT'"
     PRINT
     GOTO 6290

6430 REM------------SHORT RANGE SENSOR AND STARTUP SUBRTN.----------
	SX=EX
	SY=EY
     FOR J=SY-1 TO SY+1
         FOR I=SX-1 TO SX+1
		IF I<1 OR I>8 OR \
		   J<1 OR J>8 THEN \
			GOTO 6540
		IF GALAXY$(I,J)=BASE$ THEN \
			GOTO 6580
6540     NEXT I
     NEXT J
     DOCKED=0
     GOTO 6650
6580 DOCKED=1
     CONDITION$="DOCKED"
	IF LAST.X=EX AND LAST.Y=EY THEN \
		GOTO 6720
	LAST.X=EX
	LAST.Y=EY
	TEMP=ENERGY.NORMAL-333+100*FN8
	IF TEMP>ENERGY THEN \
		ENERGY=TEMP
	TEMP=TORPS.NORMAL-3+FN8
	IF TEMP>TORPS THEN \
		TORPS=TEMP
	PRINT "MISSION ADVISORY: ";
	PRINT "CAPTAIN ";CAPTAIN$;":"
	PRINT "WE HAVE DROPPED OUR SHIELDS FOR DOCKING"
	PRINT "WE ARE RELOADING ";TORPS;" TORPEDOES"
	PRINT "OUR ENERGY IS BEING REPLENISHED TO ";ENERGY;" UNITS"
     SHIELDS=0
     GOTO 6720
6650	REM-----GET CONDITION CODE-----------------
	CONDITION$="GREEN"
	IF ENERGY<ENERGY.NORMAL/10 THEN \
		CONDITION$="YELLOW"
	IF KLINGONS=1 THEN \
		CONDITION$="ORANGE"
	IF KLINGONS>1 THEN \
		CONDITION$="RED !! <---"
6720	REM-----SENSOR OK?-----------------
	IF DAMAGE(2)<0 THEN \
		PRINT DAM$(2);" DAMAGED !! <---" :\
		RETURN
6770	REM----------------------------
     PRINT DASH$
	J=1
	GOSUB 6800
	PRINT " "
	J=2
	GOSUB 6800
	PRINT TAB(25);"STARDATE";TAB(50);T
	J=3
	GOSUB 6800
	PRINT TAB(25);"CONDITION";TAB(50);CONDITION$
	J=4
	GOSUB 6800
	PRINT TAB(25);"QUADRANT";TAB(50);QX;QY
	J=5
	GOSUB 6800
	PRINT TAB(25);"SECTOR";TAB(50);EX;EY
	J=6
	GOSUB 6800
	PRINT TAB(25);"TOTAL ENERGY";TAB(50);ENERGY+SHIELDS
	J=7
	GOSUB 6800
	PRINT TAB(25);"PHOTON TORPEDOES";TAB(50);TORPS
	J=8
	GOSUB 6800
	PRINT TAB(25);"SHIELDS";TAB(50);SHIELDS
     PRINT DASH$
7270 RETURN

6800	REM-------PRINT A LINE OF GALAXY------
	FOR I=1 TO 8
		PRINT GALAXY$(I,J);" ";
	NEXT I
	RETURN

7290 REM-----------LIBRARY COMPUTER CODE BEGINS HERE -------
	IF DAMAGE(8)<0 THEN \
		PRINT DAM$(8);" DAMAGED" :\
		GOTO 1990
7320	REM
	INPUT "ENTER COMPUTER CODE: "; COMPUTER.CODE
	IF COMPUTER.CODE<1 OR COMPUTER.CODE>6 THEN \
		GOSUB 7450 :\
		GOTO 7320
	ON COMPUTER.CODE GOTO 7400, 7900, 8070, 8500, 8150, 7350
	GOSUB 7450		REM PRINT WHAT'S AVAILABLE
	GOTO 7320

7350	GOSUB 9030
	PRINT QUADRANT$ : PRINT
	GOTO 1990

7450 PRINT "FUNCTIONS AVAILABLE FROM LIBRARY-COMPUTER:"
     PRINT "   1 - CUMULATIVE GALACTIC RECORD"
     PRINT "   2 - STATUS REPORT"
     PRINT "   3 - PHOTON TORPEDO DATA"
     PRINT "   4 - STARBASE NAVIGATION DATA"
     PRINT "   5 - DIRECTION/DISTANCE CALCULATOR"
     PRINT "   6 - GALAXY 'REGION NAME' MAP"
	RETURN

7400 REM ------- CUMULATIVE GALACTIC RECORD CODE BEGINS.------
	PRINT TAB(14);"T H E   G A L A X Y"
	FOR X=1 TO 8
		PRINT TAB(X*5+1); X;
	NEXT X
	PRINT " "
	PRINT
	FOR J=1 TO 8
		PRINT J;
		FOR I=1 TO 8
		XXX=I*5
		IF GMAP(I,J)=0 THEN 7410
	IF GMAP(I,J)<100 THEN XXX=XXX+1
	IF GMAP(I,J)<10 THEN XXX=XXX+1
7410	IF GMAP(I,J)<>0 THEN PRINT TAB(XXX); GMAP(I,J); \
	ELSE PRINT TAB(XXX); "???";
	NEXT I
		PRINT
	NEXT J
     GOTO 1990

7900 REM ---------- STATUS REPORT RTN ------------------
	PRINT
     PRINT TAB(15);"STATUS REPORT"
     X$=""
     IF TOT.KLINGONS=1 THEN GOTO 7940
     X$="S"
7940 PRINT TOT.KLINGONS;" KLINGON"+X$+" LEFT"
     PRINT "MISSION MUST BE COMPLETED IN ";(T0+T9)-T;" STARDATES"
	IF TOT.BASES=0 THEN PRINT "NO STARBASES LEFT" : GOTO 7941
	IF TOT.BASES=1 THEN PRINT "1 STARBASE LEFT" : GOTO 7941
		PRINT TOT.BASES;" STARBASES LEFT"
7941	GOTO 1990

8070 REM----------  TORPEDO DATA, BASE NAV, D/D CALCULATOR------
     H8=0
     FOR I=1 TO 3
        IF KLING(I,3)<=0 THEN GOTO 8480
         W1=KLING(I,1)
         X=KLING(I,2)
8120     C1=SX
         A=SY
         GOTO 8220
8150     PRINT "DIRECTION/DISTANCE CALCULATOR:"
         PRINT "  YOU ARE AT QUADRANT (";QX;QY;") SECTOR (";SX;SY;")"
         PRINT "  PLEASE ENTER --->"
         PRINT "  INITIAL COORDINATES (X,Y) ";
         INPUT C1,A
         PRINT "  FINAL COORDINATES (X,Y) ";
         INPUT W1,X
8220     X=X-A
         A=C1-W1
         IF X<0 THEN GOTO 8350
         IF A<0 THEN GOTO 8410
         IF X>0 THEN GOTO 8280
         IF A=0 THEN GOTO 8370
8280     C1=1
8290     IF ABS(A)<=ABS(X) THEN GOTO 8330
         V5=C1+(((ABS(A)-ABS(X))+ABS(A))/ABS(A))
         PRINT TAB(10);"DIRECTION = ";V5
         GOTO 8460
8330     PRINT TAB(10);"DIRECTION = ";C1+(ABS(A)/ABS(X))
         GOTO 8460
8350     IF A>0 THEN GOTO 8390
         IF X=0 THEN GOTO 8410
8370     C1=5
         GOTO 8290
8390     C1=3
         GOTO 8420
8410     C1=7
8420     IF ABS(A)>=ABS(X) THEN GOTO 8450
         PRINT TAB(10);"DIRECTION = ";C1+((ABS(X)-ABS(A))+ABS(X))/ABS(X)
         GOTO 8460
8450     PRINT TAB(10);"DIRECTION = ";C1+(ABS(X)/ABS(A))
8460     PRINT TAB(10);"DISTANCE  = ";SQR(X*X+A*A)
	 PRINT TAB(10);"WARP      = ";
	 IF ABS(A)>ABS(X) THEN PRINT ABS(A) ELSE PRINT ABS(X)
         IF H8=1 THEN GOTO 1990
8480 NEXT I
     GOTO 1990
8500 IF BASES<>0 THEN GOTO 8530
     PRINT "MISSION ADVISORY:    'SENSORS SHOW NO STARBASES IN THIS QUADRANT.'"
     GOTO 1990
8530 PRINT "FROM ENTERPRISE TO STARBASE:"
     W1=BX
     X=BY
     GOTO 8120

9030	REM-----FIND QUADRANT NAME$--------------------------
	QUAD=(QX*QY)/4
	QUAD.INT=INT(QUAD)
	QUAD.FRAC=QUAD-QUAD.INT
	QUAD.REM=QUAD.FRAC*4+1
	QUADRANT$=QUAD.NAME$(QUAD)+SEGMENT$(QUAD.REM)
	RETURN

9250 STOP

999999 REM-----PRINT THE INSTRUCTIONS---------------------
	PRINT
	INST$="TREKINST"
	IF END #1 THEN 9300
	FILE INST$
	FOR X=1 TO 10 STEP 0
		READ #1;INSTRUC$
		PRINT INSTRUC$
		Q=Q+1
		IF Q=23 THEN \
			Q=0 :\
			PRINT "   TYPE 'GO' TO CONTINUE" :\
			INPUT RAND$
	NEXT X
9300	REM
	PRINT
	PRINT "    TYPE 'GO' TO CONTINUE"
	INPUT RAND$
	CLOSE (1)
	RETURN

9500	REM-------FIND EMPTY SECTOR-------------------------
	SX=FN8
	SY=FN8
	IF GALAXY$(SX,SY)=EMPTY$ THEN \
		RETURN
	GOTO 9500
