diff --git a/src/openrct2-ui/WindowManager.cpp b/src/openrct2-ui/WindowManager.cpp index aa82b7f493..7e483bb5e7 100644 --- a/src/openrct2-ui/WindowManager.cpp +++ b/src/openrct2-ui/WindowManager.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include diff --git a/src/openrct2-ui/interface/ViewportInteraction.cpp b/src/openrct2-ui/interface/ViewportInteraction.cpp index a35a5808a1..5ca1d53d09 100644 --- a/src/openrct2-ui/interface/ViewportInteraction.cpp +++ b/src/openrct2-ui/interface/ViewportInteraction.cpp @@ -28,9 +28,12 @@ #include #include #include +#include #include #include +#include #include +#include #include #include #include diff --git a/src/openrct2-ui/windows/GameBottomToolbar.cpp b/src/openrct2-ui/windows/GameBottomToolbar.cpp index 8e8760d12c..f7457d8528 100644 --- a/src/openrct2-ui/windows/GameBottomToolbar.cpp +++ b/src/openrct2-ui/windows/GameBottomToolbar.cpp @@ -24,8 +24,8 @@ #include #include #include +#include #include -#include // clang-format off enum WINDOW_GAME_BOTTOM_TOOLBAR_WIDGET_IDX diff --git a/src/openrct2-ui/windows/Map.cpp b/src/openrct2-ui/windows/Map.cpp index 6f23ee8883..f007ca72d1 100644 --- a/src/openrct2-ui/windows/Map.cpp +++ b/src/openrct2-ui/windows/Map.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include diff --git a/src/openrct2-ui/windows/News.cpp b/src/openrct2-ui/windows/News.cpp index 2bcc342b3d..cccbdd6056 100644 --- a/src/openrct2-ui/windows/News.cpp +++ b/src/openrct2-ui/windows/News.cpp @@ -18,7 +18,7 @@ #include #include #include -#include +#include static constexpr const rct_string_id WINDOW_TITLE = STR_RECENT_MESSAGES; static constexpr const int32_t WH = 300; diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index 570a782d2a..672cb70aa5 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -50,6 +50,7 @@ #include #include #include +#include #include #include #include diff --git a/src/openrct2-ui/windows/Staff.cpp b/src/openrct2-ui/windows/Staff.cpp index d846a00040..c0ef906a0c 100644 --- a/src/openrct2-ui/windows/Staff.cpp +++ b/src/openrct2-ui/windows/Staff.cpp @@ -27,9 +27,9 @@ #include #include #include +#include #include #include -#include static constexpr const rct_string_id WINDOW_TITLE = STR_STRINGID; static constexpr const int32_t WW = 190; diff --git a/src/openrct2-ui/windows/StaffFirePrompt.cpp b/src/openrct2-ui/windows/StaffFirePrompt.cpp index 26d143f491..42d9739bab 100644 --- a/src/openrct2-ui/windows/StaffFirePrompt.cpp +++ b/src/openrct2-ui/windows/StaffFirePrompt.cpp @@ -14,7 +14,7 @@ #include #include #include -#include +#include static constexpr const rct_string_id WINDOW_TITLE = STR_SACK_STAFF; static constexpr const int32_t WW = 200; diff --git a/src/openrct2-ui/windows/TitleCommandEditor.cpp b/src/openrct2-ui/windows/TitleCommandEditor.cpp index 32981659c7..d04d36ae1f 100644 --- a/src/openrct2-ui/windows/TitleCommandEditor.cpp +++ b/src/openrct2-ui/windows/TitleCommandEditor.cpp @@ -20,12 +20,15 @@ #include #include #include +#include #include #include #include #include #include -#include +#include +#include +#include // clang-format off struct TITLE_COMMAND_ORDER { diff --git a/src/openrct2/GameState.cpp b/src/openrct2/GameState.cpp index ed5981a973..c50b86bd2b 100644 --- a/src/openrct2/GameState.cpp +++ b/src/openrct2/GameState.cpp @@ -26,6 +26,7 @@ #include "network/network.h" #include "peep/Staff.h" #include "platform/Platform2.h" +#include "ride/Vehicle.h" #include "scenario/Scenario.h" #include "scripting/ScriptEngine.h" #include "title/TitleScreen.h" diff --git a/src/openrct2/GameStateSnapshots.cpp b/src/openrct2/GameStateSnapshots.cpp index 27b2f1e61c..5bf1ec0cb1 100644 --- a/src/openrct2/GameStateSnapshots.cpp +++ b/src/openrct2/GameStateSnapshots.cpp @@ -11,7 +11,14 @@ #include "core/CircularBuffer.h" #include "peep/Peep.h" +#include "ride/Vehicle.h" +#include "world/Balloon.h" +#include "world/Duck.h" #include "world/EntityList.h" +#include "world/Fountain.h" +#include "world/Litter.h" +#include "world/MoneyEffect.h" +#include "world/Particle.h" #include "world/Sprite.h" static constexpr size_t MaximumGameStateSnapshots = 32; @@ -50,7 +57,7 @@ struct GameStateSnapshot_t for (size_t i = 0; i < numSprites; i++) { auto entity = getEntity(i); - if (entity == nullptr || entity->misc.Type == EntityType::Null) + if (entity == nullptr || entity->base.Type == EntityType::Null) continue; indexTable.push_back(static_cast(i)); } @@ -77,9 +84,9 @@ struct GameStateSnapshot_t } auto& sprite = *entity; - ds << sprite.misc.Type; + ds << sprite.base.Type; - switch (sprite.misc.Type) + switch (sprite.base.Type) { case EntityType::Vehicle: reinterpret_cast(sprite).Serialise(ds); @@ -172,7 +179,7 @@ struct GameStateSnapshots final : public IGameStateSnapshots for (auto& sprite : spriteList) { // By default they don't exist. - sprite.misc.Type = EntityType::Null; + sprite.base.Type = EntityType::Null; } snapshot.SerialiseSprites([&spriteList](const size_t index) { return &spriteList[index]; }, MAX_ENTITIES, false); @@ -497,48 +504,61 @@ struct GameStateSnapshots final : public IGameStateSnapshots void CompareSpriteData(const rct_sprite& spriteBase, const rct_sprite& spriteCmp, GameStateSpriteChange_t& changeData) const { - CompareSpriteDataCommon(spriteBase.misc, spriteCmp.misc, changeData); - if (spriteBase.misc.Type == spriteCmp.misc.Type) + CompareSpriteDataCommon(spriteBase.base, spriteCmp.base, changeData); + if (spriteBase.base.Type == spriteCmp.base.Type) { - switch (spriteBase.misc.Type) + switch (spriteBase.base.Type) { case EntityType::Guest: CompareSpriteDataGuest( - static_cast(spriteBase.peep), static_cast(spriteCmp.peep), changeData); + static_cast(spriteBase.base), static_cast(spriteCmp.base), changeData); break; case EntityType::Staff: CompareSpriteDataStaff( - static_cast(spriteBase.peep), static_cast(spriteCmp.peep), changeData); + static_cast(spriteBase.base), static_cast(spriteCmp.base), changeData); break; case EntityType::Vehicle: - CompareSpriteDataVehicle(spriteBase.vehicle, spriteCmp.vehicle, changeData); + CompareSpriteDataVehicle( + static_cast(spriteBase.base), static_cast(spriteCmp.base), changeData); break; case EntityType::Litter: - CompareSpriteDataLitter(spriteBase.litter, spriteCmp.litter, changeData); + CompareSpriteDataLitter( + static_cast(spriteBase.base), static_cast(spriteCmp.base), changeData); break; case EntityType::SteamParticle: - CompareSpriteDataSteamParticle(spriteBase.steam_particle, spriteCmp.steam_particle, changeData); + CompareSpriteDataSteamParticle( + static_cast(spriteBase.base), static_cast(spriteCmp.base), + changeData); break; case EntityType::MoneyEffect: - CompareSpriteDataMoneyEffect(spriteBase.money_effect, spriteCmp.money_effect, changeData); + CompareSpriteDataMoneyEffect( + static_cast(spriteBase.base), static_cast(spriteCmp.base), + changeData); break; case EntityType::CrashedVehicleParticle: CompareSpriteDataVehicleCrashParticle( - spriteBase.crashed_vehicle_particle, spriteCmp.crashed_vehicle_particle, changeData); + static_cast(spriteBase.base), + static_cast(spriteCmp.base), changeData); break; case EntityType::ExplosionCloud: case EntityType::CrashSplash: case EntityType::ExplosionFlare: - CompareSpriteDataMisc(spriteBase.misc, spriteCmp.misc, changeData); + CompareSpriteDataMisc( + static_cast(spriteBase.base), static_cast(spriteCmp.base), + changeData); break; case EntityType::JumpingFountain: - CompareSpriteDataJumpingFountain(spriteBase.jumping_fountain, spriteCmp.jumping_fountain, changeData); + CompareSpriteDataJumpingFountain( + static_cast(spriteBase.base), + static_cast(spriteCmp.base), changeData); break; case EntityType::Balloon: - CompareSpriteDataBalloon(spriteBase.balloon, spriteCmp.balloon, changeData); + CompareSpriteDataBalloon( + static_cast(spriteBase.base), static_cast(spriteCmp.base), changeData); break; case EntityType::Duck: - CompareSpriteDataDuck(spriteBase.duck, spriteCmp.duck, changeData); + CompareSpriteDataDuck( + static_cast(spriteBase.base), static_cast(spriteCmp.base), changeData); break; case EntityType::Null: break; @@ -567,21 +587,21 @@ struct GameStateSnapshots final : public IGameStateSnapshots const rct_sprite& spriteBase = spritesBase[i]; const rct_sprite& spriteCmp = spritesCmp[i]; - changeData.entityType = spriteBase.misc.Type; + changeData.entityType = spriteBase.base.Type; - if (spriteBase.misc.Type == EntityType::Null && spriteCmp.misc.Type != EntityType::Null) + if (spriteBase.base.Type == EntityType::Null && spriteCmp.base.Type != EntityType::Null) { // Sprite was added. changeData.changeType = GameStateSpriteChange_t::ADDED; - changeData.entityType = spriteCmp.misc.Type; + changeData.entityType = spriteCmp.base.Type; } - else if (spriteBase.misc.Type != EntityType::Null && spriteCmp.misc.Type == EntityType::Null) + else if (spriteBase.base.Type != EntityType::Null && spriteCmp.base.Type == EntityType::Null) { // Sprite was removed. changeData.changeType = GameStateSpriteChange_t::REMOVED; - changeData.entityType = spriteBase.misc.Type; + changeData.entityType = spriteBase.base.Type; } - else if (spriteBase.misc.Type == EntityType::Null && spriteCmp.misc.Type == EntityType::Null) + else if (spriteBase.base.Type == EntityType::Null && spriteCmp.base.Type == EntityType::Null) { // Do nothing. changeData.changeType = GameStateSpriteChange_t::EQUAL; diff --git a/src/openrct2/actions/GuestSetNameAction.cpp b/src/openrct2/actions/GuestSetNameAction.cpp index 5c504ebbbe..8142c97462 100644 --- a/src/openrct2/actions/GuestSetNameAction.cpp +++ b/src/openrct2/actions/GuestSetNameAction.cpp @@ -17,8 +17,8 @@ #include "../localisation/Localisation.h" #include "../localisation/StringIds.h" #include "../windows/Intent.h" +#include "../world/Entity.h" #include "../world/Park.h" -#include "../world/Sprite.h" GuestSetNameAction::GuestSetNameAction(uint16_t spriteIndex, const std::string& name) : _spriteIndex(spriteIndex) diff --git a/src/openrct2/actions/PeepPickupAction.cpp b/src/openrct2/actions/PeepPickupAction.cpp index cc4f490975..bee844a0e0 100644 --- a/src/openrct2/actions/PeepPickupAction.cpp +++ b/src/openrct2/actions/PeepPickupAction.cpp @@ -11,8 +11,9 @@ #include "../Input.h" #include "../network/network.h" +#include "../peep/Peep.h" #include "../util/Util.h" -#include "../world/Sprite.h" +#include "../world/Entity.h" PeepPickupAction::PeepPickupAction(PeepPickupType type, uint32_t spriteId, const CoordsXYZ& loc, NetworkPlayerId_t owner) : _type(type) diff --git a/src/openrct2/actions/SetCheatAction.cpp b/src/openrct2/actions/SetCheatAction.cpp index 628059b6a8..918a3b1eab 100644 --- a/src/openrct2/actions/SetCheatAction.cpp +++ b/src/openrct2/actions/SetCheatAction.cpp @@ -19,12 +19,14 @@ #include "../localisation/StringIds.h" #include "../network/network.h" #include "../ride/Ride.h" +#include "../ride/Vehicle.h" #include "../scenario/Scenario.h" #include "../ui/UiContext.h" #include "../util/Util.h" #include "../windows/Intent.h" #include "../world/Banner.h" #include "../world/Climate.h" +#include "../world/Duck.h" #include "../world/Footpath.h" #include "../world/Location.hpp" #include "../world/Map.h" diff --git a/src/openrct2/drawing/LightFX.cpp b/src/openrct2/drawing/LightFX.cpp index 352ba23f08..6a941a556d 100644 --- a/src/openrct2/drawing/LightFX.cpp +++ b/src/openrct2/drawing/LightFX.cpp @@ -19,10 +19,11 @@ # include "../interface/Window_internal.h" # include "../paint/Paint.h" # include "../ride/Ride.h" +# include "../ride/Vehicle.h" # include "../util/Util.h" # include "../world/Climate.h" +# include "../world/Entity.h" # include "../world/Map.h" -# include "../world/Sprite.h" # include "Drawing.h" # include diff --git a/src/openrct2/interface/InteractiveConsole.cpp b/src/openrct2/interface/InteractiveConsole.cpp index 89980053c9..be76cf1240 100644 --- a/src/openrct2/interface/InteractiveConsole.cpp +++ b/src/openrct2/interface/InteractiveConsole.cpp @@ -44,6 +44,7 @@ #include "../platform/platform.h" #include "../ride/Ride.h" #include "../ride/RideData.h" +#include "../ride/Vehicle.h" #include "../util/Util.h" #include "../windows/Intent.h" #include "../world/Climate.h" diff --git a/src/openrct2/interface/Viewport.cpp b/src/openrct2/interface/Viewport.cpp index 549edbccc5..6ab3f5817d 100644 --- a/src/openrct2/interface/Viewport.cpp +++ b/src/openrct2/interface/Viewport.cpp @@ -22,6 +22,7 @@ #include "../peep/Staff.h" #include "../ride/Ride.h" #include "../ride/TrackDesign.h" +#include "../ride/Vehicle.h" #include "../ui/UiContext.h" #include "../ui/WindowManager.h" #include "../world/Climate.h" diff --git a/src/openrct2/interface/Window_internal.cpp b/src/openrct2/interface/Window_internal.cpp index 9b3140dee4..3db47f0186 100644 --- a/src/openrct2/interface/Window_internal.cpp +++ b/src/openrct2/interface/Window_internal.cpp @@ -1,7 +1,8 @@ #include "Window_internal.h" +#include "../world/Entity.h" #include "../world/EntityList.h" -#include "../world/Sprite.h" +#include "Viewport.h" void rct_window::SetLocation(const CoordsXYZ& coords) { diff --git a/src/openrct2/management/NewsItem.cpp b/src/openrct2/management/NewsItem.cpp index e96b46cf8e..c93eabe5af 100644 --- a/src/openrct2/management/NewsItem.cpp +++ b/src/openrct2/management/NewsItem.cpp @@ -18,11 +18,13 @@ #include "../localisation/Date.h" #include "../localisation/Localisation.h" #include "../management/Research.h" +#include "../peep/Peep.h" #include "../ride/Ride.h" +#include "../ride/Vehicle.h" #include "../util/Util.h" #include "../windows/Intent.h" +#include "../world/Entity.h" #include "../world/Location.hpp" -#include "../world/Sprite.h" News::ItemQueues gNewsItems; diff --git a/src/openrct2/paint/sprite/Paint.Misc.cpp b/src/openrct2/paint/sprite/Paint.Misc.cpp index 0a08c7b78a..41f02a2fb8 100644 --- a/src/openrct2/paint/sprite/Paint.Misc.cpp +++ b/src/openrct2/paint/sprite/Paint.Misc.cpp @@ -10,7 +10,11 @@ #include "../../drawing/Drawing.h" #include "../../interface/Viewport.h" #include "../../localisation/StringIds.h" +#include "../../world/Balloon.h" +#include "../../world/Duck.h" #include "../../world/Fountain.h" +#include "../../world/MoneyEffect.h" +#include "../../world/Particle.h" #include "../../world/Sprite.h" #include "../Paint.h" #include "Paint.Sprite.h" diff --git a/src/openrct2/paint/sprite/Paint.Sprite.cpp b/src/openrct2/paint/sprite/Paint.Sprite.cpp index ce2027f94b..497f3fdf90 100644 --- a/src/openrct2/paint/sprite/Paint.Sprite.cpp +++ b/src/openrct2/paint/sprite/Paint.Sprite.cpp @@ -16,7 +16,16 @@ #include "../../ride/RideData.h" #include "../../ride/TrackDesign.h" #include "../../ride/VehiclePaint.h" +#include "../../world/Balloon.h" +#include "../../world/Climate.h" +#include "../../world/Duck.h" #include "../../world/EntityList.h" +#include "../../world/Fountain.h" +#include "../../world/Litter.h" +#include "../../world/MapAnimation.h" +#include "../../world/MoneyEffect.h" +#include "../../world/Park.h" +#include "../../world/Particle.h" #include "../../world/Sprite.h" #include "../Paint.h" diff --git a/src/openrct2/paint/tile_element/Paint.Path.cpp b/src/openrct2/paint/tile_element/Paint.Path.cpp index 00cff7b966..1e12b81f09 100644 --- a/src/openrct2/paint/tile_element/Paint.Path.cpp +++ b/src/openrct2/paint/tile_element/Paint.Path.cpp @@ -13,14 +13,15 @@ #include "../../interface/Viewport.h" #include "../../localisation/Localisation.h" #include "../../object/ObjectList.h" +#include "../../peep/Peep.h" #include "../../peep/Staff.h" #include "../../ride/Track.h" #include "../../ride/TrackDesign.h" #include "../../ride/TrackPaint.h" +#include "../../world/Entity.h" #include "../../world/Footpath.h" #include "../../world/Map.h" #include "../../world/Scenery.h" -#include "../../world/Sprite.h" #include "../../world/Surface.h" #include "../Paint.h" #include "../Supports.h" diff --git a/src/openrct2/paint/tile_element/Paint.Surface.cpp b/src/openrct2/paint/tile_element/Paint.Surface.cpp index 7e3984b229..ed831ebc76 100644 --- a/src/openrct2/paint/tile_element/Paint.Surface.cpp +++ b/src/openrct2/paint/tile_element/Paint.Surface.cpp @@ -21,10 +21,11 @@ #include "../../object/TerrainEdgeObject.h" #include "../../object/TerrainSurfaceObject.h" #include "../../paint/Paint.h" +#include "../../peep/Peep.h" #include "../../peep/Staff.h" #include "../../ride/TrackDesign.h" #include "../../sprites.h" -#include "../../world/Sprite.h" +#include "../../world/Entity.h" #include "../../world/Surface.h" #include "Paint.TileElement.h" diff --git a/src/openrct2/peep/Guest.cpp b/src/openrct2/peep/Guest.cpp index c35c695d51..6263d7d383 100644 --- a/src/openrct2/peep/Guest.cpp +++ b/src/openrct2/peep/Guest.cpp @@ -25,15 +25,18 @@ #include "../ride/ShopItem.h" #include "../ride/Station.h" #include "../ride/Track.h" +#include "../ride/Vehicle.h" #include "../scenario/Scenario.h" #include "../scripting/HookEngine.h" #include "../scripting/ScriptEngine.h" #include "../util/Util.h" #include "../windows/Intent.h" +#include "../world/Balloon.h" #include "../world/Climate.h" #include "../world/Footpath.h" #include "../world/LargeScenery.h" #include "../world/Map.h" +#include "../world/MoneyEffect.h" #include "../world/Park.h" #include "../world/Scenery.h" #include "../world/Sprite.h" diff --git a/src/openrct2/peep/Peep.cpp b/src/openrct2/peep/Peep.cpp index a20998696e..251ea87d72 100644 --- a/src/openrct2/peep/Peep.cpp +++ b/src/openrct2/peep/Peep.cpp @@ -34,6 +34,7 @@ #include "../sprites.h" #include "../util/Util.h" #include "../windows/Intent.h" +#include "../world/Balloon.h" #include "../world/Climate.h" #include "../world/Entrance.h" #include "../world/Footpath.h" diff --git a/src/openrct2/peep/Peep.h b/src/openrct2/peep/Peep.h index 11ea2a5118..4c89b5c2e9 100644 --- a/src/openrct2/peep/Peep.h +++ b/src/openrct2/peep/Peep.h @@ -921,7 +921,8 @@ private: bool UpdatePatrollingFindGrass(); }; -static_assert(sizeof(Peep) <= 512); +static_assert(sizeof(Guest) <= 512); +static_assert(sizeof(Staff) <= 512); struct rct_sprite_bounds { diff --git a/src/openrct2/peep/PeepData.cpp b/src/openrct2/peep/PeepData.cpp index eb851b3308..8887c59d80 100644 --- a/src/openrct2/peep/PeepData.cpp +++ b/src/openrct2/peep/PeepData.cpp @@ -7,7 +7,7 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ -#include "../world/Sprite.h" +#include "Peep.h" #include diff --git a/src/openrct2/peep/Staff.cpp b/src/openrct2/peep/Staff.cpp index 5632f1bbdb..80b1ec2d5f 100644 --- a/src/openrct2/peep/Staff.cpp +++ b/src/openrct2/peep/Staff.cpp @@ -29,6 +29,7 @@ #include "../ride/RideData.h" #include "../ride/Station.h" #include "../ride/Track.h" +#include "../ride/Vehicle.h" #include "../scenario/Scenario.h" #include "../util/Util.h" #include "../windows/Intent.h" diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index cf37aa0eda..11dab91d4e 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -38,17 +38,25 @@ #include "../ride/Station.h" #include "../ride/Track.h" #include "../ride/TrainManager.h" +#include "../ride/Vehicle.h" #include "../scenario/Scenario.h" #include "../scenario/ScenarioRepository.h" #include "../scenario/ScenarioSources.h" #include "../util/SawyerCoding.h" #include "../util/Util.h" +#include "../world/Balloon.h" #include "../world/Climate.h" +#include "../world/Duck.h" +#include "../world/EntityList.h" #include "../world/Entrance.h" #include "../world/Footpath.h" +#include "../world/Fountain.h" #include "../world/LargeScenery.h" +#include "../world/Litter.h" #include "../world/MapAnimation.h" +#include "../world/MoneyEffect.h" #include "../world/Park.h" +#include "../world/Particle.h" #include "../world/Scenery.h" #include "../world/SmallScenery.h" #include "../world/Sprite.h" diff --git a/src/openrct2/rct2/S6Exporter.cpp b/src/openrct2/rct2/S6Exporter.cpp index f5d47c9776..dce46fc806 100644 --- a/src/openrct2/rct2/S6Exporter.cpp +++ b/src/openrct2/rct2/S6Exporter.cpp @@ -31,6 +31,7 @@ #include "../object/ObjectLimits.h" #include "../object/ObjectManager.h" #include "../object/ObjectRepository.h" +#include "../peep/Peep.h" #include "../peep/Staff.h" #include "../rct12/SawyerChunkWriter.h" #include "../ride/Ride.h" @@ -39,12 +40,20 @@ #include "../ride/ShopItem.h" #include "../ride/Station.h" #include "../ride/TrackData.h" +#include "../ride/Vehicle.h" #include "../scenario/Scenario.h" #include "../util/SawyerCoding.h" #include "../util/Util.h" +#include "../world/Balloon.h" #include "../world/Climate.h" +#include "../world/Duck.h" +#include "../world/EntityList.h" +#include "../world/Fountain.h" +#include "../world/Litter.h" #include "../world/MapAnimation.h" +#include "../world/MoneyEffect.h" #include "../world/Park.h" +#include "../world/Particle.h" #include "../world/Sprite.h" #include diff --git a/src/openrct2/rct2/S6Importer.cpp b/src/openrct2/rct2/S6Importer.cpp index f1bd3c788d..2cf402ad0a 100644 --- a/src/openrct2/rct2/S6Importer.cpp +++ b/src/openrct2/rct2/S6Importer.cpp @@ -32,6 +32,7 @@ #include "../object/ObjectLimits.h" #include "../object/ObjectManager.h" #include "../object/ObjectRepository.h" +#include "../peep/Peep.h" #include "../peep/Staff.h" #include "../rct12/RCT12.h" #include "../rct12/SawyerChunkReader.h" @@ -44,14 +45,22 @@ #include "../ride/Station.h" #include "../ride/Track.h" #include "../ride/TrainManager.h" +#include "../ride/Vehicle.h" #include "../scenario/Scenario.h" #include "../scenario/ScenarioRepository.h" #include "../util/SawyerCoding.h" #include "../util/Util.h" +#include "../world/Balloon.h" #include "../world/Climate.h" +#include "../world/Duck.h" +#include "../world/EntityList.h" #include "../world/Entrance.h" +#include "../world/Fountain.h" +#include "../world/Litter.h" #include "../world/MapAnimation.h" +#include "../world/MoneyEffect.h" #include "../world/Park.h" +#include "../world/Particle.h" #include "../world/Scenery.h" #include "../world/Sprite.h" #include "../world/Surface.h" diff --git a/src/openrct2/ride/CableLift.cpp b/src/openrct2/ride/CableLift.cpp index 7370512f2c..5e4c0e142c 100644 --- a/src/openrct2/ride/CableLift.cpp +++ b/src/openrct2/ride/CableLift.cpp @@ -17,6 +17,7 @@ #include "Ride.h" #include "RideData.h" #include "Track.h" +#include "Vehicle.h" #include "VehicleData.h" #include diff --git a/src/openrct2/ride/ShopItem.cpp b/src/openrct2/ride/ShopItem.cpp index 38605a29e8..75847803f0 100644 --- a/src/openrct2/ride/ShopItem.cpp +++ b/src/openrct2/ride/ShopItem.cpp @@ -11,6 +11,7 @@ #include "../common.h" #include "../localisation/StringIds.h" +#include "../peep/Peep.h" #include "../sprites.h" #include "../world/Sprite.h" diff --git a/src/openrct2/ride/Station.cpp b/src/openrct2/ride/Station.cpp index 0283b951ca..0f22ffd2af 100644 --- a/src/openrct2/ride/Station.cpp +++ b/src/openrct2/ride/Station.cpp @@ -10,10 +10,12 @@ #include "Station.h" #include "../Game.h" +#include "../peep/Peep.h" #include "../scenario/Scenario.h" #include "../world/Location.hpp" #include "../world/Sprite.h" #include "Track.h" +#include "Vehicle.h" static void ride_update_station_blocksection(Ride* ride, StationIndex stationIndex); static void ride_update_station_dodgems(Ride* ride, StationIndex stationIndex); diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index ae2222d7fc..0be76252fd 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -29,6 +29,7 @@ #include "../world/Map.h" #include "../world/MapAnimation.h" #include "../world/Park.h" +#include "../world/Particle.h" #include "../world/Scenery.h" #include "../world/SmallScenery.h" #include "../world/Sprite.h" diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index a8194aee37..7e23185a1d 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -365,6 +365,7 @@ private: void UpdateLandscapeDoor() const; void UpdateLandscapeDoorBackwards() const; }; +static_assert(sizeof(Vehicle) <= 512); struct train_ref { diff --git a/src/openrct2/ride/VehiclePaint.cpp b/src/openrct2/ride/VehiclePaint.cpp index 0ca3e70e80..cd9ddfa79f 100644 --- a/src/openrct2/ride/VehiclePaint.cpp +++ b/src/openrct2/ride/VehiclePaint.cpp @@ -16,7 +16,8 @@ #include "../paint/Paint.h" #include "../paint/sprite/Paint.Sprite.h" #include "../ride/RideData.h" -#include "../world/Sprite.h" +#include "../ride/Vehicle.h" +#include "../world/Entity.h" #include "Track.h" #include diff --git a/src/openrct2/ride/coaster/ReverserRollerCoaster.cpp b/src/openrct2/ride/coaster/ReverserRollerCoaster.cpp index 52034432ee..bb9b68d4be 100644 --- a/src/openrct2/ride/coaster/ReverserRollerCoaster.cpp +++ b/src/openrct2/ride/coaster/ReverserRollerCoaster.cpp @@ -13,11 +13,12 @@ #include "../../paint/Supports.h" #include "../../paint/tile_element/Paint.TileElement.h" #include "../../sprites.h" +#include "../../world/Entity.h" #include "../../world/Map.h" -#include "../../world/Sprite.h" #include "../RideData.h" #include "../TrackData.h" #include "../TrackPaint.h" +#include "../Vehicle.h" #include "../VehiclePaint.h" #ifndef NO_VEHICLES diff --git a/src/openrct2/ride/gentle/Circus.cpp b/src/openrct2/ride/gentle/Circus.cpp index 039af3bdab..ecdf7b25c4 100644 --- a/src/openrct2/ride/gentle/Circus.cpp +++ b/src/openrct2/ride/gentle/Circus.cpp @@ -10,7 +10,7 @@ #include "../../interface/Viewport.h" #include "../../paint/Paint.h" #include "../../paint/Supports.h" -#include "../../world/Sprite.h" +#include "../../world/Entity.h" #include "../Track.h" #include "../TrackPaint.h" diff --git a/src/openrct2/ride/gentle/CrookedHouse.cpp b/src/openrct2/ride/gentle/CrookedHouse.cpp index 359cdfe35a..162d6d3ca2 100644 --- a/src/openrct2/ride/gentle/CrookedHouse.cpp +++ b/src/openrct2/ride/gentle/CrookedHouse.cpp @@ -10,7 +10,7 @@ #include "../../interface/Viewport.h" #include "../../paint/Paint.h" #include "../../paint/Supports.h" -#include "../../world/Sprite.h" +#include "../../world/Entity.h" #include "../Track.h" #include "../TrackPaint.h" diff --git a/src/openrct2/ride/gentle/FerrisWheel.cpp b/src/openrct2/ride/gentle/FerrisWheel.cpp index ab3b50cf38..da58c30b44 100644 --- a/src/openrct2/ride/gentle/FerrisWheel.cpp +++ b/src/openrct2/ride/gentle/FerrisWheel.cpp @@ -10,9 +10,11 @@ #include "../../interface/Viewport.h" #include "../../paint/Paint.h" #include "../../paint/Supports.h" -#include "../../world/Sprite.h" +#include "../../peep/Peep.h" +#include "../../world/Entity.h" #include "../Track.h" #include "../TrackPaint.h" +#include "../Vehicle.h" static constexpr const uint8_t edges_1x4_ne_sw[] = { EDGE_NW | EDGE_SE, diff --git a/src/openrct2/ride/gentle/HauntedHouse.cpp b/src/openrct2/ride/gentle/HauntedHouse.cpp index dce7d3d639..33ffc26c6c 100644 --- a/src/openrct2/ride/gentle/HauntedHouse.cpp +++ b/src/openrct2/ride/gentle/HauntedHouse.cpp @@ -10,9 +10,10 @@ #include "../../interface/Viewport.h" #include "../../paint/Paint.h" #include "../../paint/Supports.h" -#include "../../world/Sprite.h" +#include "../../world/Entity.h" #include "../Track.h" #include "../TrackPaint.h" +#include "../Vehicle.h" struct haunted_house_bound_box { diff --git a/src/openrct2/ride/gentle/MerryGoRound.cpp b/src/openrct2/ride/gentle/MerryGoRound.cpp index ecb03afbbd..c9551a6c30 100644 --- a/src/openrct2/ride/gentle/MerryGoRound.cpp +++ b/src/openrct2/ride/gentle/MerryGoRound.cpp @@ -10,9 +10,10 @@ #include "../../interface/Viewport.h" #include "../../paint/Paint.h" #include "../../paint/Supports.h" -#include "../../world/Sprite.h" +#include "../../world/Entity.h" #include "../Track.h" #include "../TrackPaint.h" +#include "../Vehicle.h" /** rct2: 0x0142805C */ static constexpr const uint32_t merry_go_round_rider_offsets[] = { 0, 32, 64, 96, 16, 48, 80, 112 }; diff --git a/src/openrct2/ride/gentle/MiniGolf.cpp b/src/openrct2/ride/gentle/MiniGolf.cpp index 4b587d0834..6e81c31d47 100644 --- a/src/openrct2/ride/gentle/MiniGolf.cpp +++ b/src/openrct2/ride/gentle/MiniGolf.cpp @@ -11,8 +11,9 @@ #include "../../interface/Viewport.h" #include "../../paint/Paint.h" #include "../../paint/Supports.h" +#include "../../peep/Peep.h" +#include "../../world/Entity.h" #include "../../world/Map.h" -#include "../../world/Sprite.h" #include "../../world/Surface.h" #include "../RideData.h" #include "../TrackData.h" diff --git a/src/openrct2/ride/gentle/SpaceRings.cpp b/src/openrct2/ride/gentle/SpaceRings.cpp index 6cfa8c98ec..2a27d69183 100644 --- a/src/openrct2/ride/gentle/SpaceRings.cpp +++ b/src/openrct2/ride/gentle/SpaceRings.cpp @@ -11,10 +11,11 @@ #include "../../interface/Viewport.h" #include "../../paint/Paint.h" #include "../../paint/Supports.h" -#include "../../world/Sprite.h" +#include "../../peep/Peep.h" +#include "../../world/Entity.h" #include "../Track.h" #include "../TrackPaint.h" - +#include "../Vehicle.h" enum { SPR_SPACE_RINGS_FENCE_NE = 22146, diff --git a/src/openrct2/ride/thrill/3dCinema.cpp b/src/openrct2/ride/thrill/3dCinema.cpp index 0f323a5689..bd85544280 100644 --- a/src/openrct2/ride/thrill/3dCinema.cpp +++ b/src/openrct2/ride/thrill/3dCinema.cpp @@ -10,7 +10,7 @@ #include "../../interface/Viewport.h" #include "../../paint/Paint.h" #include "../../paint/Supports.h" -#include "../../world/Sprite.h" +#include "../../world/Entity.h" #include "../Track.h" #include "../TrackPaint.h" diff --git a/src/openrct2/ride/thrill/Enterprise.cpp b/src/openrct2/ride/thrill/Enterprise.cpp index 6af4d0f74b..68b6d7a5fe 100644 --- a/src/openrct2/ride/thrill/Enterprise.cpp +++ b/src/openrct2/ride/thrill/Enterprise.cpp @@ -11,9 +11,10 @@ #include "../../interface/Viewport.h" #include "../../paint/Paint.h" #include "../../paint/Supports.h" -#include "../../world/Sprite.h" +#include "../../world/Entity.h" #include "../Track.h" #include "../TrackPaint.h" +#include "../Vehicle.h" /** rct2: 0x008A2ABC */ static void paint_enterprise_structure( diff --git a/src/openrct2/ride/thrill/LaunchedFreefall.cpp b/src/openrct2/ride/thrill/LaunchedFreefall.cpp index 70c190c0d3..151388ccae 100644 --- a/src/openrct2/ride/thrill/LaunchedFreefall.cpp +++ b/src/openrct2/ride/thrill/LaunchedFreefall.cpp @@ -15,6 +15,7 @@ #include "../../world/Sprite.h" #include "../Track.h" #include "../TrackPaint.h" +#include "../Vehicle.h" #include "../VehiclePaint.h" enum diff --git a/src/openrct2/ride/thrill/MagicCarpet.cpp b/src/openrct2/ride/thrill/MagicCarpet.cpp index 51d97d730d..4300046f08 100644 --- a/src/openrct2/ride/thrill/MagicCarpet.cpp +++ b/src/openrct2/ride/thrill/MagicCarpet.cpp @@ -10,9 +10,10 @@ #include "../../interface/Viewport.h" #include "../../paint/Paint.h" #include "../../paint/Supports.h" -#include "../../world/Sprite.h" +#include "../../world/Entity.h" #include "../Track.h" #include "../TrackPaint.h" +#include "../Vehicle.h" enum { diff --git a/src/openrct2/ride/thrill/MotionSimulator.cpp b/src/openrct2/ride/thrill/MotionSimulator.cpp index b8a1034aee..ac687f3e22 100644 --- a/src/openrct2/ride/thrill/MotionSimulator.cpp +++ b/src/openrct2/ride/thrill/MotionSimulator.cpp @@ -10,9 +10,10 @@ #include "../../interface/Viewport.h" #include "../../paint/Paint.h" #include "../../paint/Supports.h" -#include "../../world/Sprite.h" +#include "../../world/Entity.h" #include "../Track.h" #include "../TrackPaint.h" +#include "../Vehicle.h" enum { diff --git a/src/openrct2/ride/thrill/SwingingInverterShip.cpp b/src/openrct2/ride/thrill/SwingingInverterShip.cpp index a7e330d691..b684c0b212 100644 --- a/src/openrct2/ride/thrill/SwingingInverterShip.cpp +++ b/src/openrct2/ride/thrill/SwingingInverterShip.cpp @@ -10,9 +10,10 @@ #include "../../interface/Viewport.h" #include "../../paint/Paint.h" #include "../../paint/Supports.h" -#include "../../world/Sprite.h" +#include "../../world/Entity.h" #include "../Track.h" #include "../TrackPaint.h" +#include "../Vehicle.h" /** rct2: 0x01428010 */ static constexpr const uint32_t swinging_inverter_ship_base_sprite_offset[] = { 0, 16, 0, 16 }; diff --git a/src/openrct2/ride/thrill/SwingingShip.cpp b/src/openrct2/ride/thrill/SwingingShip.cpp index 9726fca15e..675f4e446c 100644 --- a/src/openrct2/ride/thrill/SwingingShip.cpp +++ b/src/openrct2/ride/thrill/SwingingShip.cpp @@ -10,9 +10,10 @@ #include "../../interface/Viewport.h" #include "../../paint/Paint.h" #include "../../paint/Supports.h" -#include "../../world/Sprite.h" +#include "../../world/Entity.h" #include "../Track.h" #include "../TrackPaint.h" +#include "../Vehicle.h" // 1 2 0 3 4 static constexpr const uint8_t track_map_1x5[][5] = { diff --git a/src/openrct2/ride/thrill/TopSpin.cpp b/src/openrct2/ride/thrill/TopSpin.cpp index bc290a8cfa..989caa9edc 100644 --- a/src/openrct2/ride/thrill/TopSpin.cpp +++ b/src/openrct2/ride/thrill/TopSpin.cpp @@ -12,11 +12,12 @@ #include "../../paint/Paint.h" #include "../../paint/Supports.h" #include "../../sprites.h" +#include "../../world/Entity.h" #include "../../world/Map.h" -#include "../../world/Sprite.h" #include "../RideData.h" #include "../TrackData.h" #include "../TrackPaint.h" +#include "../Vehicle.h" #include diff --git a/src/openrct2/ride/thrill/Twist.cpp b/src/openrct2/ride/thrill/Twist.cpp index a316d49069..1c0d26192c 100644 --- a/src/openrct2/ride/thrill/Twist.cpp +++ b/src/openrct2/ride/thrill/Twist.cpp @@ -11,9 +11,10 @@ #include "../../interface/Viewport.h" #include "../../paint/Paint.h" #include "../../paint/Supports.h" -#include "../../world/Sprite.h" +#include "../../world/Entity.h" #include "../Track.h" #include "../TrackPaint.h" +#include "../Vehicle.h" /** rct2: 0x0076E5C9 */ static void paint_twist_structure( diff --git a/src/openrct2/ride/water/RiverRapids.cpp b/src/openrct2/ride/water/RiverRapids.cpp index edd4967c01..9b53f5f916 100644 --- a/src/openrct2/ride/water/RiverRapids.cpp +++ b/src/openrct2/ride/water/RiverRapids.cpp @@ -17,6 +17,7 @@ #include "../../world/Sprite.h" #include "../Track.h" #include "../TrackPaint.h" +#include "../Vehicle.h" #include "../VehiclePaint.h" #ifndef NO_VEHICLES diff --git a/src/openrct2/ride/water/SplashBoats.cpp b/src/openrct2/ride/water/SplashBoats.cpp index 5df1975729..8d693895d4 100644 --- a/src/openrct2/ride/water/SplashBoats.cpp +++ b/src/openrct2/ride/water/SplashBoats.cpp @@ -12,9 +12,10 @@ #include "../../paint/Paint.h" #include "../../paint/Supports.h" #include "../../paint/sprite/Paint.Sprite.h" -#include "../../world/Sprite.h" +#include "../../world/Entity.h" #include "../Track.h" #include "../TrackPaint.h" +#include "../Vehicle.h" #include "../VehiclePaint.h" enum diff --git a/src/openrct2/scenario/Scenario.cpp b/src/openrct2/scenario/Scenario.cpp index 6662f1bea7..5d3c9fd792 100644 --- a/src/openrct2/scenario/Scenario.cpp +++ b/src/openrct2/scenario/Scenario.cpp @@ -41,6 +41,7 @@ #include "../util/Util.h" #include "../windows/Intent.h" #include "../world/Climate.h" +#include "../world/Duck.h" #include "../world/Map.h" #include "../world/Park.h" #include "../world/Scenery.h" diff --git a/src/openrct2/scripting/ScMap.hpp b/src/openrct2/scripting/ScMap.hpp index 15543290a6..a86423cf63 100644 --- a/src/openrct2/scripting/ScMap.hpp +++ b/src/openrct2/scripting/ScMap.hpp @@ -14,6 +14,8 @@ # include "../common.h" # include "../ride/Ride.h" # include "../ride/TrainManager.h" +# include "../world/Balloon.h" +# include "../world/Duck.h" # include "../world/EntityList.h" # include "../world/Map.h" # include "Duktape.hpp" diff --git a/src/openrct2/world/Entity.cpp b/src/openrct2/world/Entity.cpp index 2456620db3..9cfbb36752 100644 --- a/src/openrct2/world/Entity.cpp +++ b/src/openrct2/world/Entity.cpp @@ -12,6 +12,11 @@ #include "../core/DataSerialiser.h" #include "../peep/Peep.h" #include "../ride/Vehicle.h" +#include "Balloon.h" +#include "Duck.h" +#include "Fountain.h" +#include "MoneyEffect.h" +#include "Particle.h" #include "Sprite.h" static void EntityBaseSerialise(SpriteBase& base, DataSerialiser& stream) diff --git a/src/openrct2/world/MapAnimation.cpp b/src/openrct2/world/MapAnimation.cpp index 0d4bb2998b..0b42120af5 100644 --- a/src/openrct2/world/MapAnimation.cpp +++ b/src/openrct2/world/MapAnimation.cpp @@ -13,6 +13,7 @@ #include "../Game.h" #include "../interface/Viewport.h" #include "../object/StationObject.h" +#include "../peep/Peep.h" #include "../ride/Ride.h" #include "../ride/RideData.h" #include "../ride/Track.h" diff --git a/src/openrct2/world/Sprite.cpp b/src/openrct2/world/Sprite.cpp index 6c0f24cf1b..a5a7083e14 100644 --- a/src/openrct2/world/Sprite.cpp +++ b/src/openrct2/world/Sprite.cpp @@ -21,8 +21,14 @@ #include "../interface/Viewport.h" #include "../localisation/Date.h" #include "../localisation/Localisation.h" +#include "../peep/Peep.h" +#include "../ride/Vehicle.h" #include "../scenario/Scenario.h" +#include "Balloon.h" +#include "Duck.h" #include "Fountain.h" +#include "MoneyEffect.h" +#include "Particle.h" #include #include @@ -36,6 +42,9 @@ static std::vector _freeIdList; static bool _spriteFlashingList[MAX_ENTITIES]; +constexpr const uint32_t SPATIAL_INDEX_SIZE = (MAXIMUM_MAP_SIZE_TECHNICAL * MAXIMUM_MAP_SIZE_TECHNICAL) + 1; +constexpr const uint32_t SPATIAL_INDEX_LOCATION_NULL = SPATIAL_INDEX_SIZE - 1; + static std::array, SPATIAL_INDEX_SIZE> gSpriteSpatialIndex; constexpr size_t GetSpatialIndexOffset(int32_t x, int32_t y) @@ -135,7 +144,7 @@ std::string rct_sprite_checksum::ToString() const SpriteBase* try_get_sprite(size_t spriteIndex) { - return spriteIndex >= MAX_ENTITIES ? nullptr : &_spriteList[spriteIndex].misc; + return spriteIndex >= MAX_ENTITIES ? nullptr : &_spriteList[spriteIndex].base; } SpriteBase* get_sprite(size_t spriteIndex) diff --git a/src/openrct2/world/Sprite.h b/src/openrct2/world/Sprite.h index 5cd157bf7e..ccf3d80ead 100644 --- a/src/openrct2/world/Sprite.h +++ b/src/openrct2/world/Sprite.h @@ -11,17 +11,11 @@ #define _SPRITE_H_ #include "../common.h" -#include "../peep/Peep.h" -#include "../ride/Vehicle.h" -#include "Balloon.h" -#include "Duck.h" -#include "Entity.h" -#include "Fountain.h" -#include "Litter.h" -#include "MoneyEffect.h" -#include "Particle.h" #include "SpriteBase.h" +#include +#include + class DataSerialiser; struct ExplosionFlare : MiscEntity @@ -55,23 +49,7 @@ struct SteamParticle : MiscEntity union rct_sprite { uint8_t pad_00[0x200]; - MiscEntity misc; - Peep peep; - Litter litter; - Vehicle vehicle; - Balloon balloon; - Duck duck; - JumpingFountain jumping_fountain; - MoneyEffect money_effect; - VehicleCrashParticle crashed_vehicle_particle; - CrashSplashParticle crash_splash; - SteamParticle steam_particle; - - // Default constructor to prevent non trivial construction issues - rct_sprite() - : pad_00() - { - } + SpriteBase base; }; assert_struct_size(rct_sprite, 0x200); @@ -91,9 +69,6 @@ enum SPRITE_FLAGS_PEEP_FLASHING = 1 << 9, // Deprecated: Use sprite_set_flashing/sprite_get_flashing instead. }; -constexpr const uint32_t SPATIAL_INDEX_SIZE = (MAXIMUM_MAP_SIZE_TECHNICAL * MAXIMUM_MAP_SIZE_TECHNICAL) + 1; -constexpr const uint32_t SPATIAL_INDEX_LOCATION_NULL = SPATIAL_INDEX_SIZE - 1; - rct_sprite* create_sprite(EntityType type); template T* CreateEntity() { diff --git a/test/tests/S6ImportExportTests.cpp b/test/tests/S6ImportExportTests.cpp index f63b7bc062..678e4d40e4 100644 --- a/test/tests/S6ImportExportTests.cpp +++ b/test/tests/S6ImportExportTests.cpp @@ -25,10 +25,17 @@ #include #include #include +#include #include #include #include +#include +#include +#include +#include +#include #include +#include #include #include #include @@ -110,7 +117,7 @@ static std::unique_ptr GetGameState(std::unique_ptr& cont { rct_sprite* sprite = reinterpret_cast(GetEntity(spriteIdx)); if (sprite == nullptr) - res->sprites[spriteIdx].misc.Type = EntityType::Null; + res->sprites[spriteIdx].base.Type = EntityType::Null; else res->sprites[spriteIdx] = *sprite; } @@ -426,47 +433,56 @@ static void CompareSpriteDataDuck(const Duck& left, const Duck& right) COMPARE_FIELD(state); } +static void CompareSpriteDataMisc(const MiscEntity& left, const MiscEntity& right) +{ + COMPARE_FIELD(frame); +} + static void CompareSpriteData(const rct_sprite& left, const rct_sprite& right) { - CompareSpriteDataCommon(left.misc, right.misc); - if (left.misc.Type == right.misc.Type) + CompareSpriteDataCommon(left.base, right.base); + if (left.base.Type == right.base.Type) { - switch (left.misc.Type) + switch (left.base.Type) { case EntityType::Guest: - CompareSpriteDataGuest(static_cast(left.peep), static_cast(right.peep)); + CompareSpriteDataGuest(static_cast(left.base), static_cast(right.base)); break; case EntityType::Staff: - CompareSpriteDataStaff(static_cast(left.peep), static_cast(right.peep)); + CompareSpriteDataStaff(static_cast(left.base), static_cast(right.base)); break; case EntityType::Vehicle: - CompareSpriteDataVehicle(left.vehicle, right.vehicle); + CompareSpriteDataVehicle(static_cast(left.base), static_cast(right.base)); break; case EntityType::Litter: - CompareSpriteDataLitter(left.litter, right.litter); + CompareSpriteDataLitter(static_cast(left.base), static_cast(right.base)); break; case EntityType::SteamParticle: - CompareSpriteDataSteamParticle(left.steam_particle, right.steam_particle); + CompareSpriteDataSteamParticle( + static_cast(left.base), static_cast(right.base)); break; case EntityType::MoneyEffect: - CompareSpriteDataMoneyEffect(left.money_effect, right.money_effect); + CompareSpriteDataMoneyEffect( + static_cast(left.base), static_cast(right.base)); break; case EntityType::CrashedVehicleParticle: - CompareSpriteDataCrashedVehicleParticle(left.crashed_vehicle_particle, right.crashed_vehicle_particle); + CompareSpriteDataCrashedVehicleParticle( + static_cast(left.base), static_cast(right.base)); break; case EntityType::JumpingFountain: - CompareSpriteDataJumpingFountain(left.jumping_fountain, right.jumping_fountain); + CompareSpriteDataJumpingFountain( + static_cast(left.base), static_cast(right.base)); break; case EntityType::Balloon: - CompareSpriteDataBalloon(left.balloon, right.balloon); + CompareSpriteDataBalloon(static_cast(left.base), static_cast(right.base)); break; case EntityType::Duck: - CompareSpriteDataDuck(left.duck, right.duck); + CompareSpriteDataDuck(static_cast(left.base), static_cast(right.base)); break; case EntityType::ExplosionCloud: case EntityType::CrashSplash: case EntityType::ExplosionFlare: - COMPARE_FIELD(misc.frame); + CompareSpriteDataMisc(static_cast(left.base), static_cast(right.base)); break; case EntityType::Null: break; @@ -490,8 +506,8 @@ static void CompareStates( for (size_t spriteIdx = 0; spriteIdx < MAX_ENTITIES; ++spriteIdx) { - if (importedState->sprites[spriteIdx].misc.Type == EntityType::Null - && exportedState->sprites[spriteIdx].misc.Type == EntityType::Null) + if (importedState->sprites[spriteIdx].base.Type == EntityType::Null + && exportedState->sprites[spriteIdx].base.Type == EntityType::Null) { continue; }