1 SUB SUBRUN 2 COMMON (A1) !MAP ARRAYS & A(18,22), F(18,22) !CURRENT AND OLD POSITIONS & , D(9) !DAMAGE & , S(9),SD(9) !STATUS & , AZ(8) !AZIMUTH INFO 3 COMMON (A2) !VARIABLES AND COUNTERS & IND !FUNCTION INDICATOR & , Z1,ZOLD !TURN COUNTER & , P,POLD !POWER & , D,DOLD !DEPTH & , S1,S2 !SUBMARINE COORDINATES & , S3,S4, S5,S6 !HEADQUARTERS COORDINATES & , Q5 !DIFFICULTY & , Q6 !ISLAND CUTS COUNTER & , S,S7 !SHIP COUNTERS & , C !CREW & , F !FUEL & , D2 !REARM COUNTER & , T,M !TORPEDO & MISSLE COUNTERS & , D8,D9 !UNIT VECTOR FOR SHIPS & , M1,M2 !UNIT VECTOR FOR HAZARDS & , RNG !DEPTH CHARGE RANGE & , N$ !NAME 1550 E$=CHR$(155%) !ESCAPE 1570 REM ********************* COMMAND CONTROL ******************************* 1590 IF S<1 THEN IND=1\ GOTO 1600 1595 IF ZOLD=Z1 THEN 1610 !AUTO REFRESH ONLY AFTER TURN 1600 GO SUB 2610 !UPDATE MAP 1610 PRINT E$;"[13;74f"; 1620 GO SUB 8330 !PRINT SCORE 1630 PRINT E$;"[14;75f";\PRINT USING "####",Z1 !UPDATE TURNS 1640 ZOLD=Z1 1650 PRINT E$;"[15;75f";\PRINT USING "####",P; !REFRESH POWER 1670 PRINT E$;"[16;76f";\PRINT USING "###",D !REFRESH DEPTH 1700 IF D(6)<0 AND IND=0 THEN 1850 !SKIP REFRESH 1710 PRINT E$;"[2;76f";\PRINT USING "####";10*D(1); 1720 PRINT E$;"[3;76f";\PRINT USING "####";10*D(2); 1730 PRINT E$;"[4;76f";\PRINT USING "####";10*D(3); 1740 PRINT E$;"[5;76f";\PRINT USING "####";10*D(4) 1750 PRINT E$;"[6;76f";\PRINT USING "####";10*D(5); 1760 PRINT E$;"[7;76f";\PRINT USING "####";10*D(6); 1770 PRINT E$;"[8;76f";\PRINT USING "####";10*D(7); 1780 PRINT E$;"[9;76f";\PRINT USING "####";10*D(8); 1790 PRINT E$;"[10;76f";\PRINT USING "####";10*D(9) 1800 IF SD(1)<>S THEN PRINT E$;"[2;60f";\PRINT USING "##";S;\SD(1)=S 1810 IF SD(2)<>T THEN PRINT E$;"[3;60f";\PRINT USING "##";T;\SD(2)=T 1820 IF SD(3)<>M THEN PRINT E$;"[4;61f";\PRINT USING "#";M;\SD(3)=M 1830 IF SD(4)<>C THEN PRINT E$;"[5;60f";\PRINT USING "##";C;\SD(4)=C 1840 IF SD(5)<>F THEN PRINT E$;"[6;58f";\PRINT USING "####";F;\SD(5)=F 1845 IF IND=1 THEN 9065 !END OF GAME 1850 IF P<=0 THEN GOTO 2540 1860 PRINT E$;"[18;67fORDERS";UL$; 1870 INPUT O$\IF ASCII(O$)<48 OR ASCII(O$)>57 THEN 1895 1875 PRINT L$ 1880 PRINT E$;"[18;67f";E$;"[J" !ERASE ORDERS & SCROLLING REGION 1890 ON (ASCII(O$)-47)GOTO 1910,2570,3230,3830,4520,4710,4830,5040,5670,6010 1895 IND=2 !REQUEST FOR OPS MANUAL 1896 GOTO 9065 !RETURN TO MAIN PROGRAM 1910 REM ******************** #0: NAVAGATION ************************** 1930 IF D(1)<0 THEN PRINT " ENGINES UNDER REPAIR "\GOTO 1860 1960 IF C>8 THEN 2000 !NEED 8 CREW TO OPERATE ENGINES 1970 PRINT " NOT ENOUGH CREW TO MAN ENGINES ";N$ 1980 GOTO 1860 2000 GOSUB 8030 2010 IF C1=5 THEN 1860 2020 PRINT " POWER TO USE";UL$;\INPUT P1 2025 PRINT L$; 2030 IF P1<0 OR P1>P THEN 2020 2040 IF P1<=1000 THEN 2080 !POWER USEAGE MUST BE LESS THAN 1000 2050 IF RND <.43 THEN 2080 !57% CHANCE OF BLOW UP 2060 PRINT " ATOMIC PILE GOES SUPERCRITICAL ";N$ 2070 GOTO 8190 2080 X=S1 2090 Y=S2 2100 Q1=1 2110 FOR X2=1 TO INT(P1/100+.5) 2120 IF X+X1>0 AND X+X1<19 AND Y+Y1>0 AND Y+Y1<23 THEN 2150 2130 PRINT " YOU CAN'T LEAVE THE AREA ";N$ 2140 GOTO 2210 2150 ON A(X+X1,Y+Y1)+1 GOTO 2160,2200,2160,2270,2320,2350,2370 2160 X=X+X1 2170 Y=Y+Y1 2180 P=P-100 2190 GOTO 2400 2200 PRINT " YOU ALMOST RAN AGROUND ";N$ 2210 A(S1,S2)=0 2220 IF A(X,Y)=3 THEN PRINT "ONE DESTROYER LEAVES FOR REARMING."\S=S-1 2230 A(X,Y)=2 2240 S1=X 2250 S2=Y 2260 GOTO 6190 2270 IF D>50 THEN 2160 !IF DEPTH IS GREATER THAN 50 FT MISS SHIP 2280 PRINT " YOU RAMMED A SHIP!!! YOU'RE BOTH SINKING ";N$ 2290 S=S-1 !SUBTRACT ONE SHIP 2310 GOTO 8190 2320 IF D>50 THEN 2160 !IF DEPTH GREATER THAN 50 FT MISS HDQTRS 2330 PRINT " YOU RAMMED YOUR HEADQUARTERS!! YOU'RE SINKING!!" 2340 GOTO 8190 2350 PRINT " YOU'VE BEEN BLOWN UP BY A MINE ";N$ 2360 GOTO 8190 2370 IF RND>.75 THEN 2160 !75% THAT A HAZARD ATE YOU 2380 GOTO 8730 2400 REM ****************** CHECK FOR NEARBY HAZARDS ***************** 2420 FOR X3=X-1 TO X+1 2430 FOR Y3=Y-1 TO Y+1 2440 IF X3<1 OR X3>18 OR Y3<1 OR Y3>22 THEN 2500 2450 IF A(X3,Y3)<>6 THEN 2500 2460 IF RND<.05 THEN 8730 !~10% CHANCE HAZARD GOT YOU 2470 IF Q1=0 THEN 2500 2480 PRINT " YOU JUST MISSED AN ENEMY SUB, ";N$ 2490 Q1=0 2500 NEXT Y3 2510 NEXT X3 2520 NEXT X2 2530 IF P>0 THEN 2210 !IF POWER IS GONE, END GAM 2540 PRINT E$;"[20;1f ATOMIC PILE HAS GONE DEAD!!! SUB SINKS, CREW SUFFOCATES" 2550 GOTO 8190 2570 REM *********************** #1: SONAR ******************************** 2590 GO SUB 2610 2600 GOTO 1610 2610 IF IND=1 THEN 2720 !PRINT MAP FOR END GAME 2615 IF D(2)>=0 THEN 2640 !DAMAGE CHECK 2620 PRINT " SONAR UNDER REPAIR ";N$ 2630 RETURN 2640 IF C>5 THEN 2690 !NEED 5 CREW TO WORK SONAR 2650 PRINT " NOT ENOUGH CREW TO WORK SONAR ";N$ 2660 RETURN 2680 REM ******************************* PRINT OUT MAP ********************* 2690 REM #= LAND S= SUB E= SHIP H= HDQTRS m= MINE .= HAZARD *= TORP TRACK 2710 DATA " ","#","S","E","H","m"," ","E"," " 2720 PRINT E$;"[1;1f";\Y9=0 !PRINT COUNTER 2730 FOR X=1 TO 18 2740 FOR Y=1 TO 22 2750 A=A(X,Y) 2760 IF D<51 AND RND<.23 AND(A=0 OR A>2) THEN F(X,Y)=-1\GOTO 2830 2770 IF RND<.15 AND A>2 THEN F(X,Y)=-1\GOTO 2830 !UNKNOWN TARGET 2780 IF A=6 AND SQR((X-S1)*(X-S1)+(Y-S2)*(Y-S2))<6 THEN A$="."\GOTO 2890 2790 IF A=F(X,Y) AND IND<>3 THEN 2920 !ALREADY PRINTED 2800 IF A<>0 THEN 2850 2810 IF X<>1 AND X<>18 AND Y<>1 AND Y<>22 THEN 2850 2820 F(X,Y)=0 2830 A$="." 2840 GOTO 2900 2850 RESTORE 2860 FOR Z=1 TO A+1 2870 READ A$ 2880 NEXT Z 2890 F(X,Y)=A 2900 IF IND=3 THEN PRINT " ";A$;\GOTO 2920 2905 PRINT E$+"["+NUM1$(X)+";"+NUM1$(2*Y)+"f";A$; 2910 Y9=Y9+1\IF Y9>8 THEN PRINT\Y9=0 !PRINT BUFFER REFRESH 2920 NEXT Y 2930 IF IND=3 THEN PRINT 2940 NEXT X 2945 PRINT\IF IND=3 THEN IND=0 !FIRST TIME THROUGH 2950 P=P-5 2970 REM ************************* DIRECTIONAL INFORMATION ************** 2990 IF ZOLD=Z1 THEN RETURN !REFRESH AFTER TURN ONLY 3000 RESTORE 3010 FOR X=1 TO 9\READ A9$\NEXT X 3020 FOR X=1 TO 8 !LOOK IN 8 DIRECTIONS 3030 READ X1,Y1 3040 X3=0 3050 IF AZ(X)=1THEN AZ(X)=0\PRINT E$+"["+NUM1$(X+8)+";50f "!ERASE 3060 PRINT E$+"["+NUM1$(X+8)+";50f"; 3070 FOR X4=1 TO 21 !LOOK LENGTH OF ? 3080 IF S1+X1*X4<1 OR S1+X1*X4>18 OR S2+Y1*X4<1 OR S2+Y1*X4>22 THEN 3140 3090 IF A(S1+X1*X4,S2+Y1*X4)<>3 THEN 3130 3100 IF X3=4 THEN 3130 !MAXIMUM OF 4 RANGES 3110 X3=X3+1 3120 B(X3)=X4 3130 NEXT X4 3140 IF X3=0 THEN 3200 3150 FOR X4=1 TO X3 3160 PRINT B(X4); 3170 NEXT X4 3180 AZ(X)=1 !ERASE FLAG 3190 PRINT 3200 NEXT X 3210 RETURN 3230 REM ******************* #2: TORPEDO CONTROL *************************** 3250 IF D(3)>=0 THEN 3280 !DAMAGE CHECK 3260 PRINT " TORPEDO TUBES UNDER REPAIR ";N$ 3270 GOTO 1860 3280 IF C>=10 THEN 3310 !NEED 10 CREW TO FIRE TORPEDO 3290 PRINT " NOT ENOUGH CREW TO FIRE TORPEDO ";N$ 3300 GOTO 1860 3310 IF T>0 THEN 3340 !TORPEDO COUNT 3320 PRINT " NO TORPEDOS LEFT ";N$ 3330 GOTO 1860 3340 GOSUB 8030 3350 IF C1=5 THEN 1860 3360 IF D<200 THEN 3400 !CHECK DEPTH FOR LESS THAN 200 ft 3370 IF RND>.85 THEN 3400 !15% CHANCE OF BLOWING UP 3380 PRINT " PRESSURE IMPLODES SUB UPON FIRING...YOU'RE CRUSHED!!" 3390 GOTO 8190 3400 X=S1 3410 Y=S2 3420 FOR X2=1 TO INT(7+5*(-(D>50))-RND*4+.5) 3425 X=X+X1 3426 Y=Y+Y1 3430 IF X>0 AND X<19 AND Y>0 AND Y<23 THEN 3490 3440 PRINT E$;"[21;1f TORPEDO OUT OF SONAR RANGE ";N$ 3450 T=T-1 !SUBTRACT ONE TORPEDO 3460 P=P-50 !SUBTRACT 50 POWER UNITS USED TO FIRE TORPEDO 3465 Q5=Q5*.995 !REDUCE SCORE BY 0.5% 3470 IF P>0 THEN 6190 3480 GOTO 2540 3490 IF A(X,Y)>0 THEN 3620 !NEED EXPLOSION 3530 SLEEP 1% 3540 PRINT "" 3550 PRINT E$;"[";NUM1$(X);";";NUM1$(2*Y);"f*";!PRINT TRACK 3560 F(X,Y)=-1 3600 GOTO 3790 3610 PRINT "....**#@*!" !HIT AN ISLAND 3615 GOTO 3450 3620 A=A(X,Y) \ A(X,Y)=0 3630 PRINT E$;"[";NUM1$(X);";";NUM1$(2*(Y));"f";!POSITION EXPLOSION 3640 PRINT E$;"[5;1mX";E$;"[0m"; !EXPLOSION EFFECT 3650 F(X,Y)=-1 !FOR EXPLOSION ERASE 3660 PRINT E$;"[21;1f"; !RETURN TO SCROLL REGION 3665 SLEEP 1% 3667 ON A GOTO 3610,3790,3680,3720,3760,3780 3680 PRINT " KABOOM !!" 3690 S=S-1 !SUBTRACT ONE SHIP 3700 GOTO 3450 3720 PRINT " KABOOM !!!" !HIT HEADQUARTERS 3740 X3=X\Y3=Y\GOSUB 8015 !REMOVE HEADQUARTERS 3750 GOTO 3450 3760 PRINT " BLAM!!" 3770 GOTO 3450 3780 PRINT " BOOM!"\Q5=Q5*1.1\GOTO 3450 !GOT ENEMY SUB 3790 NEXT X2 3800 PRINT E$;"[21;1f DUD" 3810 GOTO 3450 3830 REM ************** #3: MISSLE CONTROL *************************** 3850 IF D(4)>=0 THEN 3880 !DAMAGE STATUS 3860 PRINT " MISSLE SILOS UNDER REPAIR ";N$ 3870 GOTO 1860 3880 IF C>23 THEN 3910 !NEED CREW OF 23 TO FIRE MISSLE 3890 PRINT "MISSLE STATION IS UNMANNED, SIR" 3900 GOTO 1860 3910 IF M<>0 THEN 3940 !MISSLE COUNT 3920 PRINT " NO MISSLES LEFT ";N$ 3930 GOTO 1860 3940 IF D>50 AND D<200 THEN 4010 !FIRE ONLY AT DEPTH BETWEEN 50 & 200 ft 3950 PRINT " RECOMMENDED THAT YOU DO NOT FIRE AT THIS DEPTH...PROCEED"; 3960 PRINT UL$;\INPUT A$\PRINT L$; 3970 IF LEFT$(A$,1)="Y" THEN 3980 ELSE 1860 3980 IF RND<.85 THEN 4010 !15% CHANCE OF BLOWUP 3990 PRINT " MISSLE EXPLODED UPON FIRING ";N$ 4000 GOTO 8190 4010 GOSUB 8030 4020 IF C1=5 THEN 1860 4030 PRINT " FUEL (LBS)";UL$; 4040 INPUT F1\PRINT L$; 4050 IF F1=0 THEN 1860 !ABORT MISSLE LAUNCH 4060 IF F1>0 AND F1<=F THEN 4080 4070 PRINT "YOU DONT HAVE THAT MUCH FUEL"\GOTO 4030 4080 F2=INT(F1/75+.5) 4090 IF S1+X1*F2>0 AND S1+X1*F2<19 AND S2+Y1*F2>0 AND S2+Y1*F2<23 THEN 4150 4100 PRINT " MISSLE OUT OF RANGE ";N$ 4110 M=M-1 !SUBTRACT ONE MISSLE 4120 F=F-F1 !SUBTRACT FUEL USED 4130 P=P-200 !SUBTRACT 200 OF POWER USED TO FIRE MISSLE 4135 Q5=Q5*.99 !REDUCE SCORE BY 1% 4140 GOTO 3470 4150 D3=0\D4=0\D5=0\E=0 4160 FOR X=S1+X1*F2-1 TO S1+X1*F2+1 4170 FOR Y=S2+Y1*F2-1 TO S2+Y1*F2+1 4180 IF X<1 OR X>18 OR Y<1 OR Y>22 THEN 4330 4190 PRINT E$+"["+NUM1$(X)+";"+NUM1$(2*Y)+"fX"\F(X,Y)=-1 !MISSLE EXPLOSION 4200 D3=D3-(A(X,Y)=3) 4210 D4=D4-(A(X,Y)=6) 4220 D5=D5-(A(X,Y)=5) 4240 IF A(X,Y)<>4 THEN 4300 4250 PRINT E$;"[19;1f"; 4260 PRINT " YOU'VE DESTROYED YOUR HEADQUARTERS ";N$ 4270 X3=X\Y3=Y\GOSUB 8015 !REMOVE HEADQUARTERS 4300 IF A(X,Y)=2 THEN E=1 4320 A(X,Y)=0 4330 NEXT Y 4340 NEXT X 4350 PRINT E$;"[20;1f"; 4380 L1=0 4390 IF D5=1 THEN PRINT " YOU DESTROYED A MINE ";\L1=L1+1 4400 IF D5>1 THEN PRINT " YOU DESTROYED";D5;"MINES ";\L1=L1+1 4410 IF D4=1 THEN PRINT " YOU SANK ONE ENEMY SUB ";\L1=L1+1 4420 IF D4>1 THEN PRINT " YOU SANK";D4;" ENEMY SUBS";\L1=L1+1 4425 Q5=Q5*(1+.1*D4) !CREDIT FOR SINKING SUBS 4430 IF L1=2 THEN PRINT N$ 4440 IF D3=1 THEN PRINT " YOU SANK ONE DESTROYER ";N$ 4450 IF D3>1 THEN PRINT " YOU DESTROYED";D3;"ENEMY SHIPS ";N$ 4460 IF D3=0 AND L1=1 THEN PRINT N$ 4465 SLEEP 2% 4470 S=S-D3 !SUBTRACT SHIPS FROM COUNT 4480 IF E=1 THEN PRINT " YOU DESTROYED YOURSELF, ";N$\GOTO 8190 4500 GOTO 4110 4520 REM ***************** #4: MANUEVERING ********************************** 4540 IF D(5)>=0 THEN 4570 !DAMAGE CHECK 4550 PRINT " BALLAST CONTROLS UNDER REPAIR ";N$ 4560 GOTO 1860 4570 IF C>12 THEN 4600 !NEED CREW OF 12 TO MANUEVER 4580 PRINT " THERE IS NOT ENOUGH CREW TO WORK THE CONTROLS ";N$ 4590 GOTO 1860 4600 PRINT " NEW DEPTH";UL$; 4610 INPUT D1\PRINT L$; 4620 IF D1<30 THEN D1=30 !MINIMUM DEPTH = 30 4630 IF D1<300 THEN 4660 !IF BELOW 300 ft KILL SUB 4640 PRINT " HULL CRUSHED BY PRESSURE ";N$ 4650 GOTO 8190 4660 P=P-INT(ABS((D-D1)/2+.5)) !SUBTRACT POWER USED 4680 D=D1 !STORE NEW DEPTH 4690 GOTO 6190 4710 REM *************** #5: STATUS - DAMAGE REPORT ************************ 4730 IF D(6)>=0 THEN 4760 !DAMAGE STATUS 4740 PRINT " NO REPORTS ARE ABLE TO GET THROUGH ";N$ 4750 GOTO 1860 4760 IF C>3 THEN 4790 !NEED CREW OF 3 TO REPORT 4770 PRINT " NO ONE LEFT TO GIVE THE REPORT ";N$ 4780 GOTO 1860 4790 PRINT "STATUS DISPLAY IS CURRENT"\GOTO 1860 4830 REM *************** #6: HEADQUARTERS *********************************** 4850 IF D(7)>=0 THEN 4880 !DAMAGE CHECK 4860 PRINT " HEADQUARTERS DAMAGED. UNABLE TO HELP ";N$; 4870 GOTO 1860 4880 IF D2<>0 THEN 4910 !USED 2 TIMES 4890 PRINT " HEADQUARTERS DESERTED ";N$; 4900 GOTO 1860 4910 IF SQR((S1-S3)^2+(S2-S4)^2)<2 AND D<51 THEN 4950 !CHECK DEPTH OF SUB 4920 IF SQR((S1-S5)^2+(S2-S6)^2)<2 AND D<51 THEN 4950 !CHECK DEPTH OF SUB 4930 PRINT " YOU WILL NOT BE ALLOWED TO DOCK ";N$ 4940 GOTO 1860 4950 PRINT " HEADQUARTERS DIVERS BRING OUT SUPPLIES AND MEN" 4960 P=4000 !REPLENISH POWER 4970 T=8 !REPLENISH TORPEDOS 4980 M=2 !REPLENISH MISSLES 4990 F=1500 !REPLENISH FUEL 5000 C=25 !REPLENISH CREW 5010 D2=D2-1 !SUBTRACT USE OF HDQTR 5020 GOTO 6190 5040 REM ****************** #7: SABOTAGE *********************************** 5060 IF D(8)>=0 THEN 5090 !DAMAGE CHECK 5070 PRINT " NO SABOTAGES POSSIBLE, ";N$ 5080 GOTO 1860 5090 IF C>10 THEN 5120 !NEED CREW OF 10 TO PERFORM SABOTAGE 5100 PRINT " NOT ENOUGH CREW TO GO ON A MISSION ";N$ 5110 GOTO 1860 5120 D3=0\D4=0 5130 FOR X=S1-2 TO S1+2 5140 FOR Y=S2-2 TO S2+2 5150 IF X<1 OR X>18 OR Y<1 OR Y>22 THEN 5180 5160 D3=D3-(A(X,Y)=3) 5170 D4=D4-(A(X,Y)=6) 5180 NEXT Y 5190 NEXT X 5200 IF D3<>0 THEN 5230 5210 PRINT " NO SHIPS IN RANGE ";N$ 5220 GOTO 1860 5230 IF D3=1 THEN PRINT "THERE IS ONE ENEMY SHIP IN RANGE, SIR" 5240 IF D3>1 THEN PRINT " THERE ARE";D3;"SHIPS IN RANGE ";N$ 5250 PRINT " HOW MANY MEN ARE GOING ";N$;UL$; 5260 INPUT Q1\PRINT L$; 5270 IF C-Q1>=10 THEN 5300 !CHECK THAT 10 CREW ARE LEFT ON BOARD 5280 PRINT " YOU MUST LEAVE AT LEAST 10 MEN ON BOARD ";N$ 5290 GOTO 5250 5300 D6=0 5305 IF Q1=0 THEN 5430 5307 IF Q1<0 THEN Q1=-Q1 5310 D5=D3/Q1 5320 FOR X=S1-2 TO S1+2 5330 FOR Y=S2-2 TO S2+2 5340 IF X<1 OR X>18 OR Y<1 OR Y>22 THEN 5410 5350 IF D5>(RND*.7)THEN 5410 5360 IF A(X,Y)<>3 THEN 5410 5370 D6=D6+1 5380 A(X,Y)=0 5390 S=S-1 5410 NEXT Y 5420 NEXT X 5430 IF D6=0 THEN PRINT "SIR, THE ENEMY ESCAPED."; 5440 IF D6=1 THEN PRINT "ONE SHIP WAS BLOWN UP ";N$; 5450 IF D6>1 THEN PRINT D6;"SHIPS WERE DESTROYED ";N$; 5460 D6=0\D7=0 5470 FOR X=1 TO Q1 5480 D7=D7-(RND>.6) !40% CHANCE OF MEN COMING BACK 5490 NEXT X 5500 FOR X=1 TO Q1-D7 5510 D6=D6-(RND<.15) 5520 NEXT X 5530 IF D4=0 THEN D7=0 5540 IF D7=1 AND Q1=1 THEN PRINT " A SHARK ATTACKED THE FROGMAN, SIR" 5550 IF D7=1 AND Q1>1 THEN PRINT " A SHARK GOT ONE OF THE FROGMEN, SIR" 5560 IF D7>1 THEN PRINT " SHARKS ATE ";D7;"OF THE MEN, SIR!!" 5570 C=C-D7\Q5=Q5*(1-.004*(D7+D6)) !SUBTRACT MISSING CREW MEMBERS 5580 IF D6=1 AND Q1=1 THEN PRINT " YOUR FROGMAN WAS CAPTURED ";N$ 5590 IF D6=1 AND Q1>1 THEN PRINT " ONE OF THE FROGMEN WAS CAPTURED, SIR" 5600 IF D6>1 THEN PRINT D6;" MEN WERE LOST IN AN ACCIDENT SIR" 5610 C=C-D6 !SUBTRACT MISSING CREW MEMBERS 5620 P=P-INT(10*Q1+RND*10) !SUBTRACT POWER USED 5630 IF D6=0 AND D7=0 AND Q1=1 THEN PRINT " THE FROGMAN GOT BACK SAFELY" 5640 IF D6=0 AND D7=0 AND Q1>1THEN PRINT " ALL OF THE SABOTAGE TEAM RETURNED" 5650 GOTO 6190 5670 REM *********************** #8: POWER CONVERTER ************************ 5690 IF D(9)>=0 THEN 5720 !DAMAGE CHECK 5700 PRINT " POWER CONVERTER DAMAGED ";N$ 5710 GOTO 1860 5720 IF C>5 THEN 5750 !NEED CREW OF 5 TO DO WORK 5730 PRINT " NOT ENOUGH MEN TO WORK THE CONVERTER ";N$ 5740 GOTO 1860 5750 PRINT " OPTION? 1=FUEL TO POWER * 2=POWER TO FUEL";UL$; 5760 INPUT O\IF O<1 OR O>2 THEN PRINT "INPUT 1 OR 2 ONLY "\GOTO 5750 5765 PRINT L$; 5770 ON O GOTO 5800,5900 5800 REM *********** OPT 1 OF #8 FUEL TO POWER CONVERSION ******************* 5810 REM 1:3 CONVERSION 5830 PRINT " CONVERT";UL$; 5840 INPUT C1\PRINT L$; 5850 IF C1>F OR C1<0 THEN 5830 !CHECK FUEL QUANITY 5860 F=F-C1 !SUBTRACT CONVERSION 5870 P=P+INT(C1/3) !ADD CONVERSION 1:3 5880 GOTO 6190 5900 REM ************ OPT 2 OF #8 POWER TO FUEL CONVERSION ****************** 5910 REM 3:1 CONVERSION 5930 PRINT " CONVERT";UL$; 5940 INPUT C1\PRINT L$; 5950 IF C1>P-1 OR C1<0 THEN 5930 !CHECK POWER QUANITY 5960 P=P-C1 !SUBTRACT POWER CONVERTED 5970 F=F+INT(C1*3) !ADD CONVERTED 3:1 5990 GOTO 6190 6010 REM ******************** #9: EMERGENCY ********************************* 6020 REM OP 1= RUN QUIET FOR REPAIRS OP 2 = SURRENDER OP 3 = BLOW UP SUB 6030 REM OP 4= ABANDON SHIP OP 5= RETURN TO COMMANDS OP 6= REPAINT 6050 IF S7<22 THEN PRINT "OPT:1=WAIT 2=UNCLE 3=KILL 4=LEAVE 5=CMD 6=REPNT";UL$; 6060 IF S7>21 THEN PRINT "OPTION:";UL$; 6070 INPUT O$\PRINT L$; 6080 O=ASCII(O$)-48 6090 IF O<1 OR O>6 THEN PRINT " INPUT 1-6 ONLY "\GOTO 6050 6100 ON O GOTO 6170,6140,6130,6110,1860,6125 6110 PRINT E$;"#6ABANDON SHIP!" 6120 GOTO 8210 6125 IND=3\GOTO 9065 6130 X1=0\Y1=0\F2=0\GOTO 4150 6140 PRINT E$;"#3 COWARD!!" 6150 PRINT E$;"#4 COWARD!!" 6160 IND=5 !END OF GAME 6165 GOTO 9065 !THROW PLAYER OUT OF GAME 6170 PRINT " TIME PASSES....."\SLEEP 2%\IF D>99 THEN 6800 6190 REM ******************** RETALIATION SECTION *************************** 6210 Q=0 6220 FOR X=S1-RNG TO S1+RNG 6230 FOR Y=S2-RNG TO S2+RNG 6240 IF X<1 OR X>18 OR Y<1 OR Y>22 THEN 6270 6250 IF A(X,Y)<>3 THEN 6270 6260 Q=Q+(RND/SQR((S1-X)^2+(S2-Y)^2)) 6270 NEXT Y 6280 NEXT X 6290 IF Q<>0 THEN 6320 6300 PRINT " NO SHIPS IN RANGE TO DEPTH CHARGE YOU ";N$;"." 6310 GOTO 6800 6320 PRINT " DEPTH CHARGES SIR. "; 6370 IF Q>.13 OR RND>.92 THEN 6400 6380 PRINT " MINOR DAMAGE SUSTAINED ";N$ 6390 GOTO 6800 6400 IF Q>.36 OR RND>.96 THEN 6450 6410 PRINT " LIGHT, DAMAGE ";N$ 6420 P=P-50 6430 D(INT(RND*9)+1)=-RND*2 6440 GOTO 6800 6450 IF Q>.6 OR RND>.975 THEN 6530 6460 PRINT " MODERATE DAMAGE. REPAIRS NEEDED." 6470 P=P-75+INT(RND*30) 6480 FOR Y=1 TO 2 6490 X=INT(RND*9)+1 6500 D(X)=D(X)-RND*8 6510 NEXT Y 6520 GOTO 6800 6530 IF Q>.9 OR RND>.983 THEN 6610 6540 PRINT " EXTENSIVE DAMAGE ";N$ 6550 P=P-(200+INT(RND*76)) 6560 FOR X=1 TO 4+INT(RND*2) 6570 Y=INT(RND*9)+1 6580 D(Y)=D(Y)-RND*11 6590 NEXT X 6600 GOTO 6800 6610 PRINT " DAMAGE CRITICAL!!!! WE NEED HELP!!!" 6620 A$="VR@VU%XC4VPCR3FDR#A2QU@LQ7RHXYA81GDU@SSY6EDQIP;AEGOG@CNOTSI@OWMO" 6630 X=INT(RND*60)+1 6640 PRINT " SEND 'HELP' IN CODE. HERE IS THE 4 CHARACTER CODE:";MID$(A$,X,4); 6660 REM ******** TIME DELAY AND THEN ERASE THE CODE ************************ 6680 SLEEP 3% 6690 PRINT E$;"[4D"; 6700 PRINT " " 6710 SLEEP 8% 6715 PRINT UL$; 6720 INPUT " ENTER CODE";B$; 6730 PRINT L$ 6740 IF B$<>MID$(A$,X,4) THEN 6770 6750 PRINT " MESSAGE RECIEVED SIR, HELP ARRIVES IN TIME " 6760 GOTO 6550 6770 PRINT " MESSAGE GARBLED ";N$;"...NO HELP ARRIVES!" 6780 GOTO 8190 6800 REM **************** DAMAGE CHECK ************************************** 6810 REM DAMAGE CHECK 6830 Z1=Z1+1 !TURN COUNTER 6840 IF P<0 THEN 8190 6850 IF D(1)>=0 OR D(3)>=0 OR D(4)>=0 OR D(5)>=0 OR D(7)>=0 THEN 6910 6860 IF D(8)>=0 OR D(9)>=0 THEN 6910 6870 PRINT " COMPUTER REPORTS : DAMAGE IS TOO MUCH. COMPUTER SCUTTLES SUB" 6880 PRINT " COMPUTER REPORTS : NOTHING PERSONAL, SIR! " 6890 GOTO 8750 6910 REM ***************** MOVE SHIPS / HAZARDS ************************ 6930 FOR X=1 TO 18 6940 FOR Y=1 TO 22 6950 IF A(X,Y)<>3 THEN 7430 6970 REM ****************** MOVE A SHIP ************************************* 6990 X1=X+D8 7000 Y1=Y+D9 7010 IF X1<1 OR X1>18 OR Y1<1 OR Y1>22 THEN 7080 !OFF BOARD 7030 ON A(X1,Y1)+1 GOTO 7040,7080,7180,7210,7260,7320,7380,7210,7380 7040 A(X1,Y1)=7 7050 A(X,Y)=0 !REMOVE SHIP FROM MAP 7060 GOTO 7840 7080 REM ***************** CHANGE DIRECTION ********************************* 7100 RESTORE 7110 FOR Z=1 TO 9\READ A9$\NEXT Z 7120 FOR X0=1 TO INT(RND*8)+1 7130 READ D8,D9 7140 NEXT X0 7170 GOTO 6990 7180 IF RND>.95 THEN PRINT "SEAMAN QUISLING SCUTTLED THE SUB!"\GOTO 8190 7185 IF D>50 THEN 7080 !CHECK DEPTH 7190 PRINT " YOU'VE BEEN RAMMED BY A SHIP" 7200 GOTO 8190 7210 IF RND<.97 THEN 7080 7220 PRINT " TWO SHIPS RAMMED EACH OTHER" 7240 S=S-1 !SUBTRACT ONE SHIP 7250 GOTO 7340 7260 IF RND<.15 THEN 7080 7270 PRINT " YOUR HEADQUARTERS WAS SUNK BY GUNFIRE" 7280 X3=X\Y3=Y\GOSUB 8015 7310 GOTO 7040 7320 IF RND<.9 THEN 7080 7330 PRINT " ENEMY SHIP DESTROYED BY A MINE" 7340 A(X1,Y1)=0 !REMOVE OBJECT 7350 S=S-1 !SUBTRACT SHIP FROM COUNT 7360 GOTO 7050 !CHECK SHIP COUNT 7380 IF RND<.9 THEN 7080 7390 PRINT " ENEMY SHIP LOST IN A VIOLENT SQUALL" 7410 GOTO 7350 7430 REM ****************** MOVE A SEA MONSTER ****************************** 7450 IF A(X,Y)<>6 THEN 7840 7455 X1=X+M1\Y1=Y+M2 7460 IF X1<1 OR X1>18 OR Y1<1 OR Y1>22 THEN 7520 7470 ON A(X1,Y1)+1 GOTO 7480,7640,8730,7720,7770,7610,7480,7720,7820 7480 A(X1,Y1)=8 7490 A(X,Y)=0 7500 GOTO 7840 7520 REM ******************* CHANGE DIRECTION ****************************** 7540 RESTORE 7550 FOR Z=1 TO 9\READ A9$\NEXT Z 7560 FOR X0=1 TO INT(RND*8)+1 7570 READ M1,M2 7580 NEXT X0 7600 GOTO 7455 7610 PRINT " A MINE SWEEPER DECOMMISSIONED ONE OF YOUR MINES." 7620 GOTO 7480 7640 IF Q6<1 THEN 7520 7650 IF RND>.2 THEN GOTO 7520 !20% CHANCE OF HITTING ISLAND 7660 ON Q6 GOTO 7690,7670 7670 PRINT " TYPHOON HITS ISLAND, WIPES OUT A VILLAGE!" 7680 Q6=Q6-1\GOTO 7480 7690 PRINT " TSUNAMI WASHING ASHORE ERODES PART OF ISLAND" 7700 Q6=Q6-1\GOTO 7480 7710 GOTO 8190 7720 IF RND>.4 THEN 7520 7730 PRINT " ENEMY SHIP CAPSIZED IN A TYPHOON, SIR!! " 7740 S=S-1 !SUBTRACT SHIP FROM COUNT 7750 GOTO 7480 7770 PRINT " A ENEMY SUB TORPEDOED AND SUNK YOUR HEADQUARTERS ";N$ 7780 X3=X\Y3=Y\GOSUB 8015 7810 GOTO 7480 7820 IF RND<.75 THEN 7520 7830 GOTO 7480 7840 NEXT Y 7850 NEXT X 7860 FOR X=1 TO 18 7865 FOR Y= 1 TO 22 7870 IF A(X,Y)=8 THEN A(X,Y)=6 7875 IF A(X,Y)=7 THEN A(X,Y)=3 7880 NEXT Y 7890 NEXT X 7930 REM ***************** MAKE REPAIRS ************************************ 7940 IF (D(6)<0) THEN D(6)=D(6)/2 !FIX STATUS FAST 7950 FOR Y=1 TO 9 7960 X=INT(RND*9+1) 7970 D(X)=D(X)+(RND*(2+RND*2))*(1+(-(D<51) OR -(D>200)))*(-(D(X)<3)) 8000 NEXT Y 8010 GOTO 1570 8015 REM ************* REMOVE HEADQUARTERS ********************************* 8016 IF X3=S3 AND Y3=S4 THEN A(S3,S4)=0\S3=30\S4=30 8018 IF X3=S5 AND Y3=S6 THEN A(S5,S6)=0\S5=30\S6=30 8020 Q5=Q5*.95 !REDUCE SCORE BY 5% 8028 RETURN 8030 REM ************ GOSUB FOR COURSE - DIRECTION ************************** 8050 DATA 1,-1,1,0,1,1,0,-1,0,1,-1,-1,-1,0,-1,1 8060 PRINT " COURSE (1-9)";UL$; 8070 INPUT C1\PRINT L$; 8080 C2=C1 8090 IF C1=5 THEN 8170 8100 IF C1<1 OR C1>9 THEN 8060 8110 IF C1>5 THEN C2=C2-1 8120 RESTORE 8130 FOR X=1 TO 9\READ A9$\NEXT X 8140 FOR X9=1 TO INT(C2+.5) 8150 READ X1,Y1 8160 NEXT X9 8170 RETURN 8190 REM **************** END SUMMARY *************************************** 8210 IF S<1 THEN PRINT " GOOD SHOW ";N$;"!!! YOU GOT THEM ALL!!!" 8220 IF S=1 THEN PRINT " THERE IS STILL 1 ENEMY SHIP LEFT. " 8230 IF S>1 THEN PRINT " THERE ARE";S;"STILL LEFT." 8232 IND=1 8234 GOTO 1600 !RETURN TO MAIN PROGRAM 8330 REM *********************** SCORE ************************************** 8350 PRINT USING "#####",ABS(INT(Q5*(1-S/S7)*((S7/((Z1/3)+50))/10)*10)); 8360 RETURN ! SHIP/MINES SHIPS/TURNS REARM AT 1:4:9 8730 REM *********************** FATAL ACCIDENT ***************************** 8750 PRINT " REACTOR COMPARTMENT FLOODING!!!" 8760 P=INT(P/2)\D=INT(D*1.1+10) 8770 Z1=Z1+1\D(2)=D(2)-2 8790 GO SUB 2610 !UPDATE MAP 8800 PRINT E$;"[13;74f"; 8810 GO SUB 8330 !PRINT SCORE 8820 PRINT E$;"[14;75f";\PRINT USING "####",Z1 !UPDATE TURNS 8840 PRINT E$;"[15;75f";\PRINT USING "####",P; !REFRESH POWER 8860 PRINT E$;"[16;76f";\PRINT USING "###",D !REFRESH DEPTH 8870 PRINT 8890 IF D>300 THEN PRINT\GOTO 4640 !HULL CRUSHED 8900 IF P<0 THEN PRINT\GOTO 6840 !NO POWER LEFT 8910 PRINT E$;"[18;67fORDERS";UL$; 8920 INPUT O$\IF ASCII(O$)<48 OR ASCII(O$)>57 THEN 8910 8930 PRINT L$;E$;"[18;67f";E$;"[K" !ERASE ORDERS 8940 PRINT E$;"[19;1f";E$;"[J"; !ERASE SCROLLING REGION 8950 ON (ASCII(O$)-47) GOTO 8960,8970,8980,8990,9000,9010,9020,9030,9040,9050 8960 PRINT " ENGINES ARE FLOODED!"\GOTO 8760 !INPUT 0 8970 PRINT " SONAR DOES NOT RESPOND!"\GOTO 8760 !INPUT 1 8980 PRINT " TORPEDO CONTROL INACTIVE!"\GOTO 8760 !INPUT 2 8990 PRINT " MISSLE CONTROL DISABLED!"\GOTO 8760 !INPUT 3 9000 PRINT " MANUEVERING FLOODING!!"\GOTO 8760 !INPUT 4 9010 PRINT " STATUS & DAMAGE CONTROL DAMAGED!"\GOTO 8760 !INPUT 5 9020 PRINT " HEADQUARTERS DOES NOT RESPOND!"\GOTO 8760 !INPUT 6 9030 PRINT " HATCHES INACCESSIBLE!"\GOTO 8760 !INPUT 7 9040 PRINT " POWER CONVERTER IS DAMAGED!"\GOTO 8760 !INPUT 8 9050 GOTO 6110 9065 SUBEND