SUB BGREAD(BGNUM,X,Y) IF BGNUM=0 THEN BGADR=$9000 ELSE BGADR=$9800 ADR=BGADR+64*Y+2*X CHARNUM=PEEK(ADR) CHARATT=PEEK(ADR+1) CHARPAL=(CHARATT AND %00000111)/1 CHARFLP=(CHARATT AND %00011000)/8 CHARPRI=(CHARATT AND %00100000)/32 CHARUNU=(CHARATT AND %11000000)/64 END SUB SUB BGWRITE(BGNUM,X,Y,ICHAR,IPAL,FLP,PRI,UNU) ADD ICHAR,0,0 TO 255 ADD IPAL,0,0 TO 7 ADD FLP,0,0 TO 3 ADD PRI,0,0 TO 1 ADD UNU,0,0 TO 3 IF BGNUM=0 THEN BGADR=$9000 ELSE BGADR=$9800 ADR=BGADR+64*Y+2*X POKE ADR,ICHAR POKE ADR+1,IPAL+(FLP*8)+(PRI*32)+(UNU*64) END SUB SUB BGPRINT CLS 1 BG 1 FLIP 0,0 LOCATE 0,0 PRINT "C:"+STR$(CHARNUM) LOCATE 4,0 PRINT "P:"+STR$(CHARPAL) LOCATE 8,0 PRINT "F:"+STR$(CHARFLP) LOCATE 12,0 PRINT "I:"+STR$(CHARPRI) LOCATE 16,0 PRINT "U:"+STR$(CHARUNU) END SUB GLOBAL CHARNUM,CHARATT,CHARPAL,CHARFLP,CHARPRI,CHARUNU DIM GLOBAL XDIR(3),YDIR(3),XFLIP(3),YFLIP(3) FOR I=0 TO 3 READ XDIR(I),YDIR(I),XFLIP(I),YFLIP(I) NEXT I DATA 0,-1,1,1 DATA 1,0,0,0 DATA 0,1,0,1 DATA -1,0,1,0 REM UP=0, RIGHT=1, DOWN=2, LEFT=3 GAMEPAD 1 GLOBAL PX,PY PX=3 PY=3 BG 0 CELL PX,PY,1 DO IF UP(0) THEN CALL MOVEIT(0) ELSE IF RIGHT(0) THEN CALL MOVEIT(1) ELSE IF DOWN(0) THEN CALL MOVEIT(2) ELSE IF LEFT(0) THEN CALL MOVEIT(3) WAIT VBL LOOP SUB MOVEIT(D) BG 0 FLIP 0,0 CELL PX,PY,0 ADD PY,YDIR(D),1 TO 15 ADD PX,XDIR(D),0 TO 19 FLIP XFLIP(D),YFLIP(D) CELL PX,PY,1 IF D=1 OR 4 THEN COPY $8000+16*2,16 TO $8000+16 IF D=0 THEN COPY $8000+16*4,16 TO $8000+16 IF D=2 THEN COPY $8000+16*3,16 TO $8000+16 PLAY 0,50,1 CALL BGREAD(0,PX,PY) CALL BGPRINT WAIT 15 END SUB #1:MAIN PALETTES 0838241000383400003C0C00003F3C00 003F2A15003F2A15003F2A15003F2A15 #2:MAIN CHARACTERS 00000000000000000000000000000000 808080808080807F002020382424387F 000000040200000000181CB87E7C4444 000000081400000022223E3E6A7F0300 000000000000000044447C7CFCFE0600