From a065e43455bb6dfea5c5bc5aa45fbd160eef1c35 Mon Sep 17 00:00:00 2001 From: MelonSpeedruns Date: Tue, 31 May 2022 20:37:10 -0400 Subject: [PATCH 1/3] man on roof = done --- soh/soh/Enhancements/randomizer.cpp | 2 ++ soh/src/overlays/actors/ovl_En_Ani/z_en_ani.c | 16 ++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/soh/soh/Enhancements/randomizer.cpp b/soh/soh/Enhancements/randomizer.cpp index 51f34a861..6b32c286d 100644 --- a/soh/soh/Enhancements/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer.cpp @@ -1538,6 +1538,8 @@ RandomizerCheck Randomizer::GetCheckFromActor(s16 sceneNum, s16 actorId, s16 act } else { return KAK_ANJU_AS_CHILD; } + case 359: + return KAK_MAN_ON_ROOF; } case 17: switch (actorId) { diff --git a/soh/src/overlays/actors/ovl_En_Ani/z_en_ani.c b/soh/src/overlays/actors/ovl_En_Ani/z_en_ani.c index 40b26c790..7cbf4e65f 100644 --- a/soh/src/overlays/actors/ovl_En_Ani/z_en_ani.c +++ b/soh/src/overlays/actors/ovl_En_Ani/z_en_ani.c @@ -126,7 +126,13 @@ void func_809B0558(EnAni* this, GlobalContext* globalCtx) { } gSaveContext.itemGetInf[1] |= 0x20; } else { - func_8002F434(&this->actor, globalCtx, GI_HEART_PIECE, 10000.0f, 200.0f); + if (gSaveContext.n64ddFlag) { + s32 getItemId = + GetRandomizedItemId(GI_HEART_PIECE, this->actor.id, this->actor.params, globalCtx->sceneNum); + func_8002F434(&this->actor, globalCtx, getItemId, 10000.0f, 200.0f); + } else { + func_8002F434(&this->actor, globalCtx, GI_HEART_PIECE, 10000.0f, 200.0f); + } } } @@ -134,7 +140,13 @@ void func_809B05F0(EnAni* this, GlobalContext* globalCtx) { if (Actor_TextboxIsClosing(&this->actor, globalCtx)) { EnAni_SetupAction(this, func_809B0558); } - func_8002F434(&this->actor, globalCtx, GI_HEART_PIECE, 10000.0f, 200.0f); + + if (gSaveContext.n64ddFlag) { + s32 getItemId = GetRandomizedItemId(GI_HEART_PIECE, this->actor.id, this->actor.params, globalCtx->sceneNum); + func_8002F434(&this->actor, globalCtx, getItemId, 10000.0f, 200.0f); + } else { + func_8002F434(&this->actor, globalCtx, GI_HEART_PIECE, 10000.0f, 200.0f); + } } void func_809B064C(EnAni* this, GlobalContext* globalCtx) { From dad51638250fae3bc26e67b671d5ce9721e1f7a5 Mon Sep 17 00:00:00 2001 From: MelonSpeedruns Date: Tue, 31 May 2022 21:10:19 -0400 Subject: [PATCH 2/3] LH sun check done --- soh/soh/Enhancements/randomizer.cpp | 6 ++++ .../ovl_Item_Etcetera/z_item_etcetera.c | 29 +++++++++++++++++-- .../overlays/actors/ovl_Shot_Sun/z_shot_sun.c | 3 +- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/soh/soh/Enhancements/randomizer.cpp b/soh/soh/Enhancements/randomizer.cpp index 6b32c286d..046b272e7 100644 --- a/soh/soh/Enhancements/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer.cpp @@ -1242,6 +1242,8 @@ GetItemID Randomizer::GetItemFromGet(RandomizerGet randoGet, GetItemID ogItemId) return GI_BOMBCHUS_5; case BOMBCHUS_20: return GI_BOMBCHUS_20; + case POCKET_EGG: + return GI_POCKET_EGG; case ICE_TRAP: return GI_ICE_TRAP; case PIECE_OF_HEART: @@ -2048,6 +2050,10 @@ RandomizerCheck Randomizer::GetCheckFromActor(s16 sceneNum, s16 actorId, s16 act return GANONS_TOWER_BOSS_KEY_CHEST; } case 87: + switch (actorId) { + case 271: + return LH_SUN; + } switch(actorParams) { case 7686: return LH_FREESTANDING_POH; diff --git a/soh/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c b/soh/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c index e66d38632..dd04fcbcb 100644 --- a/soh/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c +++ b/soh/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c @@ -125,7 +125,14 @@ void func_80B85824(ItemEtcetera* this, GlobalContext* globalCtx) { } Actor_Kill(&this->actor); } else { - func_8002F434(&this->actor, globalCtx, this->getItemId, 30.0f, 50.0f); + if (gSaveContext.n64ddFlag) { + s32 getItemId = GetRandomizedItemId(GI_ARROW_FIRE, this->actor.id, this->actor.params, globalCtx->sceneNum); + if (func_8002F434(&this->actor, globalCtx, getItemId, 30.0f, 50.0f)) { + Flags_SetTreasure(globalCtx, 0x1F); + } + } else { + func_8002F434(&this->actor, globalCtx, this->getItemId, 30.0f, 50.0f); + } } } @@ -138,7 +145,17 @@ void func_80B858B4(ItemEtcetera* this, GlobalContext* globalCtx) { Actor_Kill(&this->actor); } else { if (0) {} // Necessary to match - func_8002F434(&this->actor, globalCtx, this->getItemId, 30.0f, 50.0f); + + if (gSaveContext.n64ddFlag) { + s32 getItemId = + GetRandomizedItemId(GI_ARROW_FIRE, this->actor.id, this->actor.params, globalCtx->sceneNum); + if (func_8002F434(&this->actor, globalCtx, getItemId, 30.0f, 50.0f)) { + Flags_SetTreasure(globalCtx, 0x1F); + } + } else { + func_8002F434(&this->actor, globalCtx, this->getItemId, 30.0f, 50.0f); + } + if ((globalCtx->gameplayFrames & 0xD) == 0) { EffectSsBubble_Spawn(globalCtx, &this->actor.world.pos, 0.0f, 0.0f, 10.0f, 0.13f); } @@ -211,8 +228,14 @@ void ItemEtcetera_DrawThroughLens(Actor* thisx, GlobalContext* globalCtx) { void ItemEtcetera_Draw(Actor* thisx, GlobalContext* globalCtx) { ItemEtcetera* this = (ItemEtcetera*)thisx; + s32 type = this->actor.params & 0xFF; + + if (gSaveContext.n64ddFlag && type == ITEM_ETC_ARROW_FIRE) { + this->giDrawId = GetItemModelFromId( + GetRandomizedItemId(this->getItemId, this->actor.id, this->actor.params, globalCtx->sceneNum)); + } func_8002EBCC(&this->actor, globalCtx, 0); func_8002ED80(&this->actor, globalCtx, 0); GetItem_Draw(globalCtx, this->giDrawId); -} +} \ No newline at end of file diff --git a/soh/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c b/soh/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c index 5d3f27cc4..849559328 100644 --- a/soh/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c +++ b/soh/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c @@ -162,7 +162,8 @@ void ShotSun_UpdateHyliaSun(ShotSun* this, GlobalContext* globalCtx) { if (this->collider.base.acFlags & AC_HIT) { func_80078884(NA_SE_SY_CORRECT_CHIME); osSyncPrintf(VT_FGCOL(CYAN) "SHOT_SUN HIT!!!!!!!\n" VT_RST); - if (INV_CONTENT(ITEM_ARROW_FIRE) == ITEM_NONE) { + if ((INV_CONTENT(ITEM_ARROW_FIRE) == ITEM_NONE && !gSaveContext.n64ddFlag) || + !Flags_GetTreasure(globalCtx, 0x1F)) { Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_ITEM_ETCETERA, 700.0f, -800.0f, 7261.0f, 0, 0, 0, 7); globalCtx->csCtx.segment = SEGMENTED_TO_VIRTUAL(gLakeHyliaFireArrowsCS); if (1) {} From e7061c79d821f8a71ecc8449dfc849a5fa84ea4b Mon Sep 17 00:00:00 2001 From: MelonSpeedruns Date: Tue, 31 May 2022 21:41:20 -0400 Subject: [PATCH 3/3] ruto letter + fire arrow checks --- soh/soh/Enhancements/randomizer.cpp | 6 ++++- .../ovl_Item_Etcetera/z_item_etcetera.c | 24 +++++++++++-------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/soh/soh/Enhancements/randomizer.cpp b/soh/soh/Enhancements/randomizer.cpp index 046b272e7..6d7d5ce72 100644 --- a/soh/soh/Enhancements/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer.cpp @@ -2052,7 +2052,11 @@ RandomizerCheck Randomizer::GetCheckFromActor(s16 sceneNum, s16 actorId, s16 act case 87: switch (actorId) { case 271: - return LH_SUN; + if (LINK_IS_ADULT) { + return LH_SUN; + } else { + return LH_UNDERWATER_ITEM; + } } switch(actorParams) { case 7686: diff --git a/soh/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c b/soh/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c index dd04fcbcb..28b587983 100644 --- a/soh/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c +++ b/soh/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c @@ -82,7 +82,8 @@ void ItemEtcetera_Init(Actor* thisx, GlobalContext* globalCtx) { case ITEM_ETC_LETTER: Actor_SetScale(&this->actor, 0.5f); this->futureActionFunc = func_80B858B4; - if (gSaveContext.eventChkInf[3] & 2) { + if ((gSaveContext.eventChkInf[3] & 2 && !gSaveContext.n64ddFlag) || + (gSaveContext.n64ddFlag && Flags_GetTreasure(globalCtx, 0x1F))) { Actor_Kill(&this->actor); } break; @@ -122,14 +123,16 @@ void func_80B85824(ItemEtcetera* this, GlobalContext* globalCtx) { if ((this->actor.params & 0xFF) == 1) { gSaveContext.eventChkInf[3] |= 2; Flags_SetSwitch(globalCtx, 0xB); + + if (gSaveContext.n64ddFlag) { + Flags_SetTreasure(globalCtx, 0x1E); + } } Actor_Kill(&this->actor); } else { if (gSaveContext.n64ddFlag) { s32 getItemId = GetRandomizedItemId(GI_ARROW_FIRE, this->actor.id, this->actor.params, globalCtx->sceneNum); - if (func_8002F434(&this->actor, globalCtx, getItemId, 30.0f, 50.0f)) { - Flags_SetTreasure(globalCtx, 0x1F); - } + func_8002F434(&this->actor, globalCtx, getItemId, 30.0f, 50.0f); } else { func_8002F434(&this->actor, globalCtx, this->getItemId, 30.0f, 50.0f); } @@ -141,17 +144,18 @@ void func_80B858B4(ItemEtcetera* this, GlobalContext* globalCtx) { if ((this->actor.params & 0xFF) == 1) { gSaveContext.eventChkInf[3] |= 2; Flags_SetSwitch(globalCtx, 0xB); + + if (gSaveContext.n64ddFlag) { + Flags_SetTreasure(globalCtx, 0x1F); + } } Actor_Kill(&this->actor); } else { if (0) {} // Necessary to match if (gSaveContext.n64ddFlag) { - s32 getItemId = - GetRandomizedItemId(GI_ARROW_FIRE, this->actor.id, this->actor.params, globalCtx->sceneNum); - if (func_8002F434(&this->actor, globalCtx, getItemId, 30.0f, 50.0f)) { - Flags_SetTreasure(globalCtx, 0x1F); - } + s32 getItemId = GetRandomizedItemId(GI_LETTER_RUTO, this->actor.id, this->actor.params, globalCtx->sceneNum); + func_8002F434(&this->actor, globalCtx, getItemId, 30.0f, 50.0f); } else { func_8002F434(&this->actor, globalCtx, this->getItemId, 30.0f, 50.0f); } @@ -230,7 +234,7 @@ void ItemEtcetera_Draw(Actor* thisx, GlobalContext* globalCtx) { ItemEtcetera* this = (ItemEtcetera*)thisx; s32 type = this->actor.params & 0xFF; - if (gSaveContext.n64ddFlag && type == ITEM_ETC_ARROW_FIRE) { + if (gSaveContext.n64ddFlag && (type == ITEM_ETC_ARROW_FIRE || type == ITEM_ETC_LETTER)) { this->giDrawId = GetItemModelFromId( GetRandomizedItemId(this->getItemId, this->actor.id, this->actor.params, globalCtx->sceneNum)); }