diff --git a/src/openrct2-ui/interface/ViewportInteraction.cpp b/src/openrct2-ui/interface/ViewportInteraction.cpp index 3252a57f03..a74b2d8f0a 100644 --- a/src/openrct2-ui/interface/ViewportInteraction.cpp +++ b/src/openrct2-ui/interface/ViewportInteraction.cpp @@ -403,7 +403,7 @@ InteractionInfo ViewportInteractionGetItemRight(const ScreenCoordsXY& screenCoor case ViewportInteractionItem::LargeScenery: { auto* sceneryEntry = tileElement->AsLargeScenery()->GetEntry(); - if (sceneryEntry->large_scenery.scrolling_mode != SCROLLING_MODE_NONE) + if (sceneryEntry->scrolling_mode != SCROLLING_MODE_NONE) { auto banner = tileElement->AsLargeScenery()->GetBanner(); if (banner != nullptr) @@ -681,9 +681,9 @@ static void ViewportInteractionRemoveParkWall(TileElement* tileElement, const Co */ static void ViewportInteractionRemoveLargeScenery(TileElement* tileElement, const CoordsXY& mapCoords) { - rct_scenery_entry* sceneryEntry = tileElement->AsLargeScenery()->GetEntry(); + auto* sceneryEntry = tileElement->AsLargeScenery()->GetEntry(); - if (sceneryEntry->large_scenery.scrolling_mode != SCROLLING_MODE_NONE) + if (sceneryEntry->scrolling_mode != SCROLLING_MODE_NONE) { auto bannerIndex = tileElement->AsLargeScenery()->GetBannerIndex(); context_open_detail_window(WD_SIGN, bannerIndex); diff --git a/src/openrct2-ui/windows/Scenery.cpp b/src/openrct2-ui/windows/Scenery.cpp index 0df9909a0a..69aca11e6f 100644 --- a/src/openrct2-ui/windows/Scenery.cpp +++ b/src/openrct2-ui/windows/Scenery.cpp @@ -276,11 +276,11 @@ void window_scenery_init() // large scenery for (ObjectEntryIndex sceneryId = 0; sceneryId < MAX_LARGE_SCENERY_OBJECTS; sceneryId++) { - rct_scenery_entry* sceneryEntry = get_large_scenery_entry(sceneryId); + auto* sceneryEntry = get_large_scenery_entry(sceneryId); if (sceneryEntry == nullptr) continue; - init_scenery_entry({ SCENERY_TYPE_LARGE, sceneryId }, sceneryEntry->large_scenery.scenery_tab_id); + init_scenery_entry({ SCENERY_TYPE_LARGE, sceneryId }, sceneryEntry->scenery_tab_id); } // walls @@ -819,8 +819,7 @@ static void window_scenery_update(rct_window* w) } else if (tabSelectedScenery.SceneryType == SCENERY_TYPE_LARGE) { - gCurrentToolId = static_cast( - get_large_scenery_entry(tabSelectedScenery.EntryIndex)->large_scenery.tool_id); + gCurrentToolId = static_cast(get_large_scenery_entry(tabSelectedScenery.EntryIndex)->tool_id); } else if (tabSelectedScenery.SceneryType == SCENERY_TYPE_WALL) { @@ -1032,9 +1031,9 @@ void window_scenery_invalidate(rct_window* w) { auto* sceneryEntry = get_large_scenery_entry(tabSelectedScenery.EntryIndex); - if (sceneryEntry->large_scenery.flags & LARGE_SCENERY_FLAG_HAS_PRIMARY_COLOUR) + if (sceneryEntry->flags & LARGE_SCENERY_FLAG_HAS_PRIMARY_COLOUR) window_scenery_widgets[WIDX_SCENERY_PRIMARY_COLOUR_BUTTON].type = WindowWidgetType::ColourBtn; - if (sceneryEntry->large_scenery.flags & LARGE_SCENERY_FLAG_HAS_SECONDARY_COLOUR) + if (sceneryEntry->flags & LARGE_SCENERY_FLAG_HAS_SECONDARY_COLOUR) window_scenery_widgets[WIDX_SCENERY_SECONDARY_COLOUR_BUTTON].type = WindowWidgetType::ColourBtn; } else if (tabSelectedScenery.SceneryType == SCENERY_TYPE_WALL) @@ -1157,7 +1156,7 @@ void window_scenery_paint(rct_window* w, rct_drawpixelinfo* dpi) case SCENERY_TYPE_LARGE: { auto* sceneryEntry = get_large_scenery_entry(selectedSceneryEntry.EntryIndex); - price = sceneryEntry->large_scenery.price * 10; + price = sceneryEntry->price * 10; name = sceneryEntry->name; break; } diff --git a/src/openrct2-ui/windows/Sign.cpp b/src/openrct2-ui/windows/Sign.cpp index 794aea984f..66e38d80f5 100644 --- a/src/openrct2-ui/windows/Sign.cpp +++ b/src/openrct2-ui/windows/Sign.cpp @@ -238,16 +238,16 @@ public: } else { - rct_scenery_entry* scenery_entry = get_large_scenery_entry(SceneryEntry); + auto* sceneryEntry = get_large_scenery_entry(SceneryEntry); main_colour_btn->type = WindowWidgetType::Empty; text_colour_btn->type = WindowWidgetType::Empty; - if (scenery_entry->large_scenery.flags & LARGE_SCENERY_FLAG_HAS_PRIMARY_COLOUR) + if (sceneryEntry->flags & LARGE_SCENERY_FLAG_HAS_PRIMARY_COLOUR) { main_colour_btn->type = WindowWidgetType::ColourBtn; } - if (scenery_entry->large_scenery.flags & LARGE_SCENERY_FLAG_HAS_SECONDARY_COLOUR) + if (sceneryEntry->flags & LARGE_SCENERY_FLAG_HAS_SECONDARY_COLOUR) { text_colour_btn->type = WindowWidgetType::ColourBtn; } diff --git a/src/openrct2-ui/windows/TileInspector.cpp b/src/openrct2-ui/windows/TileInspector.cpp index 798b0df010..e0ad6f530e 100644 --- a/src/openrct2-ui/windows/TileInspector.cpp +++ b/src/openrct2-ui/windows/TileInspector.cpp @@ -2156,8 +2156,8 @@ static void window_tile_inspector_paint(rct_window* w, rct_drawpixelinfo* dpi) { COLOUR_WHITE }); // Banner info - rct_scenery_entry* largeSceneryEntry = get_large_scenery_entry(largeSceneryType); - if (largeSceneryEntry != nullptr && largeSceneryEntry->large_scenery.scrolling_mode != SCROLLING_MODE_NONE) + auto* largeSceneryEntry = get_large_scenery_entry(largeSceneryType); + if (largeSceneryEntry != nullptr && largeSceneryEntry->scrolling_mode != SCROLLING_MODE_NONE) { auto banner = sceneryElement->GetBanner(); if (banner != nullptr && !banner->IsNull()) diff --git a/src/openrct2-ui/windows/TopToolbar.cpp b/src/openrct2-ui/windows/TopToolbar.cpp index 9edc606f64..40ddf51649 100644 --- a/src/openrct2-ui/windows/TopToolbar.cpp +++ b/src/openrct2-ui/windows/TopToolbar.cpp @@ -1027,10 +1027,10 @@ static void repaint_scenery_tool_down(const ScreenCoordsXY& windowPos, rct_widge } case ViewportInteractionItem::LargeScenery: { - rct_scenery_entry* scenery_entry = info.Element->AsLargeScenery()->GetEntry(); + auto* sceneryEntry = info.Element->AsLargeScenery()->GetEntry(); // If can't repaint - if (!(scenery_entry->large_scenery.flags & LARGE_SCENERY_FLAG_HAS_PRIMARY_COLOUR)) + if (!(sceneryEntry->flags & LARGE_SCENERY_FLAG_HAS_PRIMARY_COLOUR)) return; auto repaintScenery = LargeScenerySetColourAction( @@ -1106,7 +1106,7 @@ static void scenery_eyedropper_tool_down(const ScreenCoordsXY& windowPos, rct_wi case ViewportInteractionItem::LargeScenery: { auto entryIndex = info.Element->AsLargeScenery()->GetEntryIndex(); - rct_scenery_entry* sceneryEntry = get_large_scenery_entry(entryIndex); + auto* sceneryEntry = get_large_scenery_entry(entryIndex); if (sceneryEntry != nullptr) { if (window_scenery_set_selected_item({ SCENERY_TYPE_LARGE, entryIndex })) @@ -1552,13 +1552,13 @@ static void sub_6E1F34_large_scenery( auto screenPos = sourceScreenPos; uint16_t maxPossibleHeight = (std::numeric_limits::max() - 32) * ZoomLevel::max(); - rct_scenery_entry* scenery_entry = get_large_scenery_entry(sceneryIndex); - if (scenery_entry) + auto* sceneryEntry = get_large_scenery_entry(sceneryIndex); + if (sceneryEntry) { int16_t maxClearZ = 0; - for (int32_t i = 0; scenery_entry->large_scenery.tiles[i].x_offset != -1; ++i) + for (int32_t i = 0; sceneryEntry->tiles[i].x_offset != -1; ++i) { - maxClearZ = std::max(maxClearZ, scenery_entry->large_scenery.tiles[i].z_clearance); + maxClearZ = std::max(maxClearZ, sceneryEntry->tiles[i].z_clearance); } maxPossibleHeight = std::max(0, maxPossibleHeight - maxClearZ); } @@ -2808,10 +2808,10 @@ static void top_toolbar_tool_update_scenery(const ScreenCoordsXY& screenPos) return; } - rct_scenery_entry* scenery = get_large_scenery_entry(selection.EntryIndex); + auto* sceneryEntry = get_large_scenery_entry(selection.EntryIndex); gMapSelectionTiles.clear(); - for (rct_large_scenery_tile* tile = scenery->large_scenery.tiles; + for (rct_large_scenery_tile* tile = sceneryEntry->tiles; tile->x_offset != static_cast(static_cast(0xFFFF)); tile++) { CoordsXY tileLocation = { tile->x_offset, tile->y_offset }; diff --git a/src/openrct2/actions/LargeSceneryPlaceAction.cpp b/src/openrct2/actions/LargeSceneryPlaceAction.cpp index ea9c3b86f6..f489835930 100644 --- a/src/openrct2/actions/LargeSceneryPlaceAction.cpp +++ b/src/openrct2/actions/LargeSceneryPlaceAction.cpp @@ -44,10 +44,10 @@ LargeSceneryPlaceAction::LargeSceneryPlaceAction( , _primaryColour(primaryColour) , _secondaryColour(secondaryColour) { - rct_scenery_entry* sceneryEntry = get_large_scenery_entry(_sceneryType); + auto* sceneryEntry = get_large_scenery_entry(_sceneryType); if (sceneryEntry != nullptr) { - if (sceneryEntry->large_scenery.scrolling_mode != SCROLLING_MODE_NONE) + if (sceneryEntry->scrolling_mode != SCROLLING_MODE_NONE) { _bannerId = create_new_banner(0); } @@ -60,10 +60,10 @@ void LargeSceneryPlaceAction::AcceptParameters(GameActionParameterVisitor& visit visitor.Visit("object", _sceneryType); visitor.Visit("primaryColour", _primaryColour); visitor.Visit("secondaryColour", _secondaryColour); - rct_scenery_entry* sceneryEntry = get_large_scenery_entry(_sceneryType); + auto* sceneryEntry = get_large_scenery_entry(_sceneryType); if (sceneryEntry != nullptr) { - if (sceneryEntry->large_scenery.scrolling_mode != SCROLLING_MODE_NONE) + if (sceneryEntry->scrolling_mode != SCROLLING_MODE_NONE) { _bannerId = create_new_banner(0); } @@ -109,15 +109,15 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Query() const return std::make_unique(GameActions::Status::InvalidParameters); } - rct_scenery_entry* sceneryEntry = get_large_scenery_entry(_sceneryType); + auto* sceneryEntry = get_large_scenery_entry(_sceneryType); if (sceneryEntry == nullptr) { log_error("Invalid game command for scenery placement, sceneryType = %u", _sceneryType); return std::make_unique(GameActions::Status::InvalidParameters); } - uint32_t totalNumTiles = GetTotalNumTiles(sceneryEntry->large_scenery.tiles); - int16_t maxHeight = GetMaxSurfaceHeight(sceneryEntry->large_scenery.tiles); + uint32_t totalNumTiles = GetTotalNumTiles(sceneryEntry->tiles); + int16_t maxHeight = GetMaxSurfaceHeight(sceneryEntry->tiles); if (_loc.z != 0) { @@ -126,7 +126,7 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Query() const res->Position.z = maxHeight; - if (sceneryEntry->large_scenery.scrolling_mode != SCROLLING_MODE_NONE) + if (sceneryEntry->scrolling_mode != SCROLLING_MODE_NONE) { if (_bannerId == BANNER_INDEX_NULL) { @@ -149,7 +149,7 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Query() const } uint8_t tileNum = 0; - for (rct_large_scenery_tile* tile = sceneryEntry->large_scenery.tiles; tile->x_offset != -1; tile++, tileNum++) + for (rct_large_scenery_tile* tile = sceneryEntry->tiles; tile->x_offset != -1; tile++, tileNum++) { auto curTile = CoordsXY{ tile->x_offset, tile->y_offset }.Rotate(_loc.direction); @@ -199,7 +199,7 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Query() const // Force ride construction to recheck area _currentTrackSelectionFlags |= TRACK_SELECTION_FLAG_RECHECK; - res->Cost = (sceneryEntry->large_scenery.price * 10) + supportsCost; + res->Cost = (sceneryEntry->price * 10) + supportsCost; return res; } @@ -217,21 +217,21 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Execute() const money32 supportsCost = 0; - rct_scenery_entry* sceneryEntry = get_large_scenery_entry(_sceneryType); + auto* sceneryEntry = get_large_scenery_entry(_sceneryType); if (sceneryEntry == nullptr) { log_error("Invalid game command for scenery placement, sceneryType = %u", _sceneryType); return std::make_unique(GameActions::Status::InvalidParameters); } - if (sceneryEntry->large_scenery.tiles == nullptr) + if (sceneryEntry->tiles == nullptr) { log_error("Invalid large scenery object, sceneryType = %u", _sceneryType); return std::make_unique(GameActions::Status::InvalidParameters); } - uint32_t totalNumTiles = GetTotalNumTiles(sceneryEntry->large_scenery.tiles); - int16_t maxHeight = GetMaxSurfaceHeight(sceneryEntry->large_scenery.tiles); + uint32_t totalNumTiles = GetTotalNumTiles(sceneryEntry->tiles); + int16_t maxHeight = GetMaxSurfaceHeight(sceneryEntry->tiles); if (_loc.z != 0) { @@ -247,7 +247,7 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Execute() const } uint8_t tileNum = 0; - for (rct_large_scenery_tile* tile = sceneryEntry->large_scenery.tiles; tile->x_offset != -1; tile++, tileNum++) + for (rct_large_scenery_tile* tile = sceneryEntry->tiles; tile->x_offset != -1; tile++, tileNum++) { auto curTile = CoordsXY{ tile->x_offset, tile->y_offset }.Rotate(_loc.direction); @@ -293,7 +293,7 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Execute() const } // Allocate banner after all tiles to ensure banner id doesn't need to be freed. - if (sceneryEntry->large_scenery.scrolling_mode != SCROLLING_MODE_NONE) + if (sceneryEntry->scrolling_mode != SCROLLING_MODE_NONE) { if (_bannerId == BANNER_INDEX_NULL) { @@ -326,7 +326,7 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Execute() const // Force ride construction to recheck area _currentTrackSelectionFlags |= TRACK_SELECTION_FLAG_RECHECK; - res->Cost = (sceneryEntry->large_scenery.price * 10) + supportsCost; + res->Cost = (sceneryEntry->price * 10) + supportsCost; return res; } diff --git a/src/openrct2/actions/LargeSceneryRemoveAction.cpp b/src/openrct2/actions/LargeSceneryRemoveAction.cpp index 6c8ad22fb7..79767bbc3e 100644 --- a/src/openrct2/actions/LargeSceneryRemoveAction.cpp +++ b/src/openrct2/actions/LargeSceneryRemoveAction.cpp @@ -68,25 +68,24 @@ GameActions::Result::Ptr LargeSceneryRemoveAction::Query() const return MakeResult(GameActions::Status::InvalidParameters, STR_INVALID_SELECTION_OF_OBJECTS); } - rct_scenery_entry* scenery_entry = tileElement->AsLargeScenery()->GetEntry(); + auto* sceneryEntry = tileElement->AsLargeScenery()->GetEntry(); // If we have a bugged scenery entry, do not touch the tile element. - if (scenery_entry == nullptr) + if (sceneryEntry == nullptr) return MakeResult(GameActions::Status::Unknown, STR_CANT_REMOVE_THIS); - auto rotatedOffsets = CoordsXYZ{ CoordsXY{ scenery_entry->large_scenery.tiles[_tileIndex].x_offset, - scenery_entry->large_scenery.tiles[_tileIndex].y_offset } - .Rotate(_loc.direction), - scenery_entry->large_scenery.tiles[_tileIndex].z_offset }; + auto rotatedOffsets = CoordsXYZ{ + CoordsXY{ sceneryEntry->tiles[_tileIndex].x_offset, sceneryEntry->tiles[_tileIndex].y_offset }.Rotate(_loc.direction), + sceneryEntry->tiles[_tileIndex].z_offset + }; auto firstTile = CoordsXYZ{ _loc.x, _loc.y, _loc.z } - rotatedOffsets; bool calculate_cost = true; - for (int32_t i = 0; scenery_entry->large_scenery.tiles[i].x_offset != -1; i++) + for (int32_t i = 0; sceneryEntry->tiles[i].x_offset != -1; i++) { auto currentTileRotatedOffset = CoordsXYZ{ - CoordsXY{ scenery_entry->large_scenery.tiles[i].x_offset, scenery_entry->large_scenery.tiles[i].y_offset }.Rotate( - _loc.direction), - scenery_entry->large_scenery.tiles[i].z_offset + CoordsXY{ sceneryEntry->tiles[i].x_offset, sceneryEntry->tiles[i].y_offset }.Rotate(_loc.direction), + sceneryEntry->tiles[i].z_offset }; auto currentTile = CoordsXYZ{ firstTile.x, firstTile.y, firstTile.z } + currentTileRotatedOffset; @@ -116,7 +115,7 @@ GameActions::Result::Ptr LargeSceneryRemoveAction::Query() const } if (calculate_cost) - res->Cost = scenery_entry->large_scenery.removal_price * 10; + res->Cost = sceneryEntry->removal_price * 10; return res; } @@ -139,26 +138,25 @@ GameActions::Result::Ptr LargeSceneryRemoveAction::Execute() const return MakeResult(GameActions::Status::InvalidParameters, STR_INVALID_SELECTION_OF_OBJECTS); } - rct_scenery_entry* scenery_entry = tileElement->AsLargeScenery()->GetEntry(); + auto* sceneryEntry = tileElement->AsLargeScenery()->GetEntry(); // If we have a bugged scenery entry, do not touch the tile element. - if (scenery_entry == nullptr) + if (sceneryEntry == nullptr) return MakeResult(GameActions::Status::Unknown, STR_CANT_REMOVE_THIS); tileElement->RemoveBannerEntry(); - auto rotatedFirstTile = CoordsXYZ{ CoordsXY{ scenery_entry->large_scenery.tiles[_tileIndex].x_offset, - scenery_entry->large_scenery.tiles[_tileIndex].y_offset } - .Rotate(_loc.direction), - scenery_entry->large_scenery.tiles[_tileIndex].z_offset }; + auto rotatedFirstTile = CoordsXYZ{ + CoordsXY{ sceneryEntry->tiles[_tileIndex].x_offset, sceneryEntry->tiles[_tileIndex].y_offset }.Rotate(_loc.direction), + sceneryEntry->tiles[_tileIndex].z_offset + }; auto firstTile = CoordsXYZ{ _loc.x, _loc.y, _loc.z } - rotatedFirstTile; - for (int32_t i = 0; scenery_entry->large_scenery.tiles[i].x_offset != -1; i++) + for (int32_t i = 0; sceneryEntry->tiles[i].x_offset != -1; i++) { auto rotatedCurrentTile = CoordsXYZ{ - CoordsXY{ scenery_entry->large_scenery.tiles[i].x_offset, scenery_entry->large_scenery.tiles[i].y_offset }.Rotate( - _loc.direction), - scenery_entry->large_scenery.tiles[i].z_offset + CoordsXY{ sceneryEntry->tiles[i].x_offset, sceneryEntry->tiles[i].y_offset }.Rotate(_loc.direction), + sceneryEntry->tiles[i].z_offset }; auto currentTile = CoordsXYZ{ firstTile.x, firstTile.y, firstTile.z } + rotatedCurrentTile; @@ -183,7 +181,7 @@ GameActions::Result::Ptr LargeSceneryRemoveAction::Execute() const } } - res->Cost = scenery_entry->large_scenery.removal_price * 10; + res->Cost = sceneryEntry->removal_price * 10; return res; } diff --git a/src/openrct2/actions/LargeScenerySetColourAction.cpp b/src/openrct2/actions/LargeScenerySetColourAction.cpp index 313b07961e..794d863794 100644 --- a/src/openrct2/actions/LargeScenerySetColourAction.cpp +++ b/src/openrct2/actions/LargeScenerySetColourAction.cpp @@ -86,7 +86,7 @@ GameActions::Result::Ptr LargeScenerySetColourAction::QueryExecute(bool isExecut return res; } - rct_scenery_entry* sceneryEntry = largeElement->GetEntry(); + auto* sceneryEntry = largeElement->GetEntry(); if (sceneryEntry == nullptr) { @@ -94,15 +94,15 @@ GameActions::Result::Ptr LargeScenerySetColourAction::QueryExecute(bool isExecut return MakeResult(GameActions::Status::Unknown, STR_CANT_REPAINT_THIS); } // Work out the base tile coordinates (Tile with index 0) - auto rotatedBaseCoordsOffset = CoordsXYZ{ CoordsXY{ sceneryEntry->large_scenery.tiles[_tileIndex].x_offset, - sceneryEntry->large_scenery.tiles[_tileIndex].y_offset } - .Rotate(_loc.direction), - sceneryEntry->large_scenery.tiles[_tileIndex].z_offset }; + auto rotatedBaseCoordsOffset = CoordsXYZ{ + CoordsXY{ sceneryEntry->tiles[_tileIndex].x_offset, sceneryEntry->tiles[_tileIndex].y_offset }.Rotate(_loc.direction), + sceneryEntry->tiles[_tileIndex].z_offset + }; auto baseTile = CoordsXYZ{ _loc.x, _loc.y, _loc.z } - rotatedBaseCoordsOffset; auto i = 0; - for (auto tile = sceneryEntry->large_scenery.tiles; tile->x_offset != -1; ++tile, ++i) + for (auto tile = sceneryEntry->tiles; tile->x_offset != -1; ++tile, ++i) { // Work out the current tile coordinates auto rotatedTileCoords = CoordsXYZ{ CoordsXY{ tile->x_offset, tile->y_offset }.Rotate(_loc.direction), tile->z_offset }; diff --git a/src/openrct2/actions/WallPlaceAction.cpp b/src/openrct2/actions/WallPlaceAction.cpp index dfc05101dc..9fcfb94436 100644 --- a/src/openrct2/actions/WallPlaceAction.cpp +++ b/src/openrct2/actions/WallPlaceAction.cpp @@ -531,7 +531,6 @@ GameActions::Result::Ptr WallPlaceAction::WallCheckObstruction( WallSceneryEntry* wall, int32_t z0, int32_t z1, bool* wallAcrossTrack) const { int32_t entryType, sequence; - rct_scenery_entry* entry; rct_large_scenery_tile* tile; *wallAcrossTrack = false; @@ -582,10 +581,11 @@ GameActions::Result::Ptr WallPlaceAction::WallCheckObstruction( } break; case TILE_ELEMENT_TYPE_LARGE_SCENERY: + { entryType = tileElement->AsLargeScenery()->GetEntryIndex(); sequence = tileElement->AsLargeScenery()->GetSequenceIndex(); - entry = get_large_scenery_entry(entryType); - tile = &entry->large_scenery.tiles[sequence]; + auto* sceneryEntry = get_large_scenery_entry(entryType); + tile = &sceneryEntry->tiles[sequence]; { int32_t direction = ((_edge - tileElement->GetDirection()) & TILE_ELEMENT_DIRECTION_MASK) + 8; if (!(tile->flags & (1 << direction))) @@ -595,6 +595,7 @@ GameActions::Result::Ptr WallPlaceAction::WallCheckObstruction( } } break; + } case TILE_ELEMENT_TYPE_SMALL_SCENERY: { auto sceneryEntry = tileElement->AsSmallScenery()->GetEntry(); diff --git a/src/openrct2/object/LargeSceneryObject.cpp b/src/openrct2/object/LargeSceneryObject.cpp index aa31694dfc..8129597814 100644 --- a/src/openrct2/object/LargeSceneryObject.cpp +++ b/src/openrct2/object/LargeSceneryObject.cpp @@ -26,13 +26,13 @@ void LargeSceneryObject::ReadLegacy(IReadObjectContext* context, OpenRCT2::IStream* stream) { stream->Seek(6, OpenRCT2::STREAM_SEEK_CURRENT); - _legacyType.large_scenery.tool_id = static_cast(stream->ReadValue()); - _legacyType.large_scenery.flags = stream->ReadValue(); - _legacyType.large_scenery.price = stream->ReadValue(); - _legacyType.large_scenery.removal_price = stream->ReadValue(); + _legacyType.tool_id = static_cast(stream->ReadValue()); + _legacyType.flags = stream->ReadValue(); + _legacyType.price = stream->ReadValue(); + _legacyType.removal_price = stream->ReadValue(); stream->Seek(5, OpenRCT2::STREAM_SEEK_CURRENT); - _legacyType.large_scenery.scenery_tab_id = OBJECT_ENTRY_INDEX_NULL; - _legacyType.large_scenery.scrolling_mode = stream->ReadValue(); + _legacyType.scenery_tab_id = OBJECT_ENTRY_INDEX_NULL; + _legacyType.scrolling_mode = stream->ReadValue(); stream->Seek(4, OpenRCT2::STREAM_SEEK_CURRENT); GetStringTable().Read(context, stream, ObjectStringID::NAME); @@ -40,11 +40,11 @@ void LargeSceneryObject::ReadLegacy(IReadObjectContext* context, OpenRCT2::IStre rct_object_entry sgEntry = stream->ReadValue(); SetPrimarySceneryGroup(ObjectEntryDescriptor(sgEntry)); - if (_legacyType.large_scenery.flags & LARGE_SCENERY_FLAG_3D_TEXT) + if (_legacyType.flags & LARGE_SCENERY_FLAG_3D_TEXT) { _3dFont = std::make_unique(); stream->Read(_3dFont.get()); - _legacyType.large_scenery.text = _3dFont.get(); + _legacyType.text = _3dFont.get(); } _tiles = ReadTiles(stream); @@ -52,15 +52,15 @@ void LargeSceneryObject::ReadLegacy(IReadObjectContext* context, OpenRCT2::IStre GetImageTable().Read(context, stream); // Validate properties - if (_legacyType.large_scenery.price <= 0) + if (_legacyType.price <= 0) { context->LogError(ObjectError::InvalidProperty, "Price can not be free or negative."); } - if (_legacyType.large_scenery.removal_price <= 0) + if (_legacyType.removal_price <= 0) { // Make sure you don't make a profit when placing then removing. - money16 reimbursement = _legacyType.large_scenery.removal_price; - if (reimbursement > _legacyType.large_scenery.price) + money16 reimbursement = _legacyType.removal_price; + if (reimbursement > _legacyType.price) { context->LogError(ObjectError::InvalidProperty, "Sell price can not be more than buy price."); } @@ -74,11 +74,11 @@ void LargeSceneryObject::Load() _baseImageId = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount()); _legacyType.image = _baseImageId; - _legacyType.large_scenery.tiles = _tiles.data(); + _legacyType.tiles = _tiles.data(); - if (_legacyType.large_scenery.flags & LARGE_SCENERY_FLAG_3D_TEXT) + if (_legacyType.flags & LARGE_SCENERY_FLAG_3D_TEXT) { - _legacyType.large_scenery.text_image = _legacyType.image; + _legacyType.text_image = _legacyType.image; if (_3dFont->flags & LARGE_SCENERY_TEXT_FLAG_VERTICAL) { _legacyType.image += _3dFont->num_images * 2; @@ -87,7 +87,7 @@ void LargeSceneryObject::Load() { _legacyType.image += _3dFont->num_images * 4; } - _legacyType.large_scenery.text = _3dFont.get(); + _legacyType.text = _3dFont.get(); } } @@ -129,14 +129,14 @@ void LargeSceneryObject::ReadJson(IReadObjectContext* context, json_t& root) if (properties.is_object()) { - _legacyType.large_scenery.tool_id = Cursor::FromString(Json::GetString(properties["cursor"]), CursorID::StatueDown); + _legacyType.tool_id = Cursor::FromString(Json::GetString(properties["cursor"]), CursorID::StatueDown); - _legacyType.large_scenery.price = Json::GetNumber(properties["price"]); - _legacyType.large_scenery.removal_price = Json::GetNumber(properties["removalPrice"]); + _legacyType.price = Json::GetNumber(properties["price"]); + _legacyType.removal_price = Json::GetNumber(properties["removalPrice"]); - _legacyType.large_scenery.scrolling_mode = Json::GetNumber(properties["scrollingMode"], SCROLLING_MODE_NONE); + _legacyType.scrolling_mode = Json::GetNumber(properties["scrollingMode"], SCROLLING_MODE_NONE); - _legacyType.large_scenery.flags = Json::GetFlags( + _legacyType.flags = Json::GetFlags( properties, { { "hasPrimaryColour", LARGE_SCENERY_FLAG_HAS_PRIMARY_COLOUR }, @@ -157,7 +157,7 @@ void LargeSceneryObject::ReadJson(IReadObjectContext* context, json_t& root) if (j3dFont.is_object()) { _3dFont = ReadJson3dFont(j3dFont); - _legacyType.large_scenery.flags |= LARGE_SCENERY_FLAG_3D_TEXT; + _legacyType.flags |= LARGE_SCENERY_FLAG_3D_TEXT; } SetPrimarySceneryGroup(ObjectEntryDescriptor(Json::GetString(properties["sceneryGroup"]))); diff --git a/src/openrct2/object/LargeSceneryObject.h b/src/openrct2/object/LargeSceneryObject.h index 00e33a4670..2a548c50e5 100644 --- a/src/openrct2/object/LargeSceneryObject.h +++ b/src/openrct2/object/LargeSceneryObject.h @@ -18,7 +18,7 @@ class LargeSceneryObject final : public SceneryObject { private: - rct_scenery_entry _legacyType = {}; + LargeSceneryEntry _legacyType = {}; uint32_t _baseImageId = 0; std::vector _tiles; std::unique_ptr _3dFont; diff --git a/src/openrct2/object/ObjectManager.cpp b/src/openrct2/object/ObjectManager.cpp index 2589a0cd56..b72f6c0bd8 100644 --- a/src/openrct2/object/ObjectManager.cpp +++ b/src/openrct2/object/ObjectManager.cpp @@ -490,8 +490,8 @@ private: } case ObjectType::LargeScenery: { - auto* sceneryEntry = static_cast(loadedObject->GetLegacyData()); - sceneryEntry->large_scenery.scenery_tab_id = GetPrimarySceneryGroupEntryIndex(loadedObject.get()); + auto* sceneryEntry = static_cast(loadedObject->GetLegacyData()); + sceneryEntry->scenery_tab_id = GetPrimarySceneryGroupEntryIndex(loadedObject.get()); break; } case ObjectType::Walls: diff --git a/src/openrct2/paint/tile_element/Paint.LargeScenery.cpp b/src/openrct2/paint/tile_element/Paint.LargeScenery.cpp index b0d072d05b..a2ff3a04a7 100644 --- a/src/openrct2/paint/tile_element/Paint.LargeScenery.cpp +++ b/src/openrct2/paint/tile_element/Paint.LargeScenery.cpp @@ -232,11 +232,11 @@ void large_scenery_paint(paint_session* session, uint8_t direction, uint16_t hei if (object == nullptr) return; - const rct_scenery_entry* entry = tileElement->AsLargeScenery()->GetEntry(); - if (entry == nullptr) + const auto* sceneryEntry = tileElement->AsLargeScenery()->GetEntry(); + if (sceneryEntry == nullptr) return; - uint32_t image_id = (sequenceNum << 2) + entry->image + 4 + direction; + uint32_t image_id = (sequenceNum << 2) + sceneryEntry->image + 4 + direction; const rct_large_scenery_tile* tile = object->GetTileForSequence(sequenceNum); if (tile == nullptr) return; @@ -285,14 +285,14 @@ void large_scenery_paint(paint_session* session, uint8_t direction, uint16_t hei boxlength.y = s98E3C4[esi].length.y; boxlength.z = ah; PaintAddImageAsParent(session, image_id, 0, 0, boxlength.x, boxlength.y, ah, height, boxoffset.x, boxoffset.y, boxoffset.z); - if (entry->large_scenery.scrolling_mode == SCROLLING_MODE_NONE || direction == 1 || direction == 2) + if (sceneryEntry->scrolling_mode == SCROLLING_MODE_NONE || direction == 1 || direction == 2) { large_scenery_paint_supports(session, direction, height, tileElement, dword_F4387C, tile); return; } - if (entry->large_scenery.flags & LARGE_SCENERY_FLAG_3D_TEXT) + if (sceneryEntry->flags & LARGE_SCENERY_FLAG_3D_TEXT) { - if (entry->large_scenery.tiles[1].x_offset != static_cast(static_cast(0xFFFF))) + if (sceneryEntry->tiles[1].x_offset != static_cast(static_cast(0xFFFF))) { int32_t sequenceDirection = (tileElement->AsLargeScenery()->GetSequenceIndex() - 1) & 3; if (sequenceDirection != direction) @@ -322,7 +322,7 @@ void large_scenery_paint(paint_session* session, uint8_t direction, uint16_t hei banner->FormatTextTo(ft); utf8 signString[256]; format_string(signString, sizeof(signString), STR_STRINGID, ft.Data()); - rct_large_scenery_text* text = entry->large_scenery.text; + rct_large_scenery_text* text = sceneryEntry->text; int32_t y_offset = (text->offset[(direction & 1)].y * 2); if (text->flags & LARGE_SCENERY_TEXT_FLAG_VERTICAL) { @@ -339,8 +339,7 @@ void large_scenery_paint(paint_session* session, uint8_t direction, uint16_t hei utf8 str[5] = { 0 }; utf8_write_codepoint(str, codepoint); large_scenery_sign_paint_line( - session, str, entry->large_scenery.text, entry->large_scenery.text_image, textColour, direction, - y_offset - height2); + session, str, sceneryEntry->text, sceneryEntry->text_image, textColour, direction, y_offset - height2); y_offset += large_scenery_sign_get_glyph(text, codepoint)->height * 2; } } @@ -382,24 +381,21 @@ void large_scenery_paint(paint_session* session, uint8_t direction, uint16_t hei src = spacesrc; } large_scenery_sign_paint_line( - session, str1, entry->large_scenery.text, entry->large_scenery.text_image, textColour, - direction, y_offset); + session, str1, sceneryEntry->text, sceneryEntry->text_image, textColour, direction, y_offset); y_offset += (large_scenery_sign_get_glyph(text, 'A')->height + 1) * 2; } } else { large_scenery_sign_paint_line( - session, signString, entry->large_scenery.text, entry->large_scenery.text_image, textColour, - direction, y_offset); + session, signString, sceneryEntry->text, sceneryEntry->text_image, textColour, direction, y_offset); } } else { // Draw one-line sign: large_scenery_sign_paint_line( - session, signString, entry->large_scenery.text, entry->large_scenery.text_image, textColour, direction, - y_offset); + session, signString, sceneryEntry->text, sceneryEntry->text_image, textColour, direction, y_offset); } } } @@ -432,7 +428,7 @@ void large_scenery_paint(paint_session* session, uint8_t direction, uint16_t hei textColour = ColourMapA[textColour].light; } // 6B809A: - uint16_t scrollMode = entry->large_scenery.scrolling_mode + ((direction + 1) & 0x3); + uint16_t scrollMode = sceneryEntry->scrolling_mode + ((direction + 1) & 0x3); auto banner = tileElement->AsLargeScenery()->GetBanner(); if (banner != nullptr) { diff --git a/src/openrct2/peep/Guest.cpp b/src/openrct2/peep/Guest.cpp index 4d6780cf1f..5c127f282f 100644 --- a/src/openrct2/peep/Guest.cpp +++ b/src/openrct2/peep/Guest.cpp @@ -6333,7 +6333,7 @@ static bool peep_find_ride_to_look_at(Peep* peep, uint8_t edge, ride_id_t* rideT if (tileElement->GetType() == TILE_ELEMENT_TYPE_LARGE_SCENERY) { const auto* sceneryEntry = tileElement->AsLargeScenery()->GetEntry(); - if (sceneryEntry == nullptr || !(sceneryEntry->large_scenery.flags & LARGE_SCENERY_FLAG_PHOTOGENIC)) + if (sceneryEntry == nullptr || !(sceneryEntry->flags & LARGE_SCENERY_FLAG_PHOTOGENIC)) { continue; } @@ -6449,8 +6449,8 @@ static bool peep_find_ride_to_look_at(Peep* peep, uint8_t edge, ride_id_t* rideT if (tileElement->GetType() == TILE_ELEMENT_TYPE_LARGE_SCENERY) { - auto sceneryEntry = tileElement->AsLargeScenery()->GetEntry(); - if (!(sceneryEntry == nullptr || sceneryEntry->large_scenery.flags & LARGE_SCENERY_FLAG_PHOTOGENIC)) + auto* sceneryEntry = tileElement->AsLargeScenery()->GetEntry(); + if (!(sceneryEntry == nullptr || sceneryEntry->flags & LARGE_SCENERY_FLAG_PHOTOGENIC)) { continue; } @@ -6565,8 +6565,8 @@ static bool peep_find_ride_to_look_at(Peep* peep, uint8_t edge, ride_id_t* rideT if (tileElement->GetType() == TILE_ELEMENT_TYPE_LARGE_SCENERY) { - const auto* entry = tileElement->AsLargeScenery()->GetEntry(); - if (entry == nullptr || !(entry->large_scenery.flags & LARGE_SCENERY_FLAG_PHOTOGENIC)) + const auto* sceneryEntry = tileElement->AsLargeScenery()->GetEntry(); + if (sceneryEntry == nullptr || !(sceneryEntry->flags & LARGE_SCENERY_FLAG_PHOTOGENIC)) { continue; } diff --git a/src/openrct2/rct12/RCT12.cpp b/src/openrct2/rct12/RCT12.cpp index d7c829c1d7..3612b761e1 100644 --- a/src/openrct2/rct12/RCT12.cpp +++ b/src/openrct2/rct12/RCT12.cpp @@ -498,16 +498,16 @@ bool is_user_string_id(rct_string_id stringId) uint8_t RCT12TileElement::GetBannerIndex() { - rct_scenery_entry* sceneryEntry; - switch (GetType()) { case TILE_ELEMENT_TYPE_LARGE_SCENERY: - sceneryEntry = get_large_scenery_entry(AsLargeScenery()->GetEntryIndex()); - if (sceneryEntry->large_scenery.scrolling_mode == SCROLLING_MODE_NONE) + { + auto* sceneryEntry = get_large_scenery_entry(AsLargeScenery()->GetEntryIndex()); + if (sceneryEntry->scrolling_mode == SCROLLING_MODE_NONE) return RCT12_BANNER_INDEX_NULL; return AsLargeScenery()->GetBannerIndex(); + } case TILE_ELEMENT_TYPE_WALL: { auto* wallEntry = get_wall_entry(AsWall()->GetEntryIndex()); diff --git a/src/openrct2/rct2/S6Exporter.cpp b/src/openrct2/rct2/S6Exporter.cpp index 03f1be727f..281f246c10 100644 --- a/src/openrct2/rct2/S6Exporter.cpp +++ b/src/openrct2/rct2/S6Exporter.cpp @@ -1770,7 +1770,7 @@ void S6Exporter::ExportTileElement(RCT12TileElement* dst, TileElement* src) dst2->SetSecondaryColour(src2->GetSecondaryColour()); auto entry = src2->GetEntry(); - if (entry != nullptr && entry->large_scenery.scrolling_mode != SCROLLING_MODE_NONE) + if (entry != nullptr && entry->scrolling_mode != SCROLLING_MODE_NONE) { auto bannerIndex = src2->GetBannerIndex(); if (bannerIndex != BANNER_INDEX_NULL) diff --git a/src/openrct2/rct2/S6Importer.cpp b/src/openrct2/rct2/S6Importer.cpp index a4e7075b05..03fd04e4d9 100644 --- a/src/openrct2/rct2/S6Importer.cpp +++ b/src/openrct2/rct2/S6Importer.cpp @@ -1265,7 +1265,7 @@ public: // Import banner information dst2->SetBannerIndex(BANNER_INDEX_NULL); auto entry = dst2->GetEntry(); - if (entry != nullptr && entry->large_scenery.scrolling_mode != SCROLLING_MODE_NONE) + if (entry != nullptr && entry->scrolling_mode != SCROLLING_MODE_NONE) { auto bannerIndex = src2->GetBannerIndex(); if (bannerIndex < std::size(_s6.banners)) diff --git a/src/openrct2/ride/TrackDesign.cpp b/src/openrct2/ride/TrackDesign.cpp index 9679b2246e..f63e7c30a9 100644 --- a/src/openrct2/ride/TrackDesign.cpp +++ b/src/openrct2/ride/TrackDesign.cpp @@ -681,10 +681,9 @@ static void track_design_mirror_scenery(TrackDesign* td6) { case ObjectType::LargeScenery: { - rct_scenery_entry* scenery_entry = static_cast( - object_entry_get_chunk(entry_type, entryIndex)); + auto* sceneryEntry = static_cast(object_entry_get_chunk(entry_type, entryIndex)); int16_t x1 = 0, x2 = 0, y1 = 0, y2 = 0; - for (rct_large_scenery_tile* tile = scenery_entry->large_scenery.tiles; tile->x_offset != -1; tile++) + for (rct_large_scenery_tile* tile = sceneryEntry->tiles; tile->x_offset != -1; tile++) { if (x1 > tile->x_offset) { diff --git a/src/openrct2/ride/TrackDesignSave.cpp b/src/openrct2/ride/TrackDesignSave.cpp index 3a8a7b2ef3..cf3dde9395 100644 --- a/src/openrct2/ride/TrackDesignSave.cpp +++ b/src/openrct2/ride/TrackDesignSave.cpp @@ -126,7 +126,6 @@ bool track_design_save_contains_tile_element(const TileElement* tileElement) static int32_t tile_element_get_total_element_count(TileElement* tileElement) { int32_t elementCount; - rct_scenery_entry* sceneryEntry; rct_large_scenery_tile* tile; switch (tileElement->GetType()) @@ -137,8 +136,9 @@ static int32_t tile_element_get_total_element_count(TileElement* tileElement) return 1; case TILE_ELEMENT_TYPE_LARGE_SCENERY: - sceneryEntry = tileElement->AsLargeScenery()->GetEntry(); - tile = sceneryEntry->large_scenery.tiles; + { + auto* sceneryEntry = tileElement->AsLargeScenery()->GetEntry(); + tile = sceneryEntry->tiles; elementCount = 0; do { @@ -146,7 +146,7 @@ static int32_t tile_element_get_total_element_count(TileElement* tileElement) elementCount++; } while (tile->x_offset != static_cast(static_cast(0xFFFF))); return elementCount; - + } default: return 0; } @@ -238,7 +238,7 @@ static void track_design_save_add_large_scenery(const CoordsXY& loc, LargeScener int32_t entryType = tileElement->GetEntryIndex(); auto entry = object_entry_get_object(ObjectType::LargeScenery, entryType); - sceneryTiles = get_large_scenery_entry(entryType)->large_scenery.tiles; + sceneryTiles = get_large_scenery_entry(entryType)->tiles; int32_t z = tileElement->base_height; direction = tileElement->GetDirection(); @@ -423,7 +423,7 @@ static void track_design_save_remove_large_scenery(const CoordsXY& loc, LargeSce int32_t entryType = tileElement->GetEntryIndex(); auto entry = object_entry_get_object(ObjectType::LargeScenery, entryType); - sceneryTiles = get_large_scenery_entry(entryType)->large_scenery.tiles; + sceneryTiles = get_large_scenery_entry(entryType)->tiles; int32_t z = tileElement->base_height; direction = tileElement->GetDirection(); diff --git a/src/openrct2/world/LargeScenery.cpp b/src/openrct2/world/LargeScenery.cpp index 8435f129ad..6103d5b648 100644 --- a/src/openrct2/world/LargeScenery.cpp +++ b/src/openrct2/world/LargeScenery.cpp @@ -75,7 +75,7 @@ ObjectEntryIndex LargeSceneryElement::GetEntryIndex() const return EntryIndex; } -rct_scenery_entry* LargeSceneryElement::GetEntry() const +LargeSceneryEntry* LargeSceneryElement::GetEntry() const { return get_large_scenery_entry(GetEntryIndex()); } @@ -100,14 +100,14 @@ void LargeSceneryElement::SetSequenceIndex(uint8_t sequence) SequenceIndex = sequence; } -rct_scenery_entry* get_large_scenery_entry(ObjectEntryIndex entryIndex) +LargeSceneryEntry* get_large_scenery_entry(ObjectEntryIndex entryIndex) { - rct_scenery_entry* result = nullptr; + LargeSceneryEntry* result = nullptr; auto& objMgr = OpenRCT2::GetContext()->GetObjectManager(); auto obj = objMgr.GetLoadedObject(ObjectType::LargeScenery, entryIndex); if (obj != nullptr) { - result = static_cast(obj->GetLegacyData()); + result = static_cast(obj->GetLegacyData()); } return result; } diff --git a/src/openrct2/world/LargeScenery.h b/src/openrct2/world/LargeScenery.h index 93827815c5..f433715a57 100644 --- a/src/openrct2/world/LargeScenery.h +++ b/src/openrct2/world/LargeScenery.h @@ -13,7 +13,7 @@ #include "Map.h" #include "TileElement.h" -rct_scenery_entry* get_large_scenery_entry(ObjectEntryIndex entryIndex); +LargeSceneryEntry* get_large_scenery_entry(ObjectEntryIndex entryIndex); enum { diff --git a/src/openrct2/world/Map.cpp b/src/openrct2/world/Map.cpp index e435212363..eb0f789c4f 100644 --- a/src/openrct2/world/Map.cpp +++ b/src/openrct2/world/Map.cpp @@ -1926,15 +1926,14 @@ SmallSceneryElement* map_get_small_scenery_element_at(const CoordsXYZ& sceneryCo std::optional map_large_scenery_get_origin( const CoordsXYZD& sceneryPos, int32_t sequence, LargeSceneryElement** outElement) { - rct_scenery_entry* sceneryEntry; rct_large_scenery_tile* tile; auto tileElement = map_get_large_scenery_segment(sceneryPos, sequence); if (tileElement == nullptr) return std::nullopt; - sceneryEntry = tileElement->GetEntry(); - tile = &sceneryEntry->large_scenery.tiles[sequence]; + auto* sceneryEntry = tileElement->GetEntry(); + tile = &sceneryEntry->tiles[sequence]; CoordsXY offsetPos{ tile->x_offset, tile->y_offset }; auto rotatedOffsetPos = offsetPos.Rotate(sceneryPos.direction); @@ -1953,7 +1952,6 @@ std::optional map_large_scenery_get_origin( bool map_large_scenery_sign_set_colour(const CoordsXYZD& signPos, int32_t sequence, uint8_t mainColour, uint8_t textColour) { LargeSceneryElement* tileElement; - rct_scenery_entry* sceneryEntry; rct_large_scenery_tile *sceneryTiles, *tile; auto sceneryOrigin = map_large_scenery_get_origin(signPos, sequence, &tileElement); @@ -1962,8 +1960,8 @@ bool map_large_scenery_sign_set_colour(const CoordsXYZD& signPos, int32_t sequen return false; } - sceneryEntry = tileElement->GetEntry(); - sceneryTiles = sceneryEntry->large_scenery.tiles; + auto* sceneryEntry = tileElement->GetEntry(); + sceneryTiles = sceneryEntry->tiles; // Iterate through each tile of the large scenery element sequence = 0; diff --git a/src/openrct2/world/MapAnimation.cpp b/src/openrct2/world/MapAnimation.cpp index af9b538291..5f6d7c467b 100644 --- a/src/openrct2/world/MapAnimation.cpp +++ b/src/openrct2/world/MapAnimation.cpp @@ -447,7 +447,6 @@ static bool map_animation_invalidate_large_scenery(const CoordsXYZ& loc) { TileCoordsXYZ tileLoc{ loc }; TileElement* tileElement; - rct_scenery_entry* sceneryEntry; bool wasInvalidated = false; tileElement = map_get_first_element_at(loc); @@ -460,8 +459,8 @@ static bool map_animation_invalidate_large_scenery(const CoordsXYZ& loc) if (tileElement->GetType() != TILE_ELEMENT_TYPE_LARGE_SCENERY) continue; - sceneryEntry = tileElement->AsLargeScenery()->GetEntry(); - if (sceneryEntry->large_scenery.flags & LARGE_SCENERY_FLAG_ANIMATED) + auto* sceneryEntry = tileElement->AsLargeScenery()->GetEntry(); + if (sceneryEntry->flags & LARGE_SCENERY_FLAG_ANIMATED) { map_invalidate_tile_zoom1({ loc, loc.z, loc.z + 16 }); wasInvalidated = true; @@ -651,7 +650,7 @@ void AutoCreateMapAnimations() { auto sceneryEl = el->AsLargeScenery(); auto entry = sceneryEl->GetEntry(); - if (entry != nullptr && (entry->large_scenery.flags & LARGE_SCENERY_FLAG_ANIMATED)) + if (entry != nullptr && (entry->flags & LARGE_SCENERY_FLAG_ANIMATED)) { map_animation_create(MAP_ANIMATION_TYPE_LARGE_SCENERY, loc); } diff --git a/src/openrct2/world/Scenery.h b/src/openrct2/world/Scenery.h index f802819f32..45e2278890 100644 --- a/src/openrct2/world/Scenery.h +++ b/src/openrct2/world/Scenery.h @@ -22,6 +22,12 @@ #pragma pack(push, 1) +struct SceneryEntryBase +{ + rct_string_id name; + uint32_t image; +}; + struct rct_large_scenery_tile { int16_t x_offset; @@ -65,7 +71,7 @@ enum LARGE_SCENERY_TEXT_FLAGS LARGE_SCENERY_TEXT_FLAG_TWO_LINE = (1 << 1), // 0x2 }; -struct rct_large_scenery_entry +struct LargeSceneryEntry : SceneryEntryBase { CursorID tool_id; uint8_t flags; @@ -108,19 +114,6 @@ enum WALL_SCENERY_2_FLAGS WALL_SCENERY_2_ANIMATED = (1 << 4), // 0x10 }; -struct SceneryEntryBase -{ - rct_string_id name; - uint32_t image; -}; - -struct rct_scenery_entry -{ - rct_string_id name; // 0x00 - uint32_t image; // 0x02 - rct_large_scenery_entry large_scenery; -}; - struct SmallSceneryEntry : SceneryEntryBase { uint32_t flags; diff --git a/src/openrct2/world/TileElement.cpp b/src/openrct2/world/TileElement.cpp index 9dbd216483..0dbc860b71 100644 --- a/src/openrct2/world/TileElement.cpp +++ b/src/openrct2/world/TileElement.cpp @@ -31,16 +31,16 @@ bool tile_element_is_underground(TileElement* tileElement) BannerIndex TileElement::GetBannerIndex() const { - rct_scenery_entry* sceneryEntry; - switch (GetType()) { case TILE_ELEMENT_TYPE_LARGE_SCENERY: - sceneryEntry = AsLargeScenery()->GetEntry(); - if (sceneryEntry == nullptr || sceneryEntry->large_scenery.scrolling_mode == SCROLLING_MODE_NONE) + { + auto* sceneryEntry = AsLargeScenery()->GetEntry(); + if (sceneryEntry == nullptr || sceneryEntry->scrolling_mode == SCROLLING_MODE_NONE) return BANNER_INDEX_NULL; return AsLargeScenery()->GetBannerIndex(); + } case TILE_ELEMENT_TYPE_WALL: { auto* wallEntry = AsWall()->GetEntry(); diff --git a/src/openrct2/world/TileElement.h b/src/openrct2/world/TileElement.h index abb1791706..7efd8744a7 100644 --- a/src/openrct2/world/TileElement.h +++ b/src/openrct2/world/TileElement.h @@ -17,7 +17,7 @@ struct Banner; struct CoordsXY; -struct rct_scenery_entry; +struct LargeSceneryEntry; struct SmallSceneryEntry; struct WallSceneryEntry; struct PathBitEntry; @@ -496,7 +496,7 @@ private: public: ObjectEntryIndex GetEntryIndex() const; void SetEntryIndex(ObjectEntryIndex newIndex); - rct_scenery_entry* GetEntry() const; + LargeSceneryEntry* GetEntry() const; const LargeSceneryObject* GetObject() const; uint8_t GetSequenceIndex() const; diff --git a/src/openrct2/world/TileInspector.cpp b/src/openrct2/world/TileInspector.cpp index 1aa8423a71..957cca4de0 100644 --- a/src/openrct2/world/TileInspector.cpp +++ b/src/openrct2/world/TileInspector.cpp @@ -149,10 +149,10 @@ namespace OpenRCT2::TileInspector static int32_t numLargeScenerySequences(const CoordsXY& loc, const LargeSceneryElement* const largeScenery) { - const rct_scenery_entry* const largeEntry = largeScenery->GetEntry(); + const auto* const largeEntry = largeScenery->GetEntry(); const auto direction = largeScenery->GetDirection(); const auto sequenceIndex = largeScenery->GetSequenceIndex(); - const auto* tiles = largeEntry->large_scenery.tiles; + const auto* tiles = largeEntry->tiles; const auto& tile = tiles[sequenceIndex]; const auto rotatedFirstTile = CoordsXYZ{ CoordsXY{ tile.x_offset, tile.y_offset }.Rotate(direction),