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) {
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);
} else {
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;
bool compassCombo = trackerButtonsPressed != nullptr && trackerButtonsPressed[0].button & BTN_DDOWN &&
trackerButtonsPressed[0].button & BTN_L;
actor->world.pos = player->actor.world.pos;
actor->world.pos.z -= 50;
actor->pos = player->actor.world.pos;
actor->pos.z -= 50;
if (data->framesUntilChime > 0)
data->framesUntilChime--;
@ -471,8 +471,8 @@ void accessible_audio_compass(AccessibleActor* actor) {
void accessible_stick_warning(AccessibleActor* actor) {
Player* player = GET_PLAYER(actor->play);
actor->world.pos = player->actor.world.pos;
actor->world.pos.z -= 50;
actor->pos = player->actor.world.pos;
actor->pos.z -= 50;
if (fabs(player->unk_860 - 25) < 24.0 && player->heldItemId == 0) {
ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_SY_WARNING_COUNT_N, false);
}
@ -581,6 +581,8 @@ void ActorAccessibility_InitActors() {
policy.englishName = "Running Man";
ActorAccessibility_AddSupportedActor(ACTOR_EN_MM, policy);
ActorAccessibility_AddSupportedActor(ACTOR_EN_MM2, policy);
policy.englishName = "Sheik";
ActorAccessibility_AddSupportedActor(ACTOR_EN_XC, policy);
policy.englishName = "Market Npc";
ActorAccessibility_AddSupportedActor(ACTOR_EN_HY, policy);
policy.englishName = "Girl Chassing Cucco";
@ -634,7 +636,6 @@ void ActorAccessibility_InitActors() {
policy.n = 1;
policy.aimAssist.isProvider = true;
ActorAccessibility_AddSupportedActor(ACTOR_EN_KAKASI2, policy);
ActorAccessibility_InitPolicy(&policy, "Chest", [](AccessibleActor* actor) {
Player* player = GET_PLAYER(actor->play);
EnBox* chest = (EnBox*)actor->actor;
@ -1004,8 +1005,8 @@ void ActorAccessibility_InitActors() {
ActorAccessibility_InitPolicy(&policy, "Ladder/climable", [](AccessibleActor* actor) {
Player* player = GET_PLAYER(actor->play);
f32 waterLoc = player->actor.yDistToWater + player->actor.world.pos.y;
if (actor->world.pos.y < waterLoc) {
actor->world.pos.y = waterLoc;
if (actor->pos.y < waterLoc) {
actor->pos.y = waterLoc;
}
if (actor->yDistToPlayer < 80)
ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_PL_LAND_LADDER, false);
@ -1051,20 +1052,20 @@ void ActorAccessibility_InitActors() {
AccessibleActor* temp;
// Now place the actor.
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 } });
ActorAccessibility_AddVirtualActor(list, VA_GENERAL_HELPER, { 0, 0, 0 });
ActorAccessibility_AddVirtualActor(list, VA_AUDIO_COMPASS, { 0, 0, 0 });
ActorAccessibility_AddVirtualActor(list, VA_STICK_WARNING, { 0, 0, 0 });
list = ActorAccessibility_GetVirtualActorList(SCENE_KOKIRI_FOREST, 0);
ActorAccessibility_AddVirtualActor(list, VA_CRAWLSPACE, { { -784, 120, 1046 }, { 0, 14702, 0 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 2146, 1, -142.8 } });
ActorAccessibility_AddVirtualActor(list, VA_CRAWLSPACE, { -784, 120, 1046 });
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, 120, 1392 }, { 0, 14702, 0 } });
ActorAccessibility_AddVirtualActor(list, VA_CRAWLSPACE, { -788, 120, 1392 });
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.distance = 700;
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, 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
ActorAccessibility_AddVirtualActor(list, VA_CRAWLSPACE, { { -901, -820, 0.5 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { -181.76, -905, -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 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { -1958, 20, -1297 });
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.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.sound = NA_SE_VO_RT_FALL;
list = ActorAccessibility_GetVirtualActorList(SCENE_CASTLE_COURTYARD_GUARDS_DAY, 0);
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1734.0, 0.0, 140.514 } });
temp = 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->policy.pitch = 0.3;
temp->policy.volume = 0.5;
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1040.0, 0.0, 140.514 } });
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1734.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->policy.pitch = 0.6;
temp->policy.volume = 0.5;
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 230.0, 0.0, 188.514 } });
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1734.0, 0.0, 140.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->policy.pitch = 0.9;
temp->policy.volume = 0.5;
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { -426.0, 0.0, 130.514 } });
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1734.0, 0.0, 140.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->policy.pitch = 1.2;
temp->policy.volume = 0.5;
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { -1206.0, 0.0, 133.514 } });
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1734.0, 0.0, 140.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->policy.pitch = 1.5;
temp->policy.volume = 0.5;
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { -1571.0, 0.0, -834.514 } });
temp = ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1734.0, 0.0, 140.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->policy.pitch = 1.8;
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);
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { -50, -530, -2300 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 25, -530, -2875 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 300, -530, -3020 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { -50, -530, -2300 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 25, -530, -2875 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 300, -530, -3020 });
list = ActorAccessibility_GetVirtualActorList(SCENE_WINDMILL_AND_DAMPES_GRAVE, 1);
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 370, -500, -3430 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 410, -530, -3770 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 675, -570, -3930 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 675, -610, -4300 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 560, -600, -4500 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 470, -570, -4775 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 300, -570, -4910 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 230, -570, -5300 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 370, -500, -3430 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 410, -530, -3770 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 675, -570, -3930 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 675, -610, -4300 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 560, -600, -4500 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 470, -570, -4775 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 300, -570, -4910 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 230, -570, -5300 });
list = ActorAccessibility_GetVirtualActorList(SCENE_WINDMILL_AND_DAMPES_GRAVE, 2);
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 300, -570, -5400 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 500, -570, -5400 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 650, -570, -5275 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1200, -730, -5125 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1345, -730, -4930 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1560, -730, -4765 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1730, -730, -4550 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1940, -730, -4430 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 300, -570, -5400 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 500, -570, -5400 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 650, -570, -5275 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1200, -730, -5125 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1345, -730, -4930 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1560, -730, -4765 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1730, -730, -4550 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1940, -730, -4430 });
list = ActorAccessibility_GetVirtualActorList(SCENE_WINDMILL_AND_DAMPES_GRAVE, 3);
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1990, -730, -4185 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1800, -730, -3950 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1720, -730, -3850 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1690, -730, -3145 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1655, -668, -3035 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 1710, -668, -2660 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 2285, -610, -2650 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 2625, -610, -2700 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 3080, -530, -2700 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 3230, -470, -2515 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 3170, -420, -2300 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { { 2960, -410, -2000 } });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1990, -730, -4185 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1800, -730, -3950 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1720, -730, -3850 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1690, -730, -3145 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1655, -668, -3035 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 1710, -668, -2660 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 2285, -610, -2650 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 2625, -610, -2700 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 3080, -530, -2700 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 3230, -470, -2515 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 3170, -420, -2300 });
ActorAccessibility_AddVirtualActor(list, VA_MARKER, { 2960, -410, -2000 });
list = ActorAccessibility_GetVirtualActorList(SCENE_FOREST_TEMPLE, 15);
// 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.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.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.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.distance = 1500;
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.ydist = 100;
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->xzDistToPlayer = actor->actor->xzDistToPlayer;
actor->isDrawn = actor->actor->isDrawn;
actor->world = actor->actor->world;
actor->pos = actor->actor->world.pos;
actor->xyzDistToPlayer = sqrtf(actor->actor->xyzDistToPlayerSq);
}
@ -339,10 +339,10 @@ void ActorAccessibility_RunAccessibilityForActor(PlayState* play, AccessibleActo
Player* player = GET_PLAYER(play);
f32 w = 0.0f;
// Set actor->projectedPos.
SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, &actor->world.pos, &actor->projectedPos, &w);
actor->xzDistToPlayer = Math_Vec3f_DistXZ(&actor->world.pos, &player->actor.world.pos);
actor->xyzDistToPlayer = Math_Vec3f_DistXYZ(&actor->world.pos, &player->actor.world.pos);
actor->yDistToPlayer = fabs((actor->world.pos.y) - (player->actor.world.pos.y));
SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, &actor->pos, &actor->projectedPos, &w);
actor->xzDistToPlayer = Math_Vec3f_DistXZ(&actor->pos, &player->actor.world.pos);
actor->xyzDistToPlayer = Math_Vec3f_DistXYZ(&actor->pos, &player->actor.world.pos);
actor->yDistToPlayer = fabs((actor->pos.y) - (player->actor.world.pos.y));
}
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];
}
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);
if (policy == NULL)
return NULL;
@ -536,7 +536,7 @@ AccessibleActor* ActorAccessibility_AddVirtualActor(VirtualActorList* list, VIRT
actor.instanceID = ActorAccessibility_GetNextID();
actor.isDrawn = 1;
actor.play = NULL;
actor.world = where;
actor.pos = where;
actor.sceneIndex = 0;
actor.managedSoundSlots = 0;
actor.aimAssist.framesSinceAimAssist = 0;
@ -580,15 +580,14 @@ void ActorAccessibility_PolyToVirtualActor(PlayState* play, CollisionPoly* poly,
VirtualActorList* destination) {
Vec3f polyVerts[3];
CollisionPoly_GetVertices(poly, play->colCtx.colHeader->vtxList, polyVerts);
PosRot where;
where.pos.y = std::min(polyVerts[0].y, std::min(polyVerts[1].y, polyVerts[2].y));
Vec3f where;
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 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 maxZ = std::max(polyVerts[0].z, std::max(polyVerts[1].z, polyVerts[2].z));
where.pos.x = maxX - ((maxX - minX) / 2);
where.pos.z = maxZ - ((maxZ - minZ) / 2);
where.rot = { 0, 0, 0 };
where.x = maxX - ((maxX - minX) / 2);
where.z = maxZ - ((maxZ - minZ) / 2);
AccessibleActor* actor = ActorAccessibility_AddVirtualActor(destination, va, where);
if (actor == NULL)
return;
@ -615,7 +614,7 @@ AimAssistProps ActorAccessibility_ProvideAimAssistForActor(AccessibleActor* acto
angle = angle / -14000.0 * 16384;
f32 slope = Math_SinS(angle) / Math_CosS(angle) * 1.0;
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) {
slope = 1;
}
@ -638,8 +637,8 @@ AimAssistProps ActorAccessibility_ProvideAimAssistForActor(AccessibleActor* acto
} else {
actor->aimAssist.frequency = 1 + (uint8_t)(yDiff / 5);
}
s16 yawdiff = player->yaw - Math_Atan2S(actor->world.pos.z - player->actor.world.pos.z,
actor->world.pos.x - player->actor.world.pos.x);
s16 yawdiff = player->yaw - Math_Atan2S(actor->pos.z - player->actor.world.pos.z,
actor->pos.x - player->actor.world.pos.x);
if (yawdiff > -0x1000 && yawdiff < 0x1000) {
aimAssistProps.volume = 1.0 - (yawdiff * yawdiff) / (float)0x2000000;
} else if (yawdiff > -0x2000 && yawdiff < 0x2000) {

View file

@ -51,7 +51,7 @@ struct AccessibleActor {
f32 yDistToPlayer;
f32 xzDistToPlayer;
f32 xyzDistToPlayer;
PosRot world;
Vec3f pos;
Vec3f projectedPos;
PlayState* play;
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.
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.
void ActorAccessibility_InterpretCurrentScene(PlayState* play);
// 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();
}
/*
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() {
ActorAccessibilityPolicy policy;
ActorAccessibility_InitPolicy(&policy, "Terrain cue helper", accessible_va_terrain_cue);
@ -1461,5 +1390,5 @@ void ActorAccessibility_InitCues() {
ActorAccessibility_AddSupportedActor(VA_TERRAIN_CUE, policy);
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 });
}