From 8946a663502c3812589488f7411fa5b5e209cd91 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 1 Sep 2022 00:42:06 +0200 Subject: [PATCH] - handle zvel multiplications with a wrapper. This completes wrapping of zvel. --- source/core/coreactor.h | 5 +++++ source/games/duke/src/actors.cpp | 2 +- source/games/duke/src/actors_d.cpp | 4 ++-- source/games/duke/src/actors_r.cpp | 4 ++-- source/games/duke/src/player_d.cpp | 2 +- source/games/duke/src/player_r.cpp | 2 +- source/games/duke/src/player_w.cpp | 2 +- source/games/exhumed/src/move.cpp | 2 +- source/games/exhumed/src/object.cpp | 2 +- source/games/exhumed/src/queen.cpp | 2 +- 10 files changed, 16 insertions(+), 11 deletions(-) diff --git a/source/core/coreactor.h b/source/core/coreactor.h index e4158e484..d22007493 100644 --- a/source/core/coreactor.h +++ b/source/core/coreactor.h @@ -125,6 +125,11 @@ public: { spr.zvel += v; } + + void mul_int_zvel(double v) + { + spr.zvel = int(spr.zvel * v); + } // Same as above but with inverted y and z axes to match the renderer's coordinate system. double interpolatedx(double const smoothratio, int const scale = 16) diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index 96a88051f..235f7e4ff 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -2429,7 +2429,7 @@ void glasspieces(DDukeActor* actor) { actor->set_int_zvel(-((3 - actor->temp_data[0]) << 8) - (krand() & 511)); if (sectp->lotag == 2) - actor->spr.zvel >>= 1; + actor->mul_int_zvel(0.5); actor->spr.xrepeat >>= 1; actor->spr.yrepeat >>= 1; if (rnd(96)) diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp index 303dcc49e..d32fe7c68 100644 --- a/source/games/duke/src/actors_d.cpp +++ b/source/games/duke/src/actors_d.cpp @@ -2586,7 +2586,7 @@ static void heavyhbomb(DDukeActor *actor) S_PlayActorSound(PIPEBOMB_BOUNCE, actor); actor->set_int_zvel(-((4 - actor->spr.yvel) << 8)); if (actor->sector()->lotag == 2) - actor->spr.zvel >>= 2; + actor->mul_int_zvel(0.25); actor->spr.yvel++; } if (actor->spr.pos.Z < actor->ceilingz) // && sectp->lotag != 2 ) @@ -3620,7 +3620,7 @@ void move_d(DDukeActor *actor, int playernum, int xvel) if (actor->spr.pos.Z < c + 66) { actor->spr.pos.Z = c + 66; - actor->spr.zvel >>= 1; + actor->mul_int_zvel(0.5); } } } diff --git a/source/games/duke/src/actors_r.cpp b/source/games/duke/src/actors_r.cpp index 91d84b22d..9af6899b5 100644 --- a/source/games/duke/src/actors_r.cpp +++ b/source/games/duke/src/actors_r.cpp @@ -2364,7 +2364,7 @@ static void heavyhbomb(DDukeActor *actor) } actor->set_int_zvel(-((4 - actor->spr.yvel) << 8)); if (actor->sector()->lotag == 2) - actor->spr.zvel >>= 2; + actor->mul_int_zvel(0.25); actor->spr.yvel++; } if (actor->spr.picnum != CHEERBOMB && actor->spr.pos.Z < actor->ceilingz + 16 && sectp->lotag != 2) @@ -3666,7 +3666,7 @@ void move_r(DDukeActor *actor, int pnum, int xvel) if (actor->spr.pos.Z < c + 66) { actor->spr.pos.Z = c + 66; - actor->spr.zvel >>= 1; + actor->mul_int_zvel(0.5); } } } diff --git a/source/games/duke/src/player_d.cpp b/source/games/duke/src/player_d.cpp index 10cfddde8..8212659ce 100644 --- a/source/games/duke/src/player_d.cpp +++ b/source/games/duke/src/player_d.cpp @@ -2226,7 +2226,7 @@ static void operateweapon(int snum, ESyncBits actions) if (k < 512) { spawned->add_int_ang(1024); - spawned->spr.zvel /= 3; + spawned->mul_int_zvel(1./3.); spawned->spr.xvel /= 3; } diff --git a/source/games/duke/src/player_r.cpp b/source/games/duke/src/player_r.cpp index cc545c3e3..d47665c63 100644 --- a/source/games/duke/src/player_r.cpp +++ b/source/games/duke/src/player_r.cpp @@ -2763,7 +2763,7 @@ static void operateweapon(int snum, ESyncBits actions, sectortype* psectp) if (k < 512) { spawned->add_int_ang(1024); - spawned->spr.zvel /= 3; + spawned->mul_int_zvel(1./3.); spawned->spr.xvel /= 3; } diff --git a/source/games/duke/src/player_w.cpp b/source/games/duke/src/player_w.cpp index a3db55dea..bb5e69c3d 100644 --- a/source/games/duke/src/player_w.cpp +++ b/source/games/duke/src/player_w.cpp @@ -367,7 +367,7 @@ void operateweapon_ww(int snum, ESyncBits actions) if (k < 512) { j->add_int_ang(1024); - j->spr.zvel /= 3; + j->mul_int_zvel(1./3.); j->spr.xvel /= 3; } diff --git a/source/games/exhumed/src/move.cpp b/source/games/exhumed/src/move.cpp index 86585ffa3..120c67970 100644 --- a/source/games/exhumed/src/move.cpp +++ b/source/games/exhumed/src/move.cpp @@ -1322,7 +1322,7 @@ DExhumedActor* BuildCreatureChunk(DExhumedActor* pSrc, int nPic, bool bSpecial) { pActor->spr.xvel *= 4; pActor->spr.yvel *= 4; - pActor->spr.zvel *= 2; + pActor->mul_int_zvel(2); } pActor->spr.xrepeat = 64; diff --git a/source/games/exhumed/src/object.cpp b/source/games/exhumed/src/object.cpp index 00bbb5c1e..c9eaca96e 100644 --- a/source/games/exhumed/src/object.cpp +++ b/source/games/exhumed/src/object.cpp @@ -2039,7 +2039,7 @@ void AIObject::RadialDamage(RunListEvent* ev) { pActor->spr.xvel >>= 1; pActor->spr.yvel >>= 1; - pActor->spr.zvel >>= 1; + pActor->mul_int_zvel(0.5); } if (pActor->nHealth > 0) { diff --git a/source/games/exhumed/src/queen.cpp b/source/games/exhumed/src/queen.cpp index aa0c634a8..a83935234 100644 --- a/source/games/exhumed/src/queen.cpp +++ b/source/games/exhumed/src/queen.cpp @@ -619,7 +619,7 @@ void AIQueenEgg::Tick(RunListEvent* ev) if (nMov.exbits & kHitAux2) { - pActor->set_int_zvel(-(pActor->int_vel() - 256)); + pActor->set_int_zvel(-(pActor->int_zvel() - 256)); if (pActor->int_zvel() < -512) { pActor->set_int_zvel(0);