Fix toilets image loading

This commit is contained in:
Ted John 2017-12-05 18:57:14 +00:00 committed by Gymnasiast
parent ad21e962ee
commit 32d588d765
4 changed files with 39 additions and 27 deletions

View File

@ -339,6 +339,7 @@ void scrolling_text_initialise_bitmaps();
sint32 scrolling_text_setup(struct paint_session * session, rct_string_id stringId, uint16 scroll, uint16 scrollingMode);
rct_size16 FASTCALL gfx_get_sprite_size(uint32 image_id);
size_t g1_calculate_data_size(const rct_g1_element * g1);
void mask_scalar(sint32 width, sint32 height, const uint8 * RESTRICT maskSrc, const uint8 * RESTRICT colourSrc,
uint8 * RESTRICT dst, sint32 maskWrap, sint32 colourWrap, sint32 dstWrap);

View File

@ -858,3 +858,25 @@ rct_size16 FASTCALL gfx_get_sprite_size(uint32 image_id)
return size;
}
size_t g1_calculate_data_size(const rct_g1_element * g1)
{
if (g1->flags & G1_FLAG_RLE_COMPRESSION)
{
uint16 * offsets = (uint16 *)g1->offset;
uint8 * ptr = g1->offset + offsets[g1->height - 1];
bool endOfLine = false;
do
{
uint8 chunk0 = *ptr++;
ptr++; // offset
uint8 chunkSize = chunk0 & 0x7F;
ptr += chunkSize;
endOfLine = (chunk0 & 0x80) != 0;
} while (!endOfLine);
return ptr - g1->offset;
}
else
{
return g1->width * g1->height;
}
}

View File

@ -219,22 +219,13 @@ namespace ObjectFactory
auto objectType = std::string(json_string_value(jObjectType));
if (objectType == "ride")
{
std::string objectName;
const char * id = json_string_value(json_object_get(jRoot, "id"));
if (String::Equals(id, "rct1.icecr"))
{
objectName = "#RCT1ICE";
}
else
{
objectName = "#RCT1TOI";
}
auto id = json_string_value(json_object_get(jRoot, "id"));
auto originalId = json_string_value(json_object_get(jRoot, "originalId"));
rct_object_entry entry = { 0 };
memcpy(entry.name, objectName.c_str(), 8);
memcpy(entry.name, originalId, 8);
result = new RideObject(entry);
auto readContext = ReadObjectContext(objectName.c_str());
auto readContext = ReadObjectContext(id);
result->ReadJson(&readContext, jRoot);
if (readContext.WasError())
{

View File

@ -537,8 +537,8 @@ uint8 RideObject::CalculateNumHorizontalFrames(const rct_ride_entry_vehicle * ve
void RideObject::ReadJson(IReadObjectContext * context, const json_t * root)
{
printf("RideObject::ReadJson(context, root)\n");
const char * rideType = json_string_value(json_object_get(json_object_get(root, "properties"), "type"));
const char * category = json_string_value(json_object_get(json_object_get(root, "properties"), "category"));
auto rideType = json_string_value(json_object_get(json_object_get(root, "properties"), "type"));
auto category = json_string_value(json_object_get(json_object_get(root, "properties"), "category"));
sint32 previewImg = 0;
sint32 imageStart = 0;
@ -562,9 +562,7 @@ void RideObject::ReadJson(IReadObjectContext * context, const json_t * root)
_legacyType.ride_type[1] = RIDE_TYPE_NULL;
_legacyType.ride_type[2] = RIDE_TYPE_NULL;
if (String::Equals(rideType, "stall"))
if (String::Equals(category, "stall"))
{
_legacyType.category[0] = RIDE_CATEGORY_SHOP;
_legacyType.category[1] = RIDE_CATEGORY_SHOP;
@ -586,18 +584,18 @@ void RideObject::ReadJson(IReadObjectContext * context, const json_t * root)
if (is_csg_loaded())
{
auto g1 = *(gfx_get_g1_element(previewImg));
//auto g12 = *(gfx_get_g1_element(previewImg + 1));
g1.x_offset = 0;
g1.y_offset = 0;
for (size_t i = 0; i < MAX_RIDE_TYPES_PER_RIDE_ENTRY; i++)
{
imageTable->AddImage(&g1, 0x4000); //(size_t)(g12.offset - g1.offset));
auto g1 = gfx_get_g1_element(previewImg);
imageTable->AddImage(g1, g1_calculate_data_size(g1));
}
for (int i = 0; i < 6; i++)
{
auto g1 = gfx_get_g1_element(imageStart + i);
imageTable->AddImage(g1, g1_calculate_data_size(g1));
}
rct_ride_entry_vehicle * vehicle0 = &_legacyType.vehicles[0];
vehicle0->flags |= VEHICLE_SPRITE_FLAG_FLAT;
vehicle0->base_image_id = imageStart;
vehicle0->sprite_flags |= VEHICLE_SPRITE_FLAG_FLAT;
vehicle0->base_image_id = 0;
}
}