From 8deea762ef9f9e9d472f2275ddca36e1958ee0f7 Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Sat, 16 Aug 2025 16:07:40 +0000 Subject: [PATCH] improve movebg aim assist --- .../accessible-actors/AccessibleActorList.cpp | 13 ++++++------- .../accessible-actors/ActorAccessibility.cpp | 13 ++++++++----- .../accessible-actors/ActorAccessibility.h | 6 +++--- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/soh/soh/Enhancements/accessible-actors/AccessibleActorList.cpp b/soh/soh/Enhancements/accessible-actors/AccessibleActorList.cpp index cd44bc1db..cb30dfd3c 100644 --- a/soh/soh/Enhancements/accessible-actors/AccessibleActorList.cpp +++ b/soh/soh/Enhancements/accessible-actors/AccessibleActorList.cpp @@ -2,7 +2,6 @@ #include "soh/OTRGlobals.h" #include -#include #include #include @@ -27,7 +26,6 @@ extern "C" { #include "overlays/actors/ovl_En_Fz/z_en_fz.h" #include "overlays/actors/ovl_En_Ik/z_en_ik.h" #include "overlays/actors/ovl_En_G_Switch/z_en_g_switch.h" -#include "overlays/actors/ovl_En_Ice_Hono/z_en_ice_hono.h" #include "overlays/actors/ovl_En_Kakasi2/z_en_kakasi2.h" #include "overlays/actors/ovl_En_Wood02/z_en_wood02.h" #include "overlays/actors/ovl_En_Wonder_Item/z_en_wonder_item.h" @@ -453,11 +451,11 @@ void ActorAccessibility_InitActors() { policy.ydist = 1000; policy.aimAssist.isProvider = AIM_HOOK; ActorAccessibility_AddSupportedActor(ACTOR_OBJ_HSBLOCK, policy); - ActorAccessibility_InitPolicy(&policy, "Water Temple Hookshot Platform", [](AccessibleActor *actor) { + ActorAccessibility_InitPolicy(&policy, "Water Temple Hookshot Platform", [](AccessibleActor* actor) { if ((actor->frameCount & 31) == 0) { BgMizuMovebg* movebg = (BgMizuMovebg*)actor->actor; - if (MOVEBG_TYPE(actor->actor->params) < 4) { - actor->policy.aimAssist.isProvider = 0; + if (MOVEBG_TYPE(actor->actor->params) != 7) { + actor->policy.aimAssist.isProvider = 0; } if (movebg->sfxFlags & 1) { ActorAccessibility_PlaySoundForActor(actor, 0, NA_SE_EV_ROLL_STAND_2); @@ -469,6 +467,7 @@ void ActorAccessibility_InitActors() { }); policy.distance = 1000; policy.ydist = 1000; + policy.volume = 0.5; policy.aimAssist.isProvider = AIM_HOOK; ActorAccessibility_AddSupportedActor(ACTOR_BG_MIZU_MOVEBG, policy); ActorAccessibility_InitPolicy(&policy, "Scarecrow", NA_SE_IT_KAKASHI_JUMP); @@ -520,9 +519,9 @@ void ActorAccessibility_InitActors() { f32 zdist = fabs((player->actor.world.pos.x - actor->actor->world.pos.x) * velocityXRight + (player->actor.world.pos.z - actor->actor->world.pos.z) * velocityZRight); - if ((xdist - size / 2) < 0) { + if ((xdist - size / 2.0) < 0) { ActorAccessibility_SetSoundPitch(actor, 0, 0.5); - } else if ((xdist + size / 2) > 0 && zdist < size / 2 && xdist < 150.0) { + } else if ((xdist + size / 2.0) > 0 && zdist < size / 2.0 && xdist < 150.0) { ActorAccessibility_PlaySoundForActor(actor, 1, NA_SE_EV_DIAMOND_SWITCH); } }); diff --git a/soh/soh/Enhancements/accessible-actors/ActorAccessibility.cpp b/soh/soh/Enhancements/accessible-actors/ActorAccessibility.cpp index 5f411f7e2..9363e6b63 100644 --- a/soh/soh/Enhancements/accessible-actors/ActorAccessibility.cpp +++ b/soh/soh/Enhancements/accessible-actors/ActorAccessibility.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include #include "ActorAccessibility.h" @@ -17,7 +16,6 @@ #include "File.h" #include "soh/Enhancements/speechsynthesizer/SpeechSynthesizer.h" -#include "soh/Enhancements/tts/tts.h" #include "soh/Enhancements/game-interactor/GameInteractor.h" #include "soh/ObjectExtension/ObjectExtension.h" @@ -737,8 +735,14 @@ AimAssistProps ActorAccessibility_ProvideAimAssistForActor(AccessibleActor* acto angle = angle / -14000.0 * 16384; f32 cos_angle = Math_CosS(angle); f32 slope = cos_angle == 0.0f ? 0.0f : Math_SinS(angle) / cos_angle; - s32 yIntercept = slope * actor->xzDistToPlayer + player->actor.focus.pos.y; + f32 x = actor->pos.x, z = actor->pos.z, xzDist = actor->xzDistToPlayer; s32 yHeight = actor->pos.y + 25; + if (actor->id == ACTOR_BG_MIZU_MOVEBG) { + x += Math_SinS(actor->actor->shape.rot.y) * 50; + z += Math_CosS(actor->actor->shape.rot.y) * 50; + xzDist = sqrtf(SQ(player->actor.world.pos.x - x) + SQ(player->actor.world.pos.z - z)); + } + s32 yIntercept = slope * xzDist + player->actor.focus.pos.y; AimAssistProps aimAssistProps; if (yIntercept > yHeight + 25) { aimAssistProps.pitch = 1.5; @@ -757,8 +761,7 @@ AimAssistProps ActorAccessibility_ProvideAimAssistForActor(AccessibleActor* acto } else { actor->aimFrequency = 1 + (uint8_t)(yDiff / 5); } - s16 yawdiff = - player->yaw - Math_Atan2S(actor->pos.z - player->actor.world.pos.z, actor->pos.x - player->actor.world.pos.x); + s16 yawdiff = player->yaw - Math_Atan2S(z - player->actor.world.pos.z, 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) { diff --git a/soh/soh/Enhancements/accessible-actors/ActorAccessibility.h b/soh/soh/Enhancements/accessible-actors/ActorAccessibility.h index c5872be12..6d65e3d5c 100644 --- a/soh/soh/Enhancements/accessible-actors/ActorAccessibility.h +++ b/soh/soh/Enhancements/accessible-actors/ActorAccessibility.h @@ -23,9 +23,9 @@ struct ActorAccessibilityPolicy { s16 sound; // The ID of a sound to play. Ignored if the callback is set. bool runsAlways; // If set, then the distance policy is ignored. - int n; // How often to run the callback in frames. - f32 distance; // Maximum xz distance from player before the actor should be considered out of range. - f32 ydist; // Maximum y distance from player before the actor should be considered out of range. + u8 n; // How often to run callback in frames. + f32 distance; // Maximum xz distance from player before actor should be considered out of range. + f32 ydist; // Maximum y distance from player before actor should be considered out of range. f32 pitch; f32 volume; f32 pitchModifier;