From 13565fc02323d9c74d47b67f5c43c29d59a19668 Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Wed, 27 Apr 2022 20:00:02 -0400 Subject: [PATCH] Fixed `removeobject` clearing the palettes of unloaded dummy sprites. --- src/event_object_movement.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 67f0762a1e..733c2a7b2b 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1389,8 +1389,16 @@ static void RemoveObjectEventInternal(struct ObjectEvent *objectEvent) image.size = GetObjectEventGraphicsInfo(objectEvent->graphicsId)->size; gSprites[objectEvent->spriteId].images = ℑ paletteNum = gSprites[objectEvent->spriteId].oam.paletteNum; - DestroySprite(&gSprites[objectEvent->spriteId]); - FieldEffectFreePaletteIfUnused(paletteNum); + // It's possible that this function is called while the sprite pointed to `== sDummySprite`, i.e during map resume; + // In this case, don't free the palette as `paletteNum` is likely blank dummy data + if (!gSprites[objectEvent->spriteId].inUse && + !gSprites[objectEvent->spriteId].oam.paletteNum && + gSprites[objectEvent->spriteId].callback == SpriteCallbackDummy) { + DestroySprite(&gSprites[objectEvent->spriteId]); + } else { + DestroySprite(&gSprites[objectEvent->spriteId]); + FieldEffectFreePaletteIfUnused(paletteNum); + } } void RemoveAllObjectEventsExceptPlayer(void)