Mercurial > hg > forks > multipaint-js
view exporters.pde @ 0:ebd5689e2985
Initial import of Multipaint sketch version 22.5.2017.
author | Tero Heikkinen |
---|---|
date | Tue, 03 Jul 2018 20:56:55 +0300 |
parents | |
children | e2f754cc1665 |
line wrap: on
line source
// machine definitions // source writer and other export/import functions // the machine_export() makes use of bitmapexport() and colorexport() below // remember hexdump -C ! String g_formatname, g_formatextension; int g_headpos; int[] g_grids = new int[16]; int OLD=0; int NEW=1; int g_gridmode=OLD; int bitti(int inp) { if(inp==0)return 0; return 1; } int qbitti(int inp) { if(inp==10)return 1; return 0; } void poopspecialsprites() { int x,y,xs,xx,yy,mup,row; int b7,b6,b5,b4,b3,b2,b1,b0,val; mup=0; for(row=0;row<=1;row++){ for(x=0;x<=8;x++) { for(y=0;y<=20;y++){ for(xs=0;xs<=2;xs++){ if(mup>0){print(",");} mup=1; xx=x*24+xs*8; if(row==1&&x==7){xx=xx+24;} if(x==8){xx=xx+24;} yy=row*48+2+y; b7=qbitti(easygetcolor(xx,yy)); b6=qbitti(easygetcolor(xx+1,yy)); b5=qbitti(easygetcolor(xx+2,yy)); b4=qbitti(easygetcolor(xx+3,yy)); b3=qbitti(easygetcolor(xx+4,yy)); b2=qbitti(easygetcolor(xx+5,yy)); b1=qbitti(easygetcolor(xx+6,yy)); b0=qbitti(easygetcolor(xx+7,yy)); val=b7*128+b6*64+b5*32+b4*16+b3*8+b2*4+b1*2+b0; print(str(val)); } }print(",0"); println(""); for(y=0;y<=20;y++){ for(xs=0;xs<=2;xs++){ if(mup>0){print(",");} mup=1; xx=x*24+xs*8;yy=row*48+y*2; if(x==8){xx=xx+24;} b7=bitti(easygetcolor(xx,yy)); b6=bitti(easygetcolor(xx+1,yy)); b5=bitti(easygetcolor(xx+2,yy)); b4=bitti(easygetcolor(xx+3,yy)); b3=bitti(easygetcolor(xx+4,yy)); b2=bitti(easygetcolor(xx+5,yy)); b1=bitti(easygetcolor(xx+6,yy)); b0=bitti(easygetcolor(xx+7,yy)); if(x==7){xx=x*24+xs*16;yy=row*48+y; b7=bitti(easygetcolor(xx,yy)); b6=bitti(easygetcolor(xx+2,yy)); b5=bitti(easygetcolor(xx+4,yy)); b4=bitti(easygetcolor(xx+6,yy)); b3=bitti(easygetcolor(xx+8,yy)); b2=bitti(easygetcolor(xx+10,yy)); b1=bitti(easygetcolor(xx+12,yy)); b0=bitti(easygetcolor(xx+14,yy)); } val=b7*128+b6*64+b5*32+b4*16+b3*8+b2*4+b1*2+b0; print(str(val)); } }print(",0"); println(); } } } void poopultimachars() { PImage poutput; poutput=createImage(256*8,8,RGB); int x,y,rr,gg,bb,xx,yy,bx,by; int ac,box,boy; int b7,b6,b5,b4,b3,b2,b1,b0,val; int blok,muna; color c; blok=0; PrintWriter f=createWriter("/home/tero/code/c64/ultima/graffa.s"); f.println(".global _graffa"); f.println("_graffa:"); f.println(); //print("unsigned char graffa[]={"); for(y=0;y<=5;y++){ muna=0; if(blok<=63){ f.print(".byte ");} for(x=0;x<=19;x++) { if(blok<=63){ for(boy=0;boy<=1;boy++){ for(box=0;box<=1;box++){ for(yy=0;yy<=7;yy++){ bx=x*16+box*8;by=(y*16+boy*8+yy); b7=0;b6=0;b5=0;b4=0;b3=0;b2=0;b1=0;b0=0; ac=easygetcolor(bx,by); if(ac==0){b7=0;b6=0;} if(ac==15){b7=1;b6=0;} if(ac==2){b7=0;b6=1;} if(ac==7){b7=1;b6=1;} ac=easygetcolor(bx+2,by); if(ac==0){b5=0;b4=0;} if(ac==15){b5=1;b4=0;} if(ac==2){b5=0;b4=1;} if(ac==7){b5=1;b4=1;} ac=easygetcolor(bx+4,by); if(ac==0){b3=0;b2=0;} if(ac==15){b3=1;b2=0;} if(ac==2){b3=0;b2=1;} if(ac==7){b3=1;b2=1;} ac=easygetcolor(bx+6,by); if(ac==0){b1=0;b0=0;} if(ac==15){b1=1;b0=0;} if(ac==2){b1=0;b0=1;} if(ac==7){b1=1;b0=1;} val=b7*128+b6*64+b5*32+b4*16+b3*8+b2*4+b1*2+b0; f.print(str(val));muna++; if(muna<640){f.print(",");} for(xx=0;xx<=7;xx++){ rr=g_r[easygetcolor(x*8+xx,y*8+yy)]; gg=g_g[easygetcolor(x*8+xx,y*8+yy)]; bb=g_b[easygetcolor(x*8+xx,y*8+yy)]; c=color(rr,gg,bb); poutput.set(x*8+y*(16*8)+xx,yy,c); } } } } } } f.println(); blok++; } f.flush(); f.close(); //poutput.save("/home/tero/sketchbook/petscii/data/petscii-c64x.png"); } void poopchars() { PImage poutput; poutput=createImage(256*8,8,RGB); int x,y,rr,gg,bb,xx,yy,bx,by; int ac; int b7,b6,b5,b4,b3,b2,b1,b0,val; color c; PrintWriter f=createWriter("/home/tero/code/c64/newgame/graffa.s"); f.println(".global _graffa"); f.println("_graffa:"); f.println(); //print("unsigned char graffa[]={"); for(y=0;y<=15;y++){ f.print(".byte "); for(x=0;x<=15;x++) { for(yy=0;yy<=7;yy++){ bx=x*8;by=(y*8+yy); b7=0;b6=0;b5=0;b4=0;b3=0;b2=0;b1=0;b0=0; ac=easygetcolor(bx,by); if(ac==0){b7=0;b6=0;} if(ac==15){b7=1;b6=0;} if(ac==11){b7=0;b6=1;} if(ac==5){b7=1;b6=1;} ac=easygetcolor(bx+2,by); if(ac==0){b5=0;b4=0;} if(ac==15){b5=1;b4=0;} if(ac==11){b5=0;b4=1;} if(ac==5){b5=1;b4=1;} ac=easygetcolor(bx+4,by); if(ac==0){b3=0;b2=0;} if(ac==15){b3=1;b2=0;} if(ac==11){b3=0;b2=1;} if(ac==5){b3=1;b2=1;} ac=easygetcolor(bx+6,by); if(ac==0){b1=0;b0=0;} if(ac==15){b1=1;b0=0;} if(ac==11){b1=0;b0=1;} if(ac==5){b1=1;b0=1;} val=b7*128+b6*64+b5*32+b4*16+b3*8+b2*4+b1*2+b0; f.print(str(val)); if(x<15||yy<7){f.print(",");} for(xx=0;xx<=7;xx++){ rr=g_r[easygetcolor(x*8+xx,y*8+yy)]; gg=g_g[easygetcolor(x*8+xx,y*8+yy)]; bb=g_b[easygetcolor(x*8+xx,y*8+yy)]; c=color(rr,gg,bb); poutput.set(x*8+y*(16*8)+xx,yy,c); } } } f.println(); } f.flush(); f.close(); poutput.save("/home/tero/sketchbook/petscii/data/petscii-c64x.png"); } void poopsprites() { int x,y,xs,xx,yy,mup; int b7,b6,b5,b4,b3,b2,b1,b0,val; mup=0; for(x=0;x<=7;x++) { for(y=0;y<=15;y++){ for(xs=0;xs<=1;xs++){ if(mup>0){print(",");} mup=1; xx=x*16+xs*8; yy=y; b7=bitti(easygetcolor(xx,yy)); b6=bitti(easygetcolor(xx+1,yy)); b5=bitti(easygetcolor(xx+2,yy)); b4=bitti(easygetcolor(xx+3,yy)); b3=bitti(easygetcolor(xx+4,yy)); b2=bitti(easygetcolor(xx+5,yy)); b1=bitti(easygetcolor(xx+6,yy)); b0=bitti(easygetcolor(xx+7,yy)); val=b7*128+b6*64+b5*32+b4*16+b3*8+b2*4+b1*2+b0; print(str(val)); } }println(); } } void pushbyte(int ad,int head) { g_map[ad]=byte((g_template[head]&128)>>7); g_map[ad+1]=byte((g_template[head]&64)>>6); g_map[ad+2]=byte((g_template[head]&32)>>5); g_map[ad+3]=byte((g_template[head]&16)>>4); g_map[ad+4]=byte((g_template[head]&8)>>3); g_map[ad+5]=byte((g_template[head]&4)>>2); g_map[ad+6]=byte((g_template[head]&2)>>1); g_map[ad+7]=byte(g_template[head]&1); } void format_import(String fname) { int x, y, x2, y2, y3, head, xx, yy, yp, ad, valu; int p1, p2, p3; head=0; if (machine==SPECTRUM) //SCR=SCREEN$ { // 32*24*8 bytes of bitmap // 32*24 bytes of attributes import_program(fname); if(g_template.length<6912){message("FALSE");return;} for (y=0; y<=2; y++) { for (y2=0; y2<=7; y2++) { for (yy=0; yy<=7; yy++) { for (x=0; x<=31; x++) { yp=y*64+yy*8+y2; ad=1024+yp*256+x*8; pushbyte(ad,head); head++; } } } } for (y=0; y<=23; y++) { for (x=0; x<=31; x++) { ad=65536+x+y*(32*8); valu=g_template[head]; int ink=valu&7; int pap=valu&56; pap=pap>>3; int bri=valu&64; bri=bri>>6; ink=ink+bri*8; pap=pap+bri*8; if (pap==8) { pap=0; } for (y2=0; y2<=7; y2++) { g_map[ad+y2*32]=byte(ink); g_map[ad+y2*32+MX*MY*8]=byte(pap); } head++; } } } if (machine==C64) { //0x0002->bitmap //0x1f42->colormap //0x232a=border (take the lower nybble) import_program(fname); //art studio if(g_template.length<9006){message("FALSE");return;} if (g_template.length>=0x232a) { g_map[0]=byte(g_template[0x232a]&15); } for (y=0; y<25; y++) { for (x=0; x<40; x++) { for (y2=0; y2<=7; y2++) { head=2+x*8+y*(40*8)+y2; ad=1024+x*8+y*(320*8)+y2*320; pushbyte(ad,head); p1=g_template[0x1f42+x+y*40]&15; p2=g_template[0x1f42+x+y*40]&240; p2=p2>>4; g_map[65536+x+y*40*8+y2*40]=byte(p2); g_map[65536+MX*MY*8+x+y*40*8+y2*40]=byte(p1); } } } } if (machine==PLUS4) { // Botticelli //g.hires.prg = botticelli //2 - luminance 40*25 //1026 - colors 40*25 //2050 - bitmappi 40*25*8 import_program(fname); if(g_template.length<10050){message("FALSE");return;} int l1,l2; for (y=0; y<25; y++) { for (x=0; x<40; x++) { for (y2=0; y2<=7; y2++) { head=2050+x*8+y*(40*8)+y2; ad=1024+x*8+y*(320*8)+y2*320; pushbyte(ad,head); p1=g_template[1026+x+y*40]&15; p2=g_template[1026+x+y*40]&240; p2=p2>>4; l1=g_template[2+x+y*40]&15; l2=g_template[2+x+y*40]&240; l2=l2>>4; g_map[65536+x+y*40*8+y2*40]=byte(convertlumi(l1,p2)); g_map[65536+MX*MY*8+x+y*40*8+y2*40]=byte(convertlumi(l2,p1)); } } } } if (machine==PLUS4M) { // Multi Botticelli //m.multi.prg = multi botticelli //2- lumins 40*25 //1024 - bäkki1 //1025 - bäkki2 //1026 - colors 40*25 //2050 - bitmap 40*25*8 import_program(fname); if(g_template.length<10050){message("FALSE");return;} int l1,l2; for (y=0; y<25; y++) { for (x=0; x<40; x++) { for (y2=0; y2<=7; y2++) { head=2050+x*8+y*(40*8)+y2; ad=1024+x*8+y*(320*8)+y2*320; pushbyte(ad,head); p1=g_template[1026+x+y*40]&15; p2=g_template[1026+x+y*40]&240; p2=p2>>4; l1=g_template[2+x+y*40]&15; l2=g_template[2+x+y*40]&240; l2=l2>>4; g_map[65536+x+y*40+1000]=byte(convertlumi(l1,p2)); g_map[65536+x+y*40+0000]=byte(convertlumi(l2,p1)); } } } p1=int(g_template[1025])&240; l1=int(g_template[1025])&15; p1=p1>>4; g_map[1]=byte(convertlumi(l1,p1)); p1=int(g_template[1024])&240; l1=int(g_template[1024])&15; p1=p1>>4; g_map[2]=byte(convertlumi(l1,p1)); } if (machine==C64M) {//advanced art studio //adv. art studio (=multicolor) 10018 bytes //0x0002 bitmap (40*25*8) //0x1f42 colors1 (40*25) //0x232a border //0x232b background //0x233a colors2 (40*25) import_program(fname); if(g_template.length<10018){message("FALSE");return;} for (y=0; y<25; y++) { for (x=0; x<40; x++) { for (y2=0; y2<8; y2++) { head=2+x*8+y*(40*8)+y2; ad=1024+x*8+y*(320*8)+y2*320; pushbyte(ad,head); p1=g_template[0x1f42+x+y*40]&15; p2=g_template[0x1f42+x+y*40]&240; p2=p2>>4; p3=g_template[0x233a+x+y*40]&15; g_map[65536+x+y*40]=byte(p1); g_map[65536+x+y*40+1000]=byte(p2); g_map[65536+x+y*40+2000]=byte(p3); g_map[0]=byte(g_template[0x232a]&15);//bord g_map[1]=byte(g_template[0x232b]&15);//baku } } } } if(machine==MSX){ // sc2 // 7=bitmap 32*24*8 // 7+(32*24*8)=colormap 32*24 import_program(fname); if(g_template.length<14343){message("FALSE");return;} for (y=0; y<24; y++) { for (x=0; x<32; x++) { for (y2=0; y2<=7; y2++) { head=7+x*8+y*(32*8)+y2; ad=1024+x*8+y*(256*8)+y2*256; pushbyte(ad,head); p1=g_template[(8199)+x*8+((y*8*32)+y2)]&15; p2=g_template[(8199)+x*8+((y*8*32)+y2)]&240; p2=p2>>4; if(p1==0){p1=1;} if(p2==0){p2=1;} g_map[65536+x+y*32*8+y2*32]=byte(p2); g_map[65536+MX*MY*8+x+y*32*8+y2*32]=byte(p1); } } } } if(machine==CPC){ // a studio? import_program(fname); message("Not|Working"); } consistency(); refresh(); g_boxreconstruct=2; } void format_export(String fname) { int val1, val2, val3; int y, y2, yy, x, yp, xp, ad, valu, valu2, bri; if (machine==PLUS4) {// botticelli hires load_template("g.hires.prg"); set_head(0x02); colorexport(40, 25, 65536, 5);//lumis set_head(1026); colorexport(40, 25, 65536, 4);//colors set_head(2050); bitmapexport(40, 25); export_program(fname); } if (machine==PLUS4M) {// multi botticelli multicolor load_template("m.multi.prg"); val2=getpluscolor(int(g_map[1])); val1=getplusluminance(int(g_map[1])); val3=val2*16+val1; set_head(1025); write_head(val3); val2=getpluscolor(int(g_map[2])); val1=getplusluminance(int(g_map[2])); val3=val2*16+val1; set_head(1024); write_head(val3); set_head(1026); colorexport(40, 25, 65536, 6);//colors set_head(2); colorexport(40, 25, 65536, 7);//lumis set_head(2050); bitmapexport(40, 25); export_program(fname); } if (machine==C64) { load_template("hires.art"); set_head(2); bitmapexport(40, 25); set_head(0x1f42); colorexport(40, 25, 65536, 0); set_head(0x232a); write_head(int(g_map[0])); export_program(fname); } if (machine==C64M) { if(fname.indexOf(".kla")==-1){ load_template("multic.ocp"); set_head(2); bitmapexport(40, 25); set_head(0x1f42); colorexport(40, 25, 65536, 1); set_head(0x233a); colorexport(40, 25, 65536+2000, 2); set_head(0x232a); write_head(int(g_map[0])); set_head(0x232b); write_head(int(g_map[1])); export_program(fname); } //koala if(fname.indexOf(".kla")>=0){ load_template("multic.kla"); set_head(2); bitmapexport(40,25); set_head(0x1f42); colorexport(40,25,65536,1); set_head(0x232a); colorexport(40,25,65536+2000,2); set_head(0x2712); write_head(int(g_map[1]&15)); export_program(fname); } } if (machine==MSX) { load_template("msx-screen2.sc2"); set_head(7); bitmapexport(32, 24); set_head(7+(32*24*8)+768+1280); colorexport(32, 24, 65536, 3);//there's an exception for msx-style export_program(fname); } if (machine==SPECTRUM) { load_template("zx-screen.scr"); set_head(0); for (y=0; y<=2; y++) { for (y2=0; y2<=7; y2++) { for (yy=0; yy<=7; yy++) { for (x=0; x<=31; x++) { yp=y*64+yy*8+y2; ad=1024+yp*256+x*8; valu=g_map[ad+0]*128+g_map[ad+1]*64+g_map[ad+2]*32+g_map[ad+3]*16+g_map[ad+4]*8+g_map[ad+5]*4+g_map[ad+6]*2+g_map[ad+7]*1; write_head(int(valu)); } } } } for (y=0; y<=23; y++) { for (x=0; x<=31; x++) { ad=65536+x+y*256; valu=int(g_map[ad]); valu2=int(g_map[ad+MX*MY*8]); bri=0; if (valu>=8) { bri=1; valu=valu-8; valu2=valu2-8; if (valu2<=0) { valu2=0; } } if (bri==1) { valu=valu+64; } write_head(int(valu+valu2*8)); } } export_program(fname); } } void machine_export(String fname, int sorsa) { int yy, xx, x, y2, y, checksum; int xp, yp; int valu, valu2; int val1, val2, val3; int ad, by; int bri, skyp; g_sorsaa=sorsa;//aargh another global if (sorsa==1) { exwriter=createWriter(fname); } // any common text headers by=0; skyp=0; outputter(";machine="+str(machine)+" ("+g_name+")", true); if (machine==C64) { //C64 HIRES load_template("c64show.prg"); set_head(0X0227); bitmapexport(40, 25); set_head(0X2167); write_head(g_map[0]);//=border set_head(0X2168); write_head(g_map[1]);//=background mutta ei tarvita set_head(0X2169); outputter("; The following two first values are border and background", true); colorexport(40, 25, 65536, 0); export_program(fname); //c64show.prg //offsets //0x0227->bitmappi (40x25 x 8 bytee) //0x2167:borderi väri //0x2169->värikartta (40x25 bytee, nyppelit foreg/backg) } if (machine==C64M) { //C64 MULTICOLOR load_template("c64mshow.prg"); set_head(0x0239); bitmapexport(40, 25); // first color information set_head(0x2179); write_head(g_map[0]); set_head(0x217A); write_head(g_map[1]); set_head(0x217B); outputter("; The following two first values are border and background", true); colorexport(40, 25, 65536, 1); // second color information set_head(0x2563); outputter("; The following goes to $D800 onwards", true); colorexport(40, 25, 65536+2000, 2); export_program(fname); //c64 multicolor //offsets //0x0239->bitmappi (40x25 x 8 bytee) //0x2179:borderi väri //0x217A:bäkkis väri //0x217B->värikartta 1 (40x25 bytee, nyppelit foreg/backg ilmeisesti) //0x2563->värikartta 2 (40x25 bytee, nyppeli 3-väri nepan osoitteessa $d800-) } if (machine==PLUS4M) { //PLUS4 MULTICOLOR load_template("showpfourm.prg"); outputter(" .global _bitmap", true); outputter(" .global _color1", true); outputter(" .global _color2", true); outputter(" .global _border", true); outputter(" .global _back1", true); outputter(" .global _back2", true); outputter("_bitmap:", true); set_head(0x013e); bitmapexport(40, 25); outputter("_border:", true); val1=getpluscolor(int(g_map[0])); val2=getplusluminance(int(g_map[0])); val3=val2*16+val1; set_head(0x207e); write_head(val3); outputter(" .byte "+val3, true); outputter("_back1:", true); val1=getpluscolor(int(g_map[1])); val2=getplusluminance(int(g_map[1])); val3=val2*16+val1; set_head(0x207f); write_head(val3); outputter(" .byte "+val3, true); outputter("_back2:", true); val1=getpluscolor(int(g_map[2])); val2=getplusluminance(int(g_map[2])); val3=val2*16+val1; set_head(0x2080); write_head(val3); outputter(" .byte "+val3, true); outputter("_color1:", true); set_head(0x2081); colorexport(40, 25, 65536, 6); outputter("_color2:", true); set_head(0x2469); colorexport(40, 25, 65536, 7); export_program(fname); //plus4 multic //0x013e bitmap (40 x 25 x 8) //0x207e border //0x207f background 1 //0x2080 background 2 //0x2081 colors (40 x 25) //0x2469 luminance (40 x 25) } if (machine==PLUS4) {// Plus 4 hires load_template("showpfour.prg"); outputter(" .global _bitmap", true); outputter(" .global _color", true); outputter(" .global _lumi", true); outputter(" .global _border", true); outputter("_bitmap:", true); set_head(0x0137); bitmapexport(40, 25); val1=getpluscolor(int(g_map[0])); val2=getplusluminance(int(g_map[0])); val3=val2*16+val1; set_head(0x2077); write_head(val3); //border set_head(0x2078); colorexport(40, 25, 65536, 4);//colors set_head(0x2460); colorexport(40, 25, 65536, 5);//lumis export_program(fname); //plus4 hires //0x0137 bitmap (40 x 25 x 8) //0x2077 borderi //0x2078 colors (40 x 25) //0x2460 luminance (40 x 25) } if (machine==MSX) { // MSX load_template("msxshow.com"); set_head(0x00f9); outputter(char(9)+".globl _nimi1,_nimi2", true); outputter(char(9)+".area _CODE", true); outputter("_nimi1:", true); bitmapexport(32, 24); set_head(0x18f9); //write_head(g_map[1]); //backg //outputter("; The first following value is background", true); outputter("_nimi2:", true); colorexport(32, 24, 65536, 3);//there's an exception for msx-style export_program(fname); //msx comm //0x00f9 bitmap (32x24 x 8 bytes) //0x18f9 background color //0x18fa colors (32*24 bytes) } if (machine==SPECTRUM) { // ZX Spectrum //would need some cleaning up // outputter(" .area _DATA",true); // outputter(" .globl _taustakuva",true); // outputter("",true); // outputter("_taustakuva:",true); load_template("specshow.tap"); int stad; checksum=0xc9; for (y=0x1d24; y<=0x1d3d; y++) { //1d3e checksum=checksum^int(g_template[y]); } //TAP requires fiddling with the checksum //println("Checksum:"+hex(checksum,2)); set_head(0x0223); outputter(".byte "+(str(g_map[0]))+" ;border", true); write_head(int(g_map[0])); checksum=checksum^int(g_map[0]); for (y=0; y<=2; y++) { for (y2=0; y2<=7; y2++) { for (yy=0; yy<=7; yy++) { outputter(".byte ", false); for (x=0; x<=31; x++) { yp=y*64+yy*8+y2; xp=x; ad=1024+yp*256+x*8; valu=g_map[ad+0]*128+g_map[ad+1]*64+g_map[ad+2]*32+g_map[ad+3]*16+g_map[ad+4]*8+g_map[ad+5]*4+g_map[ad+6]*2+g_map[ad+7]*1; outputter(str(int(valu)), false); by++; write_head(int(valu)); checksum=checksum^int(valu); if (x<=30) { outputter(",", false); } } outputter("", true); } } } outputter("; attributes", true); for (y=0; y<=23; y++) { outputter(".byte ", false); for (x=0; x<=31; x++) { ad=65536+x+y*256; valu=int(g_map[ad]); valu2=int(g_map[ad+MX*MY*8]); bri=0; if (valu>=8) { bri=1; valu=valu-8; valu2=valu2-8; if (valu2<=0) { valu2=0; } } if (bri==1) { valu=valu+64; } outputter(str(valu+valu2*8), false); by++; write_head(int(valu+valu2*8)); checksum=checksum^int(valu+valu2*8); if (x<=30) { outputter(",", false); } } outputter("", true); } //println("checksum:"+hex(checksum,2)); set_head(0x1d3e); write_head(int(checksum)); export_program(fname); } if (machine==CPC) { load_template("cpc-mode0.bin"); set_head(69);//bitmap offset bitmapexport_cpc(160, 200); set_head(16453); outputter(";palette", true); outputter(".byte ", false); for (int i=0; i<g_maxcolors; i++) {//fixed # of palette entries, just trying to be generic val1=int(g_g[i]/(256/g_palsteps)); val2=int(g_r[i]/(256/g_palsteps)); val3=int(g_b[i]/(256/g_palsteps)); write_head(val1*9+val2*3+val3); outputter(str(val1*9+val2*3+val3), false); if (i<g_maxcolors-1) { outputter(",", false); } } outputter("", true); outputter(";border", true); outputter(".byte ", false); set_head(16469); valu=int(g_map[0]); val1=int(g_g[valu]/(256/g_palsteps)); val2=int(g_r[valu]/(256/g_palsteps)); val3=int(g_b[valu]/(256/g_palsteps)); write_head(val1*9+val2*3+val3); outputter(str(val1*9+val2*3+val3), false); //cpc //69 bitmap 16384 bytes //16453 palette 16 bytes (0..26) //16469 border color (0..26) export_program(fname); } // any common lead-outs if (sorsa==1) { exwriter.flush(); exwriter.close(); } } void bitmapexport_cpc(int xwid, int yy) { int x, y, ad, val1, val2, y2; int pix0b0, pix0b1, pix0b2, pix0b3; int pix1b0, pix1b1, pix1b2, pix1b3; int pp; pp=0; outputter(";bitmap", true); for (y2=0; y2<=7; y2++) { for (y=0; y<25; y++) { outputter(" .byte ", false); for (x=0; x<xwid/2; x++) { ad=1024+(y*8)*X+(y2*X)+x*4; val1=int(g_map[ad]); pix0b0=0;pix0b1=0;pix0b2=0;pix0b3=0; if ((val1&1)!=0) pix0b0=1; if ((val1&2)!=0) pix0b1=1; if ((val1&4)!=0) pix0b2=1; if ((val1&8)!=0) pix0b3=1; val1=int(g_map[ad+2]); pix1b0=0;pix1b1=0;pix1b2=0;pix1b3=0; if ((val1&1)!=0) pix1b0=1; if ((val1&2)!=0) pix1b1=1; if ((val1&4)!=0) pix1b2=1; if ((val1&8)!=0) pix1b3=1; val2=pix1b3+pix0b3*2+pix1b1*4+pix0b1*8+pix1b2*16+pix0b2*32+pix1b0*64+pix0b0*128; outputter(str(int(val2)), false); write_head(val2); pp++; if (x<xwid/2-1) { outputter(",", false); } } outputter("", true); } outputter(" .byte ", false); for (int j=0; j<=47; j++) { write_head(0); outputter(str(int(0)), false); pp++; if (j<47) { outputter(",", false); } } outputter("", true); } outputter("", true); } void bitmapexport(int xx, int yy) { int xwid, ywid, x, y, y2, value, ad, linep; linep=0; xwid=xx*8; ywid=yy*8; //outputter("unsigned char img[]={",false); for (y=0; y<yy; y++) { for (x=0; x<xx; x++) { // outputter(" .byte ", false); outputter(char(9)+".db ",false); for (y2=0; y2<=7; y2++) { ad=1024+y*(xwid*8)+(y2*xwid)+x*8; value=g_map[ad+0]*128+g_map[ad+1]*64+g_map[ad+2]*32+g_map[ad+3]*16+g_map[ad+4]*8+g_map[ad+5]*4+g_map[ad+6]*2+g_map[ad+7]*1; outputter(str(int(value)), false); write_head(int(value)); if (y2<=6) { outputter(",", false); } } outputter("", true); linep++; if (linep==xx) { linep=0; outputter("", true); } } } outputter("", true); } int convertlumi(int l,int f) { int res=0; if(f==0)return 0; if(l==0)res=0+f; if(l==1)res=15+f; if(l==2)res=30+f; if(l==3)res=45+f; if(l==4)res=60+f; if(l==5)res=75+f; if(l==6)res=90+f; if(l==7)res=105+f; return res; } int getplusluminance(int c) { int res=0; if (c==0)res=0; if (c>=1&&c<=15)res=0; if (c>=16&&c<=30)res=1; if (c>=31&&c<=45)res=2; if (c>=46&&c<=60)res=3; if (c>=61&&c<=75)res=4; if (c>=76&&c<=90)res=5; if (c>=91&&c<=105)res=6; if (c>=106&&c<=120)res=7; return res; } int getpluscolor(int c) { int res=0; if (c==0)res=0; if (c>=1&&c<=15)res=c; if (c>=16&&c<=30)res=c-15; if (c>=31&&c<=45)res=c-30; if (c>=46&&c<=60)res=c-45; if (c>=61&&c<=75)res=c-60; if (c>=76&&c<=90)res=c-75; if (c>=91&&c<=105)res=c-90; if (c>=106&&c<=120)res=c-105; return res; } void colorexport(int xx, int yy, int source, int param) { int x, y, y2, valu, valu2, kalu, muista, ad, linep, xwid, ywid, xoor, yline, myrpsi; xwid=xx*8; ywid=yy*8; valu=0; valu2=0; myrpsi=0; xoor=xx; if (param==0||param==4||param==5) { xoor=xx*8; } if (machine==MSX) { myrpsi=7; } if (param<2) { outputter("colora:", true); } if (param==2) { outputter("colorb:", true); } if (param<2) { outputter(" .byte "+int(g_map[0])+","+int(g_map[1]), true); } if (param==3) { // outputter("color:", true); // outputter(" .byte ", false); // outputter(g_map[0]+" ", true); xoor=xx*8; } if (param==4) { outputter("_border:", true); outputter(" .byte ", false); kalu=getpluscolor(int(g_map[0])); valu2=getplusluminance(int(g_map[0])); valu=valu2*16+kalu; outputter(valu+" ", true); outputter("_color:", true); } if (param==5) { outputter("_lumi:", true); } for (y=0; y<yy; y++) { //outputter(" .byte ", false); outputter(char(9)+".db ", false); for (x=0; x<xx; x++) { for (yline=0; yline<=myrpsi; yline++) { ad=source+x+y*xoor+yline*xx; if (param==0) { valu=int(g_map[ad]); valu2=int(g_map[ad+MX*MY*8]); } if (param==1) { valu2=int(g_map[ad]); valu=int(g_map[ad+1000]); } if (param==2) { valu2=int(g_map[ad]); valu=0; } if (param==3) { valu=int(g_map[ad]); valu2=int(g_map[ad+MX*MY*8]); } if (param==4) {//plus4 colortable kalu=int(g_map[ad]); valu=getpluscolor(kalu); kalu=int(g_map[ad+MX*MY*8]); valu2=getpluscolor(kalu); } if (param==5) {//plus4 lumitable kalu=int(g_map[ad]); valu2=getplusluminance(kalu); kalu=int(g_map[ad+MX*MY*8]); valu=getplusluminance(kalu); } if (param==6) {//plus4 multic1 valu2=getpluscolor(int(g_map[ad])); valu=getpluscolor(int(g_map[ad+1000])); } if (param==7) {//plus4 multic2 valu=getplusluminance(int(g_map[ad])); valu2=getplusluminance(int(g_map[ad+1000])); } outputter(str(valu*16+valu2), false); write_head(int(valu*16+valu2)); if (x<(xx-1)||yline<myrpsi) { outputter(",", false); } } } outputter("", true); } outputter("", true); } void load_template(String fname) { g_template=loadBytes("templates/"+fname); } void import_program(String fname) { g_template=loadBytes(fname); } void set_head(int pos) { g_headpos=pos; } void write_head(int bb) { g_template[g_headpos]=byte(bb); g_headpos++; } void export_program(String fname) { if (g_sorsaa==1) { return; } saveBytes(fname, g_template); } void outputter(String oput, boolean eol) { if (g_sorsaa==0)return; if (eol==false)exwriter.print(oput); if (eol==true)exwriter.println(oput); } void import_image(String name) { PImage image; image = loadImage(name); int balx, baly, xx, yy, x2, y2, rr, gg, bb, avg, molox, i, j, target; int cx, cy; int aas, bbs, swap, idefix, avx, avy; int[] pixut= new int[260]; int[] idx=new int[260]; int[] histog=new int[8192]; float ww, hh, fld, compa, fx2, fy2; color c; int xcolors, limitter, vertti, erkki; int rh,gh,bh; xcolors=g_maxcolors; vertti=8; erkki=1; limitter=2; if (g_britemode==1) { xcolors=8; } if (g_attrimode==0) { vertti=1; erkki=8; } if (g_multic==1) { limitter=4; }//because zero color can be anywhere? if (g_multic==2) { limitter=16; } molox=1; command('O');//special clear screen if (g_multic==1||g_hzoomer==2) { molox=2; } ww=image.width; hh=image.height; if (ww<=16||hh<=16) { return; } balx=int(ww/X); balx=balx*molox; baly=int(hh/Y); if (balx<1) { balx=1; } if (baly<1) { baly=1; } if(g_palsteps>0){ for(i=0;i<g_maxcolors;i++){ makecolor(i,0,0,0); } int maxhis,palls,psteps; psteps=int(g_palsteps-1); maxhis=0;palls=int(255/psteps); for (cy=0; cy<MY*erkki; cy++) { for (cx=0; cx<MX; cx++) { for (yy=cy*vertti; yy<=cy*vertti+vertti-1; yy++) { for (xx=cx*8; xx<=cx*8+7; xx=xx+molox) { fx2=(ww/X)*xx; fy2=(hh/Y)*yy; x2=int(fx2); y2=int(fy2); rr=0; gg=0; bb=0; avg=0; for (avy=0; avy<baly; avy++) { for (avx=0; avx<balx; avx++) { c=image.get(x2+avx, y2+avy); rr=rr+int(red(c)); gg=gg+int(green(c)); bb=bb+int(blue(c)); avg++; } } rh=rr/(avg); gh=gg/(avg); bh=bb/(avg); rh=int(rh)/palls; gh=int(gh)/palls; bh=int(bh)/palls; histog[int(rh*(g_palsteps*g_palsteps)+gh*(g_palsteps)+bh)]++; if(histog[int(rh*(g_palsteps*g_palsteps)+gh*(g_palsteps)+bh)]>maxhis){maxhis=histog[int(rh*(g_palsteps*g_palsteps)+gh*(g_palsteps)+bh)];} } } } } int step; step=0; for(j=maxhis;j>0;j--){ for(i=0;i<=4096;i++){ if(histog[i]==j){ rh=i/int(g_palsteps*g_palsteps); gh=i-int(rh*(g_palsteps*g_palsteps));gh=gh/int(g_palsteps); bh=i-int(rh*(g_palsteps*g_palsteps));bh=bh-int(gh*g_palsteps); rh=rh*int(palls); gh=gh*int(palls); bh=bh*int(palls); if(step<g_maxcolors){ makecolor(step,rh,gh,bh);step++; } } } } } for (cy=0; cy<MY*erkki; cy++) { for (cx=0; cx<MX; cx++) { for (i=0; i<xcolors; i++) { pixut[i]=0; idx[i]=i; } for (yy=cy*vertti; yy<=cy*vertti+vertti-1; yy++) { for (xx=cx*8; xx<=cx*8+7; xx=xx+molox) { fx2=(ww/X)*xx; fy2=(hh/Y)*yy; x2=int(fx2); y2=int(fy2); rr=0; gg=0; bb=0; avg=0; for (avy=0; avy<baly; avy++) { for (avx=0; avx<balx; avx++) { c=image.get(x2+avx, y2+avy); rr=rr+int(red(c)); gg=gg+int(green(c)); bb=bb+int(blue(c)); avg++; } } rr=rr/(avg); gg=gg/(avg); bb=bb/(avg); g_farge=0; target=-1; compa=9999; for (i=0; i<xcolors; i++) { fld=dist(rr, gg, bb, g_r[i], g_g[i], g_b[i]); if (fld<compa) { compa=fld; target=i; } } g_farge=target; pixut[target]++;//histogramming } } for (aas=0; aas<xcolors; aas++) { for (bbs=0; bbs<=aas; bbs++) { if (pixut[aas]>pixut[bbs]) { swap=pixut[aas]; pixut[aas]=pixut[bbs]; pixut[bbs]=swap; swap=idx[aas]; idx[aas]=idx[bbs]; idx[bbs]=swap; } } } for (idefix=0; idefix<limitter; idefix++) { i=idx[idefix]; for (yy=cy*vertti; yy<=cy*vertti+vertti-1; yy++) { for (xx=cx*8; xx<=cx*8+7; xx=xx+molox) { fx2=(ww/X)*xx; fy2=(hh/Y)*yy; x2=int(fx2); y2=int(fy2); rr=0; gg=0; bb=0; avg=0; for (avy=0; avy<baly; avy++) { for (avx=0; avx<balx; avx++) { c=image.get(x2+avx, y2+avy); rr=rr+int(red(c)); gg=gg+int(green(c)); bb=bb+int(blue(c)); avg++; } } rr=rr/(avg); gg=gg/(avg); bb=bb/(avg); g_farge=0; target=-1; compa=9999; for (j=0; j<limitter; j++) { fld=dist(rr, gg, bb, g_r[idx[j]], g_g[idx[j]], g_b[idx[j]]); if (fld<compa) { compa=fld; target=idx[j]; } } if (i==target) { g_farge=target; makepoint(xx, yy); } } } if (idefix==0) { for (yy=cy*vertti; yy<=cy*vertti+vertti-1; yy++) { for (xx=cx*8; xx<=cx*8+7; xx=xx+molox) { g_farge=idx[0]; makepoint(xx, yy); } } } } } } } void export_image(String name) { //output the visible graphics as image //with border //processing style int xx, yy, f, x2; color c; for (xx=0; xx<output.width; xx++) { for (yy=0; yy<output.width; yy++) { c=color(g_r[259], g_g[259], g_b[259]); output.set(xx, yy, c); } } for (xx=0; xx<X; xx++) { for (yy=0; yy<Y; yy++) { x2=xx; f=getabsa(x2, yy, 0); if (g_multic==1||g_hzoomer==2) { x2=xx/2; x2=x2*2; f=getmultic(x2, yy, 0); } if (machine==MSX) { if (f==0) { f=g_map[1]; } } c=color(g_r[f], g_g[f], g_b[f]); for (int vertti=0; vertti<=g_omag; vertti++) { for (int mortti=0; mortti<=g_omag; mortti++) { output.set((g_bordh*g_omag)/2+xx*g_omag+mortti, (g_bordv*g_omag)/2+yy*g_omag+vertti, c); } } } } output.save(name); } void export_image_sans_border(String name) { //output the visible graphics as image //processing style //without border int xx, yy, f, x2; color c; for (xx=0; xx<outputsans.width; xx++) { for (yy=0; yy<outputsans.width; yy++) { c=color(g_r[259], g_g[259], g_b[259]); outputsans.set(xx, yy, c); } } for (xx=0; xx<X; xx++) { for (yy=0; yy<Y; yy++) { x2=xx; f=getabsa(x2, yy, 0); if (g_multic==1||g_hzoomer==2) { x2=xx/2; x2=x2*2; f=getmultic(x2, yy, 0); } if (machine==MSX) { if (f==0) { f=g_map[1]; } } c=color(g_r[f], g_g[f], g_b[f]); for (int vertti=0; vertti<=g_omag; vertti++) { for (int mortti=0; mortti<=g_omag; mortti++) { outputsans.set(xx*g_omag+mortti, yy*g_omag+vertti, c); } } } } outputsans.save(name); } void make_c64_palette() { // Pepto's murky C64 palette: http://www.pepto.de/projects/colorvic int rgb[]={#000000,#FFFFFF,#68372B,#70A4B2,#6F3D86,#588D43,#352879,#B8C76F, #6F4F25,#433900,#9A6759,#444444,#6C6C6C,#9AD284,#6C5EB5,#959595}; for(int i=0;i<g_maxcolors;i++){ rgb[i]=rgb[i]&0xffffff; g_grids[i]=rgb[i]+#282828; makecolor(i,rgb[i]>>16,(rgb[i]�FF00)>>8,rgb[i]�FF); } g_grids[1]=#d0d0d0;g_gridmode=NEW; g_map[13]=byte(C64); } void make_plus4_palette() { int rgb[]={ #000000,#2C2C2C,#621307,#00424C,#510378,#004E00,#27188E,#303E00,#582100,#463000,#244400,#630448,#004E0C,#0E2784,#33118E,#184800, #3B3B3B,#702419,#00505A,#601685,#125D00,#36289B,#3F4C00,#663100,#553F00,#345200,#711656,#005C1D,#1F3691,#42229B,#285700, #424242,#772C21,#055861,#661E8C,#1B6400,#3E30A2,#475400,#6D3900,#5C4700,#3B5900,#771F5D,#046325,#273E98,#492AA1,#305E00, #515151,#843B31,#17656F,#742E99,#2B7100,#4C3FAF,#556200,#7A4709,#6A5500,#4A6700,#852F6B,#177135,#364CA5,#5739AE,#3F6B00, #7A7A7A,#AC665C,#468E97,#9C5AC0,#57992E,#766AD5,#7E8A13,#A2713A,#927E20,#748F14,#AC5A93,#459960,#6276CB,#8064D4,#6A9419, #959595,#C58178,#62A8B1,#B675D9,#73B34C,#9185ED,#99A433,#BB8C57,#AC993E,#8FAA34,#C676AD,#62B37B,#7D91E4,#9B80ED,#85AE38, #AFAFAF,#DE9B93,#7DC2CA,#CF90F2,#8DCD68,#AB9FFF,#B3BE51,#D5A673,#C6B35B,#A9C351,#DF91C7,#7DCC96,#97ABFD,#B59AFF,#9FC755, #E1E1E1,#FFCFC6,#B2F4FC,#FFC4FF,#C1FE9D,#DDD2FF,#E5F088,#FFD9A8,#F7E591,#DBF588,#FFC4F9,#B1FEC9,#CBDDFF,#E7CDFF,#D2F98C }; for(int i=0;i<g_maxcolors;i++){ rgb[i]=rgb[i]&0xffffff; makecolor(i,rgb[i]>>16,(rgb[i]�FF00)>>8,rgb[i]�FF); } } void make_msx_palette() { int rgb[]={ #000000, #000000, #3EB849, #74D07D, #5955E0, #8076F1, #B95E51, #65DBEF, #DB6559, #FF897D, #CCC35E, #DED087, #3AA241, #B766B5, #CCCCCC, #FFFFFF}; for(int i=0;i<g_maxcolors;i++){ rgb[i]=rgb[i]&0xffffff; g_grids[i]=rgb[i]+#1f1f1f; makecolor(i,(rgb[i]>>16),(rgb[i]�FF00)>>8,rgb[i]�FF); } g_grids[5]=#9f95Ff; g_grids[7]=#84faEF; g_grids[9]=#ffa99d; g_grids[15]=#d8d8d8;g_gridmode=NEW; } void make_spectrum_palette() { int rgb[]={#000000,#0000C0,#C00000,#C000C0,#00C000,#00C0C0,#C0C000,#C0C0C0, #000000,#0000FF,#FF0000,#FF00FF,#00FF00,#00FFFF,#FFFF00,#FFFFFF}; g_grids[9]=#0000d8; g_grids[10]=#d80000; g_grids[11]=#d800d8; g_grids[12]=#00d800; g_grids[13]=#00d8d8; g_grids[14]=#d8d800; g_grids[15]=#d8d8d8; for(int i=0;i<g_maxcolors;i++){ rgb[i]=rgb[i]&0xffffff; if(i<=8){g_grids[i]=rgb[i]+#282828;} makecolor(i,(rgb[i]>>16),(rgb[i]�FF00)>>8,rgb[i]�FF); } g_gridmode=NEW; } void set_machine(int m) { machine=m; g_expname="none"; g_map[3]=byte(machine);g_map[13]=byte(machine); g_palsteps=0;g_farge=1;g_backg=0;g_britemode=0; g_charlimit=0;g_hzoomer=1;g_backmode=0; g_formatname=""; g_formatextension=""; g_maxcolors=16;X=320;Y=200; if (machine==C64) {//c64 hires g_expname="prg"; g_formatname="Art Studio"; g_formatextension="art"; g_name="c64"; g_attrimode=1; g_map[1]=byte(255); g_map[0]=6; make_c64_palette(); } if (machine==CPC) { //Amstrad CPC mode 0 g_hzoomer=2; g_palsteps=3; g_name="cpc";g_expname="bin"; g_formatname="";g_formatextension=""; g_multic=2; g_attrimode=0; g_map[1]=byte(255);g_map[0]=1; makecolor(0, 0, 0, 0); makecolor(1, 0x0, 0x0, 0x80); makecolor(2, 0x00, 0x00, 0xFF); makecolor(3, 0x80, 0x00, 0x00); makecolor(4, 0x80, 0x00, 0x80); makecolor(5, 0x80, 0x00, 0xFF); makecolor(6, 0xFF, 0x00, 0x00); makecolor(7, 0xFF, 0x00, 0x80); makecolor(8, 0xFF, 0x00, 0xFF); makecolor(9, 0x00, 0x80, 0x00); makecolor(10, 0x00, 0x80, 0x80); makecolor(11, 0x00, 0x80, 0xFF); makecolor(12, 0x80, 0x80, 0x00); makecolor(13, 0x80, 0x80, 0x80); makecolor(14, 0x80, 0x80, 0xFF); makecolor(15, 0xFF, 0xFF, 0xFF); } if (machine==MSX) { // MSX g_name="msx"; g_expname="com"; g_formatname="Screen 2"; g_formatextension="sc2"; X=256;Y=192; g_attrimode=0; g_backmode=1; g_farge=15; g_backg=0; //TI99 variant /* makecolor(0,0,0,0); makecolor(1,0,0,0); makecolor(2,0x21,0xc8,0x42); //21c842 medgreen makecolor(3,0x5e,0xdc,0x78);//5edc78 light green makecolor(4,0x54,0x55,0xed);//5455ed dark blue makecolor(5,0x7d,0x76,0xFc);//7d76fc light blue makecolor(6,0xd4,0x52,0x4d); //d4524d dark red makecolor(7,0x42,0xeb,0xf5); //42ebf5 cyan makecolor(8,0xfc,0x55,0x54); //fc5554 medium red makecolor(9,0xff,0x79,0x78); //ff7978 light red makecolor(10,0xd4,0xc1,0x54);// d4c154 dark yellow makecolor(11,0xe6,0xce,0x80);// e6ce80 light yellow makecolor(12,0x21,0xb0,0x3b);// 21b03b dark green makecolor(13,0xc9,0x5b,0xba);// c95bba magenta makecolor(14,0xCc,0xcc,0xCc);// gray makecolor(15,0xFF,0xFF,0xFF); */ make_msx_palette(); } if (machine==SPECTRUM) { // ZX Spectrum g_name="spec"; g_expname="tap"; X=256;Y=192; g_formatname="Screen$";g_formatextension="scr"; g_farge=7; g_backg=0; g_attrimode=1; g_britemode=1; g_map[0]=1; g_map[1]=byte(255); make_spectrum_palette(); } if (machine==TIMEX) { // timex sinclair g_name="tmx"; X=256;Y=192; g_farge=7; g_backg=0; g_attrimode=0; g_britemode=1; g_map[1]=byte(255); make_spectrum_palette(); } if (machine==JR200) { // Panasonic JR200 g_name="jr200"; X=256;Y=192; g_maxcolors=8; g_farge=7; g_backg=0; g_attrimode=1; g_map[1]=byte(255); make_spectrum_palette();//cheating } if (machine==PLUS4M||machine==PLUS4) { // Commodore plus/4 g_backmode=1; g_multic=1; g_name="plus4m";g_expname="prg"; g_attrimode=1; g_maxcolors=121; g_charlimit=2; g_map[1]=0;g_map[2]=61;g_farge=61; g_formatname="M.Botticelli";g_formatextension="prg"; if (machine==PLUS4) { // plus/4 hires g_formatname="Botticelli";g_formatextension="prg"; g_multic=0; g_backmode=0; g_charlimit=0; g_name="plus4"; g_attrimode=1; g_map[1]=byte(255); } g_map[0]=6; make_plus4_palette(); } if (machine==C64M) { //c64 multicolor g_backmode=1; g_charlimit=3; g_multic=1; g_name="c64m";g_expname="prg"; g_formatname="A. A. Studio"; g_formatextension="ocp"; g_attrimode=1; g_map[1]=byte(0); g_map[0]=6; make_c64_palette(); } if (machine==AMIGA) { //generic 16bit g_backmode=1; g_maxcolors=32;g_palsteps=16; g_name="test"; g_multic=2; g_attrimode=2; g_map[1]=byte(0); for (int z=0; z<g_maxcolors; z++) { if (z<16) { makecolor(z, z*17, z*17, z*17); } else { makecolor(z, (z-16)*17, 0, 0); } } } if (machine==C64FLI) { //c64 hires FLI = AFLI g_expname="prg"; g_formatname="";g_formatextension=""; g_name="afli"; g_attrimode=0; g_map[1]=byte(255); g_map[0]=6; make_c64_palette(); } if (machine==C64FLIM) { //C64 FLI multicolor g_hzoomer=2; g_maxcolors=16; g_name="fli";g_expname=""; g_formatname="";g_formatextension=""; g_multic=2; g_attrimode=0; g_map[1]=byte(255); g_map[0]=6; make_c64_palette(); } if (machine==FAKEX) { // Fake 8-bit computer g_name="fake"; g_expname=""; g_formatname=""; g_formatextension=""; X=320;Y=200; g_multic=2; g_attrimode=2;//g_palsteps=4; g_farge=15; g_backg=0; make_c64_palette(); } if (machine==PICO8) { // Pico-8 fantasy console g_name="pico8"; g_expname=""; g_formatname=""; g_formatextension=""; X=128;Y=128; g_farge=15; g_backg=0; g_multic=2; g_attrimode=2; makecolor(0, 0, 0, 0); makecolor(1, 32, 51, 123); makecolor(2, 126, 37, 83); makecolor(3, 0, 144, 61); makecolor(4, 171, 82, 54); makecolor(5, 52, 54, 53); makecolor(6, 194, 195, 199); makecolor(7, 255, 241, 232); makecolor(8, 255, 0, 77); makecolor(9, 255, 155, 0); makecolor(10, 255, 231, 39); makecolor(11, 0, 226, 50); makecolor(12, 41, 173, 255); makecolor(13, 132, 112, 169); makecolor(14, 255, 119, 168); makecolor(15, 255, 214, 197); } if (machine==UNIA) { // Unia digital palette g_name="unia"; g_expname=""; g_formatname=""; g_formatextension=""; X=256;Y=192; g_farge=15; g_backg=0; g_multic=2; g_attrimode=2; makecolor(0, 0, 0 , 0); makecolor(1, 0xff, 0xff, 0xff); makecolor(2, 0xff, 0xfd, 0x38); makecolor(3, 0xff, 0xc5, 0x00); makecolor(4, 0xff, 0x00, 0x00); makecolor(5, 0xff, 0x3c, 0xb4); makecolor(6, 0xa0, 0x23, 0xbc); makecolor(7, 0x1b, 0xa1, 0xfc); makecolor(8, 0xe1, 0xe1, 0xe1); makecolor(9, 0xb9, 0x63, 0x00); makecolor(10, 0xff, 0xaa, 0xbe); makecolor(11, 0xd2, 0x9b, 0xd7); makecolor(12, 0xad, 0xad, 0xad); makecolor(13, 0x00, 0xb7, 0xb7); makecolor(14, 0x23, 0xaf, 0x32); makecolor(15, 0x29, 0xf7, 0xa7); } } void packer() { int i, dat, amo; int head; amo=1; i=0; head=0; //0=repeated element [n repetitions, element length, element] //1-255=repeat byte [element] while (i<=g_map.length-3) { dat=int(g_map[i]); while (int (g_map[i+1])==dat&&i<=g_map.length-3) { if (int(g_map[i+1])==dat) { if (amo<65535) { amo++; i++; } if (amo==65535) { //pask[head]=dat;pask[head+1]=255; println(dat+" x "+amo); head=head+3; amo=0; } } } println(dat+" x "+amo); amo=0; // pask[head]=dat;pask[head+1]=amo; head++; head++; head++; i++; } println(head); for (i=0; i<=g_map.length; i++) { } message("Packing|test|"+str(head)); }