X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dosdemo;a=blobdiff_plain;f=tools%2Fcsprite%2Fsrc%2Fmain.c;h=fab302beeccd20cd14eaa9ba69a67253dc8ef2d5;hp=0192002391c0a2972a2f26f666c7ab4170a4dd9f;hb=c912e59b898fe1ac461a1468e4a2e1937de286d7;hpb=815504923a05c5f22a756b021997983e512474e1 diff --git a/tools/csprite/src/main.c b/tools/csprite/src/main.c index 0192002..fab302b 100644 --- a/tools/csprite/src/main.c +++ b/tools/csprite/src/main.c @@ -24,6 +24,8 @@ int fbpitch, fbwidth = 320; const char *name = "sprite"; int asyntax = AS_GNU; int conv565; +int padding; +const char *wrop = "mov"; int main(int argc, char **argv) { @@ -46,6 +48,13 @@ int main(int argc, char **argv) return 1; } + } else if(strcmp(argv[i], "-p") == 0 || strcmp(argv[i], "-pad") == 0) { + padding = strtol(argv[++i], &endp, 10); + if(endp == argv[i] || padding < 0) { + fprintf(stderr, "%s must be followed by a positive number\n", argv[i - 1]); + return 1; + } + } else if(strcmp(argv[i], "-coffset") == 0) { cmap_offs = strtol(argv[++i], &endp, 10); if(endp == argv[i] || cmap_offs < 0 || cmap_offs >= 256) { @@ -84,6 +93,9 @@ int main(int argc, char **argv) } else if(strcmp(argv[i], "-conv565") == 0) { conv565 = 1; + } else if(strcmp(argv[i], "-x") == 0 || strcmp(argv[i], "-xor") == 0) { + wrop = "xor"; + } else if(strcmp(argv[i], "-gas") == 0) { asyntax = AS_GNU; @@ -155,7 +167,7 @@ const char *prefixfmt[] = { int proc_sheet(const char *fname) { - int i, j, num_xtiles, num_ytiles, xsz, ysz, tidx; + int i, j, x, y, num_xtiles, num_ytiles, xsz, ysz, tidx; struct image img; if(load_image(&img, fname) == -1) { @@ -182,11 +194,25 @@ int proc_sheet(const char *fname) if(tile_xsz <= 0) { num_xtiles = num_ytiles = 1; - xsz = rect.w; - ysz = rect.h; + xsz = rect.w - padding; + ysz = rect.h - padding; } else { - num_xtiles = rect.w / tile_xsz; - num_ytiles = rect.h / tile_ysz; + if(padding) { + num_xtiles = num_ytiles = 0; + i = 0; + while(i < rect.w) { + num_xtiles++; + i += tile_xsz + padding; + } + i = 0; + while(i < rect.h) { + num_ytiles++; + i += tile_ysz + padding; + } + } else { + num_xtiles = rect.w / tile_xsz; + num_ytiles = rect.h / tile_ysz; + } xsz = tile_xsz; ysz = tile_ysz; } @@ -202,11 +228,15 @@ int proc_sheet(const char *fname) putchar('\n'); tidx = 0; + y = rect.y; for(i=0; ilen * pixsz; for(j=0; j: tile size (default: whole image)\n"); printf(" -r,-rect : use rectangle of the input image (default: whole image)\n"); + printf(" -p,-pad : how many pixels to skip between tiles in source image (default: 0)\n"); printf(" -coffset : colormap offset [0, 255] (default: 0)\n"); printf(" -fbpitch : target framebuffer pitch (scanline size in bytes)\n"); printf(" -k,-key : color-key for transparency (default: 0)\n"); printf(" -conv565: convert image to 16bpp 565 before processing\n"); + printf(" -x,-xor: use XOR for writing pixels instead of MOV\n"); printf(" -gas: output GNU assembler code (default)\n"); printf(" -nasm: output NASM-compatible code\n"); printf(" -h: print usage and exit\n");