10 REM UBOAT.BS5 20 REM by Ralph Hopkins; original: 4/25/2003 90 LET U=INT(400*RND(0))+100 100 DIM B(50),E(50),G(50),H(50),K(50),L(50) 110 DIM R(50),S(50),T(50),W(50) 150 Z9=INT(RND(0)*7)+3: L=0: M9=1: W=0: PRINT 160 FOR X=1 TO 12: K(Z)=0: NEXT 210 PRINT TAB(23);"P" 220 PRINT TAB(23);"I" 225 PRINT TAB(23);"I" 230 PRINT TAB(21);"*****" 240 PRINT TAB(20);"*";U;" *" 250 PRINT TAB(15);"-= ********" 260 PRINT "===========================================...." 270 PRINT " === C ==== === U - B O A T ="; 275 PRINT "================...." 280 PRINT " === C ============================="; 285 PRINT "=======================..." 300 DATA 0,1,0,1,1,1,2,25,26,5 310 READ A,C,K,M,N,Q1,S,S1,T,Z 320 O=INT(RND(0)*20.5)+1 330 D1=INT(RND(0)*15)+15 400 REM ----- SHIP TYPE NUMBERS T( ) ------ 410 DATA 8,2,46,47,48,50,49,12,3,49 420 DATA 3,4,13,14,15,1,16,6,17,18 430 DATA 19,1,20,10,21,21,23,3,7,24 440 DATA 12,25,1,9,31,6,26,3,32,33 450 DATA 34,11,28,5,27,29,35,48,2,30 490 FOR X=1 TO 50: READ T(X): H(X)=1: G(X)=0: NEXT 500 PRINT : PRINT " DO YOU WANT THE INSTRUCTIONS FOR U-BOAT ?" 520 PRINT : IF RND(0)>.6 THEN Z=Z+INT(RND(0)*15) 540 INPUT "#ALL# INPUT ANSWERS ARE NUMBERS (1=YES 0=NO)--=>"Y 550 FOR X=1 TO Z: REM ------ SWAP TYPE NUMBERS AROUND ------ 560 Z1=INT(RND(0)*50)+1: PRINT 570 Z2=INT(RND(0)*50)+1: T(Z1)=T(Z2) 580 NEXT 590 IF Y=0 THEN 700 600 PRINT TAB(10);"### MESSAGE FROM HIGH COMMAND ###": PRINT : PRINT 620 PRINT " YOU ARE INSTRUCTED TO ATTACK AND SINK ENEMY" 630 PRINT " SHIPPING OPERATING IN THE ";: GOSUB 7700 640 PRINT : PRINT " ## BEWARE ## THE DEADLY 'HOT SHOT'" 650 PRINT " WHO HAS SUNK ";Z9;" OF OUR U-BOATS SO FAR." 660 PRINT : PRINT " YOU WILL HAVE UP TO ";D1;" DAYS TO" 670 PRINT " SINK AS MANY SHIPS AS YOU CAN.": PRINT 700 FOR X=1 TO 50: L(X)=10: NEXT 710 PRINT " *** ENTER '-1' TO GET A SUMMARY OF COMMANDS ***" 720 PRINT 730 Q=O+Z 800 FOR X=1 TO 50: REM ------- UNIQUE SHIPS PER AREA ---- 810 IF T(X)=6 THEN IF O>7 THEN IF O<11 THEN T(X)=44: GOTO 990 820 IF T(X)=8 THEN IF O<4 THEN T(X)=41: GOTO 990 830 IF T(X)=10 THEN IF O<3 THEN T(X)=43: GOTO 990 835 IF T(X)=10 THEN IF O>12 THEN T(X)=43: GOTO 990 840 IF T(X)=17 THEN IF O>7 THEN IF O<11 THEN T(X)=44: GOTO 990 850 IF T(X)=20 THEN IF O>8 THEN IF O<13 THEN T(X)=42: GOTO 990 860 IF T(X)=26 THEN IF O>3 THEN IF O<12 THEN T(X)=42: GOTO 990 870 IF T(X)=29 THEN IF O=8 THEN T(X)=34: GOTO 990 875 IF T(X)=29 THEN IF O=11 THEN T(X)=34: GOTO 990 880 IF T(X)=31 THEN IF O>7 THEN IF O<11 THEN T(X)=44: GOTO 990 885 IF T(X)=31 THEN IF RND(0)>.5 THEN T(X)=37: GOTO 990 890 IF T(X)=32 THEN IF O=8 THEN T(X)=34: GOTO 990 895 IF T(X)=32 THEN IF O=11 THEN T(X)=34: GOTO 990 897 IF T(X)=32 THEN IF O>12 THEN T(X)=39: GOTO 990 900 IF T(X)=33 THEN IF O=8 THEN T(X)=34: GOTO 990 905 IF T(X)=33 THEN IF O=11 THEN T(X)=34: GOTO 990 910 IF T(X)=33 THEN IF O>12 THEN T(X)=40: GOTO 990 915 IF T(X)=33 THEN IF RND(0)>.5 THEN T(X)=38: GOTO 990 920 IF T(X)=35 THEN IF RND(0)>.5 THEN T(X)=37: GOTO 990 925 IF T(X)=35 THEN IF O=8 THEN T(X)=34: GOTO 990 930 IF T(X)=35 THEN IF O=11 THEN T(X)=34: GOTO 990 970 IF T(X)=49 THEN IF O>3 THEN IF O<8 THEN T(X)=45: GOTO 990 990 NEXT 1000 PRINT TAB(10);"*** GOOD HUNTING U-";U;" ***": PRINT 1020 Z=INT(RND(0)*12)+1: Y=0 1030 Z1=INT(RND(0)*28)+13: Y1=0 1040 Z2=INT(RND(0)*10)+41: Y2=0 1050 FOR X=1 TO 50: REM ++++++++++ SHIP DATA ++++++++++ 1060 IF T(X)<11 THEN L(X)=6 1100 IF T(X)=Z THEN Y=Y+1: PRINT Y;" ";: GOSUB 7000 1105 IF T(X)=Z THEN PRINT "(S) KNOWN IN YOUR AREA" 1110 IF T(X)=Z1 THEN Y1=Y1+1: PRINT Y1;" ";: GOSUB 7000 1115 IF T(X)=Z1 THEN PRINT "(S) REPORTED IN YOUR AREA" 1120 IF T(X)=Z2 THEN Y2=Y2+1: PRINT Y2;" ";: GOSUB 7000 1125 IF T(X)=Z2 THEN PRINT "(S) SPOTTED IN YOUR AREA" 1130 IF T(X)=1 THEN W(X)=1050: G(X)=1: S(X)=250: GOTO 1900 1140 IF T(X)=2 THEN W(X)=1800: H(X)=2: G(X)=2: S(X)=300: GOTO 1900 1150 IF T(X)=3 THEN W(X)=1350: H(X)=2: G(X)=2: S(X)=325: GOTO 1900 1160 IF T(X)=4 THEN W(X)=1200: G(X)=2: S(X)=300: GOTO 1900 1170 IF T(X)=5 THEN W(X)=900: G(X)=1: S(X)=450: GOTO 1900 1180 IF T(X)=6 THEN W(X)=900: G(X)=1: S(X)=400: GOTO 1900 1190 IF T(X)=7 THEN H(X)=4: IF O>4 THEN IF O<8 THEN H(X)=INT(RND(0)*3.5)+1 1195 IF T(X)=7 THEN W(X)=2100: G(X)=3: S(X)=300: GOTO 1900 1200 IF T(X)=8 THEN W(X)=2500: H(X)=3: G(X)=2: S(X)=400: GOTO 1900 1210 IF T(X)=9 THEN W(X)=1400: G(X)=1: S(X)=275: GOTO 1900 1220 IF T(X)=10 THEN W(X)=70: G(X)=1: S(X)=600: GOTO 1900 1230 IF T(X)=11 THEN W(X)=90: G(X)=1: S(X)=500: GOTO 1900 1240 IF T(X)=12 THEN IF O=4 THEN G(X)=1 1245 IF T(X)=12 THEN W(X)=3100: H(X)=2: L(X)=7: S(X)=300: GOTO 1900 1250 IF T(X)=13 THEN W(X)=3500: L(X)=8: S(X)=275: GOTO 1900 1260 IF T(X)=14 THEN W(X)=6500: H(X)=2: L(X)=8: S(X)=250: GOTO 1900 1270 IF T(X)=15 THEN W(X)=9150: H(X)=2: L(X)=9: S(X)=250: GOTO 1900 1280 IF T(X)=16 THEN IF O>3 THEN G(X)=1: IF O=8 THEN G(X)=0 1285 IF T(X)=16 THEN W(X)=11500: H(X)=3: L(X)=8: S(X)=275: GOTO 1900 1290 IF T(X)=17 THEN W(X)=9500: H(X)=2: L(X)=9: S(X)=275: GOTO 1900 1300 IF T(X)=18 THEN G(X)=1: IF O>5 THEN IF O<13 THEN G(X)=0 1305 IF T(X)=18 THEN W(X)=11500: H(X)=3: L(X)=9: S(X)=100: GOTO 1900 1310 IF T(X)=19 THEN W(X)=8500: H(X)=2: L(X)=9: S(X)=150: GOTO 1900 1320 IF T(X)=20 THEN W(X)=6000: H(X)=2: L(X)=8: S(X)=200: GOTO 1900 1330 IF T(X)=21 THEN W(X)=7500: H(X)=2: L(X)=8: S(X)=200: GOTO 1900 1340 IF T(X)=22 THEN IF O=INT(RND(0)*16)1 THEN G(X)=1 1345 IF T(X)=22 THEN W(X)=9650: L(X)=7: S(X)=200: GOTO 1900 1350 IF T(X)=23 THEN W(X)=8850: H(X)=3: L(X)=7: S(X)=100: GOTO 1900 1355 IF T(X)=23 THEN G(X)=1: IF O>2 THEN G(X)=0: IF O=12 THEN G(X)=1 1360 IF T(X)=24 THEN IF O>4 THEN G(X)=2: IF O>13 THEN G(X)=1 1365 IF T(X)=24 THEN W(X)=4350: H(X)=3: L(X)=7: S(X)=300: GOTO 1900 1370 IF T(X)=25 THEN IF O=16 THEN G(X)=1 1375 IF T(X)=25 THEN W(X)=1350: L(X)=7: S(X)=300: GOTO 1900 1380 IF T(X)=26 THEN W(X)=7100: H(X)=3: L(X)=8: S(X)=250: GOTO 1900 1390 IF T(X)=27 THEN W(X)=2250: H(X)=2: L(X)=8: S(X)=250: GOTO 1900 1400 IF T(X)=28 THEN W(X)=2000: L(X)=7: S(X)=150: GOTO 1900 1410 IF T(X)=29 THEN W(X)=1800: H(X)=2: S(X)=150: GOTO 1900 1420 IF T(X)=30 THEN W(X)=3100: H(X)=2: L(X)=9: S(X)=275: GOTO 1900 1430 IF T(X)=31 THEN W(X)=650: S(X)=200: GOTO 1900 1440 IF T(X)=32 THEN W(X)=120: S(X)=100: GOTO 1900 1450 IF T(X)=33 THEN W(X)=100: S(X)=50: GOTO 1900 1460 IF T(X)=34 THEN W(X)=650: S(X)=90: GOTO 1900 1470 IF T(X)=35 THEN W(X)=950: S(X)=70: GOTO 1900 1480 IF T(X)=36 THEN W(X)=6000: H(X)=2: L(X)=8: S(X)=200: GOTO 1900 1490 IF T(X)=37 THEN W(X)=850: S(X)=150: GOTO 1900 1500 IF T(X)=38 THEN W(X)=500: S(X)=50: GOTO 1900 1510 IF T(X)=39 THEN W(X)=90: S(X)=50: GOTO 1900 1520 IF T(X)=40 THEN W(X)=100: S(X)=50: GOTO 1900 1530 IF T(X)=41 THEN W(X)=3000: H(X)=3: G(X)=2: S(X)=400: L(X)=6: GOTO 1900 1540 IF T(X)=42 THEN W(X)=7500: H(X)=3: S(X)=400: L(X)=8: GOTO 1900 1550 IF T(X)=43 THEN W(X)=150: G(X)=1: S(X)=400: L(X)=6: GOTO 1900 1560 IF T(X)=44 THEN W(X)=800: G(X)=1: L(X)=12: S(X)=200: GOTO 1900 1570 IF T(X)=45 THEN W(X)=13500: H(X)=4: G(X)=2: L(X)=2: S(X)=300: GOTO 1900 1580 IF T(X)=46 THEN W(X)=33500: H(X)=8: G(X)=6: L(X)=1: S(X)=325: GOTO 1900 1590 IF T(X)=47 THEN W(X)=25700: H(X)=5: G(X)=3: L(X)=2: S(X)=400: GOTO 1900 1600 IF T(X)=48 THEN W(X)=18500: H(X)=4: G(X)=4: L(X)=3: S(X)=375: GOTO 1900 1610 IF T(X)=49 THEN W(X)=12800: H(X)=3: G(X)=3: L(X)=3: S(X)=350 1620 IF T(X)=50 THEN W(X)=10500: H(X)=3: G(X)=3: L(X)=3: S(X)=375 1900 NEXT 1950 IF Y+Y1+Y2>0 THEN 1990 1960 PRINT TAB(15);"** NO INTELLEGENCE REPORT TODAY **" 1990 Y=0 3000 REM ****** U-BOAT EXEC ******* ....PICK TARGET 3010 IF N>0 THEN 3200 3020 Q=INT(RND(0)*45)+1: Q1=INT(RND(0)*5)+1 3025 IF RND(0)>.4 THEN Q1=INT(RND(0)*2.6)+1 3030 FOR X=Q TO Q+(Q1-1) 3040 IF H(X)<=0 THEN 3090 3050 R(X)=INT((RND(0)*25)+5)*250 3055 IF S=3 THEN R(X)=INT((RND(0)*10)+3)*1000 3060 E(X)=INT(R(X)/2): Z=1 3065 IF RND(0)>.3 THEN Z=-1 3070 S(X)=S(X)*(Z): E=INT(R(X)*.9) 3080 B(X)=INT(RND(0)*3600)/10 3090 NEXT 3100 C=INT(RND(0)*32)+1: REM ---- SELECT CONDITION ---- 3110 D=INT(RND(0)*20)+1: REM ---- SELECT TIME OF DAY ---- 3120 D1=D1-1: REM ----- SPEND ONE DAY 3130 A=0: B=INT((RND(0)*70)+15)*10 3200 N=0: REM ========== SHIP COUNT & MOVE SHIPS ============ 3230 FOR X=Q TO Q+(Q1-1) 3240 IF H(X)<=0 THEN 3290 3250 N=N+1: R(X)=R(X)+(M*S(X)) 3260 IF S=3 THEN IF G(X)=0 THEN S(X)=ABS(S(X)) 3270 IF R(X)<0 THEN S(X)=ABS(S(X)) 3280 R(X)=INT(R(X)/10)*10 3285 IF S>1 THEN IF R(X)=0 THEN S=-4: REM === U-BOAT RAMMED! === 3290 NEXT 3300 REM ========== ALLIED ARMED SHIPS SHOOT ON THE SURFACE ==== 3305 IF S<0 THEN 9000 3310 IF N<=0 THEN 4000 3320 IF A=0 THEN 4000 3330 IF S<3 THEN 3400 3340 IF RND(0)>.95 THEN 3400 3350 FOR X=Q TO Q+(Q1-1) 3360 IF H(X)<=0 THEN 3390 3370 IF G(X)>0 THEN GOSUB 3800: REM === SHOOT === 3380 IF S<0 THEN 9000 3390 NEXT 3400 IF O<8 THEN 3600: REM ======= ENGLISH TORPEDOES ======= 3405 IF O>10 THEN 3600 3410 IF S<1 THEN 3600 3420 FOR X=Q TO Q+(Q1-1) 3430 IF H(X)<=0 THEN 3485 3435 IF L(X)<11 THEN 3485 3440 H=INT(RND(0)*6)-INT((R(X)/1000)-3): Z=10 3450 IF S=2 THEN Z=INT((RND(0)*75)+1) 3460 IF S=3 THEN GOSUB 7000: PRINT " ### FIRING TORPEDOES ###" 3465 IF S<3 THEN PRINT " *** SONAR REPORTS INCOMING TORPEDOES ***" 3470 IF H>0 THEN IF ABS(S1-Z)<11 THEN S=-3: GOTO 9000 3480 PRINT : PRINT TAB(20);" ### ENGLISH TORPEDOES MISSED ###" 3485 NEXT 3490 IF S>1 THEN 3600 3500 FOR X=Q TO Q+(Q1-1): REM - - - - ENGLISH SUBS DIVE - - - - 3510 IF H(X)<=0 THEN 3590 3520 IF L(X)<11 THEN 3590 3530 IF A=0 THEN L(X)=12: GOTO 3590 3540 IF L(X)=12 THEN GOSUB 7000: PRINT " *** DIVING ***": L(X)=11 3590 NEXT 3600 IF S=3 THEN 4000: REM ========= DEPTH CHARGE ATTACK ====== 3605 PRINT 3610 IF A=0 THEN 5000 3620 FOR X=Q TO Q+(Q1-1) 3625 IF H(X)<=0 THEN 3795 3630 IF L(X)<>6 THEN 3795 3640 IF R(X)>INT(RND(0)*4000)+2500 THEN IF RND(0)>.7 THEN A=0 3645 S(X)=ABS(S(X))*(-1): IF R(X)>1000 THEN R(X)=R(X)+S(X) 3650 IF R(X)>0 THEN 3660 3655 R(X)=INT((RND(0)*10)*250)+500: B(X)=INT(RND(0)*360)+1 3660 GOSUB 7000 3670 IF R(X)=>4500 THEN PRINT " ## APROACHING FAST ##": GOTO 3690 3680 PRINT " IS ATTACKING !!! - - - BEARING: ";B(X) 3690 Z1=INT(RND(0)*4)+3 3700 GOSUB 7000: REM + + + THE ATTACK RUN + + + 3710 PRINT TAB(25);"RANGE: ";R(X);TAB(40); 3715 IF R(X)>2500 THEN 3725 3720 IF RND(0)>.4 THEN PRINT "*** V A A R O O M ***": GOTO 3730 3725 PRINT "U-";U;" at ";S1;" Meters." 3730 IF L(X)<11 THEN R(X)=R(X)+(S(X)) 3740 S1=S1+25: IF S1>B THEN S1=B 3745 IF R(X)=>4500 THEN 3795 3750 IF S1=>400 THEN 3760 3755 IF R(X)>0 THEN 3700 3760 R(X)=INT((RND(0)*25)+1)*100: Z=INT((RND(0)*10)*25)+50 3765 IF S1<=125 THEN IF R(X)<=0 THEN S=-2: GOTO 9000 3770 FOR Y=1 TO Z1 3772 PRINT TAB(20);"*** V A A R O O M ***" 3774 NEXT 3775 PRINT 3780 IF S1=B THEN PRINT " U-BOAT IS ON THE BOTTOM AT ";B;" Meters" 3785 IF Z+25=>S1 THEN IF Z-25<=S1 THEN S=-2: GOTO 9000 3790 PRINT "&J&[&A&I **** WHEW ! **** ... U-";U;" ESCAPED!" 3795 NEXT 3799 GOTO 4000 3800 FOR Z=1 TO G(X): REM +++++ ENEMY GUNFIRE +++++ 3810 IF RND(0)>.9 THEN 3940 3820 PRINT TAB(10);"### B O O M ###" 3830 GOSUB 7000 3835 PRINT " FIRING FROM ";R(X);" Meters." 3840 E(X)=INT(RND(0)*(R(X)-E(X))+E(X)) 3850 IF E(X)>R(X)+10 THEN E(X)=R(X)-INT(RND(0)*50) 3870 IF R(X)-E(X)>ABS(10) THEN IF ABS(R(X))>500 THEN 3900 3880 S=-1 3890 GOTO 3995 3900 PRINT TAB(15);"* S P L A S H *" 3910 PRINT "MISSED BY ";R(X)-E(X);" Meters." 3920 IF L(X)>2 THEN S(X)=ABS(S(X))*(-1) 3940 NEXT 3950 IF L(X)=6 THEN A=1 3995 RETURN 4000 IF S=3 THEN A=1 5000 REM ########## U-BOAT EXEC ########### 5010 IF S<0 THEN 9000 5020 IF D1<=0 THEN 9000 5030 IF T<=0 THEN 9000 5040 IF K=>50 THEN 9000 5050 M=1 5080 IF N=0 THEN 5100 5090 IF C<>2 THEN 5200 5100 PRINT 5110 IF S=3 THEN PRINT TAB(10);"+ + + LOOKOUT REPORT + + +" 5120 IF S<3 THEN PRINT TAB(10);"*** SONAR REPORT ***" 5130 PRINT 5140 IF N=0 THEN PRINT TAB(20);"..... NOTHING.": GOTO 5200 5145 IF S=3 THEN GOSUB 5700: GOTO 5200 5150 IF N=1 THEN IF R(Q)>5000 THEN PRINT "...DISTANT SOUNDS" 5155 IF N=1 THEN IF R(Q)<=5000 THEN PRINT "...SHIP SOUNDS ABOVE" 5160 IF N>3 THEN PRINT : PRINT TAB(15);"### FLASH ###": PRINT 5190 IF N>1 THEN PRINT TAB(10);"SOUNDS LIKE";N;" SHIPS !" 5200 PRINT 5210 INPUT " --- NEXT COMMAND CAPTAIN (0 TO 9)---=>"C 5220 PRINT 5300 IF C=0 THEN 6000: REM *+* SURFACE 5310 IF C=1 THEN 6100: REM *+* PERISCOPE 5320 IF C=2 THEN 6200: REM *+* WAIT 5330 IF C=3 THEN 6300: REM *+* SHOOT DECK GUN 5340 IF C=4 THEN 6400: REM *+* SHOOT TORPEDOES 5350 IF C=5 THEN 6500: REM *+* WAIT ONE DAY - SEE NEW SHIPS 5360 IF C=6 THEN 6600: REM *+* SHIP STATUS - DAYS LEFT 5370 IF C=7 THEN 6700: REM *+* INFO ON HITS TO SINK SHIPS 5380 IF C=8 THEN 6800: REM *+* DIVE 5390 IF C=9 THEN 6900: REM *+* LOG OF SHIP SINKS 5500 PRINT " *+*+*+*+* COMMAND SUMMARY *+*+*+*+*": PRINT 5505 PRINT " COMMAND # 0 -- SURFACE THE U-BOAT" 5510 PRINT " COMMAND # 1 -- PERISCOPE OR SURFACE SCAN" 5520 PRINT " COMMAND # 2 -- WAIT FOR THE ENEMY TO MOVE" 5530 PRINT " COMMAND # 3 -- FIRE THE DECK GUN" 5540 PRINT " COMMAND # 4 -- FIRE TORPEDOES" 5550 PRINT " COMMAND # 5 -- WAIT ONE DAY - GET NEW SHIPS" 5560 PRINT " COMMAND # 6 -- SHIP STATUS - DAYS LEFT" 5570 PRINT " COMMAND # 7 -- INFO ON HITS TO SINK SHIPS" 5580 PRINT " COMMAND # 8 -- ### DIVE ###" 5590 PRINT " COMMAND # 9 -- SHIPS LOG OF ENEMY VESSELS SUNK" 5690 GOTO 5200 5700 FOR X=Q TO Q+(Q1-1): REM ++++ SUFACE DISPLAY GOSUB ++++ 5710 IF H(X)<=0 THEN 5770 5720 IF C>1 THEN PRINT X;" "; 5730 GOSUB 7000 5740 PRINT TAB(30);"RANGE: ";R(X) 5770 NEXT 5780 IF C>2 THEN IF C<5 THEN GOSUB 5900 5790 RETURN 5800 FOR E=Q TO Q+(Q1-1): REM ----- FIND FIRST VALID TARGET -- 5810 IF H(E)>0 THEN X=E: GOTO 5890 5830 NEXT 5840 E=0 5850 PRINT " ### NO SHIPS IN SIGHT ###" 5890 RETURN 5900 PRINT : Y=0: REM --- INPUT SHIP TO SHOOT AT ----- 5910 INPUT " INPUT SHIP NUMBER TO SHOOT AT ----=>"E 5920 PRINT 5930 IF E=0 THEN PRINT "*** SHOOTING ABORTED ***": GOTO 5995 5940 IF EQ+Q1 THEN PRINT "NUMBER TOO HIGH -- TRY AGAIN ON CMD ";C 5955 IF E>Q+Q1 THEN Y=1: GOTO 5995 5960 IF W(E)<=0 THEN GOSUB 7000: PRINT " ### HAS BEEN SUNK ###" 5965 IF W(E)<=0 THEN Y=1: GOTO 5995 5995 RETURN 6000 REM ======== SURFACE THE U-BOAT ========= 6010 IF S<3 THEN PRINT TAB(10);"### U-";U;" SURFACING ###": PRINT 6020 IF S=3 THEN GOSUB 8800 6025 IF S=3 THEN IF RND(0)>.93 THEN GOSUB 8900 6030 PRINT 6040 GOSUB 5700 6050 S1=10: S=3 6060 A=0 6095 GOTO 3000 6100 REM =========== PERISCOPE SCAN ============= 6110 IF S<2 THEN PRINT "* U-";U;" RISING TO PERISCOPE DEPTH *" 6120 IF S=3 THEN PRINT "* U-";U;" DIVING TO PERISCOPE DEPTH *" 6130 S=2: PRINT : S1=25 6150 GOSUB 5700 6195 GOTO 3000 6200 REM ========== WAIT FOR ALLIES TO MOVE ========== 6210 M=2 6220 IF S<3 THEN A=0 6295 GOTO 3000 6300 Y=0: E=1: REM ============ FIRE DECK GUN ============ 6310 IF S<3 THEN PRINT TAB(10);"### YOUR UNDER WATER ###": GOTO 3000 6320 GOSUB 5800 6325 IF N>1 THEN GOSUB 5700 6330 IF Y=1 THEN 5000 6335 IF E=0 THEN 5000 6340 PRINT TAB(25);"### B A M ###": PRINT : X=E 6350 PRINT " U-";U;" IS FIRING AT THE ";: GOSUB 7000: PRINT 6360 E1=200: IF S(E)<0 THEN E1=-300 6370 GOSUB 8000 6375 IF RND(0)>.9 THEN GOSUB 8900 6380 IF N<=0 THEN PRINT "&J&[&A&I ## THAT'S ALL FOR TODAY ##" 6385 IF N<=0 THEN 6500 6395 GOTO 3000 6400 REM ============ FIRE TORPEDOES =========== 6410 GOSUB 5800 6415 IF N>1 THEN GOSUB 5700 6420 IF Y=1 THEN 5000 6425 IF E=0 THEN 5000 6430 PRINT TAB(10);"U-";U;" TORPEDOES LEFT: ";T: PRINT 6440 INPUT " INPUT NO. OF TORPEDOES TO FIRE ---=>"Z 6445 PRINT : IF Z<0 THEN PRINT "## FIRING CANCELLED ##": GOTO 5000 6450 IF Z>T THEN Z=T 6455 IF Z>6 THEN Z=6 6460 T=T-Z: PRINT TAB(12);"+ + +";Z;" TORPEDOES UNDER WAY + + +" 6465 PRINT : A=1: X=0: H=0 6470 IF S<2 THEN 3000 6480 IF R(E)>5000 THEN X=INT(R(E)/1000)-5 6485 H=INT(RND(0)*(Z-X)+.5): IF R(E)<=1000 THEN H=Z 6490 X=E: GOSUB 8400 6495 GOTO 3000 6500 REM ============ WAIT ONE DAY =========== 6510 IF S=3 THEN PRINT " U-";U;" DOVE SAFELY TO ";S1;" FEET" 6520 IF S=3 THEN S1=INT((RND(0)*10)+10)*10: S=2 6530 N=0 6540 PRINT : PRINT " YOU'VE WAITED ONE DAY. ";D1;" DAYS ARE LEFT." 6595 GOTO 3000 6600 FOR X=1 TO 5: PRINT : NEXT : REM ===== STATUS ====== 6605 PRINT TAB(10);"U-";U;" STATUS --- MISSION #";M9: PRINT 6610 PRINT " YOU ARE OPERATING IN THE ";: GOSUB 7700 6620 PRINT " WITH ";T;" TORPEDOES AND ";D1;" DAYS LEFT" 6630 PRINT 6640 IF K>1 THEN PRINT TAB(10);"### YOU'VE SUNK ";K;" SHIPS AND" 6645 IF K>1 THEN PRINT TAB(10);W;" TONS OF ENEMY SHIPPING." 6650 IF K>1 THEN PRINT TAB(10);" ON THIS MISSION # ";M9 6660 PRINT 6670 IF M9>1 THEN PRINT "### SINCE YOU STARTED, YOU'VE SUNK "; 6680 IF M9>1 THEN PRINT "A TOTAL OF ";L;" ALLIED SHIPS.": PRINT 6690 PRINT TAB(15);"### YOUR DEPTH IS";S1;" FEET ###" 6695 GOTO 5000 6700 GOSUB 7500: REM ========== INFO ON HITS TO SINK SHIPS === 6790 GOTO 5200 6800 PRINT TAB(15);"*#* DIVE - DIVE *#*": PRINT 6810 Z=INT((RND(0)*15)*10)+S1 6820 FOR S1=S1 TO Z STEP 25 6830 IF S1=>B THEN S1=B: GOTO 6880 6840 PRINT "*** U-BOAT ***";TAB(20);S1;" Meters." 6870 NEXT 6880 S=1 6890 IF S1=B THEN PRINT " U-BOAT IS ON THE BOTTOM AT ";S1;" Meters." 6895 GOTO 3000 6900 Z=0: REM ==== SHIPS SUNK ==== 6910 GOSUB 6950: PRINT : PRINT " YOU'VE SUNK ";Z;" TOTAL SHIPS" 6920 GOTO 3000 6950 FOR X=1 TO 50 6955 IF H(X)>0 THEN 6990 6960 Z=Z+1: GOSUB 7000: PRINT TAB(35);W(X);" TONS." 6970 IF Z=12 THEN INPUT "TYPE IN A NUMBER TO SEE MORE --->"Y 6975 IF Z=24 THEN INPUT "TYPE IN A NUMBER TO SEE MORE --->"Y 6980 IF Z=36 THEN INPUT "TYPE IN A NUMBER TO SEE MORE --->"Y 6990 NEXT 6995 RETURN 7000 REM : ####### ENEMY SHIP NAMES ####### 7010 IF T(X)=1 THEN PRINT "DESTROYER ESCORT";: RETURN 7020 IF T(X)=2 THEN PRINT "DESTROYER";: RETURN 7030 IF T(X)=3 THEN PRINT "DESTROYER";: RETURN 7040 IF T(X)=4 THEN PRINT "DESTROYER";: RETURN 7050 IF T(X)=5 THEN PRINT "CORVETTE";: RETURN 7060 IF T(X)=6 THEN PRINT "SUB CHASER";: RETURN 7070 IF T(X)=7 THEN PRINT "FAST-BOAT";: RETURN 7080 IF T(X)=8 THEN PRINT "MYSTERY SHIP";: RETURN 7090 IF T(X)=9 THEN PRINT "UNKNOWN SHIP";: RETURN 7100 IF T(X)=10 THEN PRINT "TORPEDO BOAT";: RETURN 7110 IF T(X)=11 THEN PRINT "PATROL BOAT";: RETURN 7120 IF T(X)=12 THEN PRINT "FLEET SUPPLY SHIP";: RETURN 7130 IF T(X)=13 THEN PRINT "SMALL FRIEGHTER";: RETURN 7140 IF T(X)=14 THEN PRINT "MERCHANT FRIEGHTER";: RETURN 7150 IF T(X)=15 THEN PRINT "TANKER";: RETURN 7160 IF T(X)=16 THEN PRINT "TROOP TRANSPORT";: RETURN 7170 IF T(X)=17 THEN PRINT "OIL TANKER";: RETURN 7180 IF T(X)=18 THEN PRINT "LARGE TANKER";: RETURN 7190 IF T(X)=19 THEN PRINT "OIL TANKER";: RETURN 7200 IF T(X)=20 THEN PRINT "SUPPLY FRIEGHTER";: RETURN 7210 IF T(X)=21 THEN PRINT "CARGO FRIEGHTER";: RETURN 7220 IF T(X)=22 THEN PRINT "AMMUNITION SHIP";: RETURN 7230 IF T(X)=23 THEN PRINT "ORE TRANSPORT";: RETURN 7240 IF T(X)=24 THEN PRINT "SUBMARINE TENDER";: RETURN 7250 IF T(X)=25 THEN PRINT "SMALL CARGO SHIP";: RETURN 7260 IF T(X)=26 THEN PRINT "AMERICAN FRIEGHTER";: RETURN 7270 IF T(X)=27 THEN PRINT "FRIEGHTER";: RETURN 7280 IF T(X)=28 THEN PRINT "LUXURY STEAMER";: RETURN 7290 IF T(X)=29 THEN PRINT "STEAMSHIP";: RETURN 7300 IF T(X)=30 THEN PRINT "FLEET OILER";: RETURN 7310 IF T(X)=31 THEN PRINT "MINESWEEPER";: RETURN 7320 IF T(X)=32 THEN PRINT "FISHING BOAT";: RETURN 7330 IF T(X)=33 THEN PRINT "WORTHLESS BOAT";: RETURN 7340 IF T(X)=34 THEN PRINT "ALLIED LANDING CRAFT";: RETURN 7350 IF T(X)=35 THEN PRINT "TUG BOAT";: RETURN 7360 IF T(X)=36 THEN PRINT "SHRIMP BOAT";: RETURN 7370 IF T(X)=37 THEN PRINT "MINE-LAYER";: RETURN 7380 IF T(X)=38 THEN PRINT "BARGE";: RETURN 7390 IF T(X)=39 THEN PRINT "YACHT";: RETURN 7400 IF T(X)=40 THEN PRINT "FERRY BOAT";: RETURN 7410 IF T(X)=41 THEN PRINT "<#> HOT SHOT <#>";: RETURN 7420 IF T(X)=42 THEN PRINT "LARGE ALLIED FRIEGHTER";: RETURN 7430 IF T(X)=43 THEN PRINT "LARGE PATROL BOAT";: RETURN 7440 IF T(X)=44 THEN PRINT "ENGLISH SUBMARINE";: RETURN 7450 IF T(X)=45 THEN PRINT "SMALL AIRCRAFT CARRIER";: RETURN 7460 IF T(X)=46 THEN PRINT "BATTLESHIP";: RETURN 7470 IF T(X)=47 THEN PRINT "AIRCRAFT CARRIER";: RETURN 7480 IF T(X)=48 THEN PRINT "HEAVY CRUISER";: RETURN 7490 IF T(X)>48 THEN PRINT "LIGHT CRUISER"; 7495 RETURN 7500 REM ============= SHIP TYPES ============== 7510 PRINT "BATTLESHIPS";TAB(30);"7-10" 7520 PRINT "AIRCRAFT CARRIERS";TAB(30);"4-6" 7530 PRINT "CRUISERS";TAB(30);"3-4" 7540 PRINT "DESTROYERS";TAB(30);"1-2" 7550 PRINT "DESTROYER ESCORTS";TAB(30);1 7560 PRINT "ANTI-SUB SHIPS";TAB(30);"1-5" 7570 PRINT "CARGO OR TRANSPORT SHIPS";TAB(30);"1-3" 7575 PRINT "STEAMERS OR AMMO SHIPS";TAB(30);"1-2" 7580 PRINT "FRIEGHTERS";TAB(30);"2-3" 7585 PRINT "TANKERS & OILERS";TAB(30);"2-3" 7590 PRINT "WORTHLESS SHIPS";TAB(30);1 7595 RETURN 7600 REM ===== PRINT OUT SHIP TYPE RECORD === 7610 IF X=1 THEN PRINT "BATTLESHIPS: "; 7620 IF X=2 THEN PRINT "AIRCRAFT CARRIERS: "; 7630 IF X=3 THEN PRINT "CRUISERS: "; 7660 IF X=6 THEN PRINT "ANTI-SUB SHIPS: "; 7670 IF X=7 THEN PRINT "CARGO OR TRANSPORTS: "; 7680 IF X=8 THEN PRINT "STEAMERS OR AMMO SHIPS: "; 7685 IF X=9 THEN PRINT "FRIEGHTERS: "; 7690 IF X=10 THEN PRINT "MISC. WORTHLESS SHIPS: "; 7692 IF X=12 THEN PRINT "ENGLISH SUBMARINES: "; 7695 RETURN 7700 REM ++++++++++ NAME OF YOUR OPERATING AREA ++++++++++++ 7710 IF O=1 THEN PRINT "NORTH SEA": RETURN 7720 IF O=2 THEN PRINT "BALTIC SEA": RETURN 7730 IF O=3 THEN PRINT "OFF FRENCH COAST": RETURN 7740 IF O=4 THEN PRINT "AEGEAN SEA": RETURN 7750 IF O=5 THEN PRINT "MEDITERRANEAN": RETURN 7760 IF O=6 THEN PRINT "BARENTS SEA": RETURN 7770 IF O=7 THEN PRINT "SOUTH ATLANTIC": RETURN 7780 IF O=8 THEN PRINT "DENMARK #STRAIT#": RETURN 7790 IF O=9 THEN PRINT "JUTLAND STRAITS": RETURN 7800 IF O=10 THEN PRINT "NORWEGIAN COAST": RETURN 7810 IF O=11 THEN PRINT "FALKLAND ISLAND AREA": RETURN 7820 IF O=12 THEN PRINT "NORTH ATLANTIC": RETURN 7830 IF O=13 THEN PRINT "SOUTH AMERICAN COAST": RETURN 7840 IF O=14 THEN PRINT "EAST AFRICAN COAST": RETURN 7850 IF O=15 THEN PRINT "AMERICAN COAST": RETURN 7860 IF O=16 THEN PRINT "TYRRHENIAN SEA": RETURN 7870 IF O=17 THEN PRINT "IONIAN SEA": RETURN 7880 IF O=18 THEN PRINT "OFF MONTAUK POINT": RETURN 7880 IF O=19 THEN PRINT "OFF LONG ISLAND": RETURN 7890 PRINT "BERMUDA TRIANGLE" 7895 RETURN 7900 PRINT : PRINT "* * * * * ALLIED SHIPS SUNK * * * * *": PRINT 7910 FOR X=1 TO 50 7920 GOSUB 7000 7930 PRINT TAB(40);"TONNAGE: ";W(X) 7940 NEXT 7945 RETURN 8000 E2=INT(RND(0)*(R(E)-E2)+E2)+INT(RND(0)*25)+(E1) 8010 IF L(E)<7 THEN E2=E2-INT((RND(0)*10+1)*5) 8020 IF ABS(R(E)-E2)<500 THEN E2=R(E) 8030 IF R(E)>15000 THEN IF R(E)=15000>R(E)-E2 THEN E2=15000 8040 IF ABS(R(E)-E2)>30 THEN PRINT " * SPLASH *" 8050 IF ABS(R(E)-E2)<=30 THEN PRINT " # BOOM #" 8060 X=E: GOSUB 7000 8070 IF ABS(R(E)-E2)>30 THEN PRINT " MISSED BY ";R(E)-E2;" METERS" 8080 IF ABS(R(E)-E2)<=30 THEN PRINT " <#> H I T <#>" 8090 IF R(E)>15000 THEN GOSUB 7000: PRINT " * IS OUT OF GUN RANGE *" 8100 H=0: IF ABS(R(E)-E2)<31 THEN H=RND(0) 8110 IF H>0 THEN IF L(E)=10 THEN H=H*5 8120 IF H>0 THEN H(E)=H(E)-H: REM ---ELSE 5675 8130 IF T(E)=22 THEN IF H(E)<-.3 THEN 8150 8140 GOTO 8200 8150 PRINT TAB(10);"+*#*+ B A A V A R O O O M N +*#*+": PRINT 8170 PRINT "MAN .... WHAT AN EXPLOSION !!!" 8200 Z=INT(RND(0)*10): IF H(E)<1 THEN GOSUB 7000 8210 IF H(E)>.6 THEN IF H(E)<1 THEN PRINT " LISTING..." 8220 IF H(E)>.25 THEN IF H(E)<.65 THEN PRINT " +++ SMOKING +++" 8230 IF H(E)<.3 THEN PRINT TAB(15);" *+* BURNING *+*" 8240 IF H(E)<=0 THEN 8300 8245 IF H<=0 THEN 8300 8250 PRINT 8260 IF Z>8 THEN PRINT TAB(8);"*** GOOD HIT ***" 8270 IF Z=5 THEN GOSUB 7000: PRINT " ... HIT NEAT THE WATER LINE" 8280 IF H(E)<.1 THEN PRINT " *** WHAT A FLOATING WRECK !! ***" 8300 IF H(E)<=0 THEN PRINT TAB(9);: GOSUB 7000: PRINT " * SINKING *" 8310 IF H(E)<=0 THEN GOSUB 8650 8390 A=1 8395 RETURN 8400 Z=RND(0): REM ---------- HITS MESSAGE DISPLAY ----- 8410 IF H>0 THEN H(E)=H(E)-H 8420 IF H<=0 THEN GOSUB 7000: PRINT " >+< MISSED >+<" 8425 IF H<=0 THEN 8600 8430 PRINT TAB(15);"#### B O O M ####": PRINT 8450 IF RND(0)>.06 THEN 8480 8460 PRINT TAB(10);"**** WHAT A LUCKY HIT ****": PRINT 8470 H(E)=INT(RND(0)*4)-3 8480 PRINT H;" HIT";: IF H>1 THEN PRINT "S"; 8490 PRINT " ON THE ";: GOSUB 7000: PRINT 8500 PRINT TAB(10);: GOSUB 7000 8510 IF H(E)>6 THEN PRINT " FELT THAT !" 8520 IF H(E)>3 THEN IF H(E)<7 THEN PRINT " ...DENTED" 8530 IF H(E)>0 THEN IF H(E)<4 THEN PRINT " DAMAGED!" 8550 IF H(E)=0 THEN PRINT " * S U N K *" 8560 IF H(E)=-1 THEN PRINT " *+* SUNK *+*" 8570 IF H(E)=-2 THEN PRINT " *#* C R E A M E D *#*" 8580 IF H(E)=-3 THEN PRINT " @#@ BLOWN TO PIECES @#@" 8590 IF H(E)<-3 THEN PRINT " #### JUST BLOWN TO HELL ####" 8600 IF R(E)=>11000 THEN GOSUB 7000 8610 IF R(E)=>11000 THEN PRINT " IS OUT OF TORPEDO RANGE !!" 8630 IF H(E)>0 THEN 8690 8650 N=N-1: K=K+1: L=L+1: W=W+W(E): K(L(E))=K(L(E))+1 8690 RETURN 8800 PRINT "&J U-";U;" MOVING 250 Meters TOWARDS SHIPS.&J" 8810 FOR X=Q TO Q+(Q1-1) 8820 R(X)=R(X)-250 8830 NEXT 8890 RETURN 8900 IF Q+Q1<50 THEN Q1=Q1+1: REM === NEW SHIPS APPEAR === 8910 X=Q+Q1-1: IF X>51 THEN 8990 8930 IF H(X)<=0 THEN 8990 8940 PRINT "&J";TAB(15);"+++ LOOKOUT REPORT +++&J" 8950 PRINT TAB(10);"### ";: GOSUB 7000: PRINT " ###"; 8960 R(X)=INT((RND(0)*9)+10): R(X)=R(X)*1000 8970 PRINT TAB(35);"RANGE: ";R(X) 8980 S(X)=ABS(S(X))*(-1): N=N+1 8990 RETURN 9000 IF S>-1 THEN 9200: REM --------- GAME OVER ----------- 9010 PRINT : PRINT 9020 PRINT TAB(10);"################################" 9030 PRINT TAB(10);"### ###" 9050 PRINT TAB(10);"### K A B L A M ###" 9070 PRINT TAB(10);"### ###" 9080 PRINT TAB(10);"################################" 9090 PRINT : PRINT : PRINT " U-";U;" HAS BEEN SUNK BY "; 9100 IF S=-1 THEN PRINT "GUNFIRE" 9110 IF S=-2 THEN PRINT "DEPTH CHARGES" 9120 IF S=-3 THEN PRINT "TORPEDOES" 9130 IF S=-4 THEN PRINT "RAMMING !" 9160 INPUT "&J DO YOU WANT TO TRY AGAIN ? (1=YES 0=NO)--=>"Y 9180 IF Y=1 THEN CLEAR : RESTORE : GOTO 100 9190 GOTO 9900 9200 FOR X=1 TO 5: PRINT : NEXT 9210 PRINT TAB(10);"*** SIEG HEIL U-";U;" ***": PRINT 9230 PRINT TAB(10);"YOU END A SUCCESSFUL MISSION # ";M9 9240 M9=M9+1: PRINT : PRINT 9250 IF T<=0 THEN PRINT TAB(9);"*** ALL TORPEDOES WERE SHOT ***&J" 9260 IF D1<=0 THEN PRINT TAB(9); 9270 IF D1<=0 THEN PRINT "*** YOU ARE OUT OF SAILING DAYS ***&J" 9280 INPUT " DO YOU WANT TO SEE YOUR LOG (1=YES 0=NO)--=>"Y 9285 Z=0: Z1=0: IF Y=0 THEN PRINT : GOTO 9300 9290 GOSUB 6950: PRINT "&J YOU'VE SUNK ";Z;" TOTAL SHIPS" 9300 PRINT "&J DO YOU WANT TO SEE YOUR PREVIOUS TOTALS" 9310 INPUT " (1=YES 0=NO)--=>"Y 9320 IF Y=0 THEN 9500 9330 PRINT "&J&[&A&I *** SHIP TYPES SUNK ***&J" 9340 Z=0: Z1=0 9400 FOR X=1 TO 12 9410 IF K(X)<=0 THEN 9480 9420 PRINT TAB(9);: GOSUB 7600: PRINT TAB(40);K(X) 9450 Z=Z+K(X): Z1=Z1+W(X) 9480 NEXT 9490 PRINT "***** ";Z;" ***** SHIPS SUNK. ### ";Z1;" ### TONS" 9500 INPUT " DO YOU WANT TO TRY AGAIN ? (1=YES 0=NO)--=>"Y 9505 IF M9>10 THEN 9600 9510 IF M9>10 THEN 9600 9520 IF Y=1 THEN RESTORE : GOTO 300 9600 PRINT "&J&[&A&I*** IT IS MAY 1941 ***&J" 9610 PRINT "### ENGLAND HAS SURRENDERED ###&J" 9620 PRINT " ### U-";U;" WILL ENTER A MUSEUM ###&J" 9630 PRINT "*** YOU LEAVE THE NAVY WITH A RECORD OF ";Z; 9640 PRINT " ENEMY SHIPS. ***" 9650 PRINT "*** TOTAL TONNAGE WAS: ";W 9900 END