X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=eradicate;a=blobdiff_plain;f=tools%2Frlesprite%2Fsrc%2Fmain.c;h=23bb58101813371312781c5666efd3c04185e2fd;hp=1080b155be5b8c5e00405e8aeaf8ce61051aaf09;hb=ca4cf08917d2c51d7a98c4cea6dae71c0ae7225d;hpb=2bd7529337d75380170f58364b1328ef3b8dc845 diff --git a/tools/rlesprite/src/main.c b/tools/rlesprite/src/main.c index 1080b15..23bb581 100644 --- a/tools/rlesprite/src/main.c +++ b/tools/rlesprite/src/main.c @@ -211,9 +211,11 @@ int proc_sheet(const char *fname) int rlesprite(struct image *img, int x, int y, int xsz, int ysz) { int i, j, numops, mode, new_mode, start, skip_acc, pixsz = img->bpp / 8; - unsigned char *pptr = img->pixels + y * img->scansz + x * pixsz; + unsigned char *scanptr, *pptr; struct csop *ops, *optr, endop = {0}; + pptr = img->pixels + y * img->scansz + x * pixsz; + ops = optr = alloca((xsz + 1) * ysz * sizeof *ops); for(i=0; ipixels + y * img->scansz + x * img->bpp / 8; + scanptr = pptr = img->pixels + y * img->scansz + x * img->bpp / 8; optr = ops; skip_acc = 0; @@ -269,7 +271,8 @@ int rlesprite(struct image *img, int x, int y, int xsz, int ysz) /* maybe at some point combine multiple endl into yskips? meh */ fwrite(optr, sizeof *optr, 1, outfp); skip_acc = 0; - pptr += img->scansz - xsz * pixsz; + scanptr += img->scansz; + pptr = scanptr; break; case CSOP_COPY: @@ -284,7 +287,7 @@ int rlesprite(struct image *img, int x, int y, int xsz, int ysz) fwrite(optr, sizeof *optr, 1, outfp); fwrite(pptr, pixsz, optr->len, outfp); - pptr += optr->len; + pptr += optr->len * pixsz; break; default: