diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 8175ca81a..3a7649afb 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -3115,11 +3115,15 @@ static void HWR_DrawDropShadow(mobj_t *thing, fixed_t scale) R_InterpolateMobjState(thing, FRACUNIT, &interp); } - // hitlag vibrating (todo: interp somehow?) + // hitlag vibrating if (thing->hitlag > 0 && (thing->eflags & MFE_DAMAGEHITLAG)) { - fixed_t mul = thing->hitlag * HITLAGJITTERS; + fixed_t jitters = HITLAGJITTERS; + if (R_UsingFrameInterpolation() && !paused) + jitters += (rendertimefrac / HITLAGDIV); + fixed_t mul = thing->hitlag * jitters; + // perhaps there could be a way to interp this too? if (leveltime & 1) { mul = -mul; @@ -4685,10 +4689,14 @@ static void HWR_ProjectSprite(mobj_t *thing) dispoffset = thing->dispoffset; - // hitlag vibrating (todo: interp somehow?) + // hitlag vibrating if (thing->hitlag > 0 && (thing->eflags & MFE_DAMAGEHITLAG)) { - fixed_t mul = thing->hitlag * HITLAGJITTERS; + fixed_t jitters = HITLAGJITTERS; + if (R_UsingFrameInterpolation() && !paused) + jitters += (rendertimefrac / HITLAGDIV); + + fixed_t mul = thing->hitlag * jitters; if (leveltime & 1) { diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index f190e942e..4227208bc 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -1405,7 +1405,10 @@ boolean HWR_DrawModel(gl_vissprite_t *spr) // hitlag vibrating if (spr->mobj->hitlag > 0 && (spr->mobj->eflags & MFE_DAMAGEHITLAG)) { - fixed_t mul = spr->mobj->hitlag * HITLAGJITTERS; + fixed_t jitters = HITLAGJITTERS; + if (R_UsingFrameInterpolation() && !paused) + jitters += (rendertimefrac / HITLAGDIV); + fixed_t mul = spr->mobj->hitlag * jitters; if (leveltime & 1) { diff --git a/src/k_hitlag.h b/src/k_hitlag.h index c5c0944d5..6b072c8f3 100644 --- a/src/k_hitlag.h +++ b/src/k_hitlag.h @@ -21,7 +21,8 @@ extern "C" { #endif #define MAXHITLAGTICS (30) -#define HITLAGJITTERS (FRACUNIT / 20) +#define HITLAGDIV (20) // define this so we arent using a magic number +#define HITLAGJITTERS (FRACUNIT / HITLAGDIV) #define NUM_HITLAG_STATES (9) #define NUM_HITLAG_SOUNDS (4) diff --git a/src/k_hud.cpp b/src/k_hud.cpp index 2ae43cf40..fb116eaa4 100644 --- a/src/k_hud.cpp +++ b/src/k_hud.cpp @@ -5339,7 +5339,11 @@ static void K_drawKartFirstPerson(void) // hitlag vibrating if (stplyr->mo->hitlag > 0 && (stplyr->mo->eflags & MFE_DAMAGEHITLAG)) { - fixed_t mul = stplyr->mo->hitlag * HITLAGJITTERS; + fixed_t jitters = HITLAGJITTERS; + if (R_UsingFrameInterpolation() && !paused) + jitters += (rendertimefrac / HITLAGDIV); + + fixed_t mul = stplyr->mo->hitlag * jitters; if (r_splitscreen && mul > FRACUNIT) mul = FRACUNIT; diff --git a/src/r_things.cpp b/src/r_things.cpp index af60a516b..e48650c25 100644 --- a/src/r_things.cpp +++ b/src/r_things.cpp @@ -1794,7 +1794,7 @@ static void R_ProjectSprite(mobj_t *thing) this_scale = interp.scale; - // hitlag vibrating (todo: interp somehow?) + // hitlag vibrating if (thing->hitlag > 0 && (thing->eflags & MFE_DAMAGEHITLAG)) { fixed_t mul = thing->hitlag * HITLAGJITTERS; @@ -2172,10 +2172,15 @@ static void R_ProjectSprite(mobj_t *thing) R_InterpolateMobjState(thing, FRACUNIT, &tracer_interp); } - // hitlag vibrating (todo: interp somehow?) + // hitlag vibrating if (thing->hitlag > 0 && (thing->eflags & MFE_DAMAGEHITLAG)) { - fixed_t mul = thing->hitlag * (FRACUNIT / 10); + // previous code multiplied by (FRACUNIT / 10) instead of HITLAGJITTERS, um wadaflip + fixed_t jitters = HITLAGJITTERS; + if (R_UsingFrameInterpolation() && !paused) + jitters += (rendertimefrac / HITLAGDIV); + + fixed_t mul = thing->hitlag * jitters; if (leveltime & 1) {