improvements for audio glossary and compass.

This commit is contained in:
Ryanoberlein 2024-07-14 02:32:33 -04:00
commit 59ba890085
3 changed files with 53 additions and 1 deletions

View file

@ -9,6 +9,9 @@
#include <string> #include <string>
#include <float.h> #include <float.h>
#include "overlays/actors/ovl_Boss_Goma/z_boss_goma.h" #include "overlays/actors/ovl_Boss_Goma/z_boss_goma.h"
std::vector<uint32_t> 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. //Declarations specific to chests.
#include "overlays/actors/ovl_En_Box/z_en_box.h" #include "overlays/actors/ovl_En_Box/z_en_box.h"
extern "C" { extern "C" {
@ -649,6 +652,27 @@ void accessible_audio_compass(AccessibleActor* actor) {
Player* player = GET_PLAYER(actor->play); Player* player = GET_PLAYER(actor->play);
if (player->stateFlags1 & PLAYER_STATE1_TARGETING || player->stateFlags1 & PLAYER_STATE1_CLIMBING_LADDER) if (player->stateFlags1 & PLAYER_STATE1_TARGETING || player->stateFlags1 & PLAYER_STATE1_CLIMBING_LADDER)
return; 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 = player->actor.world.pos;
actor->world.pos.z -= 50; actor->world.pos.z -= 50;
@ -671,7 +695,7 @@ void accessible_audio_compass(AccessibleActor* actor) {
ActorAccessibility_PlaySoundForActor(actor, 0, actor->policy.sound, false); ActorAccessibility_PlaySoundForActor(actor, 0, actor->policy.sound, false);
data->framesUntilChime = 10; data->framesUntilChime = 10;
} }*/
} }

View file

@ -25,6 +25,7 @@ std::vector<uint32_t> buttons = { BTN_A, BTN_B, BTN_CUP, BTN_CDOWN, BTN_CLEFT,
extern "C" { extern "C" {
extern PlayState* gPlayState; extern PlayState* gPlayState;
extern bool freezeGame; extern bool freezeGame;
extern bool freezeActors;
} }
const char* GetLanguageCode(); const char* GetLanguageCode();
@ -66,6 +67,8 @@ class AudioGlossaryData {
bool GlossaryStarted = false; bool GlossaryStarted = false;
int cooldown = 0; int cooldown = 0;
int frameCount = 0; int frameCount = 0;
s16 currentScene = -1;
s8 currentRoom = -1;
}; };
class ActorAccessibility { class ActorAccessibility {
@ -466,6 +469,15 @@ int ActorAccessibility_GetRandomStartingFrameCount(int min, int max) {
aa->currentRoomLocal = ActorAccessibility_GetVirtualActorList(play->sceneNum, play->roomCtx.curRoom.num); aa->currentRoomLocal = ActorAccessibility_GetVirtualActorList(play->sceneNum, play->roomCtx.curRoom.num);
aa->currentRoom = 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) { if (player->stateFlags1 & PLAYER_STATE1_IN_CUTSCENE) {
return; return;
@ -499,7 +511,10 @@ int ActorAccessibility_GetRandomStartingFrameCount(int min, int max) {
} }
void ActorAccessibility_AudioGlossary(PlayState* play) { void ActorAccessibility_AudioGlossary(PlayState* play) {
if (aa->glossary->GlossaryStarted) { if (aa->glossary->GlossaryStarted) {
freezeActors = true;
AccessibleActor glossaryActor = (*aa->glossary->current).second; AccessibleActor glossaryActor = (*aa->glossary->current).second;
ActorAccessibility_CopyParamsFromRealActor(&glossaryActor); ActorAccessibility_CopyParamsFromRealActor(&glossaryActor);
glossaryActor.policy.distance = glossaryActor.xzDistToPlayer * 3; glossaryActor.policy.distance = glossaryActor.xzDistToPlayer * 3;
@ -518,6 +533,8 @@ int ActorAccessibility_GetRandomStartingFrameCount(int min, int max) {
if (comboStartGlossary) { if (comboStartGlossary) {
aa->glossary->GlossaryStarted = true; aa->glossary->GlossaryStarted = true;
aa->glossary->current = aa->accessibleActorList.begin(); 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()); SpeechSynthesizer::Instance->Speak((*aa->glossary->current).second.policy.englishName, GetLanguageCode());
return; return;
} }
@ -548,11 +565,14 @@ int ActorAccessibility_GetRandomStartingFrameCount(int min, int max) {
if (comboDisableGlossary) { if (comboDisableGlossary) {
aa->glossary->cooldown = 0; aa->glossary->cooldown = 0;
aa->glossary->GlossaryStarted = false; aa->glossary->GlossaryStarted = false;
freezeActors = false;
} }
// Processes external audio engine. // Processes external audio engine.
ActorAccessibility_PrepareNextAudioFrame(); ActorAccessibility_PrepareNextAudioFrame();
} }
//Virtual actor config. //Virtual actor config.
VirtualActorList* ActorAccessibility_GetVirtualActorList(s16 sceneNum, s8 roomNum) VirtualActorList* ActorAccessibility_GetVirtualActorList(s16 sceneNum, s8 roomNum)
{ {

View file

@ -77,6 +77,7 @@
#include "textures/place_title_cards/g_pn_56.h" #include "textures/place_title_cards/g_pn_56.h"
#include "textures/place_title_cards/g_pn_57.h" #include "textures/place_title_cards/g_pn_57.h"
#endif #endif
bool freezeActors= false;
static CollisionPoly* sCurCeilingPoly; static CollisionPoly* sCurCeilingPoly;
static s32 sCurCeilingBgId; static s32 sCurCeilingBgId;
@ -2509,6 +2510,8 @@ u32 D_80116068[ACTORCAT_MAX] = {
void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) { void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) {
Actor* refActor; Actor* refActor;
Actor* actor; Actor* actor;
Player* player; Player* player;
@ -2524,6 +2527,11 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) {
sp74 = NULL; sp74 = NULL;
unkFlag = 0; unkFlag = 0;
if (freezeActors) {
GameInteractor_ExecuteOnPlayerUpdate(player);
return; // for AudioGlossary
}
if (play->numSetupActors != 0) { if (play->numSetupActors != 0) {
actorEntry = &play->setupActorList[0]; actorEntry = &play->setupActorList[0];
for (i = 0; i < play->numSetupActors; i++) { for (i = 0; i < play->numSetupActors; i++) {