From 927ffd0b8b782cd3b4151ff1dc43dae98aeddabc Mon Sep 17 00:00:00 2001 From: Jake Edvenson <77412657+JakeEdvenson@users.noreply.github.com> Date: Tue, 23 Aug 2022 18:30:06 -0600 Subject: [PATCH] Enhancement: Scarecrow song skip (#1183) * Added Skip Scarecrow Song Added in the option for if the user has the time saver for Scarecrow song enabled and has their Ocarina pulled out in range of Pierre. Added Skip Scarecrow Song New enhancement under time-savers that allows the user to only pull out their ocarina to summon Pierre. * Added Default for Scarecrow summon The scarecrow summon option now defaults to 0 and can be turned on individually. I haven't included it in any other presets so people don't feel like they're cheating. * Checks if scarecrow song is in possession * Fixed positional Scarecrow logic * Fixed style --- libultraship/libultraship/ImGuiImpl.cpp | 4 ++++ soh/src/overlays/actors/ovl_En_Kakasi2/z_en_kakasi2.c | 7 ++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/libultraship/libultraship/ImGuiImpl.cpp b/libultraship/libultraship/ImGuiImpl.cpp index 79dbef375..6b04209ba 100644 --- a/libultraship/libultraship/ImGuiImpl.cpp +++ b/libultraship/libultraship/ImGuiImpl.cpp @@ -1301,6 +1301,8 @@ namespace SohImGui { Tooltip("The default response to Kaepora Gaebora is always that you understood what he said"); PaddedEnhancementCheckbox("Fast Ocarina Playback", "gFastOcarinaPlayback", true, false); Tooltip("Skip the part where the Ocarina playback is called when you play a song"); + PaddedEnhancementCheckbox("Skip Scarecrow Song", "gSkipScarecrow", true, false); + Tooltip("Pierre appears when Ocarina is pulled out. Requires learning scarecrow song."); PaddedEnhancementCheckbox("Instant Putaway", "gInstantPutaway", true, false); Tooltip("Allow Link to put items away without having to wait around"); PaddedEnhancementCheckbox("Instant Boomerang Recall", "gFastBoomerang", true, false); @@ -2479,6 +2481,8 @@ namespace SohImGui { CVar_SetS32("gVisualAgony", 1); // Pull grave during the day CVar_SetS32("gDayGravePull", 1); + // Pull out Ocarina to Summon Scarecrow + CVar_SetS32("gSkipScarecrow", 0); // Pause link animation (0 to 16) CVar_SetS32("gPauseLiveLink", 16); diff --git a/soh/src/overlays/actors/ovl_En_Kakasi2/z_en_kakasi2.c b/soh/src/overlays/actors/ovl_En_Kakasi2/z_en_kakasi2.c index 3469d4d6b..a7be7866d 100644 --- a/soh/src/overlays/actors/ovl_En_Kakasi2/z_en_kakasi2.c +++ b/soh/src/overlays/actors/ovl_En_Kakasi2/z_en_kakasi2.c @@ -118,9 +118,10 @@ void func_80A90264(EnKakasi2* this, GlobalContext* globalCtx) { this->unk_194++; - if ((BREG(1) != 0) && (this->actor.xzDistToPlayer < this->maxSpawnDistance.x) && - (fabsf(player->actor.world.pos.y - this->actor.world.pos.y) < this->maxSpawnDistance.y)) { - + if (((BREG(1) != 0) || ((CVar_GetS32("gSkipScarecrow", 0) != 0) && + (globalCtx->msgCtx.ocarinaAction == OCARINA_ACTION_FREE_PLAY) && gSaveContext.scarecrowSpawnSongSet)) && + (this->actor.xzDistToPlayer < this->maxSpawnDistance.x) && + (fabsf(player->actor.world.pos.y - this->actor.world.pos.y) < this->maxSpawnDistance.y)){ this->actor.draw = func_80A90948; Collider_InitCylinder(globalCtx, &this->collider); Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);