mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-22 14:23:44 -07:00
hookshotable surface audio cue
This commit is contained in:
parent
deabd6844b
commit
4d19cad544
3 changed files with 70 additions and 33 deletions
|
@ -23,6 +23,7 @@ extern "C" {
|
|||
#include "overlays/actors/ovl_En_Ice_Hono/z_en_ice_hono.h"
|
||||
#include "overlays/actors/ovl_En_Eiyer/z_en_eiyer.h"
|
||||
#include "overlays/actors/ovl_En_G_Switch/z_en_g_switch.h"
|
||||
#include "overlays/actors/ovl_Door_Shutter/z_door_shutter.h"
|
||||
|
||||
void EnBox_WaitOpen(EnBox*, PlayState*);
|
||||
void EnKarebaba_DeadItemDrop(EnKarebaba*, PlayState*);
|
||||
|
@ -165,10 +166,6 @@ void accessible_larva(AccessibleActor* actor) {
|
|||
}
|
||||
}
|
||||
|
||||
void accessible_door(AccessibleActor* actor) {
|
||||
ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_OC_DOOR_OPEN, false);
|
||||
}
|
||||
|
||||
void accessible_area_change(AccessibleActor* actor) {
|
||||
Player* player = GET_PLAYER(actor->play);
|
||||
actor->policy.distance = 1500;
|
||||
|
@ -456,6 +453,7 @@ void accessible_va_general_helper(AccessibleActor* actor) {
|
|||
ActorAccessibility_AnnounceRoomNumber(actor->play);
|
||||
}
|
||||
}
|
||||
|
||||
bool accessible_audio_compass_init(AccessibleActor* actor) {
|
||||
AudioCompassData* data = (AudioCompassData*)malloc(sizeof(AudioCompassData));
|
||||
if (data == nullptr)
|
||||
|
@ -466,9 +464,11 @@ bool accessible_audio_compass_init(AccessibleActor* actor) {
|
|||
actor->userData = data;
|
||||
return true;
|
||||
}
|
||||
|
||||
void accessible_audio_compass_cleanup(AccessibleActor* actor) {
|
||||
free(actor->userData);
|
||||
}
|
||||
|
||||
void accessible_audio_compass(AccessibleActor* actor) {
|
||||
Player* player = GET_PLAYER(actor->play);
|
||||
OSContPad* trackerButtonsPressed =
|
||||
|
@ -494,6 +494,29 @@ void accessible_stick_warning(AccessibleActor* actor) {
|
|||
if (fabs(player->unk_860 - 25) < 24.0 && player->heldItemId == 0) {
|
||||
ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_SY_WARNING_COUNT_N, false);
|
||||
}
|
||||
|
||||
if (Player_HoldsHookshot(player) && player->heldActor != NULL && player->actor.scale.y >= 0.0f &&
|
||||
(player->stateFlags1 & PLAYER_STATE1_FIRST_PERSON)) {
|
||||
CollisionPoly* colPoly;
|
||||
s32 bgId;
|
||||
Vec3f hookshotEnd;
|
||||
Vec3f firstHit;
|
||||
f32 hookshotLength = ((player->heldItemAction == PLAYER_IA_HOOKSHOT) ? 380.0f : 770.0f) *
|
||||
CVarGetFloat(CVAR_CHEAT("HookshotReachMultiplier"), 1.0f);
|
||||
hookshotEnd.x = player->heldActor->world.pos.x + Math_SinS(player->heldActor->world.rot.y) *
|
||||
Math_CosS(-player->heldActor->world.rot.x) *
|
||||
hookshotLength;
|
||||
hookshotEnd.y = player->heldActor->world.pos.y + Math_SinS(-player->heldActor->world.rot.x) * hookshotLength;
|
||||
hookshotEnd.z = player->heldActor->world.pos.z + Math_CosS(player->heldActor->world.rot.y) *
|
||||
Math_CosS(-player->heldActor->world.rot.x) *
|
||||
hookshotLength;
|
||||
if (BgCheck_AnyLineTest3(&actor->play->colCtx, &player->heldActor->world.pos, &hookshotEnd, &firstHit, &colPoly,
|
||||
1, 1, 1, 1, &bgId)) {
|
||||
if (SurfaceType_IsHookshotSurface(&actor->play->colCtx, colPoly, bgId)) {
|
||||
ActorAccessibility_PlaySoundForActor(actor, 1, NA_SE_IT_HOOKSHOT_STICK_OBJ, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ActorAccessibility_InitActors() {
|
||||
|
@ -690,6 +713,14 @@ void ActorAccessibility_InitActors() {
|
|||
policy.distance = 1500;
|
||||
policy.n = 60;
|
||||
ActorAccessibility_AddSupportedActor(ACTOR_EN_PO_FIELD, policy);
|
||||
ActorAccessibility_InitPolicy(&policy, "poe puzzle", [](AccessibleActor* actor) {
|
||||
if ((actor->frameCount & 31) == 0) {
|
||||
ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_EN_PO_CRY, false);
|
||||
}
|
||||
});
|
||||
policy.aimAssist.isProvider = true;
|
||||
policy.n = 1;
|
||||
ActorAccessibility_AddSupportedActor(ACTOR_BG_PO_EVENT, policy);
|
||||
|
||||
// TODO better gerudo guard logic
|
||||
ActorAccessibility_InitPolicy(&policy, "Gerudo Guard", NA_SE_VO_NB_LAUGH);
|
||||
|
@ -713,11 +744,19 @@ void ActorAccessibility_InitActors() {
|
|||
policy.pitch = 1.2;
|
||||
ActorAccessibility_AddSupportedActor(ACTOR_BG_YDAN_SP, policy);
|
||||
|
||||
ActorAccessibility_InitPolicy(&policy, "Shutter Door", accessible_door);
|
||||
ActorAccessibility_InitPolicy(&policy, "Shutter Door", [](AccessibleActor* actor) {
|
||||
DoorShutter* doorShutter = (DoorShutter*)actor->actor;
|
||||
if (doorShutter->doorType == SHUTTER_KEY_LOCKED) {
|
||||
ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_EV_CHAIN_KEY_UNLOCK_B, false);
|
||||
} else {
|
||||
ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_OC_DOOR_OPEN, false);
|
||||
}
|
||||
});
|
||||
policy.n = 30;
|
||||
policy.distance = 1000;
|
||||
policy.pitch = 1.1;
|
||||
ActorAccessibility_AddSupportedActor(ACTOR_DOOR_SHUTTER, policy);
|
||||
ActorAccessibility_InitPolicy(&policy, "Ice Shutter Door", NA_SE_OC_DOOR_OPEN);
|
||||
ActorAccessibility_AddSupportedActor(ACTOR_BG_SPOT18_SHUTTER, policy);
|
||||
ActorAccessibility_InitPolicy(&policy, "Switch", accessible_switch);
|
||||
policy.distance = 2000;
|
||||
|
@ -779,6 +818,8 @@ void ActorAccessibility_InitActors() {
|
|||
});
|
||||
policy.distance = 1000;
|
||||
ActorAccessibility_AddSupportedActor(ACTOR_BG_YDAN_HASI, policy);
|
||||
ActorAccessibility_InitPolicy(&policy, "Po Object", [](AccessibleActor* actor) {});
|
||||
ActorAccessibility_AddSupportedActor(ACTOR_BG_PO_EVENT, policy);
|
||||
ActorAccessibility_InitPolicy(&policy, "Pot", NA_SE_EV_POT_BROKEN);
|
||||
ActorAccessibility_AddSupportedActor(ACTOR_OBJ_TSUBO, policy);
|
||||
ActorAccessibility_InitPolicy(&policy, "Platform collapsible", NA_SE_EV_BLOCK_SHAKE);
|
||||
|
@ -940,7 +981,7 @@ void ActorAccessibility_InitActors() {
|
|||
policy.pitch = 1.1;
|
||||
policy.distance = 1000;
|
||||
ActorAccessibility_AddSupportedActor(VA_DOOR, policy);
|
||||
|
||||
ActorAccessibility_AddSupportedActor(ACTOR_EN_DOOR, policy);
|
||||
ActorAccessibility_InitPolicy(&policy, "Area Change", accessible_area_change);
|
||||
policy.n = 60;
|
||||
policy.distance = 100000;
|
||||
|
@ -975,22 +1016,23 @@ void ActorAccessibility_InitActors() {
|
|||
|
||||
// Now query a list of virtual actors for a given location (scene and room number).
|
||||
VirtualActorList* list = (VirtualActorList*)ActorAccessibility_GetVirtualActorList(EVERYWHERE, 0);
|
||||
AccessibleActor* temp;
|
||||
|
||||
// Now place the actor.
|
||||
ActorAccessibility_AddVirtualActor(list, VA_GENERAL_HELPER, { { 0.0, 0.0, 0.0 }, { 0, 0, 0 } });
|
||||
ActorAccessibility_AddVirtualActor(list, VA_AUDIO_COMPASS, { { 0.0, 0.0, 0.0 }, { 0, 0, 0 } });
|
||||
ActorAccessibility_AddVirtualActor(list, VA_STICK_WARNING, { { 0.0, 0.0, 0.0 }, { 0, 0, 0 } });
|
||||
ActorAccessibility_AddVirtualActor(list, VA_GENERAL_HELPER, { { 0, 0, 0 }, { 0, 0, 0 } });
|
||||
ActorAccessibility_AddVirtualActor(list, VA_AUDIO_COMPASS, { { 0, 0, 0 }, { 0, 0, 0 } });
|
||||
ActorAccessibility_AddVirtualActor(list, VA_STICK_WARNING, { { 0, 0, 0 }, { 0, 0, 0 } });
|
||||
|
||||
list = ActorAccessibility_GetVirtualActorList(SCENE_KOKIRI_FOREST, 0);
|
||||
ActorAccessibility_AddVirtualActor(list, VA_CRAWLSPACE, { { -784.0, 120.0, 1046.00 }, { 0, 14702, 0 } });
|
||||
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 2146.5, 1.0, -142.8 } });
|
||||
ActorAccessibility_AddVirtualActor(list, VA_CRAWLSPACE, { { -784, 120, 1046 }, { 0, 14702, 0 } });
|
||||
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 2146, 1, -142.8 } });
|
||||
|
||||
// Kokiri Forest Room with boulder and kokiri sword
|
||||
list = ActorAccessibility_GetVirtualActorList(SCENE_KOKIRI_FOREST, 2);
|
||||
ActorAccessibility_AddVirtualActor(list, VA_CRAWLSPACE, { { -788.0, 120.0, 1392.00 }, { 0, 14702, 0 } });
|
||||
ActorAccessibility_AddVirtualActor(list, VA_CRAWLSPACE, { { -788, 120, 1392 }, { 0, 14702, 0 } });
|
||||
|
||||
list = ActorAccessibility_GetVirtualActorList(SCENE_LOST_WOODS, 1);
|
||||
AccessibleActor* temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1348.0, 25.0, -25.00 } });
|
||||
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1348, 25, -25 } });
|
||||
temp->policy.aimAssist.isProvider = true;
|
||||
temp->policy.distance = 700;
|
||||
temp->policy.n = 1;
|
||||
|
@ -1003,8 +1045,8 @@ void ActorAccessibility_InitActors() {
|
|||
ActorAccessibility_AddVirtualActor(list, VA_CRAWLSPACE, { { -1209, -820.0, 3.5 } });
|
||||
|
||||
list = ActorAccessibility_GetVirtualActorList(SCENE_DEKU_TREE, 3); // basement 1 lobby
|
||||
ActorAccessibility_AddVirtualActor(list, VA_CRAWLSPACE, { { -901, -820.0, 0.5 } });
|
||||
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { -181.761, -905.0, -28.3 } });
|
||||
ActorAccessibility_AddVirtualActor(list, VA_CRAWLSPACE, { { -901, -820, 0.5 } });
|
||||
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { -181.76, -905, -28.3 } });
|
||||
|
||||
list = ActorAccessibility_GetVirtualActorList(SCENE_DODONGOS_CAVERN, 2); // dodongo bombflower stairs room
|
||||
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { -1958, 20, -1297 } });
|
||||
|
|
|
@ -146,16 +146,14 @@ void ActorAccessibility_Shutdown() {
|
|||
ActorAccessibility_ShutdownAudio();
|
||||
delete aa;
|
||||
}
|
||||
void ActorAccessibility_InitPolicy(ActorAccessibilityPolicy* policy, const char* englishName,
|
||||
ActorAccessibilityCallback callback) {
|
||||
policy->callback = callback;
|
||||
|
||||
void ActorAccessibility_InitPolicy(ActorAccessibilityPolicy* policy, const char* englishName) {
|
||||
policy->distance = 500;
|
||||
policy->ydist = 80;
|
||||
policy->englishName = englishName;
|
||||
policy->n = 20;
|
||||
policy->pitch = 1.5;
|
||||
policy->runsAlways = false;
|
||||
policy->sound = 0;
|
||||
policy->volume = 1.0;
|
||||
policy->initUserData = NULL;
|
||||
policy->cleanupUserData = NULL;
|
||||
|
@ -165,22 +163,17 @@ void ActorAccessibility_InitPolicy(ActorAccessibilityPolicy* policy, const char*
|
|||
policy->aimAssist.tolerance = 0.0;
|
||||
}
|
||||
|
||||
void ActorAccessibility_InitPolicy(ActorAccessibilityPolicy* policy, const char* englishName,
|
||||
ActorAccessibilityCallback callback) {
|
||||
policy->callback = callback;
|
||||
policy->sound = 0;
|
||||
ActorAccessibility_InitPolicy(policy, englishName);
|
||||
}
|
||||
|
||||
void ActorAccessibility_InitPolicy(ActorAccessibilityPolicy* policy, const char* englishName, s16 sfx) {
|
||||
policy->callback = nullptr;
|
||||
policy->distance = 500;
|
||||
policy->ydist = 80;
|
||||
policy->englishName = englishName;
|
||||
policy->n = 20;
|
||||
policy->pitch = 1.5;
|
||||
policy->runsAlways = false;
|
||||
policy->sound = sfx;
|
||||
policy->volume = 1.0;
|
||||
policy->initUserData = NULL;
|
||||
policy->cleanupUserData = NULL;
|
||||
policy->pitchModifier = 0.1;
|
||||
policy->aimAssist.isProvider = false;
|
||||
policy->aimAssist.sfx = NA_SE_SY_HITPOINT_ALARM;
|
||||
policy->aimAssist.tolerance = 0.0;
|
||||
ActorAccessibility_InitPolicy(policy, englishName);
|
||||
}
|
||||
|
||||
void ActorAccessibility_AddSupportedActor(s16 type, ActorAccessibilityPolicy policy) {
|
||||
|
@ -191,8 +184,9 @@ ActorAccessibilityPolicy* ActorAccessibility_GetPolicyForActor(s16 type) {
|
|||
SupportedActors_t::iterator i = aa->supportedActors.find(type);
|
||||
if (i == aa->supportedActors.end())
|
||||
return NULL;
|
||||
return &(i->second);
|
||||
return &i->second;
|
||||
}
|
||||
|
||||
int ActorAccessibility_GetRandomStartingFrameCount(int min, int max) {
|
||||
static std::mt19937 gen;
|
||||
std::uniform_int_distribution<> dist(min, max);
|
||||
|
|
|
@ -88,6 +88,7 @@ struct AimAssistProps {
|
|||
void ActorAccessibility_Init();
|
||||
void ActorAccessibility_InitActors();
|
||||
void ActorAccessibility_Shutdown();
|
||||
void ActorAccessibility_InitPolicy(ActorAccessibilityPolicy* policy, const char* englishName);
|
||||
void ActorAccessibility_InitPolicy(ActorAccessibilityPolicy* policy, const char* englishName,
|
||||
ActorAccessibilityCallback callback);
|
||||
void ActorAccessibility_InitPolicy(ActorAccessibilityPolicy* policy, const char* englishName, s16 sfx);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue