10
70 :
90 ENVELOPE1,1,0,0,0,0,0,0,126,0,0,-2,126,126
100 ENVELOPE2,1,1,0,0,255,0,0,126,0,0,-2,126,126
110 ENVELOPE3,1,8,1,0,0,0,0,16,0,0,-2,126,126
120 MODE7:VDU23;8202;0;0;0;
130 VDU&A,&81,&9D,&93,&A,&D
135 VDU&81,&9D,&93,&7E,&2F,&2F,&FF,&6A,&2F,&FF,&2F,&35,&FF,&2F,&6F,&35,&FF,&2F,&6F,&34,&20,&6A,&2F,&FF,&2F,&35,&FF,&2F,&6F,&34,&FF,&2F,&2F,&35,&FF,&20,&78,&37,&20,&20
140 VDU&81,&9D,&93,&FF,&70,&70,&70,&20,&20,&FF,&20,&20,&FF,&2C,&6E,&35,&FF,&2C,&6E,&21,&20,&20,&20,&FF,&20,&20,&FF,&2C,&6E,&21,&FF,&2C,&2C,&20,&FF,&70,&3F,&20,&20,&20
145 VDU&81,&9D,&93,&20,&20,&20,&FF,&20,&20,&FF,&20,&20,&FF,&20,&6A,&35,&FF,&20,&6A,&35,&20,&20,&20,&FF,&20,&20,&FF,&20,&6A,&35,&FF,&7C,&7C,&35,&FF,&60,&7D,&20,&20,&20
150 VDU&81,&9D,&93,&FF,&7C,&7C,&3F,&28,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&24,&FF,&20,&2A,&75,&20,&20,&81,&9D,&93
160 PRINTTAB(11,6);CHR$&86;CHR$&9C;"T h e G a m e";CHR$&81;CHR$&9D
170 PRINTCHR$&91;STRING$(39,CHR$(&60))
180 R1=RND(-TIME)
190 DIMG(8,8),Z(8,8),C(9,2),K(3,3),N(3),D(9),Q$(9,9),D$(9)
200 DATA warp engines,s.r.sensors,l.r.sensors,phaser control,photon tubes,damage control,shield control,central computer,hyperprobe launcher
210 C(1,1)=-1:C(2,1)=-1:C(7,2)=-1
220 C(8,1)=-1:C(8,2)=-1:C(6,2)=-1
230 C(9,1)=-1:C(1,2)=0:C(3,1)=0
240 C(5,2)=0:C(7,1)=0:C(9,2)=0
250 C(2,2)=1:C(3,2)=1:C(4,1)=1
260 C(4,2)=1:C(5,1)=1:C(6,1)=1
270 CM$="NAVSRSLRSPHATORSHECOMMAPDAMHYPRES"
280 CP$="MAPSTAPTDCCMKLIACTCOMDOCMOV"
290 FORI%=1TO9:READ D$(I%):NEXT
300 ON ERROR:IFERR=17 PRINT'CHR$&83"Resignation accepted.":GOTO2370 ELSE IFERR<>18 REPORT:PRINT" in line ";ERL:GOTO880 ELSE 880
320 T=(INT((RND(1)+3)*1E4))/10:T0=T
330 T9=25+INT(RND(10)):T8=T9+T:Q4=0
340 S9=200:E0=4000:P0=10:P=P0:E=E0:S=0
350 FORI%=1TO9:D(I%)=4:NEXT
360 FORI%=1TO8:FORJ%=1TO8
370 R1=RND(1):K3=0
380 IFR1>.8 THEN K3=1
390 IFR1>.95 THEN K3=2
400 IFR1>.98 THEN K3=3
410 K9=K9+K3:R1=RND(1):B3=0:IFR1>.96 THEN B3=1
420 B9=B9+B3:S3=RND(8):G(I%,J%)=K3*100+B3*10+S3
430 Z(I%,J%)=0:NEXT:NEXT
440 IFB9>0 THEN 460
450 G(6,3)=G(6,3)+10:B9=1
460 PRINT TAB(0,9);:VDU&84,&9D,&D,&A,&84,&9D,&87:PRINT"Your orders are as follows:"
470 VDU&84,&9D,&87,&A,&D,&84,&9D,&86:PRINT" Seek & destroy the ";K9;" Klingons"
480 VDU&84,&9D,&86:PRINT" which have invaded Federation"'CHR$&84;CHR$&9D;CHR$&86;" territory."
490 A$="is ":C$=" ":IFB9>1 THEN A$="are ":C$="s "
500 VDU&84,&9D,&86,&A,&D,&84,&9D,&86:PRINT" There ";A$;B9;" starbase";C$;"at your"
510 VDU&84,&9D,&86:PRINT" disposal and you have until ";T8
520 VDU&84,&9D,&86:PRINT" to complete in.":VDU&84,&9D
530 PRINTTAB(0,22);:VDU&81,&9D,&87:PRINT"Press SPACE BAR when ready to assume"
540 PRINTTAB(0,23);:VDU&81,&9D,&87:PRINT"command of Enterprise."
550 Q1=RND(8):Q2=RND(8):S1=RND(8):S2=RND(8)
560 REPEAT UNTIL GET=&20:CLS:VDU23;4618;0;0;0;
570 PRINT" Your mission begins with your ship"'" located in the galactic quadrant ";Q2;",";Q1:GOTO590
580 PRINT" Now entering quadrant ";Q2;",";Q1;" sector ";S2;",";S1
590 IFQ1<1 OR Q1>8 OR Q2<1 ORQ2>8 THEN 660
600 IFG(Q1,Q2)=-1 THEN 3680
610 X=G(Q1,Q2)*.01:Z(Q1,Q2)=G(Q1,Q2)
620 K3=INT(X):B3=INT((X-K3)*10)
630 S3=G(Q1,Q2)-INT(G(Q1,Q2)*.1)*10
640 IFK3=0 THEN 710
650 IFS>200 THEN 710 ELSE PRINTCHR$7;CHR$131"WARNING!!! SHIELD POWER ONLY ";S;" UNITS":GOTO710
660 VDU129:PRINT"WARNING:"'CHR$129"You are at galactic coordinate"
670 VDU129:PRINT;Q2+S2/10;",";Q1+S1/10;" which is outside your"
680 VDU129:PRINT"operations area."
690 VDU129:PRINT"Enterprise does not carry charts for"'CHR$129"this region."
700 PRINT:GOTO880
710 FORI%=1TO8:FORJ%=1TO8:Q$(I%,J%)=" ":NEXT:NEXT:Q$(S1,S2)=CHR$134+"-E-"
720 IFK3<=0 THEN 750
730 FORI%=1TOK3:PROCrnd:Q$(R1,R2)=CHR$(129)+"+K+"
740 K(I%,1)=R1:K(I%,2)=R2:K(I%,3)=S9:NEXT
750 IFB3<1 THEN 770
760 PROCrnd:Q$(R1,R2)=CHR$(134)+">!<"
770 IFS3<=0 THEN 800
780 FORI%=1TOS3:PROCrnd:Q$(R1,R2)=CHR$131+"* ":NEXT
790 PROCDOK
800 GOTO2600
810 PROCATAK
820 IFRND(1)>0.98 PROCnova
830 IFRND(1)>.5 PROCproberet
840 IFRND(1)>.99 PROCmystery
850 IFRND(1)>.996 PROCdilithium
860 IFRND(1)>.99 PROCneutron
870 PROCREP
880 L%=0:VDU&86:INPUT"Command: "A$:PROCUP:CLS:FORI%=1TO11
890 IFLEFT$(A$,3)=MID$(CM$,3*I%-2,3) THEN L%=I%
900 NEXT:PROCANAL:IFL%>0 THEN 1020
910 PRINT'" NAV = Set course (0-8)"
920 PRINT" SRS = Short Range Scan"
930 PRINT" LRS = Long Range Scan"
940 PRINT" PHA = To fire PHAsors"
950 PRINT" TOR = To fire TORpedoes"
960 PRINT" SHE = Shield control"
970 PRINT" COM = To access central computer"
980 PRINT" DAM = For damage report"
990 PRINT" HYP = To send hyperprobe"
1000 PRINT" RES = To resign"
1010 GOTO880
1020 ON L% GOTO1030,2600,1390,1500,1680,1980,2690,2880,2090,3630,2370
1030 IFLEN(A$)<=4 THEN 1090
1040 IFL2<L1L2=LEN(A$)+1
1050 C1=VAL(MID$(A$,L1+1,L2-L1-1))
1060 IFL2=LEN(A$)+1 THEN 1100
1070 W1=VAL(MID$(A$,L2+1,LEN(A$)-L2))
1080 GOTO1110
1090 INPUT" Bearing (0-8): "C1
1100 INPUT" Warp (0-8): "W1
1110 CLS:C1=C1+1:IFC1=9 THEN C1=1
1120 IFC1>9 OR C1<1 THEN 880
1130 IFW1>8 OR W1<.1 THEN 880
1140 IFW1<=.2 THEN 1160
1150 IFD(1)<0 VDU7:PRINTCHR$&88"Warp drive is disabled."' CHR$&83"Impulse power max speed=0.2":GOTO1090
1160 N=INT((W1+.0625)*8)
1170 IFE-N>0 THEN 1190
1180 VDU7,&88:PRINT"Insufficient energy.":IFE<=0 AND S<=0 THEN 2330 ELSE 810
1190 Q$(S1,S2)=" ":X=S1:Y=S2:PROCXY
1200 I%=0
1210 S1=S1+X1:S2=S2+X2
1220 IFS1<1 OR S1>8 OR S2<1 OR S2>8 THEN 1320
1230 IFQ$(S1,S2)=" " THEN 1260
1240 S1=INT(S1-X1):S2=INT(S2-X2)
1250 PRINT" Warp engines shut down at sector ";S2;",";S1'" due to bad navigation.":GOTO1270
1260 I%=I%+1:IFI%<N THEN 1210
1270 S1=INT(S1+.5):S2=INT(S2+.5):Q$(S1,S2)=CHR$(134)+"-E-"
1280 E=E-N:T=(INT(10*T+1.1))/10:IFW1<1 THEN 1300
1290 T=(INT(10*T+9))/10
1300 IFT>T0+T9 THEN 2340
1310 PROCDOK:PRINT:GOTO2600
1320 X=Q1*8+X+X1*N:Y=Q2*8+Y+X2*N
1330 Q1=INT(X/8):Q2=INT(Y/8):S1=INT(X-Q1*8):S2=INT(Y-Q2*8)
1340 IFS1<>0 THEN 1360
1350 Q1=Q1-1:S1=8
1360 IFS2<>0 THEN 1380
1370 Q2=Q2-1:S2=8
1380 T=T+1:E=E-N+5:IFT>T0+T9 THEN 2340 ELSE 580
1390 IFD(3)<0 VDU7,&81,&88,&AA,&89:PRINT'"Long range sensors inoperable":GOTO810
1400 PRINTTAB(1,5)"Long Range Scan: Quad ";Q2;",";Q1
1410 SR$=CHR$129+STRING$(19,"_")
1420 PRINTSR$:FORI%=Q1-1 TO Q1+1:N(1)=0:N(2)=0:N(3)=0
1430 FORJ%=Q2-1 TO Q2+1
1440 IFI%>0 AND I%<9 AND J%>0 AND J%<9 THEN N(J%-Q2+2)=G(I%,J%):Z(I%,J%)=G(I%,J%)
1450 NEXT:FORL%=1TO3:PRINTCHR$129": ";
1460 IFN(L%)=0 PRINT" _ ";:GOTO1490
1470 IFN(L%)=-1 PRINT"***";:GOTO1490
1480 PRINTRIGHT$(STR$(N(L%)+1000),3);
1490 NEXT:PRINT" :":PRINTSR$:NEXT:GOTO810
1500 IFK3>0 THEN1530
1510 PRINT" Short range sensors report no Klingons in this quadrant, Captain.":GOTO810
1520 IFD(4)<0 VDU7,129,136,&AA,137:PRINT"Phasors are damaged *":GOTO810
1530 IFLEN(A$)<=4 THEN1550
1540 X=VAL(MID$(A$,L1+1,LEN(A$)-1)):GOTO1570
1550 PRINT" Phasers locked on target"'" Energy available=";E;" units"'
1560 INPUT" Enter number of units to fire: "X
1570 IFX<0 THEN880 ELSE IFE-X<0 THEN1550
1580 E=E-X
1590 SOUND0,3,4,5
1600 PRINTCHR$131"Phaser strike report:"
1610 FORI%=1 TO3:IFK(I%,3)<=0 THEN1670
1620 H=INT(X/K3/(FND(0)/2)):K(I%,3)=K(I%,3)-H
1630 PRINT,H;" unit hit in sector ";K(I%,2);",";K(I%,1)
1640 PRINTTAB(6)"Target shields have ";K(I%,3);" units"
1650 IFK(I%,3)>0 THEN1670
1660 GOSUB2150:IFK9<=0 THEN2380
1670 NEXT:IFE<1 ANDS<1 THEN2330 ELSE810
1680 IFP=0 VDU7,&88:PRINT"All torpedoes expended.":GOTO810
1690 IFD(5)<0 VDU7,129,136,&AA,137:PRINT"Photon tubes are damaged *":GOTO810
1700 IFLEN(A$)<5 THEN1730
1710 C1=VAL(MID$(A$,L1+1,LEN(A$)-L1))
1720 C1=C1+1:IFC1<1 ORC1>9 THEN1730 ELSE1740
1730 INPUT" Torpedo course: "C1:C1=C1+1:IFC1>9 THEN880
1740 PROCXY
1750 X=S1:Y=S2:P=P-1:PRINT" Torpedo track:"
1760 SOUND1,2,0,20
1770 X=X+X1:Y=Y+X2:FORI%=1 TO2000:NEXT
1780 IFX<1 ORX>8 ORY<1 ORY>8 THEN1970
1790 PRINTTAB(20,VPOS-1);INT(Y+.5);",";INT(X+.5):IFINT(X+.25)<> INT(X+.75) THEN1770
1800 IFINT(Y+.25)<> INT(Y+.75) THEN1770
1810 Z1=INT(X+.5):Z2=INT(Y+.5):A$=" ":PROCcheck
1820 IFZ3<>0 THEN1770
1830 A$=CHR$(129)+"+K+":PROCcheck:IFZ3=0 THEN1880
1840 PRINTCHR$131"* KLINGON DESTROYED *":SOUND0,1,6,7:K3=K3-1:K9=K9-1:IFK9<=0 THEN2380
1850 FORI%=1 TO3:IFZ1<>K(I%,1) THEN1870
1860 IFZ2=K(I%,2) THENK(I%,3)=0:Q$(Z1,Z2)=" "
1870 NEXT:GOTO1950
1880 A$=CHR$131+"* ":PROCcheck:IFZ3=0 THEN1900
1890 PRINTCHR$131"Star at sector ";Y;",";X;" absorbed torpedo":IFRND(1)>.8 THEN4020 ELSE810
1900 A$=CHR$134+">!<":PROCcheck
1910 IFZ3=0 THEN1770
1920 VDU131,136:PRINT" *** STARBASE DESTROYED ***":SOUND0,1,6,7
1930 PRINTCHR$129"If you survive, you will appear before"'CHR$129"a court marshall!"
1940 B3=B3-1:B9=B9-1:Q$(Z1,Z2)=" "
1950 G(Q1,Q2)=K3*100+B3*10+S3:Z(Q1,Q2)=G(Q1,Q2)
1960 IFE<1 THEN2350 ELSE810
1970 VDU7,&88:PRINT"Torpedo missed":IFE<1 THEN2350 ELSE810
1980 IFD(7)<0 VDU7,129,136,&AA,137:PRINT"Shield control is not operational":GOTO810
1990 IFLEN(A$)<5 THEN2010
2000 X=VAL(MID$(A$,L1+1,LEN(A$)-L1)):GOTO2030
2010 PRINT" Energy available = ";E+S;" units."
2020 INPUT" Enter num of units to shields: "X
2030 IFX>E+S THEN PRINTCHR$129"This is not the Federation treasury!":GOTO2010
2040 PRINTCHR$131"Deflector control room reports:"
2050 IFX<=0 OR X=S THEN2080
2060 E=E+S-X:S=X
2070 PRINT" < Shields now at ";S;" units >":GOTO810
2080 PRINT" < Shields unchanged at ";S;" units >":GOTO810
2090 IFD(6)>=0 THEN2110
2100 VDU7,129,136,&AA,137:PRINT"Damage report is not available":GOTO880
2110 PRINT'CHR$&82"Device Repair index"
2120 FORI%=1 TO9:PRINTCHR$&82+D$(I%);
2130 PRINTTAB(23);D(I%)
2140 NEXT:PRINT:GOTO810
2150 PRINTCHR$131"* Klingon at ";K(I%,2);",";K(I%,1);" destroyed *":SOUND0,1,6,7
2160 K3=K3-1:K9=K9-1:Z1=K(I%,1):Z2=K(I%,2):Q$(Z1,Z2)=" "
2170 G(Q1,Q2)=K3*100+B3*10+S3:Z(Q1,Q2)=G(Q1,Q2):RETURN
2180 DEF PROCATAK
2190 IFK3=0 THEN2320
2200 A$="s are":IFK3=1A$=" is"
2210 PRINTK3;" Klingon";A$;" attacking."
2220 IFD%=1 PRINT" Starbase shields protect Enterprise.":GOTO2320
2230 I%=1:REPEAT
2240 IFK(I%,3)<=0 THEN2310
2250 H=INT(K(I%,3)/ FND(0)* RND(8))
2260 S=S-H
2270 PRINTH;" unit hit from sector ";K(I%,2);",";K(I%,1)
2280 IFS<0 PRINTCHR$136"*** SHIELDS FAILED ***":GOTO2350
2290 PRINT" * shields holding at ";S;" units."
2300 PROCDAM:PROCMOV
2310 I%=I%+1:UNTILI%=4
2320 ENDPROC
2330 VDU7,&81:PRINT"Enterprise is dead in space!":GOTO2360
2340 PRINT'CHR$&86"It is stardate ";T'CHR$&86"You have run out of time, Lieutenant.":SOUND1,1,127,5:GOTO2370
2350 PRINT'CHR$129"ENTERPRISE HAS BEEN DESTROYED."'CHR$129"The Federation will be conquered."
2360 FORI%=127TO0 STEP-1:SOUND1,-15,I%,1:NEXT
2370 PRINT'CHR$&86"There were" CHR$&88;K9;CHR$&89"Klingons left at the"'CHR$&86"end of your mission.":K9=0:B9=0:GOTO2400
2380 PRINTCHR$134"The last Klingon starship has been des-";CHR$134"troyed. Well done Captain."
2390 FORI%=1TO3:FORJ%=0TO255 STEP12:SOUND1,-15,J%,2:SOUND2,-15,J%+85,2:NEXT:NEXT
2400 PRINT'CHR$131"The Federation is in need of a new"'CHR$131"starship commander for a similar"'CHR$131"mission. If there is a volunteer, let"'CHR$131"him now step forward and enter 'AYE'"'
2410 VDU&86:INPUT">"A$:PROCUP:IFA$="AYE" RUN:CLS:GOTO320 ELSE END
2420 DEFPROCDOK
2430 D%=0:FORI%=S1-1 TO S1+1:FORJ%=S2-1 TO S2+1
2440 IFI%<1 ORI%>8 ORJ%<1 ORJ%>8 THEN2490
2450 A$=CHR$134+">!<":Z1=I%:Z2=J%:PROCcheck
2460 IFZ3=0 THEN2490
2470 D%=1:E=E0:P=P0:S=0
2480 VDU7,130:PRINT"* DOCKED * Shields lowered."
2490 NEXTJ%:NEXTI%:IFD%=0 THEN2590
2500 N%=0:J%=0:FORI%=1 TO9:IFD(I%)<4N%=N%+D(I%)-4:J%=J%+1
2510 NEXT:IFJ%=0 THEN2590 ELSETl=ABS((N%/J%)/4):IFTl>5Tl=5
2520 VDU130:PRINT"Estimated time for full overhaul:"'CHR$130;Tl;" stardates. Do you require a full"'CHR$130"overhaul? ";
2530 INPUT""A$:PROCUP:IFLEFT$(A$,1)="Y"N%=4:T=T+Tl: ELSE PRINTCHR$&86"OK":ENDPROC
2550 FORI%=1TO9:IFD(I%)>=N% GOTO2570
2560 D(I%)=4
2570 NEXT
2580 PRINTCHR$&86"All systems functional and ready."
2590 ENDPROC
2600 IFD(2)<0 VDU7,&81,&88,&AA,&89:PRINT"Short range sensors are out *":GOTO880
2610 C$=CHR$&82+"Green":IFE<E0*.1 THENC$=CHR$&83+CHR$&88+"YELLOW"
2620 IFK3>0 THENC$=CHR$&81+CHR$&88+"*RED*"
2630 IFD%=1 THENC$=CHR$&82+"Docked - shields OFF"
2640 PRINT'" Stardate ";T
2650 PRINT" Condition: ";C$
2660 SR$=CHR$&83+" -1--2--3--4--5--6--7--8-"
2670 PRINTSR$:FORJ%=1 TO8
2680 GOSUB4070:NEXT:PRINTSR$:GOTO880
2690 F%=0:IFD(8)>=0 THEN2710
2700 VDU7,&81,&88,&AA,&89:PRINT"Computer disabled *"':GOTO810
2710 IFLEN(A$)<=4 THEN2740
2720 A$=MID$(A$,L1+1,LEN(A$)-L1)
2730 GOTO2750
2740 VDU&85:INPUT"Program: "A$:PROCUP
2750 L%=0:FORI%=1 TO9
2760 IFLEFT$(A$,3)=MID$(CP$,3*I%-2,3) THENL%=I%
2770 NEXT:PROCANAL:IFL%>0 THEN2870
2780 PRINT" Programs available:"
2790 PRINT" MAP : Cumulative galactic record"
2800 PRINT" STA : Status report"
2810 PRINT" PTD : Photon torpedo data"
2820 PRINT" CCM : Course calculator"
2830 PRINT" KLI : Enemy positions & strengths"
2840 PRINT" ACT : Activates auto torpedo launcher (use with PTD)"
2850 PRINT" COM : Return to COMMAND mode"
2860 PRINT:GOTO2740
2870 ONL% GOTO2890,2970,3080,3140,4030,3510,880,2780,2780
2880 CLS:FORI%=1TO2:VDU132,157,135,141:PRINT" COMPUTER RECORD OF GALAXY":NEXT
2890 VDU132,157,10,13,132,157,135:PRINT" _1___2___3___4___5___6___7___8_"
2900 FORI%=1TO8:VDU132,157,135:PRINT;I%;:FORJ%=1TO8:PRINTTAB(4*J%-1);
2910 IFZ(I%,J%)=-1 PRINT"***";:GOTO2960
2920 IFZ(I%,J%)=0 THEN2950
2930 N%=Z(I%,J%)+1000
2940 PRINT;RIGHT$(STR$(N%),3);:GOTO2960
2950 PRINT" - ";
2960 NEXT:PRINT:VDU132,157,135:PRINT:NEXT:PRINTTAB(10) CHR$131" You are at ";Q2+(S2/10);",";Q1+(S1/10):GOTO810
2970 VDU12,10:FORI%=1 TO2:PRINTTAB(7) CHR$&83+ CHR$&8D"___STATUS REPORT___":NEXT
2980 B$="s":IFB9=1B$=""
2990 VDU10,131:PRINT"It is stardate";CHR$135;T'CHR$131"The Federation is currently maintaining"CHR$135;B9;CHR$131;"starbase";B$;" in this part of the"'CHR$131"galaxy."
3000 PRINTCHR$131"You have";CHR$135;(INT(T8-T)*10)/10;CHR$131"stardates left in which"'CHR$131"to eliminate the";CHR$135;K9;CHR$131"remaining Klingons"'
3010 PRINTCHR$&83"Alert condition.....";C$
3020 PRINTCHR$&83"Quadrant............";CHR$&87;Q2;",";Q1
3030 PRINTCHR$&83"Sector..............";CHR$&87;S2;",";S1
3040 PRINTCHR$&83"Ships energy........";CHR$&87;E
3050 PRINTCHR$&83"Shield energy.......";CHR$&87;S
3060 PRINTCHR$&83"Photon torpedoes....";CHR$&87;P
3070 PRINT:GOTO2740
3080 IFK3=0 THEN1510
3090 PRINTCHR$&83"Aiming data for enemy:"
3100 FORI%=1 TO3:IFK(I%,3)<=0 THEN3130
3110 C1=S1:A=S2:W1=K(I%,1):X=K(I%,2)
3120 PRINTCHR$&83"(";I%;")";:GOSUB3190
3130 NEXT:F%=1:GOTO3430
3140 VDU&85:INPUT"This (s)ector or new (q)uadrant? "A$:PROCUP:IFLEFT$(A$,1)="S"B$="sector" ELSEB$="quadrant":IFA$<>"Q" THEN880
3150 VDU&85:PRINT"Enter ";B$;" coordinates:":VDU&85:INPUT" X: "X:VDU&85:INPUT" Y: "W1:IFX<1 ORX>8 ORW1<1 ORW1>8 THEN880
3160 C1=S1:A=S2:IFB$="quadrant"C1=Q1:A=Q2
3170 PRINTTAB(3)CHR$&83;:GOSUB3190:IFB$="quadrant" PRINTTAB(6,VPOS-1)"Distance: ";INT(SQR(X*X+A*A));STRING$(20," ")
3180 GOTO3430
3190 X=X-A:A=C1-W1
3200 IFX<0 THEN3300
3210 IFA<0 THEN3350
3220 IFX>0 THEN3240
3230 IFA=0 THEN3320
3240 C1=0
3250 IFABS(X)<=ABS(A) THEN3280
3260 DR=C1+(((ABS(X)- ABS(A))+ ABS(X))/ ABS(X))
3270 GOTO3400
3280 DR=C1+(ABS(X)/ ABS(A))
3290 GOTO3400
3300 IFA>0 THEN3340
3310 IFX=0 THEN3350
3320 IFX=0 THEN RETURN
3330 C1=4:GOTO3250
3340 C1=6:GOTO3360
3350 C1=2
3360 IFABS(X)>=ABS(A) THEN3390
3370 DR=C1+(((ABS(A)- ABS(X))+ ABS(A))/ ABS(A))
3380 GOTO3400
3390 DR=C1+(ABS(A)/ ABS(X))
3400 PRINT" Bearing : ";DR
3410 PRINTCHR$&83;TAB(6)"Distance: ";SQR(X*X+A*A)/10
3420 RETURN
3430 IFL1>=LEN(A$) OR LEN(A$)<=4 THEN880
3440 A$=MID$(A$,L1+1,LEN(A$)-L1)
3450 GOTO2750
3460 DEFPROCrnd
3470 R1=RND(8):R2=RND(8)
3480 A$=" ":Z1=R1:Z2=R2:PROCcheck
3490 IFZ3=0 THEN3470
3500 ENDPROC
3510 IFF%<1 PRINT" No aiming data":GOTO2740
3520 IFP=0 VDU7,&81,&88,&AA,&89:PRINT"All torpedoes expended *":GOTO810
3530 IFD(5)<0 VDU7,&81,&88,&AA,&89:PRINT"Photon tubes damaged *":GOTO810
3540 C1=DR+1:GOTO1740
3550 DEFPROCANAL
3560 L1=0:L2=0:FORI%=LEN(A$) TO1 STEP-1
3570 IFMID$(A$,I%,1)=" " THENL1=I%
3580 IFMID$(A$,I%,1)="/" THENL2=I%
3590 NEXT:ENDPROC
3600 DEFPROCcheck
3610 Z3=0:IFQ$(Z1,Z2)=A$ THENZ3=1
3620 ENDPROC
3630 IFD(9)<0 VDU7,&81,&88,&AA,&89:PRINT"Hyperprobe is damaged *":GOTO810
3640 IFQ4<>0 PRINTCHR$&83"Probe already launched.":GOTO810
3650 VDU&86:PRINT"Send probe to quadrant: ":VDU&86:INPUT" X: "Q5:VDU&86:INPUT" Y: "Q4
3660 IFQ4<1 ORQ4>8 ORQ5<1 ORQ5>8 PRINTCHR$&81"Sir, the probe is now on an"' CHR$&81" irretrievable trajectory.":Q4=-1 ELSE PRINTCHR$&83"Probe launched to ";Q5;",";Q4;"; sir."
3670 GOTO810
3680 PRINT' CHR$&85"You have entered a";CHR$&88"SUPERNOVAE";CHR$&89"in ";Q2;",";Q1'
3690 GOTO2350
3700 DEFPROCnova
3710 PROCrnd
3720 IFZ1<>Q1 THEN3740
3730 IFZ2=Q2 THEN3710
3740 IFG(Z1,Z2)=-1 THEN3710
3750 X=G(Z1,Z2)/100
3760 X1=INT(X)
3770 PRINTCHR$&83"Lft. Uhura reports message from SFC:"
3780 PRINT" Space watch has detected supernova in quadrant ";Z2;",";Z1;"."
3790 PRINT" Do NOT enter at sublight speed."
3800 IFX1<=0 GOTO3850
3810 A$="":IFX1=1 GOTO3830
3820 A$="s"
3830 PRINTX1;" Klingon";A$;" destroyed."
3840 K9=K9-X1:IFK9<=0 THEN2380
3850 IF10*(X-X1)<1 THEN3880
3860 PRINT1;" Starbase destroyed."
3870 B9=B9-1
3880 G(Z1,Z2)=-1:Z(Z1,Z2)=-1
3890 PRINTTAB(30)"SFC out."
3900 ENDPROC
3910 DEFPROCproberet:IFQ4<1 THEN ENDPROC
3920 N%=G(Q4,Q5):IFN%<0 PRINTCHR$&83"Lost contact with hyperprobe, sir.":Q4=-1:ENDPROC
3930 PRINT" Hyperprobe returned from ";Q5;",";Q4
3940 PRINTCHR$&83" STATUS..."
3950 PRINTCHR$&81" _______"
3960 Z(Q4,Q5)=G(Q4,Q5)
3970 PRINTCHR$&81" : ";
3980 Z(Q4,Q5)=G(Q4,Q5)
3990 PRINTRIGHT$(STR$(N%+1000),3);" :"
4000 PRINTCHR$&81" _______"
4010 Q4=0:ENDPROC
4020 VDU7,&88:PRINT"You have caused a star to go nova!!":GOTO2350
4030 IFK3=0 THEN1510
4040 FORI%=1 TOK3
4050 PRINTCHR$&83"Klingon at sector ";K(I%,2);",";K(I%,1);" has ";K(I%,3);" units."
4060 NEXT:GOTO880
4070 PRINTCHR$131;J%;:FORI%=1TO8:PRINTQ$(J%,I%);:NEXT:PRINTTAB(27);CHR$131;J%;
4080 ONJ% GOTO4100,4110,4120,4130,4140,4150,4160,4090
4090 PRINT:RETURN
4100 PRINTTAB(29);CHR$135+"QUAD:";Q2;",";Q1':RETURN
4110 PRINTTAB(29);CHR$135"SECT:";S2;",";S1':RETURN
4120 PRINTTAB(29);CHR$135"ENRG:";E':RETURN
4130 PRINTTAB(29);CHR$135"SHLD:";S':RETURN
4140 PRINTTAB(29);CHR$135"TORP:";P':RETURN
4150 PRINTTAB(29);CHR$135"KLNG:";K9':RETURN
4160 PRINTTAB(29);CHR$135"TIME:";INT(T8-T)':RETURN
4170 DEFPROCDAM:IFH<100 THEN4210
4180 R1=INT(RND(9))
4190 D(R1)=D(R1)- INT(RND(5)+2)
4200 VDU131:PRINT"Sir, the ";D$(R1);" area is damaged"
4210 ENDPROC
4220 DEFPROCREP
4230 FORI%=1 TO9
4240 IFD(I%)>=0 THEN4290
4250 A$=" being repaired."
4260 D(I%)=D(I%)+1
4270 IFD(I%)>=0A$=" now operational."
4280 VDU131:PRINT;D$(I%);A$
4290 NEXT:ENDPROC
4300 DEFPROCMOV
4310 Z1=K(I%,1):Z2=K(I%,2)
4320 IFS1-Z1>0Z1=Z1+1
4330 IFS2-Z2>0Z2=Z2+1
4340 IFS1-Z1<0Z1=Z1-1
4350 IFS2-Z2<0Z2=Z2-1
4360 A$=" ":PROCcheck:IFZ3=0 THEN4390
4370 Q$(K(I%,1),K(I%,2))=" "
4380 K(I%,1)=Z1:K(I%,2)=Z2:Q$(Z1,Z2)=CHR$129+"+K+"
4390 ENDPROC
4400 DEFFND(D)=SQR((K(I%,1)-S1)^2+(K(I%,2)-S2)^2)
4410 DEFPROCmystery
4420 E9=RND(1):IFE9<.2 ORE9>.6 THEN4420
4430 E=INT(E*E9+1)
4440 VDU7,&83:PRINT"Spock to captain:"
4450 PRINT" Mystery power drain has reduced"'" ship's power to ";E;" units."
4460 ENDPROC
4470 DEFPROCdilithium
4480 VDU7,&83:PRINT"Scottie to captain:"
4490 PRINT" Dilithium crystals have been stolen by an intruder. No warp power."
4500 D(1)=-1E2:GOTO4550
4510 DEFPROCneutron
4520 VDU7,&83:PRINT"Spock to captain:"
4530 PRINT" Collision with neutron mine has disabled shields & shield control."
4540 D(7)=-1E2:S=0
4550 PRINT" Return to starbase for repairs.":ENDPROC
4560 DEFPROCXY
4570 X1=C(C1,1)+(C(C1+1,1)-C(C1,1))*(C1- INT(C1))
4580 X2=C(C1,2)+(C(C1+1,2)-C(C1,2))*(C1- INT(C1))
4590 ENDPROC
4600 DEFPROCUP:LOCAL B$:IF A$="":ENDPROC
4610 REPEATB$=B$+CHR$(ASCA$AND((A$<"@")OR&DF)):A$=MID$(A$,2):UNTILA$="":A$=B$:ENDPROC