diff options
| author | Philip Dubé <159546+serprex@users.noreply.github.com> | 2026-04-23 12:34:26 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-23 12:34:26 +0000 |
| commit | 806398a65b04c994d6472eb482e0de400d48cc72 (patch) | |
| tree | 43015bcde22593d8074302bb6dd41dbcb38c330d /soh/src/code | |
| parent | 3221d8a988513618986423f36c8c02c8f4dc2435 (diff) | |
Fix OGC great fairy reward in vanilla with skip misc interactions when fish is not obtainable (#6556)
Item_CheckObtainability should only be called with MOD_NONE GI
For RG_DOUBLE_DEFENSE that became ITEM_FISH. Nonsense ensued
To reproduce issue, create debug save & go straight to OGC great fairy with only magic/ocarina/lullaby
Diffstat (limited to 'soh/src/code')
| -rw-r--r-- | soh/src/code/z_actor.c | 15 | ||||
| -rw-r--r-- | soh/src/code/z_player_lib.c | 1 |
2 files changed, 9 insertions, 7 deletions
diff --git a/soh/src/code/z_actor.c b/soh/src/code/z_actor.c index 54c33e2cf..f69a7ea8c 100644 --- a/soh/src/code/z_actor.c +++ b/soh/src/code/z_actor.c @@ -2032,8 +2032,10 @@ s32 GiveItemEntryWithoutActor(PlayState* play, GetItemEntry getItemEntry) { PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_JUMPING | PLAYER_STATE1_FREEFALL | PLAYER_STATE1_FIRST_PERSON | PLAYER_STATE1_CLIMBING_LADDER)) && Player_GetExplosiveHeld(player) < 0) { - if (((player->heldActor != NULL) && ((getItemEntry.getItemId > GI_NONE) && (getItemEntry.getItemId < GI_MAX)) || - (IS_RANDO && (getItemEntry.getItemId > RG_NONE) && (getItemEntry.getItemId < RG_MAX))) || + if (((player->heldActor != NULL && (getItemEntry.modIndex == MOD_NONE && getItemEntry.getItemId > GI_NONE && + getItemEntry.getItemId < GI_MAX)) || + (getItemEntry.modIndex == MOD_RANDOMIZER && getItemEntry.getItemId > RG_NONE && + getItemEntry.getItemId < RG_MAX)) || (!(player->stateFlags1 & (PLAYER_STATE1_CARRYING_ACTOR | PLAYER_STATE1_IN_CUTSCENE)))) { if ((getItemEntry.getItemId != GI_NONE)) { player->getItemEntry = getItemEntry; @@ -2073,8 +2075,10 @@ s32 GiveItemEntryFromActor(Actor* actor, PlayState* play, GetItemEntry getItemEn PLAYER_STATE1_CLIMBING_LADDER)) && Player_GetExplosiveHeld(player) < 0) { if ((((player->heldActor != NULL) || (actor == player->talkActor)) && - ((!IS_RANDO && ((getItemEntry.getItemId > GI_NONE) && (getItemEntry.getItemId < GI_MAX))) || - (IS_RANDO && ((getItemEntry.getItemId > RG_NONE) && (getItemEntry.getItemId < RG_MAX))))) || + ((getItemEntry.getItemId == MOD_NONE && + ((getItemEntry.getItemId > GI_NONE) && (getItemEntry.getItemId < GI_MAX))) || + (getItemEntry.getItemId == MOD_RANDOMIZER && + ((getItemEntry.getItemId > RG_NONE) && (getItemEntry.getItemId < RG_MAX))))) || (!(player->stateFlags1 & (PLAYER_STATE1_CARRYING_ACTOR | PLAYER_STATE1_IN_CUTSCENE)))) { if ((actor->xzDistToPlayer < xzRange) && (fabsf(actor->yDistToPlayer) < yRange)) { s16 yawDiff = actor->yawTowardsPlayer - player->actor.shape.rot.y; @@ -2118,8 +2122,7 @@ s32 Actor_OfferGetItem(Actor* actor, PlayState* play, s32 getItemId, f32 xzRange PLAYER_STATE1_CLIMBING_LADDER)) && Player_GetExplosiveHeld(player) < 0) { if ((((player->heldActor != NULL) || (actor == player->talkActor)) && - ((!IS_RANDO && ((getItemId > GI_NONE) && (getItemId < GI_MAX))) || - (IS_RANDO && ((getItemId > RG_NONE) && (getItemId < RG_MAX))))) || + ((getItemId > GI_NONE) && (getItemId < GI_MAX))) || (!(player->stateFlags1 & (PLAYER_STATE1_CARRYING_ACTOR | PLAYER_STATE1_IN_CUTSCENE)))) { if ((actor->xzDistToPlayer < xzRange) && (fabsf(actor->yDistToPlayer) < yRange)) { s16 yawDiff = actor->yawTowardsPlayer - player->actor.shape.rot.y; diff --git a/soh/src/code/z_player_lib.c b/soh/src/code/z_player_lib.c index 83dfd7608..79bf0bfb6 100644 --- a/soh/src/code/z_player_lib.c +++ b/soh/src/code/z_player_lib.c @@ -3,7 +3,6 @@ #include "objects/gameplay_field_keep/gameplay_field_keep.h" #include "objects/object_link_boy/object_link_boy.h" #include "objects/object_link_child/object_link_child.h" -#include "objects/object_triforce_spot/object_triforce_spot.h" #include "overlays/actors/ovl_Demo_Effect/z_demo_effect.h" #include "soh/Enhancements/game-interactor/GameInteractor.h" |
