10 REM ... GLAC7.ECB 15 REM .. *** BATTLESTAR GALACTICA *** 11-01-78 20 REM ... by RALPH HOPKINS EAGAN,MN Last rev. 03-07-81 30 PRINT "&K": REM ..Unfinished !!! 40 PRINT ," .='-. ======== ,--" 42 PRINT ," / -----H--H-H---/ -=E" 44 PRINT ,"( BATTLESTAR GALACTICA : :" 46 PRINT ," \ -----H--H-H---\ -=E" 48 PRINT ," '=.-' ======== ~--&J" 50 DIM A(25),B(25),D(35),E(200),F(200),I(200),J(10),K(10) 55 DIM H(75),V(75),L(75),X(200),Y(200),T(200) 60 DIM B$(41),L$(228),S$(600),M$(30),Q$(270),Y$(15) 65 DEF FNR(Z0)=INT(RND(0)*Z0) 70 DATA 1,1,1,1,1,1,1," "," " 80 READ P,Q1,Q2,Q3,Q4,Q5,Q6,A$,Q$ 90 LET B$="----- ----- ----- ----- ----- (****)" 100 LET M$="/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\/^\" 110 LET S$=" + :(]:(]:(]-=<-=<-=<-=<-=<-=<-=<-=<-=<-=<-=<-=<" 120 LET S$=S$+"-=(-=(-=(-=(-=(-=(-=(-=(-=(-=(-=(-=(-={-={" 130 LET S$=S$+"/[]/[]-<[-<[(OO(@@(==<#=<#=([=([=-<[-<[" 140 LET S$=S$+" (1)"+M$+M$+"(2)"+M$+M$ 150 LET S$=S$+"(3)"+M$+M$+"(4)"+M$+M$+"(5)"+M$+M$+"(6)"+M$+M$ 160 FOR Z=1 TO 90: LET Q$=Q$+A$: NEXT Z 170 PRINT " You are the Commander of the last surviving BATTLESTAR" 175 PRINT "now orbiting near the devestated Colonial planets." 180 PRINT "Your objective is to lead the surviving ships in quest" 185 PRINT "of...EARTH ! It's expected to be near one of the visible" 190 PRINT "Stars within your viewing range. But which one ???" 200 FOR Z=1 TO 200: LET T(Z)=3.5: LET E(Z)=50: LET F(Z)=60: NEXT Z 210 FOR Z=1 TO 35: REM ..Galactica defense 220 LET D(Z)=100 225 IF RND(0)>.9 THEN LET D(Z)=D(Z)-FNR(21) 230 NEXT Z 240 FOR Z=1 TO 25: LET A(Z)=0: LET B(Z)=0: NEXT Z 250 FOR Z=31 TO 43: REM ...Unarmed ships w/Galactica 260 LET T(Z)=2: LET F(Z)=500: LET Y(Z)=FNR(15)+8 270 LET E(Z)=500: LET X(Z)=FNR(20)-5 280 NEXT Z 290 FOR Z=44 TO 49: LET E(Z)=0: NEXT Z: REM ...unused 300 LET E(1)=FNR(2E3)+4500 310 LET F(1)=FNR(1E3)+3E3: LET T(1)=1 320 FOR Z=2 TO 4: LET T(Z)=2.5: NEXT Z 330 FOR Z=51 TO 200: REM ...CYLON fighters 340 LET T(Z)=3.5: LET F(Z)=500: LET E(Z)=100 345 NEXT Z 350 FOR Z=50 TO 175 STEP 25: REM ...CYLON Base Stars 355 IF RND(0)>.5 THEN LET I(Z)=7 ELSE LET I(Z)=1 360 LET T(Z)=1: LET F(Z)=3500: LET Y(Z)=FNR(35)-75 365 IF RND(0)>.5 THEN LET I(Z)=I(Z)+1 370 LET E(Z)=7E3: LET X(Z)=FNR(60)-150 375 NEXT Z 380 CURSOR 7,1: PRINT " You will have a dozen ships to escort"; 381 PRINT " " 385 PRINT "...instead of 200. There are 6 known base stars to escape" 390 PRINT "PLUS around 150 CYLON fighters. You have 2 dozen VIPERS." 400 PRINT TAB(8);"You now have a head start in escaping the CYLONS" 410 PRINT "so...don't linger too long in the colonies! &J" 420 DATA 1,1,2,2,2,2,4,2,3,3,1,2,3,2,2,4,2,5,5,1,5,3,3,2,2 425 DATA 1,1,1,2,2,2,3,3,5,5,3,5,5,5,1,1,1,1,1,1,1,1,1,1,1 427 DATA 1,1,1,1,2,2,2,2,2,2,2,2,2,2,4,5,5,3,4,3,3,5,5,5,5 430 DATA 33,24,-7,13,47,66,61,38,9,34,23,4,31,53,39,46,17,12,7 435 DATA -54,-51,-59,-28,-42,-73,-62,-51,-56,-74,-45 438 DATA -44,-53,-82,-94,-85 440 DATA -95,-97,-85,-105,-94,-52,-58,-62,-81,-125,25,-3,8,4,44 445 DATA 48,78,42,56,55,68,46,42,35,59,-88,-85,-81,-55,-95,-62,-92,-75,-25,-2 450 FOR Z=1 TO 75: READ L(Z): NEXT Z 460 FOR Z=1 TO 35: READ V(Z): NEXT Z 470 FOR Z=1 TO 35: READ H(Z): NEXT Z 480 LET L$="-*--*-P 1P 2P 3P 4MooP 5P 6dea-*-P 7deaP 8P 9" 485 LET L$=L$+"MooP10(a)(a)-*-(a)deadeaP11P12-*--*--*-C 1" 490 LET L$=L$+"C 2C 3deadea(a)(a)dea(a)(a)(a)-*--*--*--*--*-" 495 LET L$=L$+"-*--*--*--*--*--*--*--*--*--*-55?56?57?58?59?" 497 LET L$=L$+"60?61?62?63?64?Moo(a)(a)deaMoodeadea(a)(a)(a)(a)" 500 LET X=FNR(10)+42: LET Y=(X+13)*3 505 FOR Z=36 TO 75: REM ..distant stars 510 LET V(Z)=FNR(200)+60+Z 520 LET H(Z)=FNR(200)+60+Z 530 IF RND(0)>.5 THEN LET V(Z)=V(Z)*(-1) 540 IF RND(0)>.5 THEN LET H(Z)=H(Z)*(-1) 545 NEXT Z 550 FOR Z=60 TO 64 560 LET V(Z)=V(Z-60+X)+6: LET V(Z+5)=V(Z)+4 570 LET H(Z)=H(Z-60+X): LET H(Z+5)=H(Z)+5 580 NEXT Z 590 LET L$(178,180)="P13" 600 PRINT " '-1' GIVES COMMAND OPTIONS , '0' ABORTS MOST INPUTS" 610 DATA 0,-1,-1,-1,0,1,1,1,0,1,1,0,-1,-1,-1,0,1,1 620 FOR Z=1 TO 9: READ J(Z): NEXT Z 630 FOR Z=1 TO 9: READ K(Z): NEXT Z 640 LET H$=" ship ": LET J$=" COLONIAL ": LET K$=" CYLON " 650 LET V$="VIPER ": LET W$="#": LET X$="system " 660 LET Y$=" Shuttle Craft " 695 GOTO 5000 900 REM ..COURSE CALCULATOR 910 LET Y=Y1-Y2 915 LET X=X1-X2 920 IF X=0 THEN 930 ELSE LET Z=Y/X 925 IF Z>1 THEN 930 ELSE 940 930 IF Y>0 THEN LET C0=3 ELSE LET C0=7 935 IF X=0 THEN 990 ELSE LET Z=(X/Y) 939 GOTO 980 940 IF Z<=-1 THEN 942 ELSE 950 942 IF Y>0 THEN LET C0=2 ELSE LET C0=6 945 IF Z=-1 THEN 990 ELSE LET Z=1-ABS(X/Y) 949 GOTO 980 950 IF Z>0 AND Z<=1 THEN 955 ELSE 960 952 IF Y>0 THEN LET C0=4 ELSE LET C0=8 955 IF Z=1 THEN 990 ELSE LET Z=1-ABS(Z) 959 GOTO 980 960 IF Z>-1 AND Z<=0 THEN 970 ELSE LET Z=X/Y 970 IF X<0 THEN LET C0=1 ELSE LET C0=5 980 LET C0=C0+ABS(Z) 990 LET I1=(X1-X2)*(X1-X2): LET I2=(Y1-Y2)*(Y1-Y2) 991 LET D0=SQR(I1+I2) 995 RETURN 1000 FOR B=P TO D2 1005 IF N2=P AND B>P THEN 1080 1010 IF E(B)<1 THEN 1080 1020 IF T(B)=3.2 OR T(B)=3.5 THEN 1080 1030 LET I(B)=C0: GOSUB 1600 1040 LET X(B)=X(B)+(X*W0): LET Y(B)=Y(B)+(Y*W0) 1050 LET F(B)=F(B)-W0: LET E(B)=E(B)-W0 1060 IF F(B)<=0 THEN PRINT "SHIP ";B;" OUT OF fuel!" 1070 IF E(B)<=0 THEN PRINT "SHIP ";B;" OUT OF ENERGY!" 1080 NEXT B 1090 IF N2=0 THEN LET P=D2+1 1095 RETURN 1200 REM .......COMMON symbols for planet or base star 1210 IF Q-19>0 AND Q-19<82 AND H-1>0 AND H-1<10 THEN LET Q$(O-57,O-55)=" .-" 1220 IF Q-18>0 AND Q-18<82 AND H>0 AND H<10 THEN LET Q$(O-54,O-52)="='=" 1230 IF Q-17>0 AND Q-17<82 AND H+1>0 AND H+1<10 THEN LET Q$(O-51,O-49)="-. " 1240 IF Q-11>0 AND Q-11<82 AND H-2>0 AND H-2<10 THEN LET Q$(O-31,O-31)="/" 1250 IF Q-7>0 AND Q-7<82 AND H+2>0 AND H+2<10 THEN LET Q$(O-21,O-21)="\" 1255 IF Q+7>0 AND Q+7<82 AND H-2>0 AND H-2<10 THEN LET Q$(O+23,O+23)="\" 1260 IF Q+11>0 AND Q+11<82 AND H+2>0 AND H+2<10 THEN LET Q$(O+33,O+33)="/" 1270 IF Q+17>0 AND Q+17<82 AND H-1>0 AND H-1<10 THEN LET Q$(O+51,O+53)=" '-" 1275 IF Q+18>0 AND Q+18<82 AND H>0 AND H<10 THEN LET Q$(O+54,O+56)="=.=" 1280 IF Q+19>0 AND Q+19<82 AND H+1>0 AND H+1<10 THEN LET Q$(O+57,O+59)="-' " 1285 IF Q+3>0 AND Q+3<82 AND H+2>0 AND H+2<10 THEN LET Q$(O+6,O+8)=" ) " 1290 IF Q-3>0 AND Q-3<82 AND H-2>0 AND H-2<10 THEN LET Q$(O-6,O-4)=" ( " 1295 RETURN 1600 IF C0<1 OR C0>=9 THEN LET C0=1 1620 LET Y=J(C0)+(J(C0+1)-J(C0))*(C0-INT(C0)) 1630 LET X=K(C0)+(K(C0+1)-K(C0))*(C0-INT(C0)) 1640 IF P>43 THEN PRINT 1640,"ship ";B;I(B);C0,J(C0);K(C0) 1695 RETURN 2000 REM ......LAYOUT short range scan 2010 IF Q1=Y(P) AND Q2=X(P) THEN RETURN 2020 LET Q1=Y(P): LET Q2=X(P): LET Q$=A$ 2040 FOR Z=1 TO 90: LET Q$=Q$+A$: NEXT Z 2050 FOR Z=1 TO 75: REM ....LAYOUT stars,planets, etc. 2060 LET V=V(Z)-Q1+5: LET H=H(Z)-Q2+5 2070 IF V<-3 OR V>13 OR H<-3 OR H>13 THEN 2295 2080 LET Q=(V*9)+H-9: LET I=(Z*3)-2: LET O=(Q*3)-2 2085 IF V<1 OR V>9 OR H<1 OR H>9 THEN 2100 2090 IF E(P)>0 THEN LET Q$(O,O+2)=L$(I,I+2) 2100 IF L(Z)<>1 THEN 2150: REM ...Don't lay out a star 2110 IF Q+9>0 AND Q+9<82 THEN LET Q$(O+27,O+30)="/:\" 2120 IF Q-9>0 AND Q-9<82 THEN LET Q$(O-27,O-25)="\:/" 2150 IF L(Z)=2 OR L(Z)=3 THEN GOSUB 1200 ELSE 2200: REM ..Planets 2160 IF Q+1>0 AND Q+1<82 AND L(Z)=3 AND H+1>0 AND H+1<10 THEN 2165 ELSE 2170 2165 LET Q$(O+3,O+3)="d" 2170 REM ...EARTH 2200 IF L(Z)<>4 THEN 2295: REM ......Moons 2210 IF Q-10>0 AND Q-10<82 AND H-1>0 AND H-1<10 THEN LET Q$(O-30,O-28)=" .-" 2220 IF Q-9>0 AND Q-9<82 AND H>0 AND H<10 THEN LET Q$(O-27,O-25)="='=" 2230 IF Q-17>0 AND Q-17<82 AND H+1>0 AND H+1<10 THEN LET Q$(O-24,O-22)="-. " 2250 IF Q+1>0 AND Q+1<82 AND H+1>0 AND H+1<10 THEN LET Q$(O+3,O+6)="n )" 2260 IF Q-1>0 AND Q-1<82 AND H-1>0 AND H-1<10 THEN LET Q$(O-3,O-3)="(" 2270 IF Q+8>0 AND Q+8<82 AND H-1>0 AND H-1<10 THEN LET Q$(O+24,O+26)=" '-" 2280 IF Q+9>0 AND Q+9<82 AND H>0 AND H<10 THEN LET Q$(O+27,O+29)="=.=" 2290 IF Q+10>0 AND Q+10<82 AND H+1>0 AND H+1<10 THEN LET Q$(O+30,O+32)="-' " 2295 NEXT Z 2300 FOR Z=1 TO 200: REM ....LAYOUT all ships 2305 IF Z<50 THEN 2400: REM ..Cylons 2310 IF T(Z)>INT(T(Z)) THEN 2400 2315 LET Y=Y(Z)-Q1+5: LET X=X(Z)-Q2+5 2320 IF Y<0 OR Y>10 OR X<-1 OR X>10 THEN 2890 2330 LET Q=(Y*9)+X-9: LET I=(Z*3)-2: LET O=(Q*3)-2 2335 IF Y<1 OR Y>9 OR X<1 OR X>9 THEN 2350 2340 IF E(Z)>0 THEN LET Q$(O,O+2)=S$(I,I+2) 2350 IF T(Z)=1 THEN 2360 ELSE 2890 2360 IF Q-9>0 AND Q-9<82 AND X>0 AND X<10 THEN LET Q$(O-27,O-25)="\#/" 2370 IF Q-1>0 AND Q-1<82 AND X-1>0 AND X-1<10 THEN LET Q$(O-3,O-1)="--=" 2380 IF Q+1>0 AND Q-1<82 AND X+1>0 AND X+1<10 THEN LET Q$(O+3,O+6)="=--" 2390 IF Q+9>0 AND Q+9<82 AND X>0 AND X<10 THEN LET Q$(O+27,O+29)="/#\" 2395 LET V=Y: LET H=X: GOSUB 1200 2400 IF Z>43 THEN 2890 2410 IF T(Z)>INT(T(Z)) THEN 2890 2415 LET Y=Y(Z)-Q1+5: LET X=X(Z)-Q2+5 2420 IF Y<0 OR Y>10 OR X<-1 OR X>10 THEN 2890 2430 LET Q=(Y*9)+X-9: LET I=(Z*3)-2: LET O=(Q*3)-2 2432 IF Y<1 OR Y>9 OR X<1 OR X>9 THEN 2440 2435 IF E(Z)>0 THEN LET Q$(O,O+2)=S$(I,I+2) 2440 IF Z>1 THEN 2770 2450 IF Q-19>0 AND Q-19<82 AND X-1>0 AND X-1<10 THEN LET Q$(O-57,O-55)=".='" 2460 IF Q-18>0 AND Q-18<82 AND X>0 AND X<10 THEN LET Q$(O-54,O-52)="-. " 2470 IF Q-17>0 AND Q-17<82 AND X+2>0 AND X+2<10 THEN LET Q$(O-48,O-46)="===" 2480 IF Q-16>0 AND Q-16<82 AND X+3>0 AND X+3<10 THEN LET Q$(O-45,O-43)="===" 2490 IF Q-15>0 AND Q-15<82 AND X+4>0 AND X+4<10 THEN LET Q$(O-42,O-40)="== " 2500 IF Q-13>0 AND Q-13<82 AND X+6>0 AND X+6<10 THEN LET Q$(O-36,O-34)=".--" 2510 IF Q-11>0 AND Q-11<82 AND X-2>0 AND X-2<10 THEN LET Q$(O-32,O-32)="/" 2520 IF Q-8>0 AND Q-8<82 AND X+1>0 AND X+1<10 THEN LET Q$(O-24,O-22)="---" 2530 IF Q-7>0 AND Q-7<82 AND X+2>0 AND X+2<10 THEN LET Q$(O-21,O-19)="-H-" 2540 IF Q-6>0 AND Q-6<82 AND X+3>0 AND X+3<10 THEN LET Q$(O-18,O-16)="-H-" 2550 IF Q-5>0 AND Q-5<82 AND X+4>0 AND X+4<10 THEN LET Q$(O-15,O-13)="H--" 2560 IF Q-4>0 AND Q-4<82 AND X+5>0 AND X+5<10 THEN LET Q$(O-12,O-11)="-/" 2570 IF Q-3>0 AND Q-3<82 AND X+6>0 AND X+6<10 THEN LET Q$(O-9,O-7)="-=E" 2580 IF Q-2>0 AND Q-2<82 AND X-2>0 AND X-2<10 THEN LET Q$(O-6,O-6)="(" 2590 IF Q-1>0 AND Q-1<82 AND X-1>0 AND X-1<10 THEN LET Q$(O-4,O-3)="C:" 2600 IF Q+2>0 AND Q+2<82 AND X+2>0 AND X+2<10 THEN LET Q$(O+6,O+8)="GAL" 2610 IF Q+3>0 AND Q+3<82 AND X+3>0 AND X+3<10 THEN LET Q$(O+9,O+11)="ACT" 2620 IF Q+4>0 AND Q+4<82 AND X+4>0 AND X+4<10 THEN LET Q$(O+12,O+14)="ICA" 2630 IF Q+6>0 AND Q+6<82 AND X+6>0 AND X+6<10 THEN LET Q$(O+20,O+20)=":" 2640 IF Q+7>0 AND Q+7<82 AND X-2>0 AND X-2<10 THEN LET Q$(O+22,O+22)="\" 2650 IF Q+10>0 AND Q+10<82 AND X+1>0 AND X+1<10 THEN LET Q$(O+30,O+32)="---" 2660 IF Q+11>0 AND Q+11<82 AND X+2>0 AND X+2<10 THEN LET Q$(O+33,O+35)="-H-" 2670 IF Q+12>0 AND Q+12<82 AND X+3>0 AND X+3<10 THEN LET Q$(O+36,O+38)="-H-" 2680 IF Q+13>0 AND Q+13<82 AND X+4>0 AND X+4<10 THEN LET Q$(O+39,O+41)="H--" 2690 IF Q+14>0 AND Q+14<82 AND X+5>0 AND X+5<10 THEN LET Q$(O+42,O+43)="-\" 2700 IF Q+15>0 AND Q+15<82 AND X+6>0 AND X+6<10 THEN LET Q$(O+45,O+47)="-=E" 2710 IF Q+17>0 AND Q+17<82 AND X-1>0 AND X-1<10 THEN LET Q$(O+51,O+53)="'=." 2720 IF Q+18>0 AND Q+18<82 AND X>0 AND X<10 THEN LET Q$(O+54,O+56)="-'" 2730 IF Q+20>0 AND Q+20<82 AND X+2>0 AND X+2<10 THEN LET Q$(O+60,O+62)="===" 2740 IF Q+21>0 AND Q+21<82 AND X+3>0 AND X+3<10 THEN LET Q$(O+63,O+65)="===" 2750 IF Q+22>0 AND Q+22<82 AND X+4>0 AND X+4<10 THEN LET Q$(O+66,O+67)="==" 2760 IF Q+24>0 AND Q+24<82 AND X+6>0 AND X+6<10 THEN LET Q$(O+72,O+74)="~--" 2770 IF T(Z)<>2 THEN 2890 2780 IF Z<5 OR Z>32 THEN 2800 2785 IF Q+1>0 AND Q+1<82 AND X+1>0 AND X+1<10 THEN LET Q$(O+3,O+6)="[]=" 2790 IF Q+9>0 AND Q+9<82 AND X>0 AND X<10 THEN LET Q$(O+27,O+29)="\[]" 2795 IF Q+10>0 AND Q+10<82 AND X+1>0 AND X+1<10 THEN LET Q$(O+30,O+32)="[]=" 2800 IF Z<33 OR Z>34 THEN 2810 2805 IF Q+1>0 AND Q+1<82 AND X+1>0 AND X+1<10 THEN LET Q$(O+3,O+6)="F]=" 2810 IF Z<35 OR Z>35 THEN 2820 2815 IF Q+1>0 AND Q+1<82 AND X+1>0 AND X+1<10 THEN LET Q$(O+3,O+6)="OO=" 2820 IF Z<36 OR Z>36 THEN 2830 2825 IF Q+1>0 AND Q+1<82 AND X+1>0 AND X+1<10 THEN LET Q$(O+3,O+6)="@]=" 2830 IF Z<37 OR Z>37 THEN 2840 2835 IF Q+1>0 AND Q+1<82 AND X+1>0 AND X+1<10 THEN LET Q$(O+3,O+6)="==E" 2840 IF Z=42 OR Z=43 THEN 2845 ELSE 2890 2845 IF Q+1>0 AND Q+1<82 AND X+1>0 AND X+1<10 THEN LET Q$(O+3,O+6)="X]=" 2890 NEXT Z 2895 RETURN 2900 PRINT "(-4 -3 -2 -1 0 1 2 3 4 ****) SHORT R. SCAN" 2910 FOR Q=1 TO 270 STEP 27 2920 IF Q<301 THEN PRINT "X";Q$(Q,Q+26); 2930 IF Q=1 THEN PRINT " X(-4) DAYS ELAPSED: ";T 2935 IF Q=28 THEN PRINT " X(-3) GALAXY area: ";SGN(Y(P));SGN(X(P)) 2940 IF Q=55 THEN PRINT " X(-2) SHIP coordinates: ";Y(P);X(P) 2945 IF Q=82 THEN PRINT " X(-1) ... ENERGY: ";INT(E(P)) 2950 IF Q=109 THEN PRINT " X( 0) ... SHIELDS: ";(E(P)-INT(E(P)))*100;"%" 2955 IF Q=136 THEN PRINT " X( 1) ... Fuel: ";F(P) 2960 IF Q=163 THEN PRINT " X( 2) ... Course: ";I(P) 2975 IF Q=190 THEN PRINT " X( 3) ..." 2980 IF Q=217 THEN PRINT " X( 4) ... ": EXIT 2995 2992 NEXT Q 2995 PRINT "(-4 -3 -2 -1 0 1 2 3 4 ****)" 2999 RETURN 3000 FOR K=P TO 43 3010 IF E(K)>0 AND T(K)=INT(T(K)) THEN LET P=K: EXIT 3030 3020 NEXT K 3030 RETURN 3050 LET Y=Y(P): LET X=X(P): PRINT B$ 3060 PRINT " ";X-20;TAB(7);X-10;TAB(15);X; 3070 PRINT TAB(21);X+10;TAB(28);X+20;TAB(35); 3080 PRINT "(****)": PRINT B$; 3090 RETURN 3100 REM ...SCAN REPORT gosub 3110 IF Z=1 THEN PRINT TAB(37);Y-20;") Long Range:";H$;P 3120 IF Z=6 THEN PRINT TAB(37);Y-10;")" 3130 IF Z=11 THEN PRINT TAB(37);Y;") FORMAT is Y.XX" 3140 IF Z=16 AND C=2 THEN PRINT TAB(37);Y+10;") ... Stars = Y" 3150 IF Z=16 AND C=3 THEN PRINT TAB(37);Y+10;") ... CYLONS = Y" 3160 IF Z=21 AND C=2 THEN PRINT TAB(37);Y+20;") ... Planets = .XX" 3170 IF Z=21 AND C=3 THEN PRINT TAB(37);Y+20;") ... Your ships = .XX" 3180 RETURN 3200 IF Q3=Y(P) AND Q4=X(P) THEN RETURN : REMSCAN A 3210 LET Q3=Y(P): LET Q4=X(P) 3220 FOR Z=1 TO 25: LET A(Z)=0: NEXT Z 3230 FOR Z=1 TO 75: REM ..fixed bodies 3235 LET V=5: LET H=3 3240 IF V(Z)<>0 THEN LET V=INT(V(Z)/10)-INT(Q3/10)+3 3245 IF H(Z)<>0 THEN LET H=INT(H(Z)/10)-INT(Q4/10)+3 3250 IF V<1 OR V>5 OR H<1 OR H>5 THEN 3290 3260 LET Q=(V*5)+H-5 3270 IF Q>0 AND Q<26 AND L(Z)>1 THEN LET A(Q)=A(Q)+.01 3280 IF Q>0 AND Q<26 AND L(Z)=1 THEN LET A(Q)=A(Q)+1 3290 NEXT Z 3295 RETURN 3300 IF Q5=Y(P) AND Q6=X(P) THEN RETURN : REM ..SCAN B 3310 LET Q5=Y(P): LET Q6=X(P) 3320 FOR Z=1 TO 25: LET B(Z)=0: NEXT Z 3325 FOR Z=1 TO 200: REM ..ships 3330 IF T(Z)>INT(T(Z)) OR E(Z)<1 THEN 3390 3335 LET Y=5: LET X=3 3340 IF Y(Z)<>0 THEN LET Y=INT(Y(Z)/10)-INT(Q5/10)+3 3345 IF X(Z)<>0 THEN LET X=INT(X(Z)/10)-INT(Q6/10)+3 3350 IF Y<1 OR Y>5 OR X<1 OR X>5 THEN 3390 3360 LET Q=(Y*5)+X-5 3370 IF Q>0 AND Q<26 AND Z<50 THEN LET B(Q)=B(Q)+.01 3380 IF Q>0 AND Q<26 AND Z>49 THEN LET B(Q)=B(Q)+1 3390 NEXT Z 3395 RETURN 3800 PRINT ,"&J&J*#* Flares launched *#*&J&J": GOTO 5400 3900 REM ..Land on nearby planetary body 3910 IF P>4 AND P<31 THEN PRINT V$; ELSE PRINT Y$; 3920 FOR Z=1 TO 75 3930 IF ABS(V(Z)-Y(P))>6 OR ABS(H(Z)-X(P))>6 THEN 3980 3940 IF L(Z)=1 THEN PRINT " avoiding "; ELSE PRINT " ...landed on..." 3950 GOSUB 7600 3960 IF Z=60 THEN PRINT "&J&J*** EARTH ***&J&J": LET W=1 3970 EXIT 3990 3980 NEXT Z 3985 PRINT " is to far away to land.&J": GOTO 5400 3990 LET P=P+1: PRINT : GOTO 4090 4000 IF T(P)=3 THEN LET D2=30: LET D3=40 ELSE LET D3=20 4002 PRINT A$;"YOU can move";H$;P;" TO ";D2 4005 PRINT " OR any ship in between. ('0' MOVES ALL SHIPS)&J" 4010 INPUT " INPUT THE 'LAST' SHIP to move ---> ",X0 4015 PRINT : IF X0=0 THEN 4025 4020 IF X0

D2 THEN 4000 ELSE LET D2=X0 4025 IF X0=P THEN LET N2=P ELSE LET N2=0 4030 PRINT H$;P;" NEW COURSE? [1-8]" 4035 INPUT "('0' means keep OLD course)---=>",C0 4040 IF C0>=0 AND C0<9 THEN PRINT ELSE 4000 4045 IF C0=0 THEN LET C0=I(P) 4050 PRINT "...SPEED ?; OR NO. of spaces to move(1 to";D3; 4060 INPUT ")---=>",W0: IF W0=0 THEN 5500 4065 IF W0<1 OR W0>D3 THEN 4040 4070 GOSUB 1000 4080 IF N2>0 THEN LET P=P+1 4085 IF W0>N5 THEN LET N5=W0 4090 GOSUB 3000 4095 LET Q1=Q1+1: LET Q5=Q5+1: GOTO 5000 4100 GOSUB 2000: REM .......short range scan 4110 GOSUB 2900 4195 GOTO 5400 4200 GOSUB 3200: REM .......SCAN A: stars, planets,etc. 4210 PRINT "&J";: GOSUB 3050: PRINT " SCAN A from ";Y(P);X(P) 4220 FOR Z=1 TO 25 STEP 5 4230 PRINT TAB(1);A(Z);TAB(8);A(Z+1);TAB(15);A(Z+2); 4240 PRINT TAB(22);A(Z+3);TAB(29);A(Z+4);TAB(35);"("; 4250 GOSUB 3100 4260 NEXT Z 4290 GOTO 4370 4300 GOSUB 3300: REM .......SCAN B: ships 4310 PRINT "&J";: GOSUB 3050: PRINT " SCAN B from ";Y(P);X(P) 4320 FOR Z=1 TO 25 STEP 5 4330 PRINT TAB(1);B(Z);TAB(8);B(Z+1);TAB(15);B(Z+2); 4340 PRINT TAB(22);B(Z+3);TAB(29);B(Z+4);TAB(35);"("; 4350 GOSUB 3100 4360 NEXT Z 4370 GOSUB 3050: PRINT "&J" 4390 GOTO 5500 4400 IF T(P)=2 THEN PRINT ,"&JH E L P !&J": GOTO 5400 4410 PRINT "Input desired location "; 4420 INPUT "...--=>",Y(P),X(P) 4495 GOTO 5500 4500 PRINT "&J###";H$;P;" set shield percent"; 4510 INPUT (3,0)" ---=>",I 4520 IF I>100 THEN LET I=100 4530 IF I<0 THEN LET I=0 4540 IF I>0 THEN LET I=I/100 4550 LET E(P)=E(P)+I 4580 PRINT 4590 GOTO 5500 4600 PRINT "&J###";H$;P;" status:&J" 4610 PRINT ,"Energy: ";INT(E(P)) 4620 PRINT ,"Shields: ";(E(P)-INT(E(P)))*100;"%" 4630 PRINT ,H$;"course: ";I(P) 4640 PRINT ,H$;"co-ord: ";Y(P);X(P) 4690 PRINT 4695 GOTO 5500 4700 PRINT 4710 PRINT ,"OPTION 0 = LOOK AT GALAXY MAP" 4720 PRINT ,"OPTION 1 = GAME STATUS" 4730 PRINT ,"OPTION 2 = DISTANCE CALCULATOR" 4740 PRINT ,"OPTION 3 = REPORT ship locations" 4750 PRINT ,"OPTION 4 = REPORT fighter locations" 4755 PRINT ,"OPTION 5 = REPORT visible enemy" 4760 PRINT ,"OPTION 6 = REPORT known star ";X$;"locations" 4765 PRINT ,"OPTION 7 = REPORT on scan readout" 4770 PRINT ,"OPTION 8 = Launch ";Y$;"(GALACTICA only)" 4772 PRINT ,"OPTION 9 = Land ";Y$;"(GALACTICA only)" 4775 INPUT (1,0)"<***> WHICH OPTION COMMANDER ? (0-9) ---=>",Z 4780 IF Z<0 OR Z>8 THEN 5500 ELSE LET Z=INT(Z): PRINT 4785 IF Z>7 AND P>1 THEN 5400 4787 IF Z=0 THEN 8000 4790 ON Z GOTO 8100,8200,8300,8400,8500,8600,8700,4800,4900 4795 GOTO 5500 4800 IF P>1 THEN 3800 ELSE LET X=0 4805 IF C=8 THEN LET D1=5: LET D3=30 ELSE LET D1=2: LET D3=4 4810 FOR Z=D1 TO D3 4815 IF T(Z)=2.5 AND E(Z)>0 THEN LET X=X+1: LET D2=Z 4820 IF T(Z)=3.5 AND E(Z)>0 THEN LET X=X+1: LET D2=Z 4825 NEXT Z 4830 PRINT "&JYou have ";X; 4835 IF C=8 THEN PRINT " Vipers"; ELSE PRINT Y$; 4840 PRINT " ready to launch " 4845 PRINT "### INPUT the last Ship to launch: (";D1;" to ";D2;")&J" 4850 INPUT "---=>",Y 4855 IF YD2 THEN 4800 ELSE PRINT 4860 FOR Z=D1 TO Y 4865 IF E(Z)>0 AND T(Z)>INT(T(Z)) THEN LET E(Z)=75 ELSE 4890 4870 IF C=8 THEN LET T(Z)=3 ELSE LET T(Z)=2 4875 LET D(Z)=100: IF C=8 THEN LET F(Z)=75 ELSE LET F(Z)=200 4880 LET Y(Z)=INT(RND(0)*5)+Y(1): LET X(Z)=INT(RND(0)*5)+X(1) 4885 IF C=8 THEN PRINT W$;V$; ELSE PRINT W$;Y$; 4887 PRINT Z;" launched." 4890 NEXT Z 4895 LET Q5=Q5+1: LET Q1=Q1+1: PRINT : GOTO 5400 4900 IF P>1 THEN 3900: REM .....land Vipers 4905 IF C=9 THEN LET D1=5: LET D3=30 ELSE LET D1=2: LET D3=4 4910 FOR Z=D1 TO D3 4920 IF E(Z)<0 OR T(Z)>INT(T(Z)) THEN 4980 4930 LET Y=ABS(Y(1)-Y(Z)): LET X=ABS(X(1)-X(Z)) 4940 IF Y>9 OR X>9 THEN 4980 4950 IF C=9 THEN LET T(Z)=3.5 ELSE LET T(Z)=2.5 4960 IF C=9 THEN PRINT W$;V$; ELSE PRINT W$;Y$; 4970 PRINT Z;" landed." 4980 NEXT Z 4985 GOTO 4895 4990 LET P=P+1: GOSUB 3000: REM .MOVE all on same course 5000 PRINT 5010 FOR X=1 TO 10: LET C(X)=0: NEXT X 5020 FOR Z=2 TO 43 5030 IF E(Z)<=0 THEN 5090 ELSE LET X=INT(T(Z)) 5040 IF Z<5 AND X=2 THEN LET C(1)=C(1)+1 5050 IF Z<31 AND X=3 THEN LET C(2)=C(2)+1 5060 IF Z>30 AND X=2 THEN LET C(3)=C(3)+1 5090 NEXT Z 5100 IF E(1)<=0 AND S(1)<=0 THEN LET W=1: GOTO 9000 5110 IF W=1 THEN 9000 5400 IF E(P)=0 THEN GOSUB 3000 5470 IF I(P)=0 THEN LET I(P)=1.1 5500 IF P>43 THEN 6000 ELSE LET D1=P: LET D2=43 5510 IF P=1 THEN PRINT "BATTLESTAR GALACTICA..."; 5520 IF P>1 AND P<5 THEN PRINT ":(] Shuttle pilot ";P; 5530 IF P>4 AND P<30 THEN PRINT "-=< Viper pilot ";P; 5540 IF P>29 THEN PRINT "Ship pilot ";P; 5550 PRINT " Next command (1-10)";: INPUT (2,400)"---=>",C$ 5560 IF LEN(C$)=0 THEN 6000 5570 LET C=ASC(C$(1,1))-48: SET DS=0: PRINT 5600 IF C<0 OR C>10 THEN 5800 5610 IF C>1 THEN GOSUB 5900 5620 IF C=0 THEN 4000 5630 ON C GOTO 4100,4200,4300,4400,4500,4600,4700,4800,4900,4990 5800 PRINT 5810 FOR C=0 TO 10 5820 GOSUB 5900 5830 NEXT C 5840 PRINT 5850 GOTO 5500 5900 PRINT "*COMMAND* ";C;" *** ---"; 5905 IF C=0 THEN PRINT " MOVE" 5910 IF C=1 THEN PRINT " SHORT RANGE SCAN" 5920 IF C=2 THEN PRINT " LONG RANGE SCAN A: stars,planets" 5930 IF C=3 THEN PRINT " LONG RANGE SCAN B: ships,comets" 5940 IF C=4 AND P=1 THEN PRINT " GALACTICA LASERS" 5945 IF C=4 AND T(P)=2 THEN PRINT " Send distress call" 5947 IF C=4 AND T(P)=3 THEN PRINT " -=< shoot >=-" 5950 IF C=5 THEN PRINT " SHIELD control" 5960 IF C=6 THEN PRINT " SHIP'S Status report" 5970 IF C=7 THEN PRINT " COMMANDER BRIEFING (10 OPTIONS)" 5980 IF C=8 AND P=1 THEN PRINT " Launch VIPERS" 5982 IF C=8 AND P>1 THEN PRINT " Launch flares" 5985 IF C=9 AND P=1 THEN PRINT " Land VIPERS" 5987 IF C=9 AND P>1 THEN PRINT " Land on nearby planet body" 5990 IF C=10 THEN PRINT " MOVE ALL SHIPS ON PRESENT COURSE" 5995 RETURN 6000 PRINT "&J","* CYLONS moving ";N5;" now *&J" 6090 LET P=49 6100 LET P=P+1 6410 IF F0=1 THEN LET A0=0: GOTO 6800: REM ..DON'T CHANGE COURSE 6800 LET N2=P: LET D2=P: REM ........MOVE ROUTINE 6810 LET C0=I(P) 6830 GOSUB 1000 6890 IF P25 AND Z<36 THEN PRINT K$;X$ 7690 IF Z>35 THEN PRINT "Unknown ";X$ 7695 RETURN 8000 PRINT "(-200)(-150)(-100)( -50)( -25):( +25)( +50)(+100)(+150)(+200)" 8010 PRINT "(-150) *? y *? (-150)" 8020 PRINT "(-100) *? a a: *? (+100)" 8030 PRINT "( -50) *** : * a ( -50)" 8035 PRINT "( -25) -y,-x cylon area : 2 colonies -y,+x ( -25)" 8040 PRINT "( 00 )- x --------------------O-------------------- x -( 00 )" 8045 PRINT "( +25) +y,-x * : * a a +y,+x ( +25)" 8050 PRINT "( +50) * 6 colonies : 4 colonies ( +50)" 8060 PRINT "(+100) *? : (+100)" 8070 PRINT "(+150) *? *? y *? (+150)" 8080 PRINT "(-200)(-150)(-100)( -50)( -25):( +25)( +50)(+100)(+150)(+200)" 8090 PRINT ,H$;W$;P;" at location ";Y(P);X(P) 8095 GOTO 5500 8100 PRINT "*** GAME STATUS ***&J" 8110 IF E(1)>0 THEN PRINT "Battle Stars Left: ";1 8120 IF C(1)>0 THEN PRINT "Shuttle craft Left: ";C(1) 8130 IF C(2)>0 THEN PRINT V$;"Fighters Left: ";C(2) 8140 IF C(3)>0 THEN PRINT "Refugee Ships Left: ";C(3) 8150 PRINT 8190 GOTO 5400 8200 LET Y3=0: LET X3=0: REM ...Distance calculator 8210 PRINT H$;P;" now at co-ordinates ";Y(P);X(P);"&J" 8220 PRINT "ENTER co-ordinates in this format ---=> Y1,X1,Y2,X2" 8230 INPUT " ---=> Y1,X1,Y2,X2 ---=>",Y1,X1,Y2,X2 8240 LET Y3=ABS(Y1)+ABS(Y2): LET X3=ABS(X1)+ABS(X2): PRINT 8250 PRINT "### DISTANCE between Y co-ordinates = ";Y3 8260 PRINT "*** DISTANCE between X co-ordinates = ";X3 8270 PRINT 8280 IF Y3>X3 THEN LET Z=Y3 ELSE LET Z=X3 8290 PRINT "TIME = ";INT(ABS(Z+20)/20);" day(s)&J&J" 8295 GOTO 5400 8300 PRINT "&K *** GALACTICA at ";Y(1);X(1) 8310 FOR Z=2 TO 4 8320 CURSOR Z+1,1: IF E(Z)>0 THEN PRINT Y$;W$;Z;" "; 8330 IF T(Z)>INT(T(Z)) THEN PRINT "Landed" ELSE PRINT Y(Z);X(Z) 8340 NEXT Z 8360 FOR Z=31 TO 43 8370 CURSOR Z-30,35 8380 IF E(Z)>0 THEN PRINT H$;W$;Z;" ";Y(Z);X(Z) 8390 NEXT Z 8395 GOTO 5400 8400 LET X=0: PRINT "&K": REM ....fighter locations 8410 FOR Z=5 TO 30 8420 IF E(Z)>0 AND T(Z)=3 THEN LET X=X+1 8430 NEXT Z 8440 IF X=0 THEN PRINT " *** ALL Vipers are on the Galactica ***&J" 8450 FOR Z=5 TO 30 STEP 2 8460 CURSOR INT(Z/2),1: PRINT V$;W$;Z; 8465 IF E(Z)<=0 THEN PRINT " dead "; 8467 IF E(Z)>0 AND T(Z)=3.5 THEN PRINT " landed "; 8468 IF E(Z)>0 AND T(Z)=3 THEN PRINT " ";Y(Z);X(Z); 8470 CURSOR INT(Z/2),30: PRINT V$;W$;Z+1; 8475 IF E(Z+1)<=0 THEN PRINT " dead "; 8477 IF E(Z+1)>0 AND T(Z+1)=3.5 THEN PRINT " landed "; 8478 IF E(Z+1)>0 AND T(Z+1)=3 THEN PRINT " ";Y(Z+1);X(Z+1); 8480 NEXT Z 8490 PRINT 8495 GOTO 5400 8500 PRINT "&K&J": LET H=0: REM ......Visible enemy identification 8505 PRINT H$;W$;P,"### scan in progress ### from ";Y(P);X(P);"&J" 8510 IF P>1 THEN LET V=0 ELSE LET V=10 8520 FOR Z=50 TO 200 8530 IF T(Z)=3.5 THEN 8580 8540 LET Y=Y(Z)-Y(P)+V: LET X=X(Z)-X(P)+V 8550 IF Y<-(V+6) OR Y>V+6 OR X<-(V+6) OR X>V+6 THEN 8580 8560 IF T(Z)<>1 THEN PRINT "Possible";K$;H$;"at ";Y(Z);X(Z) 8565 IF T(Z)=1 THEN PRINT K$;"STAR at ";Y(Z);X(Z) 8570 LET H=H+1 8580 NEXT Z 8590 IF H=0 THEN PRINT "&JNO CYLONS in scanning range&J" ELSE PRINT 8595 GOTO 5400 8600 REM ....CMD # 7.6 Scan readout on planets, etc. 8610 FOR Z=1 TO 75 8615 IF Z=35 THEN PRINT "&J Longer range report coming...&J": PAUSE 30 8620 IF L(Z)<>1 THEN 8690 8630 LET V=V(Z)-Y(P): LET H=H(Z)-X(P) 8640 IF V<-200 OR V>200 OR H<-200 OR H>200 THEN 8690 8650 PRINT "BODY # ";Z;" ... Star "; 8660 IF Z<26 THEN PRINT J$;X$;"at ";V(Z);H(Z) 8670 IF Z>25 AND Z<36 THEN PRINT K$;W$;"at ";V(Z);H(Z) 8680 IF Z>35 THEN PRINT "UNKNOWN at ";V(Z);H(Z) 8690 NEXT Z 8692 PRINT 8695 GOTO 5400 8700 FOR Z=1 TO 75: REM ....CMD # 7.7 Scan readout 8705 IF ABS(V(Z)-Y(P))>5 OR ABS(H(Z)-X(P))>5 THEN 8720 8710 GOSUB 7600 8720 NEXT Z 8725 PRINT 8730 FOR Z=1 TO 200 8735 IF T(Z)=3.5 OR T(Z)=3.2 THEN 8790 8740 IF E(Z)<=0 OR Z=P THEN 8790 8745 IF ABS(Y(Z)-Y(P))>5 OR ABS(X(Z)-X(P))>5 THEN 8790 8750 IF T(Z)=1 AND Z>1 THEN PRINT K$;"BASE STAR!" 8760 IF T(Z)=2 THEN PRINT J$;H$;W$;Z 8770 IF T(Z)=3 AND Z<50 THEN PRINT J$;V$;W$;Z 8780 IF T(Z)=3 AND Z>50 THEN PRINT K$;"Fighter #";Z 8790 NEXT Z 8795 GOTO 5400 9000 IF W=2 THEN PRINT "&K&J","*=*=* Y O U W O N *=*=*" 9010 IF W=1 THEN PRINT "&J","* THE CYLONS WON! *" 9020 PRINT 9700 PRINT : CLEAR 9710 RESTORE 9720 INPUT (1,0)" PLAY AGAIN ---",I$ 9730 IF I$="Y" THEN 10 9990 END