Mercurial > hg > dmlib
comparison lib64gfx.c @ 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 |
comparison
equal
deleted
inserted
replaced
530:5b37a2e427b7 | 531:2ac364d0ace9 |
---|---|
261 img->laceBank2 = 1; | 261 img->laceBank2 = 1; |
262 return TRUE; | 262 return TRUE; |
263 } | 263 } |
264 | 264 |
265 | 265 |
266 static BOOL fmtSetFLIType(DMC64Image *img, const struct _DMC64EncDecOp *op, const Uint8 *buf, const size_t len) | |
267 { | |
268 (void) buf; | |
269 (void) len; | |
270 img->fliType = op->bank; | |
271 return TRUE; | |
272 } | |
273 | |
274 | |
266 const DMC64ImageFormat dmC64ImageFormats[] = | 275 const DMC64ImageFormat dmC64ImageFormats[] = |
267 { | 276 { |
268 { | 277 { |
269 D64_FMT_MC, ".drp", "DrazPaint 2.0 (packed)", 0x5800, -1, | 278 D64_FMT_MC, ".drp", "DrazPaint 2.0 (packed)", 0x5800, -1, |
270 fmtProbeDrazPaint20Packed, fmtDecodeDrazPaintPacked, | 279 fmtProbeDrazPaint20Packed, fmtDecodeDrazPaintPacked, |
341 D64_FMT_MC, ".kla", "Koala Paint (unpacked)", 0x6000, 10003, | 350 D64_FMT_MC, ".kla", "Koala Paint (unpacked)", 0x6000, 10003, |
342 NULL, NULL, | 351 NULL, NULL, |
343 NULL, NULL, NULL, | 352 NULL, NULL, NULL, |
344 4, | 353 4, |
345 { | 354 { |
355 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, | |
356 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, | |
357 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL }, | |
358 { DT_BGCOLOR, 0x2710, 0, 0, NULL, NULL }, | |
359 } | |
360 }, | |
361 | |
362 { | |
363 D64_FMT_MC, ".ocp", "Advanced Art Studio (unpacked)", 0x2000, 10018, | |
364 NULL, NULL, | |
365 NULL, NULL, NULL, | |
366 4, | |
367 { | |
368 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, | |
369 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, | |
370 { DT_COLOR_RAM, 0x2338, 0, 0, NULL, NULL }, | |
371 { DT_BGCOLOR, 0x2329, 0, 0, NULL, NULL }, | |
372 } | |
373 }, | |
374 | |
375 { | |
376 D64_FMT_MC, ".ami", "Amica Paint (packed)", 0x4000, -1, | |
377 fmtProbeAmicaPaintPacked, fmtDecodeAmicaPaintPacked, | |
378 NULL, NULL, NULL, | |
379 4, | |
380 { | |
346 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL }, | 381 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL }, |
347 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, | 382 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, |
348 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, | 383 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, |
349 { DT_BGCOLOR, 0x2710, 0, 0, NULL, NULL }, | 384 { DT_BGCOLOR, 0x2710, 0, 0, NULL, NULL }, |
350 } | 385 } |
351 }, | 386 }, |
352 | 387 |
353 { | 388 { |
354 D64_FMT_MC, ".ocp", "Advanced Art Studio (unpacked)", 0x2000, 10018, | 389 D64_FMT_MC, ".rpm", "Run Paint (unpacked)", 0x6000, 10006, |
355 NULL, NULL, | 390 NULL, NULL, |
356 NULL, NULL, NULL, | |
357 4, | |
358 { | |
359 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, | |
360 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, | |
361 { DT_COLOR_RAM, 0x2338, 0, 0, NULL, NULL }, | |
362 { DT_BGCOLOR, 0x2329, 0, 0, NULL, NULL }, | |
363 } | |
364 }, | |
365 | |
366 { | |
367 D64_FMT_MC, ".ami", "Amica Paint (packed)", 0x4000, -1, | |
368 fmtProbeAmicaPaintPacked, fmtDecodeAmicaPaintPacked, | |
369 NULL, NULL, NULL, | 391 NULL, NULL, NULL, |
370 4, | 392 4, |
371 { | 393 { |
372 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL }, | 394 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL }, |
373 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, | 395 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, |
375 { DT_BGCOLOR, 0x2710, 0, 0, NULL, NULL }, | 397 { DT_BGCOLOR, 0x2710, 0, 0, NULL, NULL }, |
376 } | 398 } |
377 }, | 399 }, |
378 | 400 |
379 { | 401 { |
380 D64_FMT_MC, ".rpm", "Run Paint (unpacked)", 0x6000, 10006, | 402 D64_FMT_HIRES, ".art", "Art Studio (unpacked)", 0x2000, 9009, |
381 NULL, NULL, | 403 NULL, NULL, |
382 NULL, NULL, NULL, | 404 NULL, NULL, NULL, |
383 4, | 405 2, |
384 { | 406 { |
385 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL }, | |
386 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, | 407 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, |
387 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, | 408 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, |
388 { DT_BGCOLOR, 0x2710, 0, 0, NULL, NULL }, | 409 } |
389 } | 410 }, |
390 }, | 411 |
391 | 412 { |
392 { | 413 D64_FMT_HIRES, ".iph", "Interpaint (unpacked)", 0x4000, 9002, |
393 D64_FMT_HIRES, ".art", "Art Studio (unpacked)", 0x2000, 9009, | |
394 NULL, NULL, | 414 NULL, NULL, |
395 NULL, NULL, NULL, | 415 NULL, NULL, NULL, |
396 2, | 416 2, |
397 { | 417 { |
398 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, | 418 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, |
399 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, | 419 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, |
400 } | 420 } |
401 }, | 421 }, |
402 | 422 |
403 { | 423 { |
404 D64_FMT_HIRES, ".iph", "Interpaint (unpacked)", 0x4000, 9002, | |
405 NULL, NULL, | |
406 NULL, NULL, NULL, | |
407 2, | |
408 { | |
409 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, | |
410 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, | |
411 } | |
412 }, | |
413 | |
414 { | |
415 D64_FMT_HIRES, ".dd", "Doodle (unpacked)", 0x1c00, 9218, | 424 D64_FMT_HIRES, ".dd", "Doodle (unpacked)", 0x1c00, 9218, |
416 NULL, NULL, | 425 NULL, NULL, |
417 NULL, NULL, NULL, | 426 NULL, NULL, NULL, |
418 2, | 427 2, |
419 { | 428 { |
420 { DT_SCREEN_RAM, 0x0000, 0, 0, NULL, NULL }, | 429 { DT_SCREEN_RAM, 0x0000, 0, 0, NULL, NULL }, |
421 { DT_BITMAP, 0x0400, 0, 0, NULL, NULL }, | 430 { DT_BITMAP, 0x0400, 0, 0, NULL, NULL }, |
422 } | 431 } |
423 }, | 432 }, |
424 | 433 |
434 { | |
435 D64_FMT_MC | D64_FMT_FLI, ".bml", "Blackmail FLI (unpacked)", 0x3b00, 17474, | |
436 NULL, NULL, | |
437 NULL, NULL, NULL, | |
438 11, | |
439 { | |
440 { DT_COLOR_RAM, 0x0100, 0, 0, NULL, NULL }, | |
441 | |
442 { DT_SCREEN_RAM, 0x0500, 0, 0, NULL, NULL }, | |
443 { DT_SCREEN_RAM, 0x0900, 1, 0, NULL, NULL }, | |
444 { DT_SCREEN_RAM, 0x0d00, 2, 0, NULL, NULL }, | |
445 { DT_SCREEN_RAM, 0x1100, 3, 0, NULL, NULL }, | |
446 | |
447 { DT_SCREEN_RAM, 0x1500, 4, 0, NULL, NULL }, | |
448 { DT_SCREEN_RAM, 0x1900, 5, 0, NULL, NULL }, | |
449 { DT_SCREEN_RAM, 0x1d00, 6, 0, NULL, NULL }, | |
450 { DT_SCREEN_RAM, 0x2100, 7, 0, NULL, NULL }, | |
451 | |
452 { DT_BITMAP, 0x2500, 0, 0, NULL, NULL }, | |
453 { DT_DEC_FUNCTION, 0x0000, D64_FLI_8BANK, 0, fmtSetFLIType, NULL }, | |
454 } | |
455 }, | |
456 | |
457 { | |
458 D64_FMT_MC | D64_FMT_FLI, ".fli", "FLI Designer (unpacked)", 0x3c00, 17409, | |
459 NULL, NULL, | |
460 NULL, NULL, NULL, | |
461 11, | |
462 { | |
463 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL }, | |
464 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL }, | |
465 { DT_SCREEN_RAM, 0x0800, 1, 0, NULL, NULL }, | |
466 { DT_SCREEN_RAM, 0x0c00, 2, 0, NULL, NULL }, | |
467 { DT_SCREEN_RAM, 0x1000, 3, 0, NULL, NULL }, | |
468 { DT_SCREEN_RAM, 0x1400, 4, 0, NULL, NULL }, | |
469 { DT_SCREEN_RAM, 0x1800, 5, 0, NULL, NULL }, | |
470 { DT_SCREEN_RAM, 0x1c00, 6, 0, NULL, NULL }, | |
471 { DT_SCREEN_RAM, 0x2000, 7, 0, NULL, NULL }, | |
472 { DT_BITMAP, 0x2400, 0, 0, NULL, NULL }, | |
473 { DT_DEC_FUNCTION, 0x0000, D64_FLI_8BANK, 0, fmtSetFLIType, NULL }, | |
474 } | |
475 }, | |
476 | |
425 }; | 477 }; |
426 | 478 |
427 const int ndmC64ImageFormats = sizeof(dmC64ImageFormats) / sizeof(dmC64ImageFormats[0]); | 479 const int ndmC64ImageFormats = sizeof(dmC64ImageFormats) / sizeof(dmC64ImageFormats[0]); |
428 | 480 |
429 | 481 |
548 | 600 |
549 return DMERR_OK; | 601 return DMERR_OK; |
550 } | 602 } |
551 | 603 |
552 | 604 |
553 static inline Uint8 dmC64GetMCColor(const DMC64Image *img, const int bits, const int bank, const int scroffs) | 605 static inline Uint8 dmC64GetMCColor(const DMC64Image *img, const int bits, const int cbank, const int vbank, const int scroffs) |
554 { | 606 { |
555 switch (bits) | 607 switch (bits) |
556 { | 608 { |
557 case 0: return img->bgcolor; break; | 609 case 0: return img->bgcolor; break; |
558 case 1: return img->screen[bank][scroffs] >> 4; break; | 610 case 1: return img->screen[vbank][scroffs] >> 4; break; |
559 case 2: return img->screen[bank][scroffs] & 15; break; | 611 case 2: return img->screen[vbank][scroffs] & 15; break; |
560 default: return img->color[bank][scroffs] & 15; break; | 612 default: return img->color[cbank][scroffs] & 15; break; |
561 } | 613 } |
562 } | 614 } |
563 | 615 |
564 | 616 |
565 // Convert a generic "C64" format bitmap in DMC64Image struct to | 617 // Convert a generic "C64" format bitmap in DMC64Image struct to |
602 const int v = 6 - ((xc * 2) & 6); | 654 const int v = 6 - ((xc * 2) & 6); |
603 Uint8 c; | 655 Uint8 c; |
604 | 656 |
605 if (src->type & D64_FMT_FLI) | 657 if (src->type & D64_FMT_FLI) |
606 { | 658 { |
607 int bank = 0; | 659 int vbank = 0; |
608 switch (src->fliType) | 660 switch (src->fliType) |
609 { | 661 { |
610 case D64_FLI_2BANK: | 662 case D64_FLI_2BANK: |
611 bank = yb / 4; | 663 vbank = yb / 4; |
612 break; | 664 break; |
613 case D64_FLI_4BANK: | 665 case D64_FLI_4BANK: |
614 bank = yb / 2; | 666 vbank = yb / 2; |
615 break; | 667 break; |
616 case D64_FLI_8BANK: | 668 case D64_FLI_8BANK: |
617 bank = yb; | 669 vbank = yb; |
618 break; | 670 break; |
619 } | 671 } |
620 c = dmC64GetMCColor(src, (src->bitmap[0][bmoffs] >> v) & 3, bank, scroffs); | 672 c = dmC64GetMCColor(src, (src->bitmap[0][bmoffs] >> v) & 3, 0, vbank, scroffs); |
621 *d++ = c; | 673 *d++ = c; |
622 *d++ = c; | 674 *d++ = c; |
623 } | 675 } |
624 else | 676 else |
625 if (src->type & D64_FMT_ILACE) | 677 if (src->type & D64_FMT_ILACE) |
626 { | 678 { |
627 *d++ = dmC64GetMCColor(src, (src->bitmap[0][bmoffs] >> v) & 3, src->laceBank1, scroffs); | 679 *d++ = dmC64GetMCColor(src, (src->bitmap[0][bmoffs] >> v) & 3, 0, src->laceBank1, scroffs); |
628 *d++ = dmC64GetMCColor(src, (src->bitmap[1][bmoffs] >> v) & 3, src->laceBank2, scroffs); | 680 *d++ = dmC64GetMCColor(src, (src->bitmap[1][bmoffs] >> v) & 3, 0, src->laceBank2, scroffs); |
629 } | 681 } |
630 else | 682 else |
631 { | 683 { |
632 c = dmC64GetMCColor(src, (src->bitmap[0][bmoffs] >> v) & 3, 0, scroffs); | 684 c = dmC64GetMCColor(src, (src->bitmap[0][bmoffs] >> v) & 3, 0, 0, scroffs); |
633 *d++ = c; | 685 *d++ = c; |
634 *d++ = c; | 686 *d++ = c; |
635 } | 687 } |
636 } | 688 } |
637 } | 689 } |