mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-21 22:13:07 +01:00
handle empty string tables
This commit is contained in:
@@ -39,17 +39,17 @@ void BannerObject::ReadLegacy(IStream * stream)
|
||||
_legacyType.banner.price = stream->ReadValue<uint8>();
|
||||
_legacyType.banner.scenery_tab_id = stream->ReadValue<uint8>();
|
||||
|
||||
GetStringTable().Read(stream, OBJ_STRING_ID_NAME);
|
||||
GetStringTable()->Read(stream, OBJ_STRING_ID_NAME);
|
||||
|
||||
_sceneryTabEntry = stream->ReadValue<rct_object_entry>();
|
||||
|
||||
GetImageTable().Read(stream);
|
||||
GetImageTable()->Read(stream);
|
||||
}
|
||||
|
||||
void BannerObject::Load()
|
||||
{
|
||||
_legacyType.name = language_allocate_object_string(GetName());
|
||||
_legacyType.image = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount());
|
||||
|
||||
_legacyType.banner.scenery_tab_id = 0xFF;
|
||||
if ((_sceneryTabEntry.flags & 0xFF) != 0xFF)
|
||||
@@ -65,10 +65,11 @@ void BannerObject::Load()
|
||||
void BannerObject::Unload()
|
||||
{
|
||||
language_free_object_string(_legacyType.name);
|
||||
gfx_object_free_images(_legacyType.image, GetImageTable().GetCount());
|
||||
gfx_object_free_images(_legacyType.image, GetImageTable()->GetCount());
|
||||
}
|
||||
|
||||
const utf8 * BannerObject::GetName()
|
||||
{
|
||||
return GetStringTable().GetString(OBJ_STRING_ID_NAME);
|
||||
const utf8 * name = GetStringTable()->GetString(OBJ_STRING_ID_NAME);
|
||||
return name != nullptr ? name : "";
|
||||
}
|
||||
|
||||
@@ -35,23 +35,24 @@ void EntranceObject::ReadLegacy(IStream * stream)
|
||||
_legacyType.scrolling_mode = stream->ReadValue<uint8>();
|
||||
_legacyType.text_height = stream->ReadValue<uint8>();
|
||||
|
||||
GetStringTable().Read(stream, OBJ_STRING_ID_NAME);
|
||||
GetImageTable().Read(stream);
|
||||
GetStringTable()->Read(stream, OBJ_STRING_ID_NAME);
|
||||
GetImageTable()->Read(stream);
|
||||
}
|
||||
|
||||
void EntranceObject::Load()
|
||||
{
|
||||
_legacyType.string_idx = language_allocate_object_string(GetName());
|
||||
_legacyType.image_id = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_legacyType.image_id = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount());
|
||||
}
|
||||
|
||||
void EntranceObject::Unload()
|
||||
{
|
||||
language_free_object_string(_legacyType.string_idx);
|
||||
gfx_object_free_images(_legacyType.image_id, GetImageTable().GetCount());
|
||||
gfx_object_free_images(_legacyType.image_id, GetImageTable()->GetCount());
|
||||
}
|
||||
|
||||
const utf8 * EntranceObject::GetName()
|
||||
{
|
||||
return GetStringTable().GetString(OBJ_STRING_ID_NAME);
|
||||
const utf8 * name = GetStringTable()->GetString(OBJ_STRING_ID_NAME);
|
||||
return name != nullptr ? name : "";
|
||||
}
|
||||
|
||||
@@ -38,17 +38,17 @@ void FootpathItemObject::ReadLegacy(IStream * stream)
|
||||
_legacyType.path_bit.price = stream->ReadValue<sint16>();
|
||||
_legacyType.path_bit.scenery_tab_id = stream->ReadValue<uint8>();
|
||||
|
||||
GetStringTable().Read(stream, OBJ_STRING_ID_NAME);
|
||||
GetStringTable()->Read(stream, OBJ_STRING_ID_NAME);
|
||||
|
||||
_sceneryTabEntry = stream->ReadValue<rct_object_entry>();
|
||||
|
||||
GetImageTable().Read(stream);
|
||||
GetImageTable()->Read(stream);
|
||||
}
|
||||
|
||||
void FootpathItemObject::Load()
|
||||
{
|
||||
_legacyType.name = language_allocate_object_string(GetName());
|
||||
_legacyType.image = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount());
|
||||
|
||||
_legacyType.path_bit.scenery_tab_id = 0xFF;
|
||||
if ((_sceneryTabEntry.flags & 0xFF) != 0xFF)
|
||||
@@ -64,10 +64,11 @@ void FootpathItemObject::Load()
|
||||
void FootpathItemObject::Unload()
|
||||
{
|
||||
language_free_object_string(_legacyType.name);
|
||||
gfx_object_free_images(_legacyType.image, GetImageTable().GetCount());
|
||||
gfx_object_free_images(_legacyType.image, GetImageTable()->GetCount());
|
||||
}
|
||||
|
||||
const utf8 * FootpathItemObject::GetName()
|
||||
{
|
||||
return GetStringTable().GetString(OBJ_STRING_ID_NAME);
|
||||
const utf8 * name = GetStringTable()->GetString(OBJ_STRING_ID_NAME);
|
||||
return name != nullptr ? name : "";
|
||||
}
|
||||
|
||||
@@ -39,24 +39,25 @@ void FootpathObject::ReadLegacy(IStream * stream)
|
||||
_legacyType.scrolling_mode = stream->ReadValue<uint8>();
|
||||
stream->Seek(1, STREAM_SEEK_BEGIN);
|
||||
|
||||
GetStringTable().Read(stream, OBJ_STRING_ID_NAME);
|
||||
GetImageTable().Read(stream);
|
||||
GetStringTable()->Read(stream, OBJ_STRING_ID_NAME);
|
||||
GetImageTable()->Read(stream);
|
||||
}
|
||||
|
||||
void FootpathObject::Load()
|
||||
{
|
||||
_legacyType.string_idx = language_allocate_object_string(GetName());
|
||||
_legacyType.image = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount());
|
||||
_legacyType.bridge_image = _legacyType.image + 109;
|
||||
}
|
||||
|
||||
void FootpathObject::Unload()
|
||||
{
|
||||
language_free_object_string(_legacyType.string_idx);
|
||||
gfx_object_free_images(_legacyType.image, GetImageTable().GetCount());
|
||||
gfx_object_free_images(_legacyType.image, GetImageTable()->GetCount());
|
||||
}
|
||||
|
||||
const utf8 * FootpathObject::GetName()
|
||||
{
|
||||
return GetStringTable().GetString(OBJ_STRING_ID_NAME);
|
||||
const utf8 * name = GetStringTable()->GetString(OBJ_STRING_ID_NAME);
|
||||
return name != nullptr ? name : "";
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ void LargeSceneryObject::ReadLegacy(IStream * stream)
|
||||
_legacyType.large_scenery.var_11 = stream->ReadValue<uint8>();
|
||||
stream->Seek(5, STREAM_SEEK_CURRENT);
|
||||
|
||||
GetStringTable().Read(stream, OBJ_STRING_ID_NAME);
|
||||
GetStringTable()->Read(stream, OBJ_STRING_ID_NAME);
|
||||
|
||||
_sceneryTabEntry = stream->ReadValue<rct_object_entry>();
|
||||
|
||||
@@ -62,13 +62,13 @@ void LargeSceneryObject::ReadLegacy(IStream * stream)
|
||||
|
||||
_tiles = ReadTiles(stream);
|
||||
|
||||
GetImageTable().Read(stream);
|
||||
GetImageTable()->Read(stream);
|
||||
}
|
||||
|
||||
void LargeSceneryObject::Load()
|
||||
{
|
||||
_legacyType.name = language_allocate_object_string(GetName());
|
||||
_legacyType.image = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount());
|
||||
|
||||
_legacyType.large_scenery.tiles = _tiles;
|
||||
|
||||
@@ -99,12 +99,13 @@ void LargeSceneryObject::Load()
|
||||
void LargeSceneryObject::Unload()
|
||||
{
|
||||
language_free_object_string(_legacyType.name);
|
||||
gfx_object_free_images(_legacyType.image, GetImageTable().GetCount());
|
||||
gfx_object_free_images(_legacyType.image, GetImageTable()->GetCount());
|
||||
}
|
||||
|
||||
const utf8 * LargeSceneryObject::GetName()
|
||||
{
|
||||
return GetStringTable().GetString(OBJ_STRING_ID_NAME);
|
||||
const utf8 * name = GetStringTable()->GetString(OBJ_STRING_ID_NAME);
|
||||
return name != nullptr ? name : "";
|
||||
}
|
||||
|
||||
rct_large_scenery_tile * LargeSceneryObject::ReadTiles(IStream * stream)
|
||||
|
||||
@@ -35,8 +35,8 @@ private:
|
||||
ImageTable _imageTable;
|
||||
|
||||
protected:
|
||||
StringTable GetStringTable() { return _stringTable; }
|
||||
ImageTable GetImageTable() { return _imageTable; }
|
||||
StringTable * GetStringTable() { return &_stringTable; }
|
||||
ImageTable * GetImageTable() { return &_imageTable; }
|
||||
|
||||
public:
|
||||
explicit Object(const rct_object_entry &entry);
|
||||
|
||||
@@ -43,15 +43,15 @@ void RideObject::ReadLegacy(IStream * stream)
|
||||
{
|
||||
stream->Read(&_legacyType);
|
||||
|
||||
GetStringTable().Read(stream, OBJ_STRING_ID_NAME);
|
||||
GetStringTable().Read(stream, OBJ_STRING_ID_DESCRIPTION);
|
||||
GetStringTable()->Read(stream, OBJ_STRING_ID_NAME);
|
||||
GetStringTable()->Read(stream, OBJ_STRING_ID_DESCRIPTION);
|
||||
|
||||
// TODO: Move to its own function when ride construction window is merged.
|
||||
if (gConfigInterface.select_by_track_type) {
|
||||
_legacyType.enabledTrackPieces = 0xFFFFFFFFFFFFFFFF;
|
||||
}
|
||||
|
||||
GetStringTable().Read(stream, OBJ_STRING_ID_CAPACITY);
|
||||
GetStringTable()->Read(stream, OBJ_STRING_ID_CAPACITY);
|
||||
|
||||
// Read preset colours, by default there are 32
|
||||
_presetColours.count = stream->ReadValue<uint8>();
|
||||
@@ -75,14 +75,14 @@ void RideObject::ReadLegacy(IStream * stream)
|
||||
_peepLoadingPositions[i] = stream->ReadArray<sint8>(numPeepLoadingPositions);
|
||||
}
|
||||
|
||||
GetImageTable().Read(stream);
|
||||
GetImageTable()->Read(stream);
|
||||
}
|
||||
|
||||
void RideObject::Load()
|
||||
{
|
||||
_legacyType.name = language_allocate_object_string(GetName());
|
||||
_legacyType.description = language_allocate_object_string(GetDescription());
|
||||
_legacyType.images_offset = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_legacyType.images_offset = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount());
|
||||
|
||||
int cur_vehicle_images_offset = _legacyType.images_offset + 3;
|
||||
for (int i = 0; i < 4; i++)
|
||||
@@ -329,20 +329,23 @@ void RideObject::Unload()
|
||||
{
|
||||
language_free_object_string(_legacyType.name);
|
||||
language_free_object_string(_legacyType.description);
|
||||
gfx_object_free_images(_legacyType.images_offset, GetImageTable().GetCount());
|
||||
gfx_object_free_images(_legacyType.images_offset, GetImageTable()->GetCount());
|
||||
}
|
||||
|
||||
const utf8 * RideObject::GetName()
|
||||
{
|
||||
return GetStringTable().GetString(OBJ_STRING_ID_NAME);
|
||||
const utf8 * name = GetStringTable()->GetString(OBJ_STRING_ID_NAME);
|
||||
return name != nullptr ? name : "";
|
||||
}
|
||||
|
||||
const utf8 * RideObject::GetDescription()
|
||||
{
|
||||
return GetStringTable().GetString(OBJ_STRING_ID_DESCRIPTION);
|
||||
const utf8 * description = GetStringTable()->GetString(OBJ_STRING_ID_DESCRIPTION);
|
||||
return description != nullptr ? description : "";
|
||||
}
|
||||
|
||||
const utf8 * RideObject::GetCapacity()
|
||||
{
|
||||
return GetStringTable().GetString(OBJ_STRING_ID_CAPACITY);
|
||||
const utf8 * capacity = GetStringTable()->GetString(OBJ_STRING_ID_CAPACITY);
|
||||
return capacity != nullptr ? capacity : "";
|
||||
}
|
||||
|
||||
@@ -45,9 +45,9 @@ void SceneryGroupObject::ReadLegacy(IStream * stream)
|
||||
_legacyType.pad_109 = stream->ReadValue<uint8>();
|
||||
_legacyType.var_10A = stream->ReadValue<uint32>();
|
||||
|
||||
GetStringTable().Read(stream, OBJ_STRING_ID_NAME);
|
||||
GetStringTable()->Read(stream, OBJ_STRING_ID_NAME);
|
||||
ReadItems(stream);
|
||||
GetImageTable().Read(stream);
|
||||
GetImageTable()->Read(stream);
|
||||
|
||||
_legacyType.var_107 = _numItems;
|
||||
}
|
||||
@@ -55,7 +55,7 @@ void SceneryGroupObject::ReadLegacy(IStream * stream)
|
||||
void SceneryGroupObject::Load()
|
||||
{
|
||||
_legacyType.name = language_allocate_object_string(GetName());
|
||||
_legacyType.image = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount());
|
||||
|
||||
_legacyType.entry_count = 0;
|
||||
for (uint32 i = 0; i < _numItems; i++)
|
||||
@@ -82,12 +82,13 @@ void SceneryGroupObject::Load()
|
||||
void SceneryGroupObject::Unload()
|
||||
{
|
||||
language_free_object_string(_legacyType.name);
|
||||
gfx_object_free_images(_legacyType.image, GetImageTable().GetCount());
|
||||
gfx_object_free_images(_legacyType.image, GetImageTable()->GetCount());
|
||||
}
|
||||
|
||||
const utf8 * SceneryGroupObject::GetName()
|
||||
{
|
||||
return GetStringTable().GetString(OBJ_STRING_ID_NAME);
|
||||
const utf8 * name = GetStringTable()->GetString(OBJ_STRING_ID_NAME);
|
||||
return name != nullptr ? name : "";
|
||||
}
|
||||
|
||||
void SceneryGroupObject::ReadItems(IStream * stream)
|
||||
|
||||
@@ -50,7 +50,7 @@ void SmallSceneryObject::ReadLegacy(IStream * stream)
|
||||
_legacyType.small_scenery.var_18 = stream->ReadValue<uint16>();
|
||||
_legacyType.small_scenery.scenery_tab_id = 0xFF;
|
||||
|
||||
GetStringTable().Read(stream, OBJ_STRING_ID_NAME);
|
||||
GetStringTable()->Read(stream, OBJ_STRING_ID_NAME);
|
||||
|
||||
_sceneryTabEntry = stream->ReadValue<rct_object_entry>();
|
||||
|
||||
@@ -59,13 +59,13 @@ void SmallSceneryObject::ReadLegacy(IStream * stream)
|
||||
_var10data = ReadVar10(stream);
|
||||
}
|
||||
|
||||
GetImageTable().Read(stream);
|
||||
GetImageTable()->Read(stream);
|
||||
}
|
||||
|
||||
void SmallSceneryObject::Load()
|
||||
{
|
||||
_legacyType.name = language_allocate_object_string(GetName());
|
||||
_legacyType.image = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount());
|
||||
|
||||
_legacyType.small_scenery.scenery_tab_id = 0xFF;
|
||||
if ((_sceneryTabEntry.flags & 0xFF) != 0xFF)
|
||||
@@ -86,12 +86,13 @@ void SmallSceneryObject::Load()
|
||||
void SmallSceneryObject::Unload()
|
||||
{
|
||||
language_free_object_string(_legacyType.name);
|
||||
gfx_object_free_images(_legacyType.image, GetImageTable().GetCount());
|
||||
gfx_object_free_images(_legacyType.image, GetImageTable()->GetCount());
|
||||
}
|
||||
|
||||
const utf8 * SmallSceneryObject::GetName()
|
||||
{
|
||||
return GetStringTable().GetString(OBJ_STRING_ID_NAME);
|
||||
const utf8 * name = GetStringTable()->GetString(OBJ_STRING_ID_NAME);
|
||||
return name != nullptr ? name : "";
|
||||
}
|
||||
|
||||
uint8 * SmallSceneryObject::ReadVar10(IStream * stream)
|
||||
|
||||
@@ -37,9 +37,9 @@ void StexObject::ReadLegacy(IStream * stream)
|
||||
_legacyType.var_06 = stream->ReadValue<uint8>();
|
||||
stream->Seek(1, STREAM_SEEK_CURRENT);
|
||||
|
||||
GetStringTable().Read(stream, OBJ_STRING_ID_SCENARIO_NAME);
|
||||
GetStringTable().Read(stream, OBJ_STRING_ID_PARK_NAME);
|
||||
GetStringTable().Read(stream, OBJ_STRING_ID_SCENARIO_DETAILS);
|
||||
GetStringTable()->Read(stream, OBJ_STRING_ID_SCENARIO_NAME);
|
||||
GetStringTable()->Read(stream, OBJ_STRING_ID_PARK_NAME);
|
||||
GetStringTable()->Read(stream, OBJ_STRING_ID_SCENARIO_DETAILS);
|
||||
}
|
||||
|
||||
void StexObject::Load()
|
||||
@@ -63,15 +63,18 @@ const utf8 * StexObject::GetName()
|
||||
|
||||
const utf8 * StexObject::GetScenarioName()
|
||||
{
|
||||
return GetStringTable().GetString(OBJ_STRING_ID_SCENARIO_NAME);
|
||||
const utf8 * name = GetStringTable()->GetString(OBJ_STRING_ID_SCENARIO_NAME);
|
||||
return name != nullptr ? name : "";
|
||||
}
|
||||
|
||||
const utf8 * StexObject::GetScenarioDetails()
|
||||
{
|
||||
return GetStringTable().GetString(OBJ_STRING_ID_SCENARIO_DETAILS);
|
||||
const utf8 * name = GetStringTable()->GetString(OBJ_STRING_ID_SCENARIO_DETAILS);
|
||||
return name != nullptr ? name : "";
|
||||
}
|
||||
|
||||
const utf8 * StexObject::GetParkName()
|
||||
{
|
||||
return GetStringTable().GetString(OBJ_STRING_ID_PARK_NAME);
|
||||
const utf8 * name = GetStringTable()->GetString(OBJ_STRING_ID_PARK_NAME);
|
||||
return name != nullptr ? name : "";
|
||||
}
|
||||
|
||||
@@ -42,17 +42,17 @@ void WallObject::ReadLegacy(IStream * stream)
|
||||
_legacyType.wall.scenery_tab_id = stream->ReadValue<uint8>();
|
||||
_legacyType.wall.var_0D = stream->ReadValue<uint8>();
|
||||
|
||||
GetStringTable().Read(stream, OBJ_STRING_ID_NAME);
|
||||
GetStringTable()->Read(stream, OBJ_STRING_ID_NAME);
|
||||
|
||||
_sceneryTabEntry = stream->ReadValue<rct_object_entry>();
|
||||
|
||||
GetImageTable().Read(stream);
|
||||
GetImageTable()->Read(stream);
|
||||
}
|
||||
|
||||
void WallObject::Load()
|
||||
{
|
||||
_legacyType.name = language_allocate_object_string(GetName());
|
||||
_legacyType.image = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount());
|
||||
|
||||
_legacyType.small_scenery.scenery_tab_id = 0xFF;
|
||||
if ((_sceneryTabEntry.flags & 0xFF) != 0xFF)
|
||||
@@ -68,10 +68,11 @@ void WallObject::Load()
|
||||
void WallObject::Unload()
|
||||
{
|
||||
language_free_object_string(_legacyType.name);
|
||||
gfx_object_free_images(_legacyType.image, GetImageTable().GetCount());
|
||||
gfx_object_free_images(_legacyType.image, GetImageTable()->GetCount());
|
||||
}
|
||||
|
||||
const utf8 * WallObject::GetName()
|
||||
{
|
||||
return GetStringTable().GetString(OBJ_STRING_ID_NAME);
|
||||
const utf8 * name = GetStringTable()->GetString(OBJ_STRING_ID_NAME);
|
||||
return name != nullptr ? name : "";
|
||||
}
|
||||
|
||||
@@ -36,14 +36,14 @@ void WaterObject::ReadLegacy(IStream * stream)
|
||||
_legacyType.var_0A = stream->ReadValue<uint32>();
|
||||
_legacyType.var_0E = stream->ReadValue<uint16>();
|
||||
|
||||
GetStringTable().Read(stream, OBJ_STRING_ID_NAME);
|
||||
GetImageTable().Read(stream);
|
||||
GetStringTable()->Read(stream, OBJ_STRING_ID_NAME);
|
||||
GetImageTable()->Read(stream);
|
||||
}
|
||||
|
||||
void WaterObject::Load()
|
||||
{
|
||||
_legacyType.string_idx = language_allocate_object_string(GetName());
|
||||
_legacyType.image_id = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_legacyType.image_id = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount());
|
||||
_legacyType.var_06 = _legacyType.image_id + 1;
|
||||
_legacyType.var_0A = _legacyType.image_id + 4;
|
||||
|
||||
@@ -61,5 +61,6 @@ void WaterObject::Unload()
|
||||
|
||||
const utf8 * WaterObject::GetName()
|
||||
{
|
||||
return GetStringTable().GetString(OBJ_STRING_ID_NAME);
|
||||
const utf8 * name = GetStringTable()->GetString(OBJ_STRING_ID_NAME);
|
||||
return name != nullptr ? name : "";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user