10 REM SUPER STARTREK - MAY 16,1978 - REQUIRES 24K MEMORY (AT LEAST) 30 REM 40 REM **** **** STAR TREK **** **** 50 REM **** SIMULATION OF A MISSION OF THE STARSHIP ENTERPRISE, 60 REM **** AS SEEN ON THE STAR TREK TV SHOW. 70 REM **** ORIGINAL PROGRAM BY MIKE MAYFIELD, MODIFIED VERSION 80 REM **** PUBLISHED IN DEC'S "101 BASIC GAMES", BY DAVE AHL. 90 REM **** MODIFICATIONS TO THE LATTER (PLUS DEBUGGING) BY BOB 100 REM *** LEEDOM - APRIL & DECEMBER 1974, 110 REM *** WITH A LITTLE HELP FROM HIS FRIENDS . . . 120 REM *** COMMENTS, EPHITETS, AND SUGGESTIONS SOLICITED -- 130 REM *** SEND TO: R.C. LEEDOM 140 REM *** WESTINGHOSE DEFENSE & ELECTRONICS SYSTEMS CNIR 150 REM *** BOX 746, M.S. 338 160 REM *** BALTIMORE, MD 21203 170 REM *** 180 REM *** CONVERTED TO MICROSOFT 8 K BASIC 3/16/78 BY JOHN BORDERS 190 REM *** LINE NUMBERS FROM VERSION TREK7 OF 1/12/75 PRESERVED AS 200 REM *** MUCH AS POSSIBLE WHILE USING MULTIPLE STATEMENTS PER LINE 201 REM *** - MODIFIED TO RUN ON GRANT SEARLE'S 9-CHIP Z80 COMPUTER 202 REM *** AND DERIVATIVES 04-AUG-2018 BY N.KENDRICK 203 REM *** (LINKER3000-AT-GMAIL.COM) 205 WIDTH 80 209 REM NK: POSITIONING USING ANSI ESCAPE SEQUENCES... 210 PRINT CHR$(27);"[2J";:PRINT CHR$(27);"[3;1H"; 211 PRINT "THE USS ENTERPRISE --- NCC-1701" 212 PRINT CHR$(27);"[4;1H";:PRINT 222 FOR YY=1 TO 40 STEP 2:FOR XX=1 TO 200 : NEXT XX 223 PRINT TAB(YY);" ,------*------," 224 PRINT TAB(YY);" ,------------- '--- ------'" 225 PRINT TAB(YY);" '-------- --' / /" 226 PRINT TAB(YY);" ,---' '-------/ /--," 227 PRINT TAB(YY);" '----------------'" 228 PRINT CHR$(27);"[4;1H";:PRINT:NEXT YY 229 PRINT CHR$(27);"[11;1H"; 260 CLEAR 600 270 Z$=" " 330 DIM G(8,8),C(9,2),K(3,3),N(3),Z(8,8),D(8) 370 T=INT(RND(1)*20+20)*100:T0=T:T9=25+INT(RND(1)*10):D0=0:E=3000:E0=E 440 P=10:P0=P:S9=200:S=0:B9=0:K9=0:X$="":X0$=" IS " 470 DEF FND(D)=SQR((K(I,1)-S1)^2+(K(I,2)-S2)^2) 475 DEF FNR(R)=INT(RND(R)*7.98+1.01) 490 Q1=FNR(1):Q2=FNR(1):S1=FNR(1):S2=FNR(1) 530 FOR I=1 TO 9:C(I,1)=0:C(I,2)=0:NEXT I 540 C(3,1)=-1:C(2,1)=-1:C(4,1)=-1:C(4,2)=-1:C(5,2)=-1:C(6,2)=-1 600 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 670 FOR I=1 TO 8:D(I)=0:NEXT I 710 A1$="NAVSRSLRSPHATORSHEDAMCOMXXX" 820 FOR I=1 TO 8:FOR J=1 TO 8:K3=0:Z(I,J)=0:R1=RND(1) 850 IF R1>.98 THEN K3=3:K9=K9+3:GOTO 980 860 IF R1>.95 THEN K3=2:K9=K9+2:GOTO 980 870 IF R1>.8 THEN K3=1:K9=K9+1 980 B3=0:IF RND(1)>.96 THEN B3=1:B9=B9+1 1040 G(I,J)=K3*100+B3*10+FNR(1):NEXT J:NEXT I:IF K9>T9 THEN T9=K9+1 1100 IF B9<>0 THEN 1200 1150 IF G(Q1,Q2)<200 THEN G(Q1,Q2)=G(Q1,Q2)+100:K9=K9+1 1160 B9=1:G(Q1,Q2)=G(Q1,Q2)+10:Q1=FNR(1):Q2=FNR(1) 1200 K7=K9:IF B9<>1 THEN X$="S":X0$=" ARE " 1230 PRINT"YOUR ORDERS ARE AS FOLLOWS:" 1235 PRINT "--------------------------" 1240 PRINT" DESTROY THE";K9;"KLINGON WARSHIPS WHICH HAVE INVADED" 1250 PRINT" THE GALAXY BEFORE THEY CAN ATTACK FEDERATION HEADQUARTERS" 1260 PRINT" ON STARDATE";T0+T9;CHR$(8);". THIS GIVES YOU";T9; 1261 PRINT"DAYS. THERE";X0$ 1270 PRINT" ";B9; 1271 PRINT"STARBASE";X$;" IN THE GALAXY FOR RESUPPLYING YOUR SHIP." 1280 PRINT: PRINT "PRESS Y TO ACCEPT COMMAND"; 1300 INPUT I5$: 1302 IF LEFT$(I5$,1)="Y" OR LEFT$(I5$,1)="y" THEN 1310 1303 GOTO 1280 1310 PRINT CHR$(26) 1320 Z4=Q1:Z5=Q2:K3=0:B3=0:S3=0:G5=0:D4=.5*RND(1):Z(Q1,Q2)=G(Q1,Q2) 1390 IF Q1<1 OR Q1>8 OR Q2<1 OR Q2>8 THEN 1600 1430 GOSUB 9030:PRINT:IF T0<>T THEN 1490 1460 PRINT"YOUR MISSION BEGINS WITH YOUR STARSHIP LOCATED" 1470 PRINT"IN THE GALACTIC QUADRANT, '";G2$;"'.":GOTO 1500 1490 PRINT"NOW ENTERING ";G2$;" QUADRANT . . ." 1500 PRINT:K3=INT(G(Q1,Q2)*.01):B3=INT(G(Q1,Q2)*.1)-10*K3 1540 S3=G(Q1,Q2)-100*K3-10*B3:IF K3=0 THEN 1590 1560 PRINT TAB(3);CHR$(22);" COMBAT AREA CONDITION RED ";CHR$(22) 1561 IF S>200 THEN PRINT:GOTO 1590 1580 PRINT TAB(3);CHR$(22);" SHIELDS DANGEROUSLY LOW ";CHR$(22) 1581 PRINT 1590 FOR I=1 TO 3:K(I,1)=0:K(I,2)=0:NEXT I 1600 FOR I=1 TO 3:K(I,3)=0:NEXT I:Q$=Z$+Z$+Z$+Z$+Z$+Z$+Z$+LEFT$(Z$,17) 1680 A$="":Z1=S1:Z2=S2:GOSUB 8670:IF K3<1 THEN 1820 1720 FOR I=1 TO K3:GOSUB 8590:A$="+K+":Z1=R1:Z2=R2 1780 GOSUB 8670:K(I,1)=R1:K(I,2)=R2:K(I,3)=S9*(.5+RND(1)):NEXT I 1820 IF B3<1 THEN 1910 1880 GOSUB 8590:A$=">B<":Z1=R1:B4=R1:Z2=R2:B5=R2:GOSUB 8670 1910 FOR I=1 TO S3:GOSUB 8590:A$=" * ":Z1=R1:Z2=R2:GOSUB 8670:NEXT I 1980 GOSUB 6430 1990 IF S+E>10 THEN IF E>10 OR D(7)=0 THEN 2060 2020 PRINT:PRINT TAB(10);CHR$(22);"** FATAL ERROR **";CHR$(22) 2021 PRINT"YOU'VE JUST STRANDED YOUR SHIP IN SPACE." 2030 PRINT"YOU HAVE INSUFFICIENT MANEUVERING ENERGY," 2040 PRINT"AND SHIELD CONTROL IS PRESENTLY INCAPABLE OF" 2050 PRINT"CROSS-CIRCUITING TO ENGINE ROOM!!":PRINT:GOTO 6220 2060 PRINT:INPUT"COMMAND";A$:PRINT 2080 FOR I=1 TO 9:IF LEFT$(A$,3)<>MID$(A1$,3*I-2,3)THEN 2160 2140 ON I GOTO 2300,1980,4000,4260,4700,5530,5690,7290,6270 2160 NEXT I:PRINT"ENTER ONE OF THE FOLLOWING:" 2170 PRINT "--------------------------" 2180 PRINT" NAV (TO SET COURSE)" 2190 PRINT" SRS (FOR SHORT RANGE SENSOR SCAN)" 2200 PRINT" LRS (FOR LONG RANGE SENSOR SCAN)" 2210 PRINT" PHA (TO FIRE PHASERS)" 2220 PRINT" TOR (TO FIRE PHOTON TORPEDOES)" 2230 PRINT" SHE (TO RAISE OR LOWER SHIELDS)" 2240 PRINT" DAM (FOR DAMAGE CONTROL REPORTS)" 2250 PRINT" COM (TO CALL ON LIBRARY-COMPUTER)" 2260 PRINT" XXX (TO RESIGN YOUR COMMAND)":PRINT:GOTO 1990 2300 INPUT"COURSE (0-9)";C1:IF C1=9 THEN C1=1 2310 IF C1>=1 AND C1<9 THEN 2350 2330 PRINT" LT. SULU: 'INCORRECT COURSE DATA, SIR!'":GOTO 1990 2350 X$="8":IF D(1)<0 THEN X$="0.2" 2360 PRINT"WARP FACTOR (0-";X$;")";:INPUT W1:PRINT 2361 IF D(1)<0 AND W1>.2 THEN 2470 2380 IF W1>0 AND W1<=8 THEN 2490 2390 IF W1=0 THEN 1990 2420 PRINT" CHIEF ENGINEER SCOTT: 'THE ENGINES WON'T TAKE"; 2430 PRINT" WARP";W1;CHR$(8);"!'":GOTO 1990 2470 PRINT"WARP ENGINES ARE DAMAGED. MAXIUM SPEED = WARP 0.2":GOTO 1990 2490 N=INT(W1*8+.5):IF E-N>=0 THEN 2590 2500 PRINT"ENGINEERING: 'INSUFFICIENT ENERGY AVAILABLE" 2510 PRINT" FOR MANEUVERING AT WARP";W1;CHR$(8);"!'" 2530 IF S=1 THEN D6=1 2770 FOR I=1 TO 8:IF D(I)>=0 THEN 2880 2790 D(I)=D(I)+D6:IF D(I)>-.1 AND D(I)<0 THEN D(I)=-.1:GOTO 2880 2800 IF D(I)<0 THEN 2880 2810 IF D1<>1 THEN D1=1:PRINT"DAMAGE CONTROL REPORT: "; 2840 PRINT TAB(8);:R1=I:GOSUB 8790:PRINT G2$;" REPAIR COMPLETED." 2880 NEXT I:IF RND(1)>.2 THEN 3070 2910 R1=FNR(1):IF RND(1)>=.6 THEN 3000 2930 D(R1)=D(R1)-(RND(1)*5+1):PRINT"DAMAGE CONTROL REPORT: "; 2960 GOSUB 8790:PRINT G2$;" DAMAGED":PRINT:GOTO 3070 3000 D(R1)=D(R1)+RND(1)*3+1:PRINT"DAMAGE CONTROL REPORT: "; 3030 GOSUB 8790:PRINT G2$;" STATE OF REPAIR IMPROVED":PRINT 3070 A$=" ":Z1=INT(S1):Z2=INT(S2):GOSUB 8670 3110 X1=C(C1,1)+(C(C1+1,1)-C(C1,1))*(C1-INT(C1)):X=S1:Y=S2 3140 X2=C(C1,2)+(C(C1+1,2)-C(C1,2))*(C1-INT(C1)):Q4=Q1:Q5=Q2 3170 FOR I=1 TO N:S1=S1+X1:S2=S2+X2 3171 IF S1<1 OR S1>=9 OR S2<1 OR S2>=9 THEN 3500 3240 S8=INT(S1)*24+INT(S2)*3-26:IF MID$(Q$,S8,2)=" "THEN 3360 3320 S1=INT(S1-X1):S2=INT(S2-X2):PRINT"WARP ENGINES SHUT DOWN AT "; 3350 PRINT"SECTOR";S1;CHR$(8);",";S2;"DUE TO BAD NAVIGATION":GOTO 3370 3360 NEXT I:S1=INT(S1):S2=INT(S2) 3370 A$="":Z1=INT(S1):Z2=INT(S2):GOSUB 8670:GOSUB 3910:T8=1 3430 IF W1<1 THEN T8=.1*INT(10*W1) 3450 T=T+T8:IF T>T0+T9 THEN 6220 3480 GOTO 1980 3500 X=8*Q1+X+N*X1:Y=8*Q2+Y+N*X2:Q1=INT(X/8):Q2=INT(Y/8):S1=INT(X-Q1*8) 3550 S2=INT(Y-Q2*8):IF S1=0 THEN Q1=Q1-1:S1=8 3590 IF S2=0 THEN Q2=Q2-1:S2=8 3620 X5=0:IF Q1<1 THEN X5=1:Q1=1:S1=1 3670 IF Q1>8 THEN X5=1:Q1=8:S1=8 3710 IF Q2<1 THEN X5=1:Q2=1:S2=1 3750 IF Q2>8 THEN X5=1:Q2=8:S2=8 3790 IF X5=0 THEN 3860 3800 PRINT"LT. UHURA: MESSAGE FROM STARFLEET COMMAND --" 3810 PRINT" 'PERMISSION TO ATTEMPT CROSSING OF GALACTIC PERIMETER" 3820 PRINT" IS HEREBY *DENIED*. SHUT DOWN YOUR ENGINES.'" 3830 PRINT"CHIEF ENGINEER SCOTT: 'WARP ENGINES SHUT DOWN" 3840 PRINT" AT SECTOR";S1;CHR$(8);",";S2;"OF QUADRANT"; 3841 PRINT Q1;CHR$(8);",";Q2;CHR$(8);".'" 3850 IF T>T0+T9 THEN 6220 3860 IF 8*Q1+Q2=8*Q4+Q5 THEN 3370 3870 T=T+1:GOSUB 3910:GOTO 1320 3910 E=E-N-10:IF E>=0 THEN RETURN 3930 PRINT"SHIELD CONTROL SUPPLIES ENERGY TO COMPLETE THE MANEUVER." 3940 S=S+E:E=0:IF S<=0 THEN S=0 3980 RETURN 4000 IF D(3)<0 THEN PRINT"LONG RANGE SENSORS ARE INOPERABLE.":GOTO 1990 4030 PRINT"LONG RANGE SCAN FOR QUADRANT";Q1;CHR$(8);",";Q2:PRINT 4040 O1$="-------------------":PRINT O1$ 4060 FOR I=Q1-1 TO Q1+1:N(1)=-1:N(2)=-2:N(3)=-3:FOR J=Q2-1 TO Q2+1 4120 IF I>0 AND I<9 AND J>0 AND J<9 THEN N(J-Q2+2)=G(I,J):Z(I,J)=G(I,J) 4180 NEXT J:FOR L=1 TO 3:PRINT"| "; 4181 IF N(L)<0 THEN PRINT"*** ";:GOTO 4230 4210 PRINT RIGHT$(STR$(N(L)+1000),3);" "; 4230 NEXT L:PRINT"|":PRINT O1$:NEXT I:GOTO 1990 4260 IF D(4)<0 THEN PRINT"PHASERS INOPERATIVE.":GOTO 1990 4265 IF K3>0 THEN 4330 4270 PRINT"SCIENCE OFFICER SPOCK: 'SENSORS SHOW NO ENEMY SHIPS" 4280 PRINT" IN THIS QUADRANT'":GOTO 1990 4330 IF D(8)<0 THEN PRINT"COMPUTER FAILURE HAMPERS ACCURACY." 4350 PRINT"PHASERS LOCKED ON TARGET; "; 4360 PRINT"ENERGY AVAILABLE =";E;"UNITS" 4370 INPUT"NUMBER OF UNITS TO FIRE";X:IF X<=0 THEN 1990 4400 IF E-X<0 THEN 4360 4410 E=E-X:IF D(7)<0 THEN X=X*RND(1) 4450 H1=INT(X/K3):FOR I=1 TO 3:IF K(I,3)<=0 THEN 4670 4480 H=INT((H1/FND(0))*(RND(1)+2)):IF H>.15*K(I,3)THEN 4530 4500 PRINT"SENSORS SHOW NO DAMAGE TO ENEMY AT";K(I,1);CHR$(8); 4501 PRINT",";K(I,2);CHR$(8);".":GOTO 4670 4530 K(I,3)=K(I,3)-H:PRINT H;"UNIT HIT ON KLINGON AT SECTOR"; 4531 PRINT K(I,1);CHR$(8);","; 4550 PRINT K(I,2);CHR$(8);".":IF K(I,3)<=0 THEN PRINT:PRINT CHR$(22); 4551 PRINT"*** KLINGON DESTROYED ***";CHR$(22):PRINT:GOTO 4580 4560 PRINT" (SENSORS SHOW";K(I,3);"UNITS REMAINING)":GOTO 4670 4580 K3=K3-1:K9=K9-1:Z1=K(I,1):Z2=K(I,2):A$=" ":GOSUB 8670 4650 K(I,3)=0:G(Q1,Q2)=G(Q1,Q2)-100:Z(Q1,Q2)=G(Q1,Q2):IF K9<=0 THEN 6370 4670 NEXT I:GOSUB 6000:GOTO 1990 4700 IF P<=0 THEN PRINT"ALL PHOTON TORPEDOES EXPENDED.":GOTO 1990 4730 IF D(5)<0 THEN PRINT"PHOTON TUBES ARE NOT OPERATIONAL.":GOTO 1990 4760 INPUT"PHOTON TORPEDO COURSE (1-9)";C1:IF C1=9 THEN C1=1 4780 IF C1>=1 AND C1<9 THEN 4850 4790 PRINT"ENSIGN CHEKOV: 'INCORRECT COURSE DATA, SIR!'" 4800 GOTO 1990 4850 X1=C(C1,1)+(C(C1+1,1)-C(C1,1))*(C1-INT(C1)):E=E-2:P=P-1 4860 X2=C(C1,2)+(C(C1+1,2)-C(C1,2))*(C1-INT(C1)):X=S1:Y=S2 4910 PRINT"TORPEDO TRACK:" 4920 X=X+X1:Y=Y+X2:X3=INT(X+.5):Y3=INT(Y+.5) 4960 IF X3<1 OR X3>8 OR Y3<1 OR Y3>8 THEN 5490 5000 PRINT" ";X3;CHR$(8);",";Y3:A$=" ":Z1=X:Z2=Y 5001 GOSUB 8830 5050 IF Z3<>0 THEN 4920 5060 A$="+K+":Z1=X:Z2=Y:GOSUB 8830:IF Z3=0 THEN 5210 5110 PRINT:PRINT CHR$(22);"*** KLINGON DESTROYED ***";CHR$(22) 5111 PRINT:K3=K3-1:K9=K9-1:IF K9<=0 THEN 6370 5150 FOR I=1 TO 3:IF X3=K(I,1)AND Y3=K(I,2)THEN 5190 5180 NEXT I:I=3 5190 K(I,3)=0:GOTO 5430 5210 A$=" * ":Z1=X:Z2=Y:GOSUB 8830:IF Z3=0 THEN 5280 5260 PRINT"STAR AT";X3;",";Y3;"ABSORBED TORPEDO ENERGY.":GOSUB 6000 5261 GOTO 1990 5280 A$=">!<":Z1=X:Z2=Y:GOSUB 8830:IF Z3=0 THEN 4760 5330 PRINT CHR$(22);"*** STARBASE DESTROYED ***";CHR$(22) 5331 B3=B3-1:B9=B9-1 5360 IF B9>0 OR K9>T-T0-T9 THEN 5400 5370 PRINT"THAT DOES IT, CAPTAIN!! YOU ARE HEREBY RELIEVED OF COMMAND" 5380 PRINT"AND SENTENCED TO 99 STARDATES AT HARD LABOR ON CYGNUS 12!!" 5390 GOTO 6270 5400 PRINT"STARFLEET COMMAND REVIEWING YOUR RECORD TO CONSIDER" 5410 PRINT"COURT MARTIAL!":D0=0 5430 Z1=X:Z2=Y:A$=" ":GOSUB 8670 5470 G(Q1,Q2)=K3*100+B3*10+S3:Z(Q1,Q2)=G(Q1,Q2):GOSUB 6000:GOTO 1990 5490 PRINT"TORPEDO MISSED.":PRINT:GOSUB 6000:GOTO 1990 5530 IF D(7)<0 THEN PRINT"SHIELD CONTROL INOPERABLE.":GOTO 1990 5560 PRINT"ENERGY AVAILABLE =";E+S;:INPUT"NUMBER OF UNITS TO SHIELDS";X 5580 IF X<0 OR S=X THEN PRINT"":GOTO 1990 5590 IF X<=E+S THEN 5630 5600 PRINT"SHIELD CONTROL: 'THIS IS NOT THE FEDERATION TREASURY.'" 5610 PRINT"":GOTO 1990 5630 E=E+S-X:S=X:PRINT"DEFLECTOR CONTROL ROOM:" 5660 PRINT" 'SHIELDS NOW AT";INT(S);"UNITS PER YOUR COMMAND.'" 5661 GOTO 1990 5690 IF D(6)>=0 THEN 5910 5700 PRINT"DAMAGE CONTROL REPORT NOT AVAILABLE.":IF D0=0 THEN 1990 5720 D3=0:FOR I=1 TO 8:IF D(I)<0 THEN D3=D3+.1 5760 NEXT I:IF D3=0 THEN 1990 5780 PRINT:D3=D3+D4:IF D3>=1 THEN D3=.9 5810 PRINT"TECHNICIANS STANDING BY TO EFFECT REPAIRS TO YOUR SHIP;" 5820 PRINT"ESTIMATED TIME TO REPAIR:";.01*INT(100*D3);"STARDATES." 5840 INPUT"WILL YOU AUTHORIZE THE REPAIR ORDER (Y/N)";A$ 5860 IF A$<>"Y"THEN 1990 5870 FOR I=1 TO 8:IF D(I)<0 THEN D(I)=0 5890 NEXT I:T=T+D3+.1 5910 PRINT:PRINT"DEVICE STATE OF REPAIR" 5911 PRINT"------ ---------------":FOR R1=1 TO 8 5920 GOSUB 8790:PRINT G2$;LEFT$(Z$,25-LEN(G2$));INT(D(R1)*100)*.01 5950 NEXT R1:PRINT:IF D0<>0 THEN 5720 5980 GOTO 1990 6000 IF K3<=0 THEN RETURN 6010 IF D0<>0 THEN PRINT"STARBASE SHIELDS PROTECT THE ENTERPRISE." 6011 RETURN 6040 FOR I=1 TO 3:IF K(I,3)<=0 THEN 6200 6060 H=INT((K(I,3)/FND(1))*(2+RND(1))) 6061 S=S-H:K(I,3)=K(I,3)/(3+RND(0)) 6080 PRINT:PRINT H;"UNIT HIT ON ENTERPRISE FROM SECTOR"; 6081 PRINT K(I,1);CHR$(8);",";K(I,2);CHR$(8);"." 6090 IF S<=0 THEN 6240 6100 PRINT" ":IF H<20 THEN 6200 6120 IF RND(1)>.6 OR H/S<=.02 THEN 6200 6140 R1=FNR(1):D(R1)=D(R1)-H/S-.5*RND(1):GOSUB 8790 6170 PRINT"DAMAGE CONTROL: '";G2$;" DAMAGED BY THE HIT'" 6200 NEXT I:RETURN 6220 PRINT:PRINT"IT IS STARDATE";T;CHR$(8);".":PRINT:GOTO 6270 6240 PRINT:PRINT"THE ENTERPRISE HAS BEEN DESTROYED. THE FEDERATION "; 6250 PRINT"WILL BE CONQUERED.":GOTO 6220 6270 PRINT"THERE WERE";K9;"KLINGON BATTLE CRUISERS LEFT AT" 6280 PRINT"THE END OF YOUR MISSION." 6290 PRINT:PRINT:IF B9=0 THEN 6360 6310 PRINT"THE FEDERATION IS IN NEED OF A NEW STARSHIP COMMANDER" 6320 PRINT"FOR A SIMILAR MISSION -- IF THERE IS A VOLUNTEER," 6330 INPUT"LET HIM STEP FORWARD AND ENTER 'AYE'";A$:IF A$="AYE"THEN 10 6360 PRINT:PRINT "BACK TO SYSTEM.":END 6370 PRINT"CONGRATULATIONS, CAPTAIN! THE LAST KLINGON BATTLE CRUISER" 6380 PRINT"MENACING THE FEDERATION HAS BEEN DESTROYED.":PRINT 6400 PRINT"YOUR EFFICIENCY RATING IS";1000*(K7/(T-T0))^2:GOTO 6290 6430 FOR I=S1-1 TO S1+1:FOR J=S2-1 TO S2+1 6450 IF INT(I+.5)<1 OR INT(I+.5)>8 THEN 6540 6451 IF INT(J+.5)<1 OR INT(J+.5)>8 THEN 6540 6490 A$=">B<":Z1=I:Z2=J:GOSUB 8830:IF Z3=1 THEN 6580 6540 NEXT J:NEXT I:D0=0:GOTO 6650 6580 D0=1:C$="DOCKED":E=E0:P=P0 6620 PRINT"SHIELDS DROPPED FOR DOCKING PURPOSES.":S=0:GOTO 6720 6650 IF K3>0 THEN C$="*RED*":GOTO 6720 6660 C$="GREEN":IF E=0 THEN 6770 6730 PRINT:PRINT"*** SHORT RANGE SENSORS ARE OUT ***":PRINT:RETURN 6770 O1$=" +--1---2---3---4---5---6---7---8-+":PRINT O1$ 6771 FOR I=1 TO 8:PRINT I;"|"; 6820 FOR J=(I-1)*24+1 TO(I-1)*24+22 STEP 3:PRINT" ";MID$(Q$,J,3); 6821 NEXT J:PRINT"|";I; 6830 ON I GOTO 6850,6900,6960,7020,7070,7120,7180,7240 6850 PRINT" STARDATE ";:PRINT INT(T*10)*.1 6851 GOTO 7260 6900 PRINT" CONDITION "; 6901 IF C$="*RED*" THEN PRINT CHR$(22);"*RED*";CHR$(22):GOTO 7260 6902 IF C$="DOCKED" THEN PRINT CHR$(22);"DOCKED";CHR$(22):GOTO 7260 6903 PRINT C$: GOTO 7260 6960 PRINT" QUADRANT ";Q1;CHR$(8);",";Q2;CHR$(8) 6961 GOTO 7260 7020 PRINT" SECTOR ";S1;CHR$(8);",";S2;CHR$(8) 7021 GOTO 7260 7070 PRINT" PHOTON TORPEDOES ";:PRINT INT(P) 7071 GOTO 7260 7120 PRINT" TOTAL ENERGY ";:PRINT INT(E+S) 7121 GOTO 7260 7180 PRINT" SHIELDS ";:PRINT INT(S) 7181 GOTO 7260 7240 PRINT" KLINGONS REMAINING";:PRINT INT(K9) 7260 NEXT I:PRINT O1$:RETURN 7290 IF D(8)<0 THEN PRINT"COMPUTER DISABLED.":GOTO 1990 7320 INPUT"COMPUTER ACTIVE AND AWAITING COMMAND";A:IF A<0 THEN 1990 7350 PRINT:H8=1:ON A+1 GOTO 7540,7900,8070,8500,8150,7400 7360 PRINT"FUNCTIONS AVAILABLE FROM LIBRARY-COMPUTER:" 7365 PRINT "-----------------------------------------":PRINT 7370 PRINT" 0 = CUMULATIVE GALTIC RECORD" 7372 PRINT" 1 = STATUS REPORT" 7374 PRINT" 2 = PHOTON TORPEDO DATA" 7376 PRINT" 3 = STARBASE NAV DATA" 7378 PRINT" 4 = DIRECTION/DISTANCE CALCULATOR" 7380 PRINT" 5 = GALAXY 'REGION NAME' MAP":PRINT:GOTO 7320 7400 H8=0:G5=1:PRINT" THE GALAXY":GOTO 7550 7540 REM 7542 REM 7543 PRINT:PRINT" "; 7544 PRINT"COMPUTER RECORD OF GALAXY FOR QUADRANT";Q1;CHR$(8);",";Q2 7546 PRINT 7550 PRINT" 1 2 3 4 5 6 7 8" 7560 O1$=" +-----+-----+-----+-----+-----+-----+-----+-----+" 7570 PRINT O1$:FOR I=1 TO 8:PRINT I;" ";:IF H8=0 THEN 7740 7630 FOR J=1 TO 8:PRINT"| ";:IF Z(I,J)=0 THEN PRINT"*** ";:GOTO 7720 7700 PRINT RIGHT$(STR$(Z(I,J)+1000),3);" "; 7720 IF J=8 THEN PRINT "|" 7721 NEXT J:GOTO 7850 7740 Z4=I:Z5=1:GOSUB 9030:J0=INT(15-.5*LEN(G2$)):PRINT TAB(J0);G2$; 7800 Z5=5:GOSUB 9030:J0=INT(39-.5*LEN(G2$)):PRINT TAB(J0);G2$ 7850 PRINT O1$:NEXT I:PRINT:GOTO 1990 7900 PRINT " STATUS REPORT:":PRINT " -------------":X$="" 7901 IF K9>1 THEN X$="S" 7940 PRINT K9;"KLINGON";X$;" LEFT." 7960 PRINT" MISSION MUST BE COMPLETED IN";.1*INT((T0+T9-T)*10); 7961 PRINT"STARDATES." 7970 X$="S":IF B9<2 THEN X$="":IF B9<1 THEN 8010 7980 PRINT" THE FEDERATION IS MAINTAINING";B9; 7981 PRINT"STARBASE";X$;" IN THE GALAXY." 7990 GOTO 5690 8010 PRINT"YOUR STUPIDITY HAS LEFT YOU ON YOUR OWN IN" 8020 PRINT" THE GALAXY -- YOU HAVE NO STARBASES LEFT!":GOTO 5690 8070 IF K3<=0 THEN 4270 8080 X$="":IF K3>1 THEN X$="S" 8090 PRINT"FROM ENTERPRISE TO KLINGON BATTLE CRUSER";X$ 8100 H8=0:FOR I=1 TO 3:IF K(I,3)<=0 THEN 8480 8110 W1=K(I,1):X=K(I,2) 8120 C1=S1:A=S2:GOTO 8220 8150 PRINT"DIRECTION/DISTANCE CALCULATOR:" 8160 PRINT"YOU ARE AT QUADRANT ";Q1;CHR$(8);",";Q2;" SECTOR "; 8161 PRINT S1;CHR$(8);",";S2;CHR$(8);"." 8170 INPUT"PLEASE ENTER INITIAL COORDINATES (X,Y)";C1,A 8200 INPUT"FINAL COORDINATES (X,Y)";W1,X 8220 X=X-A:A=C1-W1:IF X<0 THEN 8350 8250 IF A<0 THEN 8410 8260 IF X>0 THEN 8280 8270 IF A=0 THEN C1=5:GOTO 8290 8280 C1=1 8290 IF ABS(A)<=ABS(X)THEN 8330 8310 PRINT"DIRECTION =";C1+(((ABS(A)-ABS(X))+ABS(A))/ABS(A)):GOTO 8460 8330 PRINT"DIRECTION =";C1+(ABS(A)/ABS(X)):GOTO 8460 8350 IF A>0 THEN C1=3:GOTO 8420 8360 IF X<>0 THEN C1=5:GOTO 8290 8410 C1=7 8420 IF ABS(A)>=ABS(X)THEN 8450 8430 PRINT"DIRECTION =";C1+(((ABS(X)-ABS(A))+ABS(X))/ABS(X)):GOTO 8460 8450 PRINT"DIRECTION =";C1+(ABS(X)/ABS(A)) 8460 PRINT"DISTANCE =";SQR(X^2+A^2):IF H8=1 THEN 1990 8480 NEXT I:GOTO 1990 8500 IF B3<>0 THEN PRINT"FROM ENTERPRISE TO STARBASE:" 8501 W1=B4:X=B5:GOTO 8120 8510 PRINT"MR. SPOCK: 'SENSORS SHOW NO STARBASES IN THIS QUADRANT.'""; 8520 GOTO 1990 8590 R1=FNR(1):R2=FNR(1):A$=" ":Z1=R1:Z2=R2:GOSUB 8830 8591 IF Z3=0 THEN 8590 8600 RETURN 8670 S8=INT(Z2-.5)*3+INT(Z1-.5)*24+1 8675 IF LEN(A$)<>3 THEN PRINT"ERROR":STOP 8680 IF S8=1 THEN Q$=A$+RIGHT$(Q$,189):RETURN 8690 IF S8=190 THEN Q$=LEFT$(Q$,189)+A$:RETURN 8700 Q$=LEFT$(Q$,S8-1)+A$+RIGHT$(Q$,190-S8):RETURN 8790 ON R1 GOTO 8792,8794,8796,8798,8800,8802,8804,8806 8792 G2$="WARP ENGINES":RETURN 8794 G2$="SHORT RANGE SENSORS":RETURN 8796 G2$="LONG RANGE SENSORS":RETURN 8798 G2$="PHASER CONTROL":RETURN 8800 G2$="PHOTON TUBES":RETURN 8802 G2$="DAMAGE CONTROL":RETURN 8804 G2$="SHIELD CONTROL":RETURN 8806 G2$="LIBRARY-COMPUTER":RETURN 8830 Z1=INT(Z1+.5):Z2=INT(Z2+.5):S8=(Z2-1)*3+(Z1-1)*24+1:Z3=0 8890 IF MID$(Q$,S8,3)<>A$THEN RETURN 8900 Z3=1:RETURN 9030 IF Z5<=4 THEN ON Z4 GOTO 9040,9050,9060,9070,9080,9090,9100,9110 9035 GOTO 9120 9040 G2$="ANTARES":GOTO 9210 9050 G2$="RIGEL":GOTO 9210 9060 G2$="PROCYON":GOTO 9210 9070 G2$="VEGA":GOTO 9210 9080 G2$="CANOPUS":GOTO 9210 9090 G2$="ALTAIR":GOTO 9210 9100 G2$="SAGITTARIUS":GOTO 9210 9110 G2$="POLLUX":GOTO 9210 9120 ON Z4 GOTO 9130,9140,9150,9160,9170,9180,9190,9200 9130 G2$="SIRIUS":GOTO 9210 9140 G2$="DENEB":GOTO 9210 9150 G2$="CAPELLA":GOTO 9210 9160 G2$="BETELGEUSE":GOTO 9210 9170 G2$="ALDEBARAN":GOTO 9210 9180 G2$="REGULUS":GOTO 9210 9190 G2$="ARCTURUS":GOTO 9210 9200 G2$="SPICA" 9210 IF G5<>1 THEN ON Z5 GOTO 9230,9240,9250,9260,9230,9240,9250,9260 9220 RETURN 9230 G2$=G2$+" I":RETURN 9240 G2$=G2$+" II":RETURN 9250 G2$=G2$+" III":RETURN 9260 G2$=G2$+" IV":RETURN 9999 END