diff --git a/source/blood/src/common_game.h b/source/blood/src/common_game.h index e3f697399..5548625cc 100644 --- a/source/blood/src/common_game.h +++ b/source/blood/src/common_game.h @@ -27,6 +27,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "misc.h" #include "printf.h" #include "v_text.h" +#include "binaryangle.h" BEGIN_BLD_NS @@ -586,6 +587,16 @@ inline fixed_t interpolateangfix16(fixed_t a, fixed_t b, int c) return a+mulscale16(((b-a+0x4000000)&0x7ffffff)-0x4000000, c); } +inline binangle interpolateangbin(uint32_t a, uint32_t b, double c) +{ + return bamang(xs_CRoundToUInt(a + fmulscale16(b - a, c))); +} + +inline lookangle interpolateanglook(int32_t a, int32_t b, double c) +{ + return bamlook(xs_CRoundToUInt(a + fmulscale16(b - a, c))); +} + inline char Chance(int a1) { return wrand() < (a1>>1); diff --git a/source/blood/src/controls.cpp b/source/blood/src/controls.cpp index bc9405545..0a9ef722a 100644 --- a/source/blood/src/controls.cpp +++ b/source/blood/src/controls.cpp @@ -55,11 +55,11 @@ void GameInterface::GetInput(InputPacket* packet, ControlInfo* const hidInput) // Perform unsynchronised angle/horizon if not dead. if (gView->pXSprite->health != 0) { - applylook2(&pPlayer->q16ang, &pPlayer->q16look_ang, &pPlayer->q16rotscrnang, &pPlayer->spin, input.q16avel, &pPlayer->input.actions, scaleAdjust, pPlayer->posture != 0); + applylook(&pPlayer->angle, input.q16avel, &pPlayer->input.actions, scaleAdjust, pPlayer->posture != 0); sethorizon(&pPlayer->horizon.horiz, input.horz, &pPlayer->input.actions, scaleAdjust); } - playerProcessHelpers(&pPlayer->q16ang, &pPlayer->angAdjust, &pPlayer->angTarget, scaleAdjust); + pPlayer->angle.processhelpers(scaleAdjust); pPlayer->horizon.processhelpers(scaleAdjust); UpdatePlayerSpriteAngle(pPlayer); } diff --git a/source/blood/src/hudsprites.cpp b/source/blood/src/hudsprites.cpp index ca14fae03..daafcf9a8 100644 --- a/source/blood/src/hudsprites.cpp +++ b/source/blood/src/hudsprites.cpp @@ -98,7 +98,7 @@ static void viewBurnTime(int gScale) void hudDraw(PLAYER *gView, VIEW *pView, int nSectnum, double bobx, double boby, double zDelta, int basepal, double smoothratio) { - double look_anghalf = getHalfLookAng(pView->q16look_ang, gView->q16look_ang, cl_syncinput, smoothratio); + double look_anghalf = getHalfLookAng(pView->look_ang.asq16(), gView->angle.look_ang.asq16(), cl_syncinput, smoothratio); DrawCrosshair(kCrosshairTile, gView->pXSprite->health >> 4, -look_anghalf, 0, 2); diff --git a/source/blood/src/nnexts.cpp b/source/blood/src/nnexts.cpp index 80171cfec..21346231c 100644 --- a/source/blood/src/nnexts.cpp +++ b/source/blood/src/nnexts.cpp @@ -2113,7 +2113,7 @@ void useTeleportTarget(XSPRITE* pXSource, spritetype* pSprite) { if (pXSource->data2 == 1) { - if (pPlayer) pPlayer->q16ang = IntToFixed(pSource->ang); + if (pPlayer) pPlayer->angle.ang = buildang(pSource->ang); else if (isDude) xsprite[pSprite->extra].goalAng = pSprite->ang = pSource->ang; else pSprite->ang = pSource->ang; } @@ -3965,8 +3965,8 @@ bool modernTypeOperateSprite(int nSprite, spritetype* pSprite, XSPRITE* pXSprite case 9: // 73 (set player's sprite angle, TO-DO: if tx > 0, take a look on TX ID sprite) //data4 is reserved if (pXSprite->data4 != 0) break; - else if (pSprite->flags & kModernTypeFlag1) pPlayer->q16ang = IntToFixed(pSprite->ang); - else if (valueIsBetween(pXSprite->data2, -kAng360, kAng360)) pPlayer->q16ang = IntToFixed(pXSprite->data2); + else if (pSprite->flags & kModernTypeFlag1) pPlayer->angle.ang = buildang(pSprite->ang); + else if (valueIsBetween(pXSprite->data2, -kAng360, kAng360)) pPlayer->angle.ang = buildang(pXSprite->data2); break; } } diff --git a/source/blood/src/osdcmd.cpp b/source/blood/src/osdcmd.cpp index 528ab2877..70b215a05 100644 --- a/source/blood/src/osdcmd.cpp +++ b/source/blood/src/osdcmd.cpp @@ -51,7 +51,7 @@ static int osdcmd_warptocoords(CCmdFuncPtr parm) if (parm->numparms >= 4) { - pPlayer->q16ang = gView->q16ang = IntToFixed(atoi(parm->parms[3])); + pPlayer->angle.oang = gView->angle.ang = buildang(atoi(parm->parms[3])); } if (parm->numparms == 5) diff --git a/source/blood/src/player.cpp b/source/blood/src/player.cpp index ecffe74ef..64ad31b90 100644 --- a/source/blood/src/player.cpp +++ b/source/blood/src/player.cpp @@ -712,7 +712,7 @@ void playerStart(int nPlayer, int bNewLevel) pSprite->z -= bottom - pSprite->z; pSprite->pal = 11+(pPlayer->teamId&3); pPlayer->angold = pSprite->ang = pStartZone->ang; - pPlayer->q16ang = IntToFixed(pSprite->ang); + pPlayer->angle.ang = buildang(pSprite->ang); pSprite->type = kDudePlayer1+nPlayer; pSprite->clipdist = pDudeInfo->clipdist; pSprite->flags = 15; @@ -733,7 +733,7 @@ void playerStart(int nPlayer, int bNewLevel) pPlayer->restTime = 0; pPlayer->kickPower = 0; pPlayer->laughCount = 0; - pPlayer->spin = 0; + pPlayer->angle.spin = buildlook(0); pPlayer->posture = 0; pPlayer->voodooTarget = -1; pPlayer->voodooTargets = 0; @@ -1312,8 +1312,8 @@ void UpdatePlayerSpriteAngle(PLAYER *pPlayer) { spritetype *pSprite = pPlayer->pSprite; - pPlayer->q16ang = (pPlayer->q16ang + IntToFixed(pSprite->ang - pPlayer->angold)) & 0x7FFFFFF; - pPlayer->angold = pSprite->ang = FixedToInt(pPlayer->q16ang); + pPlayer->angle.ang += buildang(pSprite->ang - pPlayer->angold); + pPlayer->angold = pSprite->ang = pPlayer->angle.ang.asbuild(); } //--------------------------------------------------------------------------- @@ -1325,7 +1325,7 @@ void UpdatePlayerSpriteAngle(PLAYER *pPlayer) static void resetinputhelpers(PLAYER* pPlayer) { pPlayer->horizon.resetadjustment(); - pPlayer->angAdjust = 0; + pPlayer->angle.resetadjustment(); } void ProcessInput(PLAYER *pPlayer) @@ -1359,7 +1359,7 @@ void ProcessInput(PLAYER *pPlayer) { fixed_t fraggerAng = gethiq16angle(sprite[pPlayer->fraggerId].x - pSprite->x, sprite[pPlayer->fraggerId].y - pSprite->y); pPlayer->angold = pSprite->ang = FixedToInt(fraggerAng); - playerAddAngle2(&pPlayer->q16ang, &pPlayer->angAdjust, FixedToFloat(getincangleq16(pPlayer->q16ang, fraggerAng))); + pPlayer->angle.addadjustment(FixedToFloat(getincangleq16(pPlayer->angle.ang.asq16(), fraggerAng))); } pPlayer->deathTime += 4; if (!bSeqStat) @@ -1445,7 +1445,7 @@ void ProcessInput(PLAYER *pPlayer) if (cl_syncinput) { - applylook2(&pPlayer->q16ang, &pPlayer->q16look_ang, &pPlayer->q16rotscrnang, &pPlayer->spin, pInput->q16avel, &pInput->actions, 1, pPlayer->posture != 0); + applylook(&pPlayer->angle, pInput->q16avel, &pInput->actions, 1, pPlayer->posture != 0); UpdatePlayerSpriteAngle(pPlayer); } diff --git a/source/blood/src/player.h b/source/blood/src/player.h index 98262333b..96b49b711 100644 --- a/source/blood/src/player.h +++ b/source/blood/src/player.h @@ -86,6 +86,7 @@ struct PLAYER DUDEINFO* pDudeInfo; InputPacket input; PlayerHorizon horizon; + PlayerAngle angle; uint8_t newWeapon; int used1; // something related to game checksum int weaponQav; @@ -153,7 +154,6 @@ struct PLAYER int restTime; int kickPower; int laughCount; - fixed_t spin; // turning around bool godMode; bool fallScream; bool cantJump; @@ -178,17 +178,10 @@ struct PLAYER int pickupEffect; bool flashEffect; // if true, reduce pPlayer->visibility counter int quakeEffect; - fixed_t q16ang; int angold; int player_par; int nWaterPal; POSTURE pPosture[kModeMax][kPostureMax]; - fixed_t q16look_ang; - fixed_t q16rotscrnang; - - // Input helper variables. - double angAdjust; - fixed_t angTarget; }; struct PROFILE diff --git a/source/blood/src/prediction.cpp b/source/blood/src/prediction.cpp index 43fac3ecb..9ec6ffe08 100644 --- a/source/blood/src/prediction.cpp +++ b/source/blood/src/prediction.cpp @@ -57,7 +57,7 @@ static VIEW predictFifo[256]; void viewInitializePrediction(void) { - predict.at30 = gMe->q16ang; + predict.at30 = gMe->angle.ang; predict.at24 = gMe->horizon.horiz; predict.at28 = gMe->horizon.horizoff; predict.at2c = gMe->slope; @@ -75,7 +75,7 @@ void viewInitializePrediction(void) predict.at64 = zvel[gMe->pSprite->index]; predict.at6a = gMe->pXSprite->height; predict.at48 = gMe->posture; - predict.at4c = gMe->spin; + predict.at4c = gMe->angle.spin; predict.at6e = !!(gMe->input.actions & SB_CENTERVIEW); memcpy(&predict.at75,&gSpriteHit[gMe->pSprite->extra],sizeof(SPRITEHIT)); predict.TotalKills = gMe->bobPhase; @@ -120,8 +120,8 @@ static void fakeProcessInput(PLAYER *pPlayer, InputPacket *pInput) predict.at71 = !!(gMe->input.actions & SB_JUMP); if (predict.at48 == 1) { - int x = Cos(FixedToInt(predict.at30)); - int y = Sin(FixedToInt(predict.at30)); + int x = Cos(predict.at30.asbuild()); + int y = Sin(predict.at30.asbuild()); if (pInput->fvel) { int forward = pInput->fvel; @@ -145,8 +145,8 @@ static void fakeProcessInput(PLAYER *pPlayer, InputPacket *pInput) int speed = 0x10000; if (predict.at6a > 0) speed -= divscale16(predict.at6a, 0x100); - int x = Cos(FixedToInt(predict.at30)); - int y = Sin(FixedToInt(predict.at30)); + int x = Cos(predict.at30.asbuild()); + int y = Sin(predict.at30.asbuild()); if (pInput->fvel) { int forward = pInput->fvel; @@ -170,11 +170,11 @@ static void fakeProcessInput(PLAYER *pPlayer, InputPacket *pInput) } } if (pInput->q16avel) - predict.at30 = (predict.at30+pInput->q16avel)&0x7ffffff; + predict.at30 = degang(FixedToFloat(pInput->q16avel)); if (pInput->actions & SB_TURNAROUND) - if (!predict.at4c) - predict.at4c = -1024; - if (predict.at4c < 0) + if (!predict.at4c.asbuild()) + predict.at4c = buildlook(-1024); + if (predict.at4c.asbuild() < 0) { int speed; if (predict.at48 == 1) @@ -182,8 +182,8 @@ static void fakeProcessInput(PLAYER *pPlayer, InputPacket *pInput) else speed = 128; - predict.at4c = min(predict.at4c+speed, 0); - predict.at30 += IntToFixed(speed); + predict.at4c = buildlook(min(predict.at4c.asbuild()+speed, 0)); + predict.at30 += buildang(speed); } if (!predict.at71) @@ -249,8 +249,8 @@ static void fakeProcessInput(PLAYER *pPlayer, InputPacket *pInput) if (va && (sector[nSector].floorstat&2) != 0) { int z1 = getflorzofslope(nSector, predict.at50, predict.at54); - int x2 = predict.at50+mulscale30(64, Cos(FixedToInt(predict.at30))); - int y2 = predict.at54+mulscale30(64, Sin(FixedToInt(predict.at30))); + int x2 = predict.at50+mulscale30(64, Cos(predict.at30.asbuild())); + int y2 = predict.at54+mulscale30(64, Sin(predict.at30.asbuild())); short nSector2 = nSector; updatesector(x2, y2, &nSector2); if (nSector2 == nSector) @@ -656,7 +656,7 @@ void viewCorrectPrediction(void) #if 0 spritetype *pSprite = gMe->pSprite; VIEW *pView = &predictFifo[(gNetFifoTail-1)&255]; - if (gMe->q16ang != pView->at30 || pView->at24 != gMe->horizon.horiz || pView->at50 != pSprite->x || pView->at54 != pSprite->y || pView->at58 != pSprite->z) + if (gMe->angle.ang != pView->at30 || pView->at24 != gMe->horizon.horiz || pView->at50 != pSprite->x || pView->at54 != pSprite->y || pView->at58 != pSprite->z) { viewInitializePrediction(); predictOld = gPrevView[myconnectindex]; diff --git a/source/blood/src/view.cpp b/source/blood/src/view.cpp index 8405d323b..b25287b0f 100644 --- a/source/blood/src/view.cpp +++ b/source/blood/src/view.cpp @@ -104,7 +104,7 @@ void viewBackupView(int nPlayer) { PLAYER *pPlayer = &gPlayer[nPlayer]; VIEW *pView = &gPrevView[nPlayer]; - pView->at30 = pPlayer->q16ang; + pView->at30 = pPlayer->angle.ang; pView->at50 = pPlayer->pSprite->x; pView->at54 = pPlayer->pSprite->y; pView->at38 = pPlayer->zView; @@ -116,8 +116,8 @@ void viewBackupView(int nPlayer) pView->atc = pPlayer->bobWidth; pView->at18 = pPlayer->swayHeight; pView->at1c = pPlayer->swayWidth; - pView->q16look_ang = pPlayer->q16look_ang; - pView->q16rotscrnang = pPlayer->q16rotscrnang; + pView->look_ang = pPlayer->angle.look_ang; + pView->rotscrnang = pPlayer->angle.rotscrnang; } void viewCorrectViewOffsets(int nPlayer, vec3_t const *oldpos) @@ -633,8 +633,9 @@ void viewDrawScreen(bool sceneonly) renderSetAspect(v1, yxaspect); int cX, cY, cZ, v74, v8c; - fixed_t cA, q16rotscrnang; - fixedhoriz q16horizon, q16horizoff; + lookangle rotscrnang; + binangle cA; + fixedhoriz cH, cOff; double zDelta, v4c, v48; int nSectnum = gView->pSprite->sectnum; if (numplayers > 1 && gView == gMe && gPrediction && gMe->pXSprite->health > 0) @@ -644,7 +645,7 @@ void viewDrawScreen(bool sceneonly) cY = interpolate(predictOld.at54, predict.at54, gInterpolate); cZ = interpolate(predictOld.at38, predict.at38, gInterpolate); zDelta = finterpolate(predictOld.at34, predict.at34, gInterpolate); - q16horizoff = q16horiz(interpolate(predictOld.at28.asq16(), predict.at28.asq16(), gInterpolate)); + cOff = q16horiz(interpolate(predictOld.at28.asq16(), predict.at28.asq16(), gInterpolate)); v74 = interpolate(predictOld.atc, predict.atc, gInterpolate); v8c = interpolate(predictOld.at8, predict.at8, gInterpolate); v4c = finterpolate(predictOld.at1c, predict.at1c, gInterpolate); @@ -652,15 +653,17 @@ void viewDrawScreen(bool sceneonly) if (!cl_syncinput) { - cA = predict.at30 + predict.q16look_ang; - q16horizon = predict.at24; - q16rotscrnang = predict.q16rotscrnang; + cA = bamang(predict.at30.asbam() + predict.look_ang.asbam()); + cH = predict.at24; + rotscrnang = predict.rotscrnang; } else { - cA = interpolateangfix16(predictOld.at30 + predictOld.q16look_ang, predict.at30 + predict.q16look_ang, gInterpolate); - q16horizon = q16horiz(interpolate(predictOld.at24.asq16(), predict.at24.asq16(), gInterpolate)); - q16rotscrnang = interpolateangfix16(predictOld.q16rotscrnang, predict.q16rotscrnang, gInterpolate); + uint32_t oang = predictOld.at30.asbam() + predictOld.look_ang.asbam(); + uint32_t ang = predict.at30.asbam() + predict.look_ang.asbam(); + cA = interpolateangbin(oang, ang, gInterpolate); + cH = q16horiz(interpolate(predictOld.at24.asq16(), predict.at24.asq16(), gInterpolate)); + rotscrnang = interpolateanglook(predictOld.rotscrnang.asbam(), predict.rotscrnang.asbam(), gInterpolate); } } else @@ -670,7 +673,7 @@ void viewDrawScreen(bool sceneonly) cY = interpolate(pView->at54, gView->pSprite->y, gInterpolate); cZ = interpolate(pView->at38, gView->zView, gInterpolate); zDelta = finterpolate(pView->at34, gView->zWeapon - gView->zView - (12 << 8), gInterpolate); - q16horizoff = q16horiz(interpolate(pView->at28.asq16(), gView->horizon.horizoff.asq16(), gInterpolate)); + cOff = q16horiz(interpolate(pView->at28.asq16(), gView->horizon.horizoff.asq16(), gInterpolate)); v74 = interpolate(pView->atc, gView->bobWidth, gInterpolate); v8c = interpolate(pView->at8, gView->bobHeight, gInterpolate); v4c = finterpolate(pView->at1c, gView->swayWidth, gInterpolate); @@ -678,35 +681,37 @@ void viewDrawScreen(bool sceneonly) if (!cl_syncinput) { - cA = gView->q16ang + gView->q16look_ang; - q16horizon = gView->horizon.horiz; - q16rotscrnang = gView->q16rotscrnang; + cA = bamang(gView->angle.ang.asbam() + gView->angle.look_ang.asbam()); + cH = gView->horizon.horiz; + rotscrnang = gView->angle.rotscrnang; } else { - cA = interpolateangfix16(pView->at30 + pView->q16look_ang, gView->q16ang + gView->q16look_ang, gInterpolate); - q16horizon = q16horiz(interpolate(pView->at24.asq16(), gView->horizon.horiz.asq16(), gInterpolate)); - q16rotscrnang = interpolateangfix16(pView->q16rotscrnang, gView->q16rotscrnang, gInterpolate); + uint32_t oang = pView->at30.asbam() + pView->look_ang.asbam(); + uint32_t ang = gView->angle.ang.asbam() + gView->angle.look_ang.asbam(); + cA = interpolateangbin(oang, ang, gInterpolate); + cH = q16horiz(interpolate(pView->at24.asq16(), gView->horizon.horiz.asq16(), gInterpolate)); + rotscrnang = interpolateanglook(pView->rotscrnang.asbam(), gView->angle.rotscrnang.asbam(), gInterpolate); } } viewUpdateShake(); - q16horizon += buildhoriz(shakeHoriz); - cA += IntToFixed(shakeAngle); + cH += buildhoriz(shakeHoriz); + cA += buildang(shakeAngle); cX += shakeX; cY += shakeY; cZ += shakeZ; v4c += shakeBobX; v48 += shakeBobY; - q16horizon += buildhoriz(mulscale30(0x40000000 - Cos(gView->tiltEffect << 2), 30)); + cH += buildhoriz(mulscale30(0x40000000 - Cos(gView->tiltEffect << 2), 30)); if (gViewPos == 0) { if (cl_viewbob) { if (cl_viewhbob) { - cX -= mulscale30(v74, Sin(FixedToInt(cA))) >> 4; - cY += mulscale30(v74, Cos(FixedToInt(cA))) >> 4; + cX -= mulscale30(v74, Sin(cA.asbuild())) >> 4; + cY += mulscale30(v74, Cos(cA.asbuild())) >> 4; } if (cl_viewvbob) { @@ -715,15 +720,15 @@ void viewDrawScreen(bool sceneonly) } if (cl_slopetilting) { - q16horizon += q16horizoff; + cH += cOff; } - cZ += xs_CRoundToInt(q16horizon.asq16() / 6553.6); + cZ += xs_CRoundToInt(cH.asq16() / 6553.6); cameradist = -1; cameraclock = gFrameClock +mulscale16(4, (int)gInterpolate); } else { - CalcPosition(gView->pSprite, (int*)&cX, (int*)&cY, (int*)&cZ, &nSectnum, FixedToInt(cA), q16horizon.asq16(), (int)gInterpolate); + CalcPosition(gView->pSprite, (int*)&cX, (int*)&cY, (int*)&cZ, &nSectnum, cA.asbuild(), cH.asq16(), (int)gInterpolate); } CheckLink((int*)&cX, (int*)&cY, (int*)&cZ, &nSectnum); int v78 = interpolateang(gScreenTiltO, gScreenTilt, gInterpolate); @@ -734,7 +739,7 @@ void viewDrawScreen(bool sceneonly) //int tiltcs, tiltdim; uint8_t v4 = powerupCheck(gView, kPwUpCrystalBall) > 0; #ifdef USE_OPENGL - renderSetRollAngle(FixedToFloat(q16rotscrnang)); + renderSetRollAngle(rotscrnang.asbam() / (double)(BAMUNIT)); #endif if (v78 || bDelirium) { @@ -869,7 +874,7 @@ void viewDrawScreen(bool sceneonly) nSprite = nextspritestat[nSprite]; } g_visibility = (int32_t)(ClipLow(gVisibility - 32 * gView->visibility - unk, 0)); - cA = (cA + interpolateangfix16(IntToFixed(deliriumTurnO), IntToFixed(deliriumTurn), gInterpolate)) & 0x7ffffff; + cA += q16ang(interpolateangfix16(IntToFixed(deliriumTurnO), IntToFixed(deliriumTurn), gInterpolate)); int vfc, vf8; getzsofslope(nSectnum, cX, cY, &vfc, &vf8); if (cZ >= vf8) @@ -880,13 +885,13 @@ void viewDrawScreen(bool sceneonly) { cZ = vfc + (gLowerLink[nSectnum] >= 0 ? 0 : (8 << 8)); } - q16horizon = q16horiz(ClipRange(q16horizon.asq16(), gi->playerHorizMin(), gi->playerHorizMax())); + cH = q16horiz(ClipRange(cH.asq16(), gi->playerHorizMin(), gi->playerHorizMax())); RORHACK: int ror_status[16]; for (int i = 0; i < 16; i++) ror_status[i] = TestBitString(gotpic, 4080 + i); fixed_t deliriumPitchI = interpolate(IntToFixed(deliriumPitchO), IntToFixed(deliriumPitch), gInterpolate); - DrawMirrors(cX, cY, cZ, cA, q16horizon.asq16() + deliriumPitchI, gInterpolate, gViewIndex); + DrawMirrors(cX, cY, cZ, cA.asq16(), cH.asq16() + deliriumPitchI, gInterpolate, gViewIndex); int bakCstat = gView->pSprite->cstat; if (gViewPos == 0) { @@ -897,8 +902,8 @@ void viewDrawScreen(bool sceneonly) gView->pSprite->cstat |= 514; } - renderDrawRoomsQ16(cX, cY, cZ, cA, q16horizon.asq16() + deliriumPitchI, nSectnum); - viewProcessSprites(cX, cY, cZ, FixedToInt(cA), gInterpolate); + renderDrawRoomsQ16(cX, cY, cZ, cA.asq16(), cH.asq16() + deliriumPitchI, nSectnum); + viewProcessSprites(cX, cY, cZ, cA.asbuild(), gInterpolate); bool do_ror_hack = false; for (int i = 0; i < 16; i++) if (ror_status[i] != TestBitString(gotpic, 4080 + i)) @@ -955,7 +960,7 @@ void viewDrawScreen(bool sceneonly) int v8 = byte_1CE5C2 > 0 && (sector[tmpSect].ceilingstat & 1); if (gWeather.at12d8 > 0 || v8) { - gWeather.Draw(cX, cY, cZ, cA, q16horizon.asq16() + deliriumPitch, gWeather.at12d8); + gWeather.Draw(cX, cY, cZ, cA.asq16(), cH.asq16() + deliriumPitch, gWeather.at12d8); if (v8) { gWeather.at12d8 = ClipRange(delta * 8 + gWeather.at12d8, 0, 4095); diff --git a/source/blood/src/view.h b/source/blood/src/view.h index 21276702d..fdbefa1d9 100644 --- a/source/blood/src/view.h +++ b/source/blood/src/view.h @@ -42,14 +42,14 @@ struct VIEW { fixedhoriz at24; // horiz fixedhoriz at28; // horizoff int at2c; - fixed_t at30; // angle + binangle at30; // angle int at34; // weapon z int at38; // view z int at3c; int at40; int at44; int at48; // posture - int at4c; // spin + lookangle at4c; // spin int at50; // x int at54; // y int at58; // z @@ -65,8 +65,8 @@ struct VIEW { char at72; // underwater short at73; // sprite flags SPRITEHIT at75; - fixed_t q16look_ang; - fixed_t q16rotscrnang; + lookangle look_ang; + lookangle rotscrnang; }; extern VIEW gPrevView[kMaxPlayers];