mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-20 21:33:40 -07:00
improvements for audio glossary and compass.
This commit is contained in:
parent
87a5a5c4ff
commit
59ba890085
3 changed files with 53 additions and 1 deletions
|
@ -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;
|
||||||
|
|
||||||
}
|
}*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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++) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue