diff --git a/src/k_terrain.c b/src/k_terrain.c index d0f30abcb..4cd5194ba 100644 --- a/src/k_terrain.c +++ b/src/k_terrain.c @@ -501,7 +501,16 @@ void K_ProcessTerrainEffect(mobj_t *mo) if (terrain->damageType > 0) { UINT8 dmg = (terrain->damageType & 0xFF); - P_DamageMobj(mo, NULL, NULL, 1, dmg); + + if (dmg & DMG_STUMBLE) + { + if (player->mo->hitlag == 0 && (player->mo->momz >= 0) == (P_MobjFlip(player->mo) >= 0)) + K_StumblePlayer(player); + } + else + { + P_DamageMobj(mo, NULL, NULL, 1, dmg); + } } // Sneaker panel @@ -2011,7 +2020,7 @@ static boolean K_TERRAINLumpParser(char *data, size_t size) Z_Free(tkn); tkn = M_GetToken(NULL); pos = M_GetTokenPos(); - + if (tkn && pos <= size) { if (stricmp(tkn, "optional") == 0) diff --git a/src/p_spec.c b/src/p_spec.c index 0a5483a90..bb213c467 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -5421,7 +5421,7 @@ static void P_EvaluateDamageType(player_t *player, sector_t *sector, boolean isT P_DamageMobj(player->mo, NULL, NULL, 1, DMG_INSTAKILL); break; case SD_STUMBLE: - if (isTouching && !((player->mo->momz > 0) != (P_MobjFlip(player->mo) > 0))) + if (isTouching && player->mo->hitlag == 0 && (player->mo->momz >= 0) == (P_MobjFlip(player->mo) >= 0)) { K_StumblePlayer(player); }