10 FAST :DIM MM(3,3) 20 VA=PEEK(&105)+256*PEEK(&106):CS=PEEK(&103)+256*PEEK(&104)+9 30 FILL 32:VPRINT 4*80+20,"BREAKOUT FROM HAWKEYE GRAFIX" 40 VPRINT 6*80+25,"COPYRIGHT 1980,1981" 50 VPRINT 11*80+11,"SOUNDS GENERATED FOR AY-3-8910 CHIPS ON PORT 128" 60 VPRINT 13*80+12,"(DIGITAL RESEARCH OF TEXAS STEREO SOUND BOARD)" 70 VPRINT 20*80+10,"MOVE YOUR PADDLE BY PRESSING NUMBERS 1 (LEFT) THRU 0 (RIGHT)" 80 VINPUT 22*80+20,"SELECT SPEED 0 THRU 9 (0=FAST) ";,A:DE=A*10 90 VINPUT 22*80+20,"PRESS RETURN WHEN READY TO BEGIN ";,A 100 RESTORE 150 110 REM SET UP VARIOUS PADDLE REFLECTION ANGLES 120 FOR I=0 TO 3:FOR J=0 TO 3 130 READ MM(J,I) 140 NEXT J,I 150 DATA -3,-1,1,3 160 DATA -6,-3,3,6 170 DATA -3,-2,2,3 180 DATA -2,-1,1,2 190 REM SET UP SOUND CONTROL PORTS 200 FOR I=0 TO 12 210 READ C1,C2 220 OUT 128,I:OUT 129,C1 230 OUT 130,I:OUT 131,C2 240 NEXT I 250 DATA 64,10,0,0,0,0,0,0,0,0,0,0,0,0 260 DATA 254,254,16,16,0,0,0,0,87,87,3,3 270 POKE VA+&7FF,12 280 BL=1 290 SC=0 300 FILL 32 310 REM LOAD A LINE OF NULLS TO DETECT OFF BOTTOM OF SCREEN 320 FOR I=VA+1920 TO VA+2000 330 POKE I,0 340 NEXT 350 REM BUILD BORDER AND HEADING 360 FOR I=80 TO 159 370 VPRINT I,CHR$(&7F) 380 NEXT 390 FOR I=2 TO 23 400 VPRINT I*80-1,CHR$(&7F);CHR$(&7F) 410 NEXT 420 VPRINT 24*80-1,CHR$(&7F) 430 VPRINT 10,"BALL:" 440 VPRINT 30,"SCORE:" 450 VPRINT 50,"HIGH SCORE:" 460 REM BUILD BRICK WALL 470 FOR I=0 TO 4 480 FOR J=0 TO 18 490 DRAW J*8+4,54-(3*I),J*8+10,54-(3*I),1 500 NEXT J,I 510 PP=VA+7*80+2:P1=PEEK(PP):P2=PEEK(PP+3) 520 PD$="--------":PA=&6E0+31:VPRINT PA,PD$ 530 REM PF IS PADDLE FUNCTION, 2 FOR FULL SIZE, 1 FOR HALF SIZE 540 PF=2 550 REM BX IS BALL, X POSITION; BY IS BALL Y 560 REM VX IS BALL X VECTOR, VY IS Y 570 BX=INT(RND(1)*75+5) 580 BY=10 590 IF BX<40 THEN VX=1 ELSE VX=-1 600 VY=1 610 REM SP IS SPEED FACTOR, HALVED WHEN TOP WALL IS HIT 620 SP=2 630 VPRINT 61,HS 640 VPRINT 15,BL 650 VPRINT 36,SC 660 PF=2 670 REM FF IS FAST SPEED FLAG, SET FOR HITTING TOP WALL 680 FF=0 690 REM HT IS HIT COUNT, SETS UP DIFFERENT PADDLE ANGLES 700 HT=0 710 REM BN IS BOUNCE FLAG, SET WHEN BALL HITS TOP OF BOARD 720 BN=0 730 REM WAIT HERE FOR STARTING ACTIVITY (PRESS BUTTON) 740 FOR I=0 TO 500:NEXT 750 POKE CS,0 760 VINPUT 80*15+25,"PRESS RETURN TO SERVE ";,AN:VPRINT 80*15+25," " 770 FOR I=0 TO 500:NEXT 780 POKE CS,&FF 790 VPRINT 36,SC 800 SA=CINP(1):SA=SA OR 128:IF SA=OA THEN 880 810 IF SA<176 OR SA>185 THEN 880 820 OA=SA 830 IF SA=176 THEN SA=186 840 SA=SA-177:SA=SA*8+1:IF SA>71 THEN SA=SA-2 850 VPRINT PA," " 860 PA=&6E0+SA 870 VPRINT PA,PD$ 880 SN=SN+1:IF SN78 THEN BX=78:VX=-ABS(VX) 950 BY=BY+VY 960 BP=BY*80+BX 970 IF PEEK(BP+VA)<>32 THEN 1000 980 VPRINT BP,"o" 990 GOTO 800 1000 IT=PEEK(BP+VA) 1010 REM BALL HIT SOMETHING;127 IS TOP OF BOARD;45 IS PADDLE 1020 IF IT=127 THEN VY=-VY:BY=BY+VY:BN=1:GOTO 960 1030 IF IT<>45 THEN 1170 1040 OUT 128,13:OUT 129,0 1050 HT=HT+1:BN=0 1060 IF HT<6 THEN II=0 ELSE II=1 1070 IF HT>11 THEN II=2 1080 IF FF=1 THEN II=3 1090 PP=PA-&6E0 1100 PB=INT((BX-PP)/PF) 1110 IF PB>3 THEN PB=3 1120 IF PB<1 THEN PB=0 1130 VX=MM(PB,II) 1140 VY=-VY 1150 GOTO 920 1160 REM HIT < 128 IS OFF BOTTOM, ELSE HIT BRICK 1170 IF IT=P1 OR IT=P2 THEN 1180 ELSE 1290 1180 OUT 130,13:OUT 131,0 1190 VPRINT BY*80+INT((BX-2)/4)*4+2," " 1200 IF VY=-1 THEN VY=1:GOTO 1220 1210 IF BN=1 THEN BN=0:VY=-1 1220 VPRINT BY*80+BX,"o" 1230 IF BY>7 THEN PT=1 ELSE PT=3 1240 IF BY=5 THEN PT=7 1250 SC=SC+PT 1260 IF PT=7 THEN FF=1:SP=1 1270 GOTO 790 1280 REM BALL LOST 1290 BL=BL+1 1300 IF BL<6 THEN 570 1310 IF SC>HS THEN HS=SC:VPRINT 21*80+30,"NEW HIGH SCORE" 1320 POKE CS,0 1330 VINPUT 19*80+30,"PLAY AGAIN";Y$ 1340 IF LEFT$(Y$,1)="Y" THEN 80 1350 IF LEFT$(Y$,1)="y" THEN 80 1360 END