'LAST DRAWN MAP POSITION IN CELL COLUMNS GLOBAL MAPX MAPX=-32 'PLAYER POSITION IN PIXELS POSX=80 POSY=64 'CAMERA POSITION IN PIXELS CAMX=0 CAMY=0 'PLAYER SCREEN BORDER 'FOR SCROLLING BORDER=40 'GET MAP SIZE IN PIXELS MAPWIDTH=PEEK(ROM(3)+2)*8 MAPHEIGHT=PEEK(ROM(3)+3)*8 GAMEPAD 1 SPRITE 0,POSX-CAMX,POSY-CAMY,1 SCROLL 0,CAMX,CAMY 'SUB RESULTS R=0 DO 'MOVE PLAYER IF LEFT(0) THEN CALL CHECKCOLL(POSX-1,POSY,R) IF R THEN POSX=POSX-1 END IF IF RIGHT(0) THEN 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 '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,1 SCROLL 0,CAMX,CAMY 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 TL=MCELL.C(X/8,Y/8) TR=MCELL.C((X+7)/8,Y/8) BL=MCELL.C(X/8,(Y+7)/8) BR=MCELL.C((X+7)/8,(Y+7)/8) R=(TL=0) AND (TR=0) AND (BL=0) AND (BR=0) 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