From 17e1fab0f2138b371a322ab04fb5730ee39289dd Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Tue, 28 Jan 2025 16:31:33 +0100 Subject: [PATCH] Fix hats/balloons/umbrellas not showing in guest notifications (#23728) --- src/openrct2-ui/windows/GameBottomToolbar.cpp | 50 ++++++++++++------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/src/openrct2-ui/windows/GameBottomToolbar.cpp b/src/openrct2-ui/windows/GameBottomToolbar.cpp index d471f45557..275207f882 100644 --- a/src/openrct2-ui/windows/GameBottomToolbar.cpp +++ b/src/openrct2-ui/windows/GameBottomToolbar.cpp @@ -260,8 +260,8 @@ namespace OpenRCT2::Ui::Windows if (newsItem->HasButton()) break; - DrawPixelInfo cliped_dpi; - if (!ClipDrawPixelInfo(cliped_dpi, dpi, screenCoords + ScreenCoordsXY{ 1, 1 }, 22, 22)) + DrawPixelInfo clipped_dpi; + if (!ClipDrawPixelInfo(clipped_dpi, dpi, screenCoords + ScreenCoordsXY{ 1, 1 }, 22, 22)) { break; } @@ -285,26 +285,38 @@ namespace OpenRCT2::Ui::Windows image_id_base++; auto image_id = ImageId(image_id_base, peep->TshirtColour, peep->TrousersColour); - GfxDrawSprite(cliped_dpi, image_id, clipCoords); + GfxDrawSprite(clipped_dpi, image_id, clipCoords); auto* guest = peep->As(); - if (guest != nullptr) + if (guest == nullptr) + return; + + // There are only 6 walking frames available for each item, + // as well as 1 sprite for sitting and 1 for standing still. + auto itemFrame = (frame_no / 4) % 6; + + if (guest->AnimationGroup == PeepAnimationGroup::Hat) { - if (image_id_base >= kPeepSpriteBalloonStateWatchRideId - && image_id_base < kPeepSpriteBalloonStateSittingIdleId + 4) - { - GfxDrawSprite(cliped_dpi, ImageId(image_id_base + 32, guest->BalloonColour), clipCoords); - } - if (image_id_base >= kPeepSpriteUmbrellaStateWalkingId - && image_id_base < kPeepSpriteUmbrellaStateSittingIdleId + 4) - { - GfxDrawSprite(cliped_dpi, ImageId(image_id_base + 32, guest->UmbrellaColour), clipCoords); - } - if (image_id_base >= kPeepSpriteHatStateWatchRideId - && image_id_base < kPeepSpriteHatStateSittingIdleId + 4) - { - GfxDrawSprite(cliped_dpi, ImageId(image_id_base + 32, guest->HatColour), clipCoords); - } + auto itemOffset = kPeepSpriteHatItemStart + 1; + auto imageId = ImageId(itemOffset + itemFrame * 4, guest->HatColour); + GfxDrawSprite(clipped_dpi, imageId, clipCoords); + return; + } + + if (guest->AnimationGroup == PeepAnimationGroup::Balloon) + { + auto itemOffset = kPeepSpriteBalloonItemStart + 1; + auto imageId = ImageId(itemOffset + itemFrame * 4, guest->BalloonColour); + GfxDrawSprite(clipped_dpi, imageId, clipCoords); + return; + } + + if (guest->AnimationGroup == PeepAnimationGroup::Umbrella) + { + auto itemOffset = kPeepSpriteUmbrellaItemStart + 1; + auto imageId = ImageId(itemOffset + itemFrame * 4, guest->UmbrellaColour); + GfxDrawSprite(clipped_dpi, imageId, clipCoords); + return; } break; }