From 3e3229190728b2d7ac502d3851b9c9bb5d36e4bb Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Sun, 8 Sep 2024 17:05:17 -0400 Subject: [PATCH] fix: fixed shadows not spawning across maps for OWs with the same `localId` --- src/event_object_movement.c | 4 ++-- src/field_effect_helpers.c | 12 ++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 878aeac807..f8dd625410 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -2441,7 +2441,7 @@ static void SpawnLightSprite(s16 x, s16 y, s16 camX, s16 camY, u32 lightType) { sprite->centerToCornerVecX = -(32 >> 1); sprite->centerToCornerVecY = -(32 >> 1); sprite->oam.priority = 1; - sprite->oam.objMode = 1; // BLEND + sprite->oam.objMode = ST_OAM_OBJ_BLEND; sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL; sprite->x += 8; sprite->y += 22 + sprite->centerToCornerVecY; @@ -2451,7 +2451,7 @@ static void SpawnLightSprite(s16 x, s16 y, s16 camX, s16 camY, u32 lightType) { sprite->centerToCornerVecY = -(16 >> 1); sprite->oam.priority = 2; sprite->subpriority = 0xFF; - sprite->oam.objMode = 1; // BLEND + sprite->oam.objMode = ST_OAM_OBJ_BLEND; } } diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 70f0db7f1b..606f3b1f1a 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -56,8 +56,8 @@ u32 FldEff_Shadow(void); void SetUpShadow(struct ObjectEvent *objectEvent, struct Sprite *sprite) { gFieldEffectArguments[0] = objectEvent->localId; - gFieldEffectArguments[1] = gSaveBlock1Ptr->location.mapNum; - gFieldEffectArguments[2] = gSaveBlock1Ptr->location.mapGroup; + gFieldEffectArguments[1] = objectEvent->mapNum; + gFieldEffectArguments[2] = objectEvent->mapGroup; FldEff_Shadow(); } @@ -329,7 +329,11 @@ u32 FldEff_Shadow(void) s32 i; for (i = MAX_SPRITES - 1; i > -1; i--) { // Search backwards, because of CreateSpriteAtEnd // Return early if a shadow sprite already exists - if (gSprites[i].data[0] == gFieldEffectArguments[0] && gSprites[i].callback == UpdateShadowFieldEffect) + if (gSprites[i].callback == UpdateShadowFieldEffect && + gSprites[i].sLocalId == gFieldEffectArguments[0] && + gSprites[i].sMapNum == gFieldEffectArguments[1] && + gSprites[i].sMapGroup == gFieldEffectArguments[2] + ) return 0; } objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); @@ -341,7 +345,7 @@ u32 FldEff_Shadow(void) if (spriteId != MAX_SPRITES) { // SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 12)); - gSprites[spriteId].oam.objMode = 1; // BLEND + gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; gSprites[spriteId].coordOffsetEnabled = TRUE; gSprites[spriteId].sLocalId = gFieldEffectArguments[0]; gSprites[spriteId].sMapNum = gFieldEffectArguments[1];