1
0
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:
Ted John
2016-06-26 21:43:30 +01:00
parent 1af6242381
commit a0d8b9ccbf
12 changed files with 76 additions and 61 deletions

View File

@@ -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 : "";
}

View File

@@ -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 : "";
}

View File

@@ -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 : "";
}

View File

@@ -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 : "";
}

View File

@@ -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)

View File

@@ -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);

View File

@@ -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 : "";
}

View File

@@ -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)

View File

@@ -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)

View File

@@ -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 : "";
}

View File

@@ -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 : "";
}

View File

@@ -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 : "";
}