0 REM *SUBWAR.BA V1.2* 1 REM COPYRIGHT 1987 FRED BROWN 73267,2450 2 CLS:CLEAR500:PRINT"SUBWAR.BA V1.2":PRINT"Initializing...":PRINT"PRESS " 3 POKE63277,PEEK(61983) 4 DEFSNGA-Z:DEFINTD 5 DIMHD(4,4),DB(20,20) 6 I$="QTDRLFSZXUYIG":KL=0 7 P1$=CHR$(253)+CHR$(239)+CHR$(239)+CHR$(239)+CHR$(239)+CHR$(239)+CHR$(239)+CHR$(251) 8 P2$=" "+CHR$(253)+CHR$(251):P3$=" "+CHR$(252)+CHR$(239)+CHR$(239)+CHR$(254) 9 HD$(1)=CHR$(152):HD$(2)=CHR$(154):HD$(3)=CHR$(153):HD$(4)=CHR$(155) 20 FORI=1TO8:READRK$(I):NEXT 21 DATA MATE,ENSIGN,LIEUTENANT,COMMANDER,CAPTAIN,COMMODORE,ADMIRAL,GRAND ADMIRAL 25 FORI=1TO20:FORJ=1TO20:READDB(I,J):NEXT:NEXT 30 DATA4,4,4,5,6,7,8,9,8,7,6,5,5,5,5,5,5,5,5,5 31 DATA4,3,4,5,6,7,8,9,8,7,6,5,4,4,4,4,4,4,4,4 32 DATA4,3,4,5,6,7,8,9,8,7,6,5,4,3,3,3,3,3,4,5 33 DATA4,3,4,5,6,7,8,9,8,7,6,5,4,3,2,2,2,3,4,5 34 DATA4,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1,2,3,4,5 35 DATA4,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1,2,3,4,5 36 DATA4,4,4,5,6,7,8,9,8,7,6,5,4,3,2,1,2,3,4,5 37 DATA4,4,4,5,6,7,8,9,8,7,6,5,4,3,2,1,2,3,4,5 38 DATA4,4,4,5,6,7,8,9,8,7,6,5,4,3,2,2,2,3,4,5 39 DATA4,4,4,5,6,7,8,9,8,7,6,5,4,3,2,2,2,3,4,5 40 DATA4,4,4,5,6,7,8,9,8,7,6,5,4,3,2,2,2,3,4,5 41 DATA4,3,4,5,6,7,8,9,8,7,6,5,4,3,2,2,2,3,4,5 42 DATA4,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1,2,3,4,5 43 DATA4,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1,2,3,4,5 44 DATA4,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1,2,3,4,5 45 DATA4,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1,2,3,4,5 46 DATA4,4,4,5,6,7,8,9,8,7,6,5,4,3,2,2,2,3,4,5 47 DATA4,4,4,5,6,7,8,9,8,7,6,5,4,3,3,3,3,3,4,5 48 DATA4,4,4,5,6,7,8,9,8,7,6,5,4,4,4,4,4,4,5,5 49 DATA4,4,4,5,6,7,8,9,8,7,6,5,5,5,5,5,5,5,5,5 100 IN$="N":INPUT"Do you want instructions (Y/N)";IN$:IFIN$="Y"THENGOSUB5000 101 TH=15 102 SX=10:SY=10:SD=0:SP=1:ST=10:SH=0:SF=0:SO=0:CD=0:CF=0:UP=0 103 DX=RND(1)*20+1:DY=RND(1)*20+1:DP=RND(1)*4+1:DM=1:DH=0 104 DV$="SURFACE":FO$="STOPPED":CM$="GOOD LUCK!" 105 CLS:LINE(50,10)-(120,40),1,BF 110 FORI=1TO5:PRINT@I*40+80,MID$("DEPTH",I,1):NEXT 115 LINE(15,5)-(25,110),1,B:LINE(13,3)-(27,112),1,B:PSET(14,10):PSET(26,10):PSET(14,70):PSET(26,70) 120 FORI=1TO4:PRINT@I*40+105,MID$("HULL",I,1):NEXT:LINE(160,10)-(170,110),1,BF 125 FORI=1TO4:PRINT@I*40+110,MID$("FUEL",I,1):NEXT:LINE(190,10)-(200,110),1,BF 130 FORI=1TO6:PRINT@I*40+115,MID$("OXYGEN",I,1):NEXT:LINE(220,10)-(230,110),1,BF 140 LINE(50,50)-(90,90),1,B:PSET(70,70) 200 REM INPUT OPTION 205 K$="":K$=INKEY$:C$=K$ 206 IFK$=""THENC$=" ":GOTO500 210 IFINSTR(I$,K$)THENONINSTR(I$,K$)GOTO220,225,250,275,300,325,350,375,400,425,430,435,440ELSE500 'QTDRLFSZXUYIG 220 CM$="QUITTER!":GOTO3000 225 REM TORPEDOES T 226 IFST=0THEN500 227 ST=ST-1:CT=1 245 GOTO500 250 REM DIVE D 255 CD=-1:DV$="DIVING ":GOTO500 275 REM RAISE R 280 CD=1:DV$="RISING ":GOTO500 300 REM LEVEL L 305 CD=0:DV$="LEVEL ":GOTO500 325 REM FORWARD F 330 CF=1:FO$=" FORWARD":GOTO500 350 REM STOP S 355 CF=0:FO$=" STOPPED":GOTO500 375 REM PORT Z 380 SP=SP-1:IFSP=0THENSP=4 381 PA=SP 385 GOTO500 400 REM STARBOARD X 405 SP=SP+1:IFSP=5THENSP=1 406 PA=SP 410 GOTO500 425 REM PERISCOPE U 426 PA=SP:IFUP=1THENUP=0ELSEIFUP=0THENUP=1 427 IFSD>1THENUP=0 429 GOTO500 430 REM SCOPE LEFT Y 431 PA=PA-1:IFPA=0THENPA=4 434 GOTO500 435 REM SCOPE RIGHT I 436 PA=PA+1:IFPA=5THENPA=1 439 GOTO500 440 REM GUN G 441 IFSD=0THENCG=1 442 GOTO500 500 PRINT@416,"CMND: ";C$:GOSUB2005 503 RS=SQR((SX-DX)^2+(SY-DY)^2):RT=SQR(RS^2+(SD)^2) 504 PRESET(XX,YY):XX=DX-SX+50+20:YY=DY-SY+50+20:IFSD=0THENPSET(XX,YY) 505 PSET(70,70) 506 IFSX=DXANDSY=DYANDSD=0THENSH=SH+30:DH=DH+2:CM$="COLLISION!":GOSUB2000 510 REM SCOPE 511 IFUP=0THENLINE(50,10)-(120,40),1,BF:PRINT@101,"+":GOTO600 512 LINE(52,12)-(118,38),0,BF:PRINT@101,HD$(PA) 513 IFSD>1THENUP=0:CM$="SCOPE DOWN":GOTO600 514 IFRS>9.9THEN600 515 IF(ABS(PA-DP)=1ORABS(PA-DP)=3)THENP$=P1$ELSEP$=P2$ 516 IFDH>9THENP$=P3$ 525 ONPAGOTO530,540,550,560 530 IF(ABS(DX-SX)<3ANDDYSX)THENPRINT@130,P$ 545 GOTO600 550 IF(ABS(DX-SX)<3ANDDY>SY)THENPRINT@130,P$ 555 GOTO600 560 IF(ABS(DY-SY)<3ANDDXDB(SX,SY)THENCD=0:SD=DB(SX,SY):DV$="BOTTOM ":CF=0:FO$=" STOPPED" 612 IFSD>5ANDRND(1)>.7THENSH=SH+5:CM$="PRESSURE DAMAGE":SOUND7000,20:GOSUB2010 613 LINE(15,SD/9*90+10)-(25,SD/9*90+10) 700 IFSD>0THENSO=SO+2:LINE(221,11)-(229,SO/100*110+10),0,BF 701 IFSD=0THENSO=SO-2:IFSO<0THENSO=0 702 LINE(221,SO/100*110+11)-(229,110),1,BF 800 DT=0:IFCT=0THEN900 801 IFPA=SPTHENLINE(79,40)-(84,30):LINE(89,40)-(84,30) 802 IF(SD>1ORRT=0ORRND(1)<(RT)/10)THEN900 810 ONSPGOTO830,840,850,860 830 IF(ABS(DX-SX)<2ANDDYSX)THEN880ELSE900 850 IF(ABS(DX-SX)<2ANDDY>SY)THEN880ELSE900 860 IF(ABS(DY-SY)<2ANDDX7ORRND(1)>.6)THEN910 902 DH=DH+1 903 IFUPTHENIFPA=SPTHENPRINT@93,"**" 904 FORI=1TO5:SOUND1500,10:NEXT 905 IFUPTHENPRINT@93," " 910 CG=0 950 IFSH=90THENCM$="HULL CRUSHED":GOTO3000 951 IFSF=90THENCM$="FUEL DEPLETED" 952 IFSO=90THENCM$="OXYGEN DEPLETED":GOTO3000 1000 REM DESTROYER 1001 IFDH>6THENDM=0:CM$="DISABLED" 1002 IFDH>9THEN1010 1003 IF(SD=0ANDRND(1)>RS/10)THENCM$="SURFACE FIRE!":SOUND5000,10:SH=SH+10:GOSUB2010:SOUND5000,10 1004 IF(SD>0ANDRS<10)THENSOUND3000,1 1005 IF(SD>0ANDRS<6ANDRND(1)>RT/10)THENCM$="DEPTH CHARGE!":GOSUB2020 1010 IFDMTHENIFDP=1THENDY=DY-1ELSEIFDP=2THENDX=DX+1ELSEIFDP=3THENDY=DY+1ELSEIFDP=4THENDX=DX-1 1011 IFDMTHENIFCNTHENIFSD>0THENDX=DX-SGN(DX-SX):DY=DY-SGN(DY-SY):DP=SP 1012 IFDX=21THENDX=1ELSEIFDX=0THENDX=20 1013 IFDY=21THENDY=1ELSEIFDY=0THENDY=20 1014 IF(DT=1ORRND(1)>.7)THENDP=DP+INT(RND(1)*3-1):IFDP=0THENDP=4ELSEIFDP=5THENDP=1 1015 CN=CN-1:IFCN<0THENCN=0 1016 IFDH>9ANDSD=0THENCM$="DESTROYER SUNK!":KL=KL+1:GOTO3000 1017 GOSUB2000:GOTO200 2000 REM SUBROUTINES 2001 PRINT@568,SPACE$(16) 2002 PRINT@568,CM$;CHR$(27)"H":CM$="" 2005 PRINT@528,DV$;" ";FO$ 2009 RETURN 2010 IFSH>90THENSH=90 2015 LINE(161,11)-(169,SH/100*110+10),0,BF 2019 RETURN 2020 SOUND3000,10:IFRND(1)>.70THENSH=SH+5:SOUND5000,20:CN=3:GOSUB2010 2025 RETURN 3000 REM FINISH 3001 FORI=1TO30:SOUND300*I,5:NEXT 3005 CLS:PRINTCM$ 3006 IFKL>7THENKL=7 3010 PRINT"KILLS:";KL 3015 PRINT"RANK: ";RK$(KL+1) 3020 IN$="Y":PRINT:INPUT"Continue play (Y/N)";IN$ 3025 IFIN$="Y"THEN100ELSEMENU 5000 CLS:PRINT"SUBWAR.BA V1.2 Copyright Fred Brown 1987":PRINT 5001 PRINT"SUBWAR is a naval simulation in which 5002 PRINT" you take the part of a submarine, " 5003 PRINT" attempting to sink an enemy destroyer 5004 PRINT" in your patrol area. The screen will 5005 PRINT" display the submarine's status, 5006 PRINT" target location when on the surface, 5007 PRINT" and sonar range. Enemy sonar 'pings'" 5008 PRINT" when the sub is within depth charge 5009 PRINT" range. Your assigned patrol area is a 5010 PRINT" 20x20 grid, with oppisite edges 5011 PRINT" attached. The sub must surface to win." 5012 PRINT:LINEINPUT" to continue.";DU$ 6001 CLS:PRINT"The display will indicate the sub's 6002 PRINT" position, sub heading, periscope 6003 PRINT" direction, torpedos remaining, 6004 PRINT" and current command. Submarine depth, 6005 PRINT" seafloor depth and maximum depth are 6006 PRINT" also displayed, as well as hull 6007 PRINT" integrity, fuel and oxygen reserves. 6009 PRINT" Multiple hits are required to sink the 6010 PRINT" destroyer, however, extensive damage 6011 PRINT" will disable it. Ramming will damage 6012 PRINT" both vessels. 6999 PRINT:LINEINPUT" to continue.";DU$ 7000 CLS:PRINT"SUBWAR KEYS" 7002 PRINT" Q: QUIT" 7003 PRINT" T: FIRE TORPEDO" 7004 PRINT" D: DIVE" 7005 PRINT" R: RISE" 7006 PRINT" L: LEVEL" 7007 PRINT" F: FORWARD" 7009 PRINT" G: FIRE SURFACE GUN" 7010 PRINT" S: STOP" 7011 PRINT" Z: SHIP HEADING TO PORT" 7012 PRINT" X: SHIP HEADING TO STARBOARD" 7013 PRINT" U: PERISCOPE UP/DOWN" 7014 PRINT" Y: PERISCOPE TO PORT" 7015 PRINT" I: PERISCOPE TO STARBOARD" 7999 LINEINPUT" to begin.";DU$:RETURN