10 REM STTR.ECB ===== S T A R T R E K (STTR) ==== 4-15-79 20 PRINT "&K" 30 CURSOR 4,1 40 PRINT ,"**************" 50 PRINT ,"*** ***" 60 PRINT ,"*** STTR ***" 70 PRINT ,"*** ***" 80 PRINT ,"**************" 90 PRINT 100 DIM D(12),E(30),H(30),J(9),K(9),O(88),P(30) 110 DIM Q(88),S(30),T(30),V(30),M(88),X(30),Y(30) 120 LET P=1: LET B8=1: LET V=1: LET H=1 130 LET K9=INT(RND(0)*15)+5: LET K1=K9+1 140 LET D=INT(RND(0)*15)+10+K9 150 LET B9=INT(RND(0)*5)+1: LET B=B9 160 FOR X=1 TO 30: LET E(X)=-1: NEXT X 170 LET X9=1: LET Y9=8 200 LET E(1)=3000: LET S(1)=500: LET T(1)=1: LET P(1)=10 210 LET Y(1)=5: LET X(1)=5 300 FOR X=5 TO B9+4: REM ===== >B< SET-UP ===== 310 LET E(X)=INT((RND(0)*5)*1000)+5000 320 LET T(X)=5 330 LET P(X)=INT(RND(0)*11)+5 340 GOSUB 900 350 LET S(X)=2500: REM === >B< SHIELDS === 390 NEXT X 400 FOR X=10 TO K9+10: REM ===== SET-UP ===== 410 LET E(X)=2000 420 LET S(X)=200 430 LET T(X)=10 440 GOSUB 900 450 NEXT X 500 FOR X=1 TO K9+10 510 IF E(X)>0 THEN GOSUB 900 520 NEXT X 550 FOR X=1 TO 8: LET D(X)=0: NEXT X 560 FOR X=1 TO 78: LET M(X)=0: NEXT X 600 PRINT " YOU HAVE ";D;" STARDATES TO DESTROY ";K9;" KLINGONS" 610 PRINT 620 PRINT "***** ENTER '-1' FOR A LIST OF COMMANDS *****" 630 PRINT 700 FOR X=1 TO 88: LET Q(X)=0: NEXT X 710 FOR X=11 TO 88: LET O(X)=INT(RND(0)*9)+1: NEXT X 800 DATA 0,-1,-1,-1,0,1,1,1,0 810 DATA 1,1,0,-1,-1,-1,0,1,1 820 FOR X=1 TO 9: READ J(X): NEXT X 830 FOR X=1 TO 9: READ K(X): NEXT X 840 GOTO 5000 850 LET V9=V(P) 860 LET H9=H(P) 870 LET Y9=Y(P) 880 LET X9=X(P) 890 RETURN 900 LET V(X)=INT(RND(0)*8)+1 910 LET H(X)=INT(RND(0)*8)+1 920 LET Y(X)=INT(RND(0)*8)+1: LET V=V(X): IF RND(0)>.9 THEN 940 930 LET X(X)=INT(RND(0)*8)+1: LET H=H(X) 940 LET V(X)=V: LET H(X)=H 945 RETURN 950 IF C1=0 THEN PRINT "GREEN" 960 IF C1=1 THEN PRINT "YELLOW" 970 IF C1=2 THEN PRINT "RED" 980 IF C1=3 THEN PRINT "DOCKED" 990 RETURN 1000 REM ++++++ PLOT COURSE +++++++ 1010 LET Y=Y1-Y2: LET X=X1-X2 1020 IF X=0 THEN 1030 1022 LET Z=Y/X 1025 IF Z>1 THEN 1030 1026 GOTO 1040 1030 LET C0=7: IF Y>0 THEN LET C0=3 1035 IF X=0 THEN 1090 1039 LET Z=X/Y: GOTO 1080 1040 IF Z>-1 THEN 1050 1041 LET C0=6: IF Y>0 THEN LET C0=2 1045 IF Z=-1 THEN 1090 1049 LET Z=1-ABS(X/Y): GOTO 1080 1050 IF Z>0 THEN IF Z<=1 THEN 1052 1051 GOTO 1060 1052 LET C0=8: IF Y>0 THEN LET C0=4 1055 IF Z=1 THEN 1090 1059 LET Z=1-ABS(Z): GOTO 1080 1060 IF Z>-1 THEN IF Z<=0 THEN 1070 1065 LET Z=X/Y: GOTO 1080 1070 LET C0=5: IF X<0 THEN LET C0=1 1080 LET C0=C0+ABS(Z) 1090 LET D0=SQR(((X1-X2)*(X1-X2))+((Y1-Y2)*(Y1-Y2))) 1095 RETURN 1100 LET C1=0: REM +++++ CONDITION +++++ 1110 FOR Z=10 TO K9+10 1120 IF C1=3 THEN 1190 1130 IF C1=2 THEN 1190 1140 IF E(Z)<=0 THEN 1190 1150 FOR V=V(P)-1 TO V(P)+1 1155 FOR H=H(P)-1 TO H(P)+1 1160 IF C1=0 THEN IF V=V(Z) THEN IF H=H(Z) THEN LET C1=1 1170 IF V(P)=V(Z) THEN IF H(P)=H(Z) THEN LET C1=2 1180 NEXT H 1185 NEXT V 1190 NEXT Z 1200 FOR Z=P+1 TO 9: REM ++++ DOCK CHECK ++++ 1205 IF E(Z)<=0 THEN 1290 1210 IF V(Z)=V(P) THEN IF H(P)=H(Z) THEN 1230 1220 GOTO 1290 1230 FOR Y1=Y(Z)-1 TO Y(Z)+1 1240 FOR X1=X(Z)-1 TO X(Z)+1 1245 IF C1=3 THEN 1280 1250 IF Y(P)=Y1 THEN IF X(P)=X1 THEN 1260 1255 GOTO 1280 1260 PRINT " SHIELDS DROPPED FOR DOCKING ": PRINT 1265 FOR Z1=1 TO 8: LET D(Z1)=0: NEXT Z1: REM .=== DAMAGE REPAIR 1270 LET S(P)=50: LET E(P)=3000: LET P(P)=10: LET C1=3 1280 NEXT X1 1285 NEXT Y1 1290 NEXT Z 1295 RETURN 1300 LET N=INT(W0*10) 1320 LET Y=J(C0)+(J(C0+1)-J(C0))*(C0-INT(C0)) 1330 LET X=K(C0)+(K(C0+1)-K(C0))*(C0-INT(C0)) 1340 RETURN 1500 REM +++++ PLOT COURSE ++++++ 1510 LET Y1=Y(P): LET X1=X(P) 1515 FOR Z1=1 TO W0*10 1520 LET Y1=Y1+Y: LET X1=X1+X 1530 IF Y1<1 THEN 1600 1540 IF X1<1 THEN 1600 1550 IF X1>8 THEN 1600 1560 IF Y1>8 THEN 1600 1565 GOSUB 1900: REM ==== DID RUN INTO ANYTHING ? 1570 NEXT Z1 1580 LET Y(P)=Y1: LET X(P)=X1 1590 LET E(P)=E(P)-(N*2): LET Y(P)=INT(Y(P)): LET X(P)=INT(X(P)) 1595 RETURN 1600 REM ....Y(P)=INT(Y(P)-(Y)): X(P)=INT(Y(P)-(X)) 1610 LET Y=((V(P)*10)+Y(P))+(Y*W0*10) 1620 LET X=((H(P)*10)+X(P))+(X*W0*10) 1630 LET V(P)=INT(Y/10): LET H(P)=INT(X/10) 1640 LET Y(P)=INT(Y-V(P)*10): LET X(P)=INT(X-H(P)*10) 1650 IF X(P)>8 THEN LET X(P)=Y9 1652 IF X(P)<1 THEN LET X(P)=X9 1655 IF Y(P)>8 THEN LET Y(P)=Y9 1657 IF Y(P)<1 THEN LET Y(P)=X9 1660 IF V(P)>8 THEN 1700 1665 IF V(P)<1 THEN 1700 1670 IF H(P)>8 THEN 1700 1675 IF H(P)<1 THEN 1700 1695 GOTO 1590 1700 PRINT " *** STARFLEET COMMAND FORBIDS LEAVING THE GALAXY ***" 1710 PRINT : PRINT "### WARP ENGINES SHUT DOWN ###": PRINT 1720 IF V(P)>8 THEN LET V(P)=V9 1730 IF H(P)>8 THEN LET H(P)=V9 1740 IF V(P)<0 THEN LET V(P)=V9 1750 IF H(P)<0 THEN LET H(P)=V9 1760 PRINT " SECTOR ";Y(P);X(P): PRINT 1795 GOTO 1590 1800 LET Z=0: REM ==== COUNT WITHIN YOUR QUADRANT ==== 1810 FOR X=10 TO K9+10 1820 IF E(X)<=0 THEN 1880 1830 IF V(P)=V(X) THEN IF H(P)=H(X) THEN LET Z=Z+1 1880 NEXT X 1890 RETURN 1900 LET Q=INT((Y1*10)+X1): REM ======= DID RUN INTO ANY OBJECTS? 1910 IF Q(Q)=0 THEN RETURN : REM ==== CLEAR SPACE 1920 IF Q(Q)>0 THEN 1970: REM ====== '-1' = HIT A STAR 1930 LET C0=INT(RND(0)*9) 1940 PRINT TAB(8);"STAR DEFLECTED COURSE AT SECTOR ";Y1;X1 1950 GOSUB 1320: REM ===== NEW Y,X CONSTANTS 1955 GOSUB 1000: REM ===== PLOT NEW COURSE 1960 GOSUB 7500: PRINT "'S COURSE IS NOW ";C0 1965 RETURN 1970 IF Q(Q)=5 THEN PRINT "*** COLLISION WITH >B< AT SECTOR ";Y1;X1 1980 IF Q(Q)=5 THEN PRINT "### COLLISION WITH AT SECTOR ";Y1;X1 1995 RETURN 2000 FOR Q=10 TO K9+10: REM <<<< KLINGONS SHOOT >>>> 2010 IF E(Q)<=0 THEN 2090 2020 IF V(Q)=V(P) THEN IF H(Q)=H(P) THEN 2040 2030 GOTO 2090 2040 LET E(Q)=INT(E(Q)/2): LET Y1=Y(P): LET X1=X(P): LET Y2=Y(Q): LET X2=X(Q) 2050 IF E(Q)=0 THEN PRINT "*** *** ENERGY GONE!": GOTO 2090 2060 LET H=SQR(((X1-X2)*(X1-X2))+((Y1-Y2)*(Y1-Y2)))+(2*RND(0)) 2070 LET H=INT((E(Q)/H)*(2*RND(0))): IF H>E(Q)+S(Q) THEN LET H=E(Q) 2080 GOSUB 3000 2090 NEXT Q 2095 RETURN 2100 LET B8=0: PRINT : REM .=== RESET >B<'S COUNTER === 2110 FOR Q=10 TO K9+10: REM .<*<*< KLINGONS SHOOT AT BASES >*>*> 2120 IF E(Q)<=0 THEN EXIT 2290 2130 FOR Z=5 TO B9+4: REM .=== 'S LOOK FOR BASES === 2140 IF E(Z)<=0 THEN 2285 2150 IF V(Q)=V(Z) AND H(Q)=H(Z) THEN LET B8=B8+1 ELSE 2285 2160 LET E(Q)=INT(E(Q)/2): LET Y1=Y(Z): LET X1=X(Z) 2170 LET Y2=Y(Q): LET X2=X(Q) 2180 IF E(Q)=0 THEN PRINT "*** *** ENERGY GONE!:GOTO 2285 2190 LET H=SQR(((X1-X2)*(X1-X2))+((Y1-Y2)*(Y1-Y2)))+(RND(0)*3) 2200 LET H=INT((E(Q)/H)*(RND(0)*2)) 2210 IF H<=0 THEN 2285 2220 PRINT TAB(10);H;" UNIT HIT ON A >B<" 2230 LET S(Z)=S(Z)-H: IF S(Z)<0 THEN LET B=B-1: REM .=== LOOSE >B< 2240 IF E(Q)<13 THEN LET E(Q)=E(Q)+(S(Q)/2): LET S(Q)=INT(S(Q)/2) 2250 IF S(Z)<=0 THEN PRINT " ### >B< SHIELDS DESTROYED ###" 2260 IF S(Z)<=0 THEN PRINT " #*# >B< DESTROYED #*#": LET E(Z)=-1 2270 IF S(Z)>0 THEN PRINT TAB(9);" #*# >B< DISTRESS CALL #*#" 2275 IF S(Z)>0 THEN PRINT TAB(20);"*** QUADRANT ";V(Z);H(Z);" ***" 2280 PRINT 2285 NEXT Z 2290 NEXT Q 2295 RETURN 3000 IF H<=0 THEN 3100: REM === HIT MSG DISPLAY === 3010 IF T(Q)=10 THEN PRINT TAB(7);"*#* Z Z A A A P P H ! *#*" 3050 PRINT H;" UNIT HIT ON "; 3060 GOSUB 7500 3070 PRINT " FROM ";: GOSUB 7000 3080 PRINT " AT SECTOR ";Y(Q);X(Q) 3090 LET S(P)=S(P)-H 3100 IF E(Q)>12 THEN 3150 3110 GOSUB 7000 3120 PRINT " ## TRANSFERING ENERGY FROM SHIELDS ##" 3140 LET E(Q)=E(Q)+(S(Q)/2): LET S(Q)=INT(S(Q)/2) 3150 IF S(P)<=0 THEN GOSUB 7500: PRINT "### DESTROYED ###" 3160 IF S(P)<=0 THEN LET D(INT(RND(0)*7)+1)=RND(0)*(-1) 3170 IF S(P)<=0 THEN LET D(INT(RND(0)*7)+1)=RND(0)*(-2) 3180 IF S(P)<=0 THEN PRINT TAB(9);"*** DAMAGE REPORT ***" 3195 RETURN 5000 PRINT : REM === MAIN EXEC === 5400 IF D<0 THEN 40000 5410 IF E(P)<0 THEN 40000 5420 IF S(P)<0 THEN 40000 5430 IF K1<=0 THEN 40000 5450 GOSUB 2000: REM === 'S SHOOT 5500 PRINT 5510 GOSUB 7500: REM ====== PRINT "" 5520 INPUT (2,0)" NEXT COMMAND ( 0 TO 7 ) ---=>",C 5540 PRINT : IF C>10 THEN 5600 5545 IF C<0 THEN 5600 5550 IF D(C+1)>=0 THEN 5600 5560 GOSUB 7600: GOSUB 7700 5600 IF C=0 THEN 10000 5610 IF C=1 THEN 11000 5620 IF C=2 THEN 12000 5630 IF C=3 THEN 13000 5640 IF C=4 THEN 14000 5650 IF C=5 THEN 15000 5660 IF C=6 THEN 16000 5670 IF C=7 THEN 17000 5690 IF C=9 THEN 19000 5700 IF C=10 THEN 20000 5800 PRINT TAB(10);"*=*=*=*=* COMMAND SUMMARY *=*=*=*=*" 5810 PRINT 5820 PRINT "COMMAND # 0 --- MOVE ";: GOSUB 7500: PRINT 5830 PRINT "COMMAND # 1 --- QUADRANT SHORT-RANGE SCAN" 5840 PRINT "COMMAND # 2 --- LONG-RANGE SCAN" 5850 PRINT "COMMAND # 3 --- FIRE ";: GOSUB 7500: PRINT " PHAZERS" 5860 PRINT "COMMAND # 4 --- FIRE ";: GOSUB 7500: PRINT " PHOTONS" 5870 PRINT "COMMAND # 5 --- TRANSFER ENERGY TO & FROM SHIELDS" 5880 PRINT "COMMAND # 6 --- DAMAGE REPORT" 5890 PRINT "COMMAND # 7 --- COMPUTOR ACCESS" 5895 PRINT "COMMAND # 10--- WORK ON DAMAGES" 5900 PRINT 5910 PRINT "DO YOU WANT A LIST OF COMPUTOR COMMANDS ?" 5920 INPUT (1,0)"-----------( 1=YES 0=NO )---------=>",Y$ 5930 IF Y$="1" THEN 17100 5995 GOTO 5500 7000 IF T(Q)<1 THEN PRINT " ";: RETURN : REM === SYMBOLS === 7010 IF T(Q)=1 THEN PRINT "";: RETURN 7050 IF T(Q)=5 THEN PRINT ">B<";: RETURN 7080 IF T(Q)=8 THEN PRINT "-X-";: RETURN 7090 IF T(Q)=9 THEN PRINT " * ";: RETURN 7100 IF T(Q)=10 THEN PRINT "";: RETURN 7200 RETURN 7300 IF T(Q)=1 THEN PRINT "ENTERPRISE";: RETURN 7350 IF T(Q)=5 THEN PRINT "FEDERATION BASE";: RETURN 7380 IF T(Q)=8 THEN PRINT "A DEAD SHIP";: RETURN 7400 IF T(Q)=10 THEN PRINT "KLINGON WARSHIP";: RETURN 7490 RETURN 7500 IF P=1 THEN PRINT "";: REM === YOUR SHIP'S SYMBOL === 7590 RETURN 7600 REM ---- DAMAGE MESSAGES ------ 7610 IF C=0 THEN PRINT " WARP ENGINES"; 7620 IF C=1 THEN PRINT " SHORT RANGE SCANNERS"; 7630 IF C=2 THEN PRINT " LONG RANGE SCANNERS"; 7640 IF C=3 THEN PRINT " PHAZER CONTROLS"; 7650 IF C=4 THEN PRINT " PHOTON CONTROLS"; 7660 IF C=5 THEN PRINT " SHIELD CONTROLS"; 7670 IF C=6 THEN PRINT " DAMAGE INDICATORS"; 7680 IF C=7 THEN PRINT " COMPUTOR CONTROLS"; 7690 RETURN 7700 PRINT " ARE DAMAGED AND UNAVAILIBLE." 7710 PRINT 7720 PRINT " REPAIRS ARE UNDERWAY - - - BUT IT WILL TAKE TIME" 7730 PRINT 7790 RETURN 10000 GOSUB 7500: REM ----------- MOVE ------------- 10020 INPUT " COURSE - ( 1 TO 8.99 )--=>",C0 10025 PRINT 10030 IF C0=0 THEN PRINT " MOVE ABORTED": GOTO 5000 10040 IF C0<0 THEN PRINT " # TOO LOW #": GOTO 10000 10050 IF C0>=9 THEN PRINT " # TOO HIGH #": GOTO 10000 10100 GOSUB 7500 10110 INPUT " WARP FACTOR - ( 0 TO 8 )--=>",W0 10120 PRINT 10130 IF W0=0 THEN PRINT " MOVE ABORTED": GOTO 5000 10140 IF W0<0 THEN PRINT " NEGATIVE WARPS ILLEGAL": GOTO 10100 10150 IF W0>8 THEN PRINT " # TOO MUCH #": GOTO 10100 10200 LET Y2=0: LET X2=0 10210 GOSUB 1320: REM ===== NEW Y,X CONSTANTS 10220 GOSUB 1500: REM ===== PLOT MOVEMENTS OUT OF QUADRANT 10300 FOR X=1 TO 88 10310 LET Q(X)=0 10320 NEXT 10350 LET D=D-1 10360 PRINT TAB(10);: GOSUB 7500: PRINT " *MOVING*": PRINT 10370 GOSUB 1100: REM ===== GET CONDITION 10380 IF B8>0 THEN GOSUB 2100: REM ===== 'S SHOOT AT >B<'S 10390 GOSUB 10500: REM ===== QUAD. DISPLAY 10400 FOR Z=1 TO 8: REM ===== DAMAGE REPAIR ====== 10410 IF D(Z)<0 THEN LET D(Z)=D(Z)+INT(RND(0)*.2) 10420 NEXT Z 10490 GOTO 11000: REM ===== DISPLAY THE QUADRANT 10500 REM ------ SHORT RANGE SCAN ------ 10510 FOR Z=K9+10 TO P STEP -1 10520 IF V(Z)=V(P) THEN IF H(Z)=H(P) THEN 10540 10530 GOTO 10590 10540 IF E(Z)<=0 THEN 10590 10550 LET Q((Y(Z)*10)+X(Z))=T(Z) 10590 NEXT Z 10600 GOSUB 11600: REM ===== COUNT # OF STARS; S=# OF STARS 10610 IF S=O((V(P)*10)+H(P)) THEN 10990 10620 FOR X=1 TO 78: REM ===== RANDOMLY LAYOUT STARS IN QUAD. 10625 IF Q(X)=-1 THEN LET Q(X)=0 10630 NEXT X 10700 FOR Z=1 TO O((V(P)*10)+H(P)) 10710 LET Z2=INT(RND(0)*7)+1: LET Z3=INT(RND(0)*7)+1 10720 LET Z1=(Z2*10)+Z3 10740 IF Q(Z1)>0 THEN 10710 10750 IF Q(Z1)=-1 THEN 10710 10760 LET Q(Z1)=-1 10790 NEXT Z 10990 PRINT "&K": RETURN 11000 GOSUB 10500: REM ------ SHORT RANGE SCAN ------ 11200 PRINT " &E&E&E-1--2--3--4--5--6--7--8-&E&E&E" 11210 FOR Y=1 TO 8 11220 PRINT Y;"-&E"; 11300 FOR X=1 TO 8 11310 LET Q=(Y*10)+X 11320 IF Q(Q)=0 THEN PRINT " ";: GOTO 11400 11330 IF Q(Q)=-1 THEN PRINT " * ";: GOTO 11400 11340 IF Q(Q)=10 THEN PRINT "";: GOTO 11400 11350 IF Q(Q)=5 THEN PRINT ">B<";: GOTO 11400 11360 IF Q(Q)=1 THEN PRINT "";: GOTO 11400 11380 IF Q(Q)=8 THEN PRINT "-X-";: GOTO 11400 11390 PRINT "-?-"; 11400 IF Q=18 THEN PRINT "&E-1 STARDATES LEFT: ";D: GOTO 11490 11410 IF Q=28 THEN PRINT "&E-2 CONDITION: ### ";: GOSUB 950 11420 IF Q=38 THEN PRINT "&E-3 QUADRANT: ";V(P);H(P): GOTO 11490 11430 IF Q=48 THEN PRINT "&E-4 SECTOR : ";Y(P);X(P): GOTO 11490 11440 IF Q=58 THEN PRINT "&E-5 ENERGY : ";E(P): GOTO 11490 11450 IF Q=68 THEN PRINT "&E-6 SHIELDS : ";S(P): GOTO 11490 11460 IF Q=78 THEN PRINT "&E-7 PHOTONS : ";P(P): GOTO 11490 11470 IF Q=88 THEN PRINT "&E-8" 11490 NEXT X 11495 NEXT Y 11500 PRINT " &E&E&E-1--2--3--4--5--6--7--8-&E&E&E" 11590 GOTO 5000 11600 LET S=0 11610 FOR Z=11 TO 88 11620 IF Q(Z)=-1 THEN LET S=S+1 11630 NEXT Z 11690 RETURN 12000 REM ------- LONG RANGE SCAN ------ 12010 PRINT " LONG RANGE SCAN FROM QUADRANT ";V(P);H(P) 12020 PRINT 12050 PRINT "XXX---";H(P)-1;" ----";H(P);" ----";H(P)+1;" ---XXX" 12100 FOR V=V(P)-1 TO V(P)+1 12110 LET Z1=3: REM +++++ "TAB" 12200 FOR H=H(P)-1 TO H(P)+1 12300 IF H=H(P)-1 THEN PRINT "XXX"; 12305 IF V<1 THEN PRINT " LIMBO";: GOTO 12700 12310 IF V>8 THEN PRINT " LIMBO";: GOTO 12700 12320 IF H<1 THEN PRINT " LIMBO ";: GOTO 12610 12330 IF H>8 THEN PRINT " LIMBO";: GOTO 12700 12400 LET Z=0: REM +++++ "COUNT" 12405 LET Z2=(V*10)+H 12410 FOR Z4=5 TO K9+10 12420 IF V(Z4)=V THEN IF H(Z4)=H THEN 12430 12425 GOTO 12480 12430 IF E(Z4)<=0 THEN 12480 12440 IF T(Z4)=10 THEN LET Z=Z+100 12450 IF T(Z4)=5 THEN LET Z=Z+10 12480 NEXT Z4 12490 LET Z=Z+O(Z2): LET M(Z2)=Z 12500 LET Z3=3: IF Z>9 THEN LET Z3=2 12510 IF Z>99 THEN LET Z3=1 12600 PRINT TAB(Z1+Z3);Z;" "; 12610 LET Z1=Z1+7 12700 NEXT H 12710 PRINT TAB(26);"X";V 12800 NEXT V 12950 PRINT "XXX---";H(P)-1;" ----";H(P);" ----";H(P)+1;" ---XXX" 12990 GOTO 5000 13000 LET Y=0: REM --------- PHAZERS ------------ 13010 IF C1>1 THEN 13100 13020 PRINT TAB(9);"CONDITION ";: GOSUB 950: GOTO 5000 13100 FOR Q=10 TO K9+10 13110 IF E(Q)<=0 THEN 13190 13120 IF V(P)=V(Q) THEN IF H(P)=H(Q) THEN 13140 13130 GOTO 13190 13140 PRINT "***** PHAZERS LOCKED ON "; 13150 GOSUB 7000: PRINT " AT SECTOR ";V(Q);H(Q) 13160 LET Y=Y+1 13190 NEXT Q 13200 PRINT E(P);" ENERGY UNITS AVAILABLE ON THE "; 13210 GOSUB 7500 13220 PRINT : INPUT " HOW MANY UNITS TO FIRE ? ----=>",U 13230 PRINT 13240 IF U<=0 THEN PRINT "*** SHOOTING ABORTED ***": GOTO 5000 13250 IF U<=E(P) THEN 13270 13260 PRINT "### YOU ONLY HAVE ";E(P);" UNITS ###": GOTO 13000 13270 LET E(P)=E(P)-U 13300 FOR Q=10 TO K9+10 13310 IF E(Q)<=0 THEN 13390 13320 IF V(P)=V(Q) THEN IF H(P)=H(Q) THEN 13340 13330 GOTO 13390 13340 LET Y1=Y(P): LET X1=X(P): LET Y2=Y(Q): LET X2=X(Q): LET H1=INT(U/Y) 13350 LET H=SQR(((X1-X2)*(X1-X2))+((Y1-Y2)*(Y1-Y2)))+(2*RND(0)) 13360 LET H=INT((H1/H)*(5*RND(0))): PRINT "*** Z A W O O O M M ***" 13370 PRINT H;" *** UNIT HIT *** ON THE "; 13375 GOSUB 7000: PRINT " AT SECTOR ";Y(Q);X(Q) 13380 LET S(Q)=S(Q)-H: IF S(Q)<=0 THEN LET E(Q)=-1: LET K1=K1-1 13385 IF S(Q)<=0 THEN PRINT TAB(10);: GOSUB 7000 13387 IF S(Q)<=0 THEN PRINT " ##### D E S T R O Y E D #####" 13388 IF S(Q)<=0 THEN LET Q((Y(Q)*10)+X(Q))=8: LET T(Q)=8 13390 NEXT Q 13990 GOTO 5000 14000 REM --------- PHOTONS ------------ 14010 GOSUB 1800 14020 IF Z=0 THEN PRINT "SENSORS SHOW NO KLINGONS": GOTO 5000 14030 IF P(P)>0 THEN 14100 14040 GOSUB 7500 14050 PRINT " YOU ARE OUT OF PHOTONS !!!" 14060 GOTO 5000 14100 PRINT : PRINT "SENSORS COUNT ";Z;" ENEMY SHIP"; 14110 IF Z>1 THEN PRINT "S": PRINT 14120 PRINT : GOSUB 7500 14130 INPUT " TORPEDO COURSE - (1-8.99) ---=>",C0 14140 PRINT : IF C0<1 THEN PRINT "NUMBER TOO LOW": GOTO 14000 14150 IF C0>=9 THEN PRINT "NUMBER TOO HIGH": GOTO 14000 14200 GOSUB 1320 14210 GOSUB 14500 14220 LET P(P)=P(P)-1 14490 GOTO 5000 14500 LET Y1=Y(P): LET X1=X(P): LET Y2=Y1: LET X2=X1: REM === TORPEDO TRACK === 14510 IF C=4 THEN PRINT TAB(12);"*** TORPEDO TRACK ***" 14520 GOTO 14540 14530 LET Y2=Y2+Y: LET X2=X2+X 14540 IF Y2<1 THEN 14695 14550 IF Y2>8 THEN 14695 14560 IF X2<1 THEN 14695 14570 IF X2>8 THEN 14695 14580 LET Q=INT((Y2*10)+X2): REM .=== DID PHOTON HIT ANY OBJECTS ? 14590 IF Q(Q)=0 THEN 14680: REM .=== OPEN SPACE === 14600 IF Q(Q)<>-1 THEN 14680 14620 PRINT TAB(9);"*** PHOTON ABSORBED BY A STAR AT SECTOR "; 14630 PRINT Y2;X2;" ***": RETURN 14680 PRINT TAB(16);Y2;TAB(22);" -=- ";X2: LET Q=0: GOSUB 14700 14690 GOTO 14530 14695 RETURN 14700 FOR Z=10 TO K9+10: REM .=== Look for === 14710 IF E(Z)<=0 THEN 14880 14720 IF Q>0 THEN 14880 14730 IF V(Z)=V(P) THEN IF H(Z)=H(P) THEN 14750 14740 GOTO 14880 14750 IF Y(Z)=INT(Y2) THEN IF X(Z)=INT(X2) THEN 14800 14760 GOTO 14880 14800 PRINT TAB(10);"### B A A W O O M M ###": PRINT 14810 PRINT TAB(10);: LET Q=Z: GOSUB 7000 14820 PRINT " *** DESTROYED *** - AT SECTOR ";Y(Z);X(Z) 14830 LET K1=K1-1: LET E(Z)=-1: LET S(Z)=-1: LET X2=-2: LET T(Z)=8 14840 LET Q((Y(Z)*10)+X(Z))=8 14880 NEXT Z 14890 RETURN 15000 REM --------- SHIELDS ------------ 15100 PRINT "TOTAL ENERGY AVAILIBLE = ";E(P)+S(P) 15110 PRINT 15120 INPUT " HOW MUCH FOR THE SHIELDS--=>",Y 15130 PRINT 15140 IF Y<0 THEN PRINT " NO NEGATIVE ENERGIES !!!": GOTO 15000 15145 IF Y>E(P)+S(P) THEN PRINT "YOU ONLY HAVE ": GOTO 15000 15150 LET E(P)=(E(P)+S(P))-Y 15160 LET S(P)=Y 15170 PRINT Y;" UNITS TRANSFERED TO SHIELDS." 15180 PRINT E(P);" UNITS LEFT" 15195 GOTO 5000 16000 LET Z1=0: REM ------- DAMAGE REPORT -------- 16020 FOR Z=1 TO 8 16030 IF D(Z+1)<0 THEN LET Z1=Z1+1 16040 NEXT Z 16050 IF Z1=0 THEN PRINT "*** EVERYTHING'S O.K. ***": GOTO 5000 16100 LET Z1=C 16110 FOR C=1 TO 7 16120 PRINT C;" ";: GOSUB 7600 16130 PRINT TAB(30);D(C+1) 16150 NEXT C 16190 LET C=Z1 16195 GOTO 5000 17000 GOSUB 7500: REM --------- COMPUTOR -------- 17020 INPUT (1,0)" COMPUTOR AWAITING COMMAND ( 0 TO 4 )--=>",K 17030 PRINT 17050 IF K=0 THEN 17300 17060 IF K=1 THEN 17400 17070 IF K=2 THEN 17500 17080 IF K=3 THEN 17600 17090 IF K=4 THEN 17700 17100 PRINT TAB(10);"##### COMPUTOR COMMANDS #####" 17110 PRINT 17120 PRINT "COMMAND # 0 --- MAP OF YOUR GALAXY" 17130 PRINT "COMMAND # 1 --- GAME STATUS - LEFT ETC..." 17140 PRINT "COMMAND # 2 --- TRAJECTORY CALCULATOR" 17150 PRINT "COMMAND # 3 --- TORPEDO TRAJECTORIES TO 'S" 17160 PRINT "COMMAND # 4 --- QUADRANT SCAN ANALYSIS" 17180 PRINT 17190 IF C=7 THEN 17000 17195 GOTO 5000 17300 PRINT "&K": REM --------------- GALAXY MAP ---------- 17305 PRINT "XXXX--1----2----3----4----5----6----7----8---XXXX" 17310 FOR Y=1 TO 8 17320 PRINT Y;" X";: LET Z=5 17330 FOR X=1 TO 8 17340 IF M((Y*10)+X)<10 THEN PRINT TAB(Z);M((Y*10)+X); 17345 IF M((Y*10)+X)>=10 THEN PRINT TAB(Z-1);M((Y*10)+X); 17350 LET Z=Z+5 17360 NEXT X 17365 PRINT TAB(45);"X ";Y;" "; 17370 IF Y

