Beacon for Master Sword pedestal. Don't store direction on beacons

This commit is contained in:
Demur Rumed 2025-06-01 16:50:14 +00:00
commit ec4cd23940
4 changed files with 93 additions and 158 deletions

View file

@ -218,7 +218,7 @@ void accessible_area_change(AccessibleActor* actor) {
if (actor->play->sceneNum == 91 && gSaveContext.entranceIndex != 1504 && gSaveContext.entranceIndex != 1246) { if (actor->play->sceneNum == 91 && gSaveContext.entranceIndex != 1504 && gSaveContext.entranceIndex != 1246) {
return; return;
} }
if (actor->play->sceneNum == 85 && actor->world.pos.y < 0) { if (actor->play->sceneNum == 85 && actor->pos.y < 0) {
ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_EV_HORSE_RUN_LEVEL, false); ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_EV_HORSE_RUN_LEVEL, false);
} else { } else {
ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_EV_SARIA_MELODY, false); ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_EV_SARIA_MELODY, false);
@ -458,8 +458,8 @@ void accessible_audio_compass(AccessibleActor* actor) {
AudioCompassData* data = (AudioCompassData*)actor->userData; AudioCompassData* data = (AudioCompassData*)actor->userData;
bool compassCombo = trackerButtonsPressed != nullptr && trackerButtonsPressed[0].button & BTN_DDOWN && bool compassCombo = trackerButtonsPressed != nullptr && trackerButtonsPressed[0].button & BTN_DDOWN &&
trackerButtonsPressed[0].button & BTN_L; trackerButtonsPressed[0].button & BTN_L;
actor->world.pos = player->actor.world.pos; actor->pos = player->actor.world.pos;
actor->world.pos.z -= 50; actor->pos.z -= 50;
if (data->framesUntilChime > 0) if (data->framesUntilChime > 0)
data->framesUntilChime--; data->framesUntilChime--;
@ -471,8 +471,8 @@ void accessible_audio_compass(AccessibleActor* actor) {
void accessible_stick_warning(AccessibleActor* actor) { void accessible_stick_warning(AccessibleActor* actor) {
Player* player = GET_PLAYER(actor->play); Player* player = GET_PLAYER(actor->play);
actor->world.pos = player->actor.world.pos; actor->pos = player->actor.world.pos;
actor->world.pos.z -= 50; actor->pos.z -= 50;
if (fabs(player->unk_860 - 25) < 24.0 && player->heldItemId == 0) { if (fabs(player->unk_860 - 25) < 24.0 && player->heldItemId == 0) {
ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_SY_WARNING_COUNT_N, false); ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_SY_WARNING_COUNT_N, false);
} }
@ -581,6 +581,8 @@ void ActorAccessibility_InitActors() {
policy.englishName = "Running Man"; policy.englishName = "Running Man";
ActorAccessibility_AddSupportedActor(ACTOR_EN_MM, policy); ActorAccessibility_AddSupportedActor(ACTOR_EN_MM, policy);
ActorAccessibility_AddSupportedActor(ACTOR_EN_MM2, policy); ActorAccessibility_AddSupportedActor(ACTOR_EN_MM2, policy);
policy.englishName = "Sheik";
ActorAccessibility_AddSupportedActor(ACTOR_EN_XC, policy);
policy.englishName = "Market Npc"; policy.englishName = "Market Npc";
ActorAccessibility_AddSupportedActor(ACTOR_EN_HY, policy); ActorAccessibility_AddSupportedActor(ACTOR_EN_HY, policy);
policy.englishName = "Girl Chassing Cucco"; policy.englishName = "Girl Chassing Cucco";
@ -634,7 +636,6 @@ void ActorAccessibility_InitActors() {
policy.n = 1; policy.n = 1;
policy.aimAssist.isProvider = true; policy.aimAssist.isProvider = true;
ActorAccessibility_AddSupportedActor(ACTOR_EN_KAKASI2, policy); ActorAccessibility_AddSupportedActor(ACTOR_EN_KAKASI2, policy);
ActorAccessibility_InitPolicy(&policy, "Chest", [](AccessibleActor* actor) { ActorAccessibility_InitPolicy(&policy, "Chest", [](AccessibleActor* actor) {
Player* player = GET_PLAYER(actor->play); Player* player = GET_PLAYER(actor->play);
EnBox* chest = (EnBox*)actor->actor; EnBox* chest = (EnBox*)actor->actor;
@ -1004,8 +1005,8 @@ void ActorAccessibility_InitActors() {
ActorAccessibility_InitPolicy(&policy, "Ladder/climable", [](AccessibleActor* actor) { ActorAccessibility_InitPolicy(&policy, "Ladder/climable", [](AccessibleActor* actor) {
Player* player = GET_PLAYER(actor->play); Player* player = GET_PLAYER(actor->play);
f32 waterLoc = player->actor.yDistToWater + player->actor.world.pos.y; f32 waterLoc = player->actor.yDistToWater + player->actor.world.pos.y;
if (actor->world.pos.y < waterLoc) { if (actor->pos.y < waterLoc) {
actor->world.pos.y = waterLoc; actor->pos.y = waterLoc;
} }
if (actor->yDistToPlayer < 80) if (actor->yDistToPlayer < 80)
ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_PL_LAND_LADDER, false); ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_PL_LAND_LADDER, false);
@ -1051,20 +1052,20 @@ void ActorAccessibility_InitActors() {
AccessibleActor* temp; AccessibleActor* temp;
// Now place the actor. // Now place the actor.
ActorAccessibility_AddVirtualActor(list, VA_GENERAL_HELPER, { { 0, 0, 0 }, { 0, 0, 0 } }); ActorAccessibility_AddVirtualActor(list, VA_GENERAL_HELPER, { 0, 0, 0 });
ActorAccessibility_AddVirtualActor(list, VA_AUDIO_COMPASS, { { 0, 0, 0 }, { 0, 0, 0 } }); ActorAccessibility_AddVirtualActor(list, VA_AUDIO_COMPASS, { 0, 0, 0 });
ActorAccessibility_AddVirtualActor(list, VA_STICK_WARNING, { { 0, 0, 0 }, { 0, 0, 0 } }); ActorAccessibility_AddVirtualActor(list, VA_STICK_WARNING, { 0, 0, 0 });
list = ActorAccessibility_GetVirtualActorList(SCENE_KOKIRI_FOREST, 0); list = ActorAccessibility_GetVirtualActorList(SCENE_KOKIRI_FOREST, 0);
ActorAccessibility_AddVirtualActor(list, VA_CRAWLSPACE, { { -784, 120, 1046 }, { 0, 14702, 0 } }); ActorAccessibility_AddVirtualActor(list, VA_CRAWLSPACE, { -784, 120, 1046 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 2146, 1, -142.8 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 2146, 1, -142.8 });
// Kokiri Forest Room with boulder and kokiri sword // Kokiri Forest Room with boulder and kokiri sword
list = ActorAccessibility_GetVirtualActorList(SCENE_KOKIRI_FOREST, 2); list = ActorAccessibility_GetVirtualActorList(SCENE_KOKIRI_FOREST, 2);
ActorAccessibility_AddVirtualActor(list, VA_CRAWLSPACE, { { -788, 120, 1392 }, { 0, 14702, 0 } }); ActorAccessibility_AddVirtualActor(list, VA_CRAWLSPACE, { -788, 120, 1392 });
list = ActorAccessibility_GetVirtualActorList(SCENE_LOST_WOODS, 1); list = ActorAccessibility_GetVirtualActorList(SCENE_LOST_WOODS, 1);
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1348, 25, -25 } }); temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1348, 25, -25 });
temp->policy.aimAssist.isProvider = true; temp->policy.aimAssist.isProvider = true;
temp->policy.distance = 700; temp->policy.distance = 700;
temp->policy.n = 1; temp->policy.n = 1;
@ -1074,105 +1075,111 @@ void ActorAccessibility_InitActors() {
list = ActorAccessibility_GetVirtualActorList(SCENE_DEKU_TREE, 10); // deku tree compass room list = ActorAccessibility_GetVirtualActorList(SCENE_DEKU_TREE, 10); // deku tree compass room
list = ActorAccessibility_GetVirtualActorList(SCENE_DEKU_TREE, 7); // bombable wall room list = ActorAccessibility_GetVirtualActorList(SCENE_DEKU_TREE, 7); // bombable wall room
ActorAccessibility_AddVirtualActor(list, VA_CRAWLSPACE, { { -1209, -820.0, 3.5 } }); ActorAccessibility_AddVirtualActor(list, VA_CRAWLSPACE, { -1209, -820.0, 3.5 });
list = ActorAccessibility_GetVirtualActorList(SCENE_DEKU_TREE, 3); // basement 1 lobby list = ActorAccessibility_GetVirtualActorList(SCENE_DEKU_TREE, 3); // basement 1 lobby
ActorAccessibility_AddVirtualActor(list, VA_CRAWLSPACE, { { -901, -820, 0.5 } }); ActorAccessibility_AddVirtualActor(list, VA_CRAWLSPACE, { -901, -820, 0.5 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { -181.76, -905, -28.3 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { -181.76, -905, -28.3 });
list = ActorAccessibility_GetVirtualActorList(SCENE_DODONGOS_CAVERN, 2); // dodongo bombflower stairs room list = ActorAccessibility_GetVirtualActorList(SCENE_DODONGOS_CAVERN, 2); // dodongo bombflower stairs room
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { -1958, 20, -1297 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { -1958, 20, -1297 });
list = ActorAccessibility_GetVirtualActorList(SCENE_JABU_JABU, 2); list = ActorAccessibility_GetVirtualActorList(SCENE_JABU_JABU, 2);
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { -260, -400, -3377 } }); // green tentacle hole temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { -260, -400, -3377 }); // green tentacle hole
temp->policy.distance = 200; temp->policy.distance = 200;
temp->policy.sound = NA_SE_EN_DAIOCTA_DEAD; temp->policy.sound = NA_SE_EN_DAIOCTA_DEAD;
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 230, -400, -3211 } }); // ruto hole temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 230, -400, -3211 }); // ruto hole
temp->policy.distance = 200; temp->policy.distance = 200;
temp->policy.sound = NA_SE_VO_RT_FALL; temp->policy.sound = NA_SE_VO_RT_FALL;
list = ActorAccessibility_GetVirtualActorList(SCENE_CASTLE_COURTYARD_GUARDS_DAY, 0); list = ActorAccessibility_GetVirtualActorList(SCENE_CASTLE_COURTYARD_GUARDS_DAY, 0);
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1734.0, 0.0, 140.514 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1734.0, 0.0, 140.514 });
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1734.0, 0.0, 140.514 } }); temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1734.0, 0.0, 140.514 });
temp->policy.pitch = 0.3; temp->policy.pitch = 0.3;
temp->policy.volume = 0.5; temp->policy.volume = 0.5;
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1040.0, 0.0, 140.514 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1040.0, 0.0, 140.514 });
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1734.0, 0.0, 140.514 } }); temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1734.0, 0.0, 140.514 });
temp->policy.pitch = 0.6; temp->policy.pitch = 0.6;
temp->policy.volume = 0.5; temp->policy.volume = 0.5;
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 230.0, 0.0, 188.514 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 230.0, 0.0, 188.514 });
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1734.0, 0.0, 140.514 } }); temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1734.0, 0.0, 140.514 });
temp->policy.pitch = 0.9; temp->policy.pitch = 0.9;
temp->policy.volume = 0.5; temp->policy.volume = 0.5;
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { -426.0, 0.0, 130.514 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { -426.0, 0.0, 130.514 });
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1734.0, 0.0, 140.514 } }); temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1734.0, 0.0, 140.514 });
temp->policy.pitch = 1.2; temp->policy.pitch = 1.2;
temp->policy.volume = 0.5; temp->policy.volume = 0.5;
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { -1206.0, 0.0, 133.514 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { -1206.0, 0.0, 133.514 });
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1734.0, 0.0, 140.514 } }); temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1734.0, 0.0, 140.514 });
temp->policy.pitch = 1.5; temp->policy.pitch = 1.5;
temp->policy.volume = 0.5; temp->policy.volume = 0.5;
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { -1571.0, 0.0, -834.514 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { -1571.0, 0.0, -834.514 });
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1734.0, 0.0, 140.514 } }); temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1734.0, 0.0, 140.514 });
temp->policy.pitch = 1.8; temp->policy.pitch = 1.8;
temp->policy.volume = 0.5; temp->policy.volume = 0.5;
list = ActorAccessibility_GetVirtualActorList(SCENE_TEMPLE_OF_TIME, 0);
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 0, 0, 0 });
temp->policy.englishName = "Master Sword Pedestal";
temp->policy.distance = 1500;
temp->policy.sound = NA_SE_PL_SWORD_CHARGE;
list = ActorAccessibility_GetVirtualActorList(SCENE_WINDMILL_AND_DAMPES_GRAVE, 0); list = ActorAccessibility_GetVirtualActorList(SCENE_WINDMILL_AND_DAMPES_GRAVE, 0);
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { -50, -530, -2300 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { -50, -530, -2300 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 25, -530, -2875 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 25, -530, -2875 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 300, -530, -3020 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 300, -530, -3020 });
list = ActorAccessibility_GetVirtualActorList(SCENE_WINDMILL_AND_DAMPES_GRAVE, 1); list = ActorAccessibility_GetVirtualActorList(SCENE_WINDMILL_AND_DAMPES_GRAVE, 1);
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 370, -500, -3430 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 370, -500, -3430 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 410, -530, -3770 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 410, -530, -3770 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 675, -570, -3930 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 675, -570, -3930 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 675, -610, -4300 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 675, -610, -4300 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 560, -600, -4500 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 560, -600, -4500 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 470, -570, -4775 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 470, -570, -4775 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 300, -570, -4910 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 300, -570, -4910 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 230, -570, -5300 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 230, -570, -5300 });
list = ActorAccessibility_GetVirtualActorList(SCENE_WINDMILL_AND_DAMPES_GRAVE, 2); list = ActorAccessibility_GetVirtualActorList(SCENE_WINDMILL_AND_DAMPES_GRAVE, 2);
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 300, -570, -5400 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 300, -570, -5400 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 500, -570, -5400 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 500, -570, -5400 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 650, -570, -5275 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 650, -570, -5275 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1200, -730, -5125 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1200, -730, -5125 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1345, -730, -4930 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1345, -730, -4930 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1560, -730, -4765 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1560, -730, -4765 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1730, -730, -4550 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1730, -730, -4550 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1940, -730, -4430 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1940, -730, -4430 });
list = ActorAccessibility_GetVirtualActorList(SCENE_WINDMILL_AND_DAMPES_GRAVE, 3); list = ActorAccessibility_GetVirtualActorList(SCENE_WINDMILL_AND_DAMPES_GRAVE, 3);
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1990, -730, -4185 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1990, -730, -4185 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1800, -730, -3950 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1800, -730, -3950 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1720, -730, -3850 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1720, -730, -3850 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1690, -730, -3145 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1690, -730, -3145 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1655, -668, -3035 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1655, -668, -3035 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1710, -668, -2660 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1710, -668, -2660 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 2285, -610, -2650 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 2285, -610, -2650 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 2625, -610, -2700 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 2625, -610, -2700 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 3080, -530, -2700 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 3080, -530, -2700 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 3230, -470, -2515 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 3230, -470, -2515 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 3170, -420, -2300 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 3170, -420, -2300 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 2960, -410, -2000 } }); ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 2960, -410, -2000 });
list = ActorAccessibility_GetVirtualActorList(SCENE_FOREST_TEMPLE, 15); list = ActorAccessibility_GetVirtualActorList(SCENE_FOREST_TEMPLE, 15);
// falling ceiling safe spots // falling ceiling safe spots
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 2070, -403, -3000 } }); temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 2070, -403, -3000 });
temp->policy.volume = 0.5; temp->policy.volume = 0.5;
temp->policy.distance = 1500; temp->policy.distance = 1500;
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 2150, -403, -2560 } }); temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 2150, -403, -2560 });
temp->policy.volume = 0.5; temp->policy.volume = 0.5;
temp->policy.distance = 1500; temp->policy.distance = 1500;
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 2070, -403, -3000 } }); temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 2070, -403, -3000 });
temp->policy.volume = 0.5; temp->policy.volume = 0.5;
temp->policy.distance = 1500; temp->policy.distance = 1500;
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1990, -403, -1850 } }); temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1990, -403, -1850 });
temp->policy.volume = 0.5; temp->policy.volume = 0.5;
temp->policy.distance = 1500; temp->policy.distance = 1500;
list = ActorAccessibility_GetVirtualActorList(SCENE_ICE_CAVERN, 9); list = ActorAccessibility_GetVirtualActorList(SCENE_ICE_CAVERN, 9);
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 860, 180, -2400 } }); temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 860, 180, -2400 });
temp->policy.distance = 300; temp->policy.distance = 300;
temp->policy.ydist = 100; temp->policy.ydist = 100;
temp->policy.sound = NA_SE_EV_BLOCK_SHAKE; temp->policy.sound = NA_SE_EV_BLOCK_SHAKE;

