From a7ac7b7418bd01fd1fbcdfbb59be69a4e17af73a Mon Sep 17 00:00:00 2001 From: Arceveti <73617174+Arceveti@users.noreply.github.com> Date: Tue, 26 Oct 2021 13:23:38 -0700 Subject: [PATCH] Add BACKWARDS_CONTROLS_FIX --- include/config/config_movement.h | 9 ++++++--- src/game/mario_actions_moving.c | 19 ++++++++++++------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/include/config/config_movement.h b/include/config/config_movement.h index 78b59af32..18cc1f05f 100644 --- a/include/config/config_movement.h +++ b/include/config/config_movement.h @@ -15,6 +15,9 @@ // This can happen when sliding backwards off a slope onto a floor. //#define GROUND_SPEED_FLIP +// Flips analog stick direction when moving backwards +#define BACKWARDS_CONTROLS_FIX + // Improved hanging: // - Doesn't require holding down the A button // - Percise turning control @@ -90,6 +93,6 @@ // -- Compatibility safeguards. Don't mess with these unless you know what you're doing. -- -#ifdef GROUND_TURNING_AROUND_FIX -#undef GROUND_TURN_FIX -#endif // GROUND_TURNING_AROUND_FIX +// #ifdef GROUND_TURNING_AROUND_FIX +// #undef GROUND_TURN_FIX +// #endif // GROUND_TURNING_AROUND_FIX diff --git a/src/game/mario_actions_moving.c b/src/game/mario_actions_moving.c index 8ad6e3026..d5004b337 100644 --- a/src/game/mario_actions_moving.c +++ b/src/game/mario_actions_moving.c @@ -450,22 +450,27 @@ void update_walking_speed(struct MarioState *m) { } #endif +#ifdef BACKWARDS_CONTROLS_FIX + s16 targetYaw = ((m->forwardVel < 0.0f) ? (m->intendedYaw + 0x8000) : m->intendedYaw); +#else + s16 targetYaw = m->intendedYaw; +#endif #ifdef GROUND_TURN_FIX if ((m->heldObj == NULL) && !(m->action & ACT_FLAG_SHORT_HITBOX)) { if (m->forwardVel >= 16.0f) { - s16 turnRange = abs_angle_diff(m->faceAngle[1], m->intendedYaw); + s16 turnRange = abs_angle_diff(m->faceAngle[1], targetYaw); f32 fac = (m->forwardVel + m->intendedMag); turnRange *= (1.0f - (CLAMP(fac, 0.0f, 32.0f) / 32.0f)); turnRange = MAX(turnRange, 0x800); - approach_angle_bool(&m->faceAngle[1], m->intendedYaw, turnRange); + approach_angle_bool(&m->faceAngle[1], targetYaw, turnRange); } else { - m->faceAngle[1] = m->intendedYaw; + m->faceAngle[1] = targetYaw; } } else { - approach_angle_bool(&m->faceAngle[1], m->intendedYaw, 0x800); + approach_angle_bool(&m->faceAngle[1], targetYaw, 0x800); } #else - approach_angle_bool(&m->faceAngle[1], m->intendedYaw, 0x800); + approach_angle_bool(&m->faceAngle[1], targetYaw, 0x800); #endif apply_slope_accel(m); } @@ -763,9 +768,9 @@ s32 act_walking(struct MarioState *m) { return begin_braking_action(m); } #ifdef GROUND_TURNING_AROUND_FIX - if (analog_stick_held_back(m)) { + if (analog_stick_held_back(m) && (m->forwardVel >= 0.0f)) { #else - if (analog_stick_held_back(m) && m->forwardVel >= 16.0f) { + if (analog_stick_held_back(m) && (m->forwardVel >= 16.0f)) { #endif return set_mario_action(m, ACT_TURNING_AROUND, 0); }