Peep::ItemFlags merging (#13511)

* Merge standard and extra item flags for peeps

* Update replays
This commit is contained in:
Duncan 2020-12-09 09:21:23 +00:00 committed by GitHub
parent c12e1634fc
commit 9cbdae2ef1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 28 additions and 53 deletions

View File

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

View File

@ -48,8 +48,8 @@
<TitleSequencesSha1>304d13a126c15bf2c86ff13b81a2f2cc1856ac8d</TitleSequencesSha1>
<ObjectsUrl>https://github.com/OpenRCT2/objects/releases/download/v1.0.20/objects.zip</ObjectsUrl>
<ObjectsSha1>151424d24b1d49a167932b58319bedaa6ec368e9</ObjectsSha1>
<ReplaysUrl>https://github.com/OpenRCT2/replays/releases/download/v0.0.22/replays.zip</ReplaysUrl>
<ReplaysSha1>7591db0a3842a7ac44fcbfbff9a573c9cb3ddc56</ReplaysSha1>
<ReplaysUrl>https://github.com/OpenRCT2/replays/releases/download/v0.0.23/replays.zip</ReplaysUrl>
<ReplaysSha1>AC67B93731B6246A31D9A8B01A6CA12AE98AE0D1</ReplaysSha1>
</PropertyGroup>
<ItemGroup>

View File

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

View File

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

View File

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

View File

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

View File

@ -1568,7 +1568,7 @@ private:
dst->FavouriteRideRating = 0;
}
dst->SetItemFlags(src->item_standard_flags, 0);
dst->SetItemFlags(src->GetItemFlags());
if (dst->AssignedPeepType == PeepType::Guest)
{

View File

@ -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<uint64_t>(item_extra_flags) << 32);
}
};
assert_struct_size(RCT2SpritePeep, 0x100);

View File

@ -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<uint32_t>(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<uint32_t>(src->GetItemFlags());
}
void S6Exporter::ExportSpriteMisc(RCT12SpriteBase* cdst, const SpriteBase* csrc)

View File

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

View File

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