Add BACKWARDS_CONTROLS_FIX

This commit is contained in:
Arceveti
2021-10-26 13:23:38 -07:00
parent f4ef135126
commit a7ac7b7418
2 changed files with 18 additions and 10 deletions

View File

@@ -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

View File

@@ -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);
}