Allow machine skins to damage objects in dashmode

This commit is contained in:
lachwright 2019-10-23 13:41:32 +08:00
parent 7f55ee6fd9
commit a1633e9acf
3 changed files with 14 additions and 8 deletions

View file

@ -511,6 +511,10 @@ typedef struct player_s
#endif #endif
} player_t; } player_t;
// Values for dashmode
#define DASHMODE_THRESHOLD (3*TICRATE)
#define DASHMODE_MAX (DASHMODE_THRESHOLD + 3)
// Value for infinite lives // Value for infinite lives
#define INFLIVES 0x7F #define INFLIVES 0x7F

View file

@ -1096,6 +1096,9 @@ boolean P_PlayerCanDamage(player_t *player, mobj_t *thing)
// Spinning. // Spinning.
if (player->pflags & PF_SPINNING) if (player->pflags & PF_SPINNING)
return true; return true;
if (player->dashmode >= DASHMODE_THRESHOLD && player->charflags & (SF_DASHMODE|SF_MACHINE) == (SF_DASHMODE|SF_MACHINE))
return true;
// From the front. // From the front.
if (((player->pflags & PF_GLIDING) || (player->charability2 == CA2_MELEE && player->panim == PA_ABILITY2)) 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! return false; // No vacuum here, Captain!
} }
#define DASHMODE_THRESHOLD (3*TICRATE)
#define DASHMODE_MAX (DASHMODE_THRESHOLD + 3)
// //
// P_PlayerHitFloor // P_PlayerHitFloor
// //
@ -2477,7 +2477,7 @@ static void P_CheckBustableBlocks(player_t *player)
&& !(player->powers[pw_super]) && !(player->powers[pw_super])
&& !(player->charability == CA_GLIDEANDCLIMB) && !(player->charability == CA_GLIDEANDCLIMB)
&& !(player->pflags & PF_BOUNCING) && !(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->charability == CA_TWINSPIN) && (player->panim == PA_ABILITY))
&& !(player->charability2 == CA2_MELEE && player->panim == PA_ABILITY2) && !(player->charability2 == CA2_MELEE && player->panim == PA_ABILITY2)
&& !(player->pflags & PF_DRILLING) && !(player->pflags & PF_DRILLING)

View file

@ -754,8 +754,9 @@ static void R_DrawVisSprite(vissprite_t *vis)
if (!(vis->cut & SC_PRECIP) && vis->mobj->colorized) if (!(vis->cut & SC_PRECIP) && vis->mobj->colorized)
dc_translation = R_GetTranslationColormap(TC_RAINBOW, vis->mobj->color, GTC_CACHE); dc_translation = R_GetTranslationColormap(TC_RAINBOW, vis->mobj->color, GTC_CACHE);
else if (!(vis->cut & SC_PRECIP) else if (!(vis->cut & SC_PRECIP)
&& vis->mobj->player && vis->mobj->player->dashmode >= 108 && vis->mobj->player->charflags & SF_MACHINE && vis->mobj->player && vis->mobj->player->dashmode >= DASHMODE_THRESHOLD
&&((leveltime/2) & 1)) && vis->mobj->player->charflags & (SF_DASHMODE|SF_MACHINE) == (SF_DASHMODE|SF_MACHINE)
&& ((leveltime/2) & 1))
{ {
dc_translation = R_GetTranslationColormap(TC_DASHMODE, 0, GTC_CACHE); 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) if (!(vis->cut & SC_PRECIP) && vis->mobj->colorized)
dc_translation = R_GetTranslationColormap(TC_RAINBOW, vis->mobj->color, GTC_CACHE); dc_translation = R_GetTranslationColormap(TC_RAINBOW, vis->mobj->color, GTC_CACHE);
else if (!(vis->cut & SC_PRECIP) else if (!(vis->cut & SC_PRECIP)
&& vis->mobj->player && vis->mobj->player->dashmode >= 108 && vis->mobj->player->charflags & SF_MACHINE && vis->mobj->player && vis->mobj->player->dashmode >= DASHMODE_THRESHOLD
&&((leveltime/2) & 1)) && vis->mobj->player->charflags & (SF_DASHMODE|SF_MACHINE) == (SF_DASHMODE|SF_MACHINE)
&& ((leveltime/2) & 1))
{ {
dc_translation = R_GetTranslationColormap(TC_DASHMODE, 0, GTC_CACHE); dc_translation = R_GetTranslationColormap(TC_DASHMODE, 0, GTC_CACHE);
} }