From c762761effe743596ff0b0e0fe3652480cba7a50 Mon Sep 17 00:00:00 2001 From: NepDisk <16447892+NepDisk@users.noreply.github.com> Date: Sat, 16 Nov 2024 21:18:06 -0500 Subject: [PATCH] Fix Spring angle Yes this is duped code but I can't be assed to figure out why the previous broke shit --- src/p_map.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/p_map.c b/src/p_map.c index f3a93ddb5..e867862c6 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -289,12 +289,11 @@ P_DoSpringEx // mass = vertical speed // damage = horizontal speed // raisestate = state to change spring to on collision -// painchance = star effect color // boolean P_DoSpring(mobj_t *spring, mobj_t *object) { - //const fixed_t hscale = mapobjectscale + (mapobjectscale - object->scale); - //const fixed_t vscale = mapobjectscale + (object->scale - mapobjectscale); + const fixed_t hscale = mapobjectscale + (mapobjectscale - object->scale); + const fixed_t vscale = mapobjectscale + (object->scale - mapobjectscale); fixed_t offx, offy; fixed_t vertispeed = spring->info->mass; fixed_t horizspeed = spring->info->damage; @@ -348,7 +347,25 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object) P_TryMove(object, spring->x + offx, spring->y + offy, true, NULL); } - P_DoSpringEx(object, mapobjectscale, vertispeed, horizspeed, spring->angle); + if (vertispeed) + object->momz = FixedMul(vertispeed,FixedSqrt(FixedMul(vscale, spring->scale))); + + if (horizspeed) + { + if (!object->player) + P_InstaThrust(object, spring->angle, FixedMul(horizspeed,FixedSqrt(FixedMul(hscale, spring->scale)))); + else + { + fixed_t finalSpeed = FixedDiv(horizspeed, hscale); + fixed_t pSpeed = object->player->speed; + + if (pSpeed > finalSpeed) + finalSpeed = pSpeed; + + P_InstaThrust(object, spring->angle, FixedMul(finalSpeed,FixedSqrt(FixedMul(hscale, spring->scale)))); + } + } + // Re-solidify spring->flags |= (spring->info->flags & (MF_SPECIAL|MF_SOLID)); @@ -374,7 +391,6 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object) return true; } - static void P_DoFanAndGasJet(mobj_t *spring, mobj_t *object) { player_t *p = object->player; // will be NULL if not a player