From 99f60544db088c2a5cf5561b74e8ab509ec823d9 Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Wed, 28 Sep 2016 16:26:29 +0100 Subject: [PATCH] Fixed various issues arising from collision with exclusively horizontal springs. Of note: * If you hold down your jump button whilst jumping into it, you no longer immediately use your ability. * Characters with CA_DOUBLEJUMP and CA2_MULTIABILITY no longer lose track of their jump count. --- src/p_map.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/p_map.c b/src/p_map.c index 765f88a7d..e6d37fa98 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -115,6 +115,7 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object) fixed_t offx, offy; fixed_t vertispeed = spring->info->mass; fixed_t horizspeed = spring->info->damage; + UINT8 jumping, secondjump; if (object->eflags & MFE_SPRUNG) // Object was already sprung this tic 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. + jumping = object->player->jumping; + secondjump = object->player->secondjump; 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); else if (P_MobjFlip(object)*vertispeed < 0) P_SetPlayerMobjState(object, S_PLAY_FALL); else // horizontal spring { 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 P_SetPlayerMobjState(object, S_PLAY_WALK); } - - if (spring->info->painchance) - { - object->player->pflags |= PF_JUMPED; - P_SetPlayerMobjState(object, S_PLAY_JUMP); - } } return true; }