diff --git a/source/core/coreactor.h b/source/core/coreactor.h index d2bdbd4bd..98fa92499 100644 --- a/source/core/coreactor.h +++ b/source/core/coreactor.h @@ -139,6 +139,12 @@ public: backupang(); } + void restorez() + { + spr.pos.Z = opos.Z; + viewzoffset = oviewzoffset; + } + void restorevec2() { spr.pos.XY() = opos.XY(); diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp index 5cc9269f8..a09e2c83c 100644 --- a/source/games/duke/src/actors_d.cpp +++ b/source/games/duke/src/actors_d.cpp @@ -1371,8 +1371,8 @@ void movetransports_d(void) ps[p].GetActor()->backupvec2(); if (ps[p].jetpack_on && (PlayerInput(p, SB_JUMP) || ps[p].jetpack_on < 11)) - ps[p].posZset(Owner->spr.pos.Z - 24); - else ps[p].posZset(Owner->spr.pos.Z + 24); + ps[p].GetActor()->spr.pos.Z = Owner->spr.pos.Z - 24 + gs.playerheight; + else ps[p].GetActor()->spr.pos.Z = Owner->spr.pos.Z + 24 + gs.playerheight; ps[p].GetActor()->backupz(); auto pa = ps[p].GetActor(); @@ -1396,7 +1396,7 @@ void movetransports_d(void) } if (ps[p].GetActor()->spr.extra > 0) S_PlayActorSound(DUKE_UNDERWATER, act2); - ps[p].posZset(Owner->sector()->ceilingz + 7); + ps[p].GetActor()->spr.pos.Z = Owner->sector()->ceilingz + 7 + gs.playerheight; ps[p].GetActor()->backupz(); // this is actually below the precision óf the original Build coordinate system... @@ -1415,7 +1415,7 @@ void movetransports_d(void) } S_PlayActorSound(DUKE_GASP, act2); - ps[p].posZset(Owner->sector()->floorz - 7); + ps[p].GetActor()->spr.pos.Z = Owner->sector()->floorz - 7 + gs.playerheight; ps[p].GetActor()->backupz(); ps[p].jumping_toggle = 1; diff --git a/source/games/duke/src/actors_r.cpp b/source/games/duke/src/actors_r.cpp index 82eafe7f3..32679bccb 100644 --- a/source/games/duke/src/actors_r.cpp +++ b/source/games/duke/src/actors_r.cpp @@ -1256,8 +1256,8 @@ void movetransports_r(void) ps[p].GetActor()->backupvec2(); if (ps[p].jetpack_on && (PlayerInput(p, SB_JUMP) || ps[p].jetpack_on < 11)) - ps[p].posZset(Owner->spr.pos.Z - 24); - else ps[p].posZset(Owner->spr.pos.Z + 24); + ps[p].GetActor()->spr.pos.Z = Owner->spr.pos.Z - 24 + gs.playerheight; + else ps[p].GetActor()->spr.pos.Z = Owner->spr.pos.Z + 24 + gs.playerheight; ps[p].GetActor()->backupz(); ChangeActorSect(act2, Owner->sector()); @@ -1273,7 +1273,7 @@ void movetransports_r(void) if (onfloorz && sectlotag == 160 && ps[p].posZget() > sectp->floorz - 48) { k = 2; - ps[p].posZset(Owner->sector()->ceilingz + 7); + ps[p].GetActor()->spr.pos.Z = Owner->sector()->ceilingz + 7 + gs.playerheight; ps[p].GetActor()->backupz(); } @@ -1281,7 +1281,7 @@ void movetransports_r(void) { k = 2; if (ps[p].GetActor()->spr.extra <= 0) break; - ps[p].posZset(Owner->sector()->floorz - 49); + ps[p].GetActor()->spr.pos.Z = Owner->sector()->floorz - 49 + gs.playerheight; ps[p].GetActor()->backupz(); } } @@ -1296,7 +1296,7 @@ void movetransports_r(void) FX_StopAllSounds(); } S_PlayActorSound(DUKE_UNDERWATER, ps[p].GetActor()); - ps[p].posZset(Owner->sector()->ceilingz + 7); + ps[p].GetActor()->spr.pos.Z = Owner->sector()->ceilingz + 7 + gs.playerheight; ps[p].GetActor()->backupz(); if (ps[p].OnMotorcycle) ps[p].moto_underwater = 1; @@ -1312,7 +1312,7 @@ void movetransports_r(void) } S_PlayActorSound(DUKE_GASP, ps[p].GetActor()); - ps[p].posZset(Owner->sector()->floorz - 7); + ps[p].GetActor()->spr.pos.Z = Owner->sector()->floorz - 7 + gs.playerheight; ps[p].GetActor()->backupz(); } diff --git a/source/games/duke/src/player_d.cpp b/source/games/duke/src/player_d.cpp index 01ab49eb9..71e9bf0d0 100644 --- a/source/games/duke/src/player_d.cpp +++ b/source/games/duke/src/player_d.cpp @@ -1732,7 +1732,7 @@ static void operateJetpack(int snum, ESyncBits actions, int psectlotag, double f if (p->posZget() > floorz - k) p->posZadd(((floorz - k) - p->posZget()) * 0.5); if (p->posZget() < pact->ceilingz + 18) - p->posZset(pact->ceilingz + 18); + p->GetActor()->spr.pos.Z = pact->ceilingz + 18 + gs.playerheight; } @@ -1791,7 +1791,7 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo // not jumping or crouching if ((actions & (SB_JUMP|SB_CROUCH)) == 0 && p->on_ground && (psect->floorstat & CSTAT_SECTOR_SLOPE) && p->posZget() >= (floorz - i - 16)) - p->posZset(floorz - i); + p->GetActor()->spr.pos.Z = floorz - i + gs.playerheight; else { p->on_ground = 0; @@ -1859,7 +1859,7 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo p->posZadd(((floorz - i * 0.5) - p->posZget()) * 0.5); //Smooth on the water if (p->on_warping_sector == 0 && p->posZget() > floorz - 16) { - p->posZset(floorz - 16); + p->GetActor()->spr.pos.Z = floorz - 16 + gs.playerheight; p->vel.Z *= 0.5; } } @@ -1918,7 +1918,7 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo if (p->vel.Z < 0) p->vel.X = p->vel.Y = 0; p->vel.Z = 0.5; - p->posZset(ceilingz + 4); + p->GetActor()->spr.pos.Z = ceilingz + 4 + gs.playerheight; } } @@ -1984,7 +1984,7 @@ static void underwater(int snum, ESyncBits actions, double floorz, double ceilin if (p->posZget() < ceilingz + 4) { - p->posZset(ceilingz + 4); + p->GetActor()->spr.pos.Z = ceilingz + 4 + gs.playerheight; p->vel.Z = 0; } @@ -2043,7 +2043,7 @@ int operateTripbomb(int snum) auto delta = hit.hitpos.XY() - p->GetActor()->spr.pos.XY(); if (delta.LengthSquared() < (18.125 * 18.125)) { - p->posZset(p->posoldZget()); + p->GetActor()->restorez(); p->vel.Z = 0; return 1; } @@ -2585,7 +2585,7 @@ static void operateweapon(int snum, ESyncBits actions) case TRIPBOMB_WEAPON: // Claymore in NAM if (p->kickback_pic < 4) { - p->posZset(p->posoldZget()); + p->GetActor()->restorez(); p->vel.Z = 0; if (p->kickback_pic == 3) fi.shoot(pact, HANDHOLDINGLASER); diff --git a/source/games/duke/src/player_r.cpp b/source/games/duke/src/player_r.cpp index 64b58e85c..90a161232 100644 --- a/source/games/duke/src/player_r.cpp +++ b/source/games/duke/src/player_r.cpp @@ -2080,7 +2080,7 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo if (p->posZget() < floorz - i) //falling { if ((actions & (SB_JUMP|SB_CROUCH)) == 0 && p->on_ground && (psect->floorstat & CSTAT_SECTOR_SLOPE) && p->posZget() >= (floorz - i - 16)) - p->posZset(floorz - i); + p->GetActor()->spr.pos.Z = floorz - i + gs.playerheight; else { p->on_ground = 0; @@ -2186,7 +2186,7 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo p->posZadd(((floorz - i * 0.5) - p->posZget()) * 0.5); //Smooth on the water if (p->on_warping_sector == 0 && p->posZget() > floorz - 16) { - p->posZset(floorz - 16); + p->GetActor()->spr.pos.Z = floorz - 16 + gs.playerheight; p->vel.Z *= 0.5; } } @@ -2241,7 +2241,7 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo if (p->vel.Z < 0) p->vel.X = p->vel.Y = 0; p->vel.Z = 0.5; - p->posZset(ceilingz + 4); + p->GetActor()->spr.pos.Z = ceilingz + 4 + gs.playerheight; } } @@ -2303,7 +2303,7 @@ static void underwater(int snum, ESyncBits actions, double floorz, double ceilin if (p->posZget() < ceilingz + 4) { - p->posZset(ceilingz + 4); + p->GetActor()->spr.pos.Z = ceilingz + 4 + gs.playerheight; p->vel.Z = 0; } diff --git a/source/games/duke/src/player_w.cpp b/source/games/duke/src/player_w.cpp index b4febaf13..96ad5e3ed 100644 --- a/source/games/duke/src/player_w.cpp +++ b/source/games/duke/src/player_w.cpp @@ -436,7 +436,7 @@ void operateweapon_ww(int snum, ESyncBits actions) if (aplWeaponFlags(p->curr_weapon, snum) & WEAPON_FLAG_STANDSTILL && p->kickback_pic < (aplWeaponFireDelay(p->curr_weapon, snum) + 1)) { - p->posZset(p->posoldZget()); + p->GetActor()->restorez(); p->vel.Z = 0; } if (p->kickback_pic == aplWeaponSound2Time(p->curr_weapon, snum)) diff --git a/source/games/duke/src/types.h b/source/games/duke/src/types.h index 7d1286f88..e00eee076 100644 --- a/source/games/duke/src/types.h +++ b/source/games/duke/src/types.h @@ -336,10 +336,6 @@ struct player_struct } - void posZset(const double val) - { - GetActor()->spr.pos.Z = val - GetActor()->viewzoffset; - } void posZadd(const double val) { GetActor()->spr.pos.Z += val;