0 REM - SHOOT BLOCKS GAME - BY JEFFREY STANTON›12 POKE 106,PEEK(106)-12›15 DIM CT(16),L(10),R(10)›20 GOTO 1000›199 REM PUT RANDOM BLOCK ON SCREEN ONCE EVERY SECOND›200 POKE 20,TIMER:POKE 19,0›210 IF PEEK(19)=0 THEN 344›212 POKE 20,TIMER:POKE 19,0›213 REM UP TIMER & PRINT›214 IF TIMER=195 THEN 217›215 HSEC=HSEC+1›216 IF HSEC<2 THEN 220›217 SEC=SEC+1:HSEC=0›220 IF SEC<10 THEN 224›222 SECD=SECD+1:SEC=0:POKE 77,0:REM STOP ATRACT›224 IF SECD<6 THEN 228›226 MIN=MIN+1:SEC=0:SECD=0›228 POKE SCREEN+450,MIN+16:POKE SCREEN+452,SECD+16:POKE SCREEN+453,SEC+16›230 IF RND(0)>0.5 THEN 270›235 RR=INT(RND(0)*10+1)›240 OFFSET=40*RR+L(RR)+1›245 C=L(RR):D=R(RR):IF D-C=1 THEN 230›250 POKE SCREEN+OFFSET,1›260 POKE SCREEN+OFFSET+1,1›265 L(RR)=L(RR)+2›267 GOTO 344›270 RR=INT(RND(0)*10+1)›280 OFFSET=40*RR+R(RR)-1›285 C=L(RR):D=R(RR):IF D-C=1 THEN 270›290 POKE SCREEN+OFFSET,1›300 POKE SCREEN+OFFSET-1,1›305 R(RR)=R(RR)-2›309 REM CHECK IF ANY NEW BLOCK HITS PLAYER›310 IF PEEK(53252)>1 THEN 320:REM PLAYER 0 AGAINST PLAYFIELD›315 IF PEEK(53253)<>2 THEN 344:REM PLAYER 1 AGAINST PLAYFIELD›319 REM SQUASH PLAYER - SINGLE WIDTH›320 IF PLAY=0 THEN 322›321 POKE 53257,0:POKE 53249,X1+8:REM MOVES PLAYER 1 RT 8 UNITS›322 POKE 53256,0›325 FOR DE=1 TO 500:NEXT DE›330 GOTO 1500›343 REM READ JOYSTICK & CALCULATE NEW POSITION›344 Z=STICK(0)›345 IF Z=15 THEN 360›346 IF Z=5 THEN X=X+2:Y=YOLD+4:PLAY=1›347 IF Z=7 THEN X=X+2:PLAY=1›348 IF Z=6 THEN X=X+2:Y=YOLD-4:PLAY=1›349 IF Z=14 THEN Y=YOLD-4›350 IF Z=10 THEN Y=YOLD-4:X=X-2:PLAY=0›351 IF Z=11 THEN X=X-2:PLAY=0›352 IF Z=9 THEN Y=YOLD+4:X=X-2:PLAY=0›353 IF Z=13 THEN Y=YOLD+4›359 REM SET UP CORRECT PLAYER PLOT & CHECK DOESN'T EXIT SCREEN›360 IF Y>32 THEN 364›362 Y=32:GOTO 368›364 IF Y<191 THEN 368›366 Y=190›368 IF X>46 THEN 372›370 X=46:GOTO 380›372 IF X<207 THEN 380›374 X=206›380 IF PLAY=1 THEN X0=10:X1=X:GOTO 384›382 X0=X:X1=10›384 A=USR(1536,0,30,YOLD,Y,X0)›386 A=USR(1536,1,30,YOLD,Y,X1)›390 YOLD=Y›392 REM CHECK IF PLAYER HITS ANY BLOCK AFTER MOVE›394 IF PEEK(53252)>1 THEN 398:REM PLAYER 0 AGAINST PLAYFIELD 1›396 IF PEEK(53253)<>2 THEN 410:REM PLAYER 1 AGAINST PLAYFIELD 1›397 REM SQUASH PLAYER - SINGLE WIDTH›398 IF PLAY=0 THEN 322›399 POKE 53257,0:POKE 53249,X1+8:REM MOVES PLAYER 1 RT 8 UNITS›400 POKE 53256,0›402 FOR DE=1 TO 500:NEXT DE›405 GOTO 1500›409 REM FIRE MISSILE›410 IF STRIG(0)<>0 THEN 600›411 FOR L1=10 TO 4 STEP -0.25›412 SOUND 0,10,0,L1:NEXT L1›413 POKE 77,0›415 ROW=INT((Y-16)/16)›420 IF PLAY=0 THEN 470›430 XM=X+10:YM=Y+16›435 FOR J=1 TO 100›440 XM=XM+2›445 A=USR(1536,4,2,YMOLD,YM,XM)›446 YMOLD=YM›448 IF XM>206 THEN 597›450 IF PEEK(53248)>0 THEN 500›455 NEXT J:GOTO 597›470 XM=X:YM=Y+16›475 FOR J=1 TO 100›480 XM=XM-2›485 A=USR(1536,4,2,YMOLD,YM,XM)›486 YMOLD=YM›488 IF XM<47 THEN 597›490 IF PEEK(53248)>0 THEN 500›495 NEXT J:GOTO 596›499 REM TO REMOVE SHOT BLOCK›500 ROW=INT((Y-16)/16)›502 FOR L1=15 TO 0 STEP -0.5›503 SOUND 0,20,2,L1:NEXT L1›505 POKE 53278,0:REM CLEAR COLLISION REGISTER›510 IF PLAY=1 THEN 560›520 C=L(ROW)›525 IF C=-1 THEN 600›530 OFFSET=40*ROW+C›540 POKE SCREEN+OFFSET,0›550 POKE SCREEN+OFFSET-1,0›554 L(ROW)=L(ROW)-2›555 POKE 53278,0:YM=5›556 A=USR(1536,4,2,YMOLD,YM,10):REM REMOVE MISSILE TO EDGE›557 YMOLD=YM:GOTO 600›560 C=R(ROW)›565 IF C=40 THEN 600›570 OFFSET=40*ROW+C›580 POKE SCREEN+OFFSET,0›590 POKE SCREEN+OFFSET+1,0›595 R(ROW)=R(ROW)+2›596 POKE 53278,0:YM=5›597 A=USR(1536,4,2,YMOLD,YM,10):REM REMOVE MISSILE TO EDGE›598 YMOLD=YM›600 GOTO 210›1000 CB=PEEK(106):CHRSET=CB*256›1005 PM=PEEK(106)+4:PMBASE=PM*256›1010 GRAPHICS 1+16›1020 DLIST=PEEK(560)+PEEK(561)*256›1030 REM CHANGE DISPLAY LIST TO ANTIC 5›1040 FOR I=0 TO 19›1050 READ A:POKE DLIST+I,A:NEXT I›1052 REM POKE IN PM ROUTINE›1053 FOR I=0 TO 150:READ X:POKE 1536+I,X:NEXT I›1055 REM POKE IN PM CLEAR ROUTINE›1056 FOR I=0 TO 25:READ X:POKE 1696+I,X:NEXT I›1059 REM POKE IN HOR DISPLAY LIST INTERUPT ROUTINE›1060 FOR I=0 TO 41:READ X:POKE 1728+I,X:NEXT I›1070 FOR L1=0 TO 511:POKE CHRSET+L1,PEEK(57344+L1):NEXT L1›1075 REM REWRITE 1ST CHARACTER; NOTE 1ST CHARACTER IS NOT THE 0TH CHARACTER›1080 FOR C2=CHRSET+8 TO CHRSET+15:POKE C2,170:NEXT C2›1139 REM SET UP SCREEN›1140 SCREEN=PEEK(88)+PEEK(89)*256›1150 FOR R=1 TO 10:REM 0TH ROW EMPTY›1160 FOR C=0 TO 11›1170 OFFSET=40*R+C›1180 POKE SCREEN+OFFSET,1›1190 NEXT C›1200 FOR C=28 TO 39›1210 OFFSET=40*R+C›1220 POKE SCREEN+OFFSET,1›1230 NEXT C:NEXT R›1232 REM READ TIME DATA LINE›1234 FOR I=0 TO 13:READ A:POKE SCREEN+440+I,A:NEXT I›1236 TIMER=195:HSEC=0›1240 FOR I=1 TO 10›1250 L(I)=11:R(I)=28:NEXT I›1260 POKE 756,CB›1265 POKE 512,192:POKE 513,6:REM VECTOR TO CODE LOCATION FOR DLI›1266 POKE 54286,192:REM ENABLE DISPLAY LIST INTERUPT›1270 REM ACTIVATE P/M›1280 PLAY=1›1290 SETCOLOR 2,0,0›1300 POKE 559,62:REM SET DMACTL -SINGLE LINE›1302 POKE 53277,3:REM SET GRACTL -PLAYERS&MISSILES›1310 A=USR(1696,PMBASE)›1320 POKE 53256,1:POKE 53257,1:REM PLAYERS DOUBLE WIDTH›1325 POKE 53260,1:REM MISSILE 0 DOUBLE WIDTH›1330 POKE 704,216:POKE 705,216:REM PLAYER COLORS›1335 POKE 54279,PM:REM TELL ANTIC PMBASE›1340 POKE 1686,PM:REM POKE HI BYTE PMBASE INTO SUBROUTINE›1350 Y=50:YOLD=50:X0=10:X1=125:X=125›1359 REM READ PM DATA INTO STORAGE AREA›1360 FOR I=0 TO 29›1370 READ VAL:POKE PMBASE+I,VAL:NEXT I›1380 FOR I=0 TO 29›1390 READ VAL:POKE PMBASE+64+I,VAL:NEXT I›1400 REM SELECT KEY CHANGES LEVEL & START BEGINS GAME›1401 REM TIMER=195 SLOW 1 SEC/BLOCK›1402 REM TIMER=225 FAST 1/2 SEC/BLOCK›1403 REM * MARKS DIFFICULT LEVEL›1405 IF PEEK(53279)<>5 THEN 1420›1410 IF TIMER=195 THEN TIMER=225:POKE SCREEN+440,10:GOTO 1420›1415 IF TIMER=225 THEN TIMER=195:POKE SCREEN+440,0›1420 IF PEEK(53279)=6 THEN 1450›1425 FOR DE=1 TO 10:NEXT DE:GOTO 1405›1450 GOTO 200›1499 REM RESET SCREEN FOR REPLAY›1500 FOR R=1 TO 10›1510 FOR C=0 TO 11›1520 OFFSET=40*R+C›1530 POKE SCREEN+OFFSET,1›1540 NEXT C›1550 FOR C=12 TO 27›1560 OFFSET=40*R+C›1570 POKE SCREEN+OFFSET,0›1580 NEXT C›1590 FOR C=28 TO 39›1600 OFFSET=40*R+C›1610 POKE SCREEN+OFFSET,1›1620 NEXT C:NEXT R›1630 FOR I=1 TO 10›1640 L(I)=11:R(I)=28:NEXT I›1650 REM RESET PLAYER TO DOUBLE WIDTH AT CENTER›1670 POKE 53256,1:POKE 53257,1:REM DOUBLE WIDTH›1680 X0=10:X1=125:Y=50:PLAY=1:X=125›1685 HSEC=0:SEC=0:SECD=0:MIN=0›1687 POKE SCREEN+450,MIN+16:POKE SCREEN+452,SECD+16:POKE SCREEN+453,SEC+16›1690 A=USR(1536,0,30,YOLD,Y,X0)›1700 A=USR(1536,1,30,YOLD,Y,X1)›1705 POKE 53278,0:REM CLEAR COLLISION›1710 GOTO 200›1999 REM DISPLAY LIST DATA›2000 DATA 112,112,112,69,128,145,133,133,133,133,133,133,133,133,133,133,7,65,96,145›10000 REM PLAYER SUBROUTINE DATA›10005 DATA 104,162,0,104,104,157,145,6,232,224,5,208,246,173,149,6,174›10006 DATA 145,6,157,0,208,173,150,6›10010 DATA 133,213,24,105,4,133,207,173,145,6,201,4,176,47,170,189,133›10015 DATA 6,133,212,202,48,4,230,207›10020 DATA 208,249,173,147,6,133,206,169,0,168,145,206,200,204,146,6›10025 DATA 144,248,173,148,6,133,206,160,0›10030 DATA 177,212,145,206,200,204,146,6,144,246,96,56,233,4,170,198›10035 DATA 207,173,147,6,133,206,160,0,177›10040 DATA 206,61,137,6,145,206,200,204,146,6,144,243,173,148,6,133,206›10045 DATA 160,0,177,206,29,141,6,145›10050 DATA 206,200,204,146,6,144,243,96,0,64,128,192,252,243,207,63›10055 DATA 3,12,48,192,0,0,0,0,0,0›10069 REM CLEAR PM AREA ROUTINE DATA›10070 DATA 104,104,133,213,104,133,212,162,0,160,0,169,0,145,212,200›10075 DATA 208,251,230,213,232,224,8,144,240,96›10079 REM HOR DISPLAY LIST ROUTINE DATA›10080 DATA 72,138,72,173,11,212,201,32,176,5,169,0,141,223›10085 DATA 6,174,223,6,189,224,6,141,23,208,238›10090 DATA 223,6,104,170,104,64,0›10094 REM COLOR DATA IN ROUTINE›10095 DATA 68,148,20,242,36,180,116,52,164,100›10099 REM "TIME 0:00" DATA›10100 DATA 0,0,0,0,0,52,41,45,37,0,16,26,16,16›10105 REM PLAYER DATA›10110 DATA 24,24,126,126,24,24,56,56,24,24,8,8,28,28,28›10115 DATA 28,252,252,60,60,28,28,8,8,8,8,8,8,56,56›10120 DATA 24,24,126,126,24,24,28,28,24,24,16,16,56,56,56›10125 DATA 56,63,63,60,60,56,56,16,16,16,16,16,16,28,28›