Mercurial > hg > dmlib
changeset 531:2ac364d0ace9
Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 22 Nov 2012 17:10:05 +0200 |
parents | 5b37a2e427b7 |
children | 128a50feff07 |
files | lib64gfx.c |
diffstat | 1 files changed, 65 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/lib64gfx.c Thu Nov 22 15:28:27 2012 +0200 +++ b/lib64gfx.c Thu Nov 22 17:10:05 2012 +0200 @@ -263,6 +263,15 @@ } +static BOOL fmtSetFLIType(DMC64Image *img, const struct _DMC64EncDecOp *op, const Uint8 *buf, const size_t len) +{ + (void) buf; + (void) len; + img->fliType = op->bank; + return TRUE; +} + + const DMC64ImageFormat dmC64ImageFormats[] = { { @@ -343,9 +352,9 @@ NULL, NULL, NULL, 4, { - { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL }, { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, + { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL }, { DT_BGCOLOR, 0x2710, 0, 0, NULL, NULL }, } }, @@ -422,6 +431,49 @@ } }, + { + D64_FMT_MC | D64_FMT_FLI, ".bml", "Blackmail FLI (unpacked)", 0x3b00, 17474, + NULL, NULL, + NULL, NULL, NULL, + 11, + { + { DT_COLOR_RAM, 0x0100, 0, 0, NULL, NULL }, + + { DT_SCREEN_RAM, 0x0500, 0, 0, NULL, NULL }, + { DT_SCREEN_RAM, 0x0900, 1, 0, NULL, NULL }, + { DT_SCREEN_RAM, 0x0d00, 2, 0, NULL, NULL }, + { DT_SCREEN_RAM, 0x1100, 3, 0, NULL, NULL }, + + { DT_SCREEN_RAM, 0x1500, 4, 0, NULL, NULL }, + { DT_SCREEN_RAM, 0x1900, 5, 0, NULL, NULL }, + { DT_SCREEN_RAM, 0x1d00, 6, 0, NULL, NULL }, + { DT_SCREEN_RAM, 0x2100, 7, 0, NULL, NULL }, + + { DT_BITMAP, 0x2500, 0, 0, NULL, NULL }, + { DT_DEC_FUNCTION, 0x0000, D64_FLI_8BANK, 0, fmtSetFLIType, NULL }, + } + }, + + { + D64_FMT_MC | D64_FMT_FLI, ".fli", "FLI Designer (unpacked)", 0x3c00, 17409, + NULL, NULL, + NULL, NULL, NULL, + 11, + { + { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL }, + { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL }, + { DT_SCREEN_RAM, 0x0800, 1, 0, NULL, NULL }, + { DT_SCREEN_RAM, 0x0c00, 2, 0, NULL, NULL }, + { DT_SCREEN_RAM, 0x1000, 3, 0, NULL, NULL }, + { DT_SCREEN_RAM, 0x1400, 4, 0, NULL, NULL }, + { DT_SCREEN_RAM, 0x1800, 5, 0, NULL, NULL }, + { DT_SCREEN_RAM, 0x1c00, 6, 0, NULL, NULL }, + { DT_SCREEN_RAM, 0x2000, 7, 0, NULL, NULL }, + { DT_BITMAP, 0x2400, 0, 0, NULL, NULL }, + { DT_DEC_FUNCTION, 0x0000, D64_FLI_8BANK, 0, fmtSetFLIType, NULL }, + } + }, + }; const int ndmC64ImageFormats = sizeof(dmC64ImageFormats) / sizeof(dmC64ImageFormats[0]); @@ -550,14 +602,14 @@ } -static inline Uint8 dmC64GetMCColor(const DMC64Image *img, const int bits, const int bank, const int scroffs) +static inline Uint8 dmC64GetMCColor(const DMC64Image *img, const int bits, const int cbank, const int vbank, const int scroffs) { switch (bits) { case 0: return img->bgcolor; break; - case 1: return img->screen[bank][scroffs] >> 4; break; - case 2: return img->screen[bank][scroffs] & 15; break; - default: return img->color[bank][scroffs] & 15; break; + case 1: return img->screen[vbank][scroffs] >> 4; break; + case 2: return img->screen[vbank][scroffs] & 15; break; + default: return img->color[cbank][scroffs] & 15; break; } } @@ -604,32 +656,32 @@ if (src->type & D64_FMT_FLI) { - int bank = 0; + int vbank = 0; switch (src->fliType) { case D64_FLI_2BANK: - bank = yb / 4; + vbank = yb / 4; break; case D64_FLI_4BANK: - bank = yb / 2; + vbank = yb / 2; break; case D64_FLI_8BANK: - bank = yb; + vbank = yb; break; } - c = dmC64GetMCColor(src, (src->bitmap[0][bmoffs] >> v) & 3, bank, scroffs); + c = dmC64GetMCColor(src, (src->bitmap[0][bmoffs] >> v) & 3, 0, vbank, scroffs); *d++ = c; *d++ = c; } else if (src->type & D64_FMT_ILACE) { - *d++ = dmC64GetMCColor(src, (src->bitmap[0][bmoffs] >> v) & 3, src->laceBank1, scroffs); - *d++ = dmC64GetMCColor(src, (src->bitmap[1][bmoffs] >> v) & 3, src->laceBank2, scroffs); + *d++ = dmC64GetMCColor(src, (src->bitmap[0][bmoffs] >> v) & 3, 0, src->laceBank1, scroffs); + *d++ = dmC64GetMCColor(src, (src->bitmap[1][bmoffs] >> v) & 3, 0, src->laceBank2, scroffs); } else { - c = dmC64GetMCColor(src, (src->bitmap[0][bmoffs] >> v) & 3, 0, scroffs); + c = dmC64GetMCColor(src, (src->bitmap[0][bmoffs] >> v) & 3, 0, 0, scroffs); *d++ = c; *d++ = c; }