BG 1 'LAST DRAWN MAP POSITION IN CELL COLUMNS GLOBAL MAPX MAPX=-32 'PLAYER POSITION IN PIXELS POSX=8 POSY=8 'CAMERA POSITION IN PIXELS CAMX=0 CAMY=0 'PLAYER SCREEN BORDER 'FOR SCROLLING BORDER=40 'SET MAP SIZE IN PIXEL MAPWIDTH=32*8 MAPHEIGHT=32*8 DIM MAPADD(5) MAPADD(0)=$A000 MAPADD(1)=$A800 MAPADD(2)=$B000 MAPADD(3)=$B800 MAPADD(4)=$C000 MAPADD(5)=$C800 BG SOURCE $A000,32,32 RANDOMIZE TIMER ATTR(1) FOR I=0 TO 31 MCELL 0,I,3 MCELL 31,I,3 MCELL I,0,3 MCELL I,31,3 NEXT I FOR I=1 TO 33 X=INT(RND*23)+2 Y=INT(RND*28)+2 R=INT(RND*5) FOR IX=X TO X+R ATTR(1) MCELL IX,Y,2 ATTR(2) MCELL IX,Y-1,4 NEXT IX NEXT I GAMEPAD 1 SPRITE 0,POSX-CAMX,POSY-CAMY,5 SCROLL 0,CAMX,CAMY GLOBAL SSI GLOBAL SST GLOBAL COINTOTAL SST=TIMER 'SUB RESULTS R=0 DO BG 0 ATTR(3) NUMBER 0,0,COINTOTAL,5 BG 1 'MOVE PLAYER IF LEFT(0) THEN SPRITE 0,,,6 CALL CHECKCOLL(POSX-1,POSY,R) IF R THEN POSX=POSX-1 END IF IF RIGHT(0) THEN SPRITE 0,,,5 CALL CHECKCOLL(POSX+1,POSY,R) IF R THEN POSX=POSX+1 END IF IF UP(0) THEN CALL CHECKCOLL(POSX,POSY-1,R) IF R THEN POSY=POSY-1 END IF IF DOWN(0) THEN CALL CHECKCOLL(POSX,POSY+1,R) IF R THEN POSY=POSY+1 END IF GRAVITY=(GRAVITY+1) MOD 3 IF GRAVITY=0 THEN CALL CHECKCOLL(POSX,POSY+1,R) IF R THEN POSY=POSY+1 END IF 'ADJUST CAMERA IF POSX-BORDERCAMX+160 THEN CAMX=MIN(POSX+BORDER+8,MAPWIDTH)-160 IF POSY-BORDERCAMY+128 THEN CAMY=MIN(POSY+BORDER+8,MAPHEIGHT)-128 CALL DRAWMAP(CAMX,CAMY) SPRITE 0,POSX-CAMX,POSY-CAMY, SCROLL 1,CAMX,CAMY WW=3 IF BUTTON(0,0) THEN WW=6 IF BUTTON(0,1) THEN WW=1 SPEEDY=(SPEEDY+1) MOD WW IF SPEEDY=0 THEN WAIT VBL LOOP 'X,Y: PLAYER POSITION IN PIXELS 'R IS SET TO TRUE IF NO COLLISION WITH MAP SUB CHECKCOLL(X,Y,R) 'CHECK ALL CORNERS R=-1 CALL CHECKCELL(X/8,Y/8,R) CALL CHECKCELL((X+7)/8,Y/8,R) CALL CHECKCELL(X/8,(Y+7)/8,R) CALL CHECKCELL((X+7)/8,(Y+7)/8,R) END SUB SUB CHECKCELL(X,Y,R) C=MCELL.C(X,Y) IF C=4 THEN IF TIMER>SST THEN SST=TIMER+10 SSI=0 END IF COINTOTAL=COINTOTAL+10*(SSI+1) PLAY SSI,70+SSI*2,3 SOUND 0 SSI=(SSI+1) MOD 4 'CLEAR RING FROM SOURCE MCELL X,Y,0 'CLEAR FROM BG CELL X,Y,0 ELSE IF C<>0 THEN R=0 END IF END SUB 'X,Y: CAMERA POSITION IN PIXELS SUB DRAWMAP(X,Y) 'GET CELL COLUMN MX=X\8 'COMPARE NEW POSITION TO LAST IF ABS(MX-MAPX)>1 THEN 'DRAW COMPLETE SCREEN 'IF SCROLL DISTANCE IS BIG BG COPY MX,0,21,32 TO MX,0 ELSE IF MX>MAPX THEN 'DRAW ONLY ONE COLUMN ON RIGHT SIDE 'WHEN SCROLLING TO RIGHT BG COPY MX+20,0,1,32 TO MX+20,0 ELSE IF MX