10 REM *** SEA BATTLE *** LAST MOD 12/20/10 WTN 15 REM ORIGINAL HP2000 PROGRAM BY VINCENT ERIKSON 20 REM THE REAL NAME OF THIS PROGRAM IS, "UNDERWATER PIE LOB" 25 REM CONVERTED TO MS BASIC BY STEVE NORTH 30 REM CREATIVE COMPUTING MORRISTOWN, NEW JERSEY 35 REM PUBLISHED IN DAVID AHL'S MORE COMPUTER GAMES 40 REM CONVERTED TO TRS80 BASIC BY ??? (AWSOFTWARE.ORG) 45 REM CONVERTED TO SINGLE USER HPBASIC BY WTN 12/2010 50 REM CHANGES... ADDED COMMANDS TO PASS TIME, TOGGLE AUTOMAP AND 55 REM PRINT HELP, ADDED STARTUP PROMPTS FOR RANDOM SEED AND 60 REM DIFFICULTY - LEVEL 3 IS STOCK PARMS, 1 AND 2 ARE EASIER 65 REM ELIMINATED NAME PROMPT AND OTHER STRING USAGE 70 REM ADDED NUMBER PRINT SUB, PLURAL MODS (WAS/WERE S ETC) 75 REM MODIFIED SHIP MOVEMENT AND OTHER CODE AS DESIRED 100 PRINT 110 PRINT "*** SEA BATTLE ***" 120 PRINT "ENTER RANDOM SEED NUMBER "; 121 INPUT Z7 122 FOR Z8=0 TO Z7 123 LET Z9=RND(1) 124 NEXT Z8 130 PRINT "DIFFICULTY LEVEL 1-EASY 2-MEDIUM 3-NORMAL "; 131 INPUT L7 132 IF L7#1 AND L7#2 AND L7#3 THEN 130 260 PRINT 270 DIM A[20,20],D[9] 280 REM ADDED AUTOMAP TOGGLE 281 LET M7=1 282 LET O=0 310 REM *** SET UP AREA *** 320 MAT A=ZER 330 REM *** ISLAND *** 340 RESTORE 341 FOR Z8=1 TO 16 342 READ Z9 343 NEXT Z8 350 FOR X=7 TO 13 360 FOR Y=7 TO 12 370 READ A[X,Y] 380 NEXT Y 390 NEXT X 400 REM *** SUB *** 410 LET S1=S2=10 420 LET A[S1,S2]=2 430 REM *** ENEMY SHIPS *** 440 REM LET S=INT(RND(1)*16)+15 450 LET S=INT(RND(1)*(L7*3+7))+L7*4+3 490 FOR X=1 TO S 500 LET X1=INT(RND(1)*20)+1 510 LET X2=INT(RND(1)*20)+1 520 IF A[X1,X2]#0 THEN 500 530 LET A[X1,X2]=3 540 NEXT X 550 PRINT "YOU MUST DESTROY "; 551 LET Z9=S 552 GOSUB 9400 553 PRINT " ENEMY SHIPS TO WIN." 560 REM *** HEADQUARTERS *** 570 LET S4=INT(RND(1)*20)+1 580 LET S3=INT(RND(1)*20)+1 590 IF A[S3,S4]#0 THEN 570 600 LET A[S3,S4]=4 610 REM *** UNDERWATER MINES *** 620 REM FOR X=1 TO INT(RND(1)*8)+8 625 FOR X=1 TO INT(RND(1)*8)+L7*2+2 630 LET X2=INT(RND(1)*20)+1 640 LET X1=INT(RND(1)*20)+1 650 IF A[X1,X2]#0 THEN 630 660 LET A[X1,X2]=5 670 NEXT X 680 REM *** SEA MONSTERS *** 690 FOR X=1 TO 4 700 LET X2=INT(RND(1)*18)+2 710 LET X1=INT(RND(1)*18)+2 720 IF A[X1,X2]#0 THEN 700 730 LET A[X1,X2]=6 780 NEXT X 790 REM *** SET STARTING VALUES *** 800 MAT D=ZER 810 LET C=30 820 LET P=6000+(3-L7)*2000 830 LET F=2500+(3-L7)*500 840 LET T=10+(3-L7)*4 850 LET M=3+(3-L7)*2 860 LET D=100 870 LET D2=2+(3-L7)*3 875 IF M7 THEN 1790 880 REM *** COMMAND SECTION *** 890 PRINT "WHAT ARE YOUR ORDERS "; 900 INPUT O 910 IF O=0 THEN 1040 911 IF O=1 THEN 1680 912 IF O=2 THEN 2220 913 IF O=3 THEN 2680 914 IF O=4 THEN 3250 915 IF O=5 THEN 3410 916 IF O=6 THEN 3700 917 IF O=7 THEN 3880 918 IF O=8 THEN 4400 919 IF O=9 THEN 4660 920 IF O=10 THEN 4690 921 IF O=11 THEN 6320 922 IF O=12 THEN 6400 925 PRINT 930 PRINT "THE COMMANDS ARE:" 931 PRINT "#0: NAVIGATION - MOVES YOUR SUBMARINE" 932 PRINT "#1: SONAR - OPTION 0 PRINTS MAP, 1 SENSES DIRECTIONS" 933 PRINT "#2: TORPEDO CONTROL - FIRES A TORPEDO" 934 PRINT "#3: MISSILE CONTROL - FIRES A POLARIS MISSLE" 935 PRINT "#4: MANUEVERING - SETS DEPTH" 936 PRINT "#5: STATUS/DAMAGE REPORT" 937 PRINT "#6: HEADQUARTERS - MUST BE IN DOCKING RANGE" 938 PRINT "#7: SABOTAGE - SEND MEN ON A SABOTAGE MISSION" 939 PRINT "#8: POWER CONVERSION - FUEL TO POWER AND VICE VERSA" 940 PRINT "#9: SURRENDER" 941 PRINT "#10: PASS TIME - USE THIS TO REPAIR DAMAGE" 942 PRINT "#11: TOGGLE AUTOMAP - IF DISABLED USE SONAR OPTION 0" 943 PRINT "#12: PRINT SYMBOLS AND DIRECTIONS" 944 PRINT 1030 GOTO 880 1040 REM *** #0: NAVIGATION *** 1050 IF D[1] >= 0 THEN 1080 1060 PRINT "ENGINES ARE UNDER REPAIR." 1070 GOTO 880 1080 IF C>8 THEN 1110 1090 PRINT "NOT ENOUGH CREW TO MAN THE ENGINES." 1100 GOTO 880 1110 LET D1=1-((.23+RND(1)/10)*(D <= 50)) 1120 GOSUB 6080 1125 IF C1=0 THEN 880 1130 PRINT "POWER AVAILABLE="; 1131 LET Z9=P 1132 GOSUB 9400 1133 PRINT " POWER TO USE "; 1140 INPUT P1 1141 IF P1=0 THEN 880 1150 IF P1<0 OR P1>P THEN 1130 1160 IF P1 <= 1000 THEN 1210 1170 IF RND(1)<.43 THEN 1210 1180 PRINT "ATOMIC PILE GOES SUPERCRITICAL!!! HEADQUARTERS" 1190 PRINT "WILL WARN ALL SUBS TO STAY AWAY FROM RADIOACTIVE AREA!!!" 1200 GOTO 6180 1210 LET X=S1 1220 LET Y=S2 1230 LET Q1=1 1240 FOR X2=1 TO INT(INT(P1/100+.5)*D1+.5) 1250 IF X+X1>0 AND X+X1<21 AND Y+Y1>0 AND Y+Y1<21 THEN 1280 1260 PRINT "YOU CAN'T LEAVE THE AREA!!" 1270 GOTO 1340 1280 LET Z9=A[X+X1,Y+Y1] 1281 IF Z9=0 THEN 1290 1282 IF Z9=1 THEN 1330 1283 IF Z9=2 THEN 1630 1284 IF Z9=3 THEN 1390 1285 IF Z9=4 THEN 1440 1286 IF Z9=5 THEN 1470 1287 IF Z9=6 THEN 1490 1290 LET X=X+X1 1300 LET Y=Y+Y1 1310 LET P=P-100 1320 GOTO 1520 1330 PRINT "YOU ALMOST RAN AGROUND!!" 1340 LET A[S1,S2]=0 1350 LET A[X,Y]=2 1360 LET S1=X 1370 LET S2=Y 1380 GOTO 4690 1390 IF D>50 THEN 1290 1400 PRINT "YOU RAMMED A SHIP!!! YOU'RE BOTH SUNK!!" 1410 LET S=S-1 1420 IF S=0 THEN 6260 1430 GOTO 6180 1440 IF D>50 THEN 1290 1450 PRINT "YOU RAMMED HEADQUARTERS!! YOU'RE SUNK!!" 1460 GOTO 6180 1470 PRINT "YOU'VE BEEN BLOWN UP BY A MINE!!" 1480 GOTO 6180 1490 IF RND(1)<.21 THEN 1630 1500 PRINT "YOU WERE EATEN BY A SEA MONSTER!!" 1510 GOTO 6180 1520 REM *** CHECK FOR NEARBY SEA MONSTERS *** 1530 FOR X3=X-2 TO X+2 1540 FOR Y3=Y-2 TO Y+2 1550 IF X3<1 OR X3>20 OR Y3<1 OR Y3>20 THEN 1610 1560 IF A[X,Y]#6 THEN 1610 1570 IF RND(1)<.25 THEN 1500 1580 IF Q1=0 THEN 1610 1590 PRINT "YOU JUST HAD A NARROW ESCAPE WITH A SEA MONSTER!!" 1600 LET Q1=0 1610 NEXT Y3 1620 NEXT X3 1630 NEXT X2 1640 PRINT "NAVIGATION COMPLETE. POWER LEFT="; 1641 LET Z9=P 1642 GOSUB 9400 1643 PRINT 1650 IF P>0 THEN 1340 1660 PRINT "ATOMIC PILE HAS GONE DEAD!!! SUB SINKS, CREW SUFFOCATES" 1670 GOTO 6180 1680 REM *** #1: SONAR *** 1690 IF D[2] >= 0 THEN 1720 1700 PRINT "SONAR IS UNDER REPAIR." 1710 GOTO 880 1720 IF C>5 THEN 1750 1730 PRINT "NOT ENOUGH CREW TO WORK SONAR." 1740 GOTO 880 1750 PRINT "OPTION # "; 1760 INPUT O1 1762 REM CH.VARNAME SO 1ST O CAN BE CHECKED 1770 IF O1=0 THEN 1790 1771 IF O1=1 THEN 2010 1780 GOTO 1750 1790 REM *** PRINT OUT MAP *** 1800 REM PRINT 1810 FOR X=1 TO 20 1820 FOR Y=1 TO 20 1840 IF A[X,Y]#0 THEN 1880 1850 IF Y#1 AND Y#20 AND X#1 AND X#20 THEN 1880 1860 PRINT " . "; 1870 GOTO 1950 1880 REM RECODED RESTORE/READ/PRINTS USING ORIGINAL SYMBOLS 1890 REM LESS MALFUNCTION UNLESS LEVEL 3 1920 IF A[X,Y]<3 THEN 1930 1921 IF D<50 AND RND(1)<.23*(L7/3) THEN 1860 1922 IF RND(1)<.15*(L7/3) THEN 1860 1930 LET Z9=A[X,Y] 1932 IF Z9#0 THEN 1934 1933 PRINT " "; 1934 IF Z9#1 THEN 1936 1935 PRINT "***"; 1936 IF Z9#2 THEN 1938 1937 PRINT "(X)"; 1938 IF Z9#3 THEN 1940 1939 PRINT "\S/"; 1940 IF Z9#4 THEN 1942 1941 PRINT "!H!"; 1942 IF Z9#5 THEN 1944 1943 PRINT " $ "; 1944 IF Z9#6 THEN 1950 1945 PRINT "-#-"; 1950 NEXT Y 1960 PRINT 1970 NEXT X 1975 REM NO POWER LOSS FOR AUTOMAP SCANS 1976 IF O#1 THEN 1990 1980 LET P=P-50 1990 IF P>0 THEN 880 2000 GOTO 1660 2010 REM *** DIRECTIONAL INFORMATION *** 2020 MAT B=ZER 2030 PRINT "DIRECTION # OF SHIPS DISTANCES" 2040 RESTORE 2050 FOR X=1 TO 8 2060 READ X1,Y1 2070 LET X3=0 2080 FOR X4=1 TO 20 2090 LET X5=X1*X4 2091 LET Y5=Y1*X4 2092 IF S1+X5<1 OR S1+X5>20 OR S2+Y5<1 OR S2+Y5>20 THEN 2130 2100 IF A[S1+X5,S2+Y5]#3 THEN 2130 2110 LET X3=X3+1 2120 LET B[X3]=X4 2130 NEXT X4 2140 IF X3=0 THEN 2200 2150 PRINT " ";X,X3, 2160 FOR X4=1 TO X3 2170 PRINT B[X4]; 2180 NEXT X4 2190 PRINT 2200 NEXT X 2210 GOTO 1980 2220 REM *** #2: TORPEDO CONTROL *** 2230 IF D[3] >= 0 THEN 2260 2240 PRINT "TORPEDO TUBES ARE UNDER REPAIR." 2250 GOTO 880 2260 IF C >= 10 THEN 2290 2270 PRINT "NOT ENOUGH CREW TO FIRE TORPEDO." 2280 GOTO 880 2290 IF T THEN 2320 2300 PRINT "NO TORPEDOS LEFT." 2310 GOTO 880 2320 IF D<2000 THEN 2360 2330 IF RND(1)>.5 THEN 2360 2340 PRINT "PRESSURE IMPLODES UPON FIRING...YOU'RE CRUSHED!!" 2350 GOTO 6180 2360 GOSUB 6080 2365 IF C1=0 THEN 880 2370 LET X=S1 2380 LET Y=S2 2390 FOR X2=1 TO INT(7+5*(D>50)-RND(1)*4+.5) 2400 IF X+X1>0 AND X+X1<21 AND Y+Y1>0 AND Y+Y1<21 THEN 2460 2410 PRINT "TORPEDO OUT OF SONAR RANGE...INEFFECTUAL." 2420 LET T=T-1 2430 LET P=P-150 2440 IF P>0 THEN 4690 2450 GOTO 1660 2460 LET Z9=A[X+X1,Y+Y1] 2461 IF Z9=0 THEN 2470 2462 IF Z9=1 THEN 2510 2463 IF Z9=2 THEN 2650 2464 IF Z9=3 THEN 2540 2465 IF Z9=4 THEN 2580 2466 IF Z9=5 THEN 2610 2467 IF Z9=6 THEN 2630 2470 LET X=X+X1 2480 LET Y=Y+Y1 2490 PRINT "..!.."; 2500 GOTO 2650 2510 PRINT "YOU TOOK OUT SOME ISLAND!" 2520 LET A[X+X1,Y+Y1]=0 2530 GOTO 2420 2540 PRINT "OUCH!!! YOU GOT ONE!!" 2550 LET S=S-1 2560 IF S#0 THEN 2520 2570 GOTO 6260 2580 PRINT "YOU BLEW UP YOUR HEADQUARTERS!!!" 2590 LET S3=S4=D2=0 2600 GOTO 2520 2610 PRINT "BLAM!! SHOT WASTED ON A MINE!!" 2620 GOTO 2520 2630 PRINT "A SEA MONSTER HAD A TORPEDO FOR LUNCH!!" 2640 GOTO 2420 2650 NEXT X2 2660 PRINT "DUD." 2670 GOTO 2420 2680 REM *** #3: POLARIS MISSLE CONTROL *** 2690 IF D[4] >= 0 THEN 2720 2700 PRINT "MISSILE SILOS ARE UNDER REPAIR." 2710 GOTO 880 2720 IF C>23 THEN 2750 2730 PRINT "NOT ENOUGH CREW TO LAUNCH MISSILE." 2740 GOTO 880 2750 IF M#0 THEN 2780 2760 PRINT "NO MISSILES LEFT." 2770 GOTO 880 2780 IF D>50 AND D<2000 THEN 2850 2790 PRINT "RECOMMEND THAT YOU DO NOT FIRE AT THIS DEPTH." 2791 PRINT "ENTER 1 TO CONFIRM FIRE "; 2800 INPUT Z9 2810 IF Z9#1 THEN 880 2820 IF RND(1)<.5 THEN 2850 2830 PRINT "MISSILE EXPLODES UPON FIRING!! YOU'RE DEAD!!" 2840 GOTO 6180 2850 GOSUB 6080 2855 IF C1=0 THEN 880 2860 PRINT "FUEL (LBS.) "; 2870 INPUT F1 2875 IF F1=0 THEN 880 2880 IF F1>0 AND F1 <= F THEN 2910 2890 PRINT "YOU ONLY HAVE "; 2891 LET Z9=F 2892 GOSUB 9400 2893 PRINT " LBS. LEFT." 2900 GOTO 2860 2910 LET F2=INT(F1/75+.5) 2920 LET X5=X1*F2 2921 LET Y5=Y1*F2 2922 IF S1+X5>0 AND S1+X5<21 AND S2+Y5>0 AND S2+Y5<21 THEN 2980 2930 PRINT "MISSILE OUT OF SONAR TRACKING. MISSILE LOST." 2940 LET M=M-1 2950 LET F=F-F1 2960 LET P=P-300 2970 GOTO 2440 2980 LET D3=D4=D5=D6=0 2990 FOR X=S1+X1*F2-1 TO S1+X1*F2+1 3000 FOR Y=S2+Y1*F2-1 TO S2+Y1*F2+1 3010 IF X<1 OR X>20 OR Y<1 OR Y>20 THEN 3140 3020 LET D3=D3+(A[X,Y]=3) 3030 LET D4=D4+(A[X,Y]=6) 3040 LET D5=D5+(A[X,Y]=5) 3050 LET D6=D6+(A[X,Y]=1) 3060 IF A[X,Y]#4 THEN 3100 3070 PRINT "YOU'VE JUST DESTROYED YOUR HEADQUARTERS!!!" 3080 LET D3=S4=D2=0 3090 GOTO 3130 3100 IF A[X,Y]#2 THEN 3130 3110 PRINT "YOU'VE JUST DESTROYED YOURSELF!!! DUMMY!!" 3120 GOTO 6180 3130 LET A[X,Y]=0 3140 NEXT Y 3150 NEXT X 3160 IF D6=0 THEN 3180 3170 PRINT "YOU BLEW OUT SOME ISLAND." 3180 IF D5=0 THEN 3200 3190 PRINT "YOU DESTROYED "; 3191 LET Z9=D5 3192 GOSUB 9400 3193 IF D5=1 THEN 3196 3194 PRINT " MINES." 3195 GOTO 3200 3196 PRINT " MINE." 3200 IF D4=0 THEN 3220 3210 PRINT "YOU GOT "; 3211 LET Z9=D4 3212 GOSUB 9400 3213 PRINT " SEA MONSTER"; 3214 IF D4=1 THEN 3216 3215 PRINT "S"; 3216 PRINT "!!! GOOD WORK!!" 3220 PRINT "YOU DESTROYED "; 3221 LET Z9=D3 3222 GOSUB 9400 3223 PRINT " ENEMY SHIP"; 3224 IF D3=1 THEN 3226 3225 PRINT "S"; 3226 PRINT "!!!" 3230 LET S=S-D3 3240 IF S>0 THEN 2940 3245 GOTO 6260 3250 REM *** MANUEVERING *** 3260 IF D[5] >= 0 THEN 3290 3270 PRINT "BALLAST CONTROLS ARE BEING REPAIRED." 3280 GOTO 880 3290 IF C>12 THEN 3320 3300 PRINT "THERE ARE NOT ENOUGH CREW TO WORK THE CONTROLS." 3310 GOTO 880 3320 PRINT "NEW DEPTH "; 3330 INPUT D1 3340 IF D1 >= 0 AND D1<3000 THEN 3370 3350 PRINT "HULL CRUSHED BY PRESSURE!!" 3360 GOTO 6180 3370 LET P=P-INT(ABS((D-D1)/2+.5)) 3380 PRINT "MANUEVER COMPLETE. POWER LOSS="; 3381 LET Z9=INT(ABS((D-D1)/2+.5)) 3382 GOSUB 9400 3383 PRINT 3390 LET D=D1 3400 GOTO 4690 3410 REM *** #5: STATUS / DAMAGE REPORT *** 3420 IF D[6] >= 0 OR L7<3 THEN 3450 3430 PRINT "NO REPORTS ARE ABLE TO GET THROUGH." 3440 GOTO 880 3450 IF C>3 THEN 3480 3460 PRINT "NO ONE LEFT TO GIVE THE REPORT." 3470 GOTO 880 3480 PRINT 3482 PRINT "# OF ENEMY SHIPS LEFT.......";S 3490 PRINT "# OF POWER UNITS LEFT.......";P 3500 PRINT "# OF TORPEDOS LEFT..........";T 3510 PRINT "# OF MISSILES LEFT..........";M 3520 PRINT "# OF CREWMEN LEFT...........";C 3525 PRINT "# OF RESUPPLIES LEFT........";D2 3530 PRINT "LBS. OF FUEL LEFT...........";F 3535 PRINT "DEPTH (IN FEET).............";D 3540 PRINT 3550 REM PRINT "ENTER 1 DAMAGE REPORT "; 3560 REM INPUT Z9 3570 REM IF Z9#1 THEN 3670 3580 PRINT "ITEM DAMAGE (+ GOOD, 0 NEUTRAL, - BAD)" 3590 PRINT "---- ------" 3620 PRINT "ENGINES ";D[1] 3621 PRINT "SONAR ";D[2] 3622 PRINT "TORPEDOS ";D[3] 3623 PRINT "MISSILES ";D[4] 3624 PRINT "MANUEVERING ";D[5] 3625 IF L7<3 THEN 3630 3626 PRINT "STATUS ";D[6] 3630 PRINT "HEADQUARTERS ";D[7] 3631 PRINT "SABOTAGE ";D[8] 3632 PRINT "CONVERTER ";D[9] 3670 PRINT 3690 GOTO 880 3700 REM *** #6: HEADQUARTERS *** 3710 IF D[7] >= 0 THEN 3740 3720 PRINT "HEADQUARTERS IS DAMAGED. UNABLE TO HELP." 3730 GOTO 880 3740 IF D2>0 THEN 3770 3750 PRINT "HEADQUARTERS IS DESERTED." 3760 GOTO 880 3770 IF SQR((S1-S3)^2+(S2-S4)^2) <= 2 AND D<51 THEN 3800 3780 PRINT "UNABLE TO COMPLY WITH DOCKING ORDERS." 3790 GOTO 880 3800 PRINT "DIVERS FROM HEAD QUARTERS BRING OUT SUPPLIES AND MEN." 3810 LET P=4000+(3-L7)*2000 3820 LET T=8+(3-L7)*4 3830 LET M=2+(3-L7)*2 3840 LET F=1500+(3-L7)*500 3850 LET C=25 3860 LET D2=D2-1 3870 GOTO 4690 3880 REM *** #7: SABOTAGE *** 3890 IF D[8] >= 0 THEN 3920 3900 PRINT "HATCHES INACCESSIBLE. NO SABOTAGES POSSIBLE." 3910 GOTO 880 3920 IF C>10 THEN 3950 3930 PRINT "NOT ENOUGH CREW TO GO ON MISSION." 3940 GOTO 880 3950 LET D3=D4=0 3960 FOR X=S1-2 TO S1+2 3970 FOR Y=S2-2 TO S2+2 3980 IF X<1 OR X>20 OR Y<1 OR Y>20 THEN 4010 3990 LET D3=D3+(A[X,Y]=3) 4000 LET D4=D4+(A[X,Y]=6) 4010 NEXT Y 4020 NEXT X 4030 IF D3#0 THEN 4060 4040 PRINT "NO SHIPS IN RANGE." 4050 GOTO 880 4060 PRINT "THERE "; 4061 IF D3=1 THEN 4064 4062 PRINT "ARE "; 4063 GOTO 4065 4064 PRINT "IS "; 4065 LET Z9=D3 4066 GOSUB 9400 4067 PRINT " SHIP"; 4068 IF D3=1 THEN 4070 4069 PRINT "S"; 4070 PRINT " IN RANGE." 4075 PRINT "HOW MANY MEN ARE GOING "; 4080 INPUT Q1 4090 IF C-Q1 >= 10 THEN 4120 4100 PRINT "YOU MUST LEAVE AT LEAST 10 MEN ON BOARD." 4110 GOTO 4075 4120 LET D5=INT(D3/Q1+.5) 4130 LET D6=0 4140 FOR X=S1-2 TO S1+2 4150 FOR Y=S2-2 TO S2+2 4160 IF D3/Q1>1-RND(1) AND RND(1)+D3/Q1<.9 THEN 4220 4170 IF A[X,Y]#3 THEN 4220 4180 LET D6=D6+1 4190 LET A[X,Y]=0 4200 LET S=S-1 4210 IF S=0 THEN 6260 4220 NEXT Y 4230 NEXT X 4240 LET Z9=D6 4241 GOSUB 9400 4242 IF D6=1 THEN 4245 4243 PRINT " SHIPS WERE"; 4244 GOTO 4246 4245 PRINT " SHIP WAS"; 4246 PRINT " DESTROYED." 4250 LET D6=D7=0 4260 FOR X=1 TO Q1 4270 LET D7=D7+(RND(1)>.6) 4280 NEXT X 4290 FOR X=1 TO Q1-D7 4300 LET D6=D6+(RND(1)<.15) 4310 NEXT X 4320 IF D4=0 THEN 4360 4330 PRINT "A SEA MONSTER SMELLS A MAN ON THE WAY BACK!!!" 4340 LET Z9=D7 4341 GOSUB 9400 4342 IF D7=1 THEN 4345 4343 PRINT " MEN WERE"; 4344 GOTO 4346 4345 PRINT " MAN WAS"; 4346 PRINT " EATEN!!" 4350 LET C=C-D7 4360 LET Z9=D6 4361 GOSUB 9400 4362 IF D6=1 THEN 4365 4363 PRINT " MEN WERE"; 4364 GOTO 4366 4365 PRINT " MAN WAS"; 4366 PRINT " LOST THROUGH ACCIDENTS." 4370 LET C=C-D6 4380 LET P=P-INT(10*Q1+RND(1)*10) 4390 GOTO 4690 4400 REM *** #8: POWER CONVERTER *** 4410 IF D[9] >= 0 THEN 4440 4420 PRINT "POWER CONVERTER IS DAMAGED." 4430 GOTO 880 4440 IF C>5 THEN 4470 4450 PRINT "NOT ENOUGH MEN TO WORK THE CONVERTER." 4460 GOTO 880 4470 PRINT "OPTION? (1=FUEL TO POWER, 2=POWER TO FUEL) "; 4480 INPUT O 4490 IF O=1 THEN 4510 4491 IF O=2 THEN 4580 4500 GOTO 4470 4510 REM *** FUEL TO POWER CONVERSION *** 4520 PRINT "FUEL AVAILABLE="; 4521 LET Z9=F 4522 GOSUB 9400 4523 PRINT " CONVERT "; 4530 INPUT C1 4540 IF C1>F OR C1<0 THEN 4520 4550 LET F=F-C1 4560 LET P=P+INT(C1/3) 4570 GOTO 4640 4580 REM *** POWER TO FUEL CONVERSION *** 4590 PRINT "POWER AVAILABLE="; 4591 LET Z9=P-1 4592 GOSUB 9400 4593 PRINT " CONVERT "; 4600 INPUT C1 4610 IF C1>P-1 OR C1<0 THEN 4590 4620 LET P=P-C1 4630 LET F=F+INT(C1*3) 4640 PRINT "CONVERSION COMPLETE. POWER="; 4641 LET Z9=P 4642 GOSUB 9400 4643 PRINT " FUEL="; 4644 LET Z9=F 4645 GOSUB 9400 4646 PRINT 4650 GOTO 4690 4660 REM *** #9: SURRENDER *** 4670 PRINT "COWARD!! YOU'RE NOT VERY PATRIOTIC!!!" 4680 GOTO 6180 4690 REM *** RETALIATION SECTION *** 4700 LET Q=0 4710 FOR X=S1-4 TO S1+4 4720 FOR Y=S2-4 TO S2+4 4730 IF X<1 OR X>20 OR Y<1 OR Y>20 THEN 4760 4740 IF A[X,Y]#3 THEN 4760 4750 LET Q=Q+(RND(1)/SQR((S1-X)^2+(S2-Y)^2)) 4760 NEXT Y 4770 NEXT X 4780 IF Q THEN 4810 4790 PRINT "NO SHIPS IN RANGE TO DEPTH CHARGE YOU!!" 4800 GOTO 5210 4810 PRINT "DEPTH CHARGES OFF "; 4820 IF RND(1)>.5 THEN 4850 4830 PRINT "PORT SIDE!!!" 4840 GOTO 4860 4850 PRINT "STARBOARD SIDE!!!" 4860 IF Q>.13 OR RND(1)>.92 THEN 4890 4870 PRINT "NO REAL DAMAGE SUSTAINED." 4880 GOTO 5210 4890 IF Q>.36 OR RND(1)>.96 THEN 4940 4900 PRINT "LIGHT, SUPERFICIAL DAMAGE." 4910 LET P=P-50 4920 LET D[INT(RND(1)*9)+1]=-RND(1)*2 4930 GOTO 5210 4940 IF Q>.6 OR RND(1)>.975 THEN 5020 4950 PRINT "MODERATE DAMAGE. REPAIRS NEEDED." 4960 LET P=P-75+INT(RND(1)*30) 4970 FOR Y=1 TO 2 4980 LET X=INT(RND(1)*9)+1 4990 LET D[X]=D[X]-RND(1)*8 5000 NEXT Y 5010 GOTO 5210 5020 IF Q>.9 OR RND(1)>.983 THEN 5100 5030 PRINT "HEAVY DAMAGE!! REPAIRS NEEDED IMMEDIATELY!!!" 5040 LET P=P-(200+INT(RND(1)*76)) 5050 FOR X=1 TO 4+INT(RND(1)*2) 5060 LET Y=INT(RND(1)*9)+1 5070 LET D[Y]=D[Y]-RND(1)*11 5080 NEXT X 5090 GOTO 5210 5100 PRINT "DAMAGE CRITICAL!!!! WE NEED HELP!!!" 5105 REM CODED MESSAGE STUFF REMOVED, REP'D WITH CHANCE 5110 IF RND(1)<.35*(L7/3) THEN 5190 5170 PRINT "HELP ARRIVES IN TIME TO SAVE YOU!!!" 5180 GOTO 5040 5190 PRINT "MESSAGE GARBLED...NO HELP ARRIVES!!!" 5200 GOTO 6180 5210 REM *** CHECK FOR TOO MUCH DAMAGE *** 5220 IF D[1] >= 0 OR D[3] >= 0 OR D[4] >= 0 THEN 5260 5222 IF D[5] >= 0 OR D[6] >= 0 OR D[7] >= 0 THEN 5260 5230 IF D[8] >= 0 OR D[9] >= 0 THEN 5260 5240 PRINT "DAMAGE TOO MUCH!!! YOU'RE SUNK!!" 5250 GOTO 6180 5260 REM *** MOVE SHIPS / SEA MONSTERS *** 5270 PRINT 5271 PRINT "---*** RESULT OF LAST ENEMY MANUEVER ***---" 5280 FOR X=1 TO 20 5290 FOR Y=1 TO 20 5300 IF A[X,Y]#3 THEN 5690 5310 REM *** MOVE A SHIP *** 5320 GOTO 5460 5420 LET Z9=A[X+W,Y+V] 5421 IF Z9=0 THEN 5430 5422 IF Z9=1 THEN 5460 5423 IF Z9=2 THEN 5530 5424 IF Z9=3 THEN 5460 5425 IF Z9=4 THEN 5560 5426 IF Z9=5 THEN 5600 5427 IF Z9=6 THEN 5650 5430 LET A[X+W,Y+V]=3 5440 LET A[X,Y]=0 5450 GOTO 6000 5460 REM *** CHANGE DIRECTION *** 5470 RESTORE 5480 FOR X0=1 TO INT(RND(1)*8)+1 5490 READ W,V 5500 NEXT X0 5510 IF X+W<1 OR X+W>20 OR Y+V<1 OR Y+V>20 THEN 5470 5520 GOTO 5420 5530 IF D>50 THEN 5460 5540 PRINT "*** YOU'VE BEEN RAMMED BY A SHIP!!! ***" 5550 GOTO 6180 5560 IF RND(1)<.15 THEN 5460 5570 PRINT "*** YOUR HEADQUARTERS WAS RAMMED!!! ***" 5580 LET S3=S4=D2=A[X+W,Y+V]=0 5590 GOTO 5620 5600 IF RND(1)<.7 THEN 5460 5610 PRINT "*** SHIP DESTROYED BY A MINE!!! ***" 5620 LET S=S-1 5630 IF S#0 THEN 5440 5640 GOTO 6260 5650 IF RND(1)<.8 THEN 5460 5660 PRINT "*** SHIP EATEN BY A SEA MONSTER!! ***" 5670 LET S=S-1 5680 GOTO 5630 5690 REM *** MOVE A SEA MONSTER *** 5700 IF A[X,Y]#6 THEN 6000 5710 GOTO 5760 5720 LET Z9=A[X+M1,Y+M2] 5721 IF Z9=0 THEN 5730 5722 IF Z9=1 THEN 5760 5723 IF Z9=2 THEN 5830 5724 IF Z9=3 THEN 5850 5725 IF Z9=4 THEN 5900 5726 IF Z9=5 THEN 5730 5727 IF Z9=6 THEN 5930 5730 LET A[X+M1,Y+M2]=6 5740 LET A[X,Y]=0 5750 GOTO 6000 5760 REM *** CHANGE DIRECTION *** 5770 RESTORE 5780 FOR X0=1 TO INT(RND(1)*8)+1 5790 READ M1,M2 5800 NEXT X0 5810 IF X+M1<1 OR X+M1>20 OR Y+M2<1 OR Y+M2>20 THEN 5760 5820 GOTO 5720 5830 PRINT "*** YOU'VE BEEN EATEN BY A SEA MONSTER!! ***" 5840 GOTO 6180 5850 IF RND(1)>.2 THEN 5760 5860 PRINT "*** SHIP EATEN BY A SEA MONSTER!! ***" 5870 LET S=S-1 5880 IF S#0 THEN 5730 5890 GOTO 6260 5900 PRINT "*** A SEA MONSTER ATE YOUR HEADQUARTERS!! ***" 5910 LET S3=S4=D2=0 5920 GOTO 5730 5930 IF RND(1)<.75 THEN 5760 5940 PRINT "*** A SEA MONSTER FIGHT!!! "; 5950 IF RND(1)<.8 THEN 5980 5960 PRINT "AND ONE DIES!! ***" 5970 GOTO 5730 5980 PRINT "IT'S A TIE!! ***" 5990 GOTO 5760 6000 NEXT Y 6010 NEXT X 6030 FOR Y=1 TO 9 6040 LET X=INT(RND(1)*9)+1 6050 LET Z9=RND(1)+(2+RND(1)*2) 6051 LET Z9=Z9*(1+((D<51) OR (D>2000)))*(D[X]<3) 6052 LET D[X]=D[X]+Z9 6060 NEXT Y 6065 IF M7 THEN 1790 6070 GOTO 880 6080 REM *** GOSUB FOR COURSE / DIRECTION *** 6090 DATA -1,0,-1,1,0,1,1,1,1,0,1,-1,0,-1,-1,-1 6100 PRINT "COURSE (1-8) "; 6110 INPUT C1 6115 IF C1=0 THEN 6170 6120 IF C1<1 OR C1>8 THEN 6100 6130 RESTORE 6140 FOR Z9=1 TO INT(C1+.5) 6150 READ X1,Y1 6160 NEXT Z9 6170 RETURN 6180 REM *** DESTROYED ? *** 6190 PRINT "THERE "; 6191 IF S=1 THEN 6194 6192 PRINT "ARE"; 6193 GOTO 6195 6194 PRINT "IS"; 6195 PRINT " STILL "; 6196 LET Z9=S 6197 GOSUB 9400 6198 PRINT " ENEMY SHIP"; 6199 IF S=1 THEN 6201 6200 PRINT "S"; 6201 PRINT " LEFT." 6205 PRINT "YOU WILL BE DEMOTED TO THE RANK OF DECK SCRUBBER!!!" 6210 PRINT "ENTER 1 FOR ANOTHER GAME "; 6220 INPUT Z9 6230 IF Z9#1 THEN 6250 6240 GOTO 310 6250 STOP 6260 PRINT "GOOD WORK!!! YOU GOT THEM ALL!!!" 6270 PRINT "PROMOTION AND COMMENDATIONS WILL BE GIVEN IMMEDIATELY!!!" 6280 GOTO 6210 6290 REM *** ISLAND DATA *** 6300 DATA 0,1,1,1,0,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,1 6310 DATA 1,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0 6320 REM *** TOGGLE AUTO MAP *** 6330 IF M7 THEN 6370 6340 LET M7=1 6350 PRINT "AUTOMAP ENABLED" 6360 GOTO 880 6370 LET M7=0 6380 PRINT "AUTOMAP DISABLED" 6390 GOTO 880 6400 REM *** INSTRUCTIONS *** 6405 PRINT 6410 PRINT "MAP SYMBOLS..." 6420 PRINT "*** DRY LAND" 6430 PRINT "(X) YOUR SUBMARINE" 6440 PRINT "!H! YOUR HEADQUARTERS" 6450 PRINT "\S/ ENEMY SHIP" 6460 PRINT "-#- SEA MONSTER" 6470 PRINT " $ UNDERWATER MINE" 6480 PRINT " . UNKNOWN" 6500 PRINT "DIRECTIONS..." 6510 PRINT "8 1 2" 6520 PRINT " \'/ WHEN NAVIGATING IT TAKES 100 UNITS OF" 6530 PRINT "7-*-3 POWER TO MOVE ONE POSITION. MISSILES" 6540 PRINT " /.\ REQUIRE 75 LBS FUEL FOR EACH POSITION." 6550 PRINT "6 5 4" 6555 PRINT 6560 GOTO 880 9395 REM *** INTEGER PRINT SUBROUTINE *** 9396 REM UP TO 6 DIGITS -999999 TO 999999, NO SPACES PRINTED 9397 REM NUMBER TO PRINT IN Z9, Z8 AND Z7 USED FOR TEMPS 9398 REM IF OUT OF RANGE JUST PRINTS 9399 REM IF NOT INTEGER JUST PRINTS 9400 IF ABS(Z9) <= 999999. THEN 9405 9401 IF Z9=INT(Z9) THEN 9405 9402 PRINT Z9 9403 RETURN 9405 IF Z9 >= 0 THEN 9420 9410 PRINT "-"; 9420 LET Z8=ABS(Z9) 9430 LET Z8=INT(Z8) 9440 IF Z8<10 THEN 9560 9450 IF Z8<100 THEN 9530 9460 IF Z8<1000 THEN 9500 9461 IF Z8<10000 THEN 9470 9462 IF Z8<100000. THEN 9466 9463 LET Z7=INT(Z8/100000.) 9464 LET Z8=Z8-Z7*100000. 9465 GOSUB 9700 9466 LET Z7=INT(Z8/10000) 9467 LET Z8=Z8-Z7*10000 9468 GOSUB 9700 9470 LET Z7=INT(Z8/1000) 9480 LET Z8=Z8-Z7*1000 9490 GOSUB 9700 9500 LET Z7=INT(Z8/100) 9510 LET Z8=Z8-Z7*100 9520 GOSUB 9700 9530 LET Z7=INT(Z8/10) 9540 LET Z8=Z8-Z7*10 9550 GOSUB 9700 9560 LET Z7=Z8 9570 GOSUB 9700 9580 RETURN 9695 REM DIGIT PRINT SUBROUTINE, DIGIT IN Z7 9700 IF Z7=1 THEN 9810 9710 IF Z7=2 THEN 9830 9720 IF Z7=3 THEN 9850 9730 IF Z7=4 THEN 9870 9740 IF Z7=5 THEN 9890 9750 IF Z7=6 THEN 9910 9760 IF Z7=7 THEN 9930 9770 IF Z7=8 THEN 9950 9780 IF Z7=9 THEN 9970 9790 PRINT "0"; 9800 RETURN 9810 PRINT "1"; 9820 RETURN 9830 PRINT "2"; 9840 RETURN 9850 PRINT "3"; 9860 RETURN 9870 PRINT "4"; 9880 RETURN 9890 PRINT "5"; 9900 RETURN 9910 PRINT "6"; 9920 RETURN 9930 PRINT "7"; 9940 RETURN 9950 PRINT "8"; 9960 RETURN 9970 PRINT "9"; 9980 RETURN 9999 END