From bfdeb14a37dbb2fb10569641eed0dc5741e32c94 Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Thu, 31 Jul 2025 15:19:39 +0000 Subject: [PATCH] replace trackedActors map with object extension also cues for market bridge, bombable rubble, & better cue for pushable blocks in fire --- .../accessible-actors/AccessibleActorList.cpp | 6 +++- .../accessible-actors/ActorAccessibility.cpp | 32 ++++++++++--------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/soh/soh/Enhancements/accessible-actors/AccessibleActorList.cpp b/soh/soh/Enhancements/accessible-actors/AccessibleActorList.cpp index 64323f6a5..201607d19 100644 --- a/soh/soh/Enhancements/accessible-actors/AccessibleActorList.cpp +++ b/soh/soh/Enhancements/accessible-actors/AccessibleActorList.cpp @@ -602,6 +602,7 @@ void ActorAccessibility_InitActors() { ActorAccessibility_AddSupportedActor(ACTOR_BG_HIDAN_KOWARERUKABE, policy); ActorAccessibility_AddSupportedActor(ACTOR_BG_MIZU_BWALL, policy); ActorAccessibility_AddSupportedActor(ACTOR_BG_JYA_BOMBIWA, policy); + ActorAccessibility_AddSupportedActor(ACTOR_BG_HAKA_ZOU, policy); ActorAccessibility_AddSupportedActor(ACTOR_BG_BOMBWALL, policy); ActorAccessibility_AddSupportedActor(ACTOR_BG_BREAKWALL, policy); ActorAccessibility_AddSupportedActor(ACTOR_BG_SPOT08_BAKUDANKABE, policy); @@ -744,9 +745,12 @@ void ActorAccessibility_InitActors() { policy.distance = 800; policy.pitch = 1.1; ActorAccessibility_AddSupportedActor(ACTOR_OBJ_OSHIHIKI, policy); + ActorAccessibility_AddSupportedActor(ACTOR_BG_SPOT18_OBJ, policy); // Ideally should only play while adult ActorAccessibility_AddSupportedActor(ACTOR_BG_SPOT15_RRBOX, policy); - ActorAccessibility_AddSupportedActor(ACTOR_BG_HIDAN_ROCK, policy); ActorAccessibility_AddSupportedActor(ACTOR_BG_JYA_BLOCK, policy); + policy.distance = 1000; + policy.ydist = 500; + ActorAccessibility_AddSupportedActor(ACTOR_BG_HIDAN_ROCK, policy); ActorAccessibility_InitPolicy(&policy, "Torch", [](AccessibleActor* actor) { ObjSyokudai* torch = (ObjSyokudai*)actor->actor; // temporary torches diff --git a/soh/soh/Enhancements/accessible-actors/ActorAccessibility.cpp b/soh/soh/Enhancements/accessible-actors/ActorAccessibility.cpp index 38d372acc..79e575ef1 100644 --- a/soh/soh/Enhancements/accessible-actors/ActorAccessibility.cpp +++ b/soh/soh/Enhancements/accessible-actors/ActorAccessibility.cpp @@ -1,23 +1,25 @@ +#include +#include +#include +#include +#include + #include "ActorAccessibility.h" #include "AccessibleAudioEngine.h" #include "soh/OTRGlobals.h" #include "resource/type/Blob.h" -#include -#include -#include #include #include #include #include "ResourceType.h" #include "SfxExtractor.h" -#include #include "File.h" -#include #include "soh/Enhancements/speechsynthesizer/SpeechSynthesizer.h" #include "soh/Enhancements/tts/tts.h" #include "soh/Enhancements/game-interactor/GameInteractor.h" +#include "soh/ObjectExtension/ObjectExtension.h" extern "C" { extern PlayState* gPlayState; @@ -47,9 +49,6 @@ typedef struct { // Maps actors to their accessibility policies, which describe how accessibility should treat them. typedef std::map SupportedActors_t; -typedef std::map - TrackedActors_t; // Maps real actors to internal IDs specific to accessibility. - // Maps internal IDs to wrapped actor objects. These actors can be real or virtual. typedef std::map AccessibleActorList_t; typedef std::vector VAList_t; // Denotes a list of virtual actors specific to a single room. typedef std::map VAZones_t; // Maps room/scene indices to their corresponding virtual actor collections. @@ -62,6 +61,10 @@ struct SfxRecord { std::shared_ptr resource; }; +struct A11yID { + uint64_t id; +}; + class AudioGlossaryData { public: AccessibleActorList_t accessibleActorList; @@ -78,7 +81,6 @@ class ActorAccessibility { bool isOn = false; uint64_t nextActorID = 0; SupportedActors_t supportedActors; - TrackedActors_t trackedActors; AccessibleActorList_t accessibleActorList; AudioGlossaryData* glossary; VAZones_t vaZones; @@ -220,17 +222,15 @@ void ActorAccessibility_TrackNewActor(Actor* actor) { accessibleActor.aimFramesSinceAimAssist = 255; accessibleActor.aimFrequency = 10; - aa->trackedActors[actor] = accessibleActor.instanceID; + ObjectExtension::GetInstance().Set(actor, A11yID{ .id = accessibleActor.instanceID }); aa->accessibleActorList[accessibleActor.instanceID] = accessibleActor; } void ActorAccessibility_RemoveTrackedActor(Actor* actor) { - TrackedActors_t::iterator i = aa->trackedActors.find(actor); - if (i == aa->trackedActors.end()) + const auto id = ObjectExtension::GetInstance().Get(actor); + if (id == nullptr) return; - uint64_t id = i->second; - aa->trackedActors.erase(i); - AccessibleActorList_t::iterator i2 = aa->accessibleActorList.find(id); + AccessibleActorList_t::iterator i2 = aa->accessibleActorList.find(id->id); if (i2 == aa->accessibleActorList.end()) return; ActorAccessibility_StopAllSoundsForActor(&i2->second); @@ -828,3 +828,5 @@ void ActorAccessibility_HandleSoundExtractionMode(PlayState* play) { void ActorAccessibility_DoSoundExtractionStep() { aa->sfxExtractor.captureCallback(); } + +static ObjectExtension::Register RegisterA11yID;