Refactor gX.dat loading, make sure g2.dat loads too

This commit is contained in:
Michał Janiszewski 2016-05-03 17:37:16 +02:00
parent ea075fb736
commit 2273626bdd
1 changed files with 22 additions and 13 deletions

View File

@ -31,6 +31,25 @@ rct_gx g2;
rct_g1_element *g1Elements = (rct_g1_element*)RCT2_ADDRESS_G1_ELEMENTS;
#endif
static void read_and_convert_gxdat(SDL_RWops *file, size_t count, rct_g1_element *elements)
{
rct_g1_element_32bit *g1Elements32 = calloc(count, sizeof(rct_g1_element_32bit));
SDL_RWread(file, g1Elements32, count * sizeof(rct_g1_element_32bit), 1);
for (size_t i = 0; i < count; i++) {
/* Double cast to silence compiler warning about casting to
* pointer from integer of mismatched length.
*/
elements[i].offset = (uint8*)(uintptr_t)g1Elements32[i].offset;
elements[i].width = g1Elements32[i].width;
elements[i].height = g1Elements32[i].height;
elements[i].x_offset = g1Elements32[i].x_offset;
elements[i].y_offset = g1Elements32[i].y_offset;
elements[i].flags = g1Elements32[i].flags;
elements[i].zoomed_offset = g1Elements32[i].zoomed_offset;
}
free(g1Elements32);
}
/**
*
* rct2: 0x00678998
@ -63,18 +82,7 @@ int gfx_load_g1()
g1Elements = calloc(324206, sizeof(rct_g1_element));
#endif
rct_g1_element_32bit *g1Elements32 = calloc(324206, sizeof(rct_g1_element_32bit));
SDL_RWread(file, g1Elements32, header.num_entries * sizeof(rct_g1_element_32bit), 1);
for (uint32 i = 0; i < header.num_entries; i++) {
g1Elements[i].offset = (uint8*)g1Elements32[i].offset;
g1Elements[i].width = g1Elements32[i].width;
g1Elements[i].height = g1Elements32[i].height;
g1Elements[i].x_offset = g1Elements32[i].x_offset;
g1Elements[i].y_offset = g1Elements32[i].y_offset;
g1Elements[i].flags = g1Elements32[i].flags;
g1Elements[i].zoomed_offset = g1Elements32[i].zoomed_offset;
}
free(g1Elements32);
read_and_convert_gxdat(file, header.num_entries, g1Elements);
// Read element data
_g1Buffer = malloc(header.total_size);
@ -128,7 +136,8 @@ int gfx_load_g2()
if (SDL_RWread(file, &g2.header, 8, 1) == 1) {
// Read element headers
g2.elements = malloc(g2.header.num_entries * sizeof(rct_g1_element));
SDL_RWread(file, g2.elements, g2.header.num_entries * sizeof(rct_g1_element), 1);
read_and_convert_gxdat(file, g2.header.num_entries, g2.elements);
// Read element data
g2.data = malloc(g2.header.total_size);