View file

@ -318,7 +318,7 @@ void ActorAccessibility_CopyParamsFromRealActor(AccessibleActor* actor) {
actor->projectedPos = actor->actor->projectedPos; actor->projectedPos = actor->actor->projectedPos;
actor->xzDistToPlayer = actor->actor->xzDistToPlayer; actor->xzDistToPlayer = actor->actor->xzDistToPlayer;
actor->isDrawn = actor->actor->isDrawn; actor->isDrawn = actor->actor->isDrawn;
actor->world = actor->actor->world; actor->pos = actor->actor->world.pos;
actor->xyzDistToPlayer = sqrtf(actor->actor->xyzDistToPlayerSq); actor->xyzDistToPlayer = sqrtf(actor->actor->xyzDistToPlayerSq);
} }
@ -339,10 +339,10 @@ void ActorAccessibility_RunAccessibilityForActor(PlayState* play, AccessibleActo
Player* player = GET_PLAYER(play); Player* player = GET_PLAYER(play);
f32 w = 0.0f; f32 w = 0.0f;
// Set actor->projectedPos. // Set actor->projectedPos.
SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, &actor->world.pos, &actor->projectedPos, &w); SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, &actor->pos, &actor->projectedPos, &w);
actor->xzDistToPlayer = Math_Vec3f_DistXZ(&actor->world.pos, &player->actor.world.pos); actor->xzDistToPlayer = Math_Vec3f_DistXZ(&actor->pos, &player->actor.world.pos);
actor->xyzDistToPlayer = Math_Vec3f_DistXYZ(&actor->world.pos, &player->actor.world.pos); actor->xyzDistToPlayer = Math_Vec3f_DistXYZ(&actor->pos, &player->actor.world.pos);
actor->yDistToPlayer = fabs((actor->world.pos.y) - (player->actor.world.pos.y)); actor->yDistToPlayer = fabs((actor->pos.y) - (player->actor.world.pos.y));
} }
if (actor->actor != NULL && fabs(actor->actor->yDistToPlayer) > actor->policy.ydist) { if (actor->actor != NULL && fabs(actor->actor->yDistToPlayer) > actor->policy.ydist) {
@ -520,7 +520,7 @@ VirtualActorList* ActorAccessibility_GetVirtualActorList(s16 sceneNum, s8 roomNu
return (VirtualActorList*)&aa->vaZones[sr.raw]; return (VirtualActorList*)&aa->vaZones[sr.raw];
} }
AccessibleActor* ActorAccessibility_AddVirtualActor(VirtualActorList* list, VIRTUAL_ACTOR_TABLE type, PosRot where) { AccessibleActor* ActorAccessibility_AddVirtualActor(VirtualActorList* list, VIRTUAL_ACTOR_TABLE type, Vec3f where) {
ActorAccessibilityPolicy* policy = ActorAccessibility_GetPolicyForActor(type); ActorAccessibilityPolicy* policy = ActorAccessibility_GetPolicyForActor(type);
if (policy == NULL) if (policy == NULL)
return NULL; return NULL;
@ -536,7 +536,7 @@ AccessibleActor* ActorAccessibility_AddVirtualActor(VirtualActorList* list, VIRT
actor.instanceID = ActorAccessibility_GetNextID(); actor.instanceID = ActorAccessibility_GetNextID();
actor.isDrawn = 1; actor.isDrawn = 1;
actor.play = NULL; actor.play = NULL;
actor.world = where; actor.pos = where;
actor.sceneIndex = 0; actor.sceneIndex = 0;
actor.managedSoundSlots = 0; actor.managedSoundSlots = 0;
actor.aimAssist.framesSinceAimAssist = 0; actor.aimAssist.framesSinceAimAssist = 0;
@ -580,15 +580,14 @@ void ActorAccessibility_PolyToVirtualActor(PlayState* play, CollisionPoly* poly,
VirtualActorList* destination) { VirtualActorList* destination) {
Vec3f polyVerts[3]; Vec3f polyVerts[3];
CollisionPoly_GetVertices(poly, play->colCtx.colHeader->vtxList, polyVerts); CollisionPoly_GetVertices(poly, play->colCtx.colHeader->vtxList, polyVerts);
PosRot where; Vec3f where;
where.pos.y = std::min(polyVerts[0].y, std::min(polyVerts[1].y, polyVerts[2].y)); where.y = std::min(polyVerts[0].y, std::min(polyVerts[1].y, polyVerts[2].y));
f32 minX = std::min(polyVerts[0].x, std::min(polyVerts[1].x, polyVerts[2].x)); f32 minX = std::min(polyVerts[0].x, std::min(polyVerts[1].x, polyVerts[2].x));
f32 maxX = std::max(polyVerts[0].x, std::max(polyVerts[1].x, polyVerts[2].x)); f32 maxX = std::max(polyVerts[0].x, std::max(polyVerts[1].x, polyVerts[2].x));
f32 minZ = std::min(polyVerts[0].z, std::min(polyVerts[1].z, polyVerts[2].z)); f32 minZ = std::min(polyVerts[0].z, std::min(polyVerts[1].z, polyVerts[2].z));
f32 maxZ = std::max(polyVerts[0].z, std::max(polyVerts[1].z, polyVerts[2].z)); f32 maxZ = std::max(polyVerts[0].z, std::max(polyVerts[1].z, polyVerts[2].z));
where.pos.x = maxX - ((maxX - minX) / 2); where.x = maxX - ((maxX - minX) / 2);
where.pos.z = maxZ - ((maxZ - minZ) / 2); where.z = maxZ - ((maxZ - minZ) / 2);
where.rot = { 0, 0, 0 };
AccessibleActor* actor = ActorAccessibility_AddVirtualActor(destination, va, where); AccessibleActor* actor = ActorAccessibility_AddVirtualActor(destination, va, where);
if (actor == NULL) if (actor == NULL)
return; return;
@ -615,7 +614,7 @@ AimAssistProps ActorAccessibility_ProvideAimAssistForActor(AccessibleActor* acto
angle = angle / -14000.0 * 16384; angle = angle / -14000.0 * 16384;
f32 slope = Math_SinS(angle) / Math_CosS(angle) * 1.0; f32 slope = Math_SinS(angle) / Math_CosS(angle) * 1.0;
s32 yIntercept = slope * actor->xzDistToPlayer + player->actor.focus.pos.y; s32 yIntercept = slope * actor->xzDistToPlayer + player->actor.focus.pos.y;
s32 yHeight = actor->world.pos.y + 25; s32 yHeight = actor->pos.y + 25;
if (slope < 1) { if (slope < 1) {
slope = 1; slope = 1;
} }
@ -638,8 +637,8 @@ AimAssistProps ActorAccessibility_ProvideAimAssistForActor(AccessibleActor* acto
} else { } else {
actor->aimAssist.frequency = 1 + (uint8_t)(yDiff / 5); actor->aimAssist.frequency = 1 + (uint8_t)(yDiff / 5);
} }
s16 yawdiff = player->yaw - Math_Atan2S(actor->world.pos.z - player->actor.world.pos.z, s16 yawdiff = player->yaw - Math_Atan2S(actor->pos.z - player->actor.world.pos.z,
actor->world.pos.x - player->actor.world.pos.x); actor->pos.x - player->actor.world.pos.x);
if (yawdiff > -0x1000 && yawdiff < 0x1000) { if (yawdiff > -0x1000 && yawdiff < 0x1000) {
aimAssistProps.volume = 1.0 - (yawdiff * yawdiff) / (float)0x2000000; aimAssistProps.volume = 1.0 - (yawdiff * yawdiff) / (float)0x2000000;
} else if (yawdiff > -0x2000 && yawdiff < 0x2000) { } else if (yawdiff > -0x2000 && yawdiff < 0x2000) {

View file

@ -51,7 +51,7 @@ struct AccessibleActor {
f32 yDistToPlayer; f32 yDistToPlayer;
f32 xzDistToPlayer; f32 xzDistToPlayer;
f32 xyzDistToPlayer; f32 xyzDistToPlayer;
PosRot world; Vec3f pos;
Vec3f projectedPos; Vec3f projectedPos;
PlayState* play; PlayState* play;
u8 isDrawn; // Do we just never play accessibility sounds for actors that aren't drawn? u8 isDrawn; // Do we just never play accessibility sounds for actors that aren't drawn?
@ -163,7 +163,7 @@ typedef enum {
// Get the list of virtual actors for a given scene and room index. // Get the list of virtual actors for a given scene and room index.
VirtualActorList* ActorAccessibility_GetVirtualActorList(s16 sceneNum, s8 roomNum); VirtualActorList* ActorAccessibility_GetVirtualActorList(s16 sceneNum, s8 roomNum);
AccessibleActor* ActorAccessibility_AddVirtualActor(VirtualActorList* list, VIRTUAL_ACTOR_TABLE type, PosRot where); AccessibleActor* ActorAccessibility_AddVirtualActor(VirtualActorList* list, VIRTUAL_ACTOR_TABLE type, Vec3f where);
// Parses the loaded seen and converts select polygons (like ladders, spikes and scene exits) into virtual actors. // Parses the loaded seen and converts select polygons (like ladders, spikes and scene exits) into virtual actors.
void ActorAccessibility_InterpretCurrentScene(PlayState* play); void ActorAccessibility_InterpretCurrentScene(PlayState* play);
// Convert a collision polygon into a virtual actor. // Convert a collision polygon into a virtual actor.

View file

@ -1379,77 +1379,6 @@ void accessible_va_terrain_cue(AccessibleActor* actor) {
state->directions[i].scan(); state->directions[i].scan();
} }
/*
void accessible_va_wall_cue(AccessibleActor* actor) {
Player* player = GET_PLAYER(actor->play);
//The virtual cue actors travel in lines relative to Link's angle.
Vec3s rot = computeRelativeAngle(player->actor.world.rot, actor->world.rot);
Vec3f velocity;
velocity.x = Math_SinS(rot.y);
velocity.z = Math_CosS(rot.y);
//Draw a line from Link's position to the max detection distance based on the configured relative angle.
Vec3f pos = player->actor.world.pos;
Vec3f headPos = player->bodyPartsPos[PLAYER_BODYPART_TORSO];
f32 headDistY = headPos.y - pos.y;
f32 step = fabs(velocity.x + velocity.z);
f32 distToTravel = detectionDistance;
CollisionPoly* poly = NULL;
Vec3f collisionResult;
s32 bgId = 0;
while (true) {
Vec3f prevPos = pos;
Vec3f prevHeadPos = headPos;
pos.x += velocity.x;
pos.y += 1;
pos.z += velocity.z;
headPos.x += velocity.x;
headPos.y += 1;
headPos.z += velocity.z;
distToTravel -= step;
f32 floorHeight = 0;
CollisionPoly tempPoly;
floorHeight = BgCheck_AnyRaycastFloor1(&actor->play->colCtx, &tempPoly, &pos);
pos.y = floorHeight;
headPos.y = floorHeight + headDistY;
if (BgCheck_AnyLineTest3(&actor->play->colCtx, &prevPos, &pos, &collisionResult, &poly, 1, 0, 0, 0, &bgId)) {
s16 wallYaw = Math_Atan2S(poly->normal.z, poly->normal.x);
CollisionPoly* headPoly = NULL;
BgCheck_AnyLineTest3(&actor->play->colCtx, &prevHeadPos, &headPos, &collisionResult, &headPoly, 1, 0, 0, 0,
&bgId);
if (headPoly != NULL)
break;
poly = NULL;
}
if (distToTravel <= 0)
break;
}
if (poly == NULL) {
//Audio_StopSfxByPosAndId(&actor->world.pos, wallCueSound);
return; // Nothing found.
}
// Move the virtual actor to the position of the discovered wall so we can use preexisting sound
// logic.
actor->world.pos = collisionResult;
framesUntilCue--;
if (framesUntilCue < 1) {
framesUntilCue = 10;
ActorAccessibility_PlaySpecialSound(actor, wallCueSound);
}
}
*/
void ActorAccessibility_InitCues() { void ActorAccessibility_InitCues() {
ActorAccessibilityPolicy policy; ActorAccessibilityPolicy policy;
ActorAccessibility_InitPolicy(&policy, "Terrain cue helper", accessible_va_terrain_cue); ActorAccessibility_InitPolicy(&policy, "Terrain cue helper", accessible_va_terrain_cue);
@ -1461,5 +1390,5 @@ void ActorAccessibility_InitCues() {
ActorAccessibility_AddSupportedActor(VA_TERRAIN_CUE, policy); ActorAccessibility_AddSupportedActor(VA_TERRAIN_CUE, policy);
VirtualActorList* list = ActorAccessibility_GetVirtualActorList(EVERYWHERE, 0); VirtualActorList* list = ActorAccessibility_GetVirtualActorList(EVERYWHERE, 0);
ActorAccessibility_AddVirtualActor(list, VA_TERRAIN_CUE, { { 0, 0, 0 }, { 0, 0, 0 } }); ActorAccessibility_AddVirtualActor(list, VA_TERRAIN_CUE, { 0, 0, 0 });
} }