diff --git a/src/object/BannerObject.cpp b/src/object/BannerObject.cpp index a2bbe8126d..e4f317ffe9 100644 --- a/src/object/BannerObject.cpp +++ b/src/object/BannerObject.cpp @@ -39,17 +39,17 @@ void BannerObject::ReadLegacy(IStream * stream) _legacyType.banner.price = stream->ReadValue(); _legacyType.banner.scenery_tab_id = stream->ReadValue(); - GetStringTable().Read(stream, OBJ_STRING_ID_NAME); + GetStringTable()->Read(stream, OBJ_STRING_ID_NAME); _sceneryTabEntry = stream->ReadValue(); - 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 : ""; } diff --git a/src/object/EntranceObject.cpp b/src/object/EntranceObject.cpp index c5e83b3260..0cb83caa53 100644 --- a/src/object/EntranceObject.cpp +++ b/src/object/EntranceObject.cpp @@ -35,23 +35,24 @@ void EntranceObject::ReadLegacy(IStream * stream) _legacyType.scrolling_mode = stream->ReadValue(); _legacyType.text_height = stream->ReadValue(); - 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 : ""; } diff --git a/src/object/FootpathItemObject.cpp b/src/object/FootpathItemObject.cpp index bef7c82030..44049e931a 100644 --- a/src/object/FootpathItemObject.cpp +++ b/src/object/FootpathItemObject.cpp @@ -38,17 +38,17 @@ void FootpathItemObject::ReadLegacy(IStream * stream) _legacyType.path_bit.price = stream->ReadValue(); _legacyType.path_bit.scenery_tab_id = stream->ReadValue(); - GetStringTable().Read(stream, OBJ_STRING_ID_NAME); + GetStringTable()->Read(stream, OBJ_STRING_ID_NAME); _sceneryTabEntry = stream->ReadValue(); - 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 : ""; } diff --git a/src/object/FootpathObject.cpp b/src/object/FootpathObject.cpp index 2e8c2e36d0..50674b9536 100644 --- a/src/object/FootpathObject.cpp +++ b/src/object/FootpathObject.cpp @@ -39,24 +39,25 @@ void FootpathObject::ReadLegacy(IStream * stream) _legacyType.scrolling_mode = stream->ReadValue(); 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 : ""; } diff --git a/src/object/LargeSceneryObject.cpp b/src/object/LargeSceneryObject.cpp index 977ae709be..240d62d0af 100644 --- a/src/object/LargeSceneryObject.cpp +++ b/src/object/LargeSceneryObject.cpp @@ -49,7 +49,7 @@ void LargeSceneryObject::ReadLegacy(IStream * stream) _legacyType.large_scenery.var_11 = stream->ReadValue(); stream->Seek(5, STREAM_SEEK_CURRENT); - GetStringTable().Read(stream, OBJ_STRING_ID_NAME); + GetStringTable()->Read(stream, OBJ_STRING_ID_NAME); _sceneryTabEntry = stream->ReadValue(); @@ -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) diff --git a/src/object/Object.h b/src/object/Object.h index 1e986c8302..22cae75a4c 100644 --- a/src/object/Object.h +++ b/src/object/Object.h @@ -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); diff --git a/src/object/RideObject.cpp b/src/object/RideObject.cpp index 0e7cbb7e89..bdd04cf3c6 100644 --- a/src/object/RideObject.cpp +++ b/src/object/RideObject.cpp @@ -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(); @@ -75,14 +75,14 @@ void RideObject::ReadLegacy(IStream * stream) _peepLoadingPositions[i] = stream->ReadArray(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 : ""; } diff --git a/src/object/SceneryGroupObject.cpp b/src/object/SceneryGroupObject.cpp index 62ee5f2793..262654b01a 100644 --- a/src/object/SceneryGroupObject.cpp +++ b/src/object/SceneryGroupObject.cpp @@ -45,9 +45,9 @@ void SceneryGroupObject::ReadLegacy(IStream * stream) _legacyType.pad_109 = stream->ReadValue(); _legacyType.var_10A = stream->ReadValue(); - 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) diff --git a/src/object/SmallSceneryObject.cpp b/src/object/SmallSceneryObject.cpp index 812362ba6d..3ca97e0625 100644 --- a/src/object/SmallSceneryObject.cpp +++ b/src/object/SmallSceneryObject.cpp @@ -50,7 +50,7 @@ void SmallSceneryObject::ReadLegacy(IStream * stream) _legacyType.small_scenery.var_18 = stream->ReadValue(); _legacyType.small_scenery.scenery_tab_id = 0xFF; - GetStringTable().Read(stream, OBJ_STRING_ID_NAME); + GetStringTable()->Read(stream, OBJ_STRING_ID_NAME); _sceneryTabEntry = stream->ReadValue(); @@ -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) diff --git a/src/object/StexObject.cpp b/src/object/StexObject.cpp index 96b358a45f..bcb8906261 100644 --- a/src/object/StexObject.cpp +++ b/src/object/StexObject.cpp @@ -37,9 +37,9 @@ void StexObject::ReadLegacy(IStream * stream) _legacyType.var_06 = stream->ReadValue(); 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 : ""; } diff --git a/src/object/WallObject.cpp b/src/object/WallObject.cpp index af6f2b8330..5c6163fdec 100644 --- a/src/object/WallObject.cpp +++ b/src/object/WallObject.cpp @@ -42,17 +42,17 @@ void WallObject::ReadLegacy(IStream * stream) _legacyType.wall.scenery_tab_id = stream->ReadValue(); _legacyType.wall.var_0D = stream->ReadValue(); - GetStringTable().Read(stream, OBJ_STRING_ID_NAME); + GetStringTable()->Read(stream, OBJ_STRING_ID_NAME); _sceneryTabEntry = stream->ReadValue(); - 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 : ""; } diff --git a/src/object/WaterObject.cpp b/src/object/WaterObject.cpp index fb7cc38517..d42fa572ad 100644 --- a/src/object/WaterObject.cpp +++ b/src/object/WaterObject.cpp @@ -36,14 +36,14 @@ void WaterObject::ReadLegacy(IStream * stream) _legacyType.var_0A = stream->ReadValue(); _legacyType.var_0E = stream->ReadValue(); - 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 : ""; }