From f48647986be9843bb7bb913909cdb8141d7dc8dd Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Wed, 16 Apr 2025 00:13:41 +0000 Subject: [PATCH] BTN_CUSTOM_QUERYVIEW --- .../controls/SohInputEditorWindow.cpp | 4 --- soh/soh/Enhancements/tts/tts.cpp | 34 ++++++++++++++++++- soh/soh/OTRGlobals.cpp | 2 -- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/soh/soh/Enhancements/controls/SohInputEditorWindow.cpp b/soh/soh/Enhancements/controls/SohInputEditorWindow.cpp index 341fc6255..f6b44ceac 100644 --- a/soh/soh/Enhancements/controls/SohInputEditorWindow.cpp +++ b/soh/soh/Enhancements/controls/SohInputEditorWindow.cpp @@ -1584,10 +1584,6 @@ void SohInputEditorWindow::DrawLinkTab() { DrawStickSection(portIndex, Ship::RIGHT, 1, CHIP_COLOR_N64_YELLOW); } - if (ImGui::CollapsingHeader("A11y")) { - - } - if (ImGui::CollapsingHeader("Rumble")) { DrawRumbleSection(portIndex); } diff --git a/soh/soh/Enhancements/tts/tts.cpp b/soh/soh/Enhancements/tts/tts.cpp index b8a43453f..bbfbf91ca 100644 --- a/soh/soh/Enhancements/tts/tts.cpp +++ b/soh/soh/Enhancements/tts/tts.cpp @@ -1,6 +1,5 @@ #include "soh/Enhancements/game-interactor/GameInteractor.h" #include "soh/Enhancements/speechsynthesizer/SpeechSynthesizer.h" - #include #include #include @@ -11,6 +10,8 @@ #include "soh/OTRGlobals.h" #include "message_data_static.h" #include "overlays/gamestates/ovl_file_choose/file_choose.h" +#include "overlays/actors/ovl_En_Elf/z_en_elf.h" +#include "soh/ActorDB.h" #include "soh/Enhancements/boss-rush/BossRush.h" #include "soh/resource/type/SohResourceType.h" @@ -176,6 +177,37 @@ void RegisterOnInterfaceUpdateHook() { if (!GameInteractor::IsSaveLoaded(true)) return; + if (CHECK_BTN_ALL(gPlayState->state.input->press.button, BTN_CUSTOM_QUERYVIEW)) { + int minDist = 1000000; + Actor* readOut = NULL; + Player* player = GET_PLAYER(gPlayState); + if (player != NULL) { + for (int i = 0; i < ACTORCAT_MAX; i++) { + if (i == ACTORCAT_PLAYER) + continue; + for (Actor* actor = gPlayState->actorCtx.actorLists[i].head; actor != NULL; actor = actor->next) { + if (actor->id == ACTOR_EN_ELF && actor->params == FAIRY_NAVI) + continue; + u16 reverseYaw = (actor->yawTowardsPlayer + 0x8000) - player->actor.world.rot.y; + if ((reverseYaw < 0x2000 || reverseYaw > 0xE000) && actor->xyzDistToPlayerSq < minDist) { + readOut = actor; + minDist = actor->xyzDistToPlayerSq; + } + } + } + if (readOut != NULL) { + auto entry = ActorDB::Instance->RetrieveEntry(readOut->id); + if (entry.name.empty()) { + char ttsAnnounceBuf[8]; + int annouceBuf = snprintf(ttsAnnounceBuf, sizeof(ttsAnnounceBuf), "%d", readOut->id); + SpeechSynthesizer::Instance->Speak(ttsAnnounceBuf, "en-US"); + } else { + SpeechSynthesizer::Instance->Speak(entry.name.c_str(), "en-US"); + } + } + } + } + static int16_t lostHealth = 0; static int16_t prevHealth = 0; diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index 6eeee2126..5bdfa6431 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -1421,13 +1421,11 @@ extern "C" void Graph_StartFrame() { break; } -#if defined(_WIN32) || defined(__APPLE__) case KbScancode::LUS_KB_F9: { // Toggle TTS CVarSetInteger(CVAR_SETTING("A11yTTS"), !CVarGetInteger(CVAR_SETTING("A11yTTS"), 0)); break; } -#endif case KbScancode::LUS_KB_TAB: { CVarSetInteger(CVAR_SETTING("AltAssets"), !CVarGetInteger(CVAR_SETTING("AltAssets"), 0)); break;