diff options
| author | Eblo <7004497+Eblo@users.noreply.github.com> | 2025-11-03 23:07:43 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-03 21:07:43 -0700 |
| commit | 1c97d8f5dac4595b56dbe7d24c174c18caca9608 (patch) | |
| tree | a40679d7b932c2f858320027c50167cff808c166 /mm | |
| parent | db078cd82022249c643e00c32994977c486ed6ba (diff) | |
Fix UB in Item_DropCollectible hook usage (#1314)
* Fix UB in Item_DropCollectible hook usage
* Clang format
* Again
Diffstat (limited to 'mm')
| -rw-r--r-- | mm/src/code/z_en_item00.c | 102 |
1 files changed, 51 insertions, 51 deletions
diff --git a/mm/src/code/z_en_item00.c b/mm/src/code/z_en_item00.c index 12233a36f..3af9d8133 100644 --- a/mm/src/code/z_en_item00.c +++ b/mm/src/code/z_en_item00.c @@ -918,9 +918,6 @@ s16 func_800A7650(s16 dropId) { } Actor* Item_DropCollectible(PlayState* play, Vec3f* spawnPos, u32 params) { - if (!(GameInteractor_Should(VB_ENEMY_DROP_COLLECTIBLE, true, *spawnPos))) { - return; - } s32 pad; Actor* spawnedActor = NULL; @@ -932,61 +929,64 @@ Actor* Item_DropCollectible(PlayState* play, Vec3f* spawnPos, u32 params) { s32 paramFF = params & 0xFF; s32 i; - params &= 0x7FFF; - newParamFF = params & 0xFF; - - if (paramFF == ITEM00_3_HEARTS) { - for (i = 0; i < 3; i++) { - spawnedActor = Item_DropCollectible(play, spawnPos, param7F00 | ITEM00_RECOVERY_HEART | param8000); - } - } else if (paramFF == ITEM00_MUSHROOM_CLOUD) { - param7F00 >>= 8; - if (!Flags_GetCollectible(play, param7F00)) { - Actor_Spawn(&play->actorCtx, play, ACTOR_OBJ_KINOKO, spawnPos->x, spawnPos->y, spawnPos->z, 0, 0, 0, - param7F00); - } - } else if (((paramFF == ITEM00_FLEXIBLE) || (newParamFF == ITEM00_BIG_FAIRY)) && (param10000 == 0)) { + if ((GameInteractor_Should(VB_ENEMY_DROP_COLLECTIBLE, true, *spawnPos))) { + params &= 0x7FFF; newParamFF = params & 0xFF; - if (newParamFF == ITEM00_FLEXIBLE) { - spawnedActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f, - spawnPos->z, 0, 0, 0, FAIRY_PARAMS(FAIRY_TYPE_2, true, param7F00 >> 8)); - if (!Flags_GetCollectible(play, (param7F00 >> 8) & 0x7F)) { - SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY); + + if (paramFF == ITEM00_3_HEARTS) { + for (i = 0; i < 3; i++) { + spawnedActor = Item_DropCollectible(play, spawnPos, param7F00 | ITEM00_RECOVERY_HEART | param8000); } - } else { - spawnedActor = Actor_Spawn( - &play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, 0, - STRAY_FAIRY_PARAMS((param7F00 >> 8) & 0x7F, STRAY_FAIRY_AREA_CLOCK_TOWN, STRAY_FAIRY_TYPE_COLLECTIBLE)); - if (param20000 == 0) { + } else if (paramFF == ITEM00_MUSHROOM_CLOUD) { + param7F00 >>= 8; + if (!Flags_GetCollectible(play, param7F00)) { + Actor_Spawn(&play->actorCtx, play, ACTOR_OBJ_KINOKO, spawnPos->x, spawnPos->y, spawnPos->z, 0, 0, 0, + param7F00); + } + } else if (((paramFF == ITEM00_FLEXIBLE) || (newParamFF == ITEM00_BIG_FAIRY)) && (param10000 == 0)) { + newParamFF = params & 0xFF; + if (newParamFF == ITEM00_FLEXIBLE) { + spawnedActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f, + spawnPos->z, 0, 0, 0, FAIRY_PARAMS(FAIRY_TYPE_2, true, param7F00 >> 8)); if (!Flags_GetCollectible(play, (param7F00 >> 8) & 0x7F)) { SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY); } - } - } - } else { - if (param8000 == 0) { - params = func_800A7650(newParamFF); - } - if ((s32)params != ITEM00_NO_DROP) { - spawnedActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ITEM00, spawnPos->x, spawnPos->y, spawnPos->z, 0, - 0, 0, (s32)params | param8000 | param7F00); - if ((spawnedActor != NULL) && (param8000 == 0)) { - if (param10000 == 0) { - spawnedActor->velocity.y = 8.0f; - } else { - spawnedActor->velocity.y = -2.0f; + } else { + spawnedActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f, + spawnPos->z, 0, 0, 0, + STRAY_FAIRY_PARAMS((param7F00 >> 8) & 0x7F, STRAY_FAIRY_AREA_CLOCK_TOWN, + STRAY_FAIRY_TYPE_COLLECTIBLE)); + if (param20000 == 0) { + if (!Flags_GetCollectible(play, (param7F00 >> 8) & 0x7F)) { + SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY); + } } - spawnedActor->speed = 2.0f; - spawnedActor->gravity = -0.9f; - spawnedActor->world.rot.y = Rand_CenteredFloat(0x10000); - Actor_SetScale(spawnedActor, 0.0f); - ((EnItem00*)spawnedActor)->actionFunc = func_800A6780; - ((EnItem00*)spawnedActor)->unk152 = 0xDC; - if ((spawnedActor->params != ITEM00_SMALL_KEY) && (spawnedActor->params != ITEM00_HEART_PIECE) && - (spawnedActor->params != ITEM00_HEART_CONTAINER)) { - spawnedActor->room = -1; + } + } else { + if (param8000 == 0) { + params = func_800A7650(newParamFF); + } + if ((s32)params != ITEM00_NO_DROP) { + spawnedActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ITEM00, spawnPos->x, spawnPos->y, + spawnPos->z, 0, 0, 0, (s32)params | param8000 | param7F00); + if ((spawnedActor != NULL) && (param8000 == 0)) { + if (param10000 == 0) { + spawnedActor->velocity.y = 8.0f; + } else { + spawnedActor->velocity.y = -2.0f; + } + spawnedActor->speed = 2.0f; + spawnedActor->gravity = -0.9f; + spawnedActor->world.rot.y = Rand_CenteredFloat(0x10000); + Actor_SetScale(spawnedActor, 0.0f); + ((EnItem00*)spawnedActor)->actionFunc = func_800A6780; + ((EnItem00*)spawnedActor)->unk152 = 0xDC; + if ((spawnedActor->params != ITEM00_SMALL_KEY) && (spawnedActor->params != ITEM00_HEART_PIECE) && + (spawnedActor->params != ITEM00_HEART_CONTAINER)) { + spawnedActor->room = -1; + } + spawnedActor->flags |= 0x0010; } - spawnedActor->flags |= 0x0010; } } } |
