diff --git a/source/games/blood/src/ai.cpp b/source/games/blood/src/ai.cpp index 39c7d2b0d..febacab11 100644 --- a/source/games/blood/src/ai.cpp +++ b/source/games/blood/src/ai.cpp @@ -337,19 +337,12 @@ void aiMoveDodge(DBloodActor* actor) actor->spr.angle += clamp(nAng, -nTurnRange, nTurnRange); if (actor->xspr.dodgeDir) { - int nCos = Cos(actor->int_ang()); - int nSin = Sin(actor->int_ang()); - int dx = actor->int_vel().X; - int dy = actor->int_vel().Y; - int t1 = DMulScale(dx, nCos, dy, nSin, 30); - int t2 = DMulScale(dx, nSin, -dy, nCos, 30); - if (actor->xspr.dodgeDir > 0) - t2 += pDudeInfo->sideSpeed; - else - t2 -= pDudeInfo->sideSpeed; - - actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30)); - actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30)); + AdjustVelocity(actor, ADJUSTER{ + if (actor->xspr.dodgeDir > 0) + t2 += FixedToFloat(pDudeInfo->sideSpeed); + else + t2 -= FixedToFloat(pDudeInfo->sideSpeed); + }); } } diff --git a/source/games/blood/src/aibat.cpp b/source/games/blood/src/aibat.cpp index f0ec693d0..719c0f12d 100644 --- a/source/games/blood/src/aibat.cpp +++ b/source/games/blood/src/aibat.cpp @@ -203,19 +203,13 @@ static void batMoveDodgeUp(DBloodActor* actor) auto nAng = deltaangle(actor->spr.angle, DAngle::fromBuild(actor->xspr.goalAng)); auto nTurnRange = DAngle::fromQ16(pDudeInfo->angSpeed << 3); actor->spr.angle += clamp(nAng, -nTurnRange, nTurnRange); - int nCos = Cos(actor->int_ang()); - int nSin = Sin(actor->int_ang()); - int dx = actor->int_vel().X; - int dy = actor->int_vel().Y; - int t1 = DMulScale(dx, nCos, dy, nSin, 30); - int t2 = DMulScale(dx, nSin, -dy, nCos, 30); - if (actor->xspr.dodgeDir > 0) - t2 += pDudeInfo->sideSpeed; - else - t2 -= pDudeInfo->sideSpeed; + AdjustVelocity(actor, ADJUSTER{ + if (actor->xspr.dodgeDir > 0) + t2 += pDudeInfo->sideSpeed; + else + t2 -= pDudeInfo->sideSpeed; + }); - actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30)); - actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30)); actor->set_int_bvel_z(-0x52aaa); } @@ -228,19 +222,13 @@ static void batMoveDodgeDown(DBloodActor* actor) actor->spr.angle += clamp(nAng, -nTurnRange, nTurnRange); if (actor->xspr.dodgeDir == 0) return; - int nCos = Cos(actor->int_ang()); - int nSin = Sin(actor->int_ang()); - int dx = actor->int_vel().X; - int dy = actor->int_vel().Y; - int t1 = DMulScale(dx, nCos, dy, nSin, 30); - int t2 = DMulScale(dx, nSin, -dy, nCos, 30); - if (actor->xspr.dodgeDir > 0) - t2 += pDudeInfo->sideSpeed; - else - t2 -= pDudeInfo->sideSpeed; + AdjustVelocity(actor, ADJUSTER{ + if (actor->xspr.dodgeDir > 0) + t2 += FixedToFloat(pDudeInfo->sideSpeed); + else + t2 -= FixedToFloat(pDudeInfo->sideSpeed); + }); - actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30)); - actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30)); actor->set_int_bvel_z(0x44444); } diff --git a/source/games/blood/src/aiboneel.cpp b/source/games/blood/src/aiboneel.cpp index 61decba4d..938c34463 100644 --- a/source/games/blood/src/aiboneel.cpp +++ b/source/games/blood/src/aiboneel.cpp @@ -218,19 +218,13 @@ static void eelMoveDodgeUp(DBloodActor* actor) auto nAng = deltaangle(actor->spr.angle, DAngle::fromBuild(actor->xspr.goalAng)); auto nTurnRange = DAngle::fromQ16(pDudeInfo->angSpeed << 3); actor->spr.angle += clamp(nAng, -nTurnRange, nTurnRange); - int nCos = Cos(actor->int_ang()); - int nSin = Sin(actor->int_ang()); - int dx = actor->int_vel().X; - int dy = actor->int_vel().Y; - int t1 = DMulScale(dx, nCos, dy, nSin, 30); - int t2 = DMulScale(dx, nSin, -dy, nCos, 30); - if (actor->xspr.dodgeDir > 0) - t2 += pDudeInfo->sideSpeed; - else - t2 -= pDudeInfo->sideSpeed; + AdjustVelocity(actor, ADJUSTER{ + if (actor->xspr.dodgeDir > 0) + t2 += FixedToFloat(pDudeInfo->sideSpeed); + else + t2 -= FixedToFloat(pDudeInfo->sideSpeed); + }); - actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30)); - actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30)); actor->set_int_bvel_z(-0x8000); } @@ -243,19 +237,13 @@ static void eelMoveDodgeDown(DBloodActor* actor) actor->spr.angle += clamp(nAng, -nTurnRange, nTurnRange); if (actor->xspr.dodgeDir == 0) return; - int nCos = Cos(actor->int_ang()); - int nSin = Sin(actor->int_ang()); - int dx = actor->int_vel().X; - int dy = actor->int_vel().Y; - int t1 = DMulScale(dx, nCos, dy, nSin, 30); - int t2 = DMulScale(dx, nSin, -dy, nCos, 30); - if (actor->xspr.dodgeDir > 0) - t2 += pDudeInfo->sideSpeed; - else - t2 -= pDudeInfo->sideSpeed; + AdjustVelocity(actor, ADJUSTER{ + if (actor->xspr.dodgeDir > 0) + t2 += FixedToFloat(pDudeInfo->sideSpeed); + else + t2 -= FixedToFloat(pDudeInfo->sideSpeed); + }); - actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30)); - actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30)); actor->set_int_bvel_z(0x44444); } diff --git a/source/games/blood/src/aigarg.cpp b/source/games/blood/src/aigarg.cpp index 4e0b9a159..97a4394d2 100644 --- a/source/games/blood/src/aigarg.cpp +++ b/source/games/blood/src/aigarg.cpp @@ -279,19 +279,13 @@ static void gargMoveDodgeUp(DBloodActor* actor) auto nAng = deltaangle(actor->spr.angle, DAngle::fromBuild(actor->xspr.goalAng)); auto nTurnRange = DAngle::fromQ16(pDudeInfo->angSpeed << 3); actor->spr.angle += clamp(nAng, -nTurnRange, nTurnRange); - int nCos = Cos(actor->int_ang()); - int nSin = Sin(actor->int_ang()); - int dx = actor->int_vel().X; - int dy = actor->int_vel().Y; - int t1 = DMulScale(dx, nCos, dy, nSin, 30); - int t2 = DMulScale(dx, nSin, -dy, nCos, 30); - if (actor->xspr.dodgeDir > 0) - t2 += pDudeInfo->sideSpeed; - else - t2 -= pDudeInfo->sideSpeed; + AdjustVelocity(actor, ADJUSTER{ + if (actor->xspr.dodgeDir > 0) + t2 += FixedToFloat(pDudeInfo->sideSpeed); + else + t2 -= FixedToFloat(pDudeInfo->sideSpeed); + }); - actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30)); - actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30)); actor->set_int_bvel_z(-0x1d555); } @@ -307,19 +301,13 @@ static void gargMoveDodgeDown(DBloodActor* actor) actor->spr.angle += clamp(nAng, -nTurnRange, nTurnRange); if (actor->xspr.dodgeDir == 0) return; - int nCos = Cos(actor->int_ang()); - int nSin = Sin(actor->int_ang()); - int dx = actor->int_vel().X; - int dy = actor->int_vel().Y; - int t1 = DMulScale(dx, nCos, dy, nSin, 30); - int t2 = DMulScale(dx, nSin, -dy, nCos, 30); - if (actor->xspr.dodgeDir > 0) - t2 += pDudeInfo->sideSpeed; - else - t2 -= pDudeInfo->sideSpeed; + AdjustVelocity(actor, ADJUSTER{ + if (actor->xspr.dodgeDir > 0) + t2 += FixedToFloat(pDudeInfo->sideSpeed); + else + t2 -= FixedToFloat(pDudeInfo->sideSpeed); + }); - actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30)); - actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30)); actor->set_int_bvel_z(0x44444); } diff --git a/source/games/blood/src/aighost.cpp b/source/games/blood/src/aighost.cpp index c4821b427..007df950a 100644 --- a/source/games/blood/src/aighost.cpp +++ b/source/games/blood/src/aighost.cpp @@ -258,19 +258,13 @@ static void ghostMoveDodgeUp(DBloodActor* actor) auto nAng = deltaangle(actor->spr.angle, DAngle::fromBuild(actor->xspr.goalAng)); auto nTurnRange = DAngle::fromQ16(pDudeInfo->angSpeed << 3); actor->spr.angle += clamp(nAng, -nTurnRange, nTurnRange); - int nCos = Cos(actor->int_ang()); - int nSin = Sin(actor->int_ang()); - int dx = actor->int_vel().X; - int dy = actor->int_vel().Y; - int t1 = DMulScale(dx, nCos, dy, nSin, 30); - int t2 = DMulScale(dx, nSin, -dy, nCos, 30); - if (actor->xspr.dodgeDir > 0) - t2 += pDudeInfo->sideSpeed; - else - t2 -= pDudeInfo->sideSpeed; + AdjustVelocity(actor, ADJUSTER{ + if (actor->xspr.dodgeDir > 0) + t2 += FixedToFloat(pDudeInfo->sideSpeed); + else + t2 -= FixedToFloat(pDudeInfo->sideSpeed); + }); - actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30)); - actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30)); actor->set_int_bvel_z(-0x1d555); } @@ -286,19 +280,12 @@ static void ghostMoveDodgeDown(DBloodActor* actor) actor->spr.angle += clamp(nAng, -nTurnRange, nTurnRange); if (actor->xspr.dodgeDir == 0) return; - int nCos = Cos(actor->int_ang()); - int nSin = Sin(actor->int_ang()); - int dx = actor->int_vel().X; - int dy = actor->int_vel().Y; - int t1 = DMulScale(dx, nCos, dy, nSin, 30); - int t2 = DMulScale(dx, nSin, -dy, nCos, 30); - if (actor->xspr.dodgeDir > 0) - t2 += pDudeInfo->sideSpeed; - else - t2 -= pDudeInfo->sideSpeed; - - actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30)); - actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30)); + AdjustVelocity(actor, ADJUSTER{ + if (actor->xspr.dodgeDir > 0) + t2 += FixedToFloat(pDudeInfo->sideSpeed); + else + t2 -= FixedToFloat(pDudeInfo->sideSpeed); + }); actor->set_int_bvel_z(0x44444); }