From b42672dcf9c7a4c6827885e61e829f4ad065b054 Mon Sep 17 00:00:00 2001
From: Mitchell Richters <mjr4077au@gmail.com>
Date: Mon, 21 Nov 2022 15:20:08 +1100
Subject: [PATCH] - Duke: Remove `player_struct::posZget()`.

---
 source/core/coreactor.h                    |  5 +++
 source/games/duke/src/actors.cpp           |  8 ++---
 source/games/duke/src/actors_d.cpp         |  8 ++---
 source/games/duke/src/actors_r.cpp         | 10 +++---
 source/games/duke/src/animatesprites_d.cpp |  4 +--
 source/games/duke/src/animatesprites_r.cpp |  4 +--
 source/games/duke/src/game_misc.cpp        |  2 +-
 source/games/duke/src/gameexec.cpp         |  4 +--
 source/games/duke/src/player.cpp           | 10 +++---
 source/games/duke/src/player_d.cpp         | 40 +++++++++++-----------
 source/games/duke/src/player_r.cpp         | 40 +++++++++++-----------
 source/games/duke/src/sectors.cpp          |  2 +-
 source/games/duke/src/sectors_d.cpp        |  2 +-
 source/games/duke/src/sectors_r.cpp        |  2 +-
 source/games/duke/src/spawn.cpp            |  2 +-
 source/games/duke/src/types.h              |  5 ---
 16 files changed, 74 insertions(+), 74 deletions(-)

diff --git a/source/core/coreactor.h b/source/core/coreactor.h
index 98fa92499..c0886b316 100644
--- a/source/core/coreactor.h
+++ b/source/core/coreactor.h
@@ -156,6 +156,11 @@ public:
 		viewzoffset = oviewzoffset;
 	}
 
