From f2c8ec4c686a670947caceefa441028d5f66027e Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Sun, 4 May 2025 21:43:35 +0000 Subject: [PATCH] jabu cue feedback --- .../accessible-actors/AccessibleActorList.cpp | 117 +++++++++--------- .../Enhancements/accessible-actors/SfxTable.h | 4 +- 2 files changed, 62 insertions(+), 59 deletions(-) diff --git a/soh/soh/Enhancements/accessible-actors/AccessibleActorList.cpp b/soh/soh/Enhancements/accessible-actors/AccessibleActorList.cpp index 90a9c313f..60dc5c1dc 100644 --- a/soh/soh/Enhancements/accessible-actors/AccessibleActorList.cpp +++ b/soh/soh/Enhancements/accessible-actors/AccessibleActorList.cpp @@ -18,11 +18,15 @@ extern "C" { #include "overlays/actors/ovl_En_Box/z_en_box.h" #include "overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.h" #include "overlays/actors/ovl_En_Dog/z_en_dog.h" +#include "overlays/actors/ovl_En_Ba/z_en_ba.h" +#include "overlays/actors/ovl_En_Eiyer/z_en_eiyer.h" void EnBox_WaitOpen(EnBox*, PlayState*); void EnKarebaba_DeadItemDrop(EnKarebaba*, PlayState*); void EnDog_FollowPlayer(EnDog*, PlayState*); s8 EnDog_CanFollow(EnDog*, PlayState*); +void EnEiyer_Die(EnEiyer*, PlayState*); +void EnEiyer_Dead(EnEiyer*, PlayState*); } // User data for the general helper VA. @@ -167,14 +171,6 @@ void accessible_larva(AccessibleActor* actor) { } } -void accessible_eiyer(AccessibleActor* actor) { - if (GET_PLAYER(actor->play)->actor.world.pos.y > actor->actor->world.pos.y - 8) { - ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_IT_FISHING_REEL_SLOW, false); - } else { - ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_IT_FISHING_REEL_HIGH, false); - } -} - void accessible_door(AccessibleActor* actor) { ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_OC_DOOR_OPEN, false); } @@ -351,39 +347,6 @@ void accessible_area_change(AccessibleActor* actor) { } } -void accessible_231_dekus(AccessibleActor* actor) { - if (actor->actor->params == 1) { - ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_EN_NUTS_FAINT, false); - ActorAccessibility_SetSoundPitch(actor, 0, 1.0); - } else if (actor->actor->params == 2) { - ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_EN_NUTS_FAINT, false); - ActorAccessibility_SetSoundPitch(actor, 0, 0.5); - } else if (actor->actor->params == 3) { - ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_EN_NUTS_FAINT, false); - ActorAccessibility_SetSoundPitch(actor, 0, 1.5); - } else { - return; - } -} - -void accessible_hana(AccessibleActor* actor) { - if (actor->actor->params == 1) { - ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_EN_OCTAROCK_ROCK, false); - } else if (actor->actor->params == 0) { - ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_EV_DIG_UP, false); - } -} - -void accessible_climable(AccessibleActor* actor) { - Player* player = GET_PLAYER(actor->play); - f32 waterLoc = player->actor.yDistToWater + player->actor.world.pos.y; - if (actor->world.pos.y < waterLoc) { - actor->world.pos.y = waterLoc; - } - if (actor != nullptr && actor->yDistToPlayer < 80) - ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_PL_LAND_LADDER, false); -} - void accessible_en_guard(AccessibleActor* actor) { Player* player = GET_PLAYER(actor->play); f32 guardsfx = NA_SE_IT_SWORD_IMPACT; @@ -622,6 +585,8 @@ void ActorAccessibility_InitActors() { policy.n = Npc_Frames; policy.pitch = 1.1; ActorAccessibility_AddSupportedActor(ACTOR_EN_KO, policy); + policy.englishName = "Zoras"; + ActorAccessibility_AddSupportedActor(ACTOR_EN_ZO, policy); policy.englishName = "Gorons"; ActorAccessibility_AddSupportedActor(ACTOR_EN_GO2, policy); policy.englishName = "Saria"; @@ -726,9 +691,6 @@ void ActorAccessibility_InitActors() { ActorAccessibility_AddSupportedActor(ACTOR_EN_KAREBABA, policy); ActorAccessibility_InitPolicy(&policy, "Owl", NA_SE_EN_OWL_FLUTTER); ActorAccessibility_AddSupportedActor(ACTOR_EN_OWL, policy); - // will probably just get replaced with ghost actors anyways - // ActorAccessibility_AddSupporte dActor(ACTOR_EN_HOLL, "Room Changing Plane", nullptr, 30, 500, 1.0, 1.0, - // NA_SE_EV_STONEDOOR_STOP /*NOT SURE YET*/); ActorAccessibility_InitPolicy(&policy, "Ruto", NA_SE_VO_RT_LAUGH_0); policy.n = 40; @@ -794,8 +756,9 @@ void ActorAccessibility_InitActors() { policy.distance = 1000; policy.ydist = 300; ActorAccessibility_AddSupportedActor(ACTOR_BG_BDAN_SWITCH, policy); - ActorAccessibility_InitPolicy(&policy, "Jabu Elevator", [](AccessibleActor* actor) { + ActorAccessibility_InitPolicy(&policy, "Jabu Object", [](AccessibleActor* actor) { if ((actor->actor->params & 0xFF) == 2 && actor->xzDistToPlayer > 50) { + // Jabu Elevator ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_PL_LAND_LADDER, false); } }); @@ -820,14 +783,10 @@ void ActorAccessibility_InitActors() { policy.distance = 800; ActorAccessibility_AddSupportedActor(ACTOR_OBJ_SYOKUDAI, policy); ActorAccessibility_InitPolicy(&policy, "Deku Tree Moving Platform", accessible_hasi); - // policy.volume = 1.3; policy.distance = 1000; ActorAccessibility_AddSupportedActor(ACTOR_BG_YDAN_HASI, policy); ActorAccessibility_InitPolicy(&policy, "Pot", NA_SE_EV_POT_BROKEN); ActorAccessibility_AddSupportedActor(ACTOR_OBJ_TSUBO, policy); - // ActorAccessibility_InitPolicy(&policy, "Deku Tree Entrance", NA_SE_EV_FANTOM_WARP_L); - // policy.distance = 5000; - // ActorAccessibility_AddSupportedActor(ACTOR_BG_TREEMOUTH, policy); ActorAccessibility_InitPolicy(&policy, "Platform collapsable", NA_SE_EV_BLOCK_SHAKE); ActorAccessibility_AddSupportedActor(ACTOR_OBJ_LIFT, policy); ActorAccessibility_InitPolicy(&policy, "Ladder in Slingshot Room", accessible_maruta); @@ -835,13 +794,30 @@ void ActorAccessibility_InitActors() { ActorAccessibility_InitPolicy(&policy, "bombable wall", NA_SE_EN_OCTAROCK_ROCK); ActorAccessibility_AddSupportedActor(ACTOR_BG_BREAKWALL, policy); ActorAccessibility_AddSupportedActor(ACTOR_BG_BOMBWALL, policy); - ActorAccessibility_InitPolicy(&policy, "231 dekus", accessible_231_dekus); + ActorAccessibility_InitPolicy(&policy, "231 dekus", [](AccessibleActor* actor) { + if (actor->actor->params == 1) { + ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_EN_NUTS_FAINT, false); + ActorAccessibility_SetSoundPitch(actor, 0, 1.0); + } else if (actor->actor->params == 2) { + ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_EN_NUTS_FAINT, false); + ActorAccessibility_SetSoundPitch(actor, 0, 0.5); + } else if (actor->actor->params == 3) { + ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_EN_NUTS_FAINT, false); + ActorAccessibility_SetSoundPitch(actor, 0, 1.5); + } + }); policy.distance = 2000; policy.n = 50; ActorAccessibility_AddSupportedActor(ACTOR_EN_HINTNUTS, policy); ActorAccessibility_InitPolicy(&policy, "Flame Circle", NA_SE_EV_FIRE_PILLAR); ActorAccessibility_AddSupportedActor(ACTOR_BG_HIDAN_CURTAIN, policy); - ActorAccessibility_InitPolicy(&policy, "uninteractable rocks in kokiri forest", accessible_hana); + ActorAccessibility_InitPolicy(&policy, "uninteractable rocks in kokiri forest", [](AccessibleActor* actor) { + if (actor->actor->params == 1) { + ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_EN_OCTAROCK_ROCK, false); + } else if (actor->actor->params == 0) { + ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_EV_DIG_UP, false); + } + }); ActorAccessibility_AddSupportedActor(ACTOR_OBJ_HANA, policy); ActorAccessibility_InitPolicy(&policy, "gold skulltula token", accessible_en_pickups); ActorAccessibility_AddSupportedActor(ACTOR_EN_SI, policy); @@ -855,9 +831,21 @@ void ActorAccessibility_InitActors() { policy.distance = 1000; policy.ydist = 1000; ActorAccessibility_AddSupportedActor(ACTOR_EN_GOMA, policy); + ActorAccessibility_InitPolicy(&policy, "jabu jabu", NA_SE_EV_JABJAB_HICCUP); + policy.distance = 10000; + ActorAccessibility_AddSupportedActor(ACTOR_EN_JJ, policy); ActorAccessibility_InitPolicy(&policy, "small jellyfish", NA_SE_EN_BIRI_FLY); ActorAccessibility_AddSupportedActor(ACTOR_EN_BILI, policy); - ActorAccessibility_InitPolicy(&policy, "stinger", accessible_eiyer); + ActorAccessibility_InitPolicy(&policy, "stinger", [](AccessibleActor* actor) { + auto actionFunc = ((EnEiyer*)actor->actor)->actionFunc; + if (actionFunc == EnEiyer_Die || actionFunc == EnEiyer_Dead) { + ActorAccessibility_StopAllSoundsForActor(actor); + } else if (GET_PLAYER(actor->play)->actor.world.pos.y > actor->actor->world.pos.y - 8) { + ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_IT_FISHING_REEL_SLOW, false); + } else { + ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_IT_FISHING_REEL_HIGH, false); + } + }); policy.n = 1; policy.distance = 1000; policy.ydist = 200; @@ -865,10 +853,19 @@ void ActorAccessibility_InitActors() { ActorAccessibility_InitPolicy(&policy, "bubble", NA_SE_EN_DAIOCTA_SPLASH); policy.ydist = 200; ActorAccessibility_AddSupportedActor(ACTOR_EN_BUBBLE, policy); - ActorAccessibility_InitPolicy(&policy, "tentacle", NA_SE_EN_BALINADE_THUNDER); - ActorAccessibility_AddSupportedActor(ACTOR_EN_BA, policy); + ActorAccessibility_InitPolicy(&policy, "tentacle obstacle", NA_SE_EN_BALINADE_THUNDER); policy.distance = 100; ActorAccessibility_AddSupportedActor(ACTOR_EN_BX, policy); + ActorAccessibility_InitPolicy(&policy, "tentacle", [](AccessibleActor* actor) { + if (actor->actor->params < EN_BA_DEAD_BLOB) { + actor->policy.volume = 2.5 - (actor->actor->world.pos.y - actor->actor->home.pos.y) / 200.0; + ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_EN_OWL_FLUTTER, false); + } + }); + policy.distance = 1500; + policy.ydist = 1000; + policy.n = 5; + ActorAccessibility_AddSupportedActor(ACTOR_EN_BA, policy); ActorAccessibility_InitPolicy(&policy, "redead", NA_SE_EN_REDEAD_CRY); ActorAccessibility_AddSupportedActor(ACTOR_EN_RD, policy); ActorAccessibility_InitPolicy(&policy, "Beamos", NA_SE_EN_BIMOS_AIM); @@ -893,10 +890,16 @@ void ActorAccessibility_InitActors() { policy.volume = 1.5; policy.distance = 2000; ActorAccessibility_AddSupportedActor(VA_CRAWLSPACE, policy); - ActorAccessibility_InitPolicy(&policy, "Ladder/climable", accessible_climable); - // policy.volume = 1.5; + ActorAccessibility_InitPolicy(&policy, "Ladder/climable", [](AccessibleActor* actor) { + Player* player = GET_PLAYER(actor->play); + f32 waterLoc = player->actor.yDistToWater + player->actor.world.pos.y; + if (actor->world.pos.y < waterLoc) { + actor->world.pos.y = waterLoc; + } + if (actor->yDistToPlayer < 80) + ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_PL_LAND_LADDER, false); + }); policy.pitch = 1.3; - // policy.distance = 2000; ActorAccessibility_AddSupportedActor(VA_CLIMB, policy); ActorAccessibility_InitPolicy(&policy, "Door", NA_SE_OC_DOOR_OPEN); policy.n = 30; diff --git a/soh/soh/Enhancements/accessible-actors/SfxTable.h b/soh/soh/Enhancements/accessible-actors/SfxTable.h index 4933895a6..8f32b861b 100644 --- a/soh/soh/Enhancements/accessible-actors/SfxTable.h +++ b/soh/soh/Enhancements/accessible-actors/SfxTable.h @@ -3,7 +3,7 @@ // All of the "DUMMY's" and "YOBI's" have been removed as they produce duplicate sounds at best, and cause errors or // even crashes at worst. -const s16 sfxTable[1207] = { +const s16 sfxTable[] = { NA_SE_PL_WALK_GROUND, NA_SE_PL_WALK_SAND, NA_SE_PL_WALK_CONCRETE, @@ -1212,4 +1212,4 @@ const s16 sfxTable[1207] = { NA_SE_VO_IN_LAUGH, NA_SE_VO_LI_AUTO_JUMP_DARKLINK, }; -const int sfxCount = 1207; +const int sfxCount = sizeof(sfxTable) / sizeof(s16);