10 REM ... COMBT.ECB 15 PRINT "&K&J": REM...COMBAT..R 25.0 2-20-82 20 DIM A(13),B(65),C(65),D(65,9),E(85),F(65,9),H(13) 30 DIM L(9),M(15,3),P(65),Q(30),R(13) 40 DIM T(13),W(65),X(85),Y(85),Q$(37),S$(93) 50 DEF FND(Z)=SQR(((X1-(X2))*(X1-(X2)))+((Y1-(Y2))*(Y1-(Y2)))) 60 DEF FNF(Z)=INT(Z*1000)/1000 70 DEF FNH(Z)=(INT(RND(0)*Z)+1)*100 80 DEF FNL(Z)=INT(Z/1000)*1000 85 DEF FNR(Z)=INT(RND(0)*Z)+1 90 DEF FNP$(Z$) 91 FOR I1=1 TO LEN(Z$) 92 LET I2=ASC(Z$(I1,I1))+128: PRINT CHR(27)+CHR(5)+CHR(I2); 95 NEXT I1 97 RETURN "" 98 FNEND 100 LET Q$=" | . . . . . . . . . . . | " 110 DATA 1,1,1,1,1,1,1,1,2,5 120 DATA 7,5,3,2,5,3,5,2,2,3,3,0,3,1,1,3,0,0,1,1 130 FOR J=1 TO 30: READ Q(J): NEXT J 140 DATA 8,8,7,7,6,6,1,5,9,2,3,3,3,3,3 145 FOR J=1 TO 15: READ W(J): NEXT J 150 DATA 15,31,37,47,57,65,85,1,.017453292,20000.2 160 DATA " Course: "," "," left: "," Mgm."," Range: " 165 DATA " Energy: "," Shields: " 170 READ L1,L2,L3,L4,L5,L6,L7,S,R1,T9: LET I=RND(1) 175 READ C$,E$,L$,M$,R$,N$,H$ 180 LET S$="

:T:>B<*K*(K)+K+:K:>K<" 190 LET S$=S$+"*R*{R}+R+!R!>R<[G](G)+G+:G:>G<*X*(X)+X+:X:>X<" 200 DATA 1,2,3,4,5,6,7,8,9,9,10,10,10,10,10 205 DATA 11,11,11,11,11,11,11,16,16,16,21,21,21,26,26,26 210 DATA 14,14,19,19,24,29 215 DATA 15,15,15,15,15,20,20,20,25,30 220 DATA 12,12,12,12,12,17,17,17,17,17 225 DATA 13,13,13,18,18,23,23,23 230 FOR I=1 TO L6: READ C(I): NEXT I 240 DATA 0,0,0,.6,1,5,2,0,0,5,10,10,0 245 FOR I=1 TO 13: READ A(I): NEXT I 250 DATA 0,0,0,1E3,500,300,100,0,0,2E3,2E3,0,0 255 FOR I=1 TO 13: READ H(I): NEXT I 260 PRINT ,"*K* (K) +K+ :K: >K< *K*" 270 PRINT ,"[G] C O M B A T +G+" 280 PRINT ,"*X* (STARTREK) >X<" 290 PRINT ,"+R+ *R* {R} !R! >R< *R* (2-20-82)&J&J" 295 INPUT "Enter a RANDOM number ---=>",I: LET I=ABS(I) 297 FOR J=1 TO I: LET Z=RND(0): NEXT J 300 FOR I=1 TO L1: REM...starships 310 LET Y(I)=FNH(500)-2E4,X(I)=FNH(500)-2E4 320 IF C(I)=9 THEN LET E(I)=3E3 ELSE LET E(I)=1E4 325 NEXT I 330 FOR I=L1+1 TO L6: REM...Enemy ships 340 LET Y(I)=FNH(200)+3E4,X(I)=FNH(200)+3E4 350 IF C(I)>15 THEN LET X(I)=-X(I)-8E3 360 IF C(I)>20 THEN LET Y(I)=-Y(I)-1E4 370 IF C(I)>20 AND C(I)<26 THEN LET X(I)=-X(I) 380 NEXT I 390 PRINT "&JGalaxy limits are +/- ";%C;1E5;M$;" (Distance)" 400 FOR I=L6+1 TO L7: REM...stars 410 LET Y(I)=FNH(1800)-9E4 415 LET X(I)=FNH(1600)-9E4,E(I)=1 420 IF RND(0)>.5 THEN LET Y(I)=Y(I)/2,X(I)=X(I)/2 425 NEXT I 430 LET X=FNR(8),L=FNR(5)+10,G=FNR(7)+8,R=FNR(7)+8 440 FOR I=L1+1 TO L2: REM...cruisers 450 IF C(I)=11 THEN LET E(I)=1E4-FNR(3E3),B(I)=L 460 IF C(I)=16 THEN LET E(I)=4E3+FNR(1E3),B(I)=R 470 IF C(I)=21 THEN LET E(I)=1E4-FNR(1E3),B(I)=G 480 IF C(I)=26 THEN LET E(I)=7E3-FNR(2E3),B(I)=X 490 NEXT I 500 PRINT "&JFederation limits are +/- ";%C;4E4;M$ 510 FOR I=L2+1 TO L3: LET E(I)=2E3+FNR(1E3): NEXT I 520 FOR I=L3+1 TO L4: LET E(I)=2E4-FNR(9E3): NEXT I 530 FOR I=L4+1 TO L5: LET E(I)=4500-FNR(1E3): NEXT I 540 FOR I=L5+1 TO L6: LET E(I)=2E3-FNR(500): NEXT I 550 FOR I=L1+1 TO L6: LET B(I)=FNR(9)+4: NEXT I 590 PRINT "&JYou have 8 STARSHIPS and 5 Bases." 600 FOR I=1 TO L1 610 IF I<9 THEN RESTORE 660: REM...Starships 620 IF I=9 OR I=10 THEN RESTORE 670: REM...Transports :T: 630 IF I>10 THEN RESTORE 680: REM...Bases >B< 640 FOR J=1 TO 9: READ D(I,J): READ F(I,J): NEXT J 650 NEXT I 660 DATA 1,8E3,1,2E3,1,5E3,1,3E3,1,5E3,1,5E3,1,500,1,0,1,100 670 DATA 1,2E3,1,2E3,1,4E3,1,2E3,0,0,1,900,1,500,1,800,0,0 680 DATA 0,0,1,2E3,1,5E3,1,3E3,0,0,1,7E3,1,500,1,3E3,0,0 690 PRINT "&JThe KLINGON invasion has broken the Treaty." 700 FOR I=L1+1 TO L2 710 RESTORE 740: LET P(I)=FNR(5)+3: REM...cruisers 720 FOR J=1 TO 9: READ D(I,J): READ F(I,J): NEXT J 725 IF C(I)=11 THEN LET W(I)=5 ELSE LET W(I)=4 726 IF C(I)=16 THEN LET W(I)=1,F(I,9)=1 727 IF C(I)=21 THEN LET W(I)=6 730 NEXT I 740 DATA 1,4E3,1,2E3,1,5E3,1,3E3,1,5E3,1,0,1,1,1,100,0,0 750 FOR I=L2+1 TO L3 760 RESTORE 790: REM...transports 770 FOR J=1 TO 9: READ D(I,J): READ F(I,J): NEXT J 775 LET P(I)=FNR(5),W(I)=2 780 NEXT I 790 DATA 1,2E3,1,2E3,1,4E3,0,0,0,0,1,0,1,1,1,100,0,0 800 FOR I=L3+1 TO L4 810 RESTORE 840: REM...bases 820 FOR J=1 TO 9: READ D(I,J): READ F(I,J): NEXT J 825 IF C(I)=30 THEN LET W(I)=4 ELSE LET W(I)=3 830 LET P(I)=FNR(9): IF C(I)=15 THEN LET W(I)=6 835 NEXT I 840 DATA 1,1E3,1,2E3,1,5E3,1,3E3,0,0,1,0,1,1,1,3E3,1,100 850 FOR I=L4+1 TO L5 860 RESTORE 890: REM...warships 870 FOR J=1 TO 9: READ D(I,J): READ F(I,J): NEXT J 875 LET W(I)=4: IF C(I)=17 THEN LET F(I,9)=1,B(I)=L 880 NEXT I 890 DATA 1,4E3,1,2E3,1,5E3,1,4E3,0,0,1,0,1,1,1,5E3,0,0 900 FOR I=L5+1 TO L6 910 RESTORE 940: LET W(I)=2: REM...scouts 920 FOR J=1 TO 9: READ D(I,J): READ F(I,J): NEXT J 925 IF C(I)=23 THEN LET W(I)=7,B(I)=R 930 NEXT I 940 DATA 1,7E3,1,2E3,1,4E3,1,2E3,0,0,1,0,1,1,1,2E3,0,0 950 DATA 4E3,2E3,3E3,5E3,6E3,1E4,2E4,4E3,2E3,5E3,1E4,15E3,2E3 960 FOR I=1 TO 13: READ R(I): NEXT I 970 DATA 7E3,2E3,3E3,1E3,500,250,100,4E3,2E3,2E3,2E3,100,200 975 FOR I=1 TO 13: READ T(I): NEXT I 980 DATA 8E3,2E3,5E3,3E3,5E3,5E3,500,0,100 990 FOR I=1 TO 9: READ L(I): NEXT I 1000 PRINT "&KA minus number gives all command sumaries.&J" 1010 FOR I=L1+1 TO L6: LET F(I,6)=INT(E(I)/3): NEXT I 1020 FOR I=1 TO L6: LET F(I,8)=T(W(I)): NEXT I 1100 PRINT "Run program BRIEF for a description of how this" 1110 FOR I=L1+1 TO L6: LET F(I,3)=R(W(I)): NEXT I 1120 PRINT "quite different version of STARTREK is played.&J" 1130 FOR I=1 TO L1 1140 IF I>8 THEN 1170 1150 LET M(I,1)=FNR(1.5)-1,M(I,2)=FNR(1.5)-1 1160 LET M(I,3)=FNR(3.5),P(I)=FNR(3)+4: GOTO 1180 1170 LET M(I,1)=FNR(2.5),M(I,2)=FNR(2.2) 1180 LET M(I,3)=FNR(5.5),P(I)=FNR(5)+3 1190 NEXT I 1500 PRINT "&J(Warp 1 covers a distance of 1000 Mgm.)" 1510 GOSUB 2500: LET L8=L1+1,L9=L6,G1=L8,G2=L9 1520 LET S9=0,Q(9)=0,Q(10)=0 1600 FOR I=1 TO L1 1610 IF E(I)<=0 THEN 1690 1620 IF C(I)<9 THEN LET S9=S9+1 1630 IF C(I)=9 THEN LET Q(9)=Q(9)+1 1640 IF C(I)=10 THEN LET Q(10)=Q(10)+1 1650 IF F(I,7)=1E3 THEN LET F(I,7)=500 1690 NEXT I 1700 IF S9=0 OR Q(10)=0 THEN 10000 1710 LET K9=Q(11)+Q(12)+Q(15) 1720 LET R9=Q(16)+Q(17)+Q(20) 1730 LET G9=Q(21),X9=Q(26) 1750 IF K9+R9+G9+X9<=0 THEN 10000 2000 IF S>10 AND RND(0)>.2 THEN 9000 ELSE PRINT : LET T9=T9+.2 2010 IF E(S)<0 OR S>10 THEN GOSUB 2500 ELSE GOSUB 2560 2015 PRINT I$;: GOSUB 2600 2020 INPUT (2,0)": Command? (0-10) ---=>",C: LET C=INT(C) 2025 SET DS=0: IF C=10 THEN 2200 2030 IF C<0 OR C>9 THEN 2090 2035 IF C>6 THEN LET D=D(S,C) ELSE LET D=D(S,C+1) 2040 IF C=6 THEN 2080 2045 IF D=0 THEN 5820 2050 IF D>-1 AND D<0 THEN 5830 2055 IF D<=-1 THEN 5860 2060 IF D=1 OR C<3 THEN 2080 2070 PRINT "DAMAGED DEVICE operating at ",INT(D*100);" %&J" 2080 ON C+1 GOTO 3000,5000,5000,3300,3400,6000,6000,7000,3600,8000 2090 PRINT "&K&J","COMMANDS&J" 2100 PRINT ,"0 = MOVE" 2110 PRINT ,"1 = Short range scan" 2120 PRINT ,"2 = Long range scan" 2130 PRINT ,"3 = PHAZERS" 2140 PRINT ,"4 = PHOTONS" 2150 PRINT ,"5 = Power and Shield control" 2160 PRINT ,"6 = Damage Report" 2170 PRINT ,"7 = COMPUTOR (options 0-8)" 2180 PRINT ,"8 = ";: GOSUB 2300: PRINT M$ 2190 PRINT ,"9 = Auxillary Weapons (options 0-5)" 2195 PRINT ,"10= Pass move": GOTO 2010 2200 PRINT ,I$;" Passing turn&J" 2210 GOSUB 2250: IF F(S,9)<91 THEN LET F(S,9)=F(S,9)+10 2220 LET E=0: GOTO 3180 2250 FOR J=1 TO 9: REM...damage repair 2260 IF D(S,J)=1 OR D(S,J)<=0 THEN 2290 2270 LET Z=RND(0)/FNR(5),D(S,J)=D(S,J)+Z 2280 IF D(S,J)>1 THEN LET D(S,J)=1 2290 NEXT J 2295 RETURN 2300 LET N=W(S) 2305 IF N>9 THEN 2900 2310 ON N GOTO 2315,2320,2330,2340,2350,2360,2370,2380,2390 2315 PRINT " Neutron disrupter ";: RETURN 2320 PRINT " Dilithium phasers ";: RETURN 2330 PRINT " Phasers ";: RETURN 2340 PRINT " Photons ";: RETURN 2350 PRINT " Plasma beam ";: RETURN 2360 PRINT " Particle beam ";: RETURN 2370 PRINT " Meson laser ";: RETURN 2380 PRINT " Uncloaking device ";: RETURN 2390 PRINT " Cloaking device ";: RETURN 2400 ON N GOTO 2410,2420,2430,2440,2450,2460,2470,2480,2490 2410 PRINT " Warp engines: ";: RETURN 2420 PRINT " Short range scan: ";: RETURN 2430 PRINT " Long range scan: ";: RETURN 2440 PRINT " PHASERS: ";: RETURN 2450 PRINT " PHOTONS: ";: RETURN 2460 PRINT " Shield/Power control: ";: RETURN 2470 PRINT " Computor: ";: RETURN 2480 IF C=7 AND C7=8 THEN GOSUB 2305 ELSE GOSUB 2300 2485 RETURN 2490 PRINT " Auxillary weapons: ";: RETURN 2500 FOR K=S TO L2 2510 IF E(K)<0 OR F(K,6)<0 THEN 2530 2520 LET S=K: EXIT 2540 2530 NEXT K 2540 IF K>L1 THEN LET S=1 2550 IF S<1 THEN 2500 2560 LET X1=X(S),Y1=Y(S),T=C(S),B=B(S) 2570 LET I$=S$(T*3-2,T*3): IF T9<>INT(T9) THEN RETURN 2580 LET S=S+1,T9=T9+.2: GOTO 2500 2590 RETURN 2600 IF T>10 THEN 2720 2610 ON T GOTO 2620,2630,2640,2650,2660,2670,2680,2690,2700,2710 2620 PRINT " ENTERPRISE ";: RETURN 2630 PRINT " HOOD ";: RETURN 2640 PRINT " INTERPRID ";: RETURN 2650 PRINT " LEXINGTON ";: RETURN 2660 PRINT " MOSCOVIA ";: RETURN 2670 PRINT " PROTEUS ";: RETURN 2680 PRINT " REPUBLIC ";: RETURN 2690 PRINT " YORKTOWN ";: RETURN 2700 PRINT " TRANSPORT ";: IF S>8 THEN PRINT "#";S-8; 2705 RETURN 2710 PRINT " BASE ";: RETURN 2720 LET T1=(T-1)/5,T2=T1-INT(T1),T1=INT(T1) 2730 IF T1=2 THEN PRINT " KLINGON "; 2740 IF T1=3 THEN PRINT " Romulan "; 2750 IF T1=4 THEN PRINT " GORN "; 2760 IF T1=5 THEN PRINT " Xeonite "; 2810 IF T2=0 THEN PRINT "Battle Cruiser ";: RETURN 2820 IF T2=.2 THEN PRINT "Warship ";: RETURN 2830 IF T2=.4 THEN PRINT "scout ";: RETURN 2840 IF T2=.6 THEN PRINT "supply ship ";: RETURN 2850 IF T2=.8 THEN PRINT "BASE ship "; 2860 RETURN 2900 ON N-9 GOTO 2910,2920,2930,2940 2910 PRINT " Anti-matter bomb ";: RETURN 2920 PRINT " Anti-matter probe ";: RETURN 2930 PRINT " Scouting probe ";: RETURN 2940 PRINT " Tractor beam ";: RETURN 3000 PRINT : GOSUB 2600 3010 LET M=D*F(S,1): PRINT ,"Warp engine power: ";F(S,1) 3020 IF D=1 THEN 3035 3025 PRINT I$;" Engines operating at ",INT(D*100);" %&J" 3030 IF S>8 AND M>3000 THEN LET M=3000 3035 PRINT " Max Warp speed: ";M/1000 3040 IF B(S)=0 THEN 3050 ELSE LET T=C(B(S)),M=M/2 3045 PRINT S$(T*3-2,T*3);" in tow: Max speed= ";M/1000 3050 GOSUB 2600: PRINT " location:","y=";%C;Y1;" x=";X1: PRINT 3060 INPUT " Course ? (0 to 360) ---=>",A 3070 IF A<0 OR A>360 THEN 2010 ELSE PRINT 3080 LET M=M/1E3: IF C=7 AND C7=5 THEN 3140 3100 INPUT " Warp ? (0 to Max.) ---=>",W 3110 IF W=0 THEN 2010 ELSE PRINT 3120 IF W<0 OR W>M THEN PRINT ,"# TRY AGAIN #&J": GOTO 3000 3130 LET D=INT(W*1000): REM...distance traveled 3140 IF (D/20)>E(S) THEN 5800 ELSE LET Z=B(S) 3150 GOSUB 3800: LET Y(S)=Y3,X(S)=X3 3160 IF Z>0 THEN LET Y(Z)=Y3+300,X(Z)=X3-300 3170 LET E=INT(D/20): REM...energy loss 3180 GOSUB 3200 3190 LET S=S+1,T9=INT(T9)+1.2: GOSUB 2500: GOTO 2000 3200 LET E(S)=E(S)-E: REM...energy loss 3210 IF C>0 AND C<10 THEN RETURN 3220 LET E(S)=E(S)+200 3230 IF E<199 THEN PRINT 200-E;" units of power generated." 3240 RETURN 3300 LET R=F(S,4)*D(S,4),N=3: REM...PHASERS 3310 LET M=4,V=S,L=R/4 3320 GOSUB 4000 3330 IF F(V,M)>=L THEN 3380 3340 PRINT I$;: GOSUB 2305: PRINT " needs re-charging.&J" 3380 GOSUB 4200 3390 GOTO 1510 3400 IF P(S)<1 THEN PRINT I$;" Photons gone!&J": GOTO 2010 3410 LET R=5E3*D(S,5),N=4,M=5,V=S: PRINT I$; 3420 GOSUB 2305: PRINT " Firing course ? (0 to 360) ---=>"; 3430 INPUT L 3440 IF L=0 THEN 2010 ELSE PRINT 3450 IF L<0 OR L>360 THEN 2010 3460 GOSUB 4500 3480 GOSUB 4200 3490 GOTO 1510 3500 REM...INPUT: The 2 points of y1,x1 and y2,x2 3510 REM...OUTPUT: The angle A between them 3520 LET Y=Y2-(Y1),X=X2-(X1) 3530 IF Y=0 THEN LET Y=1E-6 3540 LET A=ATN(X/Y)/R1 3550 IF Y<0 THEN LET A=A+180 3560 IF Y>0 AND X<0 THEN LET A=A+360 3590 RETURN 3600 LET D=D(S,8): IF D<0 THEN 2050 3610 IF D(S,8)<1 THEN PRINT ,"Damage = ";%7F1;D(S,8)*100;" %" 3620 PRINT ,I$;" Special device&J": LET V=S 3630 GOSUB 2300: LET N=W(S),R=R(N)*D(S,8) 3640 PRINT TAB(15);R$;%C;R;TAB(35); 3645 IF N=9 THEN PRINT "CLOAK ENGAGED&J": GOTO 2000 3650 IF N=8 THEN 3700 ELSE LET M=8 3660 IF N>3 THEN 3680 3670 PRINT N$;F(S,8): LET L=R/4: GOTO 3320 3680 PRINT "Explosion radius: ";T(N): PRINT 3690 GOTO 3420 3700 FOR I=L1+1 TO L6: REM...Uncloak enemy 3720 IF E(I)<0 THEN 3750 3730 LET Y2=Y(I),X2=X(I),D=INT(FND(D)) 3740 IF R>D THEN LET F(I,9)=8 3750 NEXT I 3760 IF E(S)<90 THEN 5800: REM...Scans 3770 GOSUB 2560: LET T=0: LET L=INT(F(S,8)/10) 3790 LET C=2: GOTO 5050 3800 REM...INPUT: a=angle (0-360) d=distance y1,x1=loc. 3810 REM...OUTPUT: the new location of Y1, X1 3820 IF A=0 OR A=360 THEN LET Q=0 ELSE LET Q=INT(A/90) 3830 LET B=A-Q*90 3850 IF A=0 OR A=360 THEN LET Y3=Y1+D,X3=X1: RETURN 3860 IF A=90 THEN LET X3=X1+D,Y3=Y1: RETURN 3870 IF A=180 THEN LET Y3=Y1-D,X3=X1: RETURN 3880 IF A=270 THEN LET X3=X1-D,Y3=Y1: RETURN 3903 REM...4 Quadrants: 0-90, 90-180, 180-270, 270-360 3910 ON Q+1 GOTO 3920,3940,3960,3980 3920 LET Y3=INT(D*COS(B*R1)+Y1) 3930 LET X3=INT(D*SIN(B*R1)+X1): RETURN 3940 LET Y3=Y1-(INT(D*SIN(B*R1))) 3950 LET X3=INT(D*COS(B*R1)+X1): RETURN 3960 LET Y3=Y1-(INT(D*COS(B*R1))) 3970 LET X3=X1-(INT(D*SIN(B*R1))): RETURN 3980 LET Y3=INT(D*SIN(B*R1)+Y1) 3990 LET X3=X1-(INT(D*COS(B*R1))): RETURN 4000 PRINT I$;: GOSUB 2305: PRINT " ready for firing&J" 4010 FOR K=L8 TO L9 4020 IF F(V,M)R THEN 4130 ELSE LET T=C(K) 4060 LET E=F(V,M)/(N+2),F(V,M)=F(V,M)-INT(E) 4070 PRINT I$;: LET E$=S$(T*3-2,T*3): GOSUB 2305 4080 PRINT " firing at ";: GOSUB 2600: PRINT 4090 LET H=(R+100-D),H=INT(H*D(V,M)) 4100 IF F(K,6)>0 THEN GOSUB 4150: REM...Kill test 4110 IF H<100 THEN 4130 ELSE LET Z=FNR(9) 4120 LET D(K,Z)=D(K,Z)-RND(0)-(RND(0)*INT(H/600)) 4125 IF Z=6 AND F(K,6)>0 THEN GOSUB 5880 4126 IF D(K,Z)<-3 THEN LET H=-1E4 ELSE LET H=0: REM...Overload 4127 IF H>99 AND F(K,6)>0 THEN GOSUB 4150: REM...Kill test 4130 NEXT K 4140 RETURN 4150 LET F(K,6)=F(K,6)-H: REM...Kill Test 4160 IF F(K,6)<0 THEN LET E(K)=-V ELSE 4190 4170 PRINT E$;" *** Destroyed ***&J" 4180 LET T=C(K),Q(T)=Q(T)-1: RETURN 4190 PRINT H;" unit hit on ";E$;"&J": RETURN 4200 LET L8=S,L9=S: REM...RETURN fire from enemy 4205 FOR V=G1 TO G2 4210 IF E(V)<0 THEN 4480 ELSE LET F=0,I$="?" 4215 LET Y1=Y(V),X1=X(V),Y2=Y(S),X2=X(S) 4220 LET J=INT(FND(J)): IF V>L1 AND RND(0)>.8 THEN LET B(V)=S 4225 LET T=C(V): IF J>2E4 THEN 4480 ELSE LET N=W(V) 4230 LET I$=S$(T*3-2,T*3),M=8: IF D(V,M)<.1 THEN 4300 4235 IF E(V)<500 THEN LET F=-1: GOTO 4400 4240 LET R=R(N)*D(V,M): IF J>R+7E3 THEN 4480 4245 IF J>R THEN 4400 4250 IF N=4 AND P(V)<1 THEN 4300 4260 IF N>3 THEN 4280 ELSE LET L=R/N 4270 IF F(V,M)R THEN 4400 ELSE LET L=R/N 4320 IF F(V,M).2 THEN LET F=-1 4350 LET M=5: IF D(V,M)<.5 THEN 4400 ELSE LET R=F(V,M)*D(V,M) 4360 IF P(V)<1 OR J>R THEN 4400 ELSE LET N=4 4370 GOSUB 3500 4380 LET L=A: GOSUB 4500 4390 IF RND(0)>.4 THEN LET F=0 4400 IF D(V,8)<.2 OR D(V,4)<.2 OR RND(0)>.9 THEN LET F=-1 4410 IF F>0 OR D(V,1)<.1 THEN 4480 4420 LET Y1=Y(V),X1=X(V),Y2=Y(S),X2=X(S) 4425 GOSUB 3500: LET A=A+FNR(20)-10 4430 IF F=-1 THEN LET A=A+150+FNR(60) 4440 IF A>=360 THEN LET A=A-360 4445 IF J<5E3 THEN PRINT I$;: GOTO 4450 4447 IF F(V,9)=1 THEN PRINT "Force Field "; ELSE PRINT "Ship "; 4450 LET D=(D(V,1)*F(V,1))/4 4460 GOSUB 3800: LET Y(V)=Y3,X(V)=X3 4470 IF F=-1 THEN PRINT " fleeing&J": GOTO 4480 4475 PRINT " closing in from ";INT(J/100)*100: PRINT 4480 NEXT V 4490 RETURN 4500 PRINT I$;" firing ";: GOSUB 2305: PRINT : PRINT 4510 FOR I=L8 TO L9 4520 IF E(I)<0 THEN 4650 4530 LET Y2=Y(I): LET X2=X(I): LET D=INT(FND(D)) 4540 IF D>R(N) THEN 4650 4550 GOSUB 3500 4560 IF L+A(N)R THEN 4770 ELSE LET H=H(N)+FNR(H(N)/10),T=C(K) 4750 IF D<6E3 THEN LET E$=S$(T*3-2,T*3) ELSE LET E$=" ? " 4755 GOSUB 4150 4760 IF H<250 THEN 4770 ELSE LET Z=FNR(9) 4765 LET D(K,Z)=D(K,Z)-RND(0)-(RND(0)*INT(H/250)) 4770 NEXT K 4775 IF Z=6 AND F(K,6)>0 THEN GOSUB 5880 4780 IF H>0 THEN LET F=4: RETURN 4790 IF C<9 THEN GOSUB 2305 4795 PRINT "* missed *&J": RETURN 5000 IF E(S)7 THEN LET L=INT(F(S,C+1)/10): GOTO 5040 5030 LET T=2: IF C7=0 THEN LET L=4 ELSE LET L=INT(2*D(S,7)) 5040 IF C<3 THEN LET L=INT(L*D(S,C+1)) 5050 PRINT "&K": IF L<=0 THEN 5830 5060 PRINT TAB(5+T);-10*L;TAB(11+T);-6*L; 5070 PRINT TAB(17+T);-2*L;TAB(22);0;TAB(24+T);2*L; 5080 PRINT TAB(30);6*L;TAB(36);10*L 5100 FOR I=L*10 TO -L*10 STEP -L*2 5110 PRINT TAB(T);%+;I;TAB(5);Q$ 5120 NEXT I 5150 LET T=C(S): IF C=7 AND C7=0 THEN 5180 5160 PRINT " |---------------------------------|" 5170 GOTO 5200 5180 PRINT " |(All distances are from Y=0, X=0)|" 5200 GOSUB 2600: PRINT I$;" location: ";Y1;",";X1 5210 CURSOR 7,22 5220 IF C=7 AND C7=0 THEN PRINT " 0 "; ELSE PRINT I$; 5230 IF C=7 THEN LET L=L*1E3 5240 LET R=L*11: REM...SCAN Range 5250 IF C=7 THEN CURSOR 2,42 ELSE CURSOR 7,42 5260 PRINT "~ship~range~~course~"; 5270 IF C=7 THEN CURSOR 1,43 ELSE 5300 5280 PRINT "SCALE is in 1000's"; 5290 IF C7=0 THEN LET Y1=0,X1=0 5295 GOTO 5400 5300 CURSOR 1,42: PRINT I$;" at:";Y1;",";X1; 5310 CURSOR 2,45: PRINT N$;E(S); 5320 CURSOR 3,44: PRINT H$;F(S,6); 5330 CURSOR 4,45: PRINT "Photons: ";%;P(S); 5340 CURSOR 5,42: GOSUB 2300 5350 CURSOR 6,44: PRINT R$;R(W(S)); 5400 IF C=7 THEN LET M=3 ELSE LET M=8 5410 LET Z=M,G=L7: IF C=7 THEN LET W=14 ELSE LET W=13 5420 IF C=7 AND C7=0 THEN LET M=1,G=L1 5500 FOR I=1 TO G 5510 IF E(I)<=0 THEN 5750 5520 LET Y2=Y(I),X2=X(I),D=INT(FND(D)) 5530 IF D>R THEN 5750 5540 IF I>L6 THEN LET E$=" * ": GOTO 5650 5550 IF I5E3 AND I>L1 THEN LET E$=" ? " 5600 IF I=S THEN 5650 5610 GOSUB 3500 5620 CURSOR Z,43: GOSUB 5950 5625 PRINT TAB(47);%C;D;TAB(55);%Z7F3;A 5630 LET Z=Z+1: IF Z>W THEN LET Z=M 5650 LET Y2=INT(Y(I)-(Y1)),X2=INT(X(I)-(X1)) 5660 LET Y3=SGN(Y2),X3=SGN(X2) 5670 LET Y4=INT((ABS(Y2)+L)/(L+L))*Y3,Y4=7-Y4 5680 LET X4=INT((ABS(X2)+L)/(L+L))*X3,X4=((X4+6)*3)+4 5690 CURSOR Y4,X4: GOSUB 5950 5700 IF D>5E3 OR I=S THEN 5750 5710 IF C=7 THEN 5750 ELSE CURSOR 14,1 5720 IF I>L6 THEN PRINT "star"; ELSE GOSUB 2600 5730 LET Y2=INT(Y(I)),X2=INT(X(I)),D=INT(FND(D)) 5740 PRINT " y=";%C;Y2-(Y1);" x=";X2-(X1) 5750 NEXT I 5760 CURSOR 13,7: PRINT "---- <*> SCAN completed <*> ----"; 5770 GOSUB 2560: LET E(S)=E(S)-C*10 5790 CURSOR 15,1: GOTO 2010 5800 PRINT "Not enough";N$;"for the command.": GOTO 2010 5820 IF S>8 THEN PRINT "&J* NON-EXISTANT device": GOTO 2010 5830 PRINT "&JDAMAGED beyond use!" 5840 PRINT "You will have to return to a BASE for repairs!" 5850 GOTO 2010 5860 IF C<6 THEN LET N=C+1 ELSE LET N=C 5865 GOSUB 2400 5870 PRINT " is beyond repair!!! Even at a BASE&J": GOTO 2010 5880 IF E(K)<0 OR F(K,6)<0 THEN RETURN 5882 PRINT N$;"LOSS on ";E$;" REPORTED.&J" 5885 LET E(K)=E(K)-FNR(2E3) 5890 IF E(K)<0 THEN LET E(K)=-V: GOSUB 4170 5895 RETURN 5900 INPUT " Firing course ? (0 to 360) ---=>",A 5920 IF A<0 OR A>360 THEN 2010 5940 GOSUB 4000: GOTO 2000 5950 REM...Reverse Video 5960 IF I<16 OR I>65 THEN PRINT E$;: RETURN 5970 IF E$<>" ? " THEN 5980 5975 IF F(I,6)"; 6260 INPUT (2,0)C5 6270 IF C5=0 THEN 2010 ELSE PRINT 6280 IF C5<1 OR C5>9 THEN 6250 ELSE PRINT I$;N$;E(S) 6290 INPUT " Energy to add? ---=>",E: LET E=INT(E) 6300 IF E8 THEN 6340 6330 IF E<>0 OR E+F(S,8)<=T(W(S)) THEN 6370 6335 PRINT "Limits are 1 to";T(W(S)): GOTO 6360 6340 IF ABS(E+F(S,C5))>L(C5) THEN 6350 ELSE 6370 6350 PRINT "Limits are 1 to";L(C5) 6360 LET E(S)=E(S)+E: GOTO 2010 6370 LET F(S,C5)=F(S,C5)+E: GOTO 2010 6500 PRINT "&K": REM...Weapons stores 6510 PRINT "Ship Photons","A.M. bombs","A.M. probes","Scout probes" 6520 FOR J=1 TO 15 6530 IF E(J)<0 THEN 6550 ELSE LET T=C(J) 6540 PRINT S$(T*3-2,T*3);P(J),M(J,1),M(J,2),M(J,3) 6550 NEXT J 6560 GOTO 2010 7000 IF E(S)<100 THEN 5800 7010 GOSUB 2600: PRINT " computor: Next command (0-9) ---=>"; 7020 INPUT (1,0)Y$: LET Y$=Y$+" ",C7=ASC(Y$(1,1))-48 7030 IF C7<0 OR C7>9 THEN 7050 ELSE SET DS=0 7040 ON C7+1 GOTO 5000,7200,7300,7800,5000,7900,7400,7700,8700,6500 7050 PRINT "&K&J","COMMANDS&J" 7060 PRINT ,"0 = Federation GALAXY map (ship locations)" 7070 PRINT ,"1 = Game status" 7080 PRINT ,"2 = Course calculator" 7090 PRINT ,"3 = Courses to enemy" 7100 PRINT ,"4 = Deep Space scan" 7110 PRINT ,"5 = Point-to-point warp move" 7120 PRINT ,"6 = Docking" 7130 PRINT ,"7 = Ship Kills Log" 7140 PRINT ,"8 = Scan analysis" 7150 PRINT ,"9 = Weapons stores" 7190 GOTO 7010 7200 PRINT "&K","GAME STATUS&J" 7205 PRINT ,"STARDATE: ";T9: PRINT 7210 PRINT S9;" starships";L$; 7220 FOR I=1 TO 8 7225 IF E(I)>0 THEN PRINT " ";S$(I*3-2,I*3); 7230 NEXT I 7240 PRINT : PRINT Q(9);" transports :T:" 7245 PRINT Q(10);" bases >B<" 7250 PRINT "Klingons:",K9+Q(13)+Q(14) 7260 PRINT "Romulans:",R9+Q(18)+Q(19) 7270 PRINT "Gorns:",G9+Q(23)+Q(24)+Q(25) 7280 PRINT "Xeonites",X9+Q(28)+Q(29)+Q(30) 7290 GOTO 2010 7300 PRINT "&J Course calculator "; 7310 PRINT I$;" at: ";%C;Y1;" ";X1;"&J" 7320 PRINT I$;" Enter 2 numbers: y2 x2 (end)" 7330 INPUT " ---=>",Y2,X2 7340 LET D=FND(D) 7350 GOSUB 3500 7360 PRINT "distance: ";%C;D;TAB(30);C$;A 7390 GOSUB 2560: GOTO 2010 7400 PRINT "&K","DOCKING&J": LET C7=6 7430 FOR I=L1 TO 1 STEP -1 7440 IF E(I)<0 OR I=S THEN 7680 7450 LET Y2=Y(I),X2=X(I),D=INT(FND(D)) 7460 IF D>2000 THEN 7680 ELSE LET T=C(I) 7470 GOSUB 2600 7480 IF D>1000 THEN PRINT " out of range ": GOTO 7680 7490 IF F(S,7)<1E3 THEN PRINT " docking made&J" 7500 IF F(S,7)=1E3 THEN PRINT " dock next turn": GOTO 7680 7510 LET F(S,7)=1E3 7520 IF P(I)>0 THEN LET P(I)=P(I)-1,P(S)=P(S)+1 7525 IF P(I)>0 THEN LET P(I)=P(I)-1,P(S)=P(S)+1 7530 FOR J=1 TO 3 7540 IF M(I,J)<1 THEN 7560 7550 LET M(I,J)=M(I,J)-1,M(S,J)=M(S,J)+1 7560 NEXT J 7570 LET E(S)=E(S)+1E3 7580 LET Y(S)=Y(I)+300,X(S)=X(I)+300 7590 GOSUB 2250 7600 IF S>10 OR I<11 THEN 7680 7610 FOR J=1 TO 9: REM...damage repair at >B< 7620 IF D(S,J)=1 THEN 7670 ELSE LET Z=RND(0)/3 7625 IF D(S,J)>=-1 THEN 7650 7630 LET N=J: GOSUB 2400 7635 PRINT " repair may take about ";FNR(I+J);" days." 7640 IF D(S,J)<-2 THEN PRINT ,"Be advised to forget it!": GOTO 7660 7645 PRINT ,"Barely repairable!": LET Z=RND(0)/3: GOTO 7660 7650 LET Z=RND(0)/FNR(1.6) 7660 LET D(S,J)=D(S,J)+Z 7665 IF D(S,J)>1 THEN LET D(S,J)=1 7670 NEXT J 7680 NEXT I 7690 LET E=200: GOTO 3180: REM...Lose turn docking 7700 PRINT "&K": GOSUB 2600: PRINT " Kill Log:&J&J" 7710 PRINT "Klingons:": PRINT "Romulans:": LET L=15,R=15 7715 PRINT "Gorns:": PRINT "Xeonites:": LET G=15,X=15 7720 FOR I=L1+1 TO L6 7725 IF E(I)<0 THEN LET T=C(I) ELSE 7790 7730 IF E(I)<>-S THEN 7790 ELSE LET E$=S$(T*3-2,T*3) 7740 IF T<11 OR T>15 THEN 7750 7745 CURSOR 4,L: PRINT E$;: LET L=L+4 7750 IF T<16 OR T>20 THEN 7760 7755 CURSOR 5,R: PRINT E$;: LET R=R+4 7760 IF T<21 OR T>25 THEN 7770 7765 CURSOR 6,G: PRINT E$;: LET G=G+4 7770 IF T<26 THEN 7790 7780 CURSOR 7,X: PRINT E$;: LET X=X+4 7790 NEXT I 7795 CURSOR 10,1: GOTO 2010 7800 FOR I=L1+1 TO L6 7810 IF E(I)<0 THEN 7880 7820 LET Y2=Y(I),X2=X(I),D=INT(FND(D)) 7830 IF D>5E3 THEN 7880 ELSE LET T=C(I) 7840 IF D(I,9)=1 THEN 7880: REM...cloaked! 7850 GOSUB 2600: GOSUB 3500 7860 PRINT TAB(30);R$;%C;D;TAB(45);C$;%Z7F3;A 7880 NEXT I 7890 GOTO 2000 7900 PRINT "&J Navigation Computor Engaged&J" 7910 PRINT I$;" at: ";Y1;" ";X1;"&J" 7920 IF D(S,1)>.5 THEN 7940 7930 PRINT "Warp enginges damaged": LET D=1E3 7935 PRINT ,"Impulse engines engaged.&J": GOTO 3060 7940 PRINT I$;" Enter 2 numbers: y2 x2 (destination)" 7950 INPUT " ---=>",Y2,X2 7960 LET D=INT(FND(D)),R=F(S,1)*D(S,1) 7970 IF D";: INPUT (1,0)N 8210 SET DS=0: IF N=0 THEN 2010 ELSE PRINT 8220 IF N<1 OR N>5 THEN 8000 ELSE LET V=S 8230 IF N=5 THEN 7400 8240 IF N=4 THEN LET N=13: GOTO 8900 8250 IF M(S,N)>0 THEN LET M(S,N)=M(S,N)-1: GOTO 8300 8260 PRINT "None left!&J": GOTO 1500 8300 INPUT "Course: (0 to 360) ---=>",L 8310 IF L>=0 AND L<=360 THEN 8330 8320 LET M(S,N)=M(S,N)+1: GOTO 1500 8330 LET N=N+9,E=1E4,R=R(N),M=9 8340 LET F(S,9)=F(S,9)-N*3,A=L 8350 IF N=12 THEN PRINT "&KScouting report&J": GOTO 8500 8360 IF N=10 THEN LET M=4E3 ELSE LET M=1E4 8400 PRINT "INPUT range to detonation (2100 to";M; 8410 INPUT ") ---=>",D 8420 IF D<2100 OR D>1E4 THEN 8400 ELSE LET R=2E3 8430 GOSUB 3800: LET Y1=Y3,X1=X3 8440 LET V=S,M=9: GOTO 3460 8500 FOR V=L1+1 TO L6: REM...Scout Probes & Anti-M. bomb 8510 IF E(V)<0 THEN 8650 8520 LET Y2=Y(V),X2=X(V),D=INT(FND(D)) 8530 IF D>R THEN 8650 8540 GOSUB 3500 8550 IF A+A(N)L THEN 8650 8600 LET T=C(V): GOSUB 2600 8610 PRINT TAB(30);"Location is ";%C;Y2;TAB(52);X2 8650 NEXT V 8670 GOTO 1510 8700 PRINT "&K": PRINT I$;" Scan Analysis&J" 8705 FOR I=L1+1 TO L6: REM...Scan analysis 8710 IF E(I)<0 THEN 8880 8720 LET X2=X(I),Y2=Y(I),D=FND(D) 8730 IF D>5500 THEN 8880 ELSE LET T=C(I) 8740 LET E$=S$(T*3-2,T*3): GOSUB 3500 8745 IF F(I,9)=1 THEN GOSUB 8890: GOTO 8880 8750 PRINT E$;: GOSUB 2600: PRINT "# ";I 8755 PRINT TAB(15);R$;D,C$;A: PRINT 8760 PRINT ,N$;E(I) 8770 PRINT ,H$;F(I,6): LET N=W(I): PRINT "WEAPONS:", 8780 IF F(I,4)>0 THEN PRINT " Phazers";TAB(35);R$;R(3) 8790 IF F(I,5)>0 THEN PRINT ," Photons";TAB(35);R$;R(4) 8800 PRINT ,: GOSUB 2305: PRINT TAB(35);R$;R(N): PRINT 8810 FOR J=1 TO 9 8820 IF D(I,J)>.5 OR D(I,J)=0 THEN 8870 8830 IF J=8 THEN LET N=W(I): GOSUB 2305 ELSE LET N=J: GOSUB 2400 8840 IF D(I,J)>0 THEN PRINT " damaged": GOTO 8870 8850 IF D(I,J)<=-1 THEN PRINT " destroyed": GOTO 8870 8860 PRINT " badly damaged" 8870 NEXT J 8875 PRINT : INPUT (1,0)"Enter any letter when ready ---=>",Y$ 8880 NEXT I 8885 GOTO 2010 8890 PRINT "High energy field on ";C$;INT(A),R$;INT(D) 8895 RETURN 8900 PRINT "&KShip towing:&J" 8905 PRINT ," 0 = Release any towed ship." 8910 FOR I=1 TO 10 8915 LET T=C(I): PRINT ,I;" = ";S$(T*3-2,T*3) 8920 NEXT I 8930 INPUT (2,0)"&JTow which ship? (0 to 10) ---=>",Z 8935 LET Z=INT(Z): IF Z<0 OR Z>10 THEN 2010 ELSE PRINT 8940 IF Z=0 THEN LET B(S)=0: GOTO 2010 8945 IF E(Z)<0 THEN PRINT "That ship is dead!": GOTO 2010 8950 IF Z=S THEN PRINT "You can't tow yourself!": GOTO 2010 8955 LET Y2=Y(Z),X2=X(Z),D=INT(FND(D)) 8960 IF D<=2000 THEN 8980 8970 PRINT "Ship ";R$;D;" Must be within 2000": GOTO 2010 8980 PRINT "Tractor beam engaged. ";S$(Z*3-2,Z*3);" in tow." 8990 LET B(S)=Z: GOTO 2000 9000 PRINT ,"&JAliens moving&J" 9010 FOR V=L1+1 TO L6 9020 IF E(V)<0 THEN 9950 9030 LET T=C(V),T1=INT((T-1)/5) 9040 IF T1=2 AND K9>0 THEN 9100 9045 IF T1=3 AND R9>0 THEN 9100 9050 IF T1=4 AND G9>0 THEN 9100 9060 IF T1=5 AND X9>0 THEN 9100 ELSE LET Q(T)=Q(T)-1 9070 PRINT S$(T*3-2,T*3);" Self destructing!",: LET E(V)=-V 9080 LET T2=.1: PRINT "Intercepted message says all major" 9090 GOSUB 2730: PRINT " ships are destroyed!": GOTO 9950 9100 IF B(V)=0 THEN LET B(V)=FNR(15) 9110 IF B(V)<1 OR B(V)>30 THEN 9950 ELSE LET S=B(V) 9120 IF E(S)<=0 THEN LET B(V)=FNR(15): GOTO 9950 9130 IF RND(0)>.2 THEN 9200 ELSE LET Y1=Y(V),X1=X(V) 9140 FOR I=1 TO L1: REM...Scan search 9150 IF E(I)<0 THEN 9190 ELSE LET Y2=Y(I),X2=X(I) 9160 LET D=INT(FND(D)),R=F(V,3)*D(V,3) 9170 IF W(I)=9 AND D>2E3 THEN 9180: REM...:T: Cloaked! 9180 IF R>D THEN LET B(V)=I,E(V)=E(V)-10 9190 NEXT I 9200 IF D(V,9)<1 THEN 9300: REM...cloak damaged 9210 IF F(V,9)=8 THEN LET F(V,9)=1: REM...cloak on! 9300 LET Y1=Y(V),X1=X(V),Y2=Y(S),X2=X(S) 9310 LET D=INT(FND(D)),R=F(V,3)*D(V,3),L8=S,L9=S 9320 IF D>R THEN 9600 ELSE LET T=C(V): REM...Spec. weap. 9330 LET I$=S$(T*3-2,T*3): GOSUB 3500: LET L=A 9340 IF D(V,8)<.5 THEN 9400 ELSE LET M=8,N=W(V) 9350 IF N>3 THEN GOSUB 4500 ELSE GOSUB 4010 9360 IF D>5E3 AND RND(0)>.5 THEN 9950 9400 IF D(V,5)<.5 THEN 9500 ELSE LET M=5: REM...photons 9410 LET Y1=Y(V),X1=X(V),Y2=Y(S),X2=X(S) 9420 GOSUB 3500: LET L=A: LET N=4: LET E(V)=E(V)-100 9430 LET R=F(V,M)*D(V,M): GOSUB 4500 9500 IF D(V,4)<.5 THEN 9600 ELSE LET N=3: REM...Phazers 9510 LET M=4,Y1=Y(V),X1=X(V),R=R(N) 9520 GOSUB 4010: LET E(V)=E(V)-250 9600 IF D(V,1)>.2 AND D(V,6)>.9 THEN 9700: REM.Fix engines 9610 LET S=V: GOSUB 2250: GOTO 9900 9700 IF E(V)<500 THEN 9900 ELSE GOSUB 3500: REM...Move 9710 LET D=F(V,1)*D(V,1) 9720 GOSUB 3800: LET Y(V)=Y3,X(V)=X3 9730 LET E(V)=E(V)-(D/15) 9800 IF RND(0)>.1 THEN 9900: REM...Repair damages 9810 LET S=V: GOSUB 2250 9900 IF E(V)<500 THEN LET E(V)=E(V)+FNR(100)+200 9910 IF F(V,6)>1E3 THEN 9950 9920 IF D(V,6)<1 OR D(V,7)<1 OR E(V)<1500 THEN 9950 9930 LET E(V)=E(V)-1E3,F(V,6)=F(V,6)+1E3 9950 NEXT V 9980 LET T9=INT(T9)+.2 9990 LET S=1: GOTO 1500 10000 IF S9=0 OR Q(10)=0 THEN 11000 10100 PRINT "&JAlien invasion repulsed!!!": GOTO 12000 11000 IF S9=0 THEN PRINT "All starships destroyed!" 11100 IF Q(10)=0 THEN PRINT "All BASES destroyed!" 12000 END