diff --git a/src/d_player.h b/src/d_player.h index ff8c31203..9e83cecaf 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -511,6 +511,10 @@ typedef struct player_s #endif } player_t; +// Values for dashmode +#define DASHMODE_THRESHOLD (3*TICRATE) +#define DASHMODE_MAX (DASHMODE_THRESHOLD + 3) + // Value for infinite lives #define INFLIVES 0x7F diff --git a/src/p_user.c b/src/p_user.c index bef3a18c3..e2101d6af 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -1096,6 +1096,9 @@ boolean P_PlayerCanDamage(player_t *player, mobj_t *thing) // Spinning. if (player->pflags & PF_SPINNING) return true; + + if (player->dashmode >= DASHMODE_THRESHOLD && player->charflags & (SF_DASHMODE|SF_MACHINE) == (SF_DASHMODE|SF_MACHINE)) + return true; // From the front. if (((player->pflags & PF_GLIDING) || (player->charability2 == CA2_MELEE && player->panim == PA_ABILITY2)) @@ -2204,9 +2207,6 @@ boolean P_InSpaceSector(mobj_t *mo) // Returns true if you are in space return false; // No vacuum here, Captain! } -#define DASHMODE_THRESHOLD (3*TICRATE) -#define DASHMODE_MAX (DASHMODE_THRESHOLD + 3) - // // P_PlayerHitFloor // @@ -2477,7 +2477,7 @@ static void P_CheckBustableBlocks(player_t *player) && !(player->powers[pw_super]) && !(player->charability == CA_GLIDEANDCLIMB) && !(player->pflags & PF_BOUNCING) - && !((player->charflags & SF_DASHMODE) && (player->dashmode >= DASHMODE_THRESHOLD)) + && !((player->charflags & (SF_DASHMODE|SF_MACHINE) == (SF_DASHMODE|SF_MACHINE)) && (player->dashmode >= DASHMODE_THRESHOLD)) && !((player->charability == CA_TWINSPIN) && (player->panim == PA_ABILITY)) && !(player->charability2 == CA2_MELEE && player->panim == PA_ABILITY2) && !(player->pflags & PF_DRILLING) diff --git a/src/r_things.c b/src/r_things.c index 3233e9650..5fa97844a 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -754,8 +754,9 @@ static void R_DrawVisSprite(vissprite_t *vis) if (!(vis->cut & SC_PRECIP) && vis->mobj->colorized) dc_translation = R_GetTranslationColormap(TC_RAINBOW, vis->mobj->color, GTC_CACHE); else if (!(vis->cut & SC_PRECIP) - && vis->mobj->player && vis->mobj->player->dashmode >= 108 && vis->mobj->player->charflags & SF_MACHINE - &&((leveltime/2) & 1)) + && vis->mobj->player && vis->mobj->player->dashmode >= DASHMODE_THRESHOLD + && vis->mobj->player->charflags & (SF_DASHMODE|SF_MACHINE) == (SF_DASHMODE|SF_MACHINE) + && ((leveltime/2) & 1)) { dc_translation = R_GetTranslationColormap(TC_DASHMODE, 0, GTC_CACHE); } @@ -781,8 +782,9 @@ static void R_DrawVisSprite(vissprite_t *vis) if (!(vis->cut & SC_PRECIP) && vis->mobj->colorized) dc_translation = R_GetTranslationColormap(TC_RAINBOW, vis->mobj->color, GTC_CACHE); else if (!(vis->cut & SC_PRECIP) - && vis->mobj->player && vis->mobj->player->dashmode >= 108 && vis->mobj->player->charflags & SF_MACHINE - &&((leveltime/2) & 1)) + && vis->mobj->player && vis->mobj->player->dashmode >= DASHMODE_THRESHOLD + && vis->mobj->player->charflags & (SF_DASHMODE|SF_MACHINE) == (SF_DASHMODE|SF_MACHINE) + && ((leveltime/2) & 1)) { dc_translation = R_GetTranslationColormap(TC_DASHMODE, 0, GTC_CACHE); }