home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpmug / cpmug020.ark / STARTREK.BAS < prev    next >
BASIC Source File  |  1985-02-10  |  27KB  |  1,004 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!
  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 US TO SMITHEREENS."
  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.      TEMP.EX=EX
  357.      TEMP.EY=EY
  358.      DELTA.Y=C(T.CRSE,2)+(C(T.CRSE+1,2)-C(T.CRSE,2))*(COURSE-INT(COURSE))
  359.      OLD.QX=QX
  360.      OLD.QY=QY
  361.      FOR I=1 TO E.NEEDED
  362.           X=X+DELTA.X
  363.           Y=Y+DELTA.Y
  364.         EX=FNROUND(X)
  365.         EY=FNROUND(Y)
  366.         IF EX<1 OR \
  367.            EX>8 OR \
  368.            EY<1 OR \
  369.            EY>8 THEN \
  370.             GOTO 3500
  371.         IF GALAXY$(EX,EY)=EMPTY$ THEN \
  372.             LAST.X=0 :\
  373.             LAST.Y=0 :\
  374.             GOTO 3360
  375.         OBJECT$=GALAXY$(EX,EY)
  376.         IF OBJECT$=KLINGON$ THEN OBJECT$="KLINGON"
  377.         IF OBJECT$=STAR$ THEN OBJECT$="STAR"
  378.         IF OBJECT$=BASE$ THEN OBJECT$="STARBASE"
  379.         IF OBJECT$=CRUD$ THEN OBJECT$="SPACECRUD"
  380.         EX=FNROUND(X-DELTA.X)
  381.         EY=FNROUND(Y-DELTA.Y)
  382.         PRINT "LT SULU:";
  383.         PRINT " EMERGENCY STOP!"
  384.         PRINT
  385.         PRINT "MISSION ADVISORY: ";
  386.         PRINT "WE ALMOST RAMMED RIGHT INTO THAT ";OBJECT$;" AT ";
  387.         PRINT "WARP ";WARP;"!!"
  388.         GOOF3=GOOF3+.1
  389.         IF RND+GOOF3>.75 THEN \
  390.             PRINT "CAPTAIN ";CAPTAIN$;", DON'T YOU THINK IT'S TIME" :\
  391.             PRINT "YOU RECONSIDER THAT DESK JOB AT FEDERATION HQ?"
  392.           GOTO 3370
  393. 3360 NEXT I
  394. 3370    REM------PUT THE ENTERPRISE IN ITS NEW PLACE-----
  395.     GALAXY$(EX,EY)=ENTERPRISE$
  396.     GOSUB 3910        REM SUBTRACT THE ENERGY NEEDED
  397.      T8=1
  398.     IF WARP<1 THEN \
  399.         T8=.1*INT(10*WARP)
  400.     T=T+T8
  401.      IF T>T0+T9 THEN GOTO 6220
  402.      GOTO 1980        REM SEE IF DOCKED THEN GET COMMAND
  403.  
  404. 3500    REM-----EXCEEDED QUADRANT LIMITS----------------
  405.      X=8*QX+TEMP.EX+E.NEEDED*DELTA.X
  406.      Y=8*QY+TEMP.EY+E.NEEDED*DELTA.Y
  407.      QX=INT(X/8)
  408.      QY=INT(Y/8)
  409.      EX=INT(X-QX*8)
  410.      EY=INT(Y-QY*8)
  411.     PERIMETER.FLAG=0
  412.     IF EX=0 THEN \
  413.         QX=QX-1 :\
  414.         EX=8
  415.     IF EY=0 THEN \
  416.         QY=QY-1 :\
  417.         EY=8
  418.     IF QX<1 THEN \
  419.         QX=1:EX=1 :\
  420.         PERIMETER.FLAG=1
  421.     IF QX>8 THEN \
  422.         QX=8:EX=8 :\
  423.         PERIMETER.FLAG=1
  424.     IF QY<1 THEN \
  425.         QY=1:EY=1 :\
  426.         PERIMETER.FLAG=1
  427.     IF QY>8 THEN \
  428.         QY=8:EY=8 :\
  429.         PERIMETER.FLAG=1
  430.     IF PERIMETER.FLAG=0 THEN \
  431.         GOTO 3860
  432.      PRINT "LT. UHURA:"
  433.     PRINT "STARFLEET COMMAND REPORTS:"
  434.     PRINT "'PERMISSION TO CROSS GALACTIC PERIMETER"
  435.      PRINT "IS ";BLNK$;"*DENIED*";NORM$;".  SHUT DOWN YOUR ENGINES."
  436.      PRINT "ENGINEERING OFCR SCOTV:";
  437.     PRINT "WARP ENGINES SHUT DOWN"
  438.      PRINT "AT SECTOR ";EX;EY;" OF QUADRANT ";QX;QY;"."
  439.      IF T>T0+T9 THEN GOTO 6220
  440. 3860    REM
  441.     IF QX=OLD.QX AND QY=OLD.QY THEN \
  442.         GOTO 3370
  443.      T=T+1
  444.      GOSUB 3910            REM SUBTRACT THE NEEDED ENERGY
  445.      GOTO 1320            REM ANNOUNCE THE NEW QUADRANT
  446.  
  447. 3910     REM---------> MANEUVER ENERGY S/R
  448.     ENERGY=ENERGY-E.NEEDED-10
  449.      IF ENERGY>=0 THEN GOTO 3980
  450.      PRINT "SHIELD CONTROL SUPPLIED ENERGY TO COMPLETE THE MANEUVER."
  451.       IF RND>.6 THEN GOTO 3911
  452.     PRINT "MISSION ADVISORY: ";
  453.     PRINT "CAPTAIN ";CAPTAIN$;
  454.      IF RND>.5 THEN PRINT " THAT WAS EXTREMELY CLOSE EVEN FOR THE ENTERPRISE" :\
  455.      ELSE \
  456.      PRINT " WE'RE GOING TO NEED THOSE SHIELDS BEFORE LONG, YOU KNOW.'"
  457. 3911 REM
  458.      SHIELDS=SHIELDS+ENERGY
  459.      ENERGY=0
  460.     IF SHIELDS<0 THEN \
  461.         SHIELDS=0
  462. 3980 RETURN
  463.  
  464. 4000 REM-----------> LONG RANGE SENSOR SCAN CODE
  465.     IF DAMAGE(3)<0 THEN \
  466.         PRINT DAM$(3);" DAMAGED" :\
  467.         GOTO 1990
  468. 4030 PRINT DAM$(3);" SCAN FOR QUADRANT ";QX;QY
  469.     PRINT
  470.     FOR J=QY-1 TO QY+1
  471.         Q=0
  472.         FOR I=QX-1 TO QX+1
  473.             Q=Q+1
  474.             IF I<1 OR I>8 OR J<1 OR J>8 THEN \
  475.                 PRINT.QUAD(Q)=0 :\
  476.             ELSE \
  477.                 PRINT.QUAD(Q)=GALAXY(I,J) :\
  478.                 GMAP(I,J)=GALAXY(I,J)
  479.         NEXT I
  480.         FOR Q=1 TO 3
  481.     IF PRINT.QUAD(Q)=0 THEN 4100
  482.     YYY=Q*6
  483.     IF PRINT.QUAD(Q)<100 THEN YYY=YYY+1
  484.     IF PRINT.QUAD(Q)<10 THEN YYY=YYY+1
  485.             PRINT ;TAB(YYY);PRINT.QUAD(Q);
  486. 4040        NEXT Q
  487.     PRINT : PRINT
  488.     NEXT J
  489.     PRINT
  490.     GOTO 1990
  491. 4100            PRINT ;TAB(Q*6);"***";
  492.     GOTO 4040
  493.  
  494. 4260 REM----------> PHASER CONTROL BEGINS HERE
  495.     SX=EX
  496.     SY=EY
  497.     IF KLINGONS=0 THEN \
  498.         PRINT "MISSION ADVISORY: "; :\
  499.         PRINT "SENSORS SHOW NO ENEMY SHIPS IN THIS QUADRANT" :\
  500.         GOTO 1990
  501.     IF DAMAGE(4)<0 THEN \
  502.         PRINT DAM$(4);" DAMAGED" :\
  503.         GOTO 1990
  504.     IF DAMAGE(8)<0 THEN \
  505.         PRINT DAM$(8);" MALFUNCTION REDUCES ACCURACY" 
  506. 4350 PRINT "PHASERS LOCKED ON TARGET; "
  507. 4360 PRINT "ENERGY AVAILABLE = ";ENERGY
  508.      PRINT "NUMBER OF UNITS TO FIRE: ";
  509.      INPUT RATE.OF.FIRE
  510.      IF RATE.OF.FIRE<=0 THEN GOTO 1990
  511.      IF RATE.OF.FIRE>ENERGY THEN GOTO 4360
  512.      ENERGY=ENERGY-RATE.OF.FIRE
  513.      GOSUB 6000            REM   KLINGONS SHOOT
  514.     IF DAMAGE(7)<0 OR DAMAGE(4)<1 THEN \
  515.         DRAIN=RND :\
  516.         RATE.OF.FIRE=RATE.OF.FIRE*DRAIN :\
  517.         DRAIN=INT((1-DRAIN)*100) :\
  518.         PRINT "MISSION ADVISORY: "; :\
  519.         PRINT DRAIN;"% OF PHASER POWER WAS DIVERTED TO DAMAGE CONTROL"
  520. 4450 TOTAL.HIT=INT(RATE.OF.FIRE/KLINGONS)
  521.      FOR I=1 TO 3
  522.          IF KLING(I,3)<=0 THEN GOTO 4670
  523.          HIT=INT((TOTAL.HIT/FND)*(RND+1.5))
  524.     IF HIT<.15*KLING(I,3) THEN \
  525.         PRINT "SENSORS SHOW NO DAMAGE "; :\
  526.         PRINT "TO ENEMY AT ";KLING(I,1);KLING(I,2) :\
  527.         GOTO 4670
  528. 4530     KLING(I,3)=KLING(I,3)-HIT*(RND+.3)
  529.          PRINT HIT;" UNIT HIT ON KLINGON AT SECTOR ";KLING(I,1);KLING(I,2)
  530.          IF KLING(I,3)<=0 THEN GOTO 4580
  531.     IF RND>.7 THEN \
  532.         PRINT "SENSORS SHOW ";KLING(I,3);" UNITS REMAINING" 
  533.     GOTO 4670
  534. 4580     PRINT BELL$; BLNK$;" << KLINGON DESTROYED >>"
  535.          KLINGONS=KLINGONS-1
  536.          TOT.KLINGONS=TOT.KLINGONS-1
  537.         GALAXY$(KLING(I,1),KLING(I,2))=EMPTY$
  538.          GALAXY(QX,QY)=KLINGONS*100+BASES*10+STARS
  539.     IF GMAP(QX,QY)<>0 THEN \
  540.         GMAP(QX,QY)=GALAXY(QX,QY)
  541.          IF TOT.KLINGONS<=0 THEN GOTO 6370
  542. 4670 NEXT I
  543.      GOTO 1990
  544.  
  545. 4700 REM---------> PHOTON TORPEDO CODE BEGINS
  546.     GOSUB 6000        REM KLINGONS SHOOT
  547.     SX=EX
  548.     SY=EY
  549.      IF DAMAGE(5)<0 THEN \
  550.         PRINT DAM$(5);" DAMAGED" :\
  551.              GOTO 1990
  552.     IF TORPS<=0 THEN \
  553.         PRINT "ALL PHOTON TORPEDOES EXPENDED" :\
  554.         GOTO 1990
  555. 4760 PRINT "TORPEDO COURSE (1-9) ";
  556.      INPUT COURSE
  557.     IF COURSE<1 OR COURSE>9 THEN \
  558.         PRINT "ENSIGN CHEKOV:"; :\
  559.         PRINT "INCORRECT COURSE DATA, SIR!" :\
  560.         ON FNROUND(RND)+1 GOTO 1990, 4760
  561.     T.CRSE=INT(COURSE)
  562. 4850 DELTA.X=C(T.CRSE,1)+(C(T.CRSE+1,1)-C(T.CRSE,1))*(COURSE-INT(COURSE))
  563.      DELTA.Y=C(T.CRSE,2)+(C(T.CRSE+1,2)-C(T.CRSE,2))*(COURSE-INT(COURSE))
  564.      ENERGY=ENERGY-2
  565.      X=SX
  566.      Y=SY
  567.      TORPS=TORPS-1
  568.      PRINT "TORPEDO TRACK---> ";
  569. 4920 X=X+DELTA.X
  570.      Y=Y+DELTA.Y
  571.     ROUND.X=FNROUND(X)
  572.     ROUND.Y=FNROUND(Y)
  573.     IF ROUND.X<1 OR \
  574.        ROUND.X>8 OR \
  575.        ROUND.Y<1 OR \
  576.        ROUND.Y>8 THEN \
  577.         PRINT "TORPEDO MISSED" :\
  578.         GOTO 5500
  579.      PRINT " ";ROUND.X;ROUND.Y;
  580.     IF GALAXY$(ROUND.X,ROUND.Y)=EMPTY$ THEN \
  581.         GOTO 4920
  582.     IF GALAXY$(ROUND.X,ROUND.Y)=KLINGON$ THEN \
  583.         GOTO 5100
  584.     IF GALAXY$(ROUND.X,ROUND.Y)=STAR$ THEN \
  585.         GOTO 5210
  586.     IF GALAXY$(ROUND.X,ROUND.Y)=BASE$ THEN \
  587.         GOTO 5280
  588.     IF GALAXY$(ROUND.X,ROUND.Y)=CRUD$ THEN \
  589.         GOTO 4920
  590.     GOTO 4920        REM DEFENSIVE PROGRAMMING
  591.  
  592. 5100    REM-----HIT A KLINGON--------------------------
  593.      PRINT BELL$;BLNK$;"<< KLINGON DESTROYED >>"
  594.     ON FN8 GOTO 5177, 5177, 5177, 5177, 5177, 5176, 5178, 5178
  595. 5176    REM
  596.     PRINT "EXCELLENT WORK WITH THE TORPEDOES, CAPTAIN."
  597.     GOTO 5177
  598. 5178    REM
  599.     PRINT "MISSION ADVISORY: ";
  600.     PRINT "VERY GOOD SHOOTING, CAPTAIN ";CAPTAIN$
  601. 5177    REM
  602.     GALAXY$(X,Y)=EMPTY$
  603.      KLINGONS=KLINGONS-1
  604.      TOT.KLINGONS=TOT.KLINGONS-1
  605.      IF TOT.KLINGONS<=0 THEN GOTO 6370
  606.      FOR I=1 TO 3
  607.          IF ROUND.X<>KLING(I,1) THEN GOTO 5180
  608.          IF ROUND.Y=KLING(I,2) THEN GOTO 5190
  609. 5180 NEXT I
  610. 5190 KLING(I,3)=0
  611.      GOTO 5430
  612. 5210    REM-----HIT A STAR------------------------
  613.      PRINT "STAR AT ";ROUND.X;ROUND.Y;" ABSORBED TORPEDO ENERGY"
  614.      IF RND>.7 THEN GOTO 5214
  615.     PRINT "COMMAND INQUIRY: ";
  616.     PRINT "WAS IT YOUR INTENTION TO WASTE A VALUABLE"
  617.     PRINT "TORPEDO ON THAT STAR, CAPTAIN?"
  618. 5214 REM
  619.      GOTO 5500
  620. 5280    REM------HIT A STARBASE-------------------
  621.      PRINT BELL$;IVB$;">> STARBASE DESTROYED <<"
  622.      BASES=BASES-1
  623.      TOT.BASES=TOT.BASES-1
  624.     GALAXY$(X,Y)=EMPTY$
  625.       IF TOT.BASES>0 THEN GOTO 5400
  626.     PRINT "MISSION ADVISORY: ";
  627.     PRINT "CAPTAIN ";CAPTAIN$;" I'M AFRAID THAT YOU HAVE BLOWN IT"
  628.      GOTO 6270
  629. 5400 PRINT "STARFLEET COMMAND IS REVIEWING YOUR RECORD TO CONSIDER"
  630.      PRINT "A GENERAL COURT-MARTIAL."
  631.      DOCKED=0
  632. 5430    REM-------END OF ENTERPRISE SHOOTING-------
  633.      GALAXY(QX,QY)=KLINGONS*100+BASES*10+STARS
  634.     IF GMAP(QX,QY)<>0 THEN \
  635.         GMAP(QX,QY)=GALAXY(QX,QY)
  636. 5500    REM
  637.     IF RND>.7 THEN \
  638.         GOSUB 6000    REM KLINGONS MAY SHOOT AGAIN
  639.      GOTO 1990
  640.  
  641. 5530 REM---------SHIELD CONTROL STARTS HERE-----------------
  642.     IF DAMAGE(7)<0 THEN \
  643.         PRINT DAM$(7);" DAMAGED" :\
  644.         GOTO 1990
  645. 5560 PRINT "ENERGY AVAILABLE=";ENERGY+SHIELDS
  646.     PRINT "DIVERT TO SHIELDS ";
  647.      INPUT DIVERTED
  648.     IF DIVERTED<0 OR DIVERTED=SHIELDS THEN \
  649.         PRINT "SHIELDS UNCHANGED" :\
  650.         GOTO 1990
  651.     IF DIVERTED>SHIELDS+ENERGY THEN \
  652.         PRINT "CAN'T DIVERT" :\
  653.         GOTO 5560
  654.     ENERGY=ENERGY+SHIELDS-DIVERTED
  655.     SHIELDS=DIVERTED
  656.      PRINT "DEFLECTOR CONTROL ROOM REPORT: ";
  657.     PRINT "SHIELDS NOW AT ";SHIELDS
  658.     GOTO 1990
  659.  
  660. 5690 REM------------DAMAGE CONTROL STARTS HERE----------------
  661.     IF DOCKED=1 THEN GOTO 5710
  662.     IF DAMAGE(6)<0 THEN \
  663.         PRINT DAM$(6);" DAMAGED" :\
  664.         GOTO 1990
  665.     GOSUB 5910        REM PRINT DAMAGE RPT
  666.     GOTO 1990
  667. 5710    REM----------D O C K E D------------------------------
  668.      D3=0
  669.      FOR I=1 TO 8
  670.         IF DAMAGE(I)>=.7 THEN GOTO 5760
  671.         D3=D3+.5
  672. 5760 NEXT I
  673.      IF D3=0 THEN GOTO 1990
  674.      D3=D3+(.5*RND)
  675.     IF D3>1 THEN \
  676.         D3=RND
  677. 5810    REM
  678.     PRINT "TECHS STANDING BY TO REPAIR THE SHIP."
  679.     PRINT "ESTIMATED TIME: ";D3;"STARDATES"
  680.     PRINT "AUTHORIZE (Y/N) ";
  681.     INPUT A$
  682.     IF LEFT$(A$,1)<>"Y" THEN GOTO 1990
  683.      FOR I=1 TO 8
  684. 5815        REM
  685.         IF DAMAGE(I)<=.7 THEN \
  686.             DAMAGE(I)=DAMAGE(I)+1 :\
  687.             GOTO 5815
  688.      NEXT I
  689.      T=T+D3+.1
  690.     GOSUB 5910        REM PRINT DAMAGE RPT
  691.     GOTO 1990
  692.  
  693. 5910    REM-----PRINT DAMAGE RPT---------------------
  694.     PRINT
  695.     PRINT "   DEVICE";TAB(27);"CONDITION"
  696.     FOR X=1 TO 8
  697.         PRINT DAM$(X);TAB(30);DAMAGE(X)
  698.     NEXT X
  699.     PRINT
  700.     RETURN
  701.  
  702. 6000 REM-------------KLINGONS SHOOTING ROUTINE------------
  703.     SX=EX
  704.     SY=EY
  705.      IF KLINGONS<=0 THEN GOTO 6210
  706.     IF DOCKED=1 THEN \
  707.         PRINT "STARBASE SHIELDS PROTECT THE ENTERPRISE" :\
  708.         RETURN
  709.     FOR I=1 TO 3
  710.        IF KLING(I,3)<=0 THEN GOTO 6200
  711.        HIT=INT((KLING(I,3)/FND)*(2+RND))
  712.        SHIELDS=SHIELDS-INT(HIT*RND)
  713.        PRINT BELL$;"----> ";HIT;" UNIT HIT ON ENTERPRISE FROM SECTOR ";
  714.        PRINT KLING(I,1);KLING(I,2)
  715.     GOOF4=GOOF4+.1
  716.     IF RND+GOOF4>.7 THEN \
  717.         PRINT "SHIELDS DOWN TO ";SHIELDS;"UNITS"
  718.            IF HIT<20 OR \
  719.        HIT/SHIELDS<.02 THEN \
  720.         GOTO 6200
  721.     GOSUB 6100        REM DAMAGE RTN
  722.     IF SHIELDS<0 THEN \
  723.         GOSUB 6100
  724. 6200    REM
  725.     NEXT I
  726. 6210    RETURN
  727.  
  728. 6100    REM------DAMAGE TO ENTERPRISE--------------------------
  729.     TEMP=SHIELDS
  730.     IF SHIELDS<=0 THEN TEMP=1
  731.     NEW.DAMAGE=HIT/TEMP+.5*RND
  732.     NEW.DAMAGE=INT(NEW.DAMAGE*10)/10
  733.     R1=FN8
  734.     DAMAGE(R1)=DAMAGE(R1)-NEW.DAMAGE
  735.     PRINT "DAMAGE CONTROL REPORTS"
  736.     PRINT DAM$(R1);TAB(32);" DAMAGED"
  737.     RETURN
  738.  
  739. 6220 PRINT "IT IS STARDATE ";T
  740.      GOTO 6270
  741. 6240 PRINT
  742.      PRINT "THE ENTERPRISE HAS BEEN DESTROYED."
  743.      PRINT "  THE FEDERATION WILL BE CONQUERED."
  744. 6260 PRINT "IT IS STARDATE ";T
  745. 6270 PRINT "THERE WERE ";TOT.KLINGONS;" KLINGON BATTLE CRUISERS LEFT AT THE"
  746.      PRINT "   END OF YOUR MISSION."
  747. 6290 PRINT
  748.      PRINT
  749.      PRINT "THE FEDERATION IS IN NEED OF A NEW STARSHIP COMMANDER"
  750.      PRINT "FOR A SIMILAR MISSION -- IF THERE IS A VOLUNTEER,"
  751.      PRINT "LET HIM STEP FORWARD AND ENTER 'AYE'.";
  752.      INPUT A$
  753.     IF LEFT$(A$,1)="A" THEN 240
  754.     PRINT "STARBASE TO ENTERPRISE:  ";
  755.     PRINT "WE ARE TERMINATING COMMUNICATIONS"
  756.     STOP
  757. 6370 PRINT "CONGRATULATIONS, CAPTAIN!  THE LAST KLINGON BATTLE CRUISER"
  758.      PRINT "MENACING THE FEDERATION HAS BEEN DESTROYED."
  759.      PRINT
  760.      PRINT "YOUR EFFICIENCY RATING IS ";(K7/(T-T0))*1000
  761.      PRINT 
  762.     PRINT "MISSION ADVISORY: ";
  763.     PRINT "CONFIDENTIALLY SPEAKING, CAPTAIN ";CAPTAIN$;", I BELIEVE"
  764.      PRINT "THAT THE PERFORMANCE YOU HAVE JUST GIVEN ON THE "
  765.      PRINT "FIELD OF BATTLE HAS BEEN SO COMMENDABLE AS TO VIRTUALLY"
  766.      PRINT "ASSURE THAT YOUR NAME WILL COME UP ON THE FEDERATION"
  767.      PRINT "NAVY PROMOTION LIST QUITE SOON.  EVEN THOUGH I AM AN"
  768.      PRINT "UNEMOTIONAL VULCAN, I WAS PROFOUNDLY STIRRED BY YOUR"
  769.      PRINT "DEMONSTRATION OF SKILL AND JUDGMENT'"
  770.      PRINT
  771.      GOTO 6290
  772.  
  773. 6430 REM------------SHORT RANGE SENSOR AND STARTUP SUBRTN.----------
  774.     SX=EX
  775.     SY=EY
  776.      FOR J=SY-1 TO SY+1
  777.          FOR I=SX-1 TO SX+1
  778.         IF I<1 OR I>8 OR \
  779.            J<1 OR J>8 THEN \
  780.             GOTO 6540
  781.         IF GALAXY$(I,J)=BASE$ THEN \
  782.             GOTO 6580
  783. 6540     NEXT I
  784.      NEXT J
  785.      DOCKED=0
  786.      GOTO 6650
  787. 6580 DOCKED=1
  788.      CONDITION$="DOCKED"
  789.     IF LAST.X=EX AND LAST.Y=EY THEN \
  790.         GOTO 6720
  791.     LAST.X=EX
  792.     LAST.Y=EY
  793.     TEMP=ENERGY.NORMAL-333+100*FN8
  794.     IF TEMP>ENERGY THEN \
  795.         ENERGY=TEMP
  796.     TEMP=TORPS.NORMAL-3+FN8
  797.     IF TEMP>TORPS THEN \
  798.         TORPS=TEMP
  799.     PRINT "MISSION ADVISORY: ";
  800.     PRINT "CAPTAIN ";CAPTAIN$;":"
  801.     PRINT "WE HAVE DROPPED OUR SHIELDS FOR DOCKING"
  802.     PRINT "WE ARE RELOADING ";TORPS;" TORPEDOES"
  803.     PRINT "OUR ENERGY IS BEING REPLENISHED TO ";ENERGY;" UNITS"
  804.      SHIELDS=0
  805.      GOTO 6720
  806. 6650    REM-----GET CONDITION CODE-----------------
  807.     CONDITION$="GREEN"
  808.     IF ENERGY<ENERGY.NORMAL/10 THEN \
  809.         CONDITION$="YELLOW"
  810.     IF KLINGONS=1 THEN \
  811.         CONDITION$="ORANGE"
  812.     IF KLINGONS>1 THEN \
  813.         CONDITION$="RED !! <---"
  814. 6720    REM-----SENSOR OK?-----------------
  815.     IF DAMAGE(2)<0 THEN \
  816.         PRINT DAM$(2);" DAMAGED !! <---" :\
  817.         RETURN
  818. 6770    REM----------------------------
  819.      PRINT DASH$
  820.     J=1
  821.     GOSUB 6800
  822.     PRINT " "
  823.     J=2
  824.     GOSUB 6800
  825.     PRINT TAB(25);"STARDATE";TAB(50);T
  826.     J=3
  827.     GOSUB 6800
  828.     PRINT TAB(25);"CONDITION";TAB(50);CONDITION$
  829.     J=4
  830.     GOSUB 6800
  831.     PRINT TAB(25);"QUADRANT";TAB(50);QX;QY
  832.     J=5
  833.     GOSUB 6800
  834.     PRINT TAB(25);"SECTOR";TAB(50);EX;EY
  835.     J=6
  836.     GOSUB 6800
  837.     PRINT TAB(25);"TOTAL ENERGY";TAB(50);ENERGY+SHIELDS
  838.     J=7
  839.     GOSUB 6800
  840.     PRINT TAB(25);"PHOTON TORPEDOES";TAB(50);TORPS
  841.     J=8
  842.     GOSUB 6800
  843.     PRINT TAB(25);"SHIELDS";TAB(50);SHIELDS
  844.      PRINT DASH$
  845. 7270 RETURN
  846.  
  847. 6800    REM-------PRINT A LINE OF GALAXY------
  848.     FOR I=1 TO 8
  849.         PRINT GALAXY$(I,J);" ";
  850.     NEXT I
  851.     RETURN
  852.  
  853. 7290 REM-----------LIBRARY COMPUTER CODE BEGINS HERE -------
  854.     IF DAMAGE(8)<0 THEN \
  855.         PRINT DAM$(8);" DAMAGED" :\
  856.         GOTO 1990
  857. 7320    REM
  858.     INPUT "ENTER COMPUTER CODE: "; COMPUTER.CODE
  859.     IF COMPUTER.CODE<1 OR COMPUTER.CODE>6 THEN \
  860.         GOSUB 7450 :\
  861.         GOTO 7320
  862.     ON COMPUTER.CODE GOTO 7400, 7900, 8070, 8500, 8150, 7350
  863.     GOSUB 7450        REM PRINT WHAT'S AVAILABLE
  864.     GOTO 7320
  865.  
  866. 7350    GOSUB 9030
  867.     PRINT QUADRANT$ : PRINT
  868.     GOTO 1990
  869.  
  870. 7450 PRINT "FUNCTIONS AVAILABLE FROM LIBRARY-COMPUTER:"
  871.      PRINT "   1 - CUMULATIVE GALACTIC RECORD"
  872.      PRINT "   2 - STATUS REPORT"
  873.      PRINT "   3 - PHOTON TORPEDO DATA"
  874.      PRINT "   4 - STARBASE NAVIGATION DATA"
  875.      PRINT "   5 - DIRECTION/DISTANCE CALCULATOR"
  876.      PRINT "   6 - GALAXY 'REGION NAME' MAP"
  877.     RETURN
  878.  
  879. 7400 REM ------- CUMULATIVE GALACTIC RECORD CODE BEGINS.------
  880.     PRINT TAB(14);"T H E   G A L A X Y"
  881.     FOR X=1 TO 8
  882.         PRINT TAB(X*5+1); X;
  883.     NEXT X
  884.     PRINT " "
  885.     PRINT
  886.     FOR J=1 TO 8
  887.         PRINT J;
  888.         FOR I=1 TO 8
  889.         XXX=I*5
  890.         IF GMAP(I,J)=0 THEN 7410
  891.     IF GMAP(I,J)<100 THEN XXX=XXX+1
  892.     IF GMAP(I,J)<10 THEN XXX=XXX+1
  893. 7410    IF GMAP(I,J)<>0 THEN PRINT TAB(XXX); GMAP(I,J); \
  894.     ELSE PRINT TAB(XXX); "???";
  895.     NEXT I
  896.         PRINT
  897.     NEXT J
  898.      GOTO 1990
  899.  
  900. 7900 REM ---------- STATUS REPORT RTN ------------------
  901.     PRINT
  902.      PRINT TAB(15);"STATUS REPORT"
  903.      X$=""
  904.      IF TOT.KLINGONS=1 THEN GOTO 7940
  905.      X$="S"
  906. 7940 PRINT TOT.KLINGONS;" KLINGON"+X$+" LEFT"
  907.      PRINT "MISSION MUST BE COMPLETED IN ";(T0+T9)-T;" STARDATES"
  908.     IF TOT.BASES=0 THEN PRINT "NO STARBASES LEFT" : GOTO 7941
  909.     IF TOT.BASES=1 THEN PRINT "1 STARBASE LEFT" : GOTO 7941
  910.         PRINT TOT.BASES;" STARBASES LEFT"
  911. 7941    GOTO 1990
  912.  
  913. 8070 REM----------  TORPEDO DATA, BASE NAV, D/D CALCULATOR------
  914.      H8=0
  915.      FOR I=1 TO 3
  916.         IF KLING(I,3)<=0 THEN GOTO 8480
  917.          W1=KLING(I,1)
  918.          X=KLING(I,2)
  919. 8120     C1=SX
  920.          A=SY
  921.          GOTO 8220
  922. 8150     PRINT "DIRECTION/DISTANCE CALCULATOR:"
  923.          PRINT "  YOU ARE AT QUADRANT (";QX;QY;") SECTOR (";SX;SY;")"
  924.          PRINT "  PLEASE ENTER --->"
  925.          PRINT "  INITIAL COORDINATES (X,Y) ";
  926.          INPUT C1,A
  927.          PRINT "  FINAL COORDINATES (X,Y) ";
  928.          INPUT W1,X
  929. 8220     X=X-A
  930.          A=C1-W1
  931.          IF X<0 THEN GOTO 8350
  932.          IF A<0 THEN GOTO 8410
  933.          IF X>0 THEN GOTO 8280
  934.          IF A=0 THEN GOTO 8370
  935. 8280     C1=1
  936. 8290     IF ABS(A)<=ABS(X) THEN GOTO 8330
  937.          V5=C1+(((ABS(A)-ABS(X))+ABS(A))/ABS(A))
  938.          PRINT TAB(10);"DIRECTION = ";V5
  939.          GOTO 8460
  940. 8330     PRINT TAB(10);"DIRECTION = ";C1+(ABS(A)/ABS(X))
  941.          GOTO 8460
  942. 8350     IF A>0 THEN GOTO 8390
  943.          IF X=0 THEN GOTO 8410
  944. 8370     C1=5
  945.          GOTO 8290
  946. 8390     C1=3
  947.          GOTO 8420
  948. 8410     C1=7
  949. 8420     IF ABS(A)>=ABS(X) THEN GOTO 8450
  950.          PRINT TAB(10);"DIRECTION = ";C1+((ABS(X)-ABS(A))+ABS(X))/ABS(X)
  951.          GOTO 8460
  952. 8450     PRINT TAB(10);"DIRECTION = ";C1+(ABS(X)/ABS(A))
  953. 8460     PRINT TAB(10);"DISTANCE  = ";SQR(X*X+A*A)
  954.      PRINT TAB(10);"WARP      = ";
  955.      IF ABS(A)>ABS(X) THEN PRINT ABS(A) ELSE PRINT ABS(X)
  956.          IF H8=1 THEN GOTO 1990
  957. 8480 NEXT I
  958.      GOTO 1990
  959. 8500 IF BASES<>0 THEN GOTO 8530
  960.      PRINT "MISSION ADVISORY:    'SENSORS SHOW NO STARBASES IN THIS QUADRANT.'"
  961.      GOTO 1990
  962. 8530 PRINT "FROM ENTERPRISE TO STARBASE:"
  963.      W1=BX
  964.      X=BY
  965.      GOTO 8120
  966.  
  967. 9030    REM-----FIND QUADRANT NAME$--------------------------
  968.     QUAD=(QX*QY)/4
  969.     QUAD.INT=INT(QUAD)
  970.     QUAD.FRAC=QUAD-QUAD.INT
  971.     QUAD.REM=QUAD.FRAC*4+1
  972.     QUADRANT$=QUAD.NAME$(QUAD)+SEGMENT$(QUAD.REM)
  973.     RETURN
  974.  
  975. 9250 STOP
  976.  
  977. 999999 REM-----PRINT THE INSTRUCTIONS---------------------
  978.     PRINT
  979.     INST$="TREKINST"
  980.     IF END #1 THEN 9300
  981.     FILE INST$
  982.     FOR X=1 TO 10 STEP 0
  983.         READ #1;INSTRUC$
  984.         PRINT INSTRUC$
  985.         Q=Q+1
  986.         IF Q=23 THEN \
  987.             Q=0 :\
  988.             PRINT "   TYPE 'GO' TO CONTINUE" :\
  989.             INPUT RAND$
  990.     NEXT X
  991. 9300    REM
  992.     PRINT
  993.     PRINT "    TYPE 'GO' TO CONTINUE"
  994.     INPUT RAND$
  995.     CLOSE (1)
  996.     RETURN
  997.  
  998. 9500    REM-------FIND EMPTY SECTOR-------------------------
  999.     SX=FN8
  1000.     SY=FN8
  1001.     IF GALAXY$(SX,SY)=EMPTY$ THEN \
  1002.         RETURN
  1003.     GOTO 9500
  1004.