10 REM RED SQUARES 20 REM BY MARC ABRAMOWITZ 30 REM (C)1989, ANTIC PUBLISHING INC. 40 REM (DO NOT RENUMBER THIS PROGRAM) 70 GOTO 120 80 RETURN 100 BRK=USR(ADR("hMhhp`"),1) 105 POKE 708,54:POKE 711,34:POKE 709,10:RETURN 120 DIM NAME$(10):GOSUB 8000 130 POKE 106,PEEK(740)-5:GRAPHICS 17:GOSUB 100 135 CHSET=(PEEK(106)+1)*256 140 JUNK=USR(MOV,57344,CHSET,1024) 160 FOR I=0 TO 7:POKE CHSET+520+I,255:POKE CHSET+8+I,255:POKE CHSET+512+I,0:NEXT I 170 DIM X(15):FOR I=0 TO 15:X(I)=80:NEXT I:X(7)=3000:X(11)=4000:X(6)=3000 171 X(0)=3000:X(1)=4000 175 X(10)=4000:X(5)=3000:X(9)=4000:X(0)=3000:X(1)=4000 180 GOTO 7000 199 REM DRAW BOARD 200 GRAPHICS 17:GOSUB 100:SCORE=0:LINES=0:POKE 756,CHSET/256+2:IF HEIGHT=0 THEN 207 201 FOR Y=17 TO 18-HEIGHT STEP -1:FOR X=3 TO 16:R=INT(2*RND(1)+1):IF R=1 THEN 206 202 R=INT(4*RND(1)+1):POSITION X,Y:IF R=1 THEN ? #6;"!" 203 IF R=2 THEN ? #6;"" 204 IF R=3 THEN ? #6;"" 205 IF R=4 THEN ? #6;"" 206 NEXT X:NEXT Y 207 FOR Y=0 TO 18:POSITION 0,Y:? #6;" |":POSITION 17,Y:? #6;"| ":NEXT Y 208 FOR X=2 TO 17:POSITION X,18:? #6;"":NEXT X 209 POSITION 2,18:? #6;"":POSITION 17,18:? #6;"" 210 X=10:Y=0:SHAPE=INT(RND(0)*7)+1:POKE 77,0 220 Y=Y+1 230 TR=STRIG(0):KEY=PEEK(764) 240 GOSUB X(PEEK(632)):IF KEY<2 THEN GOSUB X(KEY) 255 IF (TR=0 OR KEY=5) AND Y>3 THEN GOSUB 2000 260 POSITION X,Y:POKE 764,255 270 IF SHAPE=1 THEN ? #6;"!":GOTO 370 280 IF SHAPE=2 THEN ? #6;"!":POSITION X,Y-1:? #6;"":GOTO 370 290 IF SHAPE=3 THEN ? #6;"!":POSITION X,Y-1:? #6;"":GOTO 370 300 IF SHAPE=4 THEN ? #6;"!":POSITION X+2,Y-1:? #6;"":GOTO 370 310 IF SHAPE=5 THEN ? #6;"!":POSITION X-1,Y-1:? #6;"":GOTO 370 320 IF SHAPE=6 THEN ? #6;"!":POSITION X+1,Y-1:? #6;"":GOTO 370 322 IF SHAPE=7 THEN ? #6;"!":POSITION X-1,Y-1:? #6;"":GOTO 370 323 IF SHAPE=8 AND Y>2 THEN GOSUB 1300:GOTO 370 324 IF SHAPE=9 AND Y>1 THEN ? #6;"!":POSITION X+1,Y-1:? #6;"":POSITION X+1,Y-2:? #6;"":GOTO 370 325 IF SHAPE=10 AND Y>1 THEN ? #6;"!":POSITION X,Y-1:? #6;"":POSITION X-1,Y-2:? #6;"":GOTO 370 326 IF SHAPE=11 AND Y>1 THEN ? #6;"!":POSITION X,Y-1:? #6;"":POSITION X+1,Y-2:? #6;"":GOTO 370 327 IF SHAPE=12 AND Y>1 THEN ? #6;"!":POSITION X-1,Y-1:? #6;"":POSITION X-1,Y-2:? #6;"":GOTO 370 328 IF SHAPE=13 AND Y>1 THEN ? #6;"!":POSITION X,Y-1:? #6;"":POSITION X,Y-2:? #6;"":GOTO 370 329 IF SHAPE=14 THEN ? #6;"!":POSITION X-2,Y-1:? #6;"":GOTO 370 330 IF SHAPE=15 THEN ? #6;"!":POSITION X,Y-1:? #6;"":GOTO 370 331 IF SHAPE=16 THEN ? #6;"!":POSITION X+1,Y-1:? #6;"":GOTO 370 332 IF SHAPE=17 AND Y>1 THEN ? #6;"!":POSITION X,Y-1:? #6;"":POSITION X,Y-2:? #6;"":GOTO 370 333 IF SHAPE=18 AND Y>1 THEN ? #6;"!":POSITION X,Y-1:? #6;"":POSITION X,Y-2:? #6;"":GOTO 370 334 IF SHAPE=19 AND Y>1 THEN ? #6;"!":POSITION X-1,Y-1:? #6;"":POSITION X,Y-2:? #6;"" 370 FOR D=1 TO SPEED:NEXT D 500 Z1=32:Z2=32:Z3=32:Z4=32:LOCATE X,Y+1,Z1 510 IF SHAPE=1 THEN LOCATE X+1,Y+1,Z2:LOCATE X+2,Y+1,Z3:LOCATE X+3,Y+1,Z4:GOTO 700 520 IF SHAPE=2 THEN LOCATE X+1,Y+1,Z2:GOTO 700 530 IF SHAPE=3 THEN LOCATE X+1,Y+1,Z2:LOCATE X+2,Y+1,Z3:GOTO 700 540 IF SHAPE=4 THEN LOCATE X+1,Y+1,Z2:LOCATE X+2,Y+1,Z3:GOTO 700 550 IF SHAPE=5 THEN LOCATE X+1,Y+1,Z2:LOCATE X-1,Y,Z3:GOTO 700 560 IF SHAPE=6 THEN LOCATE X+1,Y+1,Z2:LOCATE X+2,Y,Z3:GOTO 700 570 IF SHAPE=7 THEN LOCATE X-1,Y,Z2:LOCATE X+1,Y,Z3:GOTO 700 590 IF SHAPE=9 THEN LOCATE X+1,Y+1,Z2:GOTO 700 600 IF SHAPE=10 THEN LOCATE X-1,Y-1,Z2:GOTO 700 610 IF SHAPE=11 THEN LOCATE X+1,Y,Z2:GOTO 700 620 IF SHAPE=12 THEN LOCATE X-1,Y,Z2:GOTO 700 621 IF SHAPE=13 THEN LOCATE X+1,Y,Z2:GOTO 700 622 IF SHAPE=14 THEN LOCATE X-1,Y,Z2:LOCATE X-2,Y,Z3:GOTO 700 623 IF SHAPE=15 THEN LOCATE X+1,Y,Z2:LOCATE X+2,Y,Z3:GOTO 700 624 IF SHAPE=16 THEN LOCATE X+1,Y+1,Z2:LOCATE X+2,Y+1,Z3:GOTO 700 625 IF SHAPE=17 THEN LOCATE X+1,Y-1,Z2:GOTO 700 626 IF SHAPE=18 THEN LOCATE X+1,Y+1,Z2:GOTO 700 627 IF SHAPE=19 THEN LOCATE X-1,Y,Z2 700 IF Z1<>32 OR Z2<>32 OR Z3<>32 OR Z4<>32 THEN POP :SCORE=SCORE+1:GOSUB 5000:GOTO 207 1000 POSITION X,Y:IF SHAPE=1 THEN ? #6;" " 1010 IF SHAPE=2 THEN ? #6;" ":POSITION X,Y-1:? #6;" " 1020 IF SHAPE=3 THEN ? #6;" ":POSITION X,Y-1:? #6;" " 1030 IF SHAPE=4 THEN ? #6;" ":POSITION X+2,Y-1:? #6;" " 1040 IF SHAPE=5 THEN ? #6;" ":POSITION X-1,Y-1:? #6;" " 1050 IF SHAPE=6 THEN ? #6;" ":POSITION X+1,Y-1:? #6;" " 1060 IF SHAPE=7 THEN ? #6;" ":POSITION X-1,Y-1:? #6;" " 1061 IF SHAPE=8 AND Y>2 THEN ? #6;" ":POSITION X,Y-1:? #6;" ":POSITION X,Y-2:? #6;" ":POSITION X,Y-3:? #6;" " 1062 IF SHAPE=9 AND Y>1 THEN ? #6;" ":POSITION X+1,Y-1:? #6;" ":POSITION X+1,Y-2:? #6;" " 1063 IF SHAPE=10 AND Y>1 THEN ? #6;" ":POSITION X,Y-1:? #6;" ":POSITION X-1,Y-2:? #6;" " 1064 IF SHAPE=11 AND Y>1 THEN ? #6;" ":POSITION X,Y-1:? #6;" ":POSITION X+1,Y-2:? #6;" " 1065 IF SHAPE=12 AND Y>1 THEN ? #6;" ":POSITION X-1,Y-1:? #6;" ":POSITION X-1,Y-2:? #6;" " 1066 IF SHAPE=13 AND Y>1 THEN ? #6;" ":POSITION X,Y-1:? #6;" ":POSITION X,Y-2:? #6;" " 1067 IF SHAPE=14 THEN ? #6;" ":POSITION X-2,Y-1:? #6;" " 1068 IF SHAPE=15 THEN ? #6;" ":POSITION X,Y-1:? #6;" " 1069 IF SHAPE=16 THEN ? #6;" ":POSITION X+1,Y-1:? #6;" " 1070 IF SHAPE=17 AND Y>1 THEN ? #6;" ":POSITION X,Y-1:? #6;" ":POSITION X,Y-2:? #6;" " 1071 IF SHAPE=18 AND Y>1 THEN ? #6;" ":POSITION X,Y-1:? #6;" ":POSITION X,Y-2:? #6;" " 1072 IF SHAPE=19 AND Y>1 THEN ? #6;" ":POSITION X-1,Y-1:? #6;" ":POSITION X,Y-2:? #6;" " 1200 GOTO 220 1300 ? #6;"!":POSITION X,Y-1:? #6;"":POSITION X,Y-2:? #6;"":POSITION X,Y-3:? #6;"":RETURN 2000 IF SHAPE=1 THEN SHAPE=8:RETURN 2005 IF SHAPE=2 AND X<16 THEN RETURN 2010 IF SHAPE=3 AND X<16 THEN SHAPE=9:RETURN 2011 IF SHAPE=4 AND X>3 THEN SHAPE=10:RETURN 2012 IF SHAPE=5 AND X<16 THEN SHAPE=11:RETURN 2013 IF SHAPE=6 AND X>3 THEN SHAPE=12:RETURN 2014 IF SHAPE=7 AND X<16 THEN SHAPE=13:RETURN 2020 IF SHAPE=8 AND X<14 THEN SHAPE=1:RETURN 2030 IF SHAPE=11 AND X>3 AND X<16 THEN SHAPE=5:RETURN 2040 IF SHAPE=12 AND X<16 THEN SHAPE=6:RETURN 2050 IF SHAPE=9 AND X>4 THEN SHAPE=14:RETURN 2060 IF SHAPE=10 AND X<15 THEN SHAPE=15:RETURN 2070 IF SHAPE=13 AND X<15 THEN SHAPE=16:RETURN 2080 IF SHAPE=14 AND X<16 THEN SHAPE=17:RETURN 2090 IF SHAPE=15 AND X<16 THEN SHAPE=18:RETURN 2100 IF SHAPE=16 AND X>3 THEN SHAPE=19:RETURN 2110 IF SHAPE=17 AND X<15 THEN SHAPE=3:RETURN 2120 IF SHAPE=18 AND X<15 THEN SHAPE=4:RETURN 2130 IF SHAPE=19 AND X>3 THEN SHAPE=7:RETURN 2980 RETURN 3000 Z1=32:Z2=32:Z3=32 3010 IF SHAPE=1 THEN LOCATE X+4,Y,Z1:GOTO 3890 3020 IF SHAPE=2 THEN LOCATE X+2,Y,Z1:LOCATE X+2,Y-1,Z2:GOTO 3890 3030 IF SHAPE=3 THEN LOCATE X+3,Y,Z1:GOTO 3890 3040 IF SHAPE=4 THEN LOCATE X+3,Y-1,Z1:LOCATE X+3,Y,Z2:GOTO 3890 3050 IF SHAPE=5 THEN LOCATE X+2,Y,Z1:LOCATE X+1,Y-1,Z2:GOTO 3890 3060 IF SHAPE=6 THEN LOCATE X+3,Y-1,Z1:LOCATE X+2,Y,Z2:GOTO 3890 3065 IF SHAPE=7 THEN LOCATE X+1,Y,Z1:LOCATE X+2,Y-1,Z2:GOTO 3890 3066 IF SHAPE=8 THEN LOCATE X+1,Y,Z1:LOCATE X+1,Y-1,Z2:LOCATE X+1,Y-2,Z3:LOCATE X+1,Y-3,Z4:GOTO 3890 3067 IF SHAPE=9 THEN LOCATE X+2,Y,Z1:LOCATE X+2,Y-1,Z2:LOCATE X+2,Y-2,Z3:GOTO 3890 3068 IF SHAPE=10 THEN LOCATE X+1,Y,Z1:LOCATE X+1,Y-1,Z2:LOCATE X+1,Y-2,Z3:GOTO 3890 3069 IF SHAPE=11 THEN LOCATE X+1,Y,Z1:LOCATE X+2,Y-1,Z2:LOCATE X+2,Y-2,Z3:GOTO 3890 3070 IF SHAPE=12 THEN LOCATE X+1,Y,Z1:LOCATE X+1,Y-1,Z2:LOCATE X,Y-2,Z3:GOTO 3890 3071 IF SHAPE=13 THEN LOCATE X+1,Y,Z1:LOCATE X+2,Y-1,Z2:LOCATE X+1,Y-2,Z3:GOTO 3890 3072 IF SHAPE=14 THEN LOCATE X+1,Y,Z1:LOCATE X+1,Y-1,Z2:GOTO 3890 3073 IF SHAPE=15 THEN LOCATE X+1,Y,Z1:LOCATE X+3,Y-1,Z2:GOTO 3890 3074 IF SHAPE=16 THEN LOCATE X+3,Y,Z1:LOCATE X+2,Y-1,Z2:GOTO 3890 3075 IF SHAPE=17 THEN LOCATE X+1,Y,Z1:LOCATE X+1,Y-1,Z2:LOCATE X+2,Y-2,Z3:GOTO 3890 3076 IF SHAPE=18 THEN LOCATE X+2,Y,Z1:LOCATE X+1,Y-1,Z2:LOCATE X+1,Y-2,Z3:GOTO 3890 3077 IF SHAPE=19 THEN LOCATE X+1,Y,Z1:LOCATE X+1,Y-1,Z2:LOCATE X+1,Y-2,Z3 3890 IF Z1=32 AND Z2=32 AND Z3=32 THEN X=X+1 3900 RETURN 4000 Z1=32:Z2=32:Z3=32:LOCATE X-1,Y,Z1 4010 IF SHAPE=1 THEN LOCATE X-1,Y,Z1:GOTO 4880 4020 IF SHAPE=2 THEN LOCATE X-1,Y-1,Z2:GOTO 4880 4030 IF SHAPE=3 THEN LOCATE X-1,Y-1,Z2:GOTO 4880 4040 IF SHAPE=4 THEN LOCATE X+1,Y-1,Z2:GOTO 4880 4050 IF SHAPE=5 THEN LOCATE X-2,Y-1,Z2:GOTO 4880 4060 IF SHAPE=6 THEN LOCATE X,Y-1,Z2:GOTO 4880 4065 IF SHAPE=7 THEN LOCATE X-2,Y-1,Z2:GOTO 4880 4066 IF SHAPE=8 THEN LOCATE X-1,Y-1,Z2:LOCATE X-1,Y-2,Z3:LOCATE X-1,Y-3,Z4:GOTO 4880 4067 IF SHAPE=9 THEN LOCATE X,Y-1,Z2:LOCATE X,Y-2,Z3:GOTO 4880 4068 IF SHAPE=10 THEN LOCATE X-1,Y-1,Z2:LOCATE X-2,Y-2,Z3:GOTO 4880 4069 IF SHAPE=11 THEN LOCATE X-1,Y-1,Z2:LOCATE X,Y-2,Z3:GOTO 4880 4070 IF SHAPE=12 THEN LOCATE X-2,Y-1,Z2:LOCATE X-2,Y-2,Z3:GOTO 4880 4071 IF SHAPE=13 THEN LOCATE X-1,Y-1,Z2:LOCATE X-1,Y-2,Z3:GOTO 4880 4072 IF SHAPE=14 THEN LOCATE X-3,Y-1,Z2:GOTO 4880 4073 IF SHAPE=15 THEN LOCATE X-1,Y-1,Z2:GOTO 4880 4074 IF SHAPE=16 THEN LOCATE X,Y-1,Z2:GOTO 4880 4075 IF SHAPE=17 THEN LOCATE X-1,Y-1,Z2:LOCATE X-1,Y-2,Z3:GOTO 4880 4076 IF SHAPE=18 THEN LOCATE X-1,Y-1,Z2:LOCATE X-1,Y-2,Z3:GOTO 4880 4077 IF SHAPE=19 THEN LOCATE X-2,Y-1,Z2:LOCATE X-1,Y-2,Z3 4880 IF Z1=32 AND Z2=32 AND Z3=32 THEN X=X-1 4890 RETURN 5000 IF Y<=1 THEN POP :GOTO 6000 5010 REM 5020 FOR Y=17 TO 0 STEP -1 5030 X=3 5040 LOCATE X,Y,Z1 5050 IF Z1=32 THEN 5080 5060 IF X<16 THEN X=X+1:GOTO 5040 5070 FOR S=2 TO 17:POKE 712,(S*8)+4:SOUND 0,S*10,0,(17-S):NEXT S:POKE 712,0 5071 SOUND 0,0,0,0:POSITION 3,Y:? #6;" "; 5072 FOR Y2=Y TO 1 STEP -1:ZF=0:FOR X=3 TO 16:LOCATE X,Y2-1,Z1:IF Z1=32 THEN ZF=ZF+1 5073 IF ZF=14 THEN POP :POP :GOTO 5079 5074 POSITION X,Y2:? #6;CHR$(Z1):POSITION X,Y2-1:? #6;" " 5075 NEXT X:NEXT Y2 5079 LINES=LINES+1:SCORE=SCORE+10*(18-Y):SPEED=SPEED-5:GOTO 5030 5080 NEXT Y 5090 RETURN 5959 IF Z1=32 THEN 5080 6000 GRAPHICS 18:GOSUB 100:LINE$="":X=4:Y=4:GOSUB 7170 6010 FOR D=1 TO 500:NEXT D 6020 LINE$="LINES: ":LINE$(LEN(LINE$)+1)=STR$(LINES):Y=5:LINE$(LEN(LINE$)+1)=" ":GOSUB 7170 6030 LINE$="SCORE: ":LINE$(LEN(LINE$)+1)=STR$(SCORE):Y=4:GOSUB 7170 6040 LINE$="press start":LL=5:RL=7:X=3:Y=7 6050 GOSUB 7200 6090 POKE 709,PEEK(20):IF PEEK(53279)<>6 AND STRIG(0)=1 THEN 6090 6100 GOTO 7150 7000 GRAPHICS 18:GOSUB 100:DIM LINE$(20) 7010 LINE$="RED SQUARES":X=3:Y=4:GOSUB 7170 7040 LINE$="by marc abramowitz":X=0:Y=6:LL=9:RL=10:GOSUB 7200 7050 LINE$="" 7120 FOR L=1 TO 11:FOR F=9 TO 8 STEP -1:POSITION 3+L,F+1:? #6;" ":SOUND 0,F*25,10,8:POSITION 3+L,F 7130 ? #6;LINE$(L,L):NEXT F:NEXT L 7140 SOUND 0,0,0,0 7150 POKE 711,PEEK(20):IF PEEK(53279)<>6 AND STRIG(0) THEN 7150 7155 GOSUB 9000:GOTO 200 7170 FOR L=1 TO LEN(LINE$):POSITION X+L,Y:FOR F=15 TO 0 STEP -5 7175 SOUND 0,F*(255/Y),10,F:NEXT F:? #6;LINE$(L,L):NEXT L 7180 SOUND 0,0,0,0:RETURN 7200 FOR I=1 TO X+LL:POSITION I-1,Y:? #6;" ":SOUND 0,I*10,10,8:POSITION I,Y:? #6;LINE$(LL,LL):NEXT I 7210 FOR I=18 TO X+RL STEP -1:POSITION I+1,Y:? #6;" ":SOUND 0,I*10,10,8:POSITION I,Y:? #6;LINE$(RL,RL):NEXT I 7220 SOUND 0,0,0,0:LL=LL-1:RL=RL+1:IF LL<=0 THEN RETURN 7230 GOTO 7200 8000 REM * ML MOVE ROUTINE * 8010 MOV=ADR("hhhhhhh`") 8020 RETURN 9000 GRAPHICS 2:GOSUB 100:SPEED=1:HEIGHT=0:? :POKE 657,3:? "USE CONSOLE KEYS OR JOYSTICK TO" 9005 POKE 657,13:? "SELECT OPTIONS":POKE 710,0:POKE 755,0 9010 POSITION 1,5:? #6;"select - SPEED" 9020 POSITION 1,6:? #6;"option - HEIGHT" 9025 POSITION 1,7:? #6;"start - BEGIN GAME" 9030 POSITION 1,2:? #6;"SPEED (1-50): ";SPEED;" " 9040 POSITION 1,3:? #6;"HEIGHT (0-10): ";HEIGHT;" " 9050 ST=PEEK(632):CON=PEEK(53279) 9051 IF PEEK(53279)=6 OR STRIG(0)=0 THEN 9150 9052 IF ST=15 AND CON=7 AND STRIG(0)=1 THEN 9050 9054 FOR V=15 TO 0 STEP -1.5:SOUND 0,50,10,V:NEXT V 9060 IF ST=14 OR CON=5 THEN SPEED=SPEED+1 9070 IF ST=13 THEN SPEED=SPEED-1 9080 IF ST=7 OR CON=3 THEN HEIGHT=HEIGHT+1 9090 IF ST=11 THEN HEIGHT=HEIGHT-1 9100 IF SPEED>50 THEN SPEED=1 9110 IF SPEED<1 THEN SPEED=50 9120 IF HEIGHT>10 THEN HEIGHT=0 9130 IF HEIGHT<0 THEN HEIGHT=10 9140 GOTO 9010 9150 SPEED=50-SPEED:RETURN