From 9cbdae2ef175661cbc134b846b6b29383d48e37f Mon Sep 17 00:00:00 2001 From: Duncan Date: Wed, 9 Dec 2020 09:21:23 +0000 Subject: [PATCH] Peep::ItemFlags merging (#13511) * Merge standard and extra item flags for peeps * Update replays --- CMakeLists.txt | 4 +-- openrct2.proj | 4 +-- src/openrct2/GameStateSnapshots.cpp | 3 +- src/openrct2/peep/Peep.cpp | 43 +++++------------------------ src/openrct2/peep/Peep.h | 7 ++--- src/openrct2/rct1/RCT1.h | 4 +++ src/openrct2/rct1/S4Importer.cpp | 2 +- src/openrct2/rct2/RCT2.h | 4 +++ src/openrct2/rct2/S6Exporter.cpp | 4 +-- src/openrct2/rct2/S6Importer.cpp | 3 +- test/tests/S6ImportExportTests.cpp | 3 +- 11 files changed, 28 insertions(+), 53 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d1318d8d7e..3755180a93 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,8 +44,8 @@ set(TITLE_SEQUENCE_SHA1 "304d13a126c15bf2c86ff13b81a2f2cc1856ac8d") set(OBJECTS_URL "https://github.com/OpenRCT2/objects/releases/download/v1.0.20/objects.zip") set(OBJECTS_SHA1 "151424d24b1d49a167932b58319bedaa6ec368e9") -set(REPLAYS_URL "https://github.com/OpenRCT2/replays/releases/download/v0.0.22/replays.zip") -set(REPLAYS_SHA1 "7591db0a3842a7ac44fcbfbff9a573c9cb3ddc56") +set(REPLAYS_URL "https://github.com/OpenRCT2/replays/releases/download/v0.0.23/replays.zip") +set(REPLAYS_SHA1 "AC67B93731B6246A31D9A8B01A6CA12AE98AE0D1") option(FORCE32 "Force 32-bit build. It will add `-m32` to compiler flags.") option(WITH_TESTS "Build tests") diff --git a/openrct2.proj b/openrct2.proj index 099197a8fa..d63e4ba8d0 100644 --- a/openrct2.proj +++ b/openrct2.proj @@ -48,8 +48,8 @@ 304d13a126c15bf2c86ff13b81a2f2cc1856ac8d https://github.com/OpenRCT2/objects/releases/download/v1.0.20/objects.zip 151424d24b1d49a167932b58319bedaa6ec368e9 - https://github.com/OpenRCT2/replays/releases/download/v0.0.22/replays.zip - 7591db0a3842a7ac44fcbfbff9a573c9cb3ddc56 + https://github.com/OpenRCT2/replays/releases/download/v0.0.23/replays.zip + AC67B93731B6246A31D9A8B01A6CA12AE98AE0D1 diff --git a/src/openrct2/GameStateSnapshots.cpp b/src/openrct2/GameStateSnapshots.cpp index b655e03d5c..761f7e8234 100644 --- a/src/openrct2/GameStateSnapshots.cpp +++ b/src/openrct2/GameStateSnapshots.cpp @@ -257,7 +257,7 @@ struct GameStateSnapshots final : public IGameStateSnapshots { COMPARE_FIELD(Peep, RideTypesBeenOn[i]); } - COMPARE_FIELD(Peep, ItemExtraFlags); + COMPARE_FIELD(Peep, ItemFlags); COMPARE_FIELD(Peep, Photo2RideRef); COMPARE_FIELD(Peep, Photo3RideRef); COMPARE_FIELD(Peep, Photo4RideRef); @@ -324,7 +324,6 @@ struct GameStateSnapshots final : public IGameStateSnapshots COMPARE_FIELD(Peep, HatColour); COMPARE_FIELD(Peep, FavouriteRide); COMPARE_FIELD(Peep, FavouriteRideRating); - COMPARE_FIELD(Peep, ItemStandardFlags); } void CompareSpriteDataVehicle( diff --git a/src/openrct2/peep/Peep.cpp b/src/openrct2/peep/Peep.cpp index cb2e04833b..77bed4202c 100644 --- a/src/openrct2/peep/Peep.cpp +++ b/src/openrct2/peep/Peep.cpp @@ -3329,58 +3329,29 @@ void Peep::RemoveFromRide() StateReset(); } -uint64_t Peep::GetItemFlags(bool bit32Flag, bool ExtraItem) const +uint64_t Peep::GetItemFlags() const { - if (bit32Flag) - { - if (ExtraItem) - return ItemExtraFlags; - return ItemStandardFlags; - } - uint64_t ItemFlag = ItemExtraFlags; - return ItemStandardFlags | (ItemFlag << 32); + return ItemFlags; } -void Peep::SetItemFlags(uint32_t ItemFlag, bool ExtraItem) +void Peep::SetItemFlags(uint64_t itemFlags) { - if (ExtraItem) - { - ItemExtraFlags = ItemFlag; - return; - } - ItemStandardFlags = ItemFlag; + ItemFlags = itemFlags; } void Peep::RemoveAllItems() { - ItemStandardFlags = 0; - ItemExtraFlags = 0; + ItemFlags = 0; } void Peep::RemoveItem(ShopItem item) { - // TODO: Join up standard and extra flags into a `uint64_t` to remove this if for the extra flags - if (EnumValue(item) > EnumValue(ShopItem::Admission)) - { - ItemExtraFlags &= ~(1 << (EnumValue(item) - EnumValue(ShopItem::Photo2))); - } - else - { - ItemStandardFlags &= ~EnumToFlag(item); - } + ItemFlags &= ~EnumToFlag(item); } void Peep::GiveItem(ShopItem item) { - // TODO: Join up standard and extra flags into a `uint64_t` to remove this if for the extra flags - if (EnumValue(item) > EnumValue(ShopItem::Admission)) - { - ItemExtraFlags |= (1 << (EnumValue(item) - EnumValue(ShopItem::Photo2))); - } - else - { - ItemStandardFlags |= EnumToFlag(item); - } + ItemFlags |= EnumToFlag(item); } bool Peep::HasItem(ShopItem peepItem) const diff --git a/src/openrct2/peep/Peep.h b/src/openrct2/peep/Peep.h index 987341a30c..6e2e8ac23c 100644 --- a/src/openrct2/peep/Peep.h +++ b/src/openrct2/peep/Peep.h @@ -597,7 +597,6 @@ struct Peep : SpriteBase uint8_t WindowInvalidateFlags; money16 PaidOnDrink; uint8_t RideTypesBeenOn[16]; - uint32_t ItemExtraFlags; ride_id_t Photo2RideRef; ride_id_t Photo3RideRef; ride_id_t Photo4RideRef; @@ -725,7 +724,7 @@ struct Peep : SpriteBase uint8_t HatColour; ride_id_t FavouriteRide; uint8_t FavouriteRideRating; - uint32_t ItemStandardFlags; + uint64_t ItemFlags; public: // Peep Guest* AsGuest(); @@ -760,8 +759,8 @@ public: // Peep // Reset the peep's stored goal, which means they will forget any stored pathfinding history // on the next peep_pathfind_choose_direction call. void ResetPathfindGoal(); - uint64_t GetItemFlags(bool bit32Flag = false, bool ExtraItem = false) const; - void SetItemFlags(uint32_t ItemFlag, bool ExtraItem = false); + uint64_t GetItemFlags() const; + void SetItemFlags(uint64_t itemFlags); void RemoveAllItems(); void RemoveItem(ShopItem item); void GiveItem(ShopItem item); diff --git a/src/openrct2/rct1/RCT1.h b/src/openrct2/rct1/RCT1.h index cdb8a82543..a03d67b15e 100644 --- a/src/openrct2/rct1/RCT1.h +++ b/src/openrct2/rct1/RCT1.h @@ -462,6 +462,10 @@ struct rct1_peep : RCT12SpriteBase uint8_t favourite_ride_rating; // 0xFA uint8_t pad_FB; uint32_t item_standard_flags; // 0xFC + uint64_t GetItemFlags() const + { + return item_standard_flags; + } }; assert_struct_size(rct1_peep, 0x100); diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index 26ac64659a..fd43a2d939 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -1568,7 +1568,7 @@ private: dst->FavouriteRideRating = 0; } - dst->SetItemFlags(src->item_standard_flags, 0); + dst->SetItemFlags(src->GetItemFlags()); if (dst->AssignedPeepType == PeepType::Guest) { diff --git a/src/openrct2/rct2/RCT2.h b/src/openrct2/rct2/RCT2.h index 31030edf0e..1017e5a3b1 100644 --- a/src/openrct2/rct2/RCT2.h +++ b/src/openrct2/rct2/RCT2.h @@ -726,6 +726,10 @@ struct RCT2SpritePeep : RCT12SpriteBase uint8_t favourite_ride_rating; // 0xFA uint8_t pad_FB; uint32_t item_standard_flags; // 0xFC + uint64_t GetItemFlags() const + { + return item_standard_flags | (static_cast(item_extra_flags) << 32); + } }; assert_struct_size(RCT2SpritePeep, 0x100); diff --git a/src/openrct2/rct2/S6Exporter.cpp b/src/openrct2/rct2/S6Exporter.cpp index b4ea21065f..5ee52da09b 100644 --- a/src/openrct2/rct2/S6Exporter.cpp +++ b/src/openrct2/rct2/S6Exporter.cpp @@ -1173,7 +1173,7 @@ void S6Exporter::ExportSpritePeep(RCT2SpritePeep* dst, const Peep* src) { dst->ride_types_been_on[i] = src->RideTypesBeenOn[i]; } - dst->item_extra_flags = src->GetItemFlags(true, true); + dst->item_extra_flags = static_cast(src->GetItemFlags() >> 32); dst->photo2_ride_ref = OpenRCT2RideIdToRCT12RideId(src->Photo2RideRef); dst->photo3_ride_ref = OpenRCT2RideIdToRCT12RideId(src->Photo3RideRef); dst->photo4_ride_ref = OpenRCT2RideIdToRCT12RideId(src->Photo4RideRef); @@ -1245,7 +1245,7 @@ void S6Exporter::ExportSpritePeep(RCT2SpritePeep* dst, const Peep* src) dst->hat_colour = src->HatColour; dst->favourite_ride = OpenRCT2RideIdToRCT12RideId(src->FavouriteRide); dst->favourite_ride_rating = src->FavouriteRideRating; - dst->item_standard_flags = src->GetItemFlags(true); + dst->item_standard_flags = static_cast(src->GetItemFlags()); } void S6Exporter::ExportSpriteMisc(RCT12SpriteBase* cdst, const SpriteBase* csrc) diff --git a/src/openrct2/rct2/S6Importer.cpp b/src/openrct2/rct2/S6Importer.cpp index b130415bef..6a79af0e95 100644 --- a/src/openrct2/rct2/S6Importer.cpp +++ b/src/openrct2/rct2/S6Importer.cpp @@ -1461,7 +1461,7 @@ public: { dst->RideTypesBeenOn[i] = src->ride_types_been_on[i]; } - dst->SetItemFlags(src->item_extra_flags, 1); + dst->SetItemFlags(src->GetItemFlags()); dst->Photo2RideRef = RCT12RideIdToOpenRCT2RideId(src->photo2_ride_ref); dst->Photo3RideRef = RCT12RideIdToOpenRCT2RideId(src->photo3_ride_ref); dst->Photo4RideRef = RCT12RideIdToOpenRCT2RideId(src->photo4_ride_ref); @@ -1533,7 +1533,6 @@ public: dst->HatColour = src->hat_colour; dst->FavouriteRide = RCT12RideIdToOpenRCT2RideId(src->favourite_ride); dst->FavouriteRideRating = src->favourite_ride_rating; - dst->SetItemFlags(src->item_standard_flags, 0); } void ImportSpriteMisc(SpriteBase* cdst, const RCT12SpriteBase* csrc) diff --git a/test/tests/S6ImportExportTests.cpp b/test/tests/S6ImportExportTests.cpp index 39196d1103..0da56c0bea 100644 --- a/test/tests/S6ImportExportTests.cpp +++ b/test/tests/S6ImportExportTests.cpp @@ -191,7 +191,7 @@ static void CompareSpriteDataPeep(const Peep& left, const Peep& right) { COMPARE_FIELD(RideTypesBeenOn[i]); } - COMPARE_FIELD(ItemExtraFlags); + COMPARE_FIELD(ItemFlags); COMPARE_FIELD(Photo2RideRef); COMPARE_FIELD(Photo3RideRef); COMPARE_FIELD(Photo4RideRef); @@ -267,7 +267,6 @@ static void CompareSpriteDataPeep(const Peep& left, const Peep& right) COMPARE_FIELD(HatColour); COMPARE_FIELD(FavouriteRide); COMPARE_FIELD(FavouriteRideRating); - COMPARE_FIELD(ItemStandardFlags); } static void CompareSpriteDataVehicle(const Vehicle& left, const Vehicle& right)