diff --git a/soh/soh/Enhancements/accessible-actors/AccessibleActorList.cpp b/soh/soh/Enhancements/accessible-actors/AccessibleActorList.cpp index 375b94619..8f09a52ed 100644 --- a/soh/soh/Enhancements/accessible-actors/AccessibleActorList.cpp +++ b/soh/soh/Enhancements/accessible-actors/AccessibleActorList.cpp @@ -9,6 +9,9 @@ #include #include #include "overlays/actors/ovl_Boss_Goma/z_boss_goma.h" + +std::vector buttonList = { BTN_A, BTN_B, BTN_CUP, BTN_CDOWN, BTN_CLEFT, BTN_CRIGHT, BTN_L, + BTN_Z, BTN_R, BTN_START, BTN_DUP, BTN_DDOWN, BTN_DLEFT, BTN_DRIGHT }; //Declarations specific to chests. #include "overlays/actors/ovl_En_Box/z_en_box.h" extern "C" { @@ -649,6 +652,27 @@ void accessible_audio_compass(AccessibleActor* actor) { Player* player = GET_PLAYER(actor->play); if (player->stateFlags1 & PLAYER_STATE1_TARGETING || player->stateFlags1 & PLAYER_STATE1_CLIMBING_LADDER) return; + OSContPad* trackerButtonsPressed = LUS::Context::GetInstance()->GetControlDeck()->GetPads(); + AudioCompassData* data = (AudioCompassData*)actor->userData; + bool compassCombo = trackerButtonsPressed != nullptr && trackerButtonsPressed[0].button & buttonList[11] && + trackerButtonsPressed[0].button & buttonList[6]; + actor->world.pos = player->actor.world.pos; + actor->world.pos.z -= 50; + + + if (data->framesUntilChime > 0) + data->framesUntilChime--; + if (compassCombo && data->framesUntilChime <= 0) { + + ActorAccessibility_PlaySoundForActor(actor, 0, actor->policy.sound, false); + data->framesUntilChime = 30; + } + + + + /* Player* player = GET_PLAYER(actor->play); + if (player->stateFlags1 & PLAYER_STATE1_TARGETING || player->stateFlags1 & PLAYER_STATE1_CLIMBING_LADDER) + return; actor->world.pos = player->actor.world.pos; actor->world.pos.z -= 50; @@ -671,7 +695,7 @@ void accessible_audio_compass(AccessibleActor* actor) { ActorAccessibility_PlaySoundForActor(actor, 0, actor->policy.sound, false); data->framesUntilChime = 10; - } + }*/ } diff --git a/soh/soh/Enhancements/accessible-actors/ActorAccessibility.cpp b/soh/soh/Enhancements/accessible-actors/ActorAccessibility.cpp index eeb99f471..aaa414706 100644 --- a/soh/soh/Enhancements/accessible-actors/ActorAccessibility.cpp +++ b/soh/soh/Enhancements/accessible-actors/ActorAccessibility.cpp @@ -25,6 +25,7 @@ std::vector buttons = { BTN_A, BTN_B, BTN_CUP, BTN_CDOWN, BTN_CLEFT, extern "C" { extern PlayState* gPlayState; extern bool freezeGame; +extern bool freezeActors; } const char* GetLanguageCode(); @@ -66,6 +67,8 @@ class AudioGlossaryData { bool GlossaryStarted = false; int cooldown = 0; int frameCount = 0; + s16 currentScene = -1; + s8 currentRoom = -1; }; class ActorAccessibility { @@ -466,6 +469,15 @@ int ActorAccessibility_GetRandomStartingFrameCount(int min, int max) { aa->currentRoomLocal = ActorAccessibility_GetVirtualActorList(play->sceneNum, play->roomCtx.curRoom.num); aa->currentRoom = play->roomCtx.curRoom.num; + } + if (aa->glossary->currentScene != play->sceneNum || aa->glossary->currentRoom != play->roomCtx.curRoom.num) { + if (aa->glossary->GlossaryStarted = true) { + aa->glossary->cooldown = 0; + aa->glossary->GlossaryStarted = false; + freezeActors = false; + + } + } if (player->stateFlags1 & PLAYER_STATE1_IN_CUTSCENE) { return; @@ -499,7 +511,10 @@ int ActorAccessibility_GetRandomStartingFrameCount(int min, int max) { } void ActorAccessibility_AudioGlossary(PlayState* play) { + if (aa->glossary->GlossaryStarted) { + + freezeActors = true; AccessibleActor glossaryActor = (*aa->glossary->current).second; ActorAccessibility_CopyParamsFromRealActor(&glossaryActor); glossaryActor.policy.distance = glossaryActor.xzDistToPlayer * 3; @@ -518,6 +533,8 @@ int ActorAccessibility_GetRandomStartingFrameCount(int min, int max) { if (comboStartGlossary) { aa->glossary->GlossaryStarted = true; aa->glossary->current = aa->accessibleActorList.begin(); + aa->glossary->currentScene = play->sceneNum; + aa->glossary->currentRoom = play->roomCtx.curRoom.num; SpeechSynthesizer::Instance->Speak((*aa->glossary->current).second.policy.englishName, GetLanguageCode()); return; } @@ -548,11 +565,14 @@ int ActorAccessibility_GetRandomStartingFrameCount(int min, int max) { if (comboDisableGlossary) { aa->glossary->cooldown = 0; aa->glossary->GlossaryStarted = false; + freezeActors = false; } // Processes external audio engine. ActorAccessibility_PrepareNextAudioFrame(); } + + //Virtual actor config. VirtualActorList* ActorAccessibility_GetVirtualActorList(s16 sceneNum, s8 roomNum) { diff --git a/soh/src/code/z_actor.c b/soh/src/code/z_actor.c index 06cca66c4..ff0bc5e68 100644 --- a/soh/src/code/z_actor.c +++ b/soh/src/code/z_actor.c @@ -77,6 +77,7 @@ #include "textures/place_title_cards/g_pn_56.h" #include "textures/place_title_cards/g_pn_57.h" #endif +bool freezeActors= false; static CollisionPoly* sCurCeilingPoly; static s32 sCurCeilingBgId; @@ -2509,6 +2510,8 @@ u32 D_80116068[ACTORCAT_MAX] = { void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) { + + Actor* refActor; Actor* actor; Player* player; @@ -2524,6 +2527,11 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) { sp74 = NULL; unkFlag = 0; + if (freezeActors) { + GameInteractor_ExecuteOnPlayerUpdate(player); + return; // for AudioGlossary + } + if (play->numSetupActors != 0) { actorEntry = &play->setupActorList[0]; for (i = 0; i < play->numSetupActors; i++) {