fix: fixed shadows not spawning across maps for OWs with the same localId

This commit is contained in:
Ariel A 2024-09-08 17:05:17 -04:00
parent d3a4839808
commit 3e32291907
2 changed files with 10 additions and 6 deletions

View File

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

View File

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