'TITLE: GFX DESIGNER 'AUTHOR: TIMO KLOSS '====================== '** RAM MAP ** GLOBAL USERCHARS,USERBG,USERPALS,TEMPMEM USERCHARS = $A000 USERBG = $B000 USERPALS = $D004 TEMPMEM = $D024 '====================== 'ENERGY SAVING MODE SYSTEM 0,1 DIM GLOBAL PXL(15,15) GLOBAL SELCHAR,SELPAGE,SELCOLOR GLOBAL SELPAL,SELPALPAGE GLOBAL SELW,SELH GLOBAL HIDECOUNT,CHAROFFSET SELCHAR=1 SELPAGE=0 SELCOLOR=1 SELPAL=0 SELPALPAGE=0 GLOBAL MAPW,MAPH,CELLSIZE MAPW=32 MAPH=32 CELLSIZE=0 GLOBAL EDMODE,FLIPMODE,PRI,MAPX,MAPY,DRAGX,DRAGY GLOBAL MAPBARST EDMODE=1 GLOBAL FTYPE$,FILESOFFS,SELFILE GLOBAL PALFILE,CHARFILE,BGFILE SELFILE=-1 PALFILE=1 CHARFILE=2 BGFILE=3 FONT 128 'DEFAULT USER PALETTE COPY $FF00,32 TO USERPALS OK=0 FILES CALL BLOADCHR(OK) CALL BLOADPAL(OK) CALL BLOADBG(OK) '==== TOUCH ZONES INIT ==== 'SETTINGS GLOBAL MAX_ZONE, ZONE_PAL 'STATUS GETTERS GLOBAL CUR_ZONE, ZONE_EVENT, ZONE_IN_X, ZONE_IN_Y, ZONE_RESULT 'INTERNAL GLOBAL ZONE_LAST_X, ZONE_LAST_Y GLOBAL E_DOWN, E_UP, E_OUT, E_DRAG E_DOWN=1 E_UP=2 E_OUT=3 E_DRAG=4 MAX_ZONE=20 DIM GLOBAL ZONEX(MAX_ZONE), ZONEY(MAX_ZONE), ZONEW(MAX_ZONE), ZONEH(MAX_ZONE), ZONEP(MAX_ZONE) TOUCHSCREEN '====================== CHAREDITOR: HIDECOUNT=0 CALL INITMEM CALL READPAL CALL READCHAR CALL READPAGE CALL DRAWCHARUI CALL RESETZONES ZONE_PAL=-1 ' TAB BAR CALL SETZONE(0,14,14,2,2) CALL SETZONE(1,16,14,2,2) CALL SETZONE(2,18,14,2,2) ' AREAS CALL SETZONE(3,1,1,8,8) CALL SETZONE(4,10,1,2,8) CALL SETZONE(5,1,10,16,4) ZONE_PAL=5 ' PAGE UP/DOWN CALL SETZONE(6,17,10,2,2) CALL SETZONE(7,17,12,2,2) 'MENU CALL SETZONE(8,0,14,2,2) DO CALL UPDATEZONES IF ZONE_EVENT=E_DOWN THEN IF CUR_ZONE=1 THEN GOTO PALEDITOR IF CUR_ZONE=2 THEN GOTO MAPEDITOR END IF IF ZONE_EVENT=E_DOWN OR ZONE_EVENT=E_DRAG THEN IF CUR_ZONE=3 THEN PXL(ZONE_IN_X,ZONE_IN_Y)=SELCOLOR PAL SELPAL MOD 4 CELL ZONE_LAST_X,ZONE_LAST_Y,16+SELCOLOR CALL WRITECHAR END IF IF CUR_ZONE=4 THEN SELCOLOR=ZONE_IN_Y\2 CALL DRAWSELCOLOR(10,1) END IF IF CUR_ZONE=5 THEN SELCHAR=(ZONE_IN_Y*16)+ZONE_IN_X+SELPAGE*64 CALL READCHAR CALL DRAWCHAR CALL DRAWCHARNUM END IF END IF IF ZONE_EVENT=E_DOWN THEN IF CUR_ZONE=6 AND SELPAGE>0 THEN SELPAGE=SELPAGE-1 CALL READPAGE CALL DRAWCHARNUM END IF IF CUR_ZONE=7 AND SELPAGE<3 THEN SELPAGE=SELPAGE+1 CALL READPAGE CALL DRAWCHARNUM END IF END IF IF ZONE_EVENT=E_UP THEN IF CUR_ZONE=8 THEN FTYPE$="CHARACTERS" GOTO FILESMENU END IF END IF IF HIDECOUNT>0 THEN DEC HIDECOUNT IF HIDECOUNT=0 THEN CALL HIDESELCHAR END IF WAIT VBL LOOP SUB DRAWCHARUI BG COPY 0,0,20,16 TO 0,0 CALL INITSPRITES CALL DRAWCHAR CALL DRAWSELCOLOR(10,1) CALL DRAWCHARNUM CALL DRAWPAGE P=(SELPAL MOD 4) BG TINT 10,1 TO 11,8 PAL P END SUB SUB INITMEM ON RASTER OFF SPRITE OFF COPY ROM(1),SIZE(1) TO $FF00 COPY ROM(2),SIZE(2) TO $8000 BG SOURCE ROM(3) END SUB SUB INITSPRITES SPRITE 0 PAL 6 FLIP 0,0 SPRITE 1 PAL 6 FLIP 1,0 SPRITE 2 PAL 6 FLIP 0,1 SPRITE 3 PAL 6 FLIP 1,1 SPRITE 4 PAL 6 FLIP 0,0 SPRITE 5 PAL 6 FLIP 1,0 SPRITE 6 PAL 6 FLIP 0,1 SPRITE 7 PAL 6 FLIP 1,1 SPRITE 8 PAL 6 FLIP 0,0 SPRITE 9 PAL 6 FLIP 1,0 SPRITE 10 PAL 6 FLIP 0,1 SPRITE 11 PAL 6 FLIP 1,1 END SUB SUB DRAWCHAR PAL SELPAL MOD 4 FOR PY=0 TO 7 FOR PX=0 TO 7 CELL PX+1,PY+1,16+PXL(PX,PY) NEXT PX NEXT PY END SUB SUB DRAWSELCOLOR(X,Y) SX=X*8 SY=Y*8+SELCOLOR*2*8 SPRITE 4,SX,SY,20 SPRITE 5,SX+8,SY,20 SPRITE 6,SX,SY+8,20 SPRITE 7,SX+8,SY+8,20 END SUB SUB DRAWCHARNUM PAL 4 BG FILL 2,15 TO 13,15 CHAR 128 TEXT 3,15,"#" NUMBER 4,15,SELCHAR,3 NUMBER 8,15,SELPAGE+1,1 TEXT 9,15,"/4" IF SELCHAR>=SELPAGE*64 AND SELCHAR=SELPAGE*64 AND C<(SELPAGE+1)*64 THEN COPY USERCHARS+C*16,16 TO $8C00+(C MOD 64)*16 END IF END SUB SUB READCHAR CALL READCHARNUM(0,0) END SUB SUB READCHARNUM(CX,CY) AD=USERCHARS+(SELCHAR+CX+CY*16)*16 FOR PY=0 TO 7 FOR PX=0 TO 7 BV=2^(7-PX) PV=0 IF PEEK(AD) AND BV THEN PV=1 IF PEEK(AD+8) AND BV THEN PV=PV+2 PXL(PX+CX*8,PY+CY*8)=PV NEXT PX AD=AD+1 NEXT PY END SUB '====================== PALEDITOR: CALL INITMEM CALL READPAL CALL READPAGE CALL DRAWPALUI CALL RESETZONES ZONE_PAL=-1 ' TAB BAR CALL SETZONE(0,14,14,2,2) CALL SETZONE(1,16,14,2,2) CALL SETZONE(2,18,14,2,2) ' AREAS CALL SETZONE(3,10,1,2,8) CALL SETZONE(7,1,1,7,4) CALL SETZONE(8,1,10,16,4) ' RGB SLIDERS CALL SETZONE(4,13,1,2,4) CALL SETZONE(5,15,1,2,4) CALL SETZONE(6,17,1,2,4) ZONE_PAL=5 ' PALETTE UP/DOWN CALL SETZONE(9,1,7,2,2) CALL SETZONE(10,6,7,2,2) ' PAGE UP/DOWN CALL SETZONE(11,17,10,2,2) CALL SETZONE(12,17,12,2,2) 'MENU CALL SETZONE(13,0,14,2,2) DO CALL UPDATEZONES IF ZONE_EVENT=E_DOWN THEN IF CUR_ZONE=0 THEN GOTO CHAREDITOR IF CUR_ZONE=2 THEN GOTO MAPEDITOR END IF '** PAL ** IF ZONE_EVENT=E_DOWN OR ZONE_EVENT=E_DRAG THEN IF CUR_ZONE=7 THEN SELPAL=SELPALPAGE*4+(ZONE_IN_X\4)+(ZONE_IN_Y\2)*2 CALL DRAWPAL END IF IF CUR_ZONE=8 THEN SELCHAR=(ZONE_IN_Y*16)+ZONE_IN_X+SELPAGE*64 CALL DRAWCHARNUM END IF END IF '** PAL PAGE ** IF ZONE_EVENT=E_DOWN THEN IF CUR_ZONE=9 THEN SELPALPAGE=0 SELPAL=SELPAL MOD 4 CALL READPAL CALL DRAWPAL END IF IF CUR_ZONE=10 THEN SELPALPAGE=1 SELPAL=(SELPAL MOD 4)+4 CALL READPAL CALL DRAWPAL END IF END IF '** COLOR ** IF ZONE_EVENT=E_DOWN OR ZONE_EVENT=E_DRAG THEN IF CUR_ZONE=3 THEN SELCOLOR=ZONE_IN_Y\2 CALL DRAWSLIDERS CALL DRAWSELCOLOR(10,1) END IF END IF '** RGB SLIDERS ** IF ZONE_EVENT=E_DOWN OR ZONE_EVENT=E_DRAG THEN IF CUR_ZONE>=4 AND CUR_ZONE<=6 THEN V=3-ZONE_IN_Y A=USERPALS+SELPAL*4+SELCOLOR C=PEEK(A) R=INT(C/16) G=INT(C/4) MOD 4 B=C MOD 4 IF CUR_ZONE=4 THEN R=V IF CUR_ZONE=5 THEN G=V IF CUR_ZONE=6 THEN B=V C=R*16+G*4+B POKE A,C CALL DRAWSLIDERS CALL READPAL END IF END IF IF ZONE_EVENT=E_DOWN THEN IF CUR_ZONE=11 AND SELPAGE>0 THEN SELPAGE=SELPAGE-1 CALL READPAGE CALL DRAWCHARNUM END IF IF CUR_ZONE=12 AND SELPAGE<3 THEN SELPAGE=SELPAGE+1 CALL READPAGE CALL DRAWCHARNUM END IF END IF IF ZONE_EVENT=E_UP THEN IF CUR_ZONE=13 THEN FTYPE$="PALETTES" GOTO FILESMENU END IF END IF WAIT VBL LOOP SUB DRAWPALUI BG COPY 0,16,20,16 TO 0,0 PAL 4 TEXT 1,2,"#" TEXT 5,2,"#" TEXT 1,4,"#" TEXT 5,4,"#" TEXT 13,4,"R" TEXT 15,4,"G" TEXT 17,4,"B" CALL INITSPRITES FOR I=12 TO 14 SPRITE I PAL 7 SIZE 1 NEXT I CALL DRAWCHARNUM CALL DRAWPAGE CALL DRAWPAL CALL DRAWSELCOLOR(10,1) END SUB SUB READPAL COPY USERPALS+SELPALPAGE*16,16 TO $FF00 END SUB SUB DRAWPAL PAL 4 NUMBER 3,8,SELPALPAGE+1,1 TEXT 4,8,"/2" C=SELPALPAGE*4 NUMBER 2,2,C+0,1 NUMBER 6,2,C+1,1 NUMBER 2,4,C+2,1 NUMBER 6,4,C+3,1 CALL DRAWSLIDERS P=(SELPAL MOD 4) BG TINT 10,1 TO 11,8 PAL P BG TINT 1,10 TO 16,13 PAL P SX=8+(P MOD 2)*32 SY=8+(P\2)*16 SPRITE 8,SX,SY,20 SPRITE 9,SX+16,SY,20 SPRITE 10,SX,SY+8,20 SPRITE 11,SX+16,SY+8,20 END SUB SUB DRAWSLIDERS C=PEEK(USERPALS+SELPAL*4+SELCOLOR) R=C\16 G=C\4 MOD 4 B=C MOD 4 SPRITE 12,13*8,(4-R)*8,32 SPRITE 13,15*8,(4-G)*8,32 SPRITE 14,17*8,(4-B)*8,32 END SUB '====================== MAPEDITOR: SPRITE OFF CLS COPY USERCHARS,$C00 TO $8000 COPY ROM(2)+$E00,$200 TO $8E00 COPY USERPALS,32 TO $FF00 CALL DRAWTOOLBAR CALL DRAWMAP ON RASTER CALL MAPEDITORRASTER CALL RESETZONES ZONE_PAL=-1 ' TAB BAR CALL SETZONE(0,14,14,2,2) CALL SETZONE(1,16,14,2,2) CALL SETZONE(2,18,14,2,2) ' AREA CALL SETZONE(3,0,0,20,14) ZONE_PAL=5 ' TOOLS CALL SETZONE(6,0,14,2,2) CALL SETZONE(4,3,14,2,2) CALL SETZONE(5,5,14,2,2) IF CELLSIZE=0 THEN WINW=20 WINH=14 ELSE WINW=10 WINH=7 END IF OLDX=-1 OLDY=-1 DO CALL UPDATEZONES IF MAPBARST>0 THEN DEC MAPBARST IF MAPBARST=0 THEN SPRITE OFF 0 TO 7 END IF IF ZONE_EVENT=E_DOWN THEN IF CUR_ZONE=0 THEN GOTO CHAREDITOR IF CUR_ZONE=1 THEN GOTO PALEDITOR IF CUR_ZONE=4 THEN EDMODE=0 CALL DRAWEDMODE END IF IF CUR_ZONE=5 THEN EDMODE=1 CALL DRAWEDMODE END IF END IF IF (ZONE_EVENT=E_DOWN OR ZONE_EVENT=E_DRAG) AND CUR_ZONE=3 THEN IF ZONE_EVENT=E_DOWN THEN OLDX=-1 IF CELLSIZE=0 THEN X=ZONE_IN_X Y=ZONE_IN_Y ELSE X=ZONE_IN_X\2 Y=ZONE_IN_Y\2 END IF IF X<>OLDX OR Y<>OLDY THEN '** SCROLL MODE ** IF EDMODE=0 THEN IF OLDX>=0 THEN MAPX=MIN(MAX(MAPX-X+DRAGX,0),MAPW-WINW) MAPY=MIN(MAX(MAPY-Y+DRAGY,0),MAPH-WINH) CALL DRAWMAP END IF DRAGX=X DRAGY=Y END IF '** DRAW MODE ** IF EDMODE=1 THEN W=MIN(SELW,WINW-1-X) H=MIN(SELH,WINH-1-Y) FOR I=0 TO H FOR J=0 TO W IF CELLSIZE=0 THEN C=SELCHAR+I*16+J ELSE C=SELCHAR+I*2*16+J*2 END IF ATT=SELPAL+FLIPMODE*8+PRI*32 IF FLIPMODE AND %01 THEN CX=X+W-J ELSE CX=X+J IF FLIPMODE AND %10 THEN CY=Y+H-I ELSE CY=Y+I A=$9000+(CY*32+CX)*2 POKE A,C POKE A+1,ATT A=USERBG+4+((CY+MAPY)*MAPW+(CX+MAPX))*2 POKE A,C POKE A+1,ATT NEXT J NEXT I END IF '** COLOR MODE ** IF EDMODE=2 THEN A=USERBG+4+((Y+MAPY)*MAPW+(X+MAPX))*2+1 POKE A,(PEEK(A) AND %11111000) OR SELPAL A=$9000+(Y*32+X)*2+1 POKE A,(PEEK(A) AND %11111000) OR SELPAL END IF '** PRIO MODE ** IF EDMODE=3 THEN 'WRITE TO DATA... A=USERBG+4+((Y+MAPY)*MAPW+(X+MAPX))*2+1 ATT=PEEK(A) AND %11011111 POKE A,ATT OR PRI*32 'WRITE TO SCREEN... A=$9000+(Y*32+X)*2+1 ATT=PEEK(A) AND %11011000 POKE A,ATT OR PRI*32 OR PRI END IF OLDX=X OLDY=Y END IF END IF IF ZONE_EVENT=E_UP THEN IF CUR_ZONE=6 THEN FTYPE$="BACKGROUND" GOTO FILESMENU END IF END IF WAIT VBL LOOP SUB MAPEDITORRASTER IF RASTER=0 THEN CELL SIZE 0,CELLSIZE IF EDMODE=3 THEN PALETTE 0,%000000,%110000,%100000,%010000 PALETTE 1,%000000,%001100,%001000,%000100 ELSE COPY USERPALS,4 TO $FF00 END IF END IF IF RASTER=112 THEN CELL SIZE 0,0 PALETTE 0,%100000,%111111,%101010,%010101 END IF END SUB SUB DRAWEDMODE COPY USERPALS,32 TO $FF00 CALL DRAWMAP CALL DRAWTOOLBAR END SUB SUB DRAWMAP BG SOURCE USERBG BG COPY MAPX,MAPY,20,14 TO 0,0 IF EDMODE=3 THEN CALL DRAWPRIO CALL MAPBARS END SUB SUB DRAWPRIO FOR CY=0 TO 13 FOR CX=0 TO 19 A=$9000+(CY*32+CX)*2+1 ATT=PEEK(A) AND %11111000 IF ATT AND %00100000 THEN ATT=ATT OR 1 POKE A,ATT NEXT CX NEXT CY END SUB SUB DRAWTOOLBAR PAL 0 BG FILL 0,14 TO 19,14 CHAR 224 BG FILL 0,15 TO 19,15 CHAR 240 CELL 0,14,230 CELL 1,14,231 CELL 0,15,246 CELL 1,15,247 CALL DRAWTOOLBUTTON(3,229,EDMODE=0) CALL DRAWTOOLBUTTON(5,245,EDMODE=1) CALL DRAWTOOLBUTTON(14,226,0) CALL DRAWTOOLBUTTON(16,227,0) CALL DRAWTOOLBUTTON(18,228,-1) END SUB SUB DRAWTOOLBUTTON(X,ICON,SEL) CELL X,14,225 CELL X+1,14,ICON IF SEL THEN CELL X,15,241 CELL X+1,15,242 ELSE CELL X,15,243 CELL X+1,15,244 END IF END SUB SUB MAPBARS IF CELLSIZE=0 THEN WINW=20 WINH=14 CS=8 ELSE WINW=10 WINH=7 CS=16 END IF SPRITE 0 PAL 0 FLIP 0,0 PRIO 1 SPRITE 1 PAL 0 FLIP 1,0 PRIO 1 SPRITE 2 PAL 0 FLIP 0,0 PRIO 1 SPRITE 3 PAL 0 FLIP 0,1 PRIO 1 BX=MAPX/MAPW*154 BW=WINW*154/MAPW BY=MAPY/MAPH*105 BH=WINH*105/MAPH SPRITE 0,BX-1,0,253 SPRITE 1,BW+BX-1,0,253 SPRITE 2,0,BY-1,254 SPRITE 3,0,BH+BY-1,254 SPRITE 4 PAL 0 PRIO 1 SPRITE 5 PAL 0 PRIO 1 SPRITE 6 PAL 0 PRIO 1 SPRITE 7 PAL 0 PRIO 1 BX=-((MAPX*CS) MOD 160)-4 BY=-((MAPY*CS) MOD 128)-4 IF BX>-32 THEN SPRITE 4,BX,BY,255 SPRITE 5,BX,BY+128,255 ELSE SPRITE OFF 4 TO 5 END IF SPRITE 6,BX+160,BY,255 SPRITE 7,BX+160,BY+128,255 MAPBARST=60 END SUB '====================== FILESMENU: CALL INITMEM CALL FILE2SEL FILES CALL DRAWFILESMENU CALL RESETZONES ZONE_PAL=-1 CALL SETZONE(0,0,2,18,11) ZONE_PAL=5 CALL SETZONE(1,18,2,2,2) CALL SETZONE(2,18,11,2,2) CALL SETZONE(3,0,14,2,2) CALL SETZONE(4,16,14,2,2) CALL SETZONE(5,18,14,2,2) DO CALL UPDATEZONES IF ZONE_EVENT=E_DOWN OR ZONE_EVENT=E_DRAG THEN IF CUR_ZONE=0 THEN SELFILE=ZONE_IN_Y+FILESOFFS CALL DRAWFILES CALL SEL2FILE END IF END IF IF ZONE_EVENT=E_DOWN THEN IF CUR_ZONE=1 THEN FILESOFFS=0 CALL DRAWFILES END IF IF CUR_ZONE=2 THEN FILESOFFS=5 CALL DRAWFILES END IF END IF IF ZONE_EVENT=E_UP THEN IF CUR_ZONE=3 THEN GOTO EXITFILES IF CUR_ZONE=4 THEN CALL BLOAD(OK) IF OK THEN GOTO EXITFILES END IF IF CUR_ZONE=5 THEN CALL BSAVE(OK) IF OK THEN GOTO EXITFILES END IF END IF WAIT VBL LOOP EXITFILES: IF FTYPE$="PALETTES" THEN GOTO PALEDITOR IF FTYPE$="CHARACTERS" THEN GOTO CHAREDITOR IF FTYPE$="BACKGROUND" THEN GOTO MAPEDITOR END SUB DRAWFILESMENU BG SOURCE ROM(4) BG COPY 0,0,20,16 TO 0,0 PAL 5 TEXT 0,0,FTYPE$+" FILE" SPRITE OFF CALL DRAWFILES END SUB SUB DRAWFILES FOR I=0 TO 10 N=I+FILESOFFS IF N=SELFILE THEN PAL 5 ELSE PAL 4 NUMBER 0,2+I,N,2 TEXT 2,2+I,": " TEXT 3,2+I,LEFT$(FILE$(N),15) NEXT I END SUB SUB SHOWMESSAGE(MSG$) COPY $9000,$800 TO TEMPMEM PAL 5 BG FILL 0,0 TO 19,0 CHAR 128 TEXT 0,0,MSG$ WAIT 60 COPY TEMPMEM,$800 TO $9000 END SUB SUB FILE2SEL IF FTYPE$="PALETTES" THEN SELFILE=PALFILE IF FTYPE$="CHARACTERS" THEN SELFILE=CHARFILE IF FTYPE$="BACKGROUND" THEN SELFILE=BGFILE END SUB SUB SEL2FILE IF FTYPE$="PALETTES" THEN PALFILE=SELFILE IF FTYPE$="CHARACTERS" THEN CHARFILE=SELFILE IF FTYPE$="BACKGROUND" THEN BGFILE=SELFILE END SUB SUB BLOAD(OK) OK=0 IF SELFILE=-1 THEN CALL SHOWMESSAGE("SELECT FILE") EXIT SUB END IF IF FTYPE$="PALETTES" THEN CALL BLOADPAL(OK) IF FTYPE$="CHARACTERS" THEN CALL BLOADCHR(OK) IF FTYPE$="BACKGROUND" THEN CALL BLOADBG(OK) IF OK THEN CALL SHOWMESSAGE(FTYPE$+" LOADED") ELSE SELFILE=-1 CALL DRAWFILESMENU CALL SHOWMESSAGE("INVALID FORMAT") END IF END SUB SUB BSAVE(OK) OK=0 IF SELFILE=-1 THEN CALL SHOWMESSAGE("SELECT FILE") EXIT SUB END IF IF FTYPE$="PALETTES" THEN CALL BSAVEPAL IF FTYPE$="CHARACTERS" THEN CALL BSAVECHR IF FTYPE$="BACKGROUND" THEN CALL BSAVEBG CALL DRAWFILES CALL SHOWMESSAGE(FTYPE$+" SAVED") OK=-1 END SUB '====================== SUB BLOADCHR(OK) OK=0 IF FSIZE(CHARFILE)>$1000 THEN CHARFILE=-1 EXIT SUB END IF FILL USERCHARS,$1000,0 LOAD CHARFILE,USERCHARS OK=-1 END SUB SUB BSAVECHR 'FIND LAST USED CHARACTER N=0 I=255 REPEAT A=USERCHARS+I*16 FOR J=0 TO 15 IF PEEK(A+J)<>0 THEN N=I+1 NEXT J I=I-1 IF I<0 THEN N=1 UNTIL N<>0 F$=FILE$(CHARFILE) IF F$="" THEN F$="CHARACTERS" SAVE CHARFILE,F$,USERCHARS,N*16 END SUB SUB BLOADPAL(OK) OK=0 IF FSIZE(PALFILE)>32 THEN PALFILE=-1 EXIT SUB END IF LOAD PALFILE,USERPALS OK=-1 END SUB SUB BSAVEPAL F$=FILE$(PALFILE) IF F$="" THEN F$="PALETTES" SAVE PALFILE,F$,USERPALS,32 END SUB SUB UPDATEMAPINFO POKE USERBG,0 POKE USERBG+1,CELLSIZE POKE USERBG+2,MAPW POKE USERBG+3,MAPH END SUB SUB RESETBG FILL USERBG,$2004,0 MAPW=20 MAPH=16 MAPX=0 MAPY=0 CELLSIZE=0 SELCHAR=1 CALL UPDATEMAPINFO END SUB SUB BLOADBG(OK) OK=0 CALL RESETBG IF FSIZE(BGFILE)=0 THEN OK=-1 EXIT SUB END IF IF FSIZE(BGFILE)<4 OR FSIZE(BGFILE)>$2004 THEN BGFILE=-1 EXIT SUB END IF LOAD BGFILE,USERBG T=PEEK(USERBG) CELLSIZE=PEEK(USERBG+1) MAPW=PEEK(USERBG+2) MAPH=PEEK(USERBG+3) MAPX=0 MAPY=0 IF CELLSIZE=0 THEN SELCHAR=1 ELSE SELCHAR=2 'CHECK FILE FORMAT IF T=0 AND CELLSIZE<2 AND MAPW>0 AND MAPH>0 THEN OK=-1 ELSE BGFILE=-1 CALL RESETBG END IF END SUB SUB BSAVEBG F$=FILE$(BGFILE) IF F$="" THEN F$="BG" SAVE BGFILE,F$,USERBG,4+MAPW*MAPH*2 END SUB '==== TOUCH ZONES SUBPROGRAMS ==== SUB SETZONE(N,X,Y,W,H) ZONEX(N)=X ZONEY(N)=Y ZONEW(N)=W ZONEH(N)=H IF ZONE_PAL>=0 AND ZONE_PAL<8 THEN 'HIGHLIGHT AND NORMAL PALETTE P=CELL.A(X,Y) AND %111 ZONEP(N)=(ZONE_PAL*16)+P ELSE 'NO HIGHLIGHT ZONEP(N)=$FF END IF END SUB SUB CLEARZONE(N) CALL SETZONE(N,0,0,0,0) END SUB SUB RESETZONES FOR I=0 TO MAX_ZONE CALL CLEARZONE(I) NEXT I CUR_ZONE=-1 ZONE_PAL=-1 END SUB SUB UPDATEZONES CX=TOUCH.X\8 CY=TOUCH.Y\8 IF ZONE_EVENT=E_UP OR ZONE_EVENT=E_OUT THEN CUR_ZONE=-1 ZONE_EVENT=0 IF CUR_ZONE>=0 THEN CALL INSIDEZONE(CUR_ZONE,CX,CY) IF ZONE_RESULT THEN ZONE_IN_X=CX-ZONEX(CUR_ZONE) ZONE_IN_Y=CY-ZONEY(CUR_ZONE) IF NOT TOUCH THEN CALL PAINTZONE(CUR_ZONE,0) ZONE_EVENT=E_UP ELSE IF CX<>ZONE_LAST_X OR CY<>ZONE_LAST_Y THEN ZONE_EVENT=E_DRAG END IF ELSE CALL PAINTZONE(CUR_ZONE,0) ZONE_EVENT=E_OUT END IF ELSE IF TAP THEN FOR I=0 TO MAX_ZONE IF ZONEW(I)>0 THEN CALL INSIDEZONE(I,CX,CY) IF ZONE_RESULT THEN ZONE_EVENT=E_DOWN CUR_ZONE=I ZONE_IN_X=CX-ZONEX(I) ZONE_IN_Y=CY-ZONEY(I) CALL PAINTZONE(I,1) END IF END IF NEXT I END IF ZONE_LAST_X=CX ZONE_LAST_Y=CY END SUB SUB INSIDEZONE(N,CX,CY) ZONE_RESULT=(CX>=ZONEX(N) AND CX=ZONEY(N) AND CY$FF THEN IF SEL THEN P=P\16 ELSE P=P MOD 16 BG TINT ZONEX(N),ZONEY(N) TO ZONEX(N)+ZONEW(N)-1,ZONEY(N)+ZONEH(N)-1 PAL P END IF END SUB '====================== #1:MAIN PALETTES 003F2F0000383400003C0C00003F3C00 003F2A15000F050000300000003F2A15 #2:MAIN CHARACTERS 00000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFF 0101010101010101FFFFFFFFFFFFFFFF FF0000000000000000FFFFFFFFFFFFFF 80808080808080807F7F7F7F7F7F7F7F 00000000000000FFFFFFFFFFFFFFFFFF FF000000000000FF00FFFFFFFFFFFFFF 81818181818181817F7F7F7F7F7F7F7F 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 FFFFFFFFFFFFFFFF0000000000000000 0000000000000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF808080808080800000000000000000 40E0E0E0E0E0E0E0FFFFFFFFFFFFFFFF 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 3F7FF0FFF0FF403F00000F000F807F3F F8FC1EFE1EFE04F80000E000E002FCF8 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 FF80808080818387007F7F7F7F7F7F7F FE0101010181C1E101FFFFFFFFFFFFFF FF80808080808080007F7F7F7F7F7F7F FF0179FDFDFD490100FFFFB7FFFFFFFF FF0155555555550100FFBFFFFBEFFFFF FF017D7D7D757D0100FFFFD7FFDFFFFF FF809AA2A29B8080007F7F7F7F7F7F7F FE01312931A9010101FFFFFFFFFFFFFF FF809AA2A2998080007F7F7F7F7F7F7F FE01B9919191010101FFFFFFFFFFFFFF FF8099A2A2998080007F7F7F7F7F7F7F FE0131A9B121010101FFFFFFFFFFFFFF FF80B1AAB3A28080007F7F7F7F7F7F7F FE0119B189B1010101FFFFFFFFFFFFFF FF80B4A4B4A68080007F7F7F7F7F7F7F FE01B1A9B1A1010101FFFFFFFFFFFFFF 8F9F80808080807F7F7F7F7F7F7F7FFF F1F90101010101FFFFFFFFFFFFFFFFFF 808080808080C0FF7F7F7F7F7F7FBFFF 01010101010103FFFFFFFFFFFFFFFFFF FF80ACA9ADAC8080007F7F7F7F7F7F7F FE012DA9AD2D010101FFFFFFFFFFFFFF 808080808080807F7F7F7F7F7F7F7FFF 11397DF9F16101FFFFEFC7EFFFFFFFFF 0109D539D50901FFFFFFFFFFFFFFFFFF F1F1FDFD3D3D01FFFF9FBFE7E7FFFFFF 71A9BDBDFD3D01FFFFDFFFE7E7FFFFFF 0101296D290101FFFFFFFFFFFFFFFFFF 01113901391101FFFFFFFFFFFFFFFFFF 1D195545453901FFFFFFFFFFFFFFFFFF FF80B6A596B48080007F7F7F7F7F7F7F FE0159555555010101FFFFFFFFFFFFFF FF80808080809F8F007F7F7F7F7F7F7F FE0101010101F9F101FFFFFFFFFFFFFF 808080C0FFFFFFFF7F7F7FBFFFFFFFFF 01010103FFFFFFFFFFFFFFFFFFFFFFFF FDFDFDFDFDFD01FFE3E3E31F1F1FFFFF FDCDCDFDFD7D01FFFFB7B787B7FFFFFF FF80BAA2B2A28080007F7F7F7F7F7F7F FE019D9991DD010101FFFFFFFFFFFFFF FF80A1A2A2B98080007F7F7F7F7F7F7F FE0111A9B929010101FFFFFFFFFFFFFF FF80B3ABAAAB8080007F7F7F7F7F7F7F FE01A92939B9010101FFFFFFFFFFFFFF 1D3D7D7D7D7D01FFFFE7C7C7C7FFFFFF FDF5F5F585FD01FFFF9F9FFFFFFFFFFF 00000000000000000000000000000000 00000000000000000000000000000000 878381808080807F7F7F7F7F7F7F7FFF E1C18101010101FFFFFFFFFFFFFFFFFF 00000000000000000000000000000000 00000000000000000000000000000000 808898BE9888807F7F7F7F7F7F7F7FFF 80888CBE8C88807F7F7F7F7F7F7F7FFF FF80B1B2ABB28080007F7F7F7F7F7F7F FE0119A1A199010101FFFFFFFFFFFFFF FF8099B28BB28080007F7F7F7F7F7F7F FE0129A9B991010101FFFFFFFFFFFFFF FF809AB28AB28080007F7F7F7F7F7F7F FE01DD5991DD010101FFFFFFFFFFFFFF 2161FDFD612101FFFFFFFFFFFFFFFFFF 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFF 0018181818001800FFE7E7E7E7FFE7FF 006C6C2400000000FF9393DBFFFFFFFF 00247E24247E2400FFDB81DBDB81DBFF 00083E380E3E0800FFF7C1C7F1C1F7FF 0062640810264600FF9D9BF7EFD9B9FF 001C34386E643A00FFE3CBC7919BC5FF 0018183000000000FFE7E7CFFFFFFFFF 000C183030180C00FFF3E7CFCFE7F3FF 0030180C0C183000FFCFE7F3F3E7CFFF 000024187E182400FFFFDBE781E7DBFF 000018187E181800FFFFE7E781E7E7FF 0000000018183000FFFFFFFFE7E7CFFF 000000007E000000FFFFFFFF81FFFFFF 0000000000181800FFFFFFFFFFE7E7FF 00060C1830604000FFF9F3E7CF9FBFFF 003C666E76663C00FFC399918999C3FF 0018381818187E00FFE7C7E7E7E781FF 003C660C18307E00FFC399F3E7CF81FF 003C660C06663C00FFC399F3F999C3FF 0066667E06060600FF999981F9F9F9FF 007E607C06067C00FF819F83F9F983FF 001C307C66663C00FFE3CF839999C3FF 007E060C18303000FF81F9F3E7CFCFFF 003C663C66663C00FFC399C39999C3FF 003C663E06663C00FFC399C1F999C3FF 0000001800180000FFFFFFE7FFE7FFFF 0000001800183000FFFFFFE7FFE7CFFF 00000C1830180C00FFFFF3E7CFE7F3FF 0000007E007E0000FFFFFF81FF81FFFF 000030180C183000FFFFCFE7F3E7CFFF 003C660C18001800FFC399F3E7FFE7FF 003C666E6E603C00FFC39991919FC3FF 00183C667E666600FFE7C399819999FF 007C667C66667C00FF839983999983FF 003C666060663C00FFC3999F9F99C3FF 00786C66666C7800FF879399999387FF 007E607860607E00FF819F879F9F81FF 007E607860606000FF819F879F9F9FFF 003C606E66663C00FFC39F919999C3FF 0066667E66666600FF999981999999FF 003C181818183C00FFC3E7E7E7E7C3FF 001E060606663C00FFE1F9F9F999C3FF 00666C78786C6600FF999387879399FF 0060606060607E00FF9F9F9F9F9F81FF 0042667E7E666600FFBD9981819999FF 0066767E6E666600FF998981919999FF 003C666666663C00FFC399999999C3FF 007C667C60606000FF8399839F9F9FFF 003C66666A6C3E00FFC399999593C1FF 007C667C786C6600FF839983879399FF 003E603C06067C00FFC19FC3F9F983FF 007E181818181800FF81E7E7E7E7E7FF 0066666666663C00FF9999999999C3FF 00666666663C1800FF99999999C3E7FF 0066667E7E664200FF9999818199BDFF 00663C183C666600FF99C3E7C39999FF 0066663C18181800FF9999C3E7E7E7FF 007E0C1830607E00FF81F3E7CF9F81FF 003C303030303C00FFC3CFCFCFCFC3FF 006030180C060200FF9FCFE7F3F9FDFF 003C0C0C0C0C3C00FFC3F3F3F3F3C3FF 00183C6600000000FFE7C399FFFFFFFF 0000000000007E00FFFFFFFFFFFF81FF 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 FF0000000000000000FFFFFFFFFFFFFF FF80808080808080007F7F7F7F7F7F7F FF0179FDFDFD490100FFFFB7FFFFFFFF FF0155555555550100FFBFFFFBEFFFFF FF017D7D7D757D0100FFFFD7FFDFFFFF FF395555D5FD7D3900FFEFEFAF87C7FF FF80BAA2B2A28080007F7F7F7F7F7F7F FE019D9991DD010101FFFFFFFFFFFFFF 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFF 808080808080C0FF7F7F7F7F7F7FBFFF 01010101010103FFFFFFFFFFFFFFFFFF 808080C0FFFFFFFF7F7F7FBFFFFFFFFF 01010103FFFFFFFFFFFFFFFFFFFFFFFF FF3179793131FDFD00FFFFFFFFFFFF03 808080808080807F7F7F7F7F7F7F7FFF FDCDCDFDFD7D01FFFFB7B787B7FFFFFF 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 FFFFFFE0E0000000FF81BFA0E0000000 F8F8F8E0E0E0E0E0F888B8A0A0A0A0E0 3C3CFFFFFFFF3C3C2424E70000E72424 #3:MAIN BG 00001440010405040504050405040504 05040504050401040504050401040104 01040504050405040504010402041000 10001000100010001000100010000704 10001000040401040204540455044604 47040404020410001000100010001000 10001000100007041000100004040104 02045604640456045704040402041000 10001000100010001000100010000704 110011000404010402044E044F044804 49040404020410001000100010001000 10001000100007041100110004040104 020456045B0456045804040402041000 10001000100010001000100010000704 120012000404010402044E044F044A04 4B040404020410001000100010001000 10001000100007041200120004040104 020456045C0456045904040402041000 10001000100010001000100010000704 130013000404010402045E045F044C04 4D040404020410001000100010001000 10001000100007041300130004040104 020456045D0456045A04040401040604 06040604060406040604060406040504 06040604050405040504060406040604 06040104020400000000000000000000 00000000000000000000000000000000 00000000000040044104040402040000 00000000000000000000000000000000 00000000000000000000000000005004 51040404020400000000000000000000 00000000000000000000000000000000 00000000000060046104040402040000 00000000000000000000000000000000 00000000000000000000000000007004 71040404660467040304030403040304 03040304030403040304030403040304 42044304420444044204450456046504 01040104010401040104010401040104 01040104010401045204530462046304 62046304010405040504050405040504 05040504010401040504050401040504 05040504050405040504010402041100 12001300010411011201130104040204 10001000070401041504010415040104 15040404020401040104010401040104 01040104040402041000100007040104 15040104150401041504040402041102 12021302010411031203130304040204 11001100070401041504010415040104 15040404020401040104010401040104 01040104040402041100110007040104 15040104150401041504040402040104 01040104010401040104010404040204 12001200070403040304030403040304 03040404020401040104010401040104 01040104040402041200120007040104 01040104010401040104040402044004 41040104010401046004610404040204 13001300070401040104010401040104 01040404020450045104010401040104 70047104040402041300130007040104 01040104010401040104040401040604 06040604060406040604060405040504 06040604050406040604060406040604 06040104020400000000000400040004 00040000000000000000000000000000 00000000000040044104040402040000 00000000000000000000000000000000 00000000000000000000000000005004 51040404020400000000000000000000 00000000000000000000000000000000 00000000000060046104040402040000 00000000000000000000000000000000 00000000000000000000000000007004 71040404660467040304030403040304 03040304030403040304030403040304 42044304420444044204450456046504 01040104010401040104010401040104 01040104010401046204630452045304 62046304000400040004000400040004 00040004000400040004000400040004 00040004000400040004000400040004 00040004000400040004000400040004 00040004000400040004000400040004 00040004000000000000000000000000 00000000000000000000000400040004 00040000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000 #4:BG 00001410010501050105010501050105 01050105010501050105010501050105 01050105010501050105010506040604 06040604060406040604060406040604 06040604060406040604060406040604 06040604010401040104010401040104 01040104010401040104010401040104 01040104010401044004410401040104 01040104010401040104010401040104 01040104010401040104010401040104 50045104010401040104010401040104 01040104010401040104010401040104 01040104010401040404010401040104 01040104010401040104010401040104 01040104010401040104010401040104 04040104010401040104010401040104 01040104010401040104010401040104 01040104010401040404010401040104 01040104010401040104010401040104 01040104010401040104010401040104 04040104010401040104010401040104 01040104010401040104010401040104 01040104010401040404010401040104 01040104010401040104010401040104 01040104010401040104010401040104 04040104010401040104010401040104 01040104010401040104010401040104 01040104010401040404010401040104 01040104010401040104010401040104 01040104010401040104010401040104 60046104010401040104010401040104 01040104010401040104010401040104 01040104010401047004710406040604 06040604060406040604060406040604 06040604060406040604060406040604 06040604760477040304030403040304 0304030403040304030403047A047B04 6A046B04680469047804790456047C04 01040104010401040104010401040104 0104010456046D0456046C0474046504 75046504