diff --git a/src/info.c b/src/info.c index c73a5798f..420bbdb67 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_map.c b/src/p_map.c index f32e319ec..24bb32b41 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; } diff --git a/src/p_mobj.c b/src/p_mobj.c index 155045637..07e5bd029 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1885,7 +1885,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 {