home *** CD-ROM | disk | FTP | other *** search
- REM---------------------------------------------------------
- REM S T A R T R E K
- REM---------------------------------------------------------
-
-
- DIM GALAXY(8,8), GALAXY$(8,8), C(9,2), KLING(3,3), GMAP(8,8)
- DIM DAMAGE(8), QUAD.NAME$(16), SEGMENT$(4), DAM$(8)
- DIM PRINT.QUAD(3)
- ESC$=CHR$(27)
- EN$=ESC$+" "
- IVB$=EN$
- BLNK$=EN$
- BELL$=CHR$(7)
- NORM$=EN$+" "
- EMPTY$="."
- BASE$="B"
- KLINGON$="K"
- ENTERPRISE$="E"
- STAR$="*"
- CRUD$="?"
- FIRST.TIME.FLAG=1
- DOT$="........................"
- PRINT
- PRINT TAB(20);"S T A R T R E K"
- PRINT
- 240 INPUT " ENTER YOUR NAME, CAPTAIN: "; CAPTAIN$
- PRINT
- PRINT "WELCOME ABOARD CAPTAIN: ";CAPTAIN$
- PRINT TAB(15);"DO YOU WANT INSTRUCTIONS";
- INPUT ANS$
- RANDOMIZE
- IF LEFT$(ANS$,1)="Y" THEN GOSUB 999999
- PRINT CHR$(26)
- PRINT "MISSION ADVISORY: ";
- PRINT "STAND BY"
- LET T=INT(RND*20+20)*100
- T0=T
- T9=26+INT(RND*8+1)
- DOCKED=0
- ENERGY.NORMAL=3000
- ENERGY=ENERGY.NORMAL
- TORPS=10
- TORPS.NORMAL=TORPS
- SHIELD.NORMAL=200
- SHIELDS=SHIELD.NORMAL+10
- FOR I=1 TO 8
- FOR J=1 TO 8
- GALAXY$(I,J)=EMPTY$
- NEXT J
- NEXT I
-
- REM-----------F U N C T I O N S---------------------
- DEF FN8=INT(RND*8+1)
- DEF FNROUND(D)=INT(D+.5)
- DEF FND=SQR((ABS(KLING(I,1)-SX))^2+(ABS(KLING(I,2)-SY))^2)
-
- REM *** INITIALIZE ENTERPRISE'S POSITION
-
- QX=FN8
- QY=FN8
- EX=FN8
- EY=FN8
- SX=EX
- SY=EY
- C(3,1)=-1
- C(2,1)=-1
- C(4,1)=-1
- C(4,2)=-1
- C(5,2)=-1
- C(6,2)=-1
- C(1,2)=1
- C(2,2)=1
- C(6,1)=1
- C(7,1)=1
- C(8,1)=1
- C(8,2)=1
- C(9,2)=1
- FOR I=1 TO 8
- LET DAMAGE(I)=(INT(RND*30+1)/10)
- NEXT I
- DAM$(1)="WARP ENGINES"
- DAM$(2)="SHORT RANGE SENSORS"
- DAM$(3)="LONG RANGE SENSORS"
- DAM$(4)="PHASER CONTROL"
- DAM$(5)="PHOTON TORPEDO TUBES"
- DAM$(6)="DAMAGE CONTROL"
- DAM$(7)="SHIELD CONTROL"
- DAM$(8)="COMPUTER"
-
- QUAD.NAME$(01)="ANTARES"
- QUAD.NAME$(02)="SIRIUS"
- QUAD.NAME$(03)="RIGEL"
- QUAD.NAME$(04)="DENEB"
- QUAD.NAME$(05)="PROCYON"
- QUAD.NAME$(06)="CAPELLA"
- QUAD.NAME$(07)="VEGA"
- QUAD.NAME$(08)="BETELGEUSE"
- QUAD.NAME$(09)="CANOPUS"
- QUAD.NAME$(10)="ALDEBARAN"
- QUAD.NAME$(11)="ALTAIR"
- QUAD.NAME$(12)="REGULUS"
- QUAD.NAME$(13)="SAGITTARIUS"
- QUAD.NAME$(14)="ARCTURUS"
- QUAD.NAME$(15)="POLLUX"
- QUAD.NAME$(16)="SPICA"
- SEGMENT$(1)=" I"
- SEGMENT$(2)=" II"
- SEGMENT$(3)=" III"
- SEGMENT$(4)=" IV"
-
- TOT.BASES=0
- TOT.KLINGONS=0
-
- REM *** SET UP WHAT EXISTS IN GALAXY.
-
- FOR I=1 TO 8
- FOR J=1 TO 8
- R1=RND
- IF R1>.98 THEN \
- KLINGONS=3 :\
- GOTO 900
- IF R1>.95 THEN \
- KLINGONS=2 :\
- GOTO 900
- IF R1>.8 THEN \
- KLINGONS=1 :\
- GOTO 900
- KLINGONS=0
- 900 REM
- TOT.KLINGONS=TOT.KLINGONS+KLINGONS
- IF RND>.96 THEN \
- BASES=1 :\
- ELSE \
- BASES=0
- TOT.BASES=TOT.BASES+BASES
- STARS=FN8
- GALAXY(I,J)=KLINGONS*100+BASES*10+STARS
- GMAP(I,J)=0
- NEXT J
- NEXT I
- K7=TOT.KLINGONS
- IF TOT.BASES>0 THEN \
- GOTO 1200
- X=FN8
- Y=FN8
- GALAXY(X,Y)=GALAXY(X,Y)+10 REM ADD A BASE
- BASES=1
- TOT.BASES=BASES
- 1200 REM
- IF TOT.BASES=1 THEN \
- A$=" IS " :\
- B$="" :\
- ELSE \
- A$=" ARE " :\
- B$="S"
- PRINT "YOUR ORDERS ARE AS FOLLOWS:"
- PRINT "DESTROY THE ";TOT.KLINGONS;"KLINGON WARSHIPS WHICH HAVE INVADED"
- PRINT "THE GALAXY BEFORE THEY CAN ATTACK FEDERATION HEADQUARTERS"
- PRINT "ON STARDATE ";T0+T9;". THIS GIVES YOU ";T9;"DAYS. THERE";
- PRINT A$
- PRINT TOT.BASES;"STARBASE";B$;" IN THE GALAXY FOR RESUPPLYING YOUR SHIP."
- PRINT
- PRINT " TYPE 'GO' WHEN READY TO ASSUME COMMAND."
- INPUT RAND$
-
- 1320 REM----------ENTER NEW QUADRANT--------------------
- FOR J=1 TO 8
- FOR I=1 TO 8
- GALAXY$(I,J)=EMPTY$
- NEXT I
- NEXT J
- KLINGONS=0
- BASES=0
- STARS=0
- GALAXY$(EX,EY)=ENTERPRISE$
- G5=0
- GOSUB 9030 REM GET QUADRANT NAME
- PRINT
- IF FIRST.TIME.FLAG=1 THEN \
- FIRST.TIME.FLAG=0 :\
- PRINT "YOUR MISSION BEGINS WITH YOUR STARSHIP LOCATED" :\
- PRINT "IN THE GALACTIC QUADRANT: ";QUADRANT$; :\
- ELSE \
- PRINT "NOW ENTERING QUADRANT: ";QUADRANT$
- 1500 PRINT
- X=GALAXY(QX,QY)*.01
- KLINGONS=INT(X)
- BASES=INT((X-KLINGONS)*10)
- STARS=GALAXY(QX,QY)-INT(GALAXY(QX,QY)*.1)*10
- IF KLINGONS>0 THEN \
- PRINT "COMBAT AREA ";BLNK$;"KLINGON ALERT"
- IF SHIELDS<=SHIELD.NORMAL THEN \
- PRINT "WARNING: LOW SHIELDS"
- FOR X=1 TO 3
- FOR Y=1 TO 3
- KLING(X,Y)=0
- NEXT Y
- NEXT X
- 1600 REM
- IF KLINGONS=0 THEN \
- GOTO 1705
- FOR X=1 TO KLINGONS
- GOSUB 9500 REM FIND EMPTY SECTOR
- GALAXY$(SX,SY)=KLINGON$
- KLING(X,1)=SX
- KLING(X,2)=SY
- KLING(X,3)=SHIELD.NORMAL
- NEXT X
- 1705 REM
- IF BASES=0 THEN \
- GOTO 1710
- FOR X=1 TO BASES
- GOSUB 9500 REM FIND EMPTY SECTOR
- GALAXY$(SX,SY)=BASE$
- BX=SX
- BY=SY
- NEXT X
- 1710 REM
- IF STARS<=0 THEN \
- GOTO 1980
- FOR X=1 TO STARS
- GOSUB 9500 REM FIND EMPTY SECTOR
- GALAXY$(SX,SY)=STAR$
- NEXT X
- 1980 GOSUB 6430 REM SHORT RANGE SENSOR RTN
- 1990 IF SHIELDS+ENERGY<=10 OR (DAMAGE(7)<0 AND ENERGY<=10) THEN \
- PRINT BLNK$;"**FATAL ERROR**" :\
- PRINT "YOU'VE JUST STRANDED YOUR SHIP IN SPACE!" :\
- PRINT "YOU HAVE INSUFFICIENT MANEUVERING ENERGY AND" :\
- PRINT "SHIELD CONTROL IS PRESENTLY INCAPABLE OF CROSS-" :\
- PRINT "CIRCUITING TO THE ENGINE ROOM!" :\
- GOTO 6260
-
- 2060 REM-----C O M M A N D--------------------------------
- IF T>T0+T9 THEN \
- GOTO 6220 REM YOU LOSE ASSHOLE!
- PRINT CAPTAIN$;": ";
- INPUT COMMAND$
- IF LEFT$(COMMAND$,1)="N" THEN GOTO 2300
- IF LEFT$(COMMAND$,1)="S" THEN GOTO 1980
- IF LEFT$(COMMAND$,1)="L" THEN GOTO 4000
- IF LEFT$(COMMAND$,1)="P" THEN GOTO 4260
- IF LEFT$(COMMAND$,1)="T" THEN GOTO 4700
- IF LEFT$(COMMAND$,1)="E" THEN GOTO 5530
- IF LEFT$(COMMAND$,1)="D" THEN GOTO 5690
- IF LEFT$(COMMAND$,1)="C" THEN GOTO 7290
- IF LEFT$(COMMAND$,1)="Q" THEN GOTO 6270
- PRINT "ENTER ONE OF THE FOLLOWING:"
- PRINT "N-AVIGATE"
- PRINT "S-HORT RANGE SCAN"
- PRINT "L-ONG RANGE SCAN"
- PRINT "P-HASERS"
- PRINT "T-ORPEDOS"
- PRINT "E-NGINEERING"
- PRINT "D-AMAGE CONTROL"
- PRINT "C-OMPUTER"
- PRINT "Q-UIT"
- PRINT
- GOTO 2060
- REM**********> COURSE CONTROL BEGINS HERE.
- 2300 PRINT "COURSE (1-9) ";
- INPUT COURSE
- IF COURSE>=1 AND COURSE<=9 THEN \
- GOTO 2350
- PRINT "LT. SULU:";
- PRINT " INCORRECT COURSE DATA, SIR."
- GOOF1=GOOF1+.1
- IF RND+GOOF1>.85 THEN \
- PRINT "MISSION ADVISORY: ";:\
- PRINT "CAPTAIN ";CAPTAIN$;", I STRONGLY SUGGEST YOU GET YOURSELF" :\
- PRINT "ORGANIZED BEFORE THE KLINGONS BLAST YOUR ASS."
- GOTO 2300
- 2350 REM-----COURSE IS OK-----
- 2380 PRINT "WARP FACTOR (0-8) ";
- INPUT WARP
- IF WARP>=0 AND WARP<=8 THEN \
- GOTO 2450 REM WARP OK
- PRINT "ENGINEERING OFCR SCOTT:";
- PRINT "THE ENGINES WON'T TAKE WARP ";WARP;"!"
- GOOF2=GOOF2+.1
- IF RND+GOOF2>.85 THEN \
- PRINT "MISSION ADVISORY: "; :\
- PRINT "WARP ";WARP;"! WHAT A GALACTIC JACKASS!"
- GOTO 2350
- 2450 REM-------
- IF DAMAGE(1)>=0 THEN \
- GOTO 2490
- PRINT DAM$(1);" DAMAGED"
- IF WARP>.2 THEN \
- PRINT "MAXIMUM WARP: 0.2" :\
- GOTO 2350
- 2490 REM
- E.NEEDED=FNROUND(WARP*8)
- IF ENERGY-E.NEEDED>=0 THEN GOTO 2590
- PRINT "ENGINEERING OFCR SCOTT:";
- PRINT "NOT ENOUGH ENERGY LEFT"
- IF SHIELDS<E.NEEDED-ENERGY THEN \
- GOTO 2350 REM ASK FOR NEW WARP
- IF DAMAGE(7)<0 THEN \
- GOTO 2350
- PRINT "SHIELD CONTROL ROOM REPORTS ";SHIELDS;" UNITS"
- PRINT "OF ENERGY PRESENTLY DEPLOYED TO SHIELDS."
- GOTO 5530 REM SHIELD CONTROL
- REM*******> KLINGONS MOVE/FIRE ON MOVING STARSHIP . .
- IF KLINGONS=0 THEN \
- GOTO 2750
- 2590 REM
- FOR I=1 TO KLINGONS
- IF KLING(I,3)<=0 THEN GOTO 2700
- GALAXY$(KLING(I,1),KLING(I,2))=EMPTY$
- GOSUB 9500 REM FIND EMPTY SECTOR
- KLING(I,1)=SX
- KLING(I,2)=SY
- GALAXY$(KLING(I,1),KLING(I,2))=KLINGON$
- 2700 NEXT I
- 2750 REM
- GOSUB 6000 REM KLINGONS SHOOT
- D1=0
- D6=INT(WARP*10)/10
- REM****> MAKE REPAIRS TO THE SHIP.
- 2770 FOR I=1 TO 8
- IF DAMAGE(I)>=0 THEN GOTO 2880
- DAMAGE(I)=DAMAGE(I)+D6
- IF DAMAGE(I)<0 THEN GOTO 2880
- IF D1=0 THEN \
- D1=1 :\
- PRINT "DAMAGE CONTROL REPORT"
- PRINT TAB(8);
- PRINT DAM$(I);
- PRINT TAB(32);"REPAIR COMPLETED"
- 2880 NEXT I
- REM--------> DAMAGE/IMPROVEMENT DURING SOME VES
- IF RND>.2 THEN GOTO 3070
- R1=FN8
- IF RND>=.6 THEN GOTO 3000
- DAMAGE(R1)=DAMAGE(R1)-INT((RND*5+1)*10)/10
- PRINT
- PRINT "DAMAGE CONTROL REPORT:"
- PRINT DAM$(R1);
- PRINT TAB(32);"DAMAGED"
- PRINT
- GOTO 3070
- 3000 REM
- DAMAGE(R1)=DAMAGE(R1)+INT((RND*3+1)*10)/10
- PRINT
- PRINT "DAMAGE CONTROL REPORT:"
- PRINT DAM$(R1);
- PRINT TAB(32);"STATE OF REPAIR IMPROVED"
- PRINT
- 3070 REM-----BEGIN MOVING STARSHIP---------------------
- GALAXY$(EX,EY)=EMPTY$
- T.CRSE=INT(COURSE)
- DELTA.X=C(T.CRSE,1)+(C(T.CRSE+1,1)-C(T.CRSE,1))*(COURSE-INT(COURSE))
- X=EX
- Y=EY
- DELTA.Y=C(T.CRSE,2)+(C(T.CRSE+1,2)-C(T.CRSE,2))*(COURSE-INT(COURSE))
- OLD.QX=QX
- OLD.QY=QY
- FOR I=1 TO E.NEEDED
- X=X+DELTA.X
- Y=Y+DELTA.Y
- EX=FNROUND(X)
- EY=FNROUND(Y)
- IF EX<1 OR \
- EX>8 OR \
- EY<1 OR \
- EY>8 THEN \
- GOTO 3500
- IF GALAXY$(EX,EY)=EMPTY$ THEN \
- LAST.X=0 :\
- LAST.Y=0 :\
- GOTO 3360
- OBJECT$=GALAXY$(EX,EY)
- IF OBJECT$=KLINGON$ THEN OBJECT$="KLINGON"
- IF OBJECT$=STAR$ THEN OBJECT$="STAR"
- IF OBJECT$=BASE$ THEN OBJECT$="STARBASE"
- IF OBJECT$=CRUD$ THEN OBJECT$="SPACECRUD"
- EX=FNROUND(X-DELTA.X)
- EY=FNROUND(Y-DELTA.Y)
- PRINT BELL$;"LT SULU:";
- PRINT " EMER< NCY STOP!"
- PRINT
- PRINT "MISSION ADVISORY: ";
- PRINT "WE ALMOST RAMMED RIGHT INTO THAT ";OBJECT$;" AT ";
- PRINT "WARP ";WARP;"!!"
- GOOF3=GOOF3+.1
- IF RND+GOOF3>.75 THEN \
- PRINT "CAPTAIN ";CAPTAIN$;", DON'T YOU THINK IT'S TIME" :\
- PRINT "YOU RECONSIDER THAT DESK JOB AT FEDERATION HQ?"
- GOTO 3370
- 3360 NEXT I
- 3370 REM------PUT THE ENTERPRISE IN ITS NEW PLACE-----
- GALAXY$(EX,EY)=ENTERPRISE$
- GOSUB 3910 REM SUBTRACT THE ENERGY NEEDED
- T8=1
- IF WARP<1 THEN \
- T8=.1*INT(10*WARP)
- T=T+T8
- IF T>T0+T9 THEN GOTO 6220
- GOTO 1980 REM SEE IF DOCKED THEN GET COMMAND
-
- 3500 REM-----EXCEEDED QUADRANT LIMITS----------------
- X=8*QX+X+E.NEEDED*DELTA.X
- Y=8*QY+Y+E.NEEDED*DELTA.Y
- QX=INT(X/8)
- QY=INT(Y/8)
- EX=INT(X-QX*8)
- EY=INT(Y-QY*8)
- PERIMETER.FLAG=0
- IF EX=0 THEN \
- QX=QX-1 :\
- EX=8
- IF EY=0 THEN \
- QY=QY-1 :\
- EY=8
- IF QX<1 THEN \
- QX=1:EX=1 :\
- PERIMETER.FLAG=1
- IF QX>8 THEN \
- QX=8:EX=8 :\
- PERIMETER.FLAG=1
- IF QY<1 THEN \
- QY=1:EY=1 :\
- PERIMETER.FLAG=1
- IF QY>8 THEN \
- QY=8:EY=8 :\
- PERIMETER.FLAG=1
- IF PERIMETER.FLAG=0 THEN \
- GOTO 3860
- PRINT "LT. UHURA:"
- PRINT "STARFLEET COMMAND REPORTS:"
- PRINT "'PERMISSION TO CROSS GALACTIC PERIMETER"
- PRINT "IS ";BLNK$;"*DENIED*";NORM$;". SHUT DOWN YOUR ENGINES."
- PRINT "ENGINEERING OFCR SCOTT:";
- PRINT "WARP ENGINES SHUT DOWN"
- PRINT "AT SECTOR ";EX;EY;" OF QUADRANT ";QX;QY;"."
- IF T>T0+T9 THEN GOTO 6220
- 3860 REM
- IF QX=OLD.QX AND QY=OLD.QY THEN \
- GOTO 3370
- T=T+1
- GOSUB 3910 REM SUBTRACT THE NEEDED ENERGY
- GOTO 1320 REM ANNOUNCE THE NEW QUADRANT
-
- 3910 REM---------> MANEUVER ENERGY S/R
- ENERGY=ENERGY-E.NEEDED-10
- IF ENERGY>=0 THEN GOTO 3980
- PRINT "SHIELD CONTROL SUPPLIED ENERGY TO COMPLETE THE MANEUVER."
- IF RND>.6 THEN GOTO 3911
- PRINT "MISSION ADVISORY: ";
- PRINT "CAPTAIN ";CAPTAIN$;
- IF RND>.5 THEN PRINT " THAT WAS EXTREMELY CLOSE EVEN FOR THE ENTERPRISE" :\
- ELSE \
- PRINT " WE'RE GOING TO NEED THOSE SHIELDS BEFORE LONG, YOU KNOW.'"
- 3911 REM
- SHIELDS=SHIELDS+ENERGY
- ENERGY=0
- IF SHIELDS<0 THEN \
- SHIELDS=0
- 3980 RETURN
-
- 4000 REM-----------> LONG RANGE SENSOR SCAN CODE
- IF DAMAGE(3)<0 THEN \
- PRINT DAM$(3);" DAMAGED" :\
- GOTO 1990
- 4030 PRINT DAM$(3);" SCAN FOR QUADRANT ";QX;QY
- PRINT
- FOR J=QY-1 TO QY+1
- Q=0
- FOR I=QX-1 TO QX+1
- Q=Q+1
- IF I<1 OR I>8 OR J<1 OR J>8 THEN \
- PRINT.QUAD(Q)=0 :\
- ELSE \
- PRINT.QUAD(Q)=GALAXY(I,J) :\
- GMAP(I,J)=GALAXY(I,J)
- NEXT I
- FOR Q=1 TO 3
- IF PRINT.QUAD(Q)=0 THEN 4100
- YYY=Q*6
- IF PRINT.QUAD(Q)<100 THEN YYY=YYY+1
- IF PRINT.QUAD(Q)<10 THEN YYY=YYY+1
- PRINT ;TAB(YYY);PRINT.QUAD(Q);
- 4040 NEXT Q
- PRINT : PRINT
- NEXT J
- PRINT
- GOTO 1990
- 4100 PRINT ;TAB(Q*6);"***";
- GOTO 4040
-
- 4260 REM----------> PHASER CONTROL BEGINS HERE
- SX=EX
- SY=EY
- IF KLINGONS=0 THEN \
- PRINT "MISSION ADVISORY: "; :\
- PRINT "SENSORS SHOW NO ENEMY SHIPS IN