From 47ad4fccdc35adb2c2e5de000a2dc7d8cb48b09d Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Fri, 9 Sep 2022 19:24:25 +0200 Subject: [PATCH] - convert all set/add_int_x/yvel calls --- source/core/coreactor.h | 10 --- source/games/exhumed/src/aistuff.h | 1 - source/games/exhumed/src/bullet.cpp | 15 ++-- source/games/exhumed/src/fish.cpp | 4 +- source/games/exhumed/src/lavadude.cpp | 6 +- source/games/exhumed/src/lion.cpp | 6 +- source/games/exhumed/src/move.cpp | 111 +++----------------------- source/games/exhumed/src/object.cpp | 10 +-- source/games/exhumed/src/player.cpp | 4 +- source/games/exhumed/src/queen.cpp | 8 +- source/games/exhumed/src/rex.cpp | 20 ++--- source/games/exhumed/src/runlist.cpp | 16 ++-- source/games/exhumed/src/set.cpp | 4 +- 13 files changed, 44 insertions(+), 171 deletions(-) diff --git a/source/core/coreactor.h b/source/core/coreactor.h index 223aa91cf..f879f4acf 100644 --- a/source/core/coreactor.h +++ b/source/core/coreactor.h @@ -149,16 +149,6 @@ public: return vel.Y * worldtoint; } - void set_int_yvel(int v) - { - vel.Y = v * inttoworld; - } - - void add_int_yvel(int v) - { - vel.Y += v * inttoworld; - } - vec3_t int_vel() const { return vec3_t(FloatToFixed(vel.X), FloatToFixed(vel.Y), FloatToFixed(vel.Z)); diff --git a/source/games/exhumed/src/aistuff.h b/source/games/exhumed/src/aistuff.h index 2adf15b69..77db3ac02 100644 --- a/source/games/exhumed/src/aistuff.h +++ b/source/games/exhumed/src/aistuff.h @@ -207,7 +207,6 @@ extern Collision hiHit; extern TObjPtr nChunkSprite[]; extern TObjPtr nBodySprite[]; -signed int lsqrt(int a1); void MoveThings(); void ResetMoveFifo(); void InitChunks(); diff --git a/source/games/exhumed/src/bullet.cpp b/source/games/exhumed/src/bullet.cpp index 54eb7b0e8..7630468f3 100644 --- a/source/games/exhumed/src/bullet.cpp +++ b/source/games/exhumed/src/bullet.cpp @@ -223,23 +223,18 @@ void BulletHitsSprite(Bullet *pBullet, DExhumedActor* pBulletActor, DExhumedActo if (nStat == kStatAnubisDrum) { - int nAngle = (pActor->int_ang() + 256) - RandomSize(9); + auto nAngle = (pActor->spr.angle + DAngle22_5) - DAngle::fromBuild(RandomSize(9)); - pHitActor->set_int_xvel(bcos(nAngle, 1)); - pHitActor->set_int_yvel(bsin(nAngle, 1)); - pHitActor->set_int_zvel((-(RandomSize(3) + 1)) << 8); + pHitActor->vel.XY() = nAngle.ToVector() * 2048; + pHitActor->vel.Z = -(RandomSize(3) + 1); } else { - int xVel = pHitActor->int_xvel(); - int yVel = pHitActor->int_yvel(); - + auto Vel = pHitActor->vel.XY(); pHitActor->VelFromAngle(-2); MoveCreature(pHitActor); - - pHitActor->set_int_xvel(xVel); - pHitActor->set_int_yvel(yVel); + pHitActor->vel.XY() = Vel; } break; diff --git a/source/games/exhumed/src/fish.cpp b/source/games/exhumed/src/fish.cpp index b4998b68d..6d3c11022 100644 --- a/source/games/exhumed/src/fish.cpp +++ b/source/games/exhumed/src/fish.cpp @@ -51,8 +51,8 @@ void BuildFishLimb(DExhumedActor* pActor, int anim) pChunkActor->spr.cstat = 0; pChunkActor->spr.shade = -12; pChunkActor->spr.pal = 0; - pChunkActor->set_int_xvel((RandomSize(5) - 16) << 8); - pChunkActor->set_int_yvel((RandomSize(5) - 16) << 8); + pChunkActor->vel.X = ((RandomSize(5) - 16) << 4); + pChunkActor->vel.Y = ((RandomSize(5) - 16) << 4); pChunkActor->spr.xrepeat = 64; pChunkActor->spr.yrepeat = 64; pChunkActor->spr.xoffset = 0; diff --git a/source/games/exhumed/src/lavadude.cpp b/source/games/exhumed/src/lavadude.cpp index 715c3c653..4ca2798e0 100644 --- a/source/games/exhumed/src/lavadude.cpp +++ b/source/games/exhumed/src/lavadude.cpp @@ -45,9 +45,9 @@ DExhumedActor* BuildLavaLimb(DExhumedActor* pActor, int move, int ebx) pLimbActor->spr.cstat = 0; pLimbActor->spr.shade = -127; pLimbActor->spr.pal = 1; - pLimbActor->set_int_xvel((RandomSize(5) - 16) << 8); - pLimbActor->set_int_yvel((RandomSize(5) - 16) << 8); - pLimbActor->set_int_zvel(2560 - (RandomSize(5) << 8)); + pLimbActor->vel.X = ((RandomSize(5) - 16) << 4); + pLimbActor->vel.Y = ((RandomSize(5) - 16) << 4); + pLimbActor->vel.Z = 10 - RandomSize(5); pLimbActor->spr.xoffset = 0; pLimbActor->spr.yoffset = 0; pLimbActor->spr.xrepeat = 90; diff --git a/source/games/exhumed/src/lion.cpp b/source/games/exhumed/src/lion.cpp index 5dde4707f..546cc91a5 100644 --- a/source/games/exhumed/src/lion.cpp +++ b/source/games/exhumed/src/lion.cpp @@ -276,13 +276,11 @@ void AILion::Tick(RunListEvent* ev) if (pActor->spr.cstat & CSTAT_SPRITE_INVISIBLE) { - pActor->set_int_xvel(bcos(nAng, 1)); - pActor->set_int_yvel(bsin(nAng, 1)); + pActor->vel.XY() = pActor->spr.angle.ToVector() * 2048; } else { - pActor->set_int_xvel(bcos(nAng, -1)); - pActor->set_int_yvel(bsin(nAng, -1)); + pActor->vel.XY() = pActor->spr.angle.ToVector() * 512; } } diff --git a/source/games/exhumed/src/move.cpp b/source/games/exhumed/src/move.cpp index a08f49518..869cfcf7b 100644 --- a/source/games/exhumed/src/move.cpp +++ b/source/games/exhumed/src/move.cpp @@ -92,98 +92,6 @@ void SerializeMove(FSerializer& arc) } } -signed int lsqrt(int a1) -{ - int v1; - int v2; - signed int result; - - v1 = a1; - v2 = a1 - 0x40000000; - - result = 0; - - if (v2 >= 0) - { - result = 32768; - v1 = v2; - } - if (v1 - ((result << 15) + 0x10000000) >= 0) - { - v1 -= (result << 15) + 0x10000000; - result += 16384; - } - if (v1 - ((result << 14) + 0x4000000) >= 0) - { - v1 -= (result << 14) + 0x4000000; - result += 8192; - } - if (v1 - ((result << 13) + 0x1000000) >= 0) - { - v1 -= (result << 13) + 0x1000000; - result += 4096; - } - if (v1 - ((result << 12) + 0x400000) >= 0) - { - v1 -= (result << 12) + 0x400000; - result += 2048; - } - if (v1 - ((result << 11) + 0x100000) >= 0) - { - v1 -= (result << 11) + 0x100000; - result += 1024; - } - if (v1 - ((result << 10) + 0x40000) >= 0) - { - v1 -= (result << 10) + 0x40000; - result += 512; - } - if (v1 - ((result << 9) + 0x10000) >= 0) - { - v1 -= (result << 9) + 0x10000; - result += 256; - } - if (v1 - ((result << 8) + 0x4000) >= 0) - { - v1 -= (result << 8) + 0x4000; - result += 128; - } - if (v1 - ((result << 7) + 4096) >= 0) - { - v1 -= (result << 7) + 4096; - result += 64; - } - if (v1 - ((result << 6) + 1024) >= 0) - { - v1 -= (result << 6) + 1024; - result += 32; - } - if (v1 - (32 * result + 256) >= 0) - { - v1 -= 32 * result + 256; - result += 16; - } - if (v1 - (16 * result + 64) >= 0) - { - v1 -= 16 * result + 64; - result += 8; - } - if (v1 - (8 * result + 16) >= 0) - { - v1 -= 8 * result + 16; - result += 4; - } - if (v1 - (4 * result + 4) >= 0) - { - v1 -= 4 * result + 4; - result += 2; - } - if (v1 - (2 * result + 1) >= 0) - result += 1; - - return result; -} - void MoveThings() { thinktime.Reset(); @@ -1275,9 +1183,9 @@ DExhumedActor* BuildCreatureChunk(DExhumedActor* pSrc, int nPic, bool bSpecial) pActor->spr.shade = -12; pActor->spr.pal = 0; - pActor->set_int_xvel((RandomSize(5) - 16) << 7); - pActor->set_int_yvel((RandomSize(5) - 16) << 7); - pActor->set_int_zvel((-(RandomSize(8) + 512)) << 3); + pActor->vel.X = ((RandomSize(5) - 16) << 3); + pActor->vel.Y = ((RandomSize(5) - 16) << 3); + pActor->vel.Z = -(RandomSize(8) / 32. + 16); if (bSpecial) { @@ -1330,7 +1238,7 @@ void AICreatureChunk::Tick(RunListEvent* ev) if (!nVal.type && !nVal.exbits) return; - int nAngle; + DAngle nAngle; if (nVal.exbits & kHitAux2) { @@ -1347,11 +1255,11 @@ void AICreatureChunk::Tick(RunListEvent* ev) } else if (nVal.type == kHitSprite) { - nAngle = nVal.actor()->int_ang(); + nAngle = nVal.actor()->spr.angle; } else if (nVal.type == kHitWall) { - nAngle = GetWallNormal(nVal.hitWall); + nAngle = DAngle::fromBuild(GetWallNormal(nVal.hitWall)); } else { @@ -1359,11 +1267,10 @@ void AICreatureChunk::Tick(RunListEvent* ev) } // loc_16E0C - int nSqrt = lsqrt(((pActor->int_yvel() >> 10) * (pActor->int_yvel() >> 10) - + (pActor->int_xvel() >> 10) * (pActor->int_xvel() >> 10)) >> 8); + double nSqrt = pActor->vel.Length(); - pActor->set_int_xvel(bcos(nAngle) * (nSqrt >> 1)); - pActor->set_int_yvel(bsin(nAngle) * (nSqrt >> 1)); + + pActor->vel.XY() = nAngle.ToVector() * nSqrt * 0.5; return; } } diff --git a/source/games/exhumed/src/object.cpp b/source/games/exhumed/src/object.cpp index df9d7a62f..7b63e4345 100644 --- a/source/games/exhumed/src/object.cpp +++ b/source/games/exhumed/src/object.cpp @@ -1380,20 +1380,18 @@ DExhumedActor* BuildSpark(DExhumedActor* pActor, int nVal) } else { - int nAngle = (pActor->int_ang() + 256) - RandomSize(9); + auto nAngle = (pActor->spr.angle + DAngle22_5) - DAngle::fromBuild(RandomSize(9)); if (nVal) { - pSpark->set_int_xvel(bcos(nAngle, -5)); - pSpark->set_int_yvel(bsin(nAngle, -5)); + pSpark->vel.XY() = nAngle.ToVector() * 32; } else { - pSpark->set_int_xvel(bcos(nAngle, -6)); - pSpark->set_int_yvel(bsin(nAngle, -6)); + pSpark->vel.XY() = nAngle.ToVector() * 16; } - pSpark->set_int_zvel(-(RandomSize(4) << 7)); + pSpark->vel.Z = -RandomSize(4) * 0.5; pSpark->spr.picnum = kTile985 + nVal; } diff --git a/source/games/exhumed/src/player.cpp b/source/games/exhumed/src/player.cpp index 15f4ff150..5f144fed6 100644 --- a/source/games/exhumed/src/player.cpp +++ b/source/games/exhumed/src/player.cpp @@ -737,8 +737,8 @@ void AIPlayer::Tick(RunListEvent* ev) PlayerList[nPlayer].horizon.resetadjustment(); PlayerList[nPlayer].oeyelevel = PlayerList[nPlayer].eyelevel; - pPlayerActor->set_int_xvel(sPlayerInput[nPlayer].xVel >> 14); - pPlayerActor->set_int_yvel(sPlayerInput[nPlayer].yVel >> 14); + pPlayerActor->vel.X = FixedToFloat<18>(sPlayerInput[nPlayer].xVel); + pPlayerActor->vel.Y = FixedToFloat<18>(sPlayerInput[nPlayer].yVel); if (sPlayerInput[nPlayer].nItem > -1) { diff --git a/source/games/exhumed/src/queen.cpp b/source/games/exhumed/src/queen.cpp index c047b923e..55a5cb777 100644 --- a/source/games/exhumed/src/queen.cpp +++ b/source/games/exhumed/src/queen.cpp @@ -278,10 +278,7 @@ void DestroyAllEggs() void SetHeadVel(DExhumedActor* pActor) { - int nAngle = pActor->int_ang(); - - pActor->set_int_xvel(bcos(nAngle, nVelShift)); - pActor->set_int_yvel(bsin(nAngle, nVelShift)); + pActor->vel.XY() = pActor->spr.angle.ToVector() * 1024 * (1 << nVelShift); } Collision QueenAngleChase(DExhumedActor* pActor, DExhumedActor* pActor2, int val1, int val2) @@ -570,8 +567,7 @@ void AIQueenEgg::Tick(RunListEvent* ev) } pActor->set_int_ang(nAngle); - pActor->set_int_xvel(bcos(nAngle, -1)); - pActor->set_int_yvel(bsin(nAngle, -1)); + pActor->vel.XY() = pActor->spr.angle.ToVector() * 512; } break; diff --git a/source/games/exhumed/src/rex.cpp b/source/games/exhumed/src/rex.cpp index 09d632f0b..178222ed5 100644 --- a/source/games/exhumed/src/rex.cpp +++ b/source/games/exhumed/src/rex.cpp @@ -253,9 +253,7 @@ void AIRex::Tick(RunListEvent* ev) { if (((PlotCourseToSprite(pActor, pTarget) >> 8) >= 60) || pActor->nCount > 0) { - int nAngle = pActor->int_ang() & 0xFFF8; - pActor->set_int_xvel(bcos(nAngle, -2)); - pActor->set_int_yvel(bsin(nAngle, -2)); + pActor->vel.XY() = pActor->spr.angle.ToVector() * 256; } else { @@ -331,25 +329,21 @@ void AIRex::Tick(RunListEvent* ev) if (pHitActor->spr.statnum && pHitActor->spr.statnum < 107) { - int nAngle = pActor->int_ang(); - runlist_DamageEnemy(nMov.actor(), pActor, 15); - int xVel = bcos(nAngle) * 15; - int yVel = bsin(nAngle) * 15; + auto vel = pActor->spr.angle.ToVector() * 1024 * 15; if (pHitActor->spr.statnum == 100) { auto nPlayer = GetPlayerFromActor(nMov.actor()); - PlayerList[nPlayer].nDamage.X += (xVel << 4); - PlayerList[nPlayer].nDamage.Y += (yVel << 4); - pHitActor->set_int_zvel(-3584); + PlayerList[nPlayer].nDamage.X += (int(vel.X * worldtoint) << 4); + PlayerList[nPlayer].nDamage.Y += (int(vel.Y * worldtoint) << 4); + pHitActor->vel.Z = -14; } else { - pHitActor->add_int_xvel( (xVel >> 3)); - pHitActor->add_int_yvel((yVel >> 3)); - pHitActor->set_int_zvel(-2880); + pHitActor->vel.XY() = vel / 8.; + pHitActor->vel.Z = 11.25; } } diff --git a/source/games/exhumed/src/runlist.cpp b/source/games/exhumed/src/runlist.cpp index 876a71199..2acc653e3 100644 --- a/source/games/exhumed/src/runlist.cpp +++ b/source/games/exhumed/src/runlist.cpp @@ -1606,7 +1606,6 @@ int runlist_CheckRadialDamage(DExhumedActor* pActor) auto pos = (pActor->spr.pos - pRadialActor->spr.pos) / 16.; - int edi = 0; if (abs(pos.X) > nDamageRadius) { return 0; @@ -1622,6 +1621,7 @@ int runlist_CheckRadialDamage(DExhumedActor* pActor) double nDist = pos.XY().Length(); + int edi = 0; if (nDist < nDamageRadius) { auto nCStat = pActor->spr.cstat; @@ -1633,22 +1633,20 @@ int runlist_CheckRadialDamage(DExhumedActor* pActor) pActor->spr.pos.plusZ(-32), pActor->sector())) { - edi = int((nRadialDamage * (nDamageRadius - nDist)) / (nDamageRadius)); + edi = int((nRadialDamage * (nDamageRadius - nDist)) / nDamageRadius); if (edi < 0) { edi = 0; } else if (edi > 20) { - int nAngle = getangle(pos); + auto nAngle = VecToAngle(pos); + pActor->vel.XY() += nAngle.ToVector() * edi * 128; - pActor->add_int_xvel( (edi * bcos(nAngle)) >> 3); - pActor->add_int_yvel((edi * bsin(nAngle)) >> 3); - pActor->add_int_zvel(- edi * 24); + pActor->vel.Z = (- edi * 24) / 256.; - if (pActor->vel.Z < -14) { - pActor->set_int_zvel(-3584); - } + if (pActor->vel.Z < -14) + pActor->vel.Z = -14; } } diff --git a/source/games/exhumed/src/set.cpp b/source/games/exhumed/src/set.cpp index 982f56b24..17fd442a5 100644 --- a/source/games/exhumed/src/set.cpp +++ b/source/games/exhumed/src/set.cpp @@ -387,9 +387,7 @@ void AISet::Tick(RunListEvent* ev) } // loc_338E2 - int nAngle = pActor->int_ang() & 0xFFF8; - pActor->set_int_xvel(bcos(nAngle, -1)); - pActor->set_int_yvel(bsin(nAngle, -1)); + pActor->vel.XY() = pActor->spr.angle.ToVector() * 512; if (pActor->nIndex2) {