"Fake rollangle" rotating

This commit is contained in:
yamamama 2026-03-03 09:27:50 -05:00
parent afacf55067
commit 3880139feb
6 changed files with 14 additions and 2 deletions

View file

@ -5143,7 +5143,7 @@ static void HWR_ProjectSprite(mobj_t *thing)
INT32 flipsign = ((flip && papersprite) ? -1 : 1); // Flip OGL affine papersprites for Software parity
angle = spriterotangle * flipsign;
angle = R_ConvToRollAngle(spriterotangle) * flipsign;
const fixed_t rolloffs_x = FixedDiv(interptarg->rollingxoffset, highresscale) * (((thing->renderflags & RF_FLIPOFFSETS) && flip) ? -1 : 1);
const fixed_t rolloffs_y = FixedDiv(interptarg->rollingyoffset, highresscale);

View file

@ -197,6 +197,8 @@ consvar_t cv_sliptidetilt = CVAR_INIT ("sliptidetilt", "On", CV_SAVE, CV_OnOff,
consvar_t cv_nulldriftefx = CVAR_INIT ("nulldriftefx", "On", CV_SAVE, CV_OnOff, NULL);
consvar_t cv_nulldrifttilt = CVAR_INIT ("nulldrifttilt", "On", CV_SAVE, CV_OnOff, NULL);
consvar_t cv_fakerollangle = CVAR_INIT ("fakerollangle", "Off", CV_SAVE, CV_OnOff, NULL);
static CV_PossibleValue_t affineangle_cons_t[] = {{0, "MIN"}, {360 * FRACUNIT, "MAX"}, {0, NULL}};
static CV_PossibleValue_t affinetest_cons_t[] = {{0, "Off"}, {1, "On"}, {2, "Auto"}, {0, NULL}};
@ -1807,6 +1809,7 @@ void R_RegisterEngineStuff(void)
CV_RegisterVar(&cv_sliptidetilt);
CV_RegisterVar(&cv_nulldriftefx);
CV_RegisterVar(&cv_nulldrifttilt);
CV_RegisterVar(&cv_fakerollangle);
CV_RegisterVar(&cv_showhud);
CV_RegisterVar(&cv_translucenthud);

View file

@ -161,6 +161,8 @@ extern consvar_t cv_sloperoll;
extern consvar_t cv_sliptidetilt;
extern consvar_t cv_nulldriftefx, cv_nulldrifttilt;
extern consvar_t cv_fakerollangle;
// debugging
typedef enum {

View file

@ -58,6 +58,7 @@ vector2_t* R_RotateSpriteOffsetsByPitchRoll(
interpmobjstate_t *interp,
vector2_t* out,
vector2_t* rolloffs);
angle_t R_ConvToRollAngle(angle_t ang);
#endif
#ifdef __cplusplus

View file

@ -147,6 +147,12 @@ INT32 R_GetRollAngle(angle_t rollangle)
#define VISROTMUL (ANG1 * ROTANGDIFF)
// Simulates "rollangle" angling
angle_t R_ConvToRollAngle(angle_t ang)
{
return (cv_fakerollangle.value) ? (R_GetRollAngle(ang) * VISROTMUL) : ang;
}
vector2_t* R_RotateSpriteOffsetsByPitchRoll(
mobj_t* mobj,
boolean vflip,

View file

@ -2326,7 +2326,7 @@ static void R_ProjectSprite(mobj_t *thing)
INT32 flipsign = ((flip) ? -1 : 1);
angle = spriterotangle * flipsign;
angle = R_ConvToRollAngle(spriterotangle) * flipsign;
const fixed_t rolloffs_x = FixedDiv(interptarg->rollingxoffset, highresscale) * (((thing->renderflags & RF_FLIPOFFSETS) && flip) ? -1 : 1);
const fixed_t rolloffs_y = FixedDiv(interptarg->rollingyoffset, highresscale);