P THEN PRINT 17380 NEXT Y 17390 PRINT "XXXX--1----2----3----4----5----6----7----8---XXXX" 17395 GOTO 5000 17400 REM --------- GAME STATUS -------- 17410 PRINT " *@* STARSHIPS LEFT *@*" 17420 FOR Q=1 TO 4 17430 IF E(Q)>0 THEN PRINT TAB(10);: GOSUB 7000: PRINT 17440 NEXT Q 17450 PRINT 17460 PRINT D;" STARDATES LEFT" 17470 PRINT B;" BASE(S) LEFT" 17480 PRINT K1;" KLINGON(S) ( ) LEFT" 17495 GOTO 5000 17500 REM --------- TRAJECTORY CALCULATOR -------- 17510 PRINT TAB(20);: GOSUB 7500: PRINT : PRINT 17530 PRINT " *** YOU ARE IN QUADRANT ";V(P);H(P); 17540 PRINT " AT SECTOR ";Y(P);X(P): PRINT 17550 PRINT "ENTER LOCATION (Y1,X1) AND DESTINATION (Y2,X2) IN" 17560 PRINT "THIS FORMAT - - - > Y1, X1, Y2, X2 (AS NUMBERS)" 17565 PRINT "*** NOTE *** ANY NUMBERS >7 OR <0 GIVE WRONG ANSWERS" 17570 INPUT "INPUT THE 4 NUMBERS -----=>",Y1,X1,Y2,X2 17580 PRINT : GOSUB 1000: PRINT : PRINT "*** COURSE ==>=";C0 17585 PRINT : LET Z=INT(D0*10)/10 17590 PRINT "*** WARP FACTOR BETWEEN QUADRANTS ==>=";Z 17592 PRINT "*** WARP FACTOR BETWEEN SECTORS ====>=";Z/10 17595 GOTO 5000 17600 PRINT : REM --------- TRAJECTORIES ---- 17610 FOR Q=10 TO 30 17620 IF E(Q)<=0 THEN 17690 17630 IF V(P)=V(Q) THEN IF H(P)=H(Q) THEN 17650 17640 GOTO 17690 17650 LET Y1=Y(P): LET X1=X(P): LET Y2=Y(Q): LET X2=X(Q) 17660 GOSUB 1000: GOSUB 7000: PRINT " AT ";Y(Q);X(Q); 17670 PRINT TAB(25);"COURSE ==>=";C0 17680 PRINT TAB(25);"DISTANCE ==>=";INT(D0*10)/10 17690 NEXT Q 17695 GOTO 5000 17700 GOSUB 7500: REM .=========== QUADRANT SCAN ANALYSIS === 17710 PRINT " SCAN ANALYSIS FOR QUADRANT ";V(P);H(P) 17720 PRINT 17730 PRINT " * STAR * COUNT = ";O((V(P)*10)+H(P)) 17740 PRINT 17750 FOR Q=1 TO K9+10: REM .=== LOOK FOR EVERY THING === 17760 IF Q=P THEN 17880 17765 IF E(Q)<0 THEN 17880 17770 IF V(P)=V(Q) AND H(P)=H(Q) THEN 17790 ELSE 17880 17790 GOSUB 7300: REM .=== PRINT 'NAME' === 17800 PRINT TAB(20);: GOSUB 7000: REM .=== PRINT SYMBOL === 17810 PRINT TAB(25);"SHIELDS = ";S(Q); 17820 PRINT TAB(43);"ENERGY = ";E(Q); 17880 NEXT Q 17890 GOTO 5000 19000 REM --------- DE-BUG ------------- 19010 PRINT " # UNIT ENERGY SHIELDS V,H,... Y,X TYPE #" 19030 FOR Q=1 TO K9+10 19040 PRINT Q;TAB(4);: GOSUB 7000: PRINT TAB(10);E(Q); 19050 PRINT TAB(20);S(Q);TAB(27);V(Q);H(Q);" ---";Y(Q);X(Q); 19055 PRINT " (";T(Q);" )" 19060 IF Q=10 THEN INPUT (1,0)" SEE MORE--=>",Y$ 19070 IF Q=20 THEN INPUT (1,0)" SEE MORE--=>",Y$ 19080 NEXT Q 19195 GOTO 5000 20000 REM --------- WORK ON DAMAGES ------------ 20010 FOR C=1 TO 7 20020 IF D(C+1)>=0 THEN 20080 20030 LET D(C+1)=D(C+1)+RND(0) 20050 GOSUB 7600: PRINT TAB(30); 20060 IF D(C+1)<0 THEN PRINT " ...MAKING PROGRESS" 20070 IF D(C+1)>0 THEN PRINT " ### HAVE BEEN FIXED ###": LET D(C+1)=0 20080 NEXT C 20090 LET D=D-1 20100 IF B8>0 THEN GOSUB 2100: REM .=== SHOOT AT BASES === 20900 GOTO 5000 40000 PRINT "---===<<< GAME OVER >>>===---": PRINT 40010 IF K1<=0 THEN PRINT "### ALL KLINGONS DESTROYED ###" 40020 IF E(P)<=0 THEN PRINT "*** YOU RAN OUT OF ENERGY ***" 40030 IF S(P)<=0 THEN PRINT "#@# YOUR SHIELDS WERE DESTROYED #@#" 40040 IF K1>0 THEN PRINT TAB(10);K1;" KLINGONS ARE LEFT." 40100 PRINT 40110 IF K1<=0 THEN PRINT "### THE FEDERATION IS SAVED ###" 40200 PRINT 40210 INPUT (1,0)" DO YOU WANT TO TRY AGAIN (1=YES 0=NO)--=>",Y 40220 PRINT 40230 RESTORE 40240 IF Y=1 THEN CLEAR 40250 IF Y=1 THEN 10 50000 END