+	double getOffsetZ()
+	{
+		return spr.pos.Z + viewzoffset;
+	}
+
 	sectortype* sector() const
 	{
 		return spr.sectp;
diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp
index 9daecc65d..69872e765 100644
--- a/source/games/duke/src/actors.cpp
+++ b/source/games/duke/src/actors.cpp
@@ -972,9 +972,9 @@ void recon(DDukeActor *actor, int explosion, int firelaser, int attacksnd, int p
 
 		if (actor->temp_data[0] == 2)
 		{
-			double l = ps[p].posZget() - actor->spr.pos.Z;
+			double l = ps[p].GetActor()->getOffsetZ() - actor->spr.pos.Z;
 			if (fabs(l) < 48) actor->temp_data[0] = 3;
-			else actor->spr.pos.Z += (Sgn(ps[p].posZget() - actor->spr.pos.Z) * shift); // The shift here differs between Duke and RR.
+			else actor->spr.pos.Z += (Sgn(ps[p].GetActor()->getOffsetZ() - actor->spr.pos.Z) * shift); // The shift here differs between Duke and RR.
 		}
 		else
 		{
@@ -3490,7 +3490,7 @@ void handle_se27(DDukeActor* actor)
 					ud.cameraactor = actor;
 					actor->temp_data[0] = 999;
 					actor->spr.angle += deltaangle(actor->spr.angle, (ps[p].GetActor()->spr.pos.XY() - actor->spr.pos.XY()).Angle()) * 0.125;
-					actor->spr.yint = 100 + int((actor->spr.pos.Z - ps[p].posZget()) * (256. / 257.));
+					actor->spr.yint = 100 + int((actor->spr.pos.Z - ps[p].GetActor()->getOffsetZ()) * (256. / 257.));
 
 				}
 				else if (actor->temp_data[0] == 999)
@@ -3570,7 +3570,7 @@ void handle_se24(DDukeActor *actor, bool scroll, double mult)
 	{
 		if (ps[p].cursector == actor->sector() && ps[p].on_ground)
 		{
-			if (abs(ps[p].posZget() - ps[p].truefz) < gs.playerheight + 9)
+			if (abs(ps[p].GetActor()->getOffsetZ() - ps[p].truefz) < gs.playerheight + 9)
 			{
 				ps[p].fric += vec * (1. / 8.); // keeping the original velocity. to match the animation it should be ~1/24.
 			}
diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp
index a09e2c83c..82b9dbf2d 100644
--- a/source/games/duke/src/actors_d.cpp
+++ b/source/games/duke/src/actors_d.cpp
@@ -1363,7 +1363,7 @@ void movetransports_d(void)
 					}
 					else if (!(sectlotag == 1 && ps[p].on_ground == 1)) break;
 
-					if (onfloorz == 0 && abs(act->spr.pos.Z - ps[p].posZget()) < 24)
+					if (onfloorz == 0 && abs(act->spr.pos.Z - ps[p].GetActor()->getOffsetZ()) < 24)
 						if ((ps[p].jetpack_on == 0) || (ps[p].jetpack_on && (PlayerInput(p, SB_JUMP))) ||
 							(ps[p].jetpack_on && PlayerInput(p, SB_CROUCH)))
 						{
@@ -1386,7 +1386,7 @@ void movetransports_d(void)
 
 					int k = 0;
 
-					if (onfloorz && sectlotag == ST_1_ABOVE_WATER && ps[p].on_ground && ps[p].posZget() > (sectp->floorz - 16) && (PlayerInput(p, SB_CROUCH) || ps[p].vel.Z > 8))
+					if (onfloorz && sectlotag == ST_1_ABOVE_WATER && ps[p].on_ground && ps[p].GetActor()->getOffsetZ() > (sectp->floorz - 16) && (PlayerInput(p, SB_CROUCH) || ps[p].vel.Z > 8))
 						// if( onfloorz && sectlotag == 1 && ps[p].pos.z > (sectp->floorz-(6<<8)) )
 					{
 						k = 1;
@@ -1405,7 +1405,7 @@ void movetransports_d(void)
 
 					}
 
-					if (onfloorz && sectlotag == ST_2_UNDERWATER && ps[p].posZget() < (sectp->ceilingz + 6))
+					if (onfloorz && sectlotag == ST_2_UNDERWATER && ps[p].GetActor()->getOffsetZ() < (sectp->ceilingz + 6))
 					{
 						k = 1;
 						//     if( act2->spr.extra <= 0) break;
@@ -1721,7 +1721,7 @@ static void greenslime(DDukeActor *actor)
 				return;
 			}
 
-		actor->spr.pos.Z = ps[p].posZget() + 8 + ps[p].pyoff - (actor->temp_data[2] + (ps[p].horizon.horiz.Tan() * 2048.)) * zinttoworld;
+		actor->spr.pos.Z = ps[p].GetActor()->getOffsetZ() + 8 + ps[p].pyoff - (actor->temp_data[2] + (ps[p].horizon.horiz.Tan() * 2048.)) * zinttoworld;
 
 		if (actor->temp_data[2] > 512)
 			actor->temp_data[2] -= 128;
diff --git a/source/games/duke/src/actors_r.cpp b/source/games/duke/src/actors_r.cpp
index 32679bccb..b481c6e3d 100644
--- a/source/games/duke/src/actors_r.cpp
+++ b/source/games/duke/src/actors_r.cpp
@@ -1248,7 +1248,7 @@ void movetransports_r(void)
 					}
 					else break;
 
-					if (onfloorz == 0 && fabs(act->spr.pos.Z - ps[p].posZget()) < 24)
+					if (onfloorz == 0 && fabs(act->spr.pos.Z - ps[p].GetActor()->getOffsetZ()) < 24)
 						if ((ps[p].jetpack_on == 0) || (ps[p].jetpack_on && PlayerInput(p, SB_JUMP)) ||
 							(ps[p].jetpack_on && PlayerInput(p, SB_CROUCH)))
 						{
@@ -1270,14 +1270,14 @@ void movetransports_r(void)
 
 					if (isRRRA())
 					{
-						if (onfloorz && sectlotag == 160 && ps[p].posZget() > sectp->floorz - 48)
+						if (onfloorz && sectlotag == 160 && ps[p].GetActor()->getOffsetZ() > sectp->floorz - 48)
 						{
 							k = 2;
 							ps[p].GetActor()->spr.pos.Z = Owner->sector()->ceilingz + 7 + gs.playerheight;
 							ps[p].GetActor()->backupz();
 						}
 
-						if (onfloorz && sectlotag == 161 && ps[p].posZget() < sectp->ceilingz + 6)
+						if (onfloorz && sectlotag == 161 && ps[p].GetActor()->getOffsetZ() < sectp->ceilingz + 6)
 						{
 							k = 2;
 							if (ps[p].GetActor()->spr.extra <= 0) break;
@@ -1286,7 +1286,7 @@ void movetransports_r(void)
 						}
 					}
 
-					if ((onfloorz && sectlotag == ST_1_ABOVE_WATER && ps[p].posZget() > sectp->floorz - 6) ||
+					if ((onfloorz && sectlotag == ST_1_ABOVE_WATER && ps[p].GetActor()->getOffsetZ() > sectp->floorz - 6) ||
 						(onfloorz && sectlotag == ST_1_ABOVE_WATER && ps[p].OnMotorcycle))
 					{
 						if (ps[p].OnBoat) break;
@@ -1302,7 +1302,7 @@ void movetransports_r(void)
 							ps[p].moto_underwater = 1;
 					}
 
-					if (onfloorz && sectlotag == ST_2_UNDERWATER && ps[p].posZget() < sectp->ceilingz + 6)
+					if (onfloorz && sectlotag == ST_2_UNDERWATER && ps[p].GetActor()->getOffsetZ() < sectp->ceilingz + 6)
 					{
 						k = 1;
 						if (ps[p].GetActor()->spr.extra <= 0) break;
diff --git a/source/games/duke/src/animatesprites_d.cpp b/source/games/duke/src/animatesprites_d.cpp
index aa55c3913..e142e1ac5 100644
--- a/source/games/duke/src/animatesprites_d.cpp
+++ b/source/games/duke/src/animatesprites_d.cpp
@@ -345,7 +345,7 @@ void animatesprites_d(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
 				case DEVISTATOR_WEAPON:  newtspr->picnum = DEVISTATORSPRITE;     break;
 				}
 
-				if (h->GetOwner()) newtspr->pos.Z = ps[p].posZget() - 12;
+				if (h->GetOwner()) newtspr->pos.Z = ps[p].GetActor()->getOffsetZ() - 12;
 				else newtspr->pos.Z = h->spr.pos.Z - 51;
 				if (ps[p].curr_weapon == HANDBOMB_WEAPON)
 				{
@@ -541,7 +541,7 @@ void animatesprites_d(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
 							floorz = h->floorz;
 
 
-						if (h->spr.pos.Z - floorz < 8 && ps[screenpeek].posZget() < floorz)
+						if (h->spr.pos.Z - floorz < 8 && ps[screenpeek].GetActor()->getOffsetZ() < floorz)
 						{
 							auto shadowspr = tsprites.newTSprite();
 							*shadowspr = *t;
diff --git a/source/games/duke/src/animatesprites_r.cpp b/source/games/duke/src/animatesprites_r.cpp
index 326eeab64..d1b57cc21 100644
--- a/source/games/duke/src/animatesprites_r.cpp
+++ b/source/games/duke/src/animatesprites_r.cpp
@@ -397,7 +397,7 @@ void animatesprites_r(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
 				case TIT_WEAPON:  newtspr->picnum = TITSPRITE;         break;
 				}
 
-				if (h->GetOwner()) newtspr->pos.Z = ps[p].posZget() - 12;
+				if (h->GetOwner()) newtspr->pos.Z = ps[p].GetActor()->getOffsetZ() - 12;
 				else newtspr->pos.Z = h->spr.pos.Z - 51;
 				if (ps[p].curr_weapon == HANDBOMB_WEAPON)
 				{
@@ -705,7 +705,7 @@ void animatesprites_r(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
 						else
 							floorz = h->floorz;
 
-						if (h->spr.pos.Z - floorz < 8 && ps[screenpeek].posZget() < floorz)
+						if (h->spr.pos.Z - floorz < 8 && ps[screenpeek].GetActor()->getOffsetZ() < floorz)
 						{
 								auto shadowspr = tsprites.newTSprite();
 								*shadowspr = *t;
diff --git a/source/games/duke/src/game_misc.cpp b/source/games/duke/src/game_misc.cpp
index 506fa986f..4ce13d81a 100644
--- a/source/games/duke/src/game_misc.cpp
+++ b/source/games/duke/src/game_misc.cpp
@@ -431,7 +431,7 @@ bool GameInterface::DrawAutomapPlayer(const DVector2& mxy, const DVector2& cpos,
 			auto& pp = ps[p];
 			auto act = pp.GetActor();
 			int i = TILE_APLAYERTOP + (act->vel.X > 1 && pp.on_ground ? (PlayClock >> 4) & 3 : 0);
-			double j = clamp(czoom * act->spr.scale.Y + abs(pp.truefz - pp.posZget()) * REPEAT_SCALE, 0.333, 2.);
+			double j = clamp(czoom * act->spr.scale.Y + abs(pp.truefz - pp.GetActor()->getOffsetZ()) * REPEAT_SCALE, 0.333, 2.);
 
 			auto const vec = OutAutomapVector(mxy - cpos, cangvect, czoom, xydim);
 			auto const daang = -((!SyncInput() ? act->spr.angle : act->interpolatedangle(interpfrac)) - cang).Normalized360().Degrees();
diff --git a/source/games/duke/src/gameexec.cpp b/source/games/duke/src/gameexec.cpp
index 112130660..9350efffd 100644
--- a/source/games/duke/src/gameexec.cpp
+++ b/source/games/duke/src/gameexec.cpp
@@ -334,7 +334,7 @@ void DoPlayer(bool bSet, int lVar1, int lLabelID, int lVar2, DDukeActor* sActor,
 		break;
 
 	case PLAYER_POSZ:
-		if (!bSet) SetGameVarID(lVar2, int(ps[iPlayer].posZget() * (1 / zmaptoworld)), sActor, sPlayer);
+		if (!bSet) SetGameVarID(lVar2, int(ps[iPlayer].GetActor()->getOffsetZ() * (1 / zmaptoworld)), sActor, sPlayer);
 		break;
 
 	case PLAYER_HORIZ:
@@ -2408,7 +2408,7 @@ int ParseState::parse(void)
 					j = 1;
 			else if( (l& prunning) && vel >= 0.5 && PlayerInput(g_p, SB_RUN) )
 					j = 1;
-			else if( (l& phigher) && ps[g_p].posZget() < g_ac->spr.pos.Z - 48)
+			else if( (l& phigher) && ps[g_p].GetActor()->getOffsetZ() < g_ac->spr.pos.Z - 48)
 					j = 1;
 			else if( (l& pwalkingback) && vel <= -0.5 && !(PlayerInput(g_p, SB_RUN)) )
 					j = 1;
diff --git a/source/games/duke/src/player.cpp b/source/games/duke/src/player.cpp
index 9c78ddd4c..4b4ee7b02 100644
--- a/source/games/duke/src/player.cpp
+++ b/source/games/duke/src/player.cpp
@@ -607,7 +607,7 @@ void playerisdead(int snum, int psectlotag, double floorz, double ceilingz)
 	{
 		if (p->on_warping_sector == 0)
 		{
-			if (abs(p->posZget() - floorz) > (gs.playerheight * 0.5))
+			if (abs(p->GetActor()->getOffsetZ() - floorz) > (gs.playerheight * 0.5))
 				p->GetActor()->spr.pos.Z += 348/ 256.;
 		}
 		else
@@ -617,7 +617,7 @@ void playerisdead(int snum, int psectlotag, double floorz, double ceilingz)
 		}
 
 		Collision coll;
-		clipmove(p->GetActor()->spr.pos.XY(), p->posZget(), &p->cursector, DVector2( 0, 0), 10.25, 4., 4., CLIPMASK0, coll);
+		clipmove(p->GetActor()->spr.pos.XY(), p->GetActor()->getOffsetZ(), &p->cursector, DVector2( 0, 0), 10.25, 4., 4., CLIPMASK0, coll);
 	}
 
 	backupplayer(p);
@@ -626,10 +626,10 @@ void playerisdead(int snum, int psectlotag, double floorz, double ceilingz)
 
 	updatesector(p->posGet(), &p->cursector);
 
-	pushmove(p->GetActor()->spr.pos.XY(), p->posZget(), &p->cursector, 8, 4, 20, CLIPMASK0);
+	pushmove(p->GetActor()->spr.pos.XY(), p->GetActor()->getOffsetZ(), &p->cursector, 8, 4, 20, CLIPMASK0);
 	
 	if (floorz > ceilingz + 16 && actor->spr.pal != 1)
-		p->angle.rotscrnang = DAngle::fromBuild(p->dead_flag + ((floorz + p->posZget()) * 2));
+		p->angle.rotscrnang = DAngle::fromBuild(p->dead_flag + ((floorz + p->GetActor()->getOffsetZ()) * 2));
 
 	p->on_warping_sector = 0;
 
@@ -771,7 +771,7 @@ void player_struct::backuppos(bool noclipping)
 		GetActor()->restorevec2();
 	}
 
-	posoldZset(posZget());
+	posoldZset(GetActor()->getOffsetZ());
 	bobpos = GetActor()->spr.pos.XY();
 	opyoff = pyoff;
 }
diff --git a/source/games/duke/src/player_d.cpp b/source/games/duke/src/player_d.cpp
index 54329e901..becbca750 100644
--- a/source/games/duke/src/player_d.cpp
+++ b/source/games/duke/src/player_d.cpp
@@ -384,7 +384,7 @@ static void shootweapon(DDukeActor *actor, int p, DVector3 pos, DAngle ang, int
 		int j = findplayer(actor, &x);
 		pos.Z -= 4;
 		double dist = (ps[j].GetActor()->spr.pos.XY() - actor->spr.pos.XY()).Length();
-		zvel = ((ps[j].posZget() - pos.Z) * 16) / dist;
+		zvel = ((ps[j].GetActor()->getOffsetZ() - pos.Z) * 16) / dist;
 		zvel += 0.5 - krandf(1);
 		if (actor->spr.picnum != BOSS1)
 		{
@@ -933,7 +933,7 @@ static void shootgrowspark(DDukeActor* actor, int p, DVector3 pos, DAngle ang)
 		int j = findplayer(actor, &x);
 		pos.Z -= 4;
 		double dist = (ps[j].GetActor()->spr.pos.XY() - actor->spr.pos.XY()).Length();
-		zvel = ((ps[j].posZget() - pos.Z) * 16) / dist;
+		zvel = ((ps[j].GetActor()->getOffsetZ() - pos.Z) * 16) / dist;
 		zvel += 0.5 - krandf(1);
 		ang += DAngle22_5 / 4 - randomAngle(22.5 / 2);
 	}
@@ -1022,7 +1022,7 @@ static void shootshrinker(DDukeActor* actor, int p, const DVector3& pos, DAngle
 		double x;
 		int j = findplayer(actor, &x);
 		double dist = (ps[j].GetActor()->spr.pos.XY() - actor->spr.pos.XY()).Length();
-		zvel = ((ps[j].posZget() - pos.Z) * 32) / dist;
+		zvel = ((ps[j].GetActor()->getOffsetZ() - pos.Z) * 32) / dist;
 	}
 	else zvel = 0;
 
@@ -1729,9 +1729,9 @@ static void operateJetpack(int snum, ESyncBits actions, int psectlotag, double f
 	if (psectlotag != 2 && p->scuba_on == 1)
 		p->scuba_on = 0;
 
-	if (p->posZget() > floorz - k)
-		p->GetActor()->spr.pos.Z += ((floorz - k) - p->posZget()) * 0.5;
-	if (p->posZget() < pact->ceilingz + 18)
+	if (p->GetActor()->getOffsetZ() > floorz - k)
+		p->GetActor()->spr.pos.Z += ((floorz - k) - p->GetActor()->getOffsetZ()) * 0.5;
+	if (p->GetActor()->getOffsetZ() < pact->ceilingz + 18)
 		p->GetActor()->spr.pos.Z = pact->ceilingz + 18 + gs.playerheight;
 
 }
@@ -1786,11 +1786,11 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo
 		footprints(snum);
 	}
 
-	if (p->posZget() < floorz - i) //falling
+	if (p->GetActor()->getOffsetZ() < floorz - i) //falling
 	{
 
 		// not jumping or crouching
-		if ((actions & (SB_JUMP|SB_CROUCH)) == 0 && p->on_ground && (psect->floorstat & CSTAT_SECTOR_SLOPE) && p->posZget() >= (floorz - i - 16))
+		if ((actions & (SB_JUMP|SB_CROUCH)) == 0 && p->on_ground && (psect->floorstat & CSTAT_SECTOR_SLOPE) && p->GetActor()->getOffsetZ() >= (floorz - i - 16))
 			p->GetActor()->spr.pos.Z = floorz - i + gs.playerheight;
 		else
 		{
@@ -1804,7 +1804,7 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo
 					S_PlayActorSound(DUKE_SCREAM, pact);
 			}
 
-			if (p->posZget() + p->vel.Z  >= floorz - i) // hit the ground
+			if (p->GetActor()->getOffsetZ() + p->vel.Z  >= floorz - i) // hit the ground
 			{
 				S_StopSound(DUKE_SCREAM, pact);
 				if (!p->insector() || p->cursector->lotag != 1)
@@ -1848,7 +1848,7 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo
 		{
 			//Smooth on the ground
 
-			double k = (floorz - i - p->posZget()) * 0.5;
+			double k = (floorz - i - p->GetActor()->getOffsetZ()) * 0.5;
 			if (abs(k) < 1) k = 0;
 			p->GetActor()->spr.pos.Z += k;
 			p->vel.Z -= 3;
@@ -1856,8 +1856,8 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo
 		}
 		else if (p->jumping_counter == 0)
 		{
-			p->GetActor()->spr.pos.Z += ((floorz - i * 0.5) - p->posZget()) * 0.5; //Smooth on the water
-			if (p->on_warping_sector == 0 && p->posZget() > floorz - 16)
+			p->GetActor()->spr.pos.Z += ((floorz - i * 0.5) - p->GetActor()->getOffsetZ()) * 0.5; //Smooth on the water
+			if (p->on_warping_sector == 0 && p->GetActor()->getOffsetZ() > floorz - 16)
 			{
 				p->GetActor()->spr.pos.Z = floorz - 16 + gs.playerheight;
 				p->vel.Z *= 0.5;
@@ -1912,7 +1912,7 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo
 
 	p->GetActor()->spr.pos.Z += p->vel.Z;
 
-	if (p->posZget() < ceilingz + 4)
+	if (p->GetActor()->getOffsetZ() < ceilingz + 4)
 	{
 		p->jumping_counter = 0;
 		if (p->vel.Z < 0)
@@ -1979,10 +1979,10 @@ static void underwater(int snum, ESyncBits actions, double floorz, double ceilin
 
 	p->GetActor()->spr.pos.Z += p->vel.Z;
 
-	if (p->posZget() > floorz - 15)
-		p->GetActor()->spr.pos.Z += ((floorz - 15) - p->posZget()) * 0.5;
+	if (p->GetActor()->getOffsetZ() > floorz - 15)
+		p->GetActor()->spr.pos.Z += ((floorz - 15) - p->GetActor()->getOffsetZ()) * 0.5;
 
-	if (p->posZget() < ceilingz + 4)
+	if (p->GetActor()->getOffsetZ() < ceilingz + 4)
 	{
 		p->GetActor()->spr.pos.Z = ceilingz + 4 + gs.playerheight;
 		p->vel.Z = 0;
@@ -1995,7 +1995,7 @@ static void underwater(int snum, ESyncBits actions, double floorz, double ceilin
 		{
 			j->spr.pos += (p->angle.ang.ToVector() + DVector2(4 - (global_random & 8), 4 - (global_random & 8))) * 16;
 			j->spr.scale = DVector2(0.046875, 0.3125);
-			j->spr.pos.Z = p->posZget() + 8;
+			j->spr.pos.Z = p->GetActor()->getOffsetZ() + 8;
 		}
 	}
 }
@@ -2755,7 +2755,7 @@ void processinput_d(int snum)
 	p->truefz = getflorzofslopeptr(psectp, p->posGet());
 	p->truecz = getceilzofslopeptr(psectp, p->posGet());
 
-	truefdist = abs(p->posZget() - p->truefz);
+	truefdist = abs(p->GetActor()->getOffsetZ() - p->truefz);
 	if (clz.type == kHitSector && psectlotag == 1 && truefdist > gs.playerheight + 16)
 		psectlotag = 0;
 
@@ -3038,7 +3038,7 @@ HORIZONLY:
 		ChangeActorSect(pact, p->cursector);
 	}
 	else
-		clipmove(p->GetActor()->spr.pos.XY(), p->posZget(), &p->cursector, p->vel, 10.25, 4., iif, CLIPMASK0, clip);
+		clipmove(p->GetActor()->spr.pos.XY(), p->GetActor()->getOffsetZ(), &p->cursector, p->vel, 10.25, 4., iif, CLIPMASK0, clip);
 
 	if (p->jetpack_on == 0 && psectlotag != 2 && psectlotag != 1 && shrunk)
 		p->GetActor()->spr.pos.Z += 32;
@@ -3090,7 +3090,7 @@ HORIZONLY:
 	while (ud.clipping == 0)
 	{
 		int blocked;
-		blocked = (pushmove(p->GetActor()->spr.pos.XY(), p->posZget(), &p->cursector, 10.25, 4, 4, CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90);
+		blocked = (pushmove(p->GetActor()->spr.pos.XY(), p->GetActor()->getOffsetZ(), &p->cursector, 10.25, 4, 4, CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90);
 
 		if (fabs(pact->floorz - pact->ceilingz) < 48 || blocked)
 		{
diff --git a/source/games/duke/src/player_r.cpp b/source/games/duke/src/player_r.cpp
index bf74a5bcb..13fb10716 100644
--- a/source/games/duke/src/player_r.cpp
+++ b/source/games/duke/src/player_r.cpp
@@ -245,7 +245,7 @@ static void shootweapon(DDukeActor* actor, int p, DVector3 pos, DAngle ang, int
 		int j = findplayer(actor, &x);
 		pos.Z -= 4;
 		double dist = (ps[j].GetActor()->spr.pos.XY() - actor->spr.pos.XY()).Length();
-		zvel = ((ps[j].posZget() - pos.Z) * 16) / dist;
+		zvel = ((ps[j].GetActor()->getOffsetZ() - pos.Z) * 16) / dist;
 		if (actor->spr.picnum != BOSS1)
 		{
 			zvel += 0.5 - krandf(1);
@@ -2077,15 +2077,15 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo
 		footprints(snum);
 	}
 
-	if (p->posZget() < floorz - i) //falling
+	if (p->GetActor()->getOffsetZ() < floorz - i) //falling
 	{
-		if ((actions & (SB_JUMP|SB_CROUCH)) == 0 && p->on_ground && (psect->floorstat & CSTAT_SECTOR_SLOPE) && p->posZget() >= (floorz - i - 16))
+		if ((actions & (SB_JUMP|SB_CROUCH)) == 0 && p->on_ground && (psect->floorstat & CSTAT_SECTOR_SLOPE) && p->GetActor()->getOffsetZ() >= (floorz - i - 16))
 			p->GetActor()->spr.pos.Z = floorz - i + gs.playerheight;
 		else
 		{
 			p->on_ground = 0;
 
-			if ((p->OnMotorcycle || p->OnBoat) && floorz - i * 2 > p->posZget())
+			if ((p->OnMotorcycle || p->OnBoat) && floorz - i * 2 > p->GetActor()->getOffsetZ())
 			{
 				if (p->MotoOnGround)
 				{
@@ -2115,7 +2115,7 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo
 					S_PlayActorSound(DUKE_SCREAM, pact);
 			}
 
-			if (p->posZget() + p->vel.Z  >= floorz - i) // hit the ground
+			if (p->GetActor()->getOffsetZ() + p->vel.Z  >= floorz - i) // hit the ground
 			{
 				S_StopSound(DUKE_SCREAM, pact);
 				if (!p->insector() || p->cursector->lotag != 1)
@@ -2175,7 +2175,7 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo
 		{
 			//Smooth on the ground
 
-			double k = (floorz - i - p->posZget()) * 0.5;
+			double k = (floorz - i - p->GetActor()->getOffsetZ()) * 0.5;
 			if (abs(k) < 1) k = 0;
 			p->GetActor()->spr.pos.Z += k;
 			p->vel.Z -= 3;
@@ -2183,8 +2183,8 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo
 		}
 		else if (p->jumping_counter == 0)
 		{
-			p->GetActor()->spr.pos.Z += ((floorz - i * 0.5) - p->posZget()) * 0.5; //Smooth on the water
-			if (p->on_warping_sector == 0 && p->posZget() > floorz - 16)
+			p->GetActor()->spr.pos.Z += ((floorz - i * 0.5) - p->GetActor()->getOffsetZ()) * 0.5; //Smooth on the water
+			if (p->on_warping_sector == 0 && p->GetActor()->getOffsetZ() > floorz - 16)
 			{
 				p->GetActor()->spr.pos.Z = floorz - 16 + gs.playerheight;
 				p->vel.Z *= 0.5;
@@ -2235,7 +2235,7 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo
 
 	p->GetActor()->spr.pos.Z += p->vel.Z;
 
-	if (p->posZget() < ceilingz + 4)
+	if (p->GetActor()->getOffsetZ() < ceilingz + 4)
 	{
 		p->jumping_counter = 0;
 		if (p->vel.Z < 0)
@@ -2298,10 +2298,10 @@ static void underwater(int snum, ESyncBits actions, double floorz, double ceilin
 
 	p->GetActor()->spr.pos.Z += p->vel.Z;
 
-	if (p->posZget() > floorz - 15)
-		p->GetActor()->spr.pos.Z += ((floorz - 15) - p->posZget()) * 0.5;
+	if (p->GetActor()->getOffsetZ() > floorz - 15)
+		p->GetActor()->spr.pos.Z += ((floorz - 15) - p->GetActor()->getOffsetZ()) * 0.5;
 
-	if (p->posZget() < ceilingz + 4)
+	if (p->GetActor()->getOffsetZ() < ceilingz + 4)
 	{
 		p->GetActor()->spr.pos.Z = ceilingz + 4 + gs.playerheight;
 		p->vel.Z = 0;
@@ -2314,7 +2314,7 @@ static void underwater(int snum, ESyncBits actions, double floorz, double ceilin
 		{
 			j->spr.pos += (p->angle.ang.ToVector() + DVector2(12 - (global_random & 8), 12 - (global_random & 8))) * 16;
 			j->spr.scale = DVector2(0.046875, 0.03125);
-			j->spr.pos.Z = p->posZget() + 8;
+			j->spr.pos.Z = p->GetActor()->getOffsetZ() + 8;
 			j->spr.cstat = CSTAT_SPRITE_TRANS_FLIP | CSTAT_SPRITE_TRANSLUCENT;
 		}
 	}
@@ -3332,7 +3332,7 @@ void processinput_r(int snum)
 		while (auto act2 = it.Next())
 		{
 			if (act2->spr.picnum == RRTILE380)
-				if (act2->spr.pos.Z - 8 < p->posZget())
+				if (act2->spr.pos.Z - 8 < p->GetActor()->getOffsetZ())
 					psectlotag = 2;
 		}
 	}
@@ -3365,7 +3365,7 @@ void processinput_r(int snum)
 	p->truefz = tempfz;
 	p->truecz = getceilzofslopeptr(psectp, p->posGet());
 
-	double truefdist = abs(p->posZget() - tempfz);
+	double truefdist = abs(p->GetActor()->getOffsetZ() - tempfz);
 	if (clz.type == kHitSector && psectlotag == 1 && truefdist > gs.playerheight + 16)
 		psectlotag = 0;
 
@@ -3742,7 +3742,7 @@ HORIZONLY:
 		ChangeActorSect(pact, p->cursector);
 	}
 	else
-		clipmove(p->GetActor()->spr.pos.XY(), p->posZget(), &p->cursector, p->vel, 10.25, 4., iif, CLIPMASK0, clip);
+		clipmove(p->GetActor()->spr.pos.XY(), p->GetActor()->getOffsetZ(), &p->cursector, p->vel, 10.25, 4., iif, CLIPMASK0, clip);
 
 	if (p->jetpack_on == 0 && psectlotag != 2 && psectlotag != 1 && shrunk)
 		p->GetActor()->spr.pos.Z += 32;
@@ -3771,10 +3771,10 @@ HORIZONLY:
 				if (wal->lotag < 44)
 				{
 					dofurniture(clip.hitWall, p->cursector, snum);
-					pushmove(p->GetActor()->spr.pos.XY(), p->posZget(), &p->cursector, 10.75, 4, 4, CLIPMASK0);
+					pushmove(p->GetActor()->spr.pos.XY(), p->GetActor()->getOffsetZ(), &p->cursector, 10.75, 4, 4, CLIPMASK0);
 				}
 				else
-					pushmove(p->GetActor()->spr.pos.XY(), p->posZget(), &p->cursector, 10.75, 4, 4, CLIPMASK0);
+					pushmove(p->GetActor()->spr.pos.XY(), p->GetActor()->getOffsetZ(), &p->cursector, 10.75, 4, 4, CLIPMASK0);
 			}
 		}
 	}
@@ -3875,9 +3875,9 @@ HORIZONLY:
 	{
 		int blocked;
 		if (pact->clipdist == 16)
-			blocked = (pushmove(p->GetActor()->spr.pos.XY(), p->posZget(), &p->cursector, 8, 4, 4, CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90);
+			blocked = (pushmove(p->GetActor()->spr.pos.XY(), p->GetActor()->getOffsetZ(), &p->cursector, 8, 4, 4, CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90);
 		else
-			blocked = (pushmove(p->GetActor()->spr.pos.XY(), p->posZget(), &p->cursector, 1, 4, 4, CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90);
+			blocked = (pushmove(p->GetActor()->spr.pos.XY(), p->GetActor()->getOffsetZ(), &p->cursector, 1, 4, 4, CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90);
 
 		if (fabs(pact->floorz - pact->ceilingz) < 48 || blocked)
 		{
diff --git a/source/games/duke/src/sectors.cpp b/source/games/duke/src/sectors.cpp
index 6281ddfd2..8a69ba5ce 100644
--- a/source/games/duke/src/sectors.cpp
+++ b/source/games/duke/src/sectors.cpp
@@ -380,7 +380,7 @@ void doanimations(void)
 		{
 			for (auto p = connecthead; p >= 0; p = connectpoint2[p])
 				if (ps[p].cursector == dasectp)
-					if ((dasectp->floorz - ps[p].posZget()) < 64)
+					if ((dasectp->floorz - ps[p].GetActor()->getOffsetZ()) < 64)
 						if (ps[p].GetActor()->GetOwner() != nullptr)
 						{
 							ps[p].GetActor()->spr.pos.Z += v;
diff --git a/source/games/duke/src/sectors_d.cpp b/source/games/duke/src/sectors_d.cpp
index ae0c86be9..0e77a9312 100644
--- a/source/games/duke/src/sectors_d.cpp
+++ b/source/games/duke/src/sectors_d.cpp
@@ -452,7 +452,7 @@ bool checkhitswitch_d(int snum, walltype* wwal, DDukeActor *act)
 		return 1;
 	}
 
-	DVector3 v(spos, ps[snum].posZget());
+	DVector3 v(spos, ps[snum].GetActor()->getOffsetZ());
 	switch (picnum)
 	{
 	default:
diff --git a/source/games/duke/src/sectors_r.cpp b/source/games/duke/src/sectors_r.cpp
index 721fde8bb..6a9513696 100644
--- a/source/games/duke/src/sectors_r.cpp
+++ b/source/games/duke/src/sectors_r.cpp
@@ -646,7 +646,7 @@ bool checkhitswitch_r(int snum, walltype* wwal, DDukeActor* act)
 		setnextmap(false);
 	}
 
-	DVector3 v(pos, ps[snum].posZget());
+	DVector3 v(pos, ps[snum].GetActor()->getOffsetZ());
 	switch (picnum)
 	{
 	default:
diff --git a/source/games/duke/src/spawn.cpp b/source/games/duke/src/spawn.cpp
index fc4bf45dd..240f757fe 100644
--- a/source/games/duke/src/spawn.cpp
+++ b/source/games/duke/src/spawn.cpp
@@ -430,7 +430,7 @@ void initshell(DDukeActor* actj, DDukeActor* act, bool isshell)
 			ang = ps[snum].angle.ang - mapangle((krand() & 63) + 8);  //Fine tune
 
 			act->temp_data[0] = krand() & 1;
-			act->spr.pos.Z = 3 + ps[snum].posZget() + ps[snum].pyoff + (ps[snum].horizon.sum().Tan() * 8.) + (!isshell ? 3 : 0);
+			act->spr.pos.Z = 3 + ps[snum].GetActor()->getOffsetZ() + ps[snum].pyoff + (ps[snum].horizon.sum().Tan() * 8.) + (!isshell ? 3 : 0);
 			act->vel.Z = -krandf(1);
 		}
 		else
diff --git a/source/games/duke/src/types.h b/source/games/duke/src/types.h
index 7c1779077..c1b03490f 100644
--- a/source/games/duke/src/types.h
+++ b/source/games/duke/src/types.h
@@ -336,11 +336,6 @@ struct player_struct
 	}
 
 
-	double posZget()
-	{
-		return GetActor()->spr.pos.Z + GetActor()->viewzoffset;
-	}
-
 	void posSet(const DVector3& val)
 	{
 		GetActor()->spr.pos = val.plusZ(-GetActor()->viewzoffset);