From 3c09f41b436e86296542892c754d815bd7cad8ae Mon Sep 17 00:00:00 2001 From: Mitchell Richters <mjr4077au@gmail.com> Date: Sat, 28 Aug 2021 11:53:26 +1000 Subject: [PATCH] - Blood: Use more precision for flicker, quake and tilt effects. --- source/games/blood/src/common_game.h | 5 +++ source/games/blood/src/view.cpp | 54 +++++++++------------------- 2 files changed, 22 insertions(+), 37 deletions(-) diff --git a/source/games/blood/src/common_game.h b/source/games/blood/src/common_game.h index 30768ba05..4e5684c34 100644 --- a/source/games/blood/src/common_game.h +++ b/source/games/blood/src/common_game.h @@ -561,6 +561,11 @@ inline int QRandom2(int a1) return MulScale(qrand(), a1, 14)-a1; } +inline double QRandom2F(double a1) +{ + return MulScaleF(qrand(), a1, 14)-a1; +} + template<class T> inline void SetBitString(T *pArray, int nIndex) { diff --git a/source/games/blood/src/view.cpp b/source/games/blood/src/view.cpp index 23c6e3952..61036221b 100644 --- a/source/games/blood/src/view.cpp +++ b/source/games/blood/src/view.cpp @@ -359,43 +359,23 @@ void viewUpdateDelirium(void) void viewUpdateShake(int& cX, int& cY, int& cZ, binangle& cA, fixedhoriz& cH, double& pshakeX, double& pshakeY) { - int shakeHoriz = 0; - int shakeAngle = 0; - int shakeX = 0; - int shakeY = 0; - int shakeZ = 0; - int shakeBobX = 0; - int shakeBobY = 0; - if (gView->flickerEffect) + auto doEffect = [&](const int& effectType) { - int nValue = ClipHigh(gView->flickerEffect * 8, 2000); - shakeHoriz += QRandom2(nValue >> 8); - shakeAngle += QRandom2(nValue >> 8); - shakeX += QRandom2(nValue >> 4); - shakeY += QRandom2(nValue >> 4); - shakeZ += QRandom2(nValue); - shakeBobX += QRandom2(nValue); - shakeBobY += QRandom2(nValue); - } - if (gView->quakeEffect) - { - int nValue = ClipHigh(gView->quakeEffect * 8, 2000); - shakeHoriz += QRandom2(nValue >> 8); - shakeAngle += QRandom2(nValue >> 8); - shakeX += QRandom2(nValue >> 4); - shakeY += QRandom2(nValue >> 4); - shakeZ += QRandom2(nValue); - shakeBobX += QRandom2(nValue); - shakeBobY += QRandom2(nValue); - } - cH += buildhoriz(shakeHoriz); - cA += buildang(shakeAngle); - cX += shakeX; - cY += shakeY; - cZ += shakeZ; - pshakeX += shakeBobX; - pshakeY += shakeBobY; + if (effectType) + { + int nValue = ClipHigh(effectType * 8, 2000); + cH += buildfhoriz(QRandom2F(nValue * (1. / 256.))); + cA += buildfang(QRandom2F(nValue * (1. / 256.))); + cX += QRandom2(nValue >> 4); + cY += QRandom2(nValue >> 4); + cZ += QRandom2(nValue); + pshakeX += QRandom2F(nValue); + pshakeY += QRandom2F(nValue); + } + }; + doEffect(gView->flickerEffect); + doEffect(gView->quakeEffect); } @@ -483,7 +463,7 @@ void SetupView(int &cX, int& cY, int& cZ, binangle& cA, fixedhoriz& cH, int& nSe } viewUpdateShake(cX, cY, cZ, cA, cH, shakeX, shakeY); - cH += buildhoriz(MulScale(0x40000000 - Cos(gView->tiltEffect << 2), 30, 30)); + cH += q16horiz(xs_CRoundToInt(MulScaleF(double(0x40000000) - bcosf(gView->tiltEffect << 2, 16), 30, 14))); if (gViewPos == 0) { if (cl_viewhbob) @@ -495,7 +475,7 @@ void SetupView(int &cX, int& cY, int& cZ, binangle& cA, fixedhoriz& cH, int& nSe { cZ += bobHeight; } - cZ += xs_CRoundToInt(cH.asq16() / 6553.6); + cZ += xs_CRoundToInt(cH.asq16() * (1. / 6553.6)); cameradist = -1; cameraclock = PlayClock + MulScale(4, (int)gInterpolate, 16); }