Merge branch 'horizontal_fix' into 'master'

Fixes to horizontal spring collision

Fixed various issues arising from collision with exclusively horizontal springs. Thamks to @Inuyasha for the heads up! Of note:

* If you hold down your jump button whilst jumping into it, you no longer immediately use your ability.
* Characters with (CA_DOUBLEJUMP && CA2_MULTIABILITY) or CA_FLOAT or CA_HOVER no longer lose track of their jump count.

Also:

* Upped the strength of info.c's red and yellow horizontal springs.

See merge request !41
This commit is contained in:
Monster Iestyn 2016-10-07 17:28:54 -04:00
commit 303648bf3b
3 changed files with 17 additions and 11 deletions

View file

@ -5610,7 +5610,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
32*FRACUNIT, // height 32*FRACUNIT, // height
0, // display offset 0, // display offset
0, // mass 0, // mass
16*FRACUNIT, // damage 36*FRACUNIT, // damage
sfx_None, // activesound sfx_None, // activesound
MF_SOLID|MF_SPRING|MF_NOGRAVITY, // flags MF_SOLID|MF_SPRING|MF_NOGRAVITY, // flags
S_YHORIZ2 // raisestate S_YHORIZ2 // raisestate
@ -5637,7 +5637,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
32*FRACUNIT, // height 32*FRACUNIT, // height
0, // display offset 0, // display offset
0, // mass 0, // mass
64*FRACUNIT, // damage 72*FRACUNIT, // damage
sfx_None, // activesound sfx_None, // activesound
MF_SOLID|MF_SPRING|MF_NOGRAVITY, // flags MF_SOLID|MF_SPRING|MF_NOGRAVITY, // flags
S_RHORIZ2 // raisestate S_RHORIZ2 // raisestate

View file

@ -115,6 +115,7 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object)
fixed_t offx, offy; 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;
UINT8 jumping, secondjump;
if (object->eflags & MFE_SPRUNG) // Object was already sprung this tic if (object->eflags & MFE_SPRUNG) // Object was already sprung this tic
return false; return false;
@ -203,25 +204,30 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object)
} }
pflags = object->player->pflags & (PF_JUMPED|PF_SPINNING|PF_THOKKED); // I still need these. pflags = object->player->pflags & (PF_JUMPED|PF_SPINNING|PF_THOKKED); // I still need these.
jumping = object->player->jumping;
secondjump = object->player->secondjump;
P_ResetPlayer(object->player); P_ResetPlayer(object->player);
if (P_MobjFlip(object)*vertispeed > 0) if (spring->info->painchance)
{
object->player->pflags |= PF_JUMPED;
P_SetPlayerMobjState(object, S_PLAY_JUMP);
}
else if (P_MobjFlip(object)*vertispeed > 0)
P_SetPlayerMobjState(object, S_PLAY_SPRING); P_SetPlayerMobjState(object, S_PLAY_SPRING);
else if (P_MobjFlip(object)*vertispeed < 0) else if (P_MobjFlip(object)*vertispeed < 0)
P_SetPlayerMobjState(object, S_PLAY_FALL); P_SetPlayerMobjState(object, S_PLAY_FALL);
else // horizontal spring else // horizontal spring
{ {
if (pflags & (PF_JUMPED|PF_SPINNING) && (object->player->panim == PA_ROLL || object->player->panim == PA_JUMP || object->player->panim == PA_FALL)) if (pflags & (PF_JUMPED|PF_SPINNING) && (object->player->panim == PA_ROLL || object->player->panim == PA_JUMP || object->player->panim == PA_FALL))
object->player->pflags = pflags; {
object->player->pflags |= pflags;
object->player->jumping = jumping;
object->player->secondjump = secondjump;
}
else else
P_SetPlayerMobjState(object, S_PLAY_WALK); P_SetPlayerMobjState(object, S_PLAY_WALK);
} }
if (spring->info->painchance)
{
object->player->pflags |= PF_JUMPED;
P_SetPlayerMobjState(object, S_PLAY_JUMP);
}
} }
return true; return true;
} }

View file

@ -1885,7 +1885,7 @@ static void P_XYFriction(mobj_t *mo, fixed_t oldx, fixed_t oldy)
mo->momx = player->cmomx; mo->momx = player->cmomx;
mo->momy = player->cmomy; mo->momy = player->cmomy;
} }
else else if (!(mo->eflags & MFE_SPRUNG))
{ {
if (oldx == mo->x && oldy == mo->y) // didn't go anywhere if (oldx == mo->x && oldy == mo->y) // didn't go anywhere
{ {