10 REM ... STTR7.ECB "UNIVAC" UTS700 STARTREK 20 REM ... Adapted to SOL-20 2-25-79 Ralph Hopkins 30 DEF FNS$(S)=B$(S,S): REM ...Sector #'s are stored as char. 40 REM ...Coordinate displays function 50 DEF FNX$(X,Y)="("+FNS$(X)+","+FNS$(Y)+")" 60 DEF FNE(E)=INT(100*E)/100: REM ..."Print" truncation 70 REM ...Distance from ENTERPRISE function 80 DEF FND(X1,X2)=SQR((S1-X1)*(S1-X1)+(S2-X2)*(S2-X2)) 90 REM ...Integer function for VS/9 to OS/3 Compatability 100 DEF FNI(X1)=INT(X1) 110 DEF FNU(X)=(SGN(X)+1)/2: REM ...Unit step function 120 REM ...Random Integer function contained in (1,x1) 130 DEF FNR(X1)=FNI(RND(0)*X1)+1 140 DIM B(3,3),G(10,10),H(4),K(5,3),M(10,10),Q(10,10),R(2,3) 150 DIM B$(10),D$(28),H$(48),Q$(7) 160 LET B$="1234567890": LET D$="W I P T G L S C A D M ONOFST" 170 LET H$="Photon TubesS.R. SensorsL.R. SensorsWarp Engines" 180 LET Q$=".*>#+@.": LET W1=0: LET W2=0: LET W3=0 190 LET W4=0: LET W5=0: LET S9=0: LET D1=14 200 PRINT "&K": PRINT : PRINT : LET H0=4 210 PRINT TAB(17);"*******************" 220 PRINT TAB(15);"*** U N I V A C ***" 230 PRINT TAB(14);"*** UTS700 : BC/7 ***" 240 PRINT TAB(15);"*** S T A R T R E K ***" 250 PRINT TAB(17);"*******************" 260 PRINT : PRINT 270 PRINT " RUN 'STCMD' for detailed command explanations." 280 PRINT 290 LET T0=INT(100*RND(0))+INT(RND(0)*50)+100 300 FOR I=1 TO 10 310 LET X1=RND(0) 320 NEXT I 330 LET T0=FNI(RND(0)*20000)/10+FNI(RND(0)*5000) 340 IF T0<1000 THEN 330 ELSE LET R9=-10 350 LET E1=1250: LET E2=300: LET E3=2000: LET E4=1250 400 PRINT : INPUT "ENTER Galaxy size (3-10) --=>",G0 410 IF G0>10 OR G0<3 THEN PRINT : PRINT "*** WRONG ***": GOTO 400 420 LET P=G0+3: LET G1=G0+1: LET B8=-1: LET B9=-1 470 LET C$="Green" 480 FOR I=1 TO 3 490 FOR J=1 TO 3 500 LET B(I,J)=0 510 NEXT J 520 NEXT I 530 LET B0=-1 540 FOR I=1 TO 10 550 FOR J=1 TO 10 560 LET G(I,J)=0: LET M(I,J)=0 580 NEXT J 590 NEXT I 600 LET Q1=FNR(G0): LET Q2=FNR(G0) 610 LET S1=FNR(10): LET S2=FNR(10) 620 REM ...**** SET UP THE GALAXY **** 630 LET N1=0: LET N2=0: LET N3=0: LET P4=0 690 FOR I=1 TO G0 700 FOR J=1 TO G0 710 LET X1=RND(0)*50*(G0/10) 720 LET N4=0: LET N5=0: LET N6=0 750 IF X1<.09 THEN LET N5=N5+1 770 IF X1<.29 THEN LET N5=N5+1 790 IF X1<1.29 THEN LET N5=N5+1 810 IF X1<3.29 THEN LET N5=N5+1 830 IF X1<13.29 THEN LET N5=N5+1 850 IF N2>=36 THEN LET N5=0 870 LET N2=N2+N5 880 IF N1>2 THEN 940 890 IF RND(0)<.97 THEN 940 900 LET B(N1+1,1)=I: LET B(N1+1,2)=J 920 LET B(N1+1,3)=RND(0)*500+500: LET N4=1 940 LET N7=ABS(FNR(10)-1): LET N1=N1+N4 960 LET X1=RND(0)*40*(G0/10) 970 IF X1<4.26 THEN LET N6=N6+1 990 IF X1<15.26 THEN LET N6=N6+1 1010 LET N3=N3+N6 1020 LET G(I,J)=G(I,J)+N6*1000+N5*100+N4*10+N7 1030 REM ...@@@ Optionally add a black hole to quadrant @@@ 1040 IF RND(0)<.75 THEN LET G(I,J)=G(I,J)+.1 1050 NEXT J 1070 NEXT I 1080 IF N1>0 THEN 1160 1090 LET I=FNR(G0): LET J=FNR(G0) 1110 LET G(I,J)=G(I,J)+10 1120 LET B(N1+1,1)=I: LET B(N1+1,2)=J 1140 LET B(N1+1,3)=RND(0)*500+500: LET N1=1 1160 LET T=T0-(2.4*N2-(FNR(10)-5)): LET T2=T: LET T9=T 1190 REM ...N1=Total Bases N2=Total Klingons 1200 REM ...N3=Total Romulans for a single quadrant 1210 REM ...N4=Bases N5=Klingons 1220 REM ...N6=Romulans N7=Stars 1230 PRINT 1240 PRINT "CAPTAIN, Starfeet Command reports that ";N2 1250 PRINT "Klingons have penetrated federation space." 1260 PRINT " They are assisted by Romulan forces." 1270 PRINT "ONLY ";N1;" Starbase(s) have survived the" 1280 PRINT "initial assault. You have until stardate ";T0 1290 PRINT "to defeat the invaders. And remember, beware of" 1300 PRINT "OUT-OF-SIGHT BLACK HOLES!!": PRINT 1310 REM ...+++ SET UP QUADRANT +++ 1320 IF N2=0 THEN 7470 1330 LET N6=FNI(FNI(G(Q1,Q2))/1000) 1340 LET N5=FNI(FNI(G(Q1,Q2))/100)-N6*10 1350 LET N4=FNI(FNI(G(Q1,Q2))/10)-N6*100-N5*10 1360 LET N7=FNI(G(Q1,Q2))-N6*1000-N5*100-N4*10 1370 LET B8=-1: LET B9=-1: LET F9=-1 1400 FOR I=1 TO 10 1410 FOR J=1 TO 10 1420 LET Q(I,J)=1 1430 NEXT J 1440 NEXT I 1450 LET Q(S1,S2)=3 1460 IF N5+N6=0 THEN 1650 1470 PRINT " Deflector Screens Activating ** RED ALERT **" 1480 IF N5=0 THEN 1570 1490 PRINT "Sensors show ";N5;" KLINGONS(s)." 1500 FOR I=1 TO N5 1510 GOSUB 4120 1520 LET K(I,1)=X1: LET K(I,2)=X2 1540 LET K(I,3)=RND(0)*51+175 1550 LET Q(X1,X2)=5 1560 NEXT I 1570 IF N6=0 THEN 1650 1580 FOR I=1 TO N6 1590 GOSUB 4120 1600 LET R(I,1)=X1: LET R(I,2)=X2 1620 LET R(I,3)=RND(0)*51+175 1630 LET Q(X1,X2)=6 1640 NEXT I 1650 IF N7=0 THEN 1700 1660 FOR I=1 TO N7 1670 GOSUB 4120: LET Q(X1,X2)=2 1690 NEXT I 1700 IF N4=0 THEN 1760 1710 IF C$="DOCKED" THEN 1760 1720 GOSUB 4120: LET Q(X1,X2)=4 1730 LET B9=X1: LET B8=X2 1760 IF G(Q1,Q2)-FNI(G(Q1,Q2))<.09 THEN 1790 1770 GOSUB 4120: LET Q(X1,X2)=7 1790 LET Q8=E4: LET Q9=E3: GOSUB 6870 1820 IF S9<>0 THEN 2350 1830 REM ...**** SHORT RANGE SENSOR SCAN **** 1840 LET C$="GREEN" 1850 IF E1>299 THEN 1880 1860 PRINT "ENERGY LOW, sounding YELLOW alert" 1870 LET C$="YELLOW" 1880 IF FNI(G(Q1,Q2)/100)<=0 THEN 1900 1890 LET C$="RED" 1900 IF N4=0 THEN 1950 1910 IF F9<>1 THEN 1950 1920 LET C$="DOCKED": LET P=G0+3: LET E2=300 1950 REM ...**** PRINT QUADRANT MAP **** 1960 IF H(2)<=0 THEN 1990 1970 PRINT "Short range sensor scan unavailable" 1980 GOTO 2350 1990 PRINT 2000 PRINT " 1 2 3 4 5 6 7 8 9 0 ", 2010 PRINT " STARDATE ";FNE(T) 2020 FOR I=1 TO 10 2030 IF I<10 THEN PRINT I;" "; ELSE PRINT 0;" "; 2040 FOR J=1 TO 10 2050 PRINT Q$(Q(I,J),Q(I,J));" "; 2060 NEXT J 2070 IF I<10 THEN PRINT FNS$(I)+" "; ELSE PRINT "0 "; 2080 IF I=1 THEN PRINT "Years Remaining ";FNI((T0-T)*100)/100 2110 IF I=2 THEN PRINT "CONDITION ";C$ 2130 IF I=3 THEN PRINT "Quadrant ";FNX$(Q1,Q2) 2150 IF I=4 THEN PRINT "Sector ";FNX$(S1,S2) 2170 IF I=5 THEN PRINT "Warp Engines ";FNE(E1) 2190 IF I=6 THEN PRINT "Impulse power ";FNE(E2) 2210 IF I=7 THEN PRINT "Phaser Banks ";FNE(E3) 2230 IF I=8 THEN PRINT "Shields at ";FNE(E4) 2250 IF I=9 THEN PRINT "Photon Torpedoes ";P 2270 IF I=10 THEN PRINT "Klingons left ";N2 2280 NEXT I 2290 PRINT " 1 2 3 4 5 6 7 8 9 0 "; 2300 LET M(Q1,Q2)=1: LET T8=T9 2320 IF T-T9>0 THEN 2340 2330 LET T8=T-1 2340 PRINT " Rating ";FNI(P4/(T-T8)*1000)/10 2350 IF T>T0 THEN 7390 2360 IF T2=T THEN 2510 2370 LET R9=RND(0): LET E1=E1+225*(T-T2): LET T2=T 2400 FOR H2=1 TO H0-1 2410 LET H1=H(H2)-R9: LET H(H2)=H1*FNU(H1) 2430 NEXT H2 2440 LET H1=FNR(20) 2450 IF H1>=H0 THEN 2470 2460 LET H(H1)=H(H1)+R9 2470 IF B0>0 THEN 2500 2480 IF R9<.88 THEN 2510 2490 LET B0=FNR(3) 2500 GOSUB 7810 2510 INPUT "CMD: ",J$ 2520 IF LEN(J$)=0 THEN PRINT : GOTO 2510 2530 LET I$=" " 2540 IF LEN(J$)>=2 THEN LET I$(1,2)=J$(1,2) ELSE LET I$(1,1)=J$(1,1) 2550 FOR I=1 TO D1 2560 IF D$(2*(I-1)+1,2*I)=I$(1,2) THEN 2600 2570 NEXT I 2580 PRINT "NOT a Starfleet command....ENTER a 'C'": PRINT 2590 GOTO 2510 2600 IF I>9 THEN 2630 2610 ON I GOTO 2690,2900,4930,5700,7650,4170,1830,6720,6480 2620 REM ..CMDS W I P T G L S C A 2630 ON I-9 GOTO 7740,4580,2650,2670,9000 2640 REM ...CMDS D MAP ON OFF 2650 LET S9=0 2660 GOTO 2350 2670 LET S9=1: REM ...*@* CMD "OFF" *@* 2680 GOTO 2350 2690 REM ...*@* CMD W: WARP MOVEMENT *@* 2700 PRINT " COURSE: ---=>"; 2710 INPUT C 2720 IF C<1 OR C>=9 THEN 2350 2740 PRINT " WARP factor: ---=>"; 2750 INPUT W 2760 IF W<1 OR W>8 THEN PRINT : GOTO 2350 2780 LET W0=W*(1+(SQR(W)/8)*(RND(0)-0.5)) 2790 IF W0<1 OR W0>9 THEN 2780 2810 LET W=W0 2820 IF W5=0 THEN 2850 2830 PRINT "*#* WARP ENGINES OVERHEATED *#*" 2840 GOTO 2350 2850 LET X5=FNI(W*10) 2860 IF E1<=10*X5 THEN 3010 2870 LET E1=E1-10*X5 2880 LET T=T+SQR(W) 2890 GOTO 3050 2900 REM ...*@* CMD I: IMPULSE MOVEMENT *@* 2910 PRINT " COURSE: ---=>"; 2920 INPUT C 2940 IF C<1 OR C>=9 THEN 2350 2950 INPUT " IMPULSE factor: ---=>",W 2960 IF W<1 OR W>9 THEN 2350 2980 LET X5=FNI(W): LET W=W/10 3000 IF E2>=5*X5 THEN 3030 3010 PRINT "Insufficent power for movement" 3020 GOTO 2350 3030 LET E2=E2-7.5*X5 3040 LET T=T+SQR(W)/1.5 3050 REM ...*** Common MOVEMENT module *** 3060 LET W3=W2: LET W2=W1: LET W1=W+RND(0) 3090 LET W4=(W1-3)*FNU(W1-3) 3100 LET W4=(W2-3)*FNU(W2-3)+W4 3110 LET W4=(W3-3)*FNU(W3-3)+W4 3120 LET H(H0)=W4 3130 IF W4RND(0)*3.5 THEN 3180 3170 LET W5=0 3180 LET Q(S1,S2)=1: LET F9=-1: LET C$="MOVING" 3210 IF T>T0 THEN 7390 3220 LET X=S1: LET Y=S2: GOSUB 4080 3250 FOR I=1 TO X5 3260 LET S1=S1+X1: LET S2=S2+X2 3280 IF S1<.5 OR S1>10.5 THEN 3600 3300 IF S2<.5 OR S2>10.5 THEN 3600 3320 LET X6=FNI(S1+.5): LET X7=FNI(S2+.5) 3340 IF Q(X6,X7)<>7 THEN 3420 3350 PRINT "** The ENTERPRISE has warped into a BLACK HOLE **" 3360 LET Q1=FNR(G0): LET Q2=FNR(G0) 3380 IF G(Q1,Q2)-FNI(G(Q1,Q2))<.09 THEN 3360 3390 LET S1=FNR(10): LET S2=FNR(10): GOTO 1310 3420 IF Q(X6,X7)<>1 THEN 3560 3430 IF FNI(ABS(X6-B9)+.5)>1 THEN 3610 3440 IF FNI(ABS(X7-B8)+.5)>1 THEN 3610 3450 INPUT "Do you wish to DOCK ? (Y,N) ---=>",A$ 3460 IF A$="Y" THEN 3510 3470 IF A$="YES" THEN 3510 3480 IF A$="N" THEN 3500 3490 IF A$<>"NO" THEN 3450 3500 GOTO 3610 3510 LET C$="DOCKED": LET F9=1 3520 LET S1=X6: LET S2=X7: GOTO 3660 3560 PRINT "ENTERPRISE blocked by object at ";FNX$(X6,X7) 3570 LET S1=S1-X1: LET S2=S2-X2: GOTO 3620 3600 REM ... 3610 NEXT I 3620 LET S1=FNI(S1+.5): LET S2=FNI(S2+.5): LET I9=0 3650 IF W>.9 THEN 3670 3660 LET I9=1 3670 REM ...*** SECTOR ADJUSTMENT *** 3680 IF S1>0 THEN 3730 3690 LET S1=S1+10: LET I9=0: LET Q1=Q1-1: GOTO 3680 3730 IF S1<11 THEN 3780 3740 LET S1=S1-10: LET I9=0: LET Q1=Q1+1: GOTO 3730 3780 IF S2>0 THEN 3830 3790 LET S2=S2+10: LET I9=0: LET Q2=Q2-1: GOTO 3780 3830 IF S2<11 THEN 3880 3840 LET S2=S2-10: LET I9=0: LET Q2=Q2+1: GOTO 3830 3880 REM ...*** QUADRANT ADJUSTMENT *** 3890 IF Q1>0 THEN 3930 3900 LET Q1=Q1+G0: LET I9=0: GOTO 3890 3930 IF Q10 THEN 4010 3980 LET Q2=Q2+G0: LET I9=0: GOTO 3970 4010 IF Q21 THEN 4130 4160 RETURN 4170 REM ...*@* CMD L: LONG RANGE SENSOR SCAN *@* 4180 IF H(3)<=0 THEN 4210 4190 PRINT "ION Storm Prevents Scan." 4200 GOTO 4550 4210 PRINT 4220 PRINT "Long Range Sensor Scan for Quadrant ";FNX$(Q1,Q2) 4230 PRINT "+-----+-----+-----+" 4240 LET T=T+.4 4250 FOR I=Q1-1 TO Q1+1 4260 LET X1=I 4270 FOR J=Q2-1 TO Q2+1 4280 LET X2=J 4290 IF X1>0 THEN 4310 4300 LET X1=X1+G0 4310 IF X10 THEN 4350 4340 LET X2=X2+G0 4350 IF X29 THEN 4460 4440 PRINT TAB(6*(J-1)+3); 4450 GOTO 4500 4460 IF N(J)>99 THEN 4490 4470 PRINT TAB(6*(J-1)+2); 4480 GOTO 4500 4490 PRINT TAB(6*(J-1)+1); 4500 PRINT N(J);" :"; 4510 NEXT J 4520 PRINT 4530 PRINT "+-----+-----+-----+" 4540 NEXT I 4550 IF C$<>"RED" THEN 2350 4560 GOSUB 6870: GOTO 2350 4580 REM ...*@* CMD M: GALAXY MAP DISPLAY *@* 4590 FOR I=1 TO G0 4600 PRINT TAB(6*(I-1)+4);I; 4610 NEXT I 4620 PRINT : PRINT " +"; 4640 FOR I=1 TO G0: PRINT "-----+";: NEXT I 4670 PRINT 4680 FOR I=1 TO G0 4690 IF I<10 THEN PRINT I;":"; ELSE PRINT 0;":"; 4700 FOR J=1 TO G0 4710 IF M(I,J)>0 THEN 4740 4720 PRINT TAB(6*(J-1)+1);" :"; 4730 GOTO 4840 4740 LET X3=FNI(G(I,J)/1000): LET X2=FNI(G(I,J))-X3*1000 4760 IF X2>9 THEN 4790 4770 PRINT TAB(6*(J-1)+5); 4780 GOTO 4830 4790 IF X2>99 THEN 4820 4800 PRINT TAB(6*(J-1)+4); 4810 GOTO 4830 4820 PRINT TAB(6*(J-1)+3); 4830 PRINT X2;" :"; 4840 NEXT J 4850 PRINT 4860 NEXT I 4870 PRINT " +"; 4880 FOR I=1 TO G0: PRINT "-----+";: NEXT I 4910 PRINT 4915 PRINT "ENTERPRISE in Quadrant ";FNX$(Q1,Q2);" ..."; 4920 GOTO 2350 4930 REM ...*@* CMD P: FIRE PHAZERS *@* 4940 LET T=T+.25 4950 IF N5+N6>0 THEN 4980 ELSE PRINT 4960 PRINT : PRINT TAB(9);"-:- TARGETS UNAVAILABLE -:-" 4970 PRINT : GOTO 2350 4980 PRINT "PHASERS locked on TARGET. Energy available: ";FNE(E3) 4990 INPUT "*#* UNITS to Fire: ---=>",X1 5000 IF E3>=X1 THEN 5030 ELSE PRINT 5010 PRINT TAB(9);"+%+ Insufficient Power Available +%+" 5020 PRINT : GOTO 5670 5030 IF X1<1 THEN 2350 ELSE PRINT 5040 PRINT TAB(15);"-=< Phasers Firing >=-": LET E3=E3-X1 5060 FOR L=1 TO 2 5070 IF N5=0 THEN 5350 5080 FOR I=1 TO N5 5090 IF K(I,3)<=0 THEN 5340 5100 IF FND(K(I,1),K(I,2))>3 THEN 5260 5110 REM ...*** Distance <=3 *** 5120 IF X1 3 *** 5270 IF L=1 THEN 5340 5280 LET X2=K(I,3)*(FND(K(I,1),K(I,2))/3)*(FND(K(I,1),K(I,2))/3) 5290 IF X13 THEN 5540 5400 REM ...*** Distance <=3 *** 5410 IF X1 3 *** 5550 IF L=1 THEN 5620 5560 LET X2=R(I,3)*(FND(R(I,1),R(I,2))/3)*(FND(R(I,1),R(I,2))/3) 5570 IF X10 THEN 5780 ELSE PRINT 5760 PRINT TAB(15);"=== TORPEDOES EXPENDED ===" 5770 PRINT : GOTO 6380 5780 INPUT "-=- Torpedo course: ---=>",C 5790 IF C<1 THEN 2350 5800 IF C>=9 THEN 2350 5810 GOSUB 4080: LET X=S1: LET Y=S2: LET P=P-1 5850 PRINT "-=- Torpedo away, track:" 5860 LET X=X+X1: LET Y=Y+X2 5880 IF X<.5 OR X>10.5 THEN 6410 5900 IF Y<.5 OR Y>10.5 THEN 6410 5920 IF (INT(X)=0) OR (INT(Y)=0) THEN 6410 5930 PRINT FNX$(INT(X),INT(Y)); 5940 LET X3=FNI(X+.5): LET X4=FNI(Y+.5) 5960 ON Q(X3,X4) GOTO 5860,5990,6430,6180,6050,6260,5970 5970 PRINT "( ) Torpedo absorbed by BLACK HOLE ( )" 5980 PRINT : GOTO 6380 5990 PRINT "* Torpedo deflected by Star *" 6000 LET C=C+SGN(RND(0)-.5)*(1+RND(0)*RND(0)) 6010 REM . +or- 1 (1,2) 6020 REM . Thus in range (-2,-1) Union (+1,+2) 6030 GOSUB 4080: GOTO 5860 6050 PRINT : LET I=RND(0) 6055 IF I>.7 THEN PRINT "Ashes to ashes, dust to dust..." 6060 PRINT "KLINGON at sector ";FNX$(X3,X4); 6065 IF I>.7 THEN PRINT " *Cremated* by us" ELSE PRINT " *VAPORIZED*" 6070 LET P4=P4+1: IF I<.2 THEN PRINT TAB(9);"(0) Bullseye (0)" 6075 IF I<.15 THEN PRINT "...Chekov says, Good shooting Sir." 6080 FOR I=1 TO N5 6090 IF K(I,1)<>X3 THEN 6160 6100 IF K(I,2)<>X4 THEN 6160 6110 LET K(I,3)=0: LET G(Q1,Q2)=G(Q1,Q2)-100: LET N2=N2-1 6140 IF N2=0 THEN 7470 6150 GOTO 6370 6160 NEXT I 6170 GOTO 6410 6180 PRINT "Sir, WHAT HAVE YOU DONE ???": PRINT 6190 LET P4=P4-30: PRINT "***** STARBASE AT SECTOR "; 6200 PRINT FNX$(X3,X4);" DESTROYED *****": PRINT 6210 LET G(Q1,Q2)=G(Q1,Q2)-10: LET N1=N1-1: LET N4=0 6240 LET F9=-1: LET B8=-1: LET B9=-1: GOTO 6370 6260 PRINT : LET I=RND(0) 6265 IF I>.7 THEN PRINT "Photon detonating on target..." 6270 PRINT "ROMULAN at sector ";FNX$(X3,X4); 6275 IF I>.7 THEN PRINT " *OBLITERATED*" ELSE PRINT " *DEMOLISHED*" 6280 LET P4=P4+.5: IF I<.2 THEN PRINT TAB(9);"(*) Bullseye (*)" 6285 IF I<.15 THEN PRINT "...Chekov says, Nice shot Sir." 6290 FOR I=1 TO N6 6300 IF R(I,1)<>X3 THEN 6360 6310 IF R(I,2)<>X4 THEN 6360 6320 LET R(I,3)=0: LET G(Q1,Q2)=G(Q1,Q2)-1000: LET N3=N3-1 6350 GOTO 6370 6360 NEXT I 6370 LET Q(X3,X4)=1 6380 IF FNI(G(Q1,Q2)/100)<=0 THEN 1820 6390 GOSUB 6870: GOTO 2350 6410 PRINT : PRINT TAB(9);"-=- Torpedo Missed! -=-" 6420 PRINT : GOTO 6380 6430 REM ...Torpedo Curved back on Enterprise 6440 PRINT TAB(9);"# CAPTAIN!! #": PRINT 6450 PRINT "IT'S COMING BACK AT US!": PRINT 6460 PRINT "ENTERPRISE destroyed by its own torpedo" 6470 PRINT "*:* Services were held....": PRINT : GOTO 7390 6480 REM ...*@* CMD A: ALLOCATE POWER *@* 6490 INPUT "*@* TAKE POWER from device: ---=>",X1 6500 INPUT "+#+ and ALLOCATE to device: ---=>",X2 6510 IF X2>X1 THEN 6540 ELSE PRINT 6520 PRINT TAB(15);"=*= IMPOSSIBLE Captain ! =*=": PRINT 6525 PRINT "Warp Eng.=1 : Phasers=2 : Shields=3" 6530 GOTO 2350 6540 IF X2>3 THEN 6520 ELSE PRINT 6550 INPUT ".....UNITS to TRANSFER: ---=>",X3 6560 ON X1 GOTO 6570,6620 6570 IF E1>X3 THEN 6600 ELSE PRINT 6580 PRINT TAB(15);":^: INSUFFICIENT POWER AVAILABLE! :^:" 6590 PRINT : GOTO 2350 6600 LET E1=E1-X3: GOTO 6640 6620 IF X3>E3 THEN 6580 6630 LET E3=E3-X3 6640 ON X2-1 GOTO 6650,6680 6650 LET E3=E3+X3: LET Q9=Q9+X3: GOTO 6700 6680 LET E4=E4+X3: LET Q8=Q8+X3 6700 PRINT : PRINT TAB(9);"+*+ Transfer Complete +*+" 6710 GOTO 2350 6720 REM ...*@* CMD C: LIST OF COMMANDS *@* 6730 PRINT " W -- Warp Maneuver." 6740 PRINT " I -- Impulse Maneuver." 6750 PRINT " L -- Long Range Sensor Scan." 6760 PRINT " S -- Short Range Sensor Scan." 6770 PRINT " P -- Fire Phazers." 6780 PRINT " T -- Fire Photon Torpedoes." 6790 PRINT " A -- Allocate Power." 6800 PRINT " C -- Command list." 6810 PRINT " G -- Generate Power." 6820 PRINT " D -- Damage Control Report." 6830 PRINT " M -- Galaxy map of all mapped quadrants." 6840 PRINT " ON -- Supress short range sensor scan." 6850 PRINT " OFF -- Enable short range sensor scan." 6855 PRINT " STOP - STOP the program" 6860 GOTO 2350 6870 REM ...**** ENEMY ATTACK **** 6880 IF G(Q1,Q2)<=99 THEN 7380 6890 IF C$<>"DOCKED" THEN 6990 6900 FOR I=1 TO 3 6910 IF B(I,1)<>B9 THEN 6960 6920 IF B(I,2)<>B8 THEN 6960 6930 IF B(I,3)>200 THEN 6960 6940 PRINT "STARBASE shields too weak to protect the ENTERPRISE" 6950 GOTO 6990 6960 NEXT I 6970 PRINT "STARBASE SHIELDS protect ENTERPRISE" 6980 GOTO 7380 6990 IF G(Q1,Q2)<=99 THEN 7380 7000 IF N5=0 THEN 7170 7010 FOR I=1 TO N5 7020 IF K(I,3)<=0 THEN 7160 7030 IF FND(K(I,1),K(I,2))>3 THEN 7120 7040 LET E4=E4-K(I,3) 7050 PRINT FNE(K(I,3));TAB(9);"Unit Hit from "; 7060 PRINT " KLINGON at Sector ";FNX$(K(I,1),K(I,2)) 7070 IF E4>0 THEN 7090 7080 GOSUB 7440 7090 IF E4>500 THEN 7110 7100 PRINT "Shields holding at ";FNE(E4) 7110 GOTO 7160 7120 LET X1=K(I,3)/(FND(K(I,1),K(I,2))/3)^2 7130 LET E4=E4-X1 7140 PRINT FNE(X1);TAB(9);"UNIT HIT from "; 7150 GOTO 7060 7160 NEXT I 7170 IF N6=0 THEN 7340 7180 FOR I=1 TO N6 7190 IF R(I,3)<=0 THEN 7330 7200 IF FND(R(I,1),R(I,2))>3 THEN 7290 7210 LET E4=E4-R(I,3) 7220 PRINT FNE(R(I,3));TAB(9);"UNIT HIT from "; 7230 PRINT " ROMULAN at Sector ";FNX$(R(I,1),R(I,2)) 7240 IF E4>0 THEN 7260 7250 GOSUB 7440 7260 IF E4>500 THEN 7280 7270 PRINT "SHIELDS HOLDING at ";FNE(E4) 7280 GOTO 7330 7290 LET X1=R(I,3)/(FND(R(I,1),R(I,2))/3)^2 7300 LET E4=E4-X1 7310 PRINT FNE(X1);TAB(9);"UNIT HIT from "; 7320 GOTO 7230 7330 NEXT I 7340 IF E1<=0 THEN 7390 7350 IF E4<500 THEN 7370 7360 PRINT "SHIELDS HOLDING at ";FNE(E4);TAB(30);"--- "; 7370 PRINT FNE(((Q8-E4)/Q8)*100);" Percent Damage." 7380 RETURN 7390 PRINT : REM ...*** you lost game *** 7400 PRINT "*^* YOU HAVE BEEN DEFEATED, ";N2;" KLINGONS AND ";N3 7410 PRINT "ROMULANS REM AIN *^*" 7420 PRINT : PRINT "*#* THE FEDERATION WILL BE DESTROYED ! *#*" 7430 PRINT : GOTO 9000 7440 REM ...*** DRAW POWER FOR SHIELDS *** 7450 PRINT "Insufficient power in shields to withstand enemy attack" 7460 GOTO 7400 7470 PRINT : REM ...*** you won the game *** 7480 LET P4=FNI(P4/(T-T9)*1000)/10 7490 IF P4>10 THEN 7540 7500 PRINT " Even though the KLINGONS have been destroyed," 7510 PRINT "and the ROMULANS have fled, you have been" 7520 PRINT "too damaging to the Federation to win." 7530 PRINT : GOTO 7630 7540 PRINT : PRINT : PRINT TAB(15); 7550 PRINT "*#* CONGRATULATIONS CAPTAIN *#*": PRINT 7560 PRINT " The KLINGONS have been destroyed, and" 7570 PRINT "the ROMULANS have fled, making this a" 7580 PRINT "GREAT VICTORY for the Federation !!!!" 7590 IF P4<100 THEN 7630 7600 PRINT " In recognition of your prompt and efficient" 7610 PRINT "action, you are hereby promoted to the rank" 7620 PRINT "of STARFLEET ADMIRAL.": PRINT 7630 PRINT TAB(15);"(#) RATING: ";P4;" (#)" 7640 GOTO 9000 7650 REM ...*@* CMD G: GENERATE POWER *@* 7660 IF C$="RED" THEN 7720 ELSE PRINT 7670 LET E1=E1+500: LET T=T+.5 7690 IF T>T0 THEN 7390 7700 PRINT TAB(15);"+%+ Power Generated +%+" 7710 PRINT : GOTO 2350 7720 PRINT TAB(9);"<*> IMPOSSIBLE under RED ALERT <*>" 7730 PRINT : GOTO 2350 7740 REM ...*@* CMD D: DAMAGE CONTROL REPORT *@* 7750 PRINT TAB(15);"<*> DAMAGE CONTROL REPORT <*>": PRINT 7770 FOR I=1 TO H0 7780 PRINT H$(12*(I-1)+1,12*I);" ";FNE(H(I)) 7790 NEXT I 7800 GOTO 2350 7810 REM ...*** Romulans attack base *** 7820 IF B(B0,3)<=0 THEN 8010 7830 LET B1=FNI(G(B(B0,1),B(B0,2))/1000) 7840 IF B1=0 THEN 8010 7850 LET B3=RND(0)*175+51 7860 FOR I=1 TO B1 7870 LET B2=FNR(7) 7880 IF B2>3 THEN LET B3=B3/B2 7900 LET B(B0,3)=B(B0,3)-B3 7910 NEXT I 7920 PRINT "ROMULANS at Quadrant ";FNX$(B(B0,1),B(B0,2));" "; 7930 PRINT "attack STARBASE!" 7940 IF B(B0,3)<=0 THEN 7970 7950 PRINT "STARBASE ENERGY LEVELS DROP TO ";FNE(B(B0,3)) 7960 RETURN 7970 PRINT " and DESTROY IT!" 7980 LET G(B(B0,1),B(B0,2))=G(B(B0,1),B(B0,2))-10 7990 LET P4=P4-15: LET N1=N1-1 8000 RETURN 8010 LET B0=-1 8020 RETURN 9000 END