10 POKE55,0:POKE56,128:CLR:REM MOVE TOP OF MEMORY DOWN TO 32768 20 GOTO5000 97 * 98 * MAIN GAME LOOP 99 * 100 TI$="000000" 110 GETIN$:IFIN$=""GOTO150 120 IFIN$=""THENGOSUB2200 130 IFIN$=""THENGOSUB2400 140 IFIN$=" "THENDC=1 150 R=FNE(.):ONRGOSUB1000,1100,1200,1300,1400,1500,1000,1300:IFDCTHENGOSUB2000 160 IFTI.GOTO1320 1310 X(4)=SW:Y(4)=FNC(.):IFY(4)=Y(5)ORY(4)=Y(6)GOTO1310 1320 POKEHOM+X(4)+SW*Y(4),22:RETURN 1397 * 1398 * MED PLANE 1399 * 1400 A=HOM+X(5)+SW*Y(5):POKEA,BL:POKEA+1,BL:X(5)=X(5)-FND(.):IFX(5)>.GOTO1420 1410 X(5)=39:Y(5)=FNC(.):IFY(5)=Y(4)ORY(5)=Y(6)GOTO1410 1420 A=HOM+X(5)+SW*Y(5):POKEA,23:POKEA+1,24:RETURN 1497 * 1498 * LARGE PLANE 1499 * 1500 A=HOM+X(6)+SW*Y(6):FORI=ATOA+2:POKEI,BL:NEXT 1510 X(6)=X(6)-FNA(.):IFX(6)>.GOTO1530 1520 X(6)=38:Y(6)=FNC(.):IFY(6)=Y(4)ORY(6)=Y(5)GOTO1520 1530 A=HOM+X(6)+SW*Y(6):POKEA,25:POKEA+1,26:POKEA+2,27:RETURN 1997 * 1998 * DEPTH CHARGE 1999 * 2000 POKEFQ,38:POKEWV,TRI:PK%=PEEK(D):IFPK%<>BLANDPK%<>63GOTO2030 2010 POKED,BL:D=D+SW:IFD>33767GOTO2040 2020 PK%=PEEK(D):IFPK%=BLTHENPOKED,63:POKEWV,.:RETURN 2030 C=D:GOSUB3000 2040 D=33266:DC=.:POKEWV,.:RETURN 2197 * 2198 * LEFT GUN 2199 * 2200 POKEFQ,10:POKEWV,NOI:POKE33141,42:FORI=1TO10:NEXT:C=.:POKEWV,. 2210 FORI=33100TO32813STEP-41:POKEI+41,BL:PK%=PEEK(I):IFPK%=BLTHENPOKEI,40:NEXT 2220 IFPK%<>BLTHENC=I:I=32772:NEXT 2230 IFCTHENGOSUB3000:RETURN 2240 POKE32813,BL:RETURN 2397 * 2398 * RIGHT GUN 2399 * 2400 POKEFQ,9:POKEWV,NOI:POKE33151,42:FORI=1TO10:NEXT:C=.:POKEWV,. 2410 FORI=33112TO32839STEP-39:POKEI+39,BL:PK%=PEEK(I):IFPK%=BLTHENPOKEI,41:NEXT 2420 IFPK%<>BLTHENC=I:I=32800:NEXT 2430 IFCTHENGOSUB3000:RETURN 2440 POKE32839,BL:RETURN 2997 * 2998 * PLANE OR SUB HIT 2999 * 3000 T=PK%:EX=62+(T<28):GOSUB3500:TG=6:IFT=23ORT=24THENTG=5:GOTO3050 3010 IFT>36ANDT<40THENTG=3:GOTO3050 3020 IFT=35ORT=36THENTG=2:GOTO3050 3030 IFT=22THENTG=4 3040 IFT=34THENTG=1 3050 TPT=TPT+PT(TG):PRINT"[145]";SL$;TPT;" ":X(TG)=-SW*(TG<4):RETURN 3497 * 3498 * EXPLOSION 3499 * 3500 POKEWV,SAW:IFEX=62THENPOKEWV,TRI 3510 FORI=C-2TOC+2:POKEI,BL:NEXT:POKEC,42 3520 FORI=C-SWTOC+SWSTEPSW:FORI2=-1TO1:A=I+I2:IFPEEK(A)=BLTHENPOKEA,EX 3530 POKEFQ,20-10*I2:NEXTI2,I:POKEWV,. 3540 FORI=C-SWTOC+SWSTEPSW:FORI2=-1TO1:A=I+I2:IFPEEK(A)=EXTHENPOKEA,BL 3550 NEXTI2,I:POKEC,BL:RETURN 4997 * 4998 * INITIALIZE 4999 * 5000 PRINT "[147]INITIALIZING......" 5010 POKE 53280,11:POKE 53281,1:REM SET SCREEN COLORS 5011 FORT=55296TO56319:POKET,0:NEXT 5015 REM SET SOUND VOICE #1 5020 POKE 54296,15:REM VOLUME 5030 POKE 54277,0:REM ATTACK-DECAY 5040 POKE 54278,240:REM SUSTAIN RELEASE 5050 POKE 54272,100:REM LO FREQ. 5060 FQ=54273:REM HI FREQ. REGISTER 5070 WV=54276:REM WAVE FORM REGISTER 5080 NOI=129:SAW=33:TRI=17:REM WAVE FORM VALUES 5090 HOM=32727:D=33266:REM SCREEN LOCATIONS 5100 TLIM=10800:REM TIME LIMIT (JIFFIES) 5110 BL=32:SW=40:REM VALUE TO POKE BLANK, SCREEN WIDTH 5115 REM SET RANDOM VALUE FUNCTIONS 5120 DEF FN A(R)=INT(RND(R)*3+1) 5130 DEF FN B(R)=INT(RND(R)*9+15) 5140 DEF FN C(R)=INT(RND(R)*6+3) 5150 DEF FN D(R)=INT(RND(R)*2+1) 5160 DEF FN E(R)=INT(RND(R)*8+1) 5170 ST$="":FORI=1TO11:READA:ST$=ST$+CHR$(A):NEXT:REM TOP OF SHIP 5180 DATA 32,66,69,70,73,74,77,78,81,82,32 5190 SB$="":FORI=1TO11:READA:SB$=SB$+CHR$(A):NEXT:REM BOTTEM OF SHIP 5200 DATA 67,68,71,72,75,76,79,80,83,84,85 5210 SL$="":FORI=43TO47:SL$=SL$+CHR$(I):NEXT:REM SCORE DISPLAY LINE 5220 FORI=1TO6:READPT(I):NEXT:REM POINT VALUES 5230 DATA 150,40,25,75,20,15 5240 GOSUB 8000:REM READ, POKE CUSTOM CHARACTER SET 5250 GOTO 6000 5997 * 5998 * BEGIN GAME 5999 * 6000 X=RND(-TI):PRINT "[147][151] - BATTLESHIP WAR - BY KEITH MEADE " 6010 PRINT " YOU ARE IN COMMAND OF A BATTLESHIP." 6020 PRINT " YOU HAVE 3 MINUTES TO DESTROY AS MANY" 6030 PRINT " ENEMY SUBS AND PLANES AS POSSIBLE." 6040 PRINT " POINT VALUES:" 6050 PRINT " SMALL SUB = 150[146] SMALL PLANE = 75" 6060 PRINT " MED SUB = 40 MED PLANE = 20" 6070 PRINT " LARGE SUB = 25 LARGE PLANE = 15" 6080 PRINT " CURSOR KEYS FIRE THE CANNONS." 6090 PRINT " SPACE BAR RELEASES A DEPTH CHARGE." 6100 FOR X=1 TO 40:NEXT 6110 PRINT "[145] PRESS ANY KEY TO BEGIN PLAY" 6120 FOR X=1 TO 40:NEXT 6130 PRINT "[145] PRESS ANY KEY TO BEGIN PLAY" 6140 GET IN$:IF IN$="" GOTO 6100 6150 PRINT "[147]" 6160 SCRAM=0:CHSET=2:REM SCREEN RAM, CHAR SET LOCATION VALUES 6170 GOSUB 10000:REM MOVE VIDEO BLOCK, ETC. 6175 REM DRAW GAME DISPLAY 6180 POKE 53281,5:PRINT "[147]":POKE 53281,1:REM CLEAR, SET COLOR RAM 6190 FORI=55296TO55695:POKEI,11:NEXT:REM CHANGE SOME COLOR RAM 6200 PRINT "[154]";:FORI=1TO40:PRINTCHR$(65);:NEXT:REM WATER LINE 6210 PRINT "[145][145][152]";SPC(13);ST$:REM SHIP TOP 6220 PRINT SPC(13);SB$:REM SHIP BOTTEM 6230 PRINT "[151]";SL$;TPT:REM SCORE LINE 6240 FOR I=1 TO 3:X(I)=39:X(I+3)=0:NEXT:REM RESET TARGET POSITIONS 6245 POKE53281,15 6250 GOTO 100 6997 * 6998 * GAME OVER 6999 * 7000 POKE 53281,7:REM CHANGE SCREEN COLOR 7010 FOR I=1 TO 2000:NEXT:REM WAIT 7020 POKE 53281,1:REM RESTORE SCREEN COLOR 7030 PRINT"[147]" 7040 GOSUB 10100:REM RESTORE VIDEO LOCATION 7050 POKE 53272,(PEEK(53272) AND 240)+5:REM RESTORE STANDARD CHARACTER SET 7060 PRINT "[147]TIME'S UP!!" 7070 IF TPT>HIGAME THEN HIGAME=TPT 7080 PRINT "YOUR SCORE =";TPT 7090 PRINT "HIGH SCORE =";HIGAME 7100 PRINT "ANOTHER GAME? (Y OR N)" 7110 GET IN$:IF IN$="Y" THEN TPT=0:GOTO 6000 7120 IF IN$<>"N" GOTO 7110 7130 END 7997 * 7998 * POKE CUSTOM CHAR DATA 7999 * 8000 M=34816 8010 FORLIN=8040TO8350STEP10:TT=0:FORI=1TO16:READA:POKEM,A:M=M+1:TT=TT+A:NEXT 8020 READA:IFTT<>ATHENPRINT"ERROR IN LINE";LIN:STOP 8030 NEXT:RETURN 8040 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,204,170,51,425 8050 DATA 192,96,48,24,12,2,10,10,0,0,170,255,127,59,21,14,1040 8060 DATA 10,10,170,255,255,187,85,238,0,0,0,0,0,128,160,160,1658 8070 DATA 10,10,10,10,10,255,255,204,160,160,170,255,255,187,85,238,2274 8080 DATA 204,255,170,255,255,187,85,238,138,138,138,138,138,255,255,204,3053 8090 DATA 138,138,138,138,138,255,255,204,204,255,170,255,255,187,85,238,3053 8100 DATA 204,255,170,255,255,187,85,238,138,138,138,138,138,255,255,204,3053 8110 DATA 138,138,138,138,138,255,255,204,204,255,170,255,255,187,85,238,3053 8120 DATA 204,255,170,255,255,187,85,238,128,128,128,128,128,193,197,197,2876 8130 DATA 3,6,12,24,48,80,84,84,197,197,170,255,255,187,85,238,1925 8140 DATA 84,84,170,255,255,187,85,238,0,0,170,254,252,184,80,224,2522 8150 DATA 0,48,49,255,255,49,48,0,3,6,12,255,255,6,3,1,1245 8160 DATA 1,3,7,255,255,0,0,128,0,0,0,42,170,170,0,0,1031 8170 DATA 40,80,160,170,170,170,80,40,1,2,5,170,169,170,10,2,1439 8180 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 8190 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 8200 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 8210 DATA 0,12,12,255,255,0,0,0,0,0,0,0,255,127,63,0,979 8220 DATA 0,224,224,224,255,255,254,0,0,0,0,0,170,170,42,10,1828 8230 DATA 2,2,2,2,170,170,170,170,128,128,128,128,168,170,170,168,1876 8240 DATA 128,64,32,16,8,4,2,1,1,2,4,8,16,32,64,128,510 8250 DATA 0,146,84,56,214,56,84,146,112,249,193,241,121,25,249,240,2216 8260 DATA 225,243,131,131,131,131,243,225,227,243,51,51,51,51,243,227,2604 8270 DATA 227,51,51,227,227,51,51,51,224,224,15,207,192,15,239,224,2276 8280 DATA 60,102,102,102,102,102,60,0,24,24,24,24,24,24,24,0,798 8290 DATA 124,6,6,12,48,96,126,0,124,6,6,28,6,6,124,0,718 8300 DATA 102,102,102,127,6,6,6,0,126,96,96,124,6,6,124,0,1029 8310 DATA 60,96,96,124,102,102,60,0,126,6,12,24,24,24,24,0,880 8320 DATA 60,102,102,60,102,102,60,0,60,102,102,62,6,6,60,0,986 8330 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 8340 DATA 0,0,0,0,0,0,0,0,192,6,48,0,3,192,12,0,453 8350 DATA 112,216,112,0,14,27,14,0,0,0,0,60,126,60,0,0,741 9995 * 9996 * MOVE VIDEO BLOCK TO #3 9997 * SET SCREEN RAM AND 9998 * CHAR SET LOCATIONS 9999 * 10000 IF SCRAM<0 OR SCRAM>15 THEN PRINT " SCREEN RAM LOCATION ERROR ":STOP 10010 IF CHSET<0 OR CHSET>15 THEN CHSET=4 10020 POKE 56576,5:REM VIDEO BLOCK LOCATION 10030 POKE 53272,16*SCRAM+CHSET:REM SCREEN RAM,CHAR SET LOCATION 10040 POKE 648,128+4*SCRAM:REM NOTIFY BASIC 10050 RETURN 10097 * 10098 * RESTORE VIDEO TO NORMAL 10099 * 10100 POKE 56576,7:REM VIDEO BLOCK 10110 POKE 53272,20:REM SCREEN RAM, CHAR SET 10120 POKE 648,4:REM BASIC'S SCREEN LOCATION 10130 RETURN