From 99f60544db088c2a5cf5561b74e8ab509ec823d9 Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Wed, 28 Sep 2016 16:26:29 +0100 Subject: [PATCH 1/4] 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; } From 8445a1068e94475037829843a5297251618e4b19 Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Wed, 28 Sep 2016 16:31:14 +0100 Subject: [PATCH 2/4] attempt --- src/p_map.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_map.c b/src/p_map.c index e6d37fa98..4214f32e9 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -216,7 +216,7 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object) 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); + 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)) From f6fc99b06dce94e3064cff6c97fd8ab71da299e1 Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Fri, 30 Sep 2016 14:38:56 +0100 Subject: [PATCH 3/4] How did this disappear? --- src/p_map.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_map.c b/src/p_map.c index 8a55bcc1d..b404473d3 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -216,7 +216,7 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object) 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) + 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)) From cdaab7ec9f527f79c3c07d6cdd8ed887295a0333 Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Fri, 30 Sep 2016 16:00:34 +0100 Subject: [PATCH 4/4] * Upped speed of info.c's red and yellow horizontal springs * Turn off friction for the one tic after touching a spring --- src/info.c | 4 ++-- src/p_mobj.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/info.c b/src/info.c index 884217611..bbda94afc 100644 --- a/src/info.c +++ b/src/info.c @@ -5610,7 +5610,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 32*FRACUNIT, // height 0, // display offset 0, // mass - 16*FRACUNIT, // damage + 36*FRACUNIT, // damage sfx_None, // activesound MF_SOLID|MF_SPRING|MF_NOGRAVITY, // flags S_YHORIZ2 // raisestate @@ -5637,7 +5637,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 32*FRACUNIT, // height 0, // display offset 0, // mass - 64*FRACUNIT, // damage + 72*FRACUNIT, // damage sfx_None, // activesound MF_SOLID|MF_SPRING|MF_NOGRAVITY, // flags S_RHORIZ2 // raisestate diff --git a/src/p_mobj.c b/src/p_mobj.c index 6f655c15a..988cb2f0e 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1858,7 +1858,7 @@ static void P_XYFriction(mobj_t *mo, fixed_t oldx, fixed_t oldy) mo->momx = player->cmomx; mo->momy = player->cmomy; } - else + else if (!(mo->eflags & MFE_SPRUNG)) { if (oldx == mo->x && oldy == mo->y) // didn't go anywhere {