From b9173642ba456283d1052e5c3bfbbc91fcfaf561 Mon Sep 17 00:00:00 2001 From: duncanspumpkin Date: Sun, 21 Feb 2021 12:39:52 +0000 Subject: [PATCH 1/5] Rework how entity export works to allow for easier changes in future --- src/openrct2/rct2/S6Exporter.cpp | 443 +++++++++++++++++-------------- src/openrct2/rct2/S6Exporter.h | 7 +- 2 files changed, 244 insertions(+), 206 deletions(-) diff --git a/src/openrct2/rct2/S6Exporter.cpp b/src/openrct2/rct2/S6Exporter.cpp index ef672e6195..cb801a3be4 100644 --- a/src/openrct2/rct2/S6Exporter.cpp +++ b/src/openrct2/rct2/S6Exporter.cpp @@ -188,7 +188,7 @@ void S6Exporter::Export() // Map elements must be reorganised prior to saving otherwise save may be invalid map_reorganise_elements(); ExportTileElements(); - ExportSprites(); + ExportEntitys(); ExportParkName(); _s6.initial_cash = gInitialCash; @@ -937,21 +937,6 @@ void S6Exporter::ExportMarketingCampaigns() } } -void S6Exporter::ExportSprites() -{ - // Sprites needs to be reset before they get used. - // Might as well reset them in here to zero out the space and improve - // compression ratios. Especially useful for multiplayer servers that - // use zlib on the sent stream. - sprite_clear_all_unused(); - for (int32_t i = 0; i < RCT2_MAX_SPRITES; i++) - { - ExportSprite(&_s6.sprites[i], reinterpret_cast(GetEntity(i))); - } - - RebuildEntityLinks(); -} - void S6Exporter::RebuildEntityLinks() { // Rebuild next/previous linked list entity indexs @@ -1002,33 +987,6 @@ void S6Exporter::RebuildEntityLinks() } } -void S6Exporter::ExportSprite(RCT2Sprite* dst, const rct_sprite* src) -{ - std::memset(dst, 0, sizeof(rct_sprite)); - switch (src->misc.sprite_identifier) - { - case SpriteIdentifier::Null: - ExportSpriteCommonProperties(&dst->unknown, &src->misc); - break; - case SpriteIdentifier::Vehicle: - ExportSpriteVehicle(&dst->vehicle, &src->vehicle); - break; - case SpriteIdentifier::Peep: - ExportSpritePeep(&dst->peep, &src->peep); - break; - case SpriteIdentifier::Misc: - ExportSpriteMisc(&dst->unknown, &src->misc); - break; - case SpriteIdentifier::Litter: - ExportSpriteLitter(&dst->litter, &src->litter); - break; - default: - ExportSpriteCommonProperties(&dst->unknown, &src->misc); - log_warning("Sprite identifier %d can not be exported.", src->misc.sprite_identifier); - break; - } -} - constexpr RCT12EntityLinkListOffset GetRCT2LinkListOffset(const SpriteBase* src) { RCT12EntityLinkListOffset output = RCT12EntityLinkListOffset::Free; @@ -1082,92 +1040,102 @@ void S6Exporter::ExportSpriteCommonProperties(RCT12SpriteBase* dst, const Sprite dst->sprite_direction = src->sprite_direction; } -void S6Exporter::ExportSpriteVehicle(RCT2SpriteVehicle* dst, const Vehicle* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Vehicle* src) { + auto* cdst = static_cast(dst); const auto* ride = src->GetRide(); ExportSpriteCommonProperties(dst, static_cast(src)); - dst->type = EnumValue(src->SubType); - dst->vehicle_sprite_type = src->vehicle_sprite_type; - dst->bank_rotation = src->bank_rotation; - dst->remaining_distance = src->remaining_distance; - dst->velocity = src->velocity; - dst->acceleration = src->acceleration; - dst->ride = src->ride; - dst->vehicle_type = src->vehicle_type; - dst->colours = src->colours; - dst->track_progress = src->track_progress; + cdst->type = EnumValue(src->SubType); + cdst->vehicle_sprite_type = src->vehicle_sprite_type; + cdst->bank_rotation = src->bank_rotation; + cdst->remaining_distance = src->remaining_distance; + cdst->velocity = src->velocity; + cdst->acceleration = src->acceleration; + cdst->ride = src->ride; + cdst->vehicle_type = src->vehicle_type; + cdst->colours = src->colours; + cdst->track_progress = src->track_progress; if (ride != nullptr && ride->mode == RideMode::BoatHire && src->status == Vehicle::Status::TravellingBoat) { if (src->BoatLocation.isNull()) { - dst->boat_location.setNull(); + cdst->boat_location.setNull(); } else { - dst->boat_location = { static_cast(src->BoatLocation.x / COORDS_XY_STEP), - static_cast(src->BoatLocation.y / COORDS_XY_STEP) }; + cdst->boat_location = { static_cast(src->BoatLocation.x / COORDS_XY_STEP), + static_cast(src->BoatLocation.y / COORDS_XY_STEP) }; } } else { auto trackType = OpenRCT2TrackTypeToRCT2(src->GetTrackType()); // Track direction and type are in the same field - dst->SetTrackType(trackType); - dst->SetTrackDirection(src->GetTrackDirection()); + cdst->SetTrackType(trackType); + cdst->SetTrackDirection(src->GetTrackDirection()); } - dst->track_x = src->TrackLocation.x; - dst->track_y = src->TrackLocation.y; - dst->track_z = src->TrackLocation.z; - dst->next_vehicle_on_train = src->next_vehicle_on_train; - dst->prev_vehicle_on_ride = src->prev_vehicle_on_ride; - dst->next_vehicle_on_ride = src->next_vehicle_on_ride; - dst->var_44 = src->var_44; - dst->mass = src->mass; - dst->update_flags = src->update_flags; - dst->SwingSprite = src->SwingSprite; - dst->current_station = src->current_station; - dst->current_time = src->current_time; - dst->crash_z = src->crash_z; - dst->status = static_cast(src->status); - dst->sub_state = src->sub_state; + cdst->track_x = src->TrackLocation.x; + cdst->track_y = src->TrackLocation.y; + cdst->track_z = src->TrackLocation.z; + cdst->next_vehicle_on_train = src->next_vehicle_on_train; + cdst->prev_vehicle_on_ride = src->prev_vehicle_on_ride; + cdst->next_vehicle_on_ride = src->next_vehicle_on_ride; + cdst->var_44 = src->var_44; + cdst->mass = src->mass; + cdst->update_flags = src->update_flags; + cdst->SwingSprite = src->SwingSprite; + cdst->current_station = src->current_station; + cdst->current_time = src->current_time; + cdst->crash_z = src->crash_z; + cdst->status = static_cast(src->status); + cdst->sub_state = src->sub_state; for (size_t i = 0; i < std::size(src->peep); i++) { - dst->peep[i] = src->peep[i]; - dst->peep_tshirt_colours[i] = src->peep_tshirt_colours[i]; + cdst->peep[i] = src->peep[i]; + cdst->peep_tshirt_colours[i] = src->peep_tshirt_colours[i]; } - dst->num_seats = src->num_seats; - dst->num_peeps = src->num_peeps; - dst->next_free_seat = src->next_free_seat; - dst->restraints_position = src->restraints_position; - dst->crash_x = src->crash_x; - dst->sound2_flags = src->sound2_flags; - dst->spin_sprite = src->spin_sprite; - dst->sound1_id = static_cast(src->sound1_id); - dst->sound1_volume = src->sound1_volume; - dst->sound2_id = static_cast(src->sound2_id); - dst->sound2_volume = src->sound2_volume; - dst->sound_vector_factor = src->sound_vector_factor; - dst->time_waiting = src->time_waiting; - dst->speed = src->speed; - dst->powered_acceleration = src->powered_acceleration; - dst->dodgems_collision_direction = src->dodgems_collision_direction; - dst->animation_frame = src->animation_frame; - dst->var_C8 = src->var_C8; - dst->var_CA = src->var_CA; - dst->scream_sound_id = static_cast(src->scream_sound_id); - dst->TrackSubposition = static_cast(src->TrackSubposition); - dst->var_CE = src->var_CE; - dst->var_CF = src->var_CF; - dst->lost_time_out = src->lost_time_out; - dst->vertical_drop_countdown = src->vertical_drop_countdown; - dst->var_D3 = src->var_D3; - dst->mini_golf_current_animation = src->mini_golf_current_animation; - dst->mini_golf_flags = src->mini_golf_flags; - dst->ride_subtype = OpenRCT2EntryIndexToRCTEntryIndex(src->ride_subtype); - dst->colours_extended = src->colours_extended; - dst->seat_rotation = src->seat_rotation; - dst->target_seat_rotation = src->target_seat_rotation; + cdst->num_seats = src->num_seats; + cdst->num_peeps = src->num_peeps; + cdst->next_free_seat = src->next_free_seat; + cdst->restraints_position = src->restraints_position; + cdst->crash_x = src->crash_x; + cdst->sound2_flags = src->sound2_flags; + cdst->spin_sprite = src->spin_sprite; + cdst->sound1_id = static_cast(src->sound1_id); + cdst->sound1_volume = src->sound1_volume; + cdst->sound2_id = static_cast(src->sound2_id); + cdst->sound2_volume = src->sound2_volume; + cdst->sound_vector_factor = src->sound_vector_factor; + cdst->time_waiting = src->time_waiting; + cdst->speed = src->speed; + cdst->powered_acceleration = src->powered_acceleration; + cdst->dodgems_collision_direction = src->dodgems_collision_direction; + cdst->animation_frame = src->animation_frame; + cdst->var_C8 = src->var_C8; + cdst->var_CA = src->var_CA; + cdst->scream_sound_id = static_cast(src->scream_sound_id); + cdst->TrackSubposition = static_cast(src->TrackSubposition); + cdst->var_CE = src->var_CE; + cdst->var_CF = src->var_CF; + cdst->lost_time_out = src->lost_time_out; + cdst->vertical_drop_countdown = src->vertical_drop_countdown; + cdst->var_D3 = src->var_D3; + cdst->mini_golf_current_animation = src->mini_golf_current_animation; + cdst->mini_golf_flags = src->mini_golf_flags; + cdst->ride_subtype = OpenRCT2EntryIndexToRCTEntryIndex(src->ride_subtype); + cdst->colours_extended = src->colours_extended; + cdst->seat_rotation = src->seat_rotation; + cdst->target_seat_rotation = src->target_seat_rotation; +} + +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Guest* src) +{ + ExportSpritePeep(static_cast(dst), src); +} +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Staff* src) +{ + ExportSpritePeep(static_cast(dst), src); } void S6Exporter::ExportSpritePeep(RCT2SpritePeep* dst, const Peep* src) @@ -1322,104 +1290,177 @@ void S6Exporter::ExportSpritePeep(RCT2SpritePeep* dst, const Peep* src) dst->item_standard_flags = static_cast(src->GetItemFlags()); } -void S6Exporter::ExportSpriteMisc(RCT12SpriteBase* cdst, const MiscEntity* csrc) +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const SteamParticle* src) { - ExportSpriteCommonProperties(cdst, csrc); - cdst->type = EnumValue(csrc->SubType); - switch (csrc->SubType) - { - case MiscEntityType::SteamParticle: - { - auto src = static_cast(csrc); - auto dst = static_cast(cdst); - dst->time_to_move = src->time_to_move; - dst->frame = src->frame; - break; - } - case MiscEntityType::MoneyEffect: - { - auto src = static_cast(csrc); - auto dst = static_cast(cdst); - dst->move_delay = src->MoveDelay; - dst->num_movements = src->NumMovements; - dst->vertical = src->Vertical; - dst->value = src->Value; - dst->offset_x = src->OffsetX; - dst->wiggle = src->Wiggle; - break; - } - case MiscEntityType::CrashedVehicleParticle: - { - auto src = static_cast(csrc); - auto dst = static_cast(cdst); - dst->frame = src->frame; - dst->time_to_live = src->time_to_live; - dst->frame = src->frame; - dst->colour[0] = src->colour[0]; - dst->colour[1] = src->colour[1]; - dst->crashed_sprite_base = src->crashed_sprite_base; - dst->velocity_x = src->velocity_x; - dst->velocity_y = src->velocity_y; - dst->velocity_z = src->velocity_z; - dst->acceleration_x = src->acceleration_x; - dst->acceleration_y = src->acceleration_y; - dst->acceleration_z = src->acceleration_z; - break; - } - case MiscEntityType::ExplosionCloud: - case MiscEntityType::ExplosionFlare: - case MiscEntityType::CrashSplash: - { - auto src = static_cast(csrc); - auto dst = static_cast(cdst); - dst->frame = src->frame; - break; - } - case MiscEntityType::JumpingFountainWater: - case MiscEntityType::JumpingFountainSnow: - { - auto* src = static_cast(csrc); - auto* dst = static_cast(cdst); - dst->num_ticks_alive = src->NumTicksAlive; - dst->frame = src->frame; - dst->fountain_flags = src->FountainFlags; - dst->target_x = src->TargetX; - dst->target_y = src->TargetY; - dst->target_y = src->TargetY; - dst->iteration = src->Iteration; - break; - } - case MiscEntityType::Balloon: - { - auto src = static_cast(csrc); - auto dst = static_cast(cdst); - dst->popped = src->popped; - dst->time_to_move = src->time_to_move; - dst->frame = src->frame; - dst->colour = src->colour; - break; - } - case MiscEntityType::Duck: - { - auto src = static_cast(csrc); - auto dst = static_cast(cdst); - dst->frame = src->frame; - dst->target_x = src->target_x; - dst->target_y = src->target_y; - dst->state = EnumValue(src->state); - break; - } - default: - log_warning("Misc. sprite type %d can not be exported.", cdst->type); - break; - } + auto* cdst = static_cast(dst); + ExportSpriteCommonProperties(dst, src); + cdst->type = EnumValue(src->SubType); + cdst->time_to_move = src->time_to_move; + cdst->frame = src->frame; +} +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const MoneyEffect* src) +{ + auto* cdst = static_cast(dst); + ExportSpriteCommonProperties(dst, src); + cdst->type = EnumValue(src->SubType); + cdst->move_delay = src->MoveDelay; + cdst->num_movements = src->NumMovements; + cdst->vertical = src->Vertical; + cdst->value = src->Value; + cdst->offset_x = src->OffsetX; + cdst->wiggle = src->Wiggle; +} +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const VehicleCrashParticle* src) +{ + auto* cdst = static_cast(dst); + ExportSpriteCommonProperties(dst, src); + cdst->type = EnumValue(src->SubType); + cdst->frame = src->frame; + cdst->time_to_live = src->time_to_live; + cdst->frame = src->frame; + cdst->colour[0] = src->colour[0]; + cdst->colour[1] = src->colour[1]; + cdst->crashed_sprite_base = src->crashed_sprite_base; + cdst->velocity_x = src->velocity_x; + cdst->velocity_y = src->velocity_y; + cdst->velocity_z = src->velocity_z; + cdst->acceleration_x = src->acceleration_x; + cdst->acceleration_y = src->acceleration_y; + cdst->acceleration_z = src->acceleration_z; +} +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const JumpingFountain* src) +{ + auto* cdst = static_cast(dst); + ExportSpriteCommonProperties(dst, src); + cdst->type = EnumValue(src->SubType); + cdst->num_ticks_alive = src->NumTicksAlive; + cdst->frame = src->frame; + cdst->fountain_flags = src->FountainFlags; + cdst->target_x = src->TargetX; + cdst->target_y = src->TargetY; + cdst->target_y = src->TargetY; + cdst->iteration = src->Iteration; +} +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Balloon* src) +{ + auto* cdst = static_cast(dst); + ExportSpriteCommonProperties(dst, src); + cdst->type = EnumValue(src->SubType); + cdst->popped = src->popped; + cdst->time_to_move = src->time_to_move; + cdst->frame = src->frame; + cdst->colour = src->colour; +} +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Duck* src) +{ + auto* cdst = static_cast(dst); + ExportSpriteCommonProperties(dst, src); + cdst->type = EnumValue(src->SubType); + cdst->frame = src->frame; + cdst->target_x = src->target_x; + cdst->target_y = src->target_y; + cdst->state = EnumValue(src->state); +} +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const ExplosionCloud* src) +{ + auto* cdst = static_cast(dst); + ExportSpriteCommonProperties(dst, src); + cdst->type = EnumValue(src->SubType); + cdst->frame = src->frame; +} +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const ExplosionFlare* src) +{ + auto* cdst = static_cast(dst); + ExportSpriteCommonProperties(dst, src); + cdst->type = EnumValue(src->SubType); + cdst->frame = src->frame; +} +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const CrashSplashParticle* src) +{ + auto* cdst = static_cast(dst); + ExportSpriteCommonProperties(dst, src); + cdst->type = EnumValue(src->SubType); + cdst->frame = src->frame; } -void S6Exporter::ExportSpriteLitter(RCT12SpriteLitter* dst, const Litter* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Litter* src) { + auto* cdst = static_cast(dst); ExportSpriteCommonProperties(dst, src); - dst->type = EnumValue(src->SubType); - dst->creationTick = src->creationTick; + cdst->type = EnumValue(src->SubType); + cdst->creationTick = src->creationTick; +} + +void S6Exporter::ExportEntitys() +{ + // Clear everything to free + for (int32_t i = 0; i < RCT2_MAX_SPRITES; i++) + { + auto& entity = _s6.sprites[i]; + std::memset(&entity, 0, sizeof(entity)); + entity.unknown.sprite_identifier = SpriteIdentifier::Null; + entity.unknown.sprite_index = i; + entity.unknown.linked_list_type_offset = RCT12EntityLinkListOffset::Free; + } + + for (auto* entity : EntityList(EntityListId::Peep)) + { + ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + } + for (auto* entity : EntityList(EntityListId::Peep)) + { + ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + } + for (auto* entity : EntityList(EntityListId::Vehicle)) + { + ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + } + for (auto* entity : EntityList(EntityListId::TrainHead)) + { + ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + } + for (auto* entity : EntityList(EntityListId::Litter)) + { + ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + } + for (auto* entity : EntityList(EntityListId::Misc)) + { + ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + } + for (auto* entity : EntityList(EntityListId::Misc)) + { + ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + } + for (auto* entity : EntityList(EntityListId::Misc)) + { + ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + } + for (auto* entity : EntityList(EntityListId::Misc)) + { + ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + } + for (auto* entity : EntityList(EntityListId::Misc)) + { + ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + } + for (auto* entity : EntityList(EntityListId::Misc)) + { + ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + } + for (auto* entity : EntityList(EntityListId::Misc)) + { + ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + } + for (auto* entity : EntityList(EntityListId::Misc)) + { + ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + } + for (auto* entity : EntityList(EntityListId::Misc)) + { + ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + } + + RebuildEntityLinks(); } void S6Exporter::ExportBanners() diff --git a/src/openrct2/rct2/S6Exporter.h b/src/openrct2/rct2/S6Exporter.h index fc1d2e0155..16dd711d21 100644 --- a/src/openrct2/rct2/S6Exporter.h +++ b/src/openrct2/rct2/S6Exporter.h @@ -46,13 +46,10 @@ public: void ExportParkName(); void ExportRides(); void ExportRide(rct2_ride* dst, const Ride* src); - void ExportSprites(); - void ExportSprite(RCT2Sprite* dst, const rct_sprite* src); + void ExportEntitys(); + template void ExportEntity(RCT12SpriteBase* dst, const T* src); void ExportSpriteCommonProperties(RCT12SpriteBase* dst, const SpriteBase* src); - void ExportSpriteVehicle(RCT2SpriteVehicle* dst, const Vehicle* src); void ExportSpritePeep(RCT2SpritePeep* dst, const Peep* src); - void ExportSpriteMisc(RCT12SpriteBase* dst, const MiscEntity* src); - void ExportSpriteLitter(RCT12SpriteLitter* dst, const Litter* src); private: rct_s6_data _s6{}; From 48e4a24feea1122e89b16efe9ba734a340857b59 Mon Sep 17 00:00:00 2001 From: duncanspumpkin Date: Sun, 21 Feb 2021 18:06:49 +0000 Subject: [PATCH 2/5] Update naming --- src/openrct2/rct2/S6Exporter.cpp | 36 ++++++++++++++++---------------- src/openrct2/rct2/S6Exporter.h | 6 +++--- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/openrct2/rct2/S6Exporter.cpp b/src/openrct2/rct2/S6Exporter.cpp index cb801a3be4..92e01f994a 100644 --- a/src/openrct2/rct2/S6Exporter.cpp +++ b/src/openrct2/rct2/S6Exporter.cpp @@ -188,7 +188,7 @@ void S6Exporter::Export() // Map elements must be reorganised prior to saving otherwise save may be invalid map_reorganise_elements(); ExportTileElements(); - ExportEntitys(); + ExportEntities(); ExportParkName(); _s6.initial_cash = gInitialCash; @@ -1020,7 +1020,7 @@ constexpr RCT12EntityLinkListOffset GetRCT2LinkListOffset(const SpriteBase* src) return output; } -void S6Exporter::ExportSpriteCommonProperties(RCT12SpriteBase* dst, const SpriteBase* src) +void S6Exporter::ExportEntityCommonProperties(RCT12SpriteBase* dst, const SpriteBase* src) { dst->sprite_identifier = src->sprite_identifier; dst->linked_list_type_offset = GetRCT2LinkListOffset(src); @@ -1045,7 +1045,7 @@ template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Vehicle* sr auto* cdst = static_cast(dst); const auto* ride = src->GetRide(); - ExportSpriteCommonProperties(dst, static_cast(src)); + ExportEntityCommonProperties(dst, static_cast(src)); cdst->type = EnumValue(src->SubType); cdst->vehicle_sprite_type = src->vehicle_sprite_type; cdst->bank_rotation = src->bank_rotation; @@ -1131,16 +1131,16 @@ template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Vehicle* sr template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Guest* src) { - ExportSpritePeep(static_cast(dst), src); + ExportEntityPeep(static_cast(dst), src); } template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Staff* src) { - ExportSpritePeep(static_cast(dst), src); + ExportEntityPeep(static_cast(dst), src); } -void S6Exporter::ExportSpritePeep(RCT2SpritePeep* dst, const Peep* src) +void S6Exporter::ExportEntityPeep(RCT2SpritePeep* dst, const Peep* src) { - ExportSpriteCommonProperties(dst, static_cast(src)); + ExportEntityCommonProperties(dst, static_cast(src)); auto generateName = true; if (src->Name != nullptr) @@ -1293,7 +1293,7 @@ void S6Exporter::ExportSpritePeep(RCT2SpritePeep* dst, const Peep* src) template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const SteamParticle* src) { auto* cdst = static_cast(dst); - ExportSpriteCommonProperties(dst, src); + ExportEntityCommonProperties(dst, src); cdst->type = EnumValue(src->SubType); cdst->time_to_move = src->time_to_move; cdst->frame = src->frame; @@ -1301,7 +1301,7 @@ template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const SteamPartic template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const MoneyEffect* src) { auto* cdst = static_cast(dst); - ExportSpriteCommonProperties(dst, src); + ExportEntityCommonProperties(dst, src); cdst->type = EnumValue(src->SubType); cdst->move_delay = src->MoveDelay; cdst->num_movements = src->NumMovements; @@ -1313,7 +1313,7 @@ template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const MoneyEffect template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const VehicleCrashParticle* src) { auto* cdst = static_cast(dst); - ExportSpriteCommonProperties(dst, src); + ExportEntityCommonProperties(dst, src); cdst->type = EnumValue(src->SubType); cdst->frame = src->frame; cdst->time_to_live = src->time_to_live; @@ -1331,7 +1331,7 @@ template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const VehicleCras template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const JumpingFountain* src) { auto* cdst = static_cast(dst); - ExportSpriteCommonProperties(dst, src); + ExportEntityCommonProperties(dst, src); cdst->type = EnumValue(src->SubType); cdst->num_ticks_alive = src->NumTicksAlive; cdst->frame = src->frame; @@ -1344,7 +1344,7 @@ template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const JumpingFoun template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Balloon* src) { auto* cdst = static_cast(dst); - ExportSpriteCommonProperties(dst, src); + ExportEntityCommonProperties(dst, src); cdst->type = EnumValue(src->SubType); cdst->popped = src->popped; cdst->time_to_move = src->time_to_move; @@ -1354,7 +1354,7 @@ template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Balloon* sr template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Duck* src) { auto* cdst = static_cast(dst); - ExportSpriteCommonProperties(dst, src); + ExportEntityCommonProperties(dst, src); cdst->type = EnumValue(src->SubType); cdst->frame = src->frame; cdst->target_x = src->target_x; @@ -1364,21 +1364,21 @@ template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Duck* src) template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const ExplosionCloud* src) { auto* cdst = static_cast(dst); - ExportSpriteCommonProperties(dst, src); + ExportEntityCommonProperties(dst, src); cdst->type = EnumValue(src->SubType); cdst->frame = src->frame; } template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const ExplosionFlare* src) { auto* cdst = static_cast(dst); - ExportSpriteCommonProperties(dst, src); + ExportEntityCommonProperties(dst, src); cdst->type = EnumValue(src->SubType); cdst->frame = src->frame; } template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const CrashSplashParticle* src) { auto* cdst = static_cast(dst); - ExportSpriteCommonProperties(dst, src); + ExportEntityCommonProperties(dst, src); cdst->type = EnumValue(src->SubType); cdst->frame = src->frame; } @@ -1386,12 +1386,12 @@ template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const CrashSplash template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Litter* src) { auto* cdst = static_cast(dst); - ExportSpriteCommonProperties(dst, src); + ExportEntityCommonProperties(dst, src); cdst->type = EnumValue(src->SubType); cdst->creationTick = src->creationTick; } -void S6Exporter::ExportEntitys() +void S6Exporter::ExportEntities() { // Clear everything to free for (int32_t i = 0; i < RCT2_MAX_SPRITES; i++) diff --git a/src/openrct2/rct2/S6Exporter.h b/src/openrct2/rct2/S6Exporter.h index 16dd711d21..e08cc88fdb 100644 --- a/src/openrct2/rct2/S6Exporter.h +++ b/src/openrct2/rct2/S6Exporter.h @@ -46,10 +46,10 @@ public: void ExportParkName(); void ExportRides(); void ExportRide(rct2_ride* dst, const Ride* src); - void ExportEntitys(); + void ExportEntities(); template void ExportEntity(RCT12SpriteBase* dst, const T* src); - void ExportSpriteCommonProperties(RCT12SpriteBase* dst, const SpriteBase* src); - void ExportSpritePeep(RCT2SpritePeep* dst, const Peep* src); + void ExportEntityCommonProperties(RCT12SpriteBase* dst, const SpriteBase* src); + void ExportEntityPeep(RCT2SpritePeep* dst, const Peep* src); private: rct_s6_data _s6{}; From 9da6ba01bb7148c07b6cae91e9aefe36f3b9e73d Mon Sep 17 00:00:00 2001 From: duncanspumpkin Date: Wed, 24 Feb 2021 07:50:37 +0000 Subject: [PATCH 3/5] Rename variables --- src/openrct2/rct2/S6Exporter.cpp | 302 +++++++++++++++---------------- 1 file changed, 151 insertions(+), 151 deletions(-) diff --git a/src/openrct2/rct2/S6Exporter.cpp b/src/openrct2/rct2/S6Exporter.cpp index 92e01f994a..578036c0c4 100644 --- a/src/openrct2/rct2/S6Exporter.cpp +++ b/src/openrct2/rct2/S6Exporter.cpp @@ -1040,107 +1040,107 @@ void S6Exporter::ExportEntityCommonProperties(RCT12SpriteBase* dst, const Sprite dst->sprite_direction = src->sprite_direction; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Vehicle* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const Vehicle* src) { - auto* cdst = static_cast(dst); + auto* dst = static_cast(baseDst); const auto* ride = src->GetRide(); - ExportEntityCommonProperties(dst, static_cast(src)); - cdst->type = EnumValue(src->SubType); - cdst->vehicle_sprite_type = src->vehicle_sprite_type; - cdst->bank_rotation = src->bank_rotation; - cdst->remaining_distance = src->remaining_distance; - cdst->velocity = src->velocity; - cdst->acceleration = src->acceleration; - cdst->ride = src->ride; - cdst->vehicle_type = src->vehicle_type; - cdst->colours = src->colours; - cdst->track_progress = src->track_progress; + ExportEntityCommonProperties(baseDst, src); + dst->type = EnumValue(src->SubType); + dst->vehicle_sprite_type = src->vehicle_sprite_type; + dst->bank_rotation = src->bank_rotation; + dst->remaining_distance = src->remaining_distance; + dst->velocity = src->velocity; + dst->acceleration = src->acceleration; + dst->ride = src->ride; + dst->vehicle_type = src->vehicle_type; + dst->colours = src->colours; + dst->track_progress = src->track_progress; if (ride != nullptr && ride->mode == RideMode::BoatHire && src->status == Vehicle::Status::TravellingBoat) { if (src->BoatLocation.isNull()) { - cdst->boat_location.setNull(); + dst->boat_location.setNull(); } else { - cdst->boat_location = { static_cast(src->BoatLocation.x / COORDS_XY_STEP), - static_cast(src->BoatLocation.y / COORDS_XY_STEP) }; + dst->boat_location = { static_cast(src->BoatLocation.x / COORDS_XY_STEP), + static_cast(src->BoatLocation.y / COORDS_XY_STEP) }; } } else { auto trackType = OpenRCT2TrackTypeToRCT2(src->GetTrackType()); // Track direction and type are in the same field - cdst->SetTrackType(trackType); - cdst->SetTrackDirection(src->GetTrackDirection()); + dst->SetTrackType(trackType); + dst->SetTrackDirection(src->GetTrackDirection()); } - cdst->track_x = src->TrackLocation.x; - cdst->track_y = src->TrackLocation.y; - cdst->track_z = src->TrackLocation.z; - cdst->next_vehicle_on_train = src->next_vehicle_on_train; - cdst->prev_vehicle_on_ride = src->prev_vehicle_on_ride; - cdst->next_vehicle_on_ride = src->next_vehicle_on_ride; - cdst->var_44 = src->var_44; - cdst->mass = src->mass; - cdst->update_flags = src->update_flags; - cdst->SwingSprite = src->SwingSprite; - cdst->current_station = src->current_station; - cdst->current_time = src->current_time; - cdst->crash_z = src->crash_z; - cdst->status = static_cast(src->status); - cdst->sub_state = src->sub_state; + dst->track_x = src->TrackLocation.x; + dst->track_y = src->TrackLocation.y; + dst->track_z = src->TrackLocation.z; + dst->next_vehicle_on_train = src->next_vehicle_on_train; + dst->prev_vehicle_on_ride = src->prev_vehicle_on_ride; + dst->next_vehicle_on_ride = src->next_vehicle_on_ride; + dst->var_44 = src->var_44; + dst->mass = src->mass; + dst->update_flags = src->update_flags; + dst->SwingSprite = src->SwingSprite; + dst->current_station = src->current_station; + dst->current_time = src->current_time; + dst->crash_z = src->crash_z; + dst->status = static_cast(src->status); + dst->sub_state = src->sub_state; for (size_t i = 0; i < std::size(src->peep); i++) { - cdst->peep[i] = src->peep[i]; - cdst->peep_tshirt_colours[i] = src->peep_tshirt_colours[i]; + dst->peep[i] = src->peep[i]; + dst->peep_tshirt_colours[i] = src->peep_tshirt_colours[i]; } - cdst->num_seats = src->num_seats; - cdst->num_peeps = src->num_peeps; - cdst->next_free_seat = src->next_free_seat; - cdst->restraints_position = src->restraints_position; - cdst->crash_x = src->crash_x; - cdst->sound2_flags = src->sound2_flags; - cdst->spin_sprite = src->spin_sprite; - cdst->sound1_id = static_cast(src->sound1_id); - cdst->sound1_volume = src->sound1_volume; - cdst->sound2_id = static_cast(src->sound2_id); - cdst->sound2_volume = src->sound2_volume; - cdst->sound_vector_factor = src->sound_vector_factor; - cdst->time_waiting = src->time_waiting; - cdst->speed = src->speed; - cdst->powered_acceleration = src->powered_acceleration; - cdst->dodgems_collision_direction = src->dodgems_collision_direction; - cdst->animation_frame = src->animation_frame; - cdst->var_C8 = src->var_C8; - cdst->var_CA = src->var_CA; - cdst->scream_sound_id = static_cast(src->scream_sound_id); - cdst->TrackSubposition = static_cast(src->TrackSubposition); - cdst->var_CE = src->var_CE; - cdst->var_CF = src->var_CF; - cdst->lost_time_out = src->lost_time_out; - cdst->vertical_drop_countdown = src->vertical_drop_countdown; - cdst->var_D3 = src->var_D3; - cdst->mini_golf_current_animation = src->mini_golf_current_animation; - cdst->mini_golf_flags = src->mini_golf_flags; - cdst->ride_subtype = OpenRCT2EntryIndexToRCTEntryIndex(src->ride_subtype); - cdst->colours_extended = src->colours_extended; - cdst->seat_rotation = src->seat_rotation; - cdst->target_seat_rotation = src->target_seat_rotation; + dst->num_seats = src->num_seats; + dst->num_peeps = src->num_peeps; + dst->next_free_seat = src->next_free_seat; + dst->restraints_position = src->restraints_position; + dst->crash_x = src->crash_x; + dst->sound2_flags = src->sound2_flags; + dst->spin_sprite = src->spin_sprite; + dst->sound1_id = static_cast(src->sound1_id); + dst->sound1_volume = src->sound1_volume; + dst->sound2_id = static_cast(src->sound2_id); + dst->sound2_volume = src->sound2_volume; + dst->sound_vector_factor = src->sound_vector_factor; + dst->time_waiting = src->time_waiting; + dst->speed = src->speed; + dst->powered_acceleration = src->powered_acceleration; + dst->dodgems_collision_direction = src->dodgems_collision_direction; + dst->animation_frame = src->animation_frame; + dst->var_C8 = src->var_C8; + dst->var_CA = src->var_CA; + dst->scream_sound_id = static_cast(src->scream_sound_id); + dst->TrackSubposition = static_cast(src->TrackSubposition); + dst->var_CE = src->var_CE; + dst->var_CF = src->var_CF; + dst->lost_time_out = src->lost_time_out; + dst->vertical_drop_countdown = src->vertical_drop_countdown; + dst->var_D3 = src->var_D3; + dst->mini_golf_current_animation = src->mini_golf_current_animation; + dst->mini_golf_flags = src->mini_golf_flags; + dst->ride_subtype = OpenRCT2EntryIndexToRCTEntryIndex(src->ride_subtype); + dst->colours_extended = src->colours_extended; + dst->seat_rotation = src->seat_rotation; + dst->target_seat_rotation = src->target_seat_rotation; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Guest* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const Guest* src) { - ExportEntityPeep(static_cast(dst), src); + ExportEntityPeep(static_cast(baseDst), src); } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Staff* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const Staff* src) { - ExportEntityPeep(static_cast(dst), src); + ExportEntityPeep(static_cast(baseDst), src); } void S6Exporter::ExportEntityPeep(RCT2SpritePeep* dst, const Peep* src) { - ExportEntityCommonProperties(dst, static_cast(src)); + ExportEntityCommonProperties(dst, src); auto generateName = true; if (src->Name != nullptr) @@ -1290,105 +1290,105 @@ void S6Exporter::ExportEntityPeep(RCT2SpritePeep* dst, const Peep* src) dst->item_standard_flags = static_cast(src->GetItemFlags()); } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const SteamParticle* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const SteamParticle* src) { - auto* cdst = static_cast(dst); - ExportEntityCommonProperties(dst, src); - cdst->type = EnumValue(src->SubType); - cdst->time_to_move = src->time_to_move; - cdst->frame = src->frame; + auto* dst = static_cast(baseDst); + ExportEntityCommonProperties(baseDst, src); + dst->type = EnumValue(src->SubType); + dst->time_to_move = src->time_to_move; + dst->frame = src->frame; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const MoneyEffect* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const MoneyEffect* src) { - auto* cdst = static_cast(dst); - ExportEntityCommonProperties(dst, src); - cdst->type = EnumValue(src->SubType); - cdst->move_delay = src->MoveDelay; - cdst->num_movements = src->NumMovements; - cdst->vertical = src->Vertical; - cdst->value = src->Value; - cdst->offset_x = src->OffsetX; - cdst->wiggle = src->Wiggle; + auto* dst = static_cast(baseDst); + ExportEntityCommonProperties(baseDst, src); + dst->type = EnumValue(src->SubType); + dst->move_delay = src->MoveDelay; + dst->num_movements = src->NumMovements; + dst->vertical = src->Vertical; + dst->value = src->Value; + dst->offset_x = src->OffsetX; + dst->wiggle = src->Wiggle; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const VehicleCrashParticle* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const VehicleCrashParticle* src) { - auto* cdst = static_cast(dst); - ExportEntityCommonProperties(dst, src); - cdst->type = EnumValue(src->SubType); - cdst->frame = src->frame; - cdst->time_to_live = src->time_to_live; - cdst->frame = src->frame; - cdst->colour[0] = src->colour[0]; - cdst->colour[1] = src->colour[1]; - cdst->crashed_sprite_base = src->crashed_sprite_base; - cdst->velocity_x = src->velocity_x; - cdst->velocity_y = src->velocity_y; - cdst->velocity_z = src->velocity_z; - cdst->acceleration_x = src->acceleration_x; - cdst->acceleration_y = src->acceleration_y; - cdst->acceleration_z = src->acceleration_z; + auto* dst = static_cast(baseDst); + ExportEntityCommonProperties(baseDst, src); + dst->type = EnumValue(src->SubType); + dst->frame = src->frame; + dst->time_to_live = src->time_to_live; + dst->frame = src->frame; + dst->colour[0] = src->colour[0]; + dst->colour[1] = src->colour[1]; + dst->crashed_sprite_base = src->crashed_sprite_base; + dst->velocity_x = src->velocity_x; + dst->velocity_y = src->velocity_y; + dst->velocity_z = src->velocity_z; + dst->acceleration_x = src->acceleration_x; + dst->acceleration_y = src->acceleration_y; + dst->acceleration_z = src->acceleration_z; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const JumpingFountain* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const JumpingFountain* src) { - auto* cdst = static_cast(dst); - ExportEntityCommonProperties(dst, src); - cdst->type = EnumValue(src->SubType); - cdst->num_ticks_alive = src->NumTicksAlive; - cdst->frame = src->frame; - cdst->fountain_flags = src->FountainFlags; - cdst->target_x = src->TargetX; - cdst->target_y = src->TargetY; - cdst->target_y = src->TargetY; - cdst->iteration = src->Iteration; + auto* dst = static_cast(baseDst); + ExportEntityCommonProperties(baseDst, src); + dst->type = EnumValue(src->SubType); + dst->num_ticks_alive = src->NumTicksAlive; + dst->frame = src->frame; + dst->fountain_flags = src->FountainFlags; + dst->target_x = src->TargetX; + dst->target_y = src->TargetY; + dst->target_y = src->TargetY; + dst->iteration = src->Iteration; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Balloon* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const Balloon* src) { - auto* cdst = static_cast(dst); - ExportEntityCommonProperties(dst, src); - cdst->type = EnumValue(src->SubType); - cdst->popped = src->popped; - cdst->time_to_move = src->time_to_move; - cdst->frame = src->frame; - cdst->colour = src->colour; + auto* dst = static_cast(baseDst); + ExportEntityCommonProperties(baseDst, src); + dst->type = EnumValue(src->SubType); + dst->popped = src->popped; + dst->time_to_move = src->time_to_move; + dst->frame = src->frame; + dst->colour = src->colour; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Duck* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const Duck* src) { - auto* cdst = static_cast(dst); - ExportEntityCommonProperties(dst, src); - cdst->type = EnumValue(src->SubType); - cdst->frame = src->frame; - cdst->target_x = src->target_x; - cdst->target_y = src->target_y; - cdst->state = EnumValue(src->state); + auto* dst = static_cast(baseDst); + ExportEntityCommonProperties(baseDst, src); + dst->type = EnumValue(src->SubType); + dst->frame = src->frame; + dst->target_x = src->target_x; + dst->target_y = src->target_y; + dst->state = EnumValue(src->state); } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const ExplosionCloud* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const ExplosionCloud* src) { - auto* cdst = static_cast(dst); - ExportEntityCommonProperties(dst, src); - cdst->type = EnumValue(src->SubType); - cdst->frame = src->frame; + auto* dst = static_cast(baseDst); + ExportEntityCommonProperties(baseDst, src); + dst->type = EnumValue(src->SubType); + dst->frame = src->frame; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const ExplosionFlare* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const ExplosionFlare* src) { - auto* cdst = static_cast(dst); - ExportEntityCommonProperties(dst, src); - cdst->type = EnumValue(src->SubType); - cdst->frame = src->frame; + auto* dst = static_cast(baseDst); + ExportEntityCommonProperties(baseDst, src); + dst->type = EnumValue(src->SubType); + dst->frame = src->frame; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const CrashSplashParticle* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const CrashSplashParticle* src) { - auto* cdst = static_cast(dst); - ExportEntityCommonProperties(dst, src); - cdst->type = EnumValue(src->SubType); - cdst->frame = src->frame; + auto* dst = static_cast(baseDst); + ExportEntityCommonProperties(baseDst, src); + dst->type = EnumValue(src->SubType); + dst->frame = src->frame; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* dst, const Litter* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const Litter* src) { - auto* cdst = static_cast(dst); - ExportEntityCommonProperties(dst, src); - cdst->type = EnumValue(src->SubType); - cdst->creationTick = src->creationTick; + auto* dst = static_cast(baseDst); + ExportEntityCommonProperties(baseDst, src); + dst->type = EnumValue(src->SubType); + dst->creationTick = src->creationTick; } void S6Exporter::ExportEntities() From 11da10971f9020379250b1fc0df3ca65dc06c8ef Mon Sep 17 00:00:00 2001 From: duncanspumpkin Date: Wed, 24 Feb 2021 08:00:38 +0000 Subject: [PATCH 4/5] Reorg again to reduce casts --- src/openrct2/rct2/S6Exporter.cpp | 91 ++++++++++++++------------------ src/openrct2/rct2/S6Exporter.h | 2 +- 2 files changed, 41 insertions(+), 52 deletions(-) diff --git a/src/openrct2/rct2/S6Exporter.cpp b/src/openrct2/rct2/S6Exporter.cpp index 578036c0c4..125c620f25 100644 --- a/src/openrct2/rct2/S6Exporter.cpp +++ b/src/openrct2/rct2/S6Exporter.cpp @@ -1040,12 +1040,11 @@ void S6Exporter::ExportEntityCommonProperties(RCT12SpriteBase* dst, const Sprite dst->sprite_direction = src->sprite_direction; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const Vehicle* src) +template<> void S6Exporter::ExportEntity(RCT2SpriteVehicle* dst, const Vehicle* src) { - auto* dst = static_cast(baseDst); const auto* ride = src->GetRide(); - ExportEntityCommonProperties(baseDst, src); + ExportEntityCommonProperties(dst, src); dst->type = EnumValue(src->SubType); dst->vehicle_sprite_type = src->vehicle_sprite_type; dst->bank_rotation = src->bank_rotation; @@ -1129,13 +1128,13 @@ template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const Vehicle dst->target_seat_rotation = src->target_seat_rotation; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const Guest* src) +template<> void S6Exporter::ExportEntity(RCT2SpritePeep* dst, const Guest* src) { - ExportEntityPeep(static_cast(baseDst), src); + ExportEntityPeep(dst, src); } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const Staff* src) +template<> void S6Exporter::ExportEntity(RCT2SpritePeep* dst, const Staff* src) { - ExportEntityPeep(static_cast(baseDst), src); + ExportEntityPeep(dst, src); } void S6Exporter::ExportEntityPeep(RCT2SpritePeep* dst, const Peep* src) @@ -1290,18 +1289,16 @@ void S6Exporter::ExportEntityPeep(RCT2SpritePeep* dst, const Peep* src) dst->item_standard_flags = static_cast(src->GetItemFlags()); } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const SteamParticle* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteSteamParticle* dst, const SteamParticle* src) { - auto* dst = static_cast(baseDst); - ExportEntityCommonProperties(baseDst, src); + ExportEntityCommonProperties(dst, src); dst->type = EnumValue(src->SubType); dst->time_to_move = src->time_to_move; dst->frame = src->frame; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const MoneyEffect* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteMoneyEffect* dst, const MoneyEffect* src) { - auto* dst = static_cast(baseDst); - ExportEntityCommonProperties(baseDst, src); + ExportEntityCommonProperties(dst, src); dst->type = EnumValue(src->SubType); dst->move_delay = src->MoveDelay; dst->num_movements = src->NumMovements; @@ -1310,10 +1307,9 @@ template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const MoneyEf dst->offset_x = src->OffsetX; dst->wiggle = src->Wiggle; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const VehicleCrashParticle* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteCrashedVehicleParticle* dst, const VehicleCrashParticle* src) { - auto* dst = static_cast(baseDst); - ExportEntityCommonProperties(baseDst, src); + ExportEntityCommonProperties(dst, src); dst->type = EnumValue(src->SubType); dst->frame = src->frame; dst->time_to_live = src->time_to_live; @@ -1328,10 +1324,9 @@ template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const Vehicle dst->acceleration_y = src->acceleration_y; dst->acceleration_z = src->acceleration_z; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const JumpingFountain* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteJumpingFountain* dst, const JumpingFountain* src) { - auto* dst = static_cast(baseDst); - ExportEntityCommonProperties(baseDst, src); + ExportEntityCommonProperties(dst, src); dst->type = EnumValue(src->SubType); dst->num_ticks_alive = src->NumTicksAlive; dst->frame = src->frame; @@ -1341,52 +1336,46 @@ template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const Jumping dst->target_y = src->TargetY; dst->iteration = src->Iteration; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const Balloon* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteBalloon* dst, const Balloon* src) { - auto* dst = static_cast(baseDst); - ExportEntityCommonProperties(baseDst, src); + ExportEntityCommonProperties(dst, src); dst->type = EnumValue(src->SubType); dst->popped = src->popped; dst->time_to_move = src->time_to_move; dst->frame = src->frame; dst->colour = src->colour; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const Duck* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteDuck* dst, const Duck* src) { - auto* dst = static_cast(baseDst); - ExportEntityCommonProperties(baseDst, src); + ExportEntityCommonProperties(dst, src); dst->type = EnumValue(src->SubType); dst->frame = src->frame; dst->target_x = src->target_x; dst->target_y = src->target_y; dst->state = EnumValue(src->state); } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const ExplosionCloud* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteParticle* dst, const ExplosionCloud* src) { - auto* dst = static_cast(baseDst); - ExportEntityCommonProperties(baseDst, src); + ExportEntityCommonProperties(dst, src); dst->type = EnumValue(src->SubType); dst->frame = src->frame; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const ExplosionFlare* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteParticle* dst, const ExplosionFlare* src) { - auto* dst = static_cast(baseDst); - ExportEntityCommonProperties(baseDst, src); + ExportEntityCommonProperties(dst, src); dst->type = EnumValue(src->SubType); dst->frame = src->frame; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const CrashSplashParticle* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteParticle* dst, const CrashSplashParticle* src) { - auto* dst = static_cast(baseDst); - ExportEntityCommonProperties(baseDst, src); + ExportEntityCommonProperties(dst, src); dst->type = EnumValue(src->SubType); dst->frame = src->frame; } -template<> void S6Exporter::ExportEntity(RCT12SpriteBase* baseDst, const Litter* src) +template<> void S6Exporter::ExportEntity(RCT12SpriteLitter* dst, const Litter* src) { - auto* dst = static_cast(baseDst); - ExportEntityCommonProperties(baseDst, src); + ExportEntityCommonProperties(dst, src); dst->type = EnumValue(src->SubType); dst->creationTick = src->creationTick; } @@ -1405,59 +1394,59 @@ void S6Exporter::ExportEntities() for (auto* entity : EntityList(EntityListId::Peep)) { - ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); } for (auto* entity : EntityList(EntityListId::Peep)) { - ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); } for (auto* entity : EntityList(EntityListId::Vehicle)) { - ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); } for (auto* entity : EntityList(EntityListId::TrainHead)) { - ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); } for (auto* entity : EntityList(EntityListId::Litter)) { - ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); } for (auto* entity : EntityList(EntityListId::Misc)) { - ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); } for (auto* entity : EntityList(EntityListId::Misc)) { - ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); } for (auto* entity : EntityList(EntityListId::Misc)) { - ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); } for (auto* entity : EntityList(EntityListId::Misc)) { - ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); } for (auto* entity : EntityList(EntityListId::Misc)) { - ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); } for (auto* entity : EntityList(EntityListId::Misc)) { - ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); } for (auto* entity : EntityList(EntityListId::Misc)) { - ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); } for (auto* entity : EntityList(EntityListId::Misc)) { - ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); } for (auto* entity : EntityList(EntityListId::Misc)) { - ExportEntity(&_s6.sprites[entity->sprite_index].unknown, entity); + ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); } RebuildEntityLinks(); diff --git a/src/openrct2/rct2/S6Exporter.h b/src/openrct2/rct2/S6Exporter.h index e08cc88fdb..175994f5f1 100644 --- a/src/openrct2/rct2/S6Exporter.h +++ b/src/openrct2/rct2/S6Exporter.h @@ -47,7 +47,7 @@ public: void ExportRides(); void ExportRide(rct2_ride* dst, const Ride* src); void ExportEntities(); - template void ExportEntity(RCT12SpriteBase* dst, const T* src); + template void ExportEntity(RCT12_T* dst, const OpenRCT2_T* src); void ExportEntityCommonProperties(RCT12SpriteBase* dst, const SpriteBase* src); void ExportEntityPeep(RCT2SpritePeep* dst, const Peep* src); From d2fdf0917bbe65c2fcb174879f151e8703a9da7d Mon Sep 17 00:00:00 2001 From: duncanspumpkin Date: Wed, 24 Feb 2021 08:08:59 +0000 Subject: [PATCH 5/5] Remove static casts and use union --- src/openrct2/rct2/RCT2.h | 1 + src/openrct2/rct2/S6Exporter.cpp | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/openrct2/rct2/RCT2.h b/src/openrct2/rct2/RCT2.h index c8786193c9..1179f96b4a 100644 --- a/src/openrct2/rct2/RCT2.h +++ b/src/openrct2/rct2/RCT2.h @@ -761,6 +761,7 @@ public: RCT12SpriteCrashedVehicleParticle crashed_vehicle_particle; RCT12SpriteCrashSplash crash_splash; RCT12SpriteSteamParticle steam_particle; + RCT12SpriteParticle misc_particle; }; assert_struct_size(RCT2Sprite, 0x100); diff --git a/src/openrct2/rct2/S6Exporter.cpp b/src/openrct2/rct2/S6Exporter.cpp index 125c620f25..40c6a0b5fc 100644 --- a/src/openrct2/rct2/S6Exporter.cpp +++ b/src/openrct2/rct2/S6Exporter.cpp @@ -1394,59 +1394,59 @@ void S6Exporter::ExportEntities() for (auto* entity : EntityList(EntityListId::Peep)) { - ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); + ExportEntity(&_s6.sprites[entity->sprite_index].peep, entity); } for (auto* entity : EntityList(EntityListId::Peep)) { - ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); + ExportEntity(&_s6.sprites[entity->sprite_index].peep, entity); } for (auto* entity : EntityList(EntityListId::Vehicle)) { - ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); + ExportEntity(&_s6.sprites[entity->sprite_index].vehicle, entity); } for (auto* entity : EntityList(EntityListId::TrainHead)) { - ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); + ExportEntity(&_s6.sprites[entity->sprite_index].vehicle, entity); } for (auto* entity : EntityList(EntityListId::Litter)) { - ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); + ExportEntity(&_s6.sprites[entity->sprite_index].litter, entity); } for (auto* entity : EntityList(EntityListId::Misc)) { - ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); + ExportEntity(&_s6.sprites[entity->sprite_index].duck, entity); } for (auto* entity : EntityList(EntityListId::Misc)) { - ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); + ExportEntity(&_s6.sprites[entity->sprite_index].steam_particle, entity); } for (auto* entity : EntityList(EntityListId::Misc)) { - ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); + ExportEntity(&_s6.sprites[entity->sprite_index].money_effect, entity); } for (auto* entity : EntityList(EntityListId::Misc)) { - ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); + ExportEntity(&_s6.sprites[entity->sprite_index].crashed_vehicle_particle, entity); } for (auto* entity : EntityList(EntityListId::Misc)) { - ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); + ExportEntity(&_s6.sprites[entity->sprite_index].jumping_fountain, entity); } for (auto* entity : EntityList(EntityListId::Misc)) { - ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); + ExportEntity(&_s6.sprites[entity->sprite_index].balloon, entity); } for (auto* entity : EntityList(EntityListId::Misc)) { - ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); + ExportEntity(&_s6.sprites[entity->sprite_index].misc_particle, entity); } for (auto* entity : EntityList(EntityListId::Misc)) { - ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); + ExportEntity(&_s6.sprites[entity->sprite_index].misc_particle, entity); } for (auto* entity : EntityList(EntityListId::Misc)) { - ExportEntity(static_cast(&_s6.sprites[entity->sprite_index].unknown), entity); + ExportEntity(&_s6.sprites[entity->sprite_index].misc_particle, entity); } RebuildEntityLinks();