REM PILL BY CCLX33 DIM GLOBAL MAP(8,15),SHP(8,15),TMP(8,15) GAMEPAD 1 LEVEL=1 SPEED=50 SCORE=0 RESTART: GOSUB BORDER GOSUB RND1 GOSUB NEW2 GOSUB SHOWSCORE DEAD=0 W1=SPEED FALL=0 FALLING=0 WIN=0 DO IF LEFT TAP(0) THEN XA=-1 YA=0 GOSUB MOVE ELSE IF RIGHT TAP(0) THEN XA=1 YA=0 GOSUB MOVE ELSE IF DOWN(0) THEN GOSUB DOWN1 WAIT 4 END IF IF W1>0 THEN W1=W1-1 ELSE GOSUB DOWN1 W1=SPEED END IF IF BUTTON TAP(0,0) THEN TD=1 GOSUB TURN ELSE IF BUTTON TAP(0,1) THEN TD=-1 GOSUB TURN END IF IF DEAD=1 THEN GOTO GAMEOVER IF WIN=1 THEN GOTO WIN WAIT 1 LOOP CHECKWIN: WIN=1 FOR X=1 TO 8 FOR Y=0 TO 15 IF SHP(X,Y)=6 THEN WIN=0 X=8 Y=15 END IF NEXT Y NEXT X RETURN DOWN1: XA=0 YA=1 MOVE: MOVED=0 A0=MAP(X,Y) A2=MAP(X2,Y2) X1=X+XA Y1=Y+YA X3=X2+XA Y3=Y2+YA IF X1<1 OR X3>8 THEN RETURN IF Y3>15 THEN GOTO SET2 A1=MAP(X1,Y1) A3=MAP(X3,Y3) IF YA=1 THEN IF P1=2 AND (A1>0 OR A3>0) THEN GOTO SET2 IF P1=4 AND A3>0 THEN GOTO SET2 ELSE IF P1=2 THEN IF XA=1 AND A3>0 THEN RETURN IF XA=-1 AND A1>0 THEN RETURN ELSE IF A1>0 OR A3>0 THEN RETURN END IF END IF MOVED=1 CALL DRAW(X,Y,0,0) CALL DRAW(X2,Y2,0,0) X=X1 Y=Y1 CALL DRAW(X,Y,A0,P1) X2=X3 Y2=Y3 CALL DRAW(X2,Y2,A2,P1+1) IF Y3=15 THEN GOTO SET2 RETURN TURN: A1=MAP(X,Y) A2=MAP(X2,Y2) IF P1=2 THEN P1N=4 X2N=X Y2N=Y+1 IF TD=-1 THEN SWAP A1,A2 ELSE IF P1=4 THEN P1N=2 X2N=X+1 Y2N=Y IF TD=1 THEN SWAP A1,A2 END IF IF X2N>8 OR Y2N>15 THEN RETURN IF MAP(X2N,Y2N)>0 THEN RETURN CALL DRAW(X2,Y2,0,0) P1=P1N CALL DRAW(X,Y,A1,P1) X2=X2N Y2=Y2N P2=P1+1 CALL DRAW(X2,Y2,A2,P2) WAIT 10 RETURN SET2: IF FALLING=1 THEN RETURN GOTO CHECK CHECK: ERR=1 FOR X=1 TO 8 FOR Y=0 TO 12 IF MAP(X,Y)>0 AND MAP(X,Y)=MAP(X,Y+1) AND MAP(X,Y)=MAP(X,Y+2) AND MAP(X,Y)=MAP(X,Y+3) THEN TMP(X,Y)=1 TMP(X,Y+1)=1 TMP(X,Y+2)=1 TMP(X,Y+3)=1 ERR=0 END IF NEXT Y NEXT X FOR Y=0 TO 15 FOR X=1 TO 5 IF MAP(X,Y)>0 AND MAP(X,Y)=MAP(X+1,Y) AND MAP(X,Y)=MAP(X+2,Y) AND MAP(X,Y)=MAP(X+3,Y) THEN TMP(X,Y)=1 TMP(X+1,Y)=1 TMP(X+2,Y)=1 TMP(X+3,Y)=1 ERR=0 END IF NEXT X NEXT Y IF ERR=1 AND FALLING=0 THEN GOTO NEW2 'ERASE FOR Y=0 TO 15 FOR X=1 TO 8 IF TMP(X,Y)=1 THEN TMP(X,Y)=0 SHAP=SHP(X,Y) IF SHAP=2 THEN A2=MAP(X+1,Y) CALL DRAW(X+1,Y,A2,1) ELSE IF SHAP=3 THEN A2=MAP(X-1,Y) CALL DRAW(X-1,Y,A2,1) ELSE IF SHAP=4 THEN A2=MAP(X,Y+1) CALL DRAW(X,Y+1,A2,1) ELSE IF SHAP=5 THEN A2=MAP(X,Y-1) CALL DRAW(X,Y-1,A2,1) END IF CALL DRAW(X,Y,0,0) WAIT 3 SCORE=SCORE+1 END IF NEXT X NEXT Y 'GOTO FALL FALL: FALL=0 FALLING=1 FOR X=1 TO 8 FOR Y=0 TO 14 P1=SHP(X,Y) IF P1=1 AND MAP(X,Y+1)=0 THEN GOSUB FALL2 IF P1=2 THEN X2=X+1 Y2=Y GOSUB DOWN1 IF MOVED=1 THEN FALL=1 END IF IF P1=4 THEN X2=X Y2=Y+1 GOSUB DOWN1 IF MOVED=1 THEN FALL=1 END IF NEXT Y NEXT X IF FALL=1 THEN GOTO FALL 'GOSUB CHECK FALLING=0 GOSUB CHECKWIN GOSUB SHOWSCORE GOTO NEW2 FALL2: FALL=1 A0=MAP(X,Y) CALL DRAW(X,Y,0,0) CALL DRAW(X,Y+1,A0,1) WAIT 1 RETURN SHOWSCORE: LOCATE 0,0 PRINT "LEVEL" PRINT LEVEL PRINT "SCORE" PRINT SCORE RETURN BORDER: FOR Y=0 TO 15 CELL 5,Y,7 CELL 14,Y,7 NEXT Y RETURN RND1: FOR I=1 TO LEVEL*4 repeat X=INT(RND*8)+1 Y=INT(RND*10)+6 until map(x,y)=0 A=INT(RND*3)+1 CALL DRAW(X,Y,A,6) NEXT I RETURN NEW2: IF MAP(4,0)>0 OR MAP(5,0)>0 THEN DEAD=1 RETURN END IF X=4 Y=0 P1=2 A=INT(RND*3)+1 CALL DRAW(X,Y,A,P1) X2=5 Y2=Y P2=3 A2=INT(RND*3)+1 CALL DRAW(X2,Y2,A2,P2) YA=0 RETURN GAMEOVER: LOCATE 8,8 PRINT"GAME OVER" WAIT 120 CLS GOSUB CLEARMAP GOTO RESTART WIN: LOCATE 8,8 PRINT"GOOD" WAIT 120 CLS IF LEVEL<20 THEN LEVEL=LEVEL+1 IF SPEED>8 THEN SPEED=SPEED-2 GOSUB CLEARMAP GOTO RESTART CLEARMAP: FOR X=1 TO 8 FOR Y=0 TO 15 MAP(X,Y)=0 SHP(X,Y)=0 NEXT Y NEXT X RETURN SUB DRAW(X,Y,A,P) IF A=0 THEN P=0 MAP(X,Y)=A SHP(X,Y)=P IF A<0 THEN A=0 ATTR(A,) CELL X+5,Y,P ATTR(0,) END SUB #1:MAIN PALETTES 1B3F2A15 003E2914 002B1601 003A2510 00372211 002F1A05 00393424 002E1904 #2:MAIN CHARACTERS 00000000000000000000000000000000 3C7E7F7F3F9F403C00008080C0E07E3C 3F7F7F7F3F9F403F00008080C0E07F3F FCFEFFFFFFFF00FC000000000000FEFC 3C7E7F7F7F7F7F7F0000808080808080 7F7F7F7F3F9F403C80808080C0E07E3C 3C7E7F7F3F9F403C0000A480C0E07E3C FF818181818181FF00FEFEFEFEFEFEFE