diff --git a/src/p_mobj.c b/src/p_mobj.c index 4c5eeb34f..645faf3ac 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -9821,6 +9821,15 @@ static boolean P_MobjRegularThink(mobj_t *mobj) mobj->flags = MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOCLIPTHING|MF_NOGRAVITY|MF_DONTENCOREMAP; mobj->extravalue1 = 1; + // Mash speed limit + UINT8 MASHPWR = TICRATE/2; // Amount to deduct from timer when mashing + UINT8 MAXMASHFREQUENCY = 6; // Nerf fast mashing: allow optimal decay with X inputs per second + + UINT8 ticsbetweenmashing = TICRATE/MAXMASHFREQUENCY; + UINT8 decaypertic = MASHPWR / ticsbetweenmashing; + if (mobj->cusval) + mobj->cusval = max(0, mobj->cusval - decaypertic); + mobj->cvmem /= 2; mobj->momz = 0; mobj->destscale = ((8*mobj->tracer->scale)>>2) + (mobj->tracer->scale>>3); @@ -9856,7 +9865,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj) mobj->tracer->y + P_ReturnThrustY(NULL, mobj->tracer->angle+ANGLE_90, (mobj->cvmem)<tracer->z - (4*mobj->tracer->scale) + (P_RandomRange(PR_ITEM_BUBBLE, -abs(mobj->cvmem), abs(mobj->cvmem))<movecount > 4*TICRATE) + if (mobj->movecount > 7*TICRATE/2) { S_StartSound(mobj->tracer, sfx_s3k77); mobj->tracer->flags &= ~MF_NOGRAVITY; @@ -9877,8 +9886,11 @@ static boolean P_MobjRegularThink(mobj_t *mobj) if ((player->cmd.turning > 0 && lastsign < 0) || (player->cmd.turning < 0 && lastsign > 0)) { - mobj->movecount += (TICRATE/2); + // CONS_Printf("%d -> ", mobj->movecount); + mobj->movecount += MASHPWR - mobj->cusval; + // CONS_Printf("%d\n", mobj->movecount); mobj->cvmem = 8*lastsign; + mobj->cusval = MASHPWR; // Mash speed limit. S_StartSound(mobj, sfx_s3k7a); }