home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / cpmug / cpmug003.ark / STARTREK.BAS < prev    next >
Encoding:
BASIC Source File  |  1985-02-10  |  26.4 KB  |  1,000 lines

  1.     REM---------------------------------------------------------
  2.     REM        S  T  A  R  T  R  E  K
  3.     REM---------------------------------------------------------
  4.  
  5.  
  6.     DIM GALAXY(8,8), GALAXY$(8,8), C(9,2), KLING(3,3), GMAP(8,8) 
  7.     DIM DAMAGE(8), QUAD.NAME$(16), SEGMENT$(4), DAM$(8)
  8.     DIM PRINT.QUAD(3)
  9. ESC$=CHR$(27)
  10. EN$=ESC$+" "
  11. IVB$=EN$
  12. BLNK$=EN$
  13. BELL$=CHR$(7)
  14. NORM$=EN$+" "
  15.     EMPTY$="."
  16.     BASE$="B"
  17.     KLINGON$="K"
  18.     ENTERPRISE$="E"
  19.     STAR$="*"
  20.     CRUD$="?"
  21.     FIRST.TIME.FLAG=1
  22.     DOT$="........................"
  23.     PRINT
  24.     PRINT TAB(20);"S  T  A  R  T  R  E  K"
  25.     PRINT
  26. 240    INPUT "       ENTER YOUR NAME, CAPTAIN: "; CAPTAIN$
  27.     PRINT
  28.     PRINT "WELCOME ABOARD CAPTAIN: ";CAPTAIN$
  29.      PRINT TAB(15);"DO YOU WANT INSTRUCTIONS";
  30.      INPUT ANS$
  31.     RANDOMIZE
  32.      IF LEFT$(ANS$,1)="Y" THEN GOSUB 999999
  33.     PRINT CHR$(26)
  34.     PRINT "MISSION ADVISORY: ";
  35.     PRINT "STAND BY"
  36.      LET T=INT(RND*20+20)*100
  37.      T0=T
  38.      T9=26+INT(RND*8+1)
  39.      DOCKED=0
  40.      ENERGY.NORMAL=3000
  41.      ENERGY=ENERGY.NORMAL
  42.      TORPS=10
  43.      TORPS.NORMAL=TORPS
  44.      SHIELD.NORMAL=200
  45.      SHIELDS=SHIELD.NORMAL+10
  46.     FOR I=1 TO 8
  47.         FOR J=1 TO 8
  48.             GALAXY$(I,J)=EMPTY$
  49.         NEXT J
  50.     NEXT I
  51.      
  52.     REM-----------F U N C T I O N S---------------------
  53.     DEF FN8=INT(RND*8+1)
  54.     DEF FNROUND(D)=INT(D+.5)
  55.     DEF FND=SQR((ABS(KLING(I,1)-SX))^2+(ABS(KLING(I,2)-SY))^2)
  56.  
  57.      REM   ***  INITIALIZE ENTERPRISE'S POSITION
  58.  
  59.      QX=FN8
  60.      QY=FN8
  61.      EX=FN8
  62.      EY=FN8
  63.     SX=EX
  64.     SY=EY
  65.      C(3,1)=-1
  66.      C(2,1)=-1
  67.      C(4,1)=-1
  68.      C(4,2)=-1
  69.      C(5,2)=-1
  70.      C(6,2)=-1
  71.      C(1,2)=1
  72.      C(2,2)=1
  73.      C(6,1)=1
  74.      C(7,1)=1
  75.      C(8,1)=1
  76.      C(8,2)=1
  77.      C(9,2)=1
  78.      FOR I=1 TO 8
  79.         LET DAMAGE(I)=(INT(RND*30+1)/10)
  80.      NEXT I
  81.     DAM$(1)="WARP ENGINES"
  82.     DAM$(2)="SHORT RANGE SENSORS"
  83.     DAM$(3)="LONG RANGE SENSORS"
  84.     DAM$(4)="PHASER CONTROL"
  85.     DAM$(5)="PHOTON TORPEDO TUBES"
  86.     DAM$(6)="DAMAGE CONTROL"
  87.     DAM$(7)="SHIELD CONTROL"
  88.     DAM$(8)="COMPUTER"
  89.  
  90.     QUAD.NAME$(01)="ANTARES"
  91.     QUAD.NAME$(02)="SIRIUS"
  92.     QUAD.NAME$(03)="RIGEL"
  93.     QUAD.NAME$(04)="DENEB"
  94.     QUAD.NAME$(05)="PROCYON"
  95.     QUAD.NAME$(06)="CAPELLA"
  96.     QUAD.NAME$(07)="VEGA"
  97.     QUAD.NAME$(08)="BETELGEUSE"
  98.     QUAD.NAME$(09)="CANOPUS"
  99.     QUAD.NAME$(10)="ALDEBARAN"
  100.     QUAD.NAME$(11)="ALTAIR"
  101.     QUAD.NAME$(12)="REGULUS"
  102.     QUAD.NAME$(13)="SAGITTARIUS"
  103.     QUAD.NAME$(14)="ARCTURUS"
  104.     QUAD.NAME$(15)="POLLUX"
  105.     QUAD.NAME$(16)="SPICA"
  106.     SEGMENT$(1)=" I"
  107.     SEGMENT$(2)=" II"
  108.     SEGMENT$(3)=" III"
  109.     SEGMENT$(4)=" IV"
  110.  
  111.      TOT.BASES=0
  112.      TOT.KLINGONS=0
  113.      
  114.      REM   ***  SET UP WHAT EXISTS IN GALAXY.
  115.  
  116.      FOR I=1 TO 8
  117.          FOR J=1 TO 8
  118.              R1=RND
  119.              IF R1>.98 THEN \
  120.             KLINGONS=3 :\
  121.             GOTO 900
  122.              IF R1>.95 THEN \
  123.             KLINGONS=2 :\
  124.             GOTO 900
  125.              IF R1>.8  THEN \
  126.             KLINGONS=1 :\
  127.             GOTO 900
  128.              KLINGONS=0
  129. 900        REM
  130.         TOT.KLINGONS=TOT.KLINGONS+KLINGONS
  131.         IF RND>.96 THEN \
  132.             BASES=1 :\
  133.         ELSE \
  134.             BASES=0
  135.         TOT.BASES=TOT.BASES+BASES
  136.          STARS=FN8
  137.         GALAXY(I,J)=KLINGONS*100+BASES*10+STARS
  138.              GMAP(I,J)=0
  139.          NEXT J
  140.      NEXT I
  141.      K7=TOT.KLINGONS
  142.     IF TOT.BASES>0 THEN \
  143.         GOTO 1200
  144.     X=FN8
  145.     Y=FN8
  146.     GALAXY(X,Y)=GALAXY(X,Y)+10     REM ADD A BASE
  147.     BASES=1
  148.     TOT.BASES=BASES
  149. 1200    REM
  150.     IF TOT.BASES=1 THEN \
  151.         A$=" IS " :\
  152.         B$="" :\
  153.     ELSE \
  154.         A$=" ARE " :\
  155.         B$="S"
  156.     PRINT "YOUR ORDERS ARE AS FOLLOWS:"
  157.      PRINT "DESTROY THE ";TOT.KLINGONS;"KLINGON WARSHIPS WHICH HAVE INVADED"
  158.      PRINT "THE GALAXY BEFORE THEY CAN ATTACK FEDERATION HEADQUARTERS"
  159.      PRINT "ON STARDATE ";T0+T9;".  THIS GIVES YOU ";T9;"DAYS.  THERE";
  160.      PRINT A$
  161.      PRINT TOT.BASES;"STARBASE";B$;" IN THE GALAXY FOR RESUPPLYING YOUR SHIP."
  162.      PRINT
  163.      PRINT "     TYPE 'GO' WHEN READY TO ASSUME COMMAND."
  164.      INPUT RAND$
  165.  
  166. 1320     REM----------ENTER NEW QUADRANT--------------------
  167.     FOR J=1 TO 8
  168.         FOR I=1 TO 8
  169.             GALAXY$(I,J)=EMPTY$
  170.         NEXT I
  171.     NEXT J
  172.      KLINGONS=0
  173.      BASES=0
  174.      STARS=0
  175.     GALAXY$(EX,EY)=ENTERPRISE$
  176.      G5=0
  177.     GOSUB 9030        REM GET QUADRANT NAME
  178.      PRINT
  179.     IF FIRST.TIME.FLAG=1 THEN \
  180.         FIRST.TIME.FLAG=0 :\
  181.         PRINT "YOUR MISSION BEGINS WITH YOUR STARSHIP LOCATED" :\
  182.         PRINT "IN THE GALACTIC QUADRANT: ";QUADRANT$; :\
  183.     ELSE \
  184.         PRINT "NOW ENTERING QUADRANT:  ";QUADRANT$
  185. 1500 PRINT
  186.      X=GALAXY(QX,QY)*.01
  187.      KLINGONS=INT(X)
  188.      BASES=INT((X-KLINGONS)*10)
  189.      STARS=GALAXY(QX,QY)-INT(GALAXY(QX,QY)*.1)*10
  190.     IF KLINGONS>0 THEN \
  191.         PRINT "COMBAT AREA    ";BLNK$;"KLINGON ALERT"
  192.     IF SHIELDS<=SHIELD.NORMAL THEN \
  193.         PRINT "WARNING: LOW SHIELDS"
  194.      FOR X=1 TO 3
  195.         FOR Y=1 TO 3
  196.             KLING(X,Y)=0
  197.         NEXT Y
  198.      NEXT X
  199. 1600 REM
  200.     IF KLINGONS=0 THEN \
  201.         GOTO 1705
  202.     FOR X=1 TO KLINGONS
  203.         GOSUB 9500        REM FIND EMPTY SECTOR
  204.         GALAXY$(SX,SY)=KLINGON$ 
  205.         KLING(X,1)=SX
  206.         KLING(X,2)=SY
  207.         KLING(X,3)=SHIELD.NORMAL
  208.     NEXT X
  209. 1705    REM
  210.     IF BASES=0 THEN \
  211.         GOTO 1710
  212.     FOR X=1 TO BASES
  213.         GOSUB 9500        REM FIND EMPTY SECTOR
  214.         GALAXY$(SX,SY)=BASE$
  215.         BX=SX
  216.         BY=SY
  217.     NEXT X
  218. 1710    REM
  219.     IF STARS<=0 THEN \
  220.         GOTO 1980
  221.     FOR X=1 TO STARS
  222.         GOSUB 9500        REM FIND EMPTY SECTOR
  223.         GALAXY$(SX,SY)=STAR$ 
  224.     NEXT X
  225. 1980 GOSUB 6430            REM SHORT RANGE SENSOR RTN
  226. 1990 IF SHIELDS+ENERGY<=10 OR (DAMAGE(7)<0 AND ENERGY<=10) THEN  \
  227.         PRINT BLNK$;"**FATAL ERROR**" :\
  228.         PRINT "YOU'VE JUST STRANDED YOUR SHIP IN SPACE!" :\
  229.         PRINT "YOU HAVE INSUFFICIENT MANEUVERING ENERGY AND" :\
  230.         PRINT "SHIELD CONTROL IS PRESENTLY INCAPABLE OF CROSS-" :\
  231.         PRINT "CIRCUITING TO THE ENGINE ROOM!" :\
  232.         GOTO 6260
  233.  
  234. 2060    REM-----C O M M A N D--------------------------------
  235.     IF T>T0+T9 THEN \
  236.         GOTO 6220        REM YOU LOSE ASSHOLE!
  237.     PRINT CAPTAIN$;":  ";
  238.     INPUT COMMAND$
  239.     IF LEFT$(COMMAND$,1)="N" THEN GOTO 2300
  240.     IF LEFT$(COMMAND$,1)="S" THEN GOTO 1980
  241.     IF LEFT$(COMMAND$,1)="L" THEN GOTO 4000
  242.     IF LEFT$(COMMAND$,1)="P" THEN GOTO 4260
  243.     IF LEFT$(COMMAND$,1)="T" THEN GOTO 4700
  244.     IF LEFT$(COMMAND$,1)="E" THEN GOTO 5530
  245.     IF LEFT$(COMMAND$,1)="D" THEN GOTO 5690
  246.     IF LEFT$(COMMAND$,1)="C" THEN GOTO 7290
  247.     IF LEFT$(COMMAND$,1)="Q" THEN GOTO 6270
  248.      PRINT "ENTER ONE OF THE FOLLOWING:"
  249.     PRINT "N-AVIGATE"
  250.     PRINT "S-HORT RANGE SCAN"
  251.     PRINT "L-ONG RANGE SCAN"
  252.     PRINT "P-HASERS"
  253.     PRINT "T-ORPEDOS"
  254.     PRINT "E-NGINEERING"
  255.     PRINT "D-AMAGE CONTROL"
  256.     PRINT "C-OMPUTER"
  257.     PRINT "Q-UIT"
  258.      PRINT
  259.      GOTO 2060
  260.      REM**********> COURSE CONTROL BEGINS HERE.
  261. 2300 PRINT "COURSE (1-9) ";
  262.      INPUT COURSE
  263.     IF COURSE>=1 AND COURSE<=9 THEN  \
  264.         GOTO 2350
  265.     PRINT "LT. SULU:"; 
  266.     PRINT "   INCORRECT COURSE DATA, SIR." 
  267.     GOOF1=GOOF1+.1
  268.     IF RND+GOOF1>.85 THEN \
  269.     PRINT "MISSION ADVISORY: ";:\
  270.        PRINT "CAPTAIN ";CAPTAIN$;", I STRONGLY SUGGEST YOU GET YOURSELF" :\
  271.         PRINT "ORGANIZED BEFORE THE KLINGONS BLAST YOUR ASS."
  272.     GOTO 2300
  273. 2350    REM-----COURSE IS OK-----
  274. 2380 PRINT "WARP FACTOR (0-8) ";
  275.      INPUT WARP
  276.     IF WARP>=0 AND WARP<=8 THEN \
  277.         GOTO 2450        REM WARP OK
  278.     PRINT "ENGINEERING OFCR SCOTT:";
  279.     PRINT "THE ENGINES WON'T TAKE WARP ";WARP;"!"
  280.     GOOF2=GOOF2+.1
  281.     IF RND+GOOF2>.85 THEN \
  282.         PRINT "MISSION ADVISORY: "; :\
  283.         PRINT "WARP ";WARP;"!  WHAT A GALACTIC JACKASS!"
  284.     GOTO 2350
  285. 2450    REM-------
  286.     IF DAMAGE(1)>=0 THEN \
  287.         GOTO 2490
  288.     PRINT DAM$(1);" DAMAGED"
  289.     IF WARP>.2 THEN \
  290.         PRINT "MAXIMUM WARP:  0.2" :\
  291.         GOTO 2350
  292. 2490    REM
  293.     E.NEEDED=FNROUND(WARP*8)
  294.      IF ENERGY-E.NEEDED>=0 THEN GOTO 2590
  295.     PRINT "ENGINEERING OFCR SCOTT:";
  296.     PRINT "NOT ENOUGH ENERGY LEFT"
  297.     IF SHIELDS<E.NEEDED-ENERGY THEN \
  298.         GOTO 2350        REM ASK FOR NEW WARP
  299.     IF DAMAGE(7)<0 THEN \
  300.         GOTO 2350
  301.      PRINT "SHIELD CONTROL ROOM REPORTS ";SHIELDS;" UNITS"
  302.      PRINT "OF ENERGY PRESENTLY DEPLOYED TO SHIELDS."
  303.      GOTO 5530            REM SHIELD CONTROL
  304.      REM*******> KLINGONS MOVE/FIRE ON MOVING STARSHIP . .  
  305.     IF KLINGONS=0 THEN \
  306.         GOTO 2750
  307. 2590    REM
  308.     FOR I=1 TO KLINGONS
  309.         IF KLING(I,3)<=0 THEN GOTO 2700
  310.         GALAXY$(KLING(I,1),KLING(I,2))=EMPTY$
  311.         GOSUB 9500        REM FIND EMPTY SECTOR
  312.         KLING(I,1)=SX
  313.         KLING(I,2)=SY
  314.         GALAXY$(KLING(I,1),KLING(I,2))=KLINGON$
  315. 2700 NEXT I
  316. 2750    REM
  317.      GOSUB 6000            REM KLINGONS SHOOT
  318.      D1=0
  319.     D6=INT(WARP*10)/10
  320.      REM****> MAKE REPAIRS TO THE SHIP.
  321. 2770 FOR I=1 TO 8
  322.          IF DAMAGE(I)>=0 THEN GOTO 2880
  323.          DAMAGE(I)=DAMAGE(I)+D6
  324.          IF DAMAGE(I)<0 THEN GOTO 2880
  325.         IF D1=0 THEN \
  326.             D1=1 :\
  327.             PRINT "DAMAGE CONTROL REPORT"
  328.          PRINT TAB(8);
  329.     PRINT DAM$(I);
  330.          PRINT TAB(32);"REPAIR COMPLETED"
  331. 2880 NEXT I
  332.      REM--------> DAMAGE/IMPROVEMENT DURING SOME VES
  333.      IF RND>.2 THEN GOTO 3070
  334.     R1=FN8
  335.      IF RND>=.6 THEN GOTO 3000
  336.     DAMAGE(R1)=DAMAGE(R1)-INT((RND*5+1)*10)/10
  337.      PRINT
  338.      PRINT "DAMAGE CONTROL REPORT:"
  339.     PRINT DAM$(R1);
  340.      PRINT TAB(32);"DAMAGED"
  341.      PRINT
  342.      GOTO 3070
  343. 3000    REM
  344.     DAMAGE(R1)=DAMAGE(R1)+INT((RND*3+1)*10)/10
  345.      PRINT
  346.      PRINT "DAMAGE CONTROL REPORT:"
  347.     PRINT DAM$(R1);
  348.      PRINT TAB(32);"STATE OF REPAIR IMPROVED"
  349.      PRINT
  350. 3070    REM-----BEGIN MOVING STARSHIP---------------------
  351.     GALAXY$(EX,EY)=EMPTY$
  352.     T.CRSE=INT(COURSE)
  353.      DELTA.X=C(T.CRSE,1)+(C(T.CRSE+1,1)-C(T.CRSE,1))*(COURSE-INT(COURSE))
  354.      X=EX
  355.      Y=EY
  356.      DELTA.Y=C(T.CRSE,2)+(C(T.CRSE+1,2)-C(T.CRSE,2))*(COURSE-INT(COURSE))
  357.      OLD.QX=QX
  358.      OLD.QY=QY
  359.      FOR I=1 TO E.NEEDED
  360.           X=X+DELTA.X
  361.           Y=Y+DELTA.Y
  362.         EX=FNROUND(X)
  363.         EY=FNROUND(Y)
  364.         IF EX<1 OR \
  365.            EX>8 OR \
  366.            EY<1 OR \
  367.            EY>8 THEN \
  368.             GOTO 3500
  369.         IF GALAXY$(EX,EY)=EMPTY$ THEN \
  370.             LAST.X=0 :\
  371.             LAST.Y=0 :\
  372.             GOTO 3360
  373.         OBJECT$=GALAXY$(EX,EY)
  374.         IF OBJECT$=KLINGON$ THEN OBJECT$="KLINGON"
  375.         IF OBJECT$=STAR$ THEN OBJECT$="STAR"
  376.         IF OBJECT$=BASE$ THEN OBJECT$="STARBASE"
  377.         IF OBJECT$=CRUD$ THEN OBJECT$="SPACECRUD"
  378.         EX=FNROUND(X-DELTA.X)
  379.         EY=FNROUND(Y-DELTA.Y)
  380.         PRINT BELL$;"LT SULU:";
  381.         PRINT " EMER< NCY STOP!"
  382.         PRINT
  383.         PRINT "MISSION ADVISORY: ";
  384.         PRINT "WE ALMOST RAMMED RIGHT INTO THAT ";OBJECT$;" AT ";
  385.         PRINT "WARP ";WARP;"!!"
  386.         GOOF3=GOOF3+.1
  387.         IF RND+GOOF3>.75 THEN \
  388.             PRINT "CAPTAIN ";CAPTAIN$;", DON'T YOU THINK IT'S TIME" :\
  389.             PRINT "YOU RECONSIDER THAT DESK JOB AT FEDERATION HQ?"
  390.           GOTO 3370
  391. 3360 NEXT I
  392. 3370    REM------PUT THE ENTERPRISE IN ITS NEW PLACE-----
  393.     GALAXY$(EX,EY)=ENTERPRISE$
  394.     GOSUB 3910        REM SUBTRACT THE ENERGY NEEDED
  395.      T8=1
  396.     IF WARP<1 THEN \
  397.         T8=.1*INT(10*WARP)
  398.     T=T+T8
  399.      IF T>T0+T9 THEN GOTO 6220
  400.      GOTO 1980        REM SEE IF DOCKED THEN GET COMMAND
  401.  
  402. 3500    REM-----EXCEEDED QUADRANT LIMITS----------------
  403.     X=8*QX+X+E.NEEDED*DELTA.X
  404.      Y=8*QY+Y+E.NEEDED*DELTA.Y
  405.      QX=INT(X/8)
  406.      QY=INT(Y/8)
  407.      EX=INT(X-QX*8)
  408.      EY=INT(Y-QY*8)
  409.     PERIMETER.FLAG=0
  410.     IF EX=0 THEN \
  411.         QX=QX-1 :\
  412.         EX=8
  413.     IF EY=0 THEN \
  414.         QY=QY-1 :\
  415.         EY=8
  416.     IF QX<1 THEN \
  417.         QX=1:EX=1 :\
  418.         PERIMETER.FLAG=1
  419.     IF QX>8 THEN \
  420.         QX=8:EX=8 :\
  421.         PERIMETER.FLAG=1
  422.     IF QY<1 THEN \
  423.         QY=1:EY=1 :\
  424.         PERIMETER.FLAG=1
  425.     IF QY>8 THEN \
  426.         QY=8:EY=8 :\
  427.         PERIMETER.FLAG=1
  428.     IF PERIMETER.FLAG=0 THEN \
  429.         GOTO 3860
  430.      PRINT "LT. UHURA:"
  431.     PRINT "STARFLEET COMMAND REPORTS:"
  432.     PRINT "'PERMISSION TO CROSS GALACTIC PERIMETER"
  433.      PRINT "IS ";BLNK$;"*DENIED*";NORM$;".  SHUT DOWN YOUR ENGINES."
  434.      PRINT "ENGINEERING OFCR SCOTT:";
  435.     PRINT "WARP ENGINES SHUT DOWN"
  436.      PRINT "AT SECTOR ";EX;EY;" OF QUADRANT ";QX;QY;"."
  437.      IF T>T0+T9 THEN GOTO 6220
  438. 3860    REM
  439.     IF QX=OLD.QX AND QY=OLD.QY THEN \
  440.         GOTO 3370
  441.      T=T+1
  442.      GOSUB 3910            REM SUBTRACT THE NEEDED ENERGY
  443.      GOTO 1320            REM ANNOUNCE THE NEW QUADRANT
  444.  
  445. 3910     REM---------> MANEUVER ENERGY S/R
  446.     ENERGY=ENERGY-E.NEEDED-10
  447.      IF ENERGY>=0 THEN GOTO 3980
  448.      PRINT "SHIELD CONTROL SUPPLIED ENERGY TO COMPLETE THE MANEUVER."
  449.       IF RND>.6 THEN GOTO 3911
  450.     PRINT "MISSION ADVISORY: ";
  451.     PRINT "CAPTAIN ";CAPTAIN$;
  452.      IF RND>.5 THEN PRINT " THAT WAS EXTREMELY CLOSE EVEN FOR THE ENTERPRISE" :\
  453.      ELSE \
  454.      PRINT " WE'RE GOING TO NEED THOSE SHIELDS BEFORE LONG, YOU KNOW.'"
  455. 3911 REM
  456.      SHIELDS=SHIELDS+ENERGY
  457.      ENERGY=0
  458.     IF SHIELDS<0 THEN \
  459.         SHIELDS=0
  460. 3980 RETURN
  461.  
  462. 4000 REM-----------> LONG RANGE SENSOR SCAN CODE
  463.     IF DAMAGE(3)<0 THEN \
  464.         PRINT DAM$(3);" DAMAGED" :\
  465.         GOTO 1990
  466. 4030 PRINT DAM$(3);" SCAN FOR QUADRANT ";QX;QY
  467.     PRINT
  468.     FOR J=QY-1 TO QY+1
  469.         Q=0
  470.         FOR I=QX-1 TO QX+1
  471.             Q=Q+1
  472.             IF I<1 OR I>8 OR J<1 OR J>8 THEN \
  473.                 PRINT.QUAD(Q)=0 :\
  474.             ELSE \
  475.                 PRINT.QUAD(Q)=GALAXY(I,J) :\
  476.                 GMAP(I,J)=GALAXY(I,J)
  477.         NEXT I
  478.         FOR Q=1 TO 3
  479.     IF PRINT.QUAD(Q)=0 THEN 4100
  480.     YYY=Q*6
  481.     IF PRINT.QUAD(Q)<100 THEN YYY=YYY+1
  482.     IF PRINT.QUAD(Q)<10 THEN YYY=YYY+1
  483.             PRINT ;TAB(YYY);PRINT.QUAD(Q);
  484. 4040        NEXT Q
  485.     PRINT : PRINT
  486.     NEXT J
  487.     PRINT
  488.     GOTO 1990
  489. 4100            PRINT ;TAB(Q*6);"***";
  490.     GOTO 4040
  491.  
  492. 4260 REM----------> PHASER CONTROL BEGINS HERE
  493.     SX=EX
  494.     SY=EY
  495.     IF KLINGONS=0 THEN \
  496.         PRINT "MISSION ADVISORY: "; :\
  497.         PRINT "SENSORS SHOW NO ENEMY SHIPS IN HIS QUADRANT" :\
  498.         GOTO 1990
  499.     IF DAMAGE(4)<0 THEN \
  500.         PRINT DAM$(4);" DAMAGED" :\
  501.         GOTO 1990
  502.     IF DAMAGE(8)<0 THEN \
  503.         PRINT DAM$(8);" MALFUNCTION REDUCES ACCURACY" 
  504. 4350 PRINT "PHASERS LOCKED ON TARGET; "
  505. 4360 PRINT "ENERGY AVAILABLE = ";ENERGY
  506.      PRINT "NUMBER OF UNITS TO FIRE: ";
  507.      INPUT RATE.OF.FIRE
  508.      IF RATE.OF.FIRE<=0 THEN GOTO 1990
  509.      IF RATE.OF.FIRE>ENERGY THEN GOTO 4360
  510.      ENERGY=ENERGY-RATE.OF.FIRE
  511.      GOSUB 6000            REM   KLINGONS SHOOT
  512.     IF DAMAGE(7)<0 OR DAMAGE(4)<1 THEN \
  513.         DRAIN=RND :\
  514.         RATE.OF.FIRE=RATE.OF.FIRE*DRAIN :\
  515.         DRAIN=INT((1-DRAIN)*100) :\
  516.         PRINT "MISSION ADVISORY: "; :\
  517.         PRINT DRAIN;"% OF PHASER POWER WAS DIVERTED TO DAMAGE CONTROL"
  518. 4450 TOTAL.HIT=INT(RATE.OF.FIRE/KLINGONS)
  519.      FOR I=1 TO 3
  520.          IF KLING(I,3)<=0 THEN GOTO 4670
  521.          HIT=INT((TOTAL.HIT/FND)*(RND+1.5))
  522.     IF HIT<.15*KLING(I,3) THEN \
  523.         PRINT "SENSORS SHOW NO DAMAGE "; :\
  524.         PRINT "TO ENEMY AT ";KLING(I,1);KLING(I,2) :\
  525.         GOTO 4670
  526. 4530     KLING(I,3)=KLING(I,3)-HIT*(RND+.3)
  527.          PRINT HIT;" UNIT HIT ON KLINGON AT SECTOR ";KLING(I,1);KLING(I,2)
  528.          IF KLING(I,3)<=0 THEN GOTO 4580
  529.     IF RND>.7 THEN \
  530.         PRINT "SENSORS SHOW ";KLING(I,3);" UNITS REMAINING" 
  531.     GOTO 4670
  532. 4580     PRINT BELL$; BLNK$;" << KLINGON DESTROYED >>"
  533.          KLINGONS=KLINGONS-1
  534.          TOT.KLINGONS=TOT.KLINGONS-1
  535.         GALAXY$(KLING(I,1),KLING(I,2))=EMPTY$
  536.          GALAXY(QX,QY)=KLINGONS*100+BASES*10+STARS
  537.     IF GMAP(QX,QY)<>0 THEN \
  538.         GMAP(QX,QY)=GALAXY(QX,QY)
  539.          IF TOT.KLINGONS<=0 THEN GOTO 6370
  540. 4670 NEXT I
  541.      GOTO 1990
  542.  
  543. 4700 REM---------> PHOTON TORPEDO CODE BEGINS
  544.     GOSUB 6000        REM KLINGONS SHOOT
  545.     SX=EX
  546.     SY=EY
  547.      IF DAMAGE(5)<0 THEN \
  548.         PRINT DAM$(5);" DAMAGED" :\
  549.              GOTO 1990
  550.     IF TORPS<=0 THEN \
  551.         PRINT "ALL PHOTON TORPEDOES EXPENDED" :\
  552.         GOTO 1990
  553. 4760 PRINT "TORPEDO COURSE (1-9) ";
  554.      INPUT COURSE
  555.     IF COURSE<1 OR COURSE>9 THEN \
  556.         PRINT "ENSIGN CHEKOV:"; :\
  557.         PRINT "INCORRECT COURSE DATA, SIR!" :\
  558.         ON FNROUND(RND)+1 GOTO 1990, 4760
  559.     T.CXSE=INT(COURSE)
  560. 4850 DELTA.X=C(T.CRSE,1)+(C(T.CRSE+1,1)-C(T.CRSE,1))*(COURSE-INT(COURSE))
  561.      DELTA.Y=C(T.CRSE,2)+(C(T.CRSE+1,2)-C(T.CRSE,2))*(COURSE-INT(COURSE))
  562.      ENERGY=ENERGY-2
  563.      X=SX
  564.      Y=SY
  565.      TORPS=TORPS-1
  566.      PRINT "TORPEDO TRACK---> ";
  567. 4920 X=X+DELTA.X
  568.      Y=Y+DELTA.Y
  569.     ROUND.X=FNROUND(X)
  570.     ROUND.Y=FNROUND(Y)
  571.     IF ROUND.X<1 OR \
  572.        ROUND.X>8 OR \
  573.        ROUND.Y<1 OR \
  574.        ROUND.Y>8 THEN \
  575.         PRINT "TORPEDO MISSED" :\
  576.         GOTO 5500
  577.      PRINT " ";ROUND.X;ROUND.Y;
  578.     IF GALAXY$(ROUND.X,ROUND.Y)=EMPTY$ THEN \
  579.         GOTO 4920
  580.     IF GALAXY$(ROUND.X,ROUND.Y)=KLINGON$ THEN \
  581.         GOTO 5100
  582.     IF GALAXY$(ROUND.X,ROUND.Y)=STAR$ THEN \
  583.         GOTO 5210
  584.     IF GALAXY$(ROUND.X,ROUND.Y)=BASE$ THEN \
  585.         GOTO 5280
  586.     IF GALAXY$(ROUND.X,ROUND.Y)=CRUD$ THEN \
  587.         GOTO 4920
  588.     GOTO 4920        REM DEFENSIVE PROGRAMMING
  589.  
  590. 5100    REM-----HIT A KLINGON--------------------------
  591.      PRINT BELL$;BLNK$;"<< KLINGON DESTROYED >>"
  592.     ON FN8 GOTO 5177, 5177, 5177, 5177, 5177, 5176, 5178, 5178
  593. 5176    REM
  594.     PRINT "EXCELLENT WORK WITH THE TORPEDOES, CAPTAIN."
  595.     GOTO 5177
  596. 5178    REM
  597.     PRINT "MISSION ADVISORY: ";
  598.     PRINT "VERY GOOD SHOOTING, CAPTAIN ";CAPTAIN$
  599. 5177    REM
  600.     GALAXY$(X,Y)=EMPTY$
  601.      KLINGONS=KLINGONS-1
  602.      TOT.KLINGONS=TOT.KLINGONS-1
  603.      IF TOT.KLINGONS<=0 THEN GOTO 6370
  604.      FOR I=1 TO 3
  605.          IF ROUND.X<>KLING(I,1) THEN GOTO 5180
  606.          IF ROUND.Y=KLING(I,2) THEN GOTO 5190
  607. 5180 NEXT I
  608. 5190 KLING(I,3)=0
  609.      GOTO 5430
  610. 5210    REM-----HIT A STAR------------------------
  611.      PRINT "STAR AT ";ROUND.X;ROUND.Y;" ABSORBED TORPEDO ENERGY"
  612.      IF RND>.7 THEN GOTO 5214
  613.     PRINT "COMMAND INQUIRY: ";
  614.     PRINT "WAS IT YOUR INTENTION TO WASTE A VALUABLE"
  615.     PRINT "TORPEDO ON THAT STAR, CAPTAIN?"
  616. 5214 REM
  617.      GOTO 5500
  618. 5280    REM------HIT A STARBASE-------------------
  619.      PRINT BELL$;IVB$;">> STARBASE DESTROYED <<"
  620.      BASES=BASES-1
  621.      TOT.BASES=TOT.BASES-1
  622.     GALAXY$(X,Y)=EMPTY$
  623.       IF TOT.BASES>0 THEN GOTO 5400
  624.     PRINT "MISSION ADVISORY: ";
  625.     PRINT "CAPTAIN ";CAPTAIN$;" I'M AFRAID THAT YOU HAVE BLOWN IT"
  626.      GOTO 6270
  627. 5400 PRINT "STARFLEET COMMAND IS REVIEWING YOUR RECORD TO CONSIDER"
  628.      PRINT "A GENERAL COURT-MARTIAL."
  629.      DOCKED=0
  630. 5430    REM-------END OF ENTERPRISE SHOOTING-------
  631.      GALAXY(QX,QY)=KLINGONS*100+BASES*10+STARS
  632.     IF GMAP(QX,QY)<>0 THEN \
  633.         GMAP(QX,QY)=GALAXY(QX,QY)
  634. 5500    REM
  635.     IF RND>.7 THEN \
  636.         GOSUB 6000    REM KLINGONS MAY SHOOT AGAIN
  637.      GOTO 1990
  638.  
  639. 5530 REM---------SHIELD CONTROL STARTS HERE-----------------
  640.     IF DAMAGE(7)<0 THEN \
  641.         PRINT DAM$(7);" DAMAGED" :\
  642.         GOTO 1990
  643. 5560 PRINT "ENERGY AVAILABLE=";ENERGY+SHIELDS
  644.     PRINT "DIVERT TO SHIELDS ";
  645.      INPUT DIVERTED
  646.     IF DIVERTED<0 OR DIVERTED=SHIELDS THEN \
  647.         PRINT "SHIELDS UNCHANGED" :\
  648.         GOTO 1990
  649.     IF DIVERTED>SHIELDS+ENERGY THEN \
  650.         PRINT "CAN'T DIVERT" :\
  651.         GOTO 5560
  652.     ENERGY=ENERGY+SHIELDS-DIVERTED
  653.     SHIELDS=DIVERTED
  654.      PRINT "DEFLECTOR CONTROL ROOM REPORT: ";
  655.     PRINT "SHIELDS NOW AT ";SHIELDS
  656.     GOTO 1990
  657.  
  658. 5690 REM------------DAMAGE CONTROL STARTS HERE----------------
  659.     IF DOCKED=1 THEN GOTO 5710
  660.     IF DAMAGE(6)<0 THEN \
  661.         PRINT DAM$(6);" DAMAGED" :\
  662.         GOTO 1990
  663.     GOSUB 5910        REM PRINT DAMAGE RPT
  664.     GOTO 1990
  665. 5710    REM----------D O C K E D------------------------------
  666.      D3=0
  667.      FOR I=1 TO 8
  668.         IF DAMAGE(I)>=.7 THEN GOTO 5760
  669.         D3=D3+.5
  670. 5760 NEXT I
  671.      IF D3=0 THEN GOTO 1990
  672.      D3=D3+(.5*RND)
  673.     IF D3>1 THEN \
  674.         D3=RND
  675. 5810    REM
  676.     PRINT "TECHS STANDING BY TO REPAIR THE SHIP."
  677.     PRINT "ESTIMATED TIME: ";D3;"STARDATES"
  678.     PRINT "AUTHORIZE (Y/N) ";
  679.     INPUT A$
  680.     IF LEFT$(A$,1)<>"Y" THEN GOTO 1990
  681.      FOR I=1 TO 8
  682. 5815        REM
  683.         IF DAMAGE(I)<=.7 THEN \
  684.             DAMAGE(I)=DAMAGE(I)+1 :\
  685.             GOTO 5815
  686.      NEXT I
  687.      T=T+D3+.1
  688.     GOSUB 5910        REM PRINT DAMAGE RPT
  689.     GOTO 1990
  690.  
  691. 5910    REM-----PRINT DAMAGE RPT---------------------
  692.     PRINT
  693.     PRINT "   DEVICE";TAB(27);"CONDITION"
  694.     FOR X=1 TO 8
  695.         PRINT DAM$(X);TAB(30);DAMAGE(X)
  696.     NEXT X
  697.     PRINT
  698.     RETURN
  699.  
  700. 6000 REM-------------KLINGONS SHOOTING ROUTINE------------
  701.     SX=EX
  702.     SY=EY
  703.      IF KLINGONS<=0 THEN GOTO 6210
  704.     IF DOCKED=1 THEN \
  705.         PRINT "STARBASE SHIELDS PROTECT THE ENTERPRISE" :\
  706.         RETURN
  707.     FOR I=1 TO 3
  708.        IF KLING(I,3)<=0 THEN GOTO 6200
  709.        HIT=INT((KLING(I,3)/FND)*(2+RND))
  710.        SHIELDS=SHIELDS-INT(HIT*RND)
  711.        PRINT BELL$;"----> ";HIT;" UNIT HIT ON ENTERPRISE FROM SECTOR ";
  712.        PRINT KLING(I,1);KLING(I,2)
  713.     GOOF4=GOOF4+.1
  714.     IF RND+GOOF4>.7 THEN \
  715.         PRINT "SHIELDS DOWN TO ";SHIELDS;"UNITS"
  716.            IF HIT<20 OR \
  717.        HIT/SHIELDS<.02 THEN \
  718.         GOTO 6200
  719.     GOSUB 6100        REM DAMAGE RTN
  720.     IF SHIELDS<0 THEN \
  721.         GOSUB 6100
  722. 6200    REM
  723.     NEXT I
  724. 6210    RETURN
  725.  
  726. 6100    REM------DAMAGE TO ENTERPRISE--------------------------
  727.     TEMP=SHIELDS
  728.     IF SHIELDS<=0 THEN TEMP=1
  729.     NEW.DAMAGE=HIT/TEMP+.5*RND
  730.     NEW.DAMAGE=INT(NEW.DAMAGE*10)/10
  731.     R1=FN8
  732.     DAMAGE(R1)=DAMAGE(R1)-NEW.DAMAGE
  733.     PRINT "DAMAGE CONTROL REPORTS"
  734.     PRINT DAM$(R1);TAB(32);" DAMAGED"
  735.     RETURN
  736.  
  737. 6220 PRINT "IT IS STARDATE ";T
  738.      GOTO 6270
  739. 6240 PRINT
  740.      PRINT "THE ENTERPRISE HAS BEEN DESTROYED."
  741.      PRINT "  THE FEDERATION WILL BE CONQUERED."
  742. 6260 PRINT "IT IS STARDATE ";T
  743. 6270 PRINT "THERE WERE ";TOT.KLINGONS;" KLINGON BATTLE CRUISERS LEFT AT THE"
  744.      PRINT "   END OF YOUR MISSION."
  745. 6290 PRINT
  746.      PRINT
  747.      PRINT "THE FEDERATION IS IN NEED OF A NEW STARSHIP COMMANDER"
  748.      PRINT "FOR A SIMILAR MISSION -- IF THERE IS A VOLUNTEER,"
  749.      PRINT "LET HIM STEP FORWARD AND ENTER 'AYE'.";
  750.      INPUT A$
  751.     IF LEFT$(A$,1)="A" THEN 240
  752.     PRINT "STARBASE TO ENTERPRISE:  ";
  753.     PRINT "WE ARE TERMINATING COMMUNICATIONS"
  754.     STOP
  755. 6370 PRINT "CONGRATULATIONS, CAPTAIN!  THE LAST KLINGON BATTLE CRUISER"
  756.      PRINT "MENACING THE FEDERATION HAS BEEN DESTROYED."
  757.      PRINT
  758.      PRINT "YOUR EFFICIENCY RATING IS ";(K7/(T-T0))*1000
  759.      PRINT 
  760.     PRINT "MISSION ADVISORY: ";
  761.     PRINT "CONFIDENTIALLY SPEAKING, CAPTAIN ";CAPTAIN$;", I BELIEVE"
  762.      PRINT "THAT THE PERFORMANCE YOU HAVE JUST GIVEN ON THE "
  763.      PRINT "FIELD OF BATTLE HAS BEEN SO COMMENDABLE AS TO VIRTUALLY"
  764.      PRINT "ASSURE THAT YOUR NAME WILL COME UP ON THE FEDERATION"
  765.      PRINT "NAVY PROMOTION LIST QUITE SOON.  EVEN THOUGH I AM AN"
  766.      PRINT "UNEMOTIONAL VULCAN, I WAS PROFOUNDLY STIRRED BY YOUR"
  767.      PRINT "DEMONSTRATION OF SKILL AND JUDGMENT'"
  768.      PRINT
  769.      GOTO 6290
  770.  
  771. 6430 REM------------SHORT RANGE SENSOR AND STARTUP SUBRTN.----------
  772.     SX=EX
  773.     SY=EY
  774.      FOR J=SY-1 TO SY+1
  775.          FOR I=SX-1 TO SX+1
  776.         IF I<1 OR I>8 OR \
  777.            J<1 OR J>8 THEN \
  778.             GOTO 6540
  779.         IF GALAXY$(I,J)=BASE$ THEN \
  780.             GOTO 6580
  781. 6540     NEXT I
  782.      NEXT J
  783.      DOCKED=0
  784.      GOTO 6650
  785. 6580 DOCKED=1
  786.      CONDITION$="DOCKED"
  787.     IF LAST.X=EX AND LAST.Y=EY THEN \
  788.         GOTO 6720
  789.     LAST.X=EX
  790.     LAST.Y=EY
  791.     TEMP=ENERGY.NORMAL-333+100*FN8
  792.     IF TEMP>ENERGY THEN \
  793.         ENERGY=TEMP
  794.     TEMP=TORPS.NORMAL-3+FN8
  795.     IF TEMP>TORPS THEN \
  796.         TORPS=TEMP
  797.     PRINT "MISSION ADVISORY: ";
  798.     PRINT "CAPTAIN ";CAPTAIN$;":"
  799.     PRINT "WE HAVE DROPPED OUR SHIELDS FOR DOCKING"
  800.     PRINT "WE ARE RELOADING ";TORPS;" TORPEDOES"
  801.     PRINT "OUR ENERGY IS BEING REPLENISHED TO ";ENERGY;" UNITS"
  802.      SHIELDS=0
  803.      GOTO 6720
  804. 6650    REM-----GET CONDITION CODE-----------------
  805.     CONDITION$="GREEN"
  806.     IF ENERGY<ENERGY.NORMAL/10 THEN \
  807.         CONDITION$="YELLOW"
  808.     IF KLINGONS=1 THEN \
  809.         CONDITION$="ORANGE"
  810.     IF KLINGONS>1 THEN \
  811.         CONDITION$="RED !! <---"
  812. 6720    REM-----SENSOR OK?-----------------
  813.     IF DAMAGE(2)<0 THEN \
  814.         PRINT DAM$(2);" DAMAGED !! <---" :\
  815.         RETURN
  816. 6770    REM----------------------------
  817.      PRINT DASH$
  818.     J=1
  819.     GOSUB 6800
  820.     PRINT " "
  821.     J=2
  822.     GOSUB 6800
  823.     PRINT TAB(25);"STARDATE";TAB(50);T
  824.     J=3
  825.     GOSUB 6800
  826.     PRINT TAB(25);"CONDITION";TAB(50);CONDITION$
  827.     J=4
  828.     GOSUB 6800
  829.     PRINT TAB(25);"QUADRANT";TAB(50);QX;QY
  830.     J=5
  831.     GOSUB 6800
  832.     PRINT TAB(25);"SECTOR";TAB(50);EX;EY
  833.     J=6
  834.     GOSUB 6800
  835.     PRINT TAB(25);"TOTAL ENERGY";TAB(50);ENERGY+SHIELDS
  836.     J=7
  837.     GOSUB 6800
  838.     PRINT TAB(25);"PHOTON TORPEDOES";TAB(50);TORPS
  839.     J=8
  840.     GOSUB 6800
  841.     PRINT TAB(25);"SHIELDS";TAB(50);SHIELDS
  842.      PRINT DASH$
  843. 7270 RETURN
  844.  
  845. 6800    REM-------PRINT A LINE OF GALAXY------
  846.     FOR I=1 TO 8
  847.         PRINT GALAXY$(I,J);" ";
  848.     NEXT I
  849.     RETURN
  850.  
  851. 7290 REM-----------LIBRARY COMPUTER CODE BEGINS HERE -------
  852.     IF DAMAGE(8)<0 THEN \
  853.         PRINT DAM$(8);" DAMAGED" :\
  854.         GOTO 1990
  855. 7320    REM
  856.     INPUT "ENTER COMPUTER CODE: "; COMPUTER.CODE
  857.     IF COMPUTER.CODE<1 OR COMPUTER.CODE>6 THEN \
  858.         GOSUB 7450 :\
  859.         GOTO 7320
  860.     ON COMPUTER.CODE GOTO 7400, 7900, 8070, 8500, 8150, 7350
  861.     GOSUB 7450        REM PRINT WHAT'S AVAILABLE
  862.     GOTO 7320
  863.  
  864. 7350    GOSUB 9030
  865.     PRINT QUADRANT$ : PRINT
  866.     GOTO 1990
  867.  
  868. 7450 PRINT "FUNCTIONS AVAILABLE FROM LIBRARY-COMPUTER:"
  869.      PRINT "   1 - CUMULATIVE GALACTIC RECORD"
  870.      PRINT "   2 - STATUS REPORT"
  871.      PRINT "   3 - PHOTON TORPEDO DATA"
  872.      PRINT "   4 - STARBASE NAVIGATION DATA"
  873.      PRINT "   5 - DIRECTION/DISTANCE CALCULATOR"
  874.      PRINT "   6 - GALAXY 'REGION NAME' MAP"
  875.     RETURN
  876.  
  877. 7400 REM ------- CUMULATIVE GALACTIC RECORD CODE BEGINS.------
  878.     PRINT TAB(14);"T H E    G A L A X Y"
  879.     FOR X=1 TO 8
  880.         PRINT TAB(X*5+1); X;
  881.     NEXT X
  882.     PRINT " "
  883.     PRINT
  884.     FOR J=1 TO 8
  885.         PRINT J;
  886.         FOR I=1 TO 8
  887.         XXX=I*5
  888.         IF GMAP(I,J)=0 THEN 7410
  889.     IF GMAP(I,J)<100 THEN XXX=XXX+1
  890.     IF GMAP(I,J)<10 THEN XXX=XXX+1
  891. 7410    IF GMAP(I,J)<>0 THEN PRINT TAB(XXX); GMAP(I,J); \
  892.     ELSE PRINT TAB(XXX); "???";
  893.     NEXT I
  894.         PRINT
  895.     NEXT J
  896.      GOTO 1990
  897.  
  898. 7900 REM ---------- STATUS REPORT RTN ------------------
  899.     PRINT
  900.      PRINT TAB(15);"STATUS REPORT"
  901.      X$=""
  902.      IF TOT.KLINGONS=1 THEN GOTO 7940
  903.      X$="S"
  904. 7940 PRINT TOT.KLINGONS;" KLINGON"+X$+" LEFT"
  905.      PRINT "MISSION MUST BE COMPLETED IN ";(T0+T9)-T;" STARDATES"
  906.     IF TOT.BASES=0 THEN PRINT "NO STARBASES LEFT" : GOTO 7941
  907.     IF TOT.BASES=1 THEN PRINT "1 STARBASE LEFT" : GOTO 7941
  908.         PRINT TOT.BASES;" STARBASES LEFT"
  909. 7941    GOTO 1990
  910.  
  911. 8070 REM----------  TORPEDO DATA, BASE NAV, D/D CALCULATOR------
  912.      H8=0
  913.      FOR I=1 TO 3
  914.         IF KLING(I,3)<=0 THEN GOTO 8480
  915.          W1=KLING(I,1)
  916.          X=KLING(I,2)
  917. 8120     C1=SX
  918.          A=SY
  919.          GOTO 8220
  920. 8150     PRINT "DIRECTION/DISTANCE CALCULATOR:"
  921.          PRINT "  YOU ARE AT QUADRANT (";QX;QY;") SECTOR (";SX;SY;")"
  922.          PRINT "  PLEASE ENTER --->"
  923.          PRINT "  INITIAL COORDINATES (X,Y) ";
  924.          INPUT C1,A
  925.          PRINT "  FINAL COORDINATES (X,Y) ";
  926.          INPUT W1,X
  927. 8220     X=X-A
  928.          A=C1-W1
  929.          IF X<0 THEN GOTO 8350
  930.          IF A<0 THEN GOTO 8410
  931.          IF X>0 THEN GOTO 8280
  932.          IF A=0 THEN GOTO 8370
  933. 8280     C1=1
  934. 8290     IF ABS(A)<=ABS(X) THEN GOTO 8330
  935.          V5=C1+(((ABS(A)-ABS(X))+ABS(A))/ABS(A))
  936.          PRINT TAB(10);"DIRECTION = ";V5
  937.          GOTO 8460
  938. 8330     PRINT TAB(10);"DIRECTION = ";C1+(ABS(A)/ABS(X))
  939.          GOTO 8460
  940. 8350     IF A>0 THEN GOTO 8390
  941.          IF X=0 THEN GOTO 8410
  942. 8370     C1=5
  943.          GOTO 8290
  944. 8390     C1=3
  945.          GOTO 8420
  946. 8410     C1=7
  947. 8420     IF ABS(A)>=ABS(X) THEN GOTO 8450
  948.          PRINT TAB(10);"DIRECTION = ";C1+((ABS(X)-ABS(A))+ABS(X))/ABS(X)
  949.          GOTO 8460
  950. 8450     PRINT TAB(10);"DIRECTION = ";C1+(ABS(X)/ABS(A))
  951. 8460     PRINT TAB(10);"DISTANCE  = ";SQR(X*X+A*A)
  952.          IF H8=1 THEN GOTO 1990
  953. 8480 NEXT I
  954.      GOTO 1990
  955. 8500 IF BASES<>0 THEN GOTO 8530
  956.      PRINT "MISSION ADVISORY:    'SENSORS SHOW NO STARBASES IN THIS QUADRANT.'"
  957.      GOTO 1990
  958. 8530 PRINT "FROM ENTERPRISE TO STARBASE:"
  959.      W1=BX
  960.      X=BY
  961.      GOTO 8120
  962.  
  963. 9030    REM-----FIND QUADRANT NAME$--------------------------
  964.     QUAD=(QX*QY)/4
  965.     QUAD.INT=INT(QUAD)
  966.     QUAD.FRAC=QUAD-QUAD.INT
  967.     QUAD.REM=QUAD.FRAC*4+1
  968.     QUADRANT$=QUAD.NAME$(QUAD)+SEGMENT$(QUAD.REM)
  969.     RETURN
  970.  
  971. 9250 STOP
  972.  
  973. 999999 REM-----PRINT THE INSTRUCTIONS---------------------
  974.     PRINT
  975.     INST$="TREKINST"
  976.     IF END #1 THEN 9300
  977.     FILE INST$
  978.     FOR X=1 TO 10 STEP 0
  979.         READ #1;INSTRUC$
  980.         PRINT INSTRUC$
  981.         Q=Q+1
  982.         IF Q=23 THEN \
  983.             Q=0 :\
  984.             PRINT "   TYPE 'GO' TO CONTINUE" :\
  985.             INPUT RAND$
  986.     NEXT X
  987. 9300    REM
  988.     PRINT
  989.     PRINT "    TYPE 'GO' TO CONTINUE"
  990.     INPUT RAND$
  991.     CLOSE (1)
  992.     RETURN
  993.  
  994. 9500    REM-------FIND EMPTY SECTOR-------------------------
  995.     SX=FN8
  996.     SY=FN8
  997.     IF GALAXY$(SX,SY)=EMPTY$ THEN \
  998.         RETURN
  999.     GOTO 9500
  1000.