From 07995f8925f2c81522b390b5e86228d1e4f73b51 Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Tue, 7 Mar 2023 20:39:41 -0500 Subject: [PATCH] Fixed some decoration icons being darkened at night in outdoor shops. --- include/event_object_movement.h | 1 + src/decoration.c | 2 +- src/event_object_movement.c | 28 +++++++++++++++++++++++++--- src/shop.c | 2 +- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 4a4904f626..683160820a 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -131,6 +131,7 @@ struct ObjectEvent * GetFollowerObject(void); u8 GetDirectionToFace(s16, s16, s16, s16); void UpdateLightSprite(struct Sprite *); void TrySpawnObjectEvents(s16 cameraX, s16 cameraY); +u8 CreateObjectGraphicsSpriteWithTag(u16 graphicsId, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u16 paletteTag); u8 CreateObjectGraphicsSprite(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority); u8 TrySpawnObjectEvent(u8 localId, u8 mapNum, u8 mapGroup); u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 elevation); diff --git a/src/decoration.c b/src/decoration.c index 6d95cfbdc3..d33ded155f 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -2110,7 +2110,7 @@ static u8 AddDecorationIconObjectFromObjectEvent(u16 tilesTag, u16 paletteTag, u } else { - spriteId = CreateObjectGraphicsSprite(sPlaceDecorationGraphicsDataBuffer.decoration->tiles[0], SpriteCallbackDummy, 0, 0, 1); + spriteId = CreateObjectGraphicsSpriteWithTag(sPlaceDecorationGraphicsDataBuffer.decoration->tiles[0], SpriteCallbackDummy, 0, 0, 1, paletteTag); } return spriteId; } diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 49523559dd..6d956d1da5 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1607,8 +1607,20 @@ static void MakeSpriteTemplateFromObjectEventTemplate(struct ObjectEventTemplate CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(objectEventTemplate->graphicsId, objectEventTemplate->movementType, spriteTemplate, subspriteTables); } +// Like LoadObjectEventPalette, but overwrites the palette tag that is loaded +static u8 LoadObjectEventPaletteWithTag(u16 paletteTag, u16 overTag) { + u32 i = FindObjectEventPaletteIndexByTag(paletteTag); + struct SpritePalette spritePalette; + if (i == 0xFF) + return i; + spritePalette = sObjectEventSpritePalettes[i]; + if (overTag != TAG_NONE) + spritePalette.tag = overTag; // overwrite palette tag + return LoadSpritePaletteIfTagExists(&spritePalette); +} + // Used to create a sprite using a graphicsId associated with object events. -u8 CreateObjectGraphicsSprite(u16 graphicsId, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority) +u8 CreateObjectGraphicsSpriteWithTag(u16 graphicsId, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u16 paletteTag) { struct SpriteTemplate *spriteTemplate; const struct SubspriteTable *subspriteTables; @@ -1637,8 +1649,14 @@ u8 CreateObjectGraphicsSprite(u16 graphicsId, void (*callback)(struct Sprite *), const struct CompressedSpritePalette *spritePalette = &(shiny ? gMonShinyPaletteTable : gMonPaletteTable)[species]; paletteNum = LoadDynamicFollowerPalette(species, form, shiny); spriteTemplate->paletteTag = spritePalette->tag; - } else if (spriteTemplate->paletteTag != TAG_NONE) - LoadObjectEventPalette(spriteTemplate->paletteTag); + } else if (spriteTemplate->paletteTag != TAG_NONE) { + if (paletteTag == TAG_NONE) + LoadObjectEventPalette(spriteTemplate->paletteTag); + else { + LoadObjectEventPaletteWithTag(spriteTemplate->paletteTag, paletteTag); + spriteTemplate->paletteTag = paletteTag; + } + } spriteId = CreateSprite(spriteTemplate, x, y, subpriority); Free(spriteTemplate); @@ -1652,6 +1670,10 @@ u8 CreateObjectGraphicsSprite(u16 graphicsId, void (*callback)(struct Sprite *), return spriteId; } +u8 CreateObjectGraphicsSprite(u16 graphicsId, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority) { + return CreateObjectGraphicsSpriteWithTag(graphicsId, callback, x, y, subpriority, TAG_NONE); +} + #define sVirtualObjId data[0] #define sVirtualObjElev data[1] diff --git a/src/shop.c b/src/shop.c index 222ee181b7..23699f07ba 100644 --- a/src/shop.c +++ b/src/shop.c @@ -41,7 +41,7 @@ #include "constants/songs.h" #define TAG_SCROLL_ARROW 2100 -#define TAG_ITEM_ICON_BASE 2110 +#define TAG_ITEM_ICON_BASE 9110 // immune to time blending #define MAX_ITEMS_SHOWN 8