home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG020.ARK / STRTRK_1.BAS < prev    next >
BASIC Source File  |  1985-02-10  |  33KB  |  1,201 lines

  1.     REM---------------------------------------------------------
  2.     REM         S  T  A  R  T  R  E  K
  3.     REM---------------------------------------------------------
  4.  
  5.     REM--->DISTRIBUTION/MODIFICATION HISTORY:
  6.     REM
  7.     REM    LATEST (1/18/78) REVISION BY:
  8.     REM
  9.     REM        JOHN R. PIERCE (408)-649-3896
  10.     REM
  11.     REM    ORIGINALLY OBTAINED FROM CP/M USERS GROUP
  12.     REM        VOLUME 3, NO SPECIFIC CREDITS
  13.     REM
  14.     REM
  15.     REM    TO BE COMPILED WITH BASIC-E VER 2.1,
  16.     REM      AND EXECUTED WITH RUN-E VER 2.3
  17.     REM
  18.  
  19.     MAX.BADDY = 4
  20.  
  21.     DIM GALAXY(8,8), GALAXY$(8,8), C(9,2), BADDY(MAX.BADDY,3), GMAP(8,8) 
  22.     DIM DAMAGE(8), QUAD.NAME$(16), SEGMENT$(4), DAM$(8)
  23.     DIM PRINT.QUAD(3)
  24.  
  25.         REM -- ADM-3a Control Sequences (or lack thereof)
  26.  
  27.     ESC$ = CHR$(27)
  28.     NULL$=CHR$(0)
  29.     BELL$=CHR$(7)
  30.     BLOT$="*"
  31.         REM -- ADM-3a don't have blinks and reverses, so NULL's
  32.     IVB$=""        REM   S/B Inverse Video w/ blink
  33.     BLNK$=""    REM   S/B Normal Video w/ Blink
  34.     UNDL$=""    REM   S/B Underline mode (or something equally spastic)
  35.     INVR$=""    REM   S/B Inverse Video, no blink
  36.     NORM$=""    REM   S/B Video Restore code (Normal Brightness, no blink)
  37.  
  38.     EMPTY$="."
  39.     BASE$="B"
  40.     ENTERPRISE$="E"
  41.     STAR$="*"
  42.     CRUD$="?"
  43.     NUM.GAMES = 0
  44.     DASH$="------------------------"
  45.     PRINT
  46.     PRINT TAB(20);"S  T  A  R  T  R  E  K"
  47.     PRINT
  48. 240    PRINT
  49.     NUM.GAMES = NUM.GAMES + 1
  50.     IF NUM.GAMES > INT(RND*2)+2 THEN \
  51.         NUM.GAMES=0 :\
  52.         PRINT "What are you, some kind of Sado-masochist ??" :\
  53.         PRINT
  54.     INPUT "        Enter your name, Captain "; CAPTAIN$
  55.     PRINT
  56.     PRINT "Welcome aboard Captain ";CAPTAIN$
  57.     PRINT TAB(15);"Do you want instructions";
  58.     INPUT ANS$
  59.     RANDOMIZE
  60.     IF LEFT$(ANS$,1)="Y" OR LEFT$(ANS$,1) = "y" THEN GOSUB 999999
  61.  
  62.     REM - CLEAR ADM-3a'S SCREEN
  63.  
  64.     FOR I=1 TO 48 : PRINT CHR$(10); : NEXT
  65.     PRINT CHR$(30);
  66.  
  67.     PRINT "Mr. Spock: ";
  68.     PRINT "STAND BY"
  69.     LET T=INT(RND*20+20)*100
  70.     T0=T
  71.     T9=26+INT(RND*8+1)
  72.     FIRST.TIME.FLAG=1
  73.  
  74.     ON INT(RND^2*3)+1  GOTO 400, 410, 420
  75. 400        ENEMY$="Klingon"
  76.         ENEMYC$="KLINGON"
  77.         GOTO 500
  78. 410        ENEMY$="Romulan"
  79.         ENEMYC$="ROMULAN"
  80.         GOTO 500
  81. 420        ENEMY$="Tholian"
  82.         ENEMYC$="THOLIAN"
  83. 500    REM
  84.     BAD.GUY$=LEFT$(ENEMY$,1)
  85.  
  86.     DOCKED=0
  87.     ENERGY.NORMAL=3000
  88.     ENERGY=ENERGY.NORMAL
  89.     TORPS=10
  90.     TORPS.NORMAL=TORPS
  91.     SHIELD.NORMAL=200
  92.     SHIELDS=SHIELD.NORMAL * 2
  93.     FOR I=1 TO 8
  94.         FOR J=1 TO 8
  95.             GALAXY$(I,J)=EMPTY$
  96.         NEXT J
  97.     NEXT I
  98.     
  99.     REM-----------F U N C T I O N S---------------------
  100.     DEF FN8=INT(RND*8+1)
  101.     DEF FNROUND(D)=INT(D+.5)
  102.     DEF FND=SQR((ABS(BADDY(I,1)-SX))^2+(ABS(BADDY(I,2)-SY))^2)
  103.  
  104.     REM   ***  INITIALIZE ENTERPRISE'S POSITION
  105.  
  106.     QX=FN8
  107.     QY=FN8
  108.     EX=FN8
  109.     EY=FN8
  110.     SX=EX
  111.     SY=EY
  112.     C(3,1)=-1
  113.     C(2,1)=-1
  114.     C(4,1)=-1
  115.     C(4,2)=-1
  116.     C(5,2)=-1
  117.     C(6,2)=-1
  118.     C(1,2)=1
  119.     C(2,2)=1
  120.     C(6,1)=1
  121.     C(7,1)=1
  122.     C(8,1)=1
  123.     C(8,2)=1
  124.     C(9,2)=1
  125.     FOR I=1 TO 8
  126.         LET DAMAGE(I)=(INT(RND*30+1)/10)
  127.     NEXT I
  128.     DAM$(1)="Warp Engines"
  129.     DAM$(2)="Short Range Sensors"
  130.     DAM$(3)="Long Range Sensors"
  131.     DAM$(4)="Phasor Control"
  132.     DAM$(5)="Photon Torpedo Tubes"
  133.     DAM$(6)="Damage Control"
  134.     DAM$(7)="Shield Control"
  135.     DAM$(8)="Computer"
  136.  
  137.     QUAD.NAME$(01)="ANTARES"
  138.     QUAD.NAME$(02)="SIRIUS"
  139.     QUAD.NAME$(03)="RIGEL"
  140.     QUAD.NAME$(04)="DENEB"
  141.     QUAD.NAME$(05)="PROCYON"
  142.     QUAD.NAME$(06)="CAPELLA"
  143.     QUAD.NAME$(07)="VEGA"
  144.     QUAD.NAME$(08)="BETELGEUSE"
  145.     QUAD.NAME$(09)="CANOPUS"
  146.     QUAD.NAME$(10)="ALDEBARAN"
  147.     QUAD.NAME$(11)="ALTAIR"
  148.     QUAD.NAME$(12)="REGULUS"
  149.     QUAD.NAME$(13)="SAGITTARIUS"
  150.     QUAD.NAME$(14)="ARCTURUS"
  151.     QUAD.NAME$(15)="POLLUX"
  152.     QUAD.NAME$(16)="SPICA"
  153.     SEGMENT$(1)=" I"
  154.     SEGMENT$(2)=" II"
  155.     SEGMENT$(3)=" III"
  156.     SEGMENT$(4)=" IV"
  157.  
  158.     TOT.BASES=0
  159.     TOT.BAD.GUYS=0
  160.     
  161.     REM   ***  SET UP WHAT EXISTS IN GALAXY.
  162.  
  163.     FOR I=1 TO 8
  164.         FOR J=1 TO 8
  165.             R1=RND
  166.             IF R1>.993 THEN \
  167.                 BAD.GUYS=4 :\
  168.                 GOTO 900
  169.             IF R1>.98 THEN \
  170.                 BAD.GUYS=3 :\
  171.                 GOTO 900
  172.             IF R1>.93 THEN \
  173.                 BAD.GUYS=2 :\
  174.                 GOTO 900
  175.             IF R1>.85  THEN \
  176.                 BAD.GUYS=1 :\
  177.                 GOTO 900
  178.             BAD.GUYS=0
  179.         900    REM
  180.             TOT.BAD.GUYS=TOT.BAD.GUYS+BAD.GUYS
  181.             IF RND>.94 THEN \
  182.                 BASES=1 :\
  183.             ELSE \
  184.                 BASES=0
  185.             TOT.BASES=TOT.BASES+BASES
  186.             STARS=INT(RND*7)+1
  187.             GALAXY(I,J)=BAD.GUYS*100+BASES*10+STARS
  188.         GMAP(I,J)=0
  189.         NEXT J
  190.     NEXT I
  191.     K7=TOT.BAD.GUYS
  192.     IF TOT.BASES=0 THEN \
  193.         X=FN8  :\
  194.         Y=FN8  :\
  195.         GALAXY(X,Y)=GALAXY(X,Y)+10  :\
  196.         BASES=1  :\
  197.         TOT.BASES=BASES
  198. 1200    REM
  199.     IF TOT.BASES=1 THEN \
  200.         A$=" is " :\
  201.         B$="" :\
  202.     ELSE \
  203.         A$=" are " :\
  204.         B$="s"
  205.     PRINT "Your orders are as follows:"
  206.     PRINT "Destroy the ";TOT.BAD.GUYS;ENEMY$;" Warships which have invaded"
  207.     PRINT "the Galaxy before they can attack Federation Headquaters"
  208.     PRINT "on StarDate ";T0+T9;".  This gives you ";T9;"days.  There";
  209.     PRINT A$
  210.     PRINT TOT.BASES;"StarBase";B$;" in the Galaxy for resupplying your ship."
  211.     PRINT
  212.     PRINT "     Type 'GO' when you are ready to assume command."
  213.     INPUT JIVE$
  214.     IF JIVE$ = "free" OR JIVE$ = "FREE" THEN \
  215.         PRINT "Free storage = ";FRE;"Bytes"
  216.  
  217. 1320    REM----------ENTER NEW QUADRANT--------------------
  218.     FOR J=1 TO 8
  219.         FOR I=1 TO 8
  220.             GALAXY$(I,J)=EMPTY$
  221.             IF RND > .985 THEN \
  222.             GALAXY$(I,J) = CRUD$
  223.         NEXT I
  224.     NEXT J
  225.     BAD.GUYS=0
  226.     BASES=0
  227.     STARS=0
  228.     GALAXY$(EX,EY)=ENTERPRISE$
  229.     G5=0
  230.     GOSUB 9030        REM GET QUADRANT NAME
  231.     PRINT
  232.     IF FIRST.TIME.FLAG=1 THEN \
  233.         FIRST.TIME.FLAG=0 :\
  234.         PRINT "Your mission begins with your Starship located" :\
  235.         PRINT "in the Galactic Quadrant: ";QUADRANT$; :\
  236.     ELSE \
  237.         PRINT "Now entering Quadrant:  ";QUADRANT$
  238.     PRINT
  239.     X=GALAXY(QX,QY)*.01
  240.     BAD.GUYS=INT(X)
  241.     BASES=INT((X-BAD.GUYS)*10)
  242.     STARS=GALAXY(QX,QY)-INT(GALAXY(QX,QY)*.1)*10
  243.     IF BAD.GUYS>0 THEN \
  244.         PRINT "COMBAT AREA    --   ";ENEMYC$;" ALERT"
  245.     IF SHIELDS<=SHIELD.NORMAL THEN \
  246.         PRINT "Warning: LOW SHIELDS"
  247.     FOR X=1 TO MAX.BADDY
  248.         FOR Y=1 TO 3
  249.             BADDY(X,Y)=0
  250.         NEXT Y
  251.     NEXT X
  252.     REM
  253.     IF BAD.GUYS=0 THEN \
  254.         GOTO 1705
  255.     FOR X=1 TO BAD.GUYS
  256.         GOSUB 9500        REM FIND EMPTY SECTOR
  257.         GALAXY$(SX,SY)=BAD.GUY$ 
  258.         BADDY(X,1)=SX
  259.         BADDY(X,2)=SY
  260.         BADDY(X,3)=SHIELD.NORMAL
  261.     NEXT X
  262. 1705    REM
  263.     IF BASES=0 THEN \
  264.         GOTO 1710
  265.     FOR X=1 TO BASES
  266.         GOSUB 9500        REM FIND EMPTY SECTOR
  267.         GALAXY$(SX,SY)=BASE$
  268.         BX=SX
  269.         BY=SY
  270.     NEXT X
  271. 1710    REM
  272.     IF STARS<=0 THEN \
  273.         GOTO 1980
  274.     FOR X=1 TO STARS
  275.         GOSUB 9500        REM FIND EMPTY SECTOR
  276.         GALAXY$(SX,SY)=STAR$ 
  277.     NEXT X
  278. 1980    GOSUB 6430            REM SHORT RANGE SENSOR RTN
  279. 1990    IF SHIELDS+ENERGY<=0 OR (DAMAGE(7)<0 AND ENERGY<=0) THEN  \
  280.         PRINT "    **FATAL ERROR**" :\
  281.         PRINT "You've just stranded your ship in space !!!" :\
  282.         PRINT "You have insufficient maneuvering energy and" :\
  283.         PRINT "Shield Control is presently incapable of Cross-" :\
  284.         PRINT "Circuiting to the Engine Room!" :\
  285.         GOTO 6260
  286.     IF SHIELDS < 0 THEN  \
  287.         PRINT : PRINT : PRINT :\
  288.         PRINT "***************************************************" :\
  289.         PRINT "*****  E ~ N ~ T ~ E ~ R ~ P ~ R ~ I ~ S ~ E  *****" :\
  290.         PRINT "*****    D ~ E ~ S ~ T ~ R ~ O ~ Y ~ E ~ D    *****" :\
  291.         PRINT "***************************************************" :\
  292.         PRINT  :\
  293.         PRINT  :\
  294.         PRINT "                   Y  O  U"  :\
  295.         PRINT "                     L  O  S  E  !  !  !"  :\
  296.         PRINT : PRINT : PRINT  :\
  297.         GOTO 6260
  298.  
  299. 2060    REM-----C O M M A N D--------------------------------
  300.     IF T>T0+T9 THEN \
  301.         GOTO 6220        REM YOU LOSE ASSHOLE!
  302.     PRINT CAPTAIN$;":  ";
  303.     INPUT COMMAND$
  304.     COMMAND$ = LEFT$(COMMAND$, 1)
  305.     IF COMMAND$="N" OR COMMAND$="n" THEN GOTO 2300
  306.     IF COMMAND$="S" OR COMMAND$="s" THEN GOTO 1980
  307.     IF COMMAND$="L" OR COMMAND$="l" THEN GOTO 4000
  308.     IF COMMAND$="P" OR COMMAND$="p" THEN GOTO 4260
  309.     IF COMMAND$="T" OR COMMAND$="t" THEN GOTO 4700
  310.     IF COMMAND$="E" OR COMMAND$="e" THEN GOTO 5530
  311.     IF COMMAND$="D" OR COMMAND$="d" THEN GOTO 5690
  312.     IF COMMAND$="C" OR COMMAND$="c" THEN GOTO 7290
  313.     IF COMMAND$="Q" OR COMMAND$="q" THEN GOTO 6270
  314.     PRINT "Enter one of the following:"
  315.     PRINT "N-avigate"
  316.     PRINT "S-hort Range Scan"
  317.     PRINT "L-ong Range Scan"
  318.     PRINT "P-hasors"
  319.     PRINT "T-orpedos"
  320.     PRINT "E-ngineering"
  321.     PRINT "D-amage Control"
  322.     PRINT "C-omputer"
  323.     PRINT "Q-uit"
  324.     PRINT
  325.     GOTO 2060
  326.     REM**********> COURSE CONTROL BEGINS HERE.
  327. 2300    PRINT "Course (1-9) ";
  328.     INPUT COURSE
  329.     IF COURSE=0 THEN \
  330.         GOTO 1990
  331.     IF COURSE>=1 AND COURSE<=9 THEN  \
  332.         GOTO 2350
  333.     PRINT "Lt. Sulu:   Incorrect course data, Sir." 
  334.     PRINT
  335.     PRINT "4  5  6"
  336.     PRINT "  \|/  "
  337.     PRINT "3--*--7"
  338.     PRINT "  /|\  "
  339.     PRINT "2  1  8"
  340.     PRINT
  341.     GOOF1=GOOF1+.1
  342.     IF RND+GOOF1>.85 THEN \
  343.     PRINT "MISSION ADVISORY: ";:\
  344.     PRINT "Captain ";CAPTAIN$;", I strongly suggest you get your act" :\
  345.     PRINT "together before the ";ENEMY$;"s blast your ass."
  346.     GOTO 2300
  347. 2350    REM-----COURSE IS OK-----
  348.     PRINT "Warp Factor (0-8) ";
  349.     INPUT WARP
  350.     IF WARP=0 THEN \
  351.         GOTO 1990
  352.     IF WARP>=0 AND WARP<=8 THEN \
  353.         GOTO 2450        REM WARP OK
  354.     PRINT "Engineering Officer Scott:";
  355.     PRINT "The engines won't take Warp ";WARP;"!"
  356.     GOOF2=GOOF2+.1
  357.     IF RND+GOOF2>.85 THEN \
  358.         PRINT "Mr. Spock: "; :\
  359.         PRINT "Warp ";WARP;"!  What a Galactic Jackass!"
  360.     GOTO 2350
  361. 2450    REM-------
  362.     IF DAMAGE(1)>=0 THEN \
  363.         GOTO 2490
  364.     PRINT DAM$(1);" DAMAGED"
  365.     IF WARP>.25 THEN \
  366.         PRINT "Maximum Warp:  0.25" :\
  367.         GOTO 2350
  368. 2490    REM
  369.     E.NEEDED=FNROUND(WARP*8)
  370.     IF ENERGY-E.NEEDED>=0 THEN GOTO 2590
  371.     PRINT "Engineering Officer Scott:";
  372.     PRINT "Not enough energy left!"
  373.     IF SHIELDS<E.NEEDED-ENERGY THEN \
  374.         GOTO 2350        REM ASK FOR NEW WARP
  375.     IF DAMAGE(7)<0 THEN \
  376.         GOTO 2350
  377.     PRINT "Shield Control Room reports ";SHIELDS;" units"
  378.     PRINT "of energy presently deployed to Shields."
  379.     GOTO 5530            REM SHIELD CONTROL
  380.  
  381. 2590    REM ***** SEE IF TIME FOR A COMMERCIAL.
  382.     GOSUB 9600
  383.  
  384.     REM*******> BAD.GUYS MOVE/FIRE ON MOVING STARSHIP . .  
  385.     IF BAD.GUYS=0 THEN \
  386.         GOTO 2750
  387.     FOR I=1 TO MAX.BADDY
  388.         IF BADDY(I,3) > 0 THEN  :\
  389.             GALAXY$(BADDY(I,1),BADDY(I,2))=EMPTY$  :\
  390.             GOSUB 9500  :\
  391.             BADDY(I,1)=SX  :\
  392.             BADDY(I,2)=SY  :\
  393.             GALAXY$(BADDY(I,1),BADDY(I,2))=BAD.GUY$
  394.     NEXT I
  395. 2750    REM
  396.     GOSUB 6000            REM BAD.GUYS SHOOT
  397.     D1=0
  398.     D6=INT(WARP*10)/10
  399.     REM****> MAKE REPAIRS TO THE SHIP.
  400.     FOR I=1 TO 8
  401.         IF DAMAGE(I)>=0.5 THEN GOTO 2880
  402.         DAMAGE(I)=DAMAGE(I)+D6
  403.         IF DAMAGE(I)<0 THEN GOTO 2880
  404.             IF D1=0 THEN \
  405.                 D1=1 :\
  406.                 PRINT "Damage Control Report"
  407.         PRINT TAB(8);
  408.         PRINT DAM$(I);
  409.         PRINT TAB(32);"functional"
  410. 2880    NEXT I
  411.     REM--------> DAMAGE/IMPROVEMENT DURING SOME MOVES
  412.     IF RND>.2 THEN GOTO 3070
  413.     R1=FN8
  414.     IF RND>=.5 THEN GOTO 3000
  415.     DAMAGE(R1)=DAMAGE(R1)-INT((RND*5+1)*10)/10
  416.     PRINT
  417.     PRINT "Damage Control report:"
  418.     PRINT DAM$(R1);
  419.     IF DAMAGE(R1)<0 THEN \
  420.         PRINT TAB(32);BLNK$+BELL$+"DAMAGED"+NORM$ \
  421.     ELSE \
  422.         PRINT TAB(32);"Deteriorating"
  423.     PRINT
  424.     GOTO 3070
  425. 3000    REM
  426.     DAMAGE(R1)=DAMAGE(R1)+INT((RND*3+1)*10)/10
  427.     PRINT
  428.     PRINT "Damage Control report:"
  429.     PRINT DAM$(R1);
  430.     PRINT TAB(32);"state of repair improved"
  431.     PRINT
  432. 3070    REM-----BEGIN MOVING STARSHIP---------------------
  433.     GALAXY$(EX,EY)=EMPTY$
  434.     T.CRSE=INT(COURSE)
  435.     DELTA.X=C(T.CRSE,1)+(C(T.CRSE+1,1)-C(T.CRSE,1))*(COURSE-T.CRSE)
  436.     DELTA.Y=C(T.CRSE,2)+(C(T.CRSE+1,2)-C(T.CRSE,2))*(COURSE-T.CRSE)
  437.     X=EX
  438.     Y=EY
  439.     OLD.QX=QX
  440.     OLD.QY=QY
  441.     FOR I=1 TO E.NEEDED
  442.         X=X+DELTA.X
  443.         Y=Y+DELTA.Y
  444.         EX=FNROUND(X)
  445.         EY=FNROUND(Y)
  446.         IF EX<1 OR \
  447.             EX>8 OR \
  448.             EY<1 OR \
  449.             EY>8 THEN \
  450.                 GOTO 3500
  451.         IF GALAXY$(EX,EY)=EMPTY$ THEN \
  452.             LAST.X=0 :\
  453.             LAST.Y=0 :\
  454.             GOTO 3360
  455.         OBJECT$=GALAXY$(EX,EY)
  456.         IF OBJECT$=BAD.GUY$ THEN OBJECT$=ENEMY$
  457.         IF OBJECT$=STAR$ THEN OBJECT$="Star"
  458.         IF OBJECT$=BASE$ THEN OBJECT$="StarBase"
  459.         IF OBJECT$=CRUD$ THEN OBJECT$="Spacecrud"
  460.         EX=FNROUND(X-DELTA.X)
  461.         EY=FNROUND(Y-DELTA.Y)
  462.         PRINT BELL$;"Lt. Sulu:";
  463.         PRINT " Emergency Stop!"
  464.         PRINT
  465.         PRINT "Mr. Spock: ";
  466.         PRINT "We almost rammed right into that ";OBJECT$;" at ";
  467.         PRINT "Warp ";WARP;"!!"
  468.         IF OBJECT$=ENEMY$ THEN \
  469.             PRINT "          Captain, don't you think that is "; :\
  470.             PRINT "a little dangerous??" : PRINT :\
  471.             GOTO 3370
  472.         GOOF3=GOOF3+.1
  473.         IF RND+GOOF3>.75 THEN \
  474.             PRINT "Captain ";CAPTAIN$;", don't you think it's time" :\
  475.             PRINT "you reconsider that desk job at Federation HQ??"
  476.         GOTO 3370
  477. 3360    NEXT I
  478. 3370    REM------PUT THE ENTERPRISE IN ITS NEW PLACE-----
  479.     GALAXY$(EX,EY)=ENTERPRISE$
  480.     GOSUB 3910        REM SUBTRACT THE ENERGY NEEDED
  481.     T8=1
  482.     IF WARP<1 THEN \
  483.         T8=.1*INT(10*WARP)
  484.     T=T+T8
  485.     IF T>T0+T9 THEN GOTO 6220
  486.     GOTO 1980        REM SEE IF DOCKED THEN GET COMMAND
  487.  
  488. 3500    REM-----EXCEEDED QUADRANT LIMITS----------------
  489.     X=8*QX+X+(E.NEEDED-I)*DELTA.X
  490.     Y=8*QY+Y+(E.NEEDED-I)*DELTA.Y
  491.     QX=INT(X/8)
  492.     QY=INT(Y/8)
  493.     EX=INT(X-QX*8)
  494.     EY=INT(Y-QY*8)
  495.     PERIMETER.FLAG=0
  496.     IF EX=0 THEN \
  497.         QX=QX-1 :\
  498.         EX=8
  499.     IF EY=0 THEN \
  500.         QY=QY-1 :\
  501.         EY=8
  502.     IF QX<1 THEN \
  503.         QX=1:EX=1 :\
  504.         PERIMETER.FLAG=1
  505.     IF QX>8 THEN \
  506.         QX=8:EX=8 :\
  507.         PERIMETER.FLAG=1
  508.     IF QY<1 THEN \
  509.         QY=1:EY=1 :\
  510.         PERIMETER.FLAG=1
  511.     IF QY>8 THEN \
  512.         QY=8:EY=8 :\
  513.         PERIMETER.FLAG=1
  514.     IF PERIMETER.FLAG=0 THEN \
  515.         GOTO 3860
  516.     PRINT "Lt. Uhura:"
  517.     PRINT "StarFleet Command reports:"
  518.     PRINT "'PERMISSION TO CROSS GALACTIC PERIMETER"
  519.     PRINT "IS ";BLNK$;"*DENIED*";NORM$;".  SHUT DOWN YOUR ENGINES."
  520.     PRINT "Engineering Officer Scott:";
  521.     PRINT "WARP ENGINES SHUT DOWN"
  522.     PRINT "at Sector ";EX;EY;" of Quadrant ";QX;QY;"."
  523.     IF T>T0+T9 THEN GOTO 6220
  524. 3860    REM
  525.     IF QX=OLD.QX AND QY=OLD.QY THEN \
  526.         GOTO 3370
  527.     T=T+1
  528.     GOSUB 3910            REM SUBTRACT THE NEEDED ENERGY
  529.     GOTO 1320            REM ANNOUNCE THE NEW QUADRANT
  530.  
  531. 3910    REM---------> MANEUVER ENERGY S/R
  532.     ENERGY=ENERGY-E.NEEDED-10
  533.     IF ENERGY>=0 THEN GOTO 3980
  534.     PRINT "Shield Control supplied energy to complete the maneuver."
  535.     IF RND>.6 THEN GOTO 3911
  536.     PRINT "Mr. Spock: ";
  537.     PRINT "Captain ";CAPTAIN$;": ";
  538.     IF RND>.5 THEN  \
  539.         PRINT "That was extremely close even for the Enterprise" :\
  540.     ELSE \
  541.         PRINT "Were going to need those Shields before long, you know.'"
  542. 3911    REM
  543.     SHIELDS=SHIELDS+ENERGY
  544.     ENERGY=0
  545.     IF SHIELDS<0 THEN \
  546.         SHIELDS=0
  547. 3980    RETURN
  548.  
  549. 4000    REM-----------> LONG RANGE SENSOR SCAN CODE
  550.     IF DAMAGE(3)<0 THEN \
  551.         PRINT DAM$(3);" Damaged" :\
  552.         GOTO 1990
  553.     PRINT DAM$(3);" Scan for Quadrant ";QX;QY
  554.     PRINT
  555.     FOR J=QY-1 TO QY+1
  556.         Q=0
  557.         FOR I=QX-1 TO QX+1
  558.             Q=Q+1
  559.             IF I<1 OR I>8 OR J<1 OR J>8 THEN \
  560.                 PRINT.QUAD(Q)=0 :\
  561.             ELSE \
  562.                 PRINT.QUAD(Q)=GALAXY(I,J) :\
  563.                 GMAP(I,J)=GALAXY(I,J)
  564.         NEXT I
  565.         FOR Q=1 TO 3
  566.             IF PRINT.QUAD(Q)=0 THEN  :\
  567.                 PRINT TAB(Q*6); "***"; :\
  568.                 GOTO 4040
  569.             YYY=Q*6
  570.             IF PRINT.QUAD(Q)<100 THEN YYY=YYY+1
  571.             IF PRINT.QUAD(Q)<10 THEN YYY=YYY+1
  572.             PRINT TAB(YYY);PRINT.QUAD(Q);
  573. 4040        NEXT Q
  574.         PRINT : PRINT
  575.     NEXT J
  576.     PRINT
  577.     GOTO 1990
  578.  
  579. 4260    REM----------> PHASER CONTROL BEGINS HERE
  580.     SX=EX
  581.     SY=EY
  582.     IF BAD.GUYS=0 THEN \
  583.         PRINT "Mr. Spock: "; :\
  584.         PRINT "Sensors show no enemy ships in this Quadrant" :\
  585.         GOTO 1990
  586.     IF DAMAGE(4)<0 THEN \
  587.         PRINT DAM$(4);" Damaged" :\
  588.         GOTO 1990
  589.     IF DAMAGE(8)<0 THEN \
  590.         PRINT DAM$(8);" Malfunction reduces accuracy" 
  591.     PRINT "Phasors locked on target; "
  592. 4360    PRINT "Energy available = ";ENERGY
  593.     PRINT "Number of units to fire: ";
  594.     INPUT RATE.OF.FIRE
  595.     IF RATE.OF.FIRE<=0 THEN GOTO 1990
  596.     IF RATE.OF.FIRE>ENERGY THEN GOTO 4360
  597.     IF DOCKED <> 1 THEN \
  598.         ENERGY=ENERGY-RATE.OF.FIRE
  599.     GOSUB 6000            REM   BAD.GUYS SHOOT
  600.     IF DAMAGE(8)<0 OR DAMAGE(4)<1 THEN \
  601.         DRAIN=RND/2+.5 :\
  602.         RATE.OF.FIRE=RATE.OF.FIRE*DRAIN :\
  603.         DRAIN=INT((1-DRAIN)*100) :\
  604.         PRINT "Mr. Spock: "; :\
  605.         PRINT DRAIN;"% of Phasor power was diverted to Damage Control"
  606.     TOTAL.HIT=INT(RATE.OF.FIRE/BAD.GUYS)
  607.     FOR I=1 TO MAX.BADDY
  608.         IF BADDY(I,3)<=0 THEN GOTO 4670
  609.         HIT=INT((TOTAL.HIT/FND)*(RND+1.5))
  610.         IF HIT<.15*BADDY(I,3) THEN \
  611.             PRINT "Sensors show no damage "; :\
  612.             PRINT "to enemy at ";BADDY(I,1);BADDY(I,2) :\
  613.             GOTO 4670
  614.         BADDY(I,3)=BADDY(I,3)-HIT*(RND+.3)
  615.         PRINT HIT;" unit hit on ";ENEMY$;" at Sector ";
  616.         PRINT BADDY(I,1);BADDY(I,2)
  617.         IF BADDY(I,3)<=0 THEN GOTO 4580
  618.         IF RND>.5 THEN \
  619.             PRINT "Sensors show ";BADDY(I,3);" units remaining" 
  620.         GOTO 4670
  621. 4580        PRINT BELL$; BLNK$;" << ";ENEMYC$;" DESTROYED >>";NORM$
  622.         BAD.GUYS=BAD.GUYS-1
  623.         TOT.BAD.GUYS=TOT.BAD.GUYS-1
  624.         GALAXY$(BADDY(I,1),BADDY(I,2))=EMPTY$
  625.         GALAXY(QX,QY)=BAD.GUYS*100+BASES*10+STARS
  626.         IF GMAP(QX,QY)<>0 THEN \
  627.             GMAP(QX,QY)=GALAXY(QX,QY)
  628.         IF TOT.BAD.GUYS <=0 THEN GOTO 6370
  629. 4670    NEXT I
  630.     GOTO 1990
  631.  
  632. 4700    REM---------> PHOTON TORPEDO CODE BEGINS
  633.     SX=EX
  634.     SY=EY
  635.     IF DAMAGE(5)<0 THEN \
  636.         PRINT DAM$(5);" Damaged" :\
  637.         GOTO 1990
  638.     IF TORPS<=0 THEN \
  639.         PRINT "All Photon Torpedoes expended" :\
  640.         GOTO 1990
  641.     GOSUB 6000        REM BAD.GUYS SHOOT
  642. 4760    PRINT "Torpedo Course (1-9) ";
  643.     INPUT COURSE
  644.     IF COURSE<1 OR COURSE>9 THEN \
  645.         PRINT "Ensign Chekov:"; :\
  646.         PRINT "Incorrect course data, Sir!" :\
  647.         ON FNROUND(RND)+1 GOTO 1990, 4760
  648.     T.CRSE=INT(COURSE)
  649.     DELTA.X=C(T.CRSE,1)+(C(T.CRSE+1,1)-C(T.CRSE,1))*(COURSE-T.CRSE)
  650.     DELTA.Y=C(T.CRSE,2)+(C(T.CRSE+1,2)-C(T.CRSE,2))*(COURSE-T.CRSE)
  651.     ENERGY=ENERGY-2
  652.     X=SX
  653.     Y=SY
  654.     TORPS=TORPS-1
  655.     PRINT "TORPEDO TRACK---> ";
  656. 4920    X=X+DELTA.X
  657.     Y=Y+DELTA.Y
  658.     ROUND.X=FNROUND(X)
  659.     ROUND.Y=FNROUND(Y)
  660.     IF ROUND.X<1 OR \
  661.         ROUND.X>8 OR \
  662.         ROUND.Y<1 OR \
  663.         ROUND.Y>8 THEN \
  664.             PRINT "Torpedo missed" :\
  665.             GOTO 5500
  666.     PRINT " ";ROUND.X;ROUND.Y;
  667.     IF GALAXY$(ROUND.X,ROUND.Y)=EMPTY$ THEN \
  668.         GOTO 4920
  669.     IF GALAXY$(ROUND.X,ROUND.Y)=BAD.GUY$ THEN \
  670.         GOTO 5100
  671.     IF GALAXY$(ROUND.X,ROUND.Y)=STAR$ THEN \
  672.         GOTO 5210
  673.     IF GALAXY$(ROUND.X,ROUND.Y)=BASE$ THEN \
  674.         GOTO 5280
  675.     IF GALAXY$(ROUND.X,ROUND.Y)=CRUD$ THEN \
  676.         GOTO 4920
  677.     GOTO 4920        REM DEFENSIVE PROGRAMMING
  678.  
  679. 5100    REM-----HIT A BAD.GUY--------------------------
  680.     PRINT BELL$;BLNK$;"<< ";ENEMYC$;" DESTROYED >>";NORM$
  681.     ON FN8 GOTO 5177, 5177, 5177, 5177, 5177, 5176, 5178, 5178
  682. 5176    REM
  683.     PRINT "Excellent work with the Torpedoes, Captain."
  684.     GOTO 5177
  685. 5178    REM
  686.     PRINT "Mr. Spock: ";
  687.     PRINT "Very good shooting, Captain ";CAPTAIN$
  688. 5177    REM
  689.     GALAXY$(X,Y)=EMPTY$
  690.     BAD.GUYS=BAD.GUYS-1
  691.     TOT.BAD.GUYS=TOT.BAD.GUYS-1
  692.     IF TOT.BAD.GUYS<=0 THEN GOTO 6370
  693.     FOR I=1 TO MAX.BADDY
  694.         IF BADDY(I,3) <=0 THEN  \
  695.             GOTO 5180
  696.         IF ROUND.X = BADDY(I,1) AND  \
  697.            ROUND.Y = BADDY(I,2) THEN GOTO 5190
  698. 5180    NEXT I
  699.     GOTO 5430        REM - DEFENSIVE PROGRAMMING
  700. 5190    BADDY(I,3)=0
  701.     GOTO 5430
  702. 5210    REM-----HIT A STAR------------------------
  703.     PRINT "Star at ";ROUND.X;ROUND.Y;" absorbed Torpedo energy"
  704.     IF RND<=.7 THEN  :\
  705.         PRINT "Command Inquiry: ";  :\
  706.         PRINT "Was it you intention to waste a valuable"  :\
  707.         PRINT "Torpedo on that star, Captain?"
  708.     GOTO 5500
  709. 5280    REM------HIT A STARBASE-------------------
  710.     PRINT BELL$;IVB$;">> STARBASE DESTROYED << ";NORM$
  711.     BASES=BASES-1
  712.     TOT.BASES=TOT.BASES-1
  713.     GALAXY$(X,Y)=EMPTY$
  714.     IF TOT.BASES <= 0 THEN  :\
  715.         PRINT "Mr. Spock: ";  :\
  716.         PRINT "Captain ";CAPTAIN$;  :\
  717.         PRINT " I'm afraid that you have blown it"  :\
  718.         GOTO 6270
  719.     PRINT "StarFleet Command is reviewing your record to consider"
  720.     PRINT "a General Court-Martial."
  721.     DOCKED=0
  722. 5430    REM-------END OF ENTERPRISE SHOOTING-------
  723.     GALAXY(QX,QY)=BAD.GUYS*100+BASES*10+STARS
  724.     IF GMAP(QX,QY)<>0 THEN \
  725.         GMAP(QX,QY)=GALAXY(QX,QY)
  726. 5500    REM
  727.     IF RND>.7 THEN \
  728.         GOSUB 6000    REM BAD.GUYS MAY SHOOT AGAIN
  729.     GOTO 1990
  730.  
  731. 5530    REM---------SHIELD CONTROL STARTS HERE-----------------
  732.     IF DAMAGE(7)<0 THEN \
  733.         PRINT DAM$(7);" Damaged" :\
  734.         GOTO 1990
  735.     IF DOCKED = 1 THEN \
  736.         PRINT "Mr. Spock:  You can't deploy shields this";  :\
  737.         PRINT " close to a StarBase!!" :\
  738.         GOTO 1990
  739. 5560    PRINT "Energy available=";ENERGY+SHIELDS
  740.     PRINT "Divert to Shields ";
  741.     INPUT DIVERTED
  742.     IF DIVERTED<0 OR DIVERTED=SHIELDS THEN \
  743.         PRINT "Shields unchanged" :\
  744.         GOTO 1990
  745.     IF DIVERTED>SHIELDS+ENERGY THEN \
  746.         PRINT "Can't divert" :\
  747.         GOTO 5560
  748.     ENERGY=ENERGY+SHIELDS-DIVERTED
  749.     SHIELDS=DIVERTED
  750.     PRINT "Deflector Control Room report: ";
  751.     PRINT "Shields now at ";SHIELDS
  752.     GOTO 1990
  753.  
  754. 5690    REM------------DAMAGE CONTROL STARTS HERE----------------
  755.     IF DOCKED=1 THEN GOTO 5710
  756.     IF DAMAGE(6)<0 THEN \
  757.         PRINT DAM$(6);" Damaged" :\
  758.         GOTO 1990
  759.     GOSUB 5910        REM PRINT DAMAGE RPT
  760.     GOTO 1990
  761. 5710    REM----------D O C K E D------------------------------
  762.     GOSUB 5910        REM PRINT DAMAGE REPORT
  763.     D3=0
  764.     FOR I=1 TO 8
  765.         IF DAMAGE(I)>=.7 THEN GOTO 5760
  766.         D3=D3+.5
  767. 5760    NEXT I
  768.     IF D3=0 THEN GOTO 1990
  769.     D3=D3+(.5*RND)
  770.     IF D3>1 THEN \
  771.         D3=RND
  772.     REM
  773.     PRINT "Techs standing by to repair the Ship."
  774.     PRINT "Estimated time: ";D3;"StarDates"
  775.     PRINT "Authorize (Y/N) ";
  776.     INPUT A$
  777.     IF LEFT$(A$,1)<>"Y" AND LEFT$(A$,1)<>"y" THEN GOTO 1990
  778.     FOR I=1 TO 8
  779. 5815        REM
  780.         IF DAMAGE(I)<=.7 THEN \
  781.             DAMAGE(I)=DAMAGE(I)+1 :\
  782.             GOTO 5815
  783.     NEXT I
  784.     T=T+D3+.1
  785.     GOSUB 5910        REM PRINT DAMAGE RPT
  786.     GOTO 1990
  787.  
  788. 5910    REM-----PRINT DAMAGE RPT---------------------
  789.     PRINT
  790.     PRINT "   Device";TAB(27);"Condition"
  791.     FOR X=1 TO 8
  792.         PRINT DAM$(X);TAB(30);DAMAGE(X)
  793.     NEXT X
  794.     PRINT
  795.     RETURN
  796.  
  797. 6000    REM-------------BAD.GUYS SHOOTING ROUTINE------------
  798.     SX=EX
  799.     SY=EY
  800.     IF BAD.GUYS<=0 THEN GOTO 6210
  801.     IF DOCKED=1 THEN \
  802.         PRINT "StarBase Shields protect the Enterprise" :\
  803.         RETURN
  804.     FOR I=1 TO MAX.BADDY
  805.         IF BADDY(I,3)<=0 THEN  :\
  806.             GOTO 6200
  807.         HIT=INT((BADDY(I,3)/FND)*(2+RND))
  808.         SHIELDS=SHIELDS-INT(HIT*RND)
  809.         PRINT BELL$;"---> ";HIT;" unit hit on Enterprise from Sector ";
  810.         PRINT BADDY(I,1);BADDY(I,2)
  811.         GOOF4=GOOF4+.1
  812.         IF RND+GOOF4>.7 THEN \
  813.             PRINT "Shields down to ";SHIELDS;"units"
  814.         IF HIT<20 OR \
  815.             HIT/SHIELDS<.02 THEN \
  816.                 GOTO 6200
  817.         GOSUB 6100        REM DAMAGE RTN
  818.         IF SHIELDS<0 THEN \
  819.             GOTO 6150
  820. 6200    NEXT I
  821. 6210    RETURN
  822.  
  823. 6100    REM------DAMAGE TO ENTERPRISE--------------------------
  824.     TEMP=SHIELDS
  825.     IF SHIELDS<=0 THEN TEMP=1
  826.     NEW.DAMAGE=HIT/TEMP+.5*RND
  827.     NEW.DAMAGE=INT(NEW.DAMAGE*10)/10
  828.     R1=FN8
  829.     DAMAGE(R1)=DAMAGE(R1)-NEW.DAMAGE
  830.     PRINT "Damage Control Reports"
  831.     IF DAMAGE(R1)<0 THEN \
  832.         PRINT DAM$(R1);TAB(32);BLNK$;" DAMAGED" :\
  833.     ELSE \
  834.         PRINT DAM$(R1);TAB(32);" deteriorating"
  835.  
  836.     RETURN
  837.  
  838. 6150    PRINT
  839.     PRINT "The Enterprise has been DESTROYED."
  840.     PRINT "  The Federation will be conquered."
  841. 6220    REM
  842. 6260    PRINT "It is StarDate ";T
  843. 6270    PRINT "There were ";TOT.BAD.GUYS;ENEMY$;" Battle Cruisers left at the"
  844.     PRINT "   end of your mission."
  845. 6290    PRINT
  846.     PRINT
  847.     PRINT "The Federation is in need of a new StarShip Commander"
  848.     PRINT "For a similar Mission -- If there is a volunteer,"
  849.     PRINT "let him step forward, and enter 'AYE'.";
  850.     INPUT A$
  851.     IF LEFT$(A$,1)="A" OR LEFT$(A$,1)="a" THEN 240
  852.     PRINT "StarBase to Enterprise:  ";
  853.     PRINT "We are terminating communications"
  854.     STOP
  855. 6370    PRINT "CONGRATULATIONS, Captain!  The last ";ENEMY$;" Battle Cruiser"
  856.     PRINT "menacing the Federation has been Destroyed."
  857.     PRINT
  858.     EFF=(K7/(T-T0))*1000
  859.     PRINT "Your efficiency rating is ";EFF
  860.     PRINT 
  861.     IF EFF < RND*100+900 THEN GOTO 6290
  862.     PRINT "Mr. Spock: "
  863.     PRINT "      Confidentially speaking, Captain ";CAPTAIN$;", I believe"
  864.     PRINT "      that the performance you have just given on the "
  865.     PRINT "      field of battle has been so commendable as to virtually"
  866.     PRINT "      assure that your name will come up on the Federation"
  867.     PRINT "      Navy promotion list quite soon.  Even though I am an"
  868.     PRINT "      unemotional Vulcan, I was profoundly stirred by your"
  869.     PRINT "      demonstration of skill and judgment"
  870.     PRINT
  871.     GOTO 6290
  872.  
  873. 6430    REM------------SHORT RANGE SENSOR AND STARTUP SUBRTN.----------
  874.     SX=EX
  875.     SY=EY
  876.     FOR J=SY-1 TO SY+1
  877.         FOR I=SX-1 TO SX+1
  878.             IF I<1 OR I>8 OR \
  879.                 J<1 OR J>8 THEN \
  880.                     GOTO 6540
  881.             IF GALAXY$(I,J)=BASE$ THEN \
  882.                 GOTO 6580
  883. 6540        NEXT I
  884.     NEXT J
  885.     DOCKED=0
  886.     GOTO 6650
  887. 6580    DOCKED=1
  888.     CONDITION$="Docked"
  889.     IF LAST.X=EX AND LAST.Y=EY THEN \
  890.         GOTO 6720
  891.     LAST.X=EX
  892.     LAST.Y=EY
  893.     TEMP=ENERGY.NORMAL-333+100*FN8
  894.     IF TEMP>ENERGY THEN \
  895.         ENERGY=TEMP
  896.     TEMP=TORPS.NORMAL-3+FN8
  897.     IF TEMP>TORPS THEN \
  898.         TORPS=TEMP
  899.     PRINT "Mr. Spock: ";
  900.     PRINT "Captain ";CAPTAIN$;":"
  901.     PRINT "We have dropped our shields for docking"
  902.     PRINT "We are reloading ";TORPS;" Torpedoes"
  903.     PRINT "Our energy is being replenished to ";ENERGY;" units"
  904.     SHIELDS=0
  905.     GOTO 6720
  906. 6650    REM-----GET CONDITION CODE-----------------
  907.     CONDITION$="Green"
  908.     IF ENERGY<ENERGY.NORMAL/10 THEN \
  909.         CONDITION$=BLNK$+"Yellow"+NORM$
  910.     IF BAD.GUYS=1 THEN \
  911.         CONDITION$=INVR$+"Orange "+NORM$
  912.     IF BAD.GUYS>1 THEN \
  913.         CONDITION$=IVB$+"* R E D * "+NORM$
  914. 6720    REM-----SENSOR OK?-----------------
  915.     IF DAMAGE(2)<0 THEN \
  916.         PRINT  :\
  917.         PRINT DAM$(2);" DAMAGED !!!  <---"  :\
  918.         PRINT
  919. 6770    REM----------------------------
  920.     PRINT DASH$
  921.     J=1
  922.     GOSUB 6800
  923.     PRINT
  924.     J=2
  925.     GOSUB 6800
  926.     PRINT TAB(25);"StarDate";TAB(50);T
  927.     J=3
  928.     GOSUB 6800
  929.     PRINT TAB(25);"Condition";TAB(50);CONDITION$
  930.     J=4
  931.     GOSUB 6800
  932.     PRINT TAB(25);"Quadrant";TAB(50);QX;QY
  933.     J=5
  934.     GOSUB 6800
  935.     PRINT TAB(25);"Sector";TAB(50);EX;EY
  936.     J=6
  937.     GOSUB 6800
  938.     PRINT TAB(25);"Total energy";TAB(50);ENERGY+SHIELDS
  939.     J=7
  940.     GOSUB 6800
  941.     PRINT TAB(25);"Photon Torpedoes";TAB(50);TORPS
  942.     J=8
  943.     GOSUB 6800
  944.     PRINT TAB(25);"Shields";TAB(50);SHIELDS
  945.     PRINT DASH$
  946.     RETURN
  947.  
  948. 6800    REM-------PRINT A LINE OF THE QUADRANT------
  949.     IF DAMAGE(2) < 0 THEN  :\
  950.         GOTO 6805
  951.     FOR I=1 TO 8
  952.         PRINT GALAXY$(I,J);" "; 
  953.     NEXT I 
  954.     RETURN
  955. 6805    FOR I=1 TO 8
  956.         IF GALAXY$(I,J)=ENTERPRISE$ THEN  :\
  957.             PRINT "E ";  :\
  958.         ELSE  :\
  959.             PRINT "? ";
  960.         NEXT
  961.     RETURN
  962.  
  963. 7290    REM-----------LIBRARY COMPUTER CODE BEGINS HERE -------
  964.     IF DAMAGE(8)<0 THEN \
  965.         PRINT DAM$(8);" Damaged" :\
  966.         GOTO 1990
  967. 7320    REM
  968.     INPUT "Enter Computer code: "; COMPUTER.CODE
  969.     IF COMPUTER.CODE<1 OR COMPUTER.CODE>6 THEN \
  970.         GOSUB 7450 :\
  971.         GOTO 7320
  972.     ON COMPUTER.CODE GOTO 7400, 7900, 8070, 8500, 8150, 7350
  973.     GOSUB 7450        REM PRINT WHAT'S AVAILABLE
  974.     GOTO 7320
  975.  
  976. 7350    GOSUB 9030
  977.     PRINT QUADRANT$ : PRINT
  978.     GOTO 1990
  979.  
  980. 7450    PRINT "Functions available from Library Computer:"
  981.     PRINT "   1 - Cumulative Galactic Record"
  982.     PRINT "   2 - Status Report"
  983.     PRINT "   3 - Photon Torpedo data"
  984.     PRINT "   4 - StarBase Navigation data"
  985.     PRINT "   5 - Direction/Distance Calculator"
  986.     PRINT "   6 - Galaxy 'Region Name' map"
  987.     RETURN
  988.  
  989. 7400    REM ------- CUMULATIVE GALACTIC RECORD CODE BEGINS.------
  990.     PRINT TAB(14);"T H E    G A L A X Y"
  991.     FOR X=1 TO 8
  992.         PRINT TAB(X*6); X;
  993.     NEXT X
  994.     PRINT
  995.     PRINT
  996.     FOR J=1 TO 8
  997.         PRINT J;
  998.         FOR I=1 TO 8
  999.             GM = GMAP(I,J)
  1000.             IF GM = 0 THEN  :\
  1001.                 PRINT TAB(I*6); "???";  :\
  1002.                 GOTO 7420
  1003.             XXX=I*6
  1004.             IF GM<100 THEN XXX=XXX+1
  1005.             IF GM<10 THEN XXX=XXX+1
  1006.             IF QX=I AND QY=J THEN \
  1007.                 A$="<" :\
  1008.             ELSE \
  1009.                 A$=" "
  1010.             PRINT TAB(XXX); GM; A$;
  1011. 7420        NEXT I
  1012.         PRINT
  1013.     NEXT J
  1014.     GOTO 1990
  1015.  
  1016. 7900    REM ---------- STATUS REPORT RTN ------------------
  1017.     PRINT
  1018.     PRINT TAB(15);"STATUS REPORT"
  1019.     X$=""
  1020.     IF TOT.BAD.GUYS=1 THEN GOTO 7940
  1021.     X$="s"
  1022. 7940    PRINT TOT.BAD.GUYS;ENEMY$+X$+" left"
  1023.     PRINT "Mission must be completed in ";(T0+T9)-T;" StarDates"
  1024.     IF TOT.BASES=0 THEN PRINT "No StarBases left" : GOTO 7941
  1025.     IF TOT.BASES=1 THEN PRINT "1 StarBase left" : GOTO 7941
  1026.         PRINT TOT.BASES;" StarBases left"
  1027. 7941    PRINT "Current efficiency rating: ";((K7-TOT.BAD.GUYS)/(T-T0))*1000
  1028.     GOTO 1990
  1029.  
  1030. 8070    REM----------  TORPEDO DATA, BASE NAV, D/D CALCULATOR------
  1031.     H8=0
  1032.     FOR I=1 TO MAX.BADDY
  1033.         IF BADDY(I,3)<=0 THEN GOTO 8480
  1034.         W1=BADDY(I,1)
  1035.         X=BADDY(I,2)
  1036. 8120        C1=SX
  1037.         A=SY
  1038.         GOTO 8220
  1039. 8150        PRINT "Direction/Distance Calculator:"
  1040.         PRINT "  You are at Quadrant (";QX;QY;") Sector (";SX;SY;")"
  1041.         PRINT "  Please enter --->"
  1042.         PRINT "  Initial Coordinates (x,y) ";
  1043.         INPUT C1,A
  1044.         PRINT "  Final Coordinates (x,y) ";
  1045.         INPUT W1,X
  1046. 8220        X=X-A
  1047.         A=C1-W1
  1048.         IF X<0 THEN GOTO 8350
  1049.         IF A<0 THEN GOTO 8410
  1050.         IF X>0 THEN GOTO 8280
  1051.         IF A=0 THEN GOTO 8370
  1052. 8280        C1=1
  1053. 8290        IF ABS(A)<=ABS(X) THEN GOTO 8330
  1054.         V5=C1+(((ABS(A)-ABS(X))+ABS(A))/ABS(A))
  1055.         PRINT TAB(10);"Direction = ";V5
  1056.         GOTO 8460
  1057. 8330        PRINT TAB(10);"Direction = ";C1+(ABS(A)/ABS(X))
  1058.         GOTO 8460
  1059. 8350        IF A>0 THEN GOTO 8390
  1060.         IF X=0 THEN GOTO 8410
  1061. 8370        C1=5
  1062.         GOTO 8290
  1063. 8390        C1=3
  1064.         GOTO 8420
  1065. 8410        C1=7
  1066. 8420        IF ABS(A)>=ABS(X) THEN GOTO 8450
  1067.         PRINT TAB(10);"Direction = ";C1+((ABS(X)-ABS(A))+ABS(X))/ABS(X)
  1068.         GOTO 8460
  1069. 8450        PRINT TAB(10);"Direction = ";C1+(ABS(X)/ABS(A))
  1070. 8460        PRINT TAB(10);"Distance = ";SQR(X*X+A*A)
  1071.         IF H8=1 THEN GOTO 1990
  1072. 8480    NEXT I
  1073.     GOTO 1990
  1074. 8500    IF BASES<>0 THEN GOTO 8530
  1075.     PRINT "Mr. Spock: 'Sensors show no StarBases in this Quadrant.'"
  1076.     GOTO 1990
  1077. 8530    PRINT "From Enterprise to StarBase:"
  1078.     W1=BX
  1079.     X=BY
  1080.     GOTO 8120
  1081.  
  1082. 9030    REM-----FIND QUADRANT NAME$--------------------------
  1083.     QUAD=INT((QX-1)/4)+2*QX-1
  1084.     QUAD.REM=QX
  1085.     IF QUAD.REM>4 THEN \
  1086.         QUAD.REM=QUAD.REM-4
  1087.     QUADRANT$=QUAD.NAME$(QUAD)+SEGMENT$(QUAD.REM)
  1088.     RETURN
  1089.  
  1090. 9250    STOP
  1091.  
  1092. 999999    REM-----PRINT THE INSTRUCTIONS---------------------
  1093.     PRINT
  1094.     PRINT "Why don't you print the file 'TREKINST'?"
  1095.     PRINT "It's about 10 pages long !!!"
  1096.     PRINT
  1097.     FOR I=1 TO 500 : NEXT   REM TIME DELAY
  1098.     RETURN
  1099.  
  1100. 9500    REM-------FIND EMPTY SECTOR-------------------------
  1101.     SX=FN8
  1102.     SY=FN8
  1103.     IF GALAXY$(SX,SY)=EMPTY$ THEN \
  1104.         RETURN
  1105.     GOTO 9500
  1106. 9600    REM-------COMMERCIALS-------------------------------
  1107.  
  1108.     IF RND>.1 THEN RETURN    REM - ONLY 10% CHANCE OF ANY COMMERCIAL
  1109.     PRINT
  1110.     PRINT "                 . . . .  And now,"
  1111.     PRINT "                             a word from our sponsors"
  1112.     PRINT
  1113.  
  1114.     NO.OF.COMMERCIALS = 3
  1115.     NUM=INT(RND*NO.OF.COMMERCIALS)+1
  1116.  
  1117.     ON NUM GOTO 9700, 9800, 9900
  1118.  
  1119. 9700    PRINT "*********************************************************"
  1120.     PRINT "*                                                       *"
  1121.     PRINT "*      IIIIIIII  BBBBBB   MMM     MMM                   *"
  1122.     PRINT "*         II      BB  BB   MMM   MMM                    *"
  1123.     PRINT "*         II      BB  BB   MM M M MM                    *"
  1124.     PRINT "*         II      BBBBB    MM  M  MM                    *"
  1125.     PRINT "*         II      BB  BB   MM     MM                    *"
  1126.     PRINT "*         II      BB   BB  MM     MM                    *"
  1127.     PRINT "*         II      BB  BB   MM     MM                    *"
  1128.     PRINT "*      IIIIIIII  BBBBBB   MMMM   MMMM                   *"
  1129.     PRINT "*                                                       *"
  1130.     PRINT "*                     This episode of S T A R T R E K   *"
  1131.     PRINT "*                       is brought to you by IBM        *"
  1132.     PRINT "*                                                       *"
  1133.     PRINT "*                           Not just DATA  --           *"
  1134.     PRINT "*                            But REALITY!               *"
  1135.     PRINT "*                                                       *"
  1136.     PRINT "*********************************************************"
  1137.  
  1138.     GOSUB 9950        REM - DELAY
  1139.     RETURN
  1140.  
  1141. 9800    PRINT "*********************************************************"
  1142.     PRINT "*                                                       *"
  1143.     PRINT "*      StarTrek is brought to you by . . . .            *"
  1144.     PRINT "*                                                       *"
  1145.     PRINT "*  ==========                                           *"
  1146.     PRINT "*  !++++++++!      TTTTT   A    N  N   GGG              *"
  1147.     PRINT "*  ==========        T    A A   NN N  G                 *"
  1148.     PRINT "*  !        !        T   AAAAA  N NN  G  G              *"
  1149.     PRINT "*  !--------!        T  A     A N  N   GGG              *"
  1150.     PRINT "*  !  TANG  !                                           *"
  1151.     PRINT "*  !  TANG  !    Spock:  Spock to Captain Kirk. Klingon *"
  1152.     PRINT "*  !  TANG  !       Battle cruisers sighted. Condition  *"
  1153.     PRINT "*  !        !       RED. Appearance on Bridge requested *"
  1154.     PRINT "*  ! Orange !                                           *"
  1155.     PRINT "*  ! flavor !    Kirk:   Not now, Spock.  I'm drinking  *"
  1156.     PRINT "*  !--------!       my TANG!                            *"
  1157.     PRINT "*  ==========                                           *"
  1158.     PRINT "*                                                       *"
  1159.     PRINT "*      Drink TANG *****  Captain Kirk does. ****        *"
  1160.     PRINT "*                                                       *"
  1161.     PRINT "*********************************************************"
  1162.  
  1163.     GOSUB 9950        REM DELAY
  1164.     RETURN
  1165.  
  1166. 9900    PRINT "*********************************************************"
  1167.     PRINT "*                                                       *"
  1168.     PRINT "*     STARTREK is brought to you by:                    *"
  1169.     PRINT "*                                                       *"
  1170.     PRINT "*          ----                FFFF  OO  RRR  DDD       *"
  1171.     PRINT "*         +    +               F    O  O R  R D  D      *"
  1172.     PRINT "*        +      +              FFF  O  O RRR  D  D      *"
  1173.     PRINT "*       +        +             F     OO  R  R DDD       *"
  1174.     PRINT "*      +   QQQQ   +            F                        *"
  1175.     PRINT "*      +   !  !   +                                     *"
  1176.     PRINT "*      +   !  !   +                                     *"
  1177.     PRINT "*       +  !  !  +                                      *"
  1178.     PRINT "*        + !  ! +                                       *"
  1179.     PRINT "*         +!  !+                                        *"
  1180.     PRINT "*          +--+                                         *"
  1181.     PRINT "*          !//!                                         *"
  1182.     PRINT "*          !//!   FORD has a Better Idea.               *"
  1183.     PRINT "*          !//!                                         *"
  1184.     PRINT "*          -++-            (FORD of Parma, Ohio)        *"
  1185.     PRINT "*           --                                          *"
  1186.     PRINT "*                                                       *"
  1187.     PRINT "*********************************************************"
  1188.  
  1189.     GOSUB 9950
  1190.     RETURN
  1191.  
  1192. 9950    REM --------- TIME DELAY --------------------------------
  1193.  
  1194.     FOR I=1 TO 700
  1195.     NEXT
  1196.  
  1197.     RETURN
  1198.  
  1199.  
  1200.     END
  1201.