mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-28 04:51:42 +00:00
Remove teleporting jank from springs, set angle when going directly against a horizontal/diagonal spring
This commit is contained in:
parent
abfc1915c5
commit
55caae6d1a
1 changed files with 27 additions and 12 deletions
39
src/p_map.c
39
src/p_map.c
|
|
@ -113,12 +113,13 @@ boolean P_TeleportMove(mobj_t *thing, fixed_t x, fixed_t y, fixed_t z)
|
||||||
// MOVEMENT ITERATOR FUNCTIONS
|
// MOVEMENT ITERATOR FUNCTIONS
|
||||||
// =========================================================================
|
// =========================================================================
|
||||||
|
|
||||||
|
//#define TELEPORTJANK
|
||||||
|
|
||||||
boolean P_DoSpring(mobj_t *spring, mobj_t *object)
|
boolean P_DoSpring(mobj_t *spring, mobj_t *object)
|
||||||
{
|
{
|
||||||
//INT32 pflags;
|
//INT32 pflags;
|
||||||
const fixed_t hscale = mapobjectscale + (mapobjectscale - object->scale);
|
const fixed_t hscale = mapobjectscale + (mapobjectscale - object->scale);
|
||||||
const fixed_t vscale = mapobjectscale + (object->scale - mapobjectscale);
|
const fixed_t vscale = mapobjectscale + (object->scale - mapobjectscale);
|
||||||
fixed_t offx, offy;
|
|
||||||
fixed_t vertispeed = spring->info->mass;
|
fixed_t vertispeed = spring->info->mass;
|
||||||
fixed_t horizspeed = spring->info->damage;
|
fixed_t horizspeed = spring->info->damage;
|
||||||
|
|
||||||
|
|
@ -142,11 +143,13 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object)
|
||||||
object->eflags |= MFE_SPRUNG; // apply this flag asap!
|
object->eflags |= MFE_SPRUNG; // apply this flag asap!
|
||||||
spring->flags &= ~(MF_SOLID|MF_SPECIAL); // De-solidify
|
spring->flags &= ~(MF_SOLID|MF_SPECIAL); // De-solidify
|
||||||
|
|
||||||
|
#ifdef TELEPORTJANK
|
||||||
if (horizspeed && vertispeed) // Mimic SA
|
if (horizspeed && vertispeed) // Mimic SA
|
||||||
{
|
{
|
||||||
object->momx = object->momy = 0;
|
object->momx = object->momy = 0;
|
||||||
P_TryMove(object, spring->x, spring->y, true);
|
P_TryMove(object, spring->x, spring->y, true);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (spring->eflags & MFE_VERTICALFLIP)
|
if (spring->eflags & MFE_VERTICALFLIP)
|
||||||
vertispeed *= -1;
|
vertispeed *= -1;
|
||||||
|
|
@ -155,8 +158,11 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object)
|
||||||
object->z = spring->z + spring->height + 1;
|
object->z = spring->z + spring->height + 1;
|
||||||
else if (vertispeed < 0)
|
else if (vertispeed < 0)
|
||||||
object->z = spring->z - object->height - 1;
|
object->z = spring->z - object->height - 1;
|
||||||
|
#ifdef TELEPORTJANK
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
fixed_t offx, offy;
|
||||||
|
|
||||||
// Horizontal springs teleport you in FRONT of them.
|
// Horizontal springs teleport you in FRONT of them.
|
||||||
object->momx = object->momy = 0;
|
object->momx = object->momy = 0;
|
||||||
|
|
||||||
|
|
@ -178,6 +184,7 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object)
|
||||||
// Set position!
|
// Set position!
|
||||||
P_TryMove(object, spring->x + offx, spring->y + offy, true);
|
P_TryMove(object, spring->x + offx, spring->y + offy, true);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (vertispeed)
|
if (vertispeed)
|
||||||
object->momz = FixedMul(vertispeed,FixedSqrt(FixedMul(vscale, spring->scale)));
|
object->momz = FixedMul(vertispeed,FixedSqrt(FixedMul(vscale, spring->scale)));
|
||||||
|
|
@ -208,20 +215,28 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object)
|
||||||
if (spring->flags & MF_ENEMY) // Spring shells
|
if (spring->flags & MF_ENEMY) // Spring shells
|
||||||
P_SetTarget(&spring->target, object);
|
P_SetTarget(&spring->target, object);
|
||||||
|
|
||||||
if (horizspeed && object->player->cmd.forwardmove == 0 && object->player->cmd.sidemove == 0)
|
if (horizspeed)
|
||||||
{
|
{
|
||||||
object->angle = spring->angle;
|
const angle_t turnabout = ANGLE_90+ANGLE_45;
|
||||||
|
angle_t dangle = object->angle - spring->angle;
|
||||||
|
if (dangle > ANGLE_180)
|
||||||
|
dangle = InvAngle(dangle);
|
||||||
|
|
||||||
if (!demo.playback || P_AnalogMove(object->player))
|
if (dangle > turnabout || (object->player->cmd.forwardmove == 0 && object->player->cmd.sidemove == 0))
|
||||||
{
|
{
|
||||||
if (object->player == &players[consoleplayer])
|
object->angle = spring->angle;
|
||||||
localangle[0] = spring->angle;
|
|
||||||
else if (object->player == &players[displayplayers[1]])
|
if (!demo.playback || P_AnalogMove(object->player))
|
||||||
localangle[1] = spring->angle;
|
{
|
||||||
else if (object->player == &players[displayplayers[2]])
|
if (object->player == &players[consoleplayer])
|
||||||
localangle[2] = spring->angle;
|
localangle[0] = spring->angle;
|
||||||
else if (object->player == &players[displayplayers[3]])
|
else if (object->player == &players[displayplayers[1]])
|
||||||
localangle[3] = spring->angle;
|
localangle[1] = spring->angle;
|
||||||
|
else if (object->player == &players[displayplayers[2]])
|
||||||
|
localangle[2] = spring->angle;
|
||||||
|
else if (object->player == &players[displayplayers[3]])
|
||||||
|
localangle[3] = spring->angle;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue