diff --git a/src/openrct2/cmdline_sprite.c b/src/openrct2/cmdline_sprite.c index 4310cc31a5..4e3357af12 100644 --- a/src/openrct2/cmdline_sprite.c +++ b/src/openrct2/cmdline_sprite.c @@ -37,7 +37,7 @@ typedef struct rct_sprite_file_header { assert_struct_size(rct_sprite_file_header, 8); typedef struct rct_sprite_file_palette_entry { - uint8 b, g, r, a; + uint8 b, g, r, a; } rct_sprite_file_palette_entry; typedef struct rle_code { @@ -218,7 +218,12 @@ static bool sprite_file_export(sint32 spriteIndex, const char *outPath) dpi.zoom_level = 0; memcpy(spriteFilePalette, _standardPalette, 256 * 4); - gfx_rle_sprite_to_buffer(spriteHeader->offset, pixels, (uint8*)spriteFilePalette, &dpi, IMAGE_TYPE_DEFAULT, 0, spriteHeader->height, 0, spriteHeader->width); + + if (spriteHeader->flags & G1_FLAG_RLE_COMPRESSION) { + gfx_rle_sprite_to_buffer(spriteHeader->offset, pixels, (uint8*)spriteFilePalette, &dpi, IMAGE_TYPE_DEFAULT, 0, spriteHeader->height, 0, spriteHeader->width); + } else { + gfx_bmp_sprite_to_buffer((uint8*)spriteFilePalette, NULL, spriteHeader->offset, pixels, spriteHeader, &dpi, spriteHeader->height, spriteHeader->width, IMAGE_TYPE_DEFAULT); + } if (image_io_png_write(&dpi, (rct_palette*)spriteFilePalette, outPath)) { return true; diff --git a/src/openrct2/drawing/drawing.h b/src/openrct2/drawing/drawing.h index 6887d9e29f..0a6b3a1fec 100644 --- a/src/openrct2/drawing/drawing.h +++ b/src/openrct2/drawing/drawing.h @@ -322,6 +322,7 @@ uint32 gfx_object_allocate_images(const rct_g1_element * images, uint32 count); void gfx_object_free_images(uint32 baseImageId, uint32 count); void gfx_object_check_all_images_freed(); void sub_68371D(); +void FASTCALL gfx_bmp_sprite_to_buffer(uint8* palette_pointer, uint8* unknown_pointer, uint8* source_pointer, uint8* dest_pointer, rct_g1_element* source_image, rct_drawpixelinfo *dest_dpi, sint32 height, sint32 width, sint32 image_type); void FASTCALL gfx_rle_sprite_to_buffer(const uint8* RESTRICT source_bits_pointer, uint8* RESTRICT dest_bits_pointer, const uint8* RESTRICT palette_pointer, const rct_drawpixelinfo * RESTRICT dpi, sint32 image_type, sint32 source_y_start, sint32 height, sint32 source_x_start, sint32 width); void FASTCALL gfx_draw_sprite(rct_drawpixelinfo *dpi, sint32 image_id, sint32 x, sint32 y, uint32 tertiary_colour); void FASTCALL gfx_draw_glpyh(rct_drawpixelinfo *dpi, sint32 image_id, sint32 x, sint32 y, uint8 * palette); diff --git a/src/openrct2/drawing/sprite.cpp b/src/openrct2/drawing/sprite.cpp index 881bbc8f05..f2cc5cbadc 100644 --- a/src/openrct2/drawing/sprite.cpp +++ b/src/openrct2/drawing/sprite.cpp @@ -270,7 +270,7 @@ extern "C" * image. * rct2: 0x0067A690 */ - static void FASTCALL gfx_bmp_sprite_to_buffer(uint8* palette_pointer, uint8* unknown_pointer, uint8* source_pointer, uint8* dest_pointer, rct_g1_element* source_image, rct_drawpixelinfo *dest_dpi, sint32 height, sint32 width, sint32 image_type) + void FASTCALL gfx_bmp_sprite_to_buffer(uint8* palette_pointer, uint8* unknown_pointer, uint8* source_pointer, uint8* dest_pointer, rct_g1_element* source_image, rct_drawpixelinfo *dest_dpi, sint32 height, sint32 width, sint32 image_type) { uint16 zoom_level = dest_dpi->zoom_level; uint8 zoom_amount = 1 << zoom_level;