mirror of https://github.com/OpenRCT2/OpenRCT2.git
Fix toilets image loading
This commit is contained in:
parent
ad21e962ee
commit
32d588d765
|
@ -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);
|
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);
|
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,
|
void mask_scalar(sint32 width, sint32 height, const uint8 * RESTRICT maskSrc, const uint8 * RESTRICT colourSrc,
|
||||||
uint8 * RESTRICT dst, sint32 maskWrap, sint32 colourWrap, sint32 dstWrap);
|
uint8 * RESTRICT dst, sint32 maskWrap, sint32 colourWrap, sint32 dstWrap);
|
||||||
|
|
|
@ -858,3 +858,25 @@ rct_size16 FASTCALL gfx_get_sprite_size(uint32 image_id)
|
||||||
return size;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -219,22 +219,13 @@ namespace ObjectFactory
|
||||||
auto objectType = std::string(json_string_value(jObjectType));
|
auto objectType = std::string(json_string_value(jObjectType));
|
||||||
if (objectType == "ride")
|
if (objectType == "ride")
|
||||||
{
|
{
|
||||||
std::string objectName;
|
auto id = json_string_value(json_object_get(jRoot, "id"));
|
||||||
const char * id = json_string_value(json_object_get(jRoot, "id"));
|
auto originalId = json_string_value(json_object_get(jRoot, "originalId"));
|
||||||
|
|
||||||
if (String::Equals(id, "rct1.icecr"))
|
|
||||||
{
|
|
||||||
objectName = "#RCT1ICE";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
objectName = "#RCT1TOI";
|
|
||||||
}
|
|
||||||
|
|
||||||
rct_object_entry entry = { 0 };
|
rct_object_entry entry = { 0 };
|
||||||
memcpy(entry.name, objectName.c_str(), 8);
|
memcpy(entry.name, originalId, 8);
|
||||||
result = new RideObject(entry);
|
result = new RideObject(entry);
|
||||||
auto readContext = ReadObjectContext(objectName.c_str());
|
auto readContext = ReadObjectContext(id);
|
||||||
result->ReadJson(&readContext, jRoot);
|
result->ReadJson(&readContext, jRoot);
|
||||||
if (readContext.WasError())
|
if (readContext.WasError())
|
||||||
{
|
{
|
||||||
|
|
|
@ -537,8 +537,8 @@ uint8 RideObject::CalculateNumHorizontalFrames(const rct_ride_entry_vehicle * ve
|
||||||
void RideObject::ReadJson(IReadObjectContext * context, const json_t * root)
|
void RideObject::ReadJson(IReadObjectContext * context, const json_t * root)
|
||||||
{
|
{
|
||||||
printf("RideObject::ReadJson(context, root)\n");
|
printf("RideObject::ReadJson(context, root)\n");
|
||||||
const char * rideType = json_string_value(json_object_get(json_object_get(root, "properties"), "type"));
|
auto 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 category = json_string_value(json_object_get(json_object_get(root, "properties"), "category"));
|
||||||
sint32 previewImg = 0;
|
sint32 previewImg = 0;
|
||||||
sint32 imageStart = 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[1] = RIDE_TYPE_NULL;
|
||||||
_legacyType.ride_type[2] = RIDE_TYPE_NULL;
|
_legacyType.ride_type[2] = RIDE_TYPE_NULL;
|
||||||
|
|
||||||
|
if (String::Equals(category, "stall"))
|
||||||
|
|
||||||
if (String::Equals(rideType, "stall"))
|
|
||||||
{
|
{
|
||||||
_legacyType.category[0] = RIDE_CATEGORY_SHOP;
|
_legacyType.category[0] = RIDE_CATEGORY_SHOP;
|
||||||
_legacyType.category[1] = 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())
|
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++)
|
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];
|
rct_ride_entry_vehicle * vehicle0 = &_legacyType.vehicles[0];
|
||||||
vehicle0->flags |= VEHICLE_SPRITE_FLAG_FLAT;
|
vehicle0->sprite_flags |= VEHICLE_SPRITE_FLAG_FLAT;
|
||||||
vehicle0->base_image_id = imageStart;
|
vehicle0->base_image_id = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue