From 99569251a80d7cc4cb19886b6c18c16742d5298b Mon Sep 17 00:00:00 2001 From: Shpoike Date: Sun, 13 Aug 2023 01:27:24 +0100 Subject: [PATCH] Don't make assumptions about framecounts in angled sprites. --- engine/client/pr_csqc.c | 4 ++-- engine/client/renderer.c | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/engine/client/pr_csqc.c b/engine/client/pr_csqc.c index 2a162bfb0..cba0e0866 100644 --- a/engine/client/pr_csqc.c +++ b/engine/client/pr_csqc.c @@ -3388,9 +3388,9 @@ static void QCBUILTIN PF_cs_spriteframe(pubprogfuncs_t *prinst, struct globalvar pspriteframe = psprite->frames[frame].frameptr; else if (psprite->frames[frame].type == SPR_ANGLED) { //just take frametime as 0-1 - int dir = frametime/8; pspritegroup = (mspritegroup_t *)psprite->frames[frame].frameptr; - pspriteframe = pspritegroup->frames[dir&7]; + i = frametime/pspritegroup->numframes; + pspriteframe = pspritegroup->frames[i%pspritegroup->numframes]; } else { diff --git a/engine/client/renderer.c b/engine/client/renderer.c index a0ed606ef..1801a0430 100644 --- a/engine/client/renderer.c +++ b/engine/client/renderer.c @@ -2518,12 +2518,14 @@ mspriteframe_t *R_GetSpriteFrame (entity_t *currententity) { float f = DotProduct(vpn,currententity->axis[0]); float r = DotProduct(vright,currententity->axis[0]); - int dir = (atan2(r, f)+1.125*M_PI)*(4/M_PI); - + float ang; pspritegroup = (mspritegroup_t *)psprite->frames[frame].frameptr; + ang = (atan2(r, f)+M_PI)/(2*M_PI); //to give 0 - 1 range + i = (ang*pspritegroup->numframes) + 0.5; + // pspriteframe = pspritegroup->frames[(int)((r_refdef.viewangles[1]-currententity->angles[1])/360*pspritegroup->numframes + 0.5-4)%pspritegroup->numframes]; //int dir = (int)((r_refdef.viewangles[1]-currententity->angles[1])/360*8 + 8 + 0.5-4)&7; - pspriteframe = pspritegroup->frames[dir&7]; + pspriteframe = pspritegroup->frames[i%pspritegroup->numframes]; } else {