From 3b66cd4047e578dcec1e0a3559c3d78d5d874f4d Mon Sep 17 00:00:00 2001
From: Christoph Oelckers <coelckers@users.noreply.github.com>
Date: Sun, 6 Feb 2022 20:02:58 +0100
Subject: [PATCH] - more floatification cleanup.

---
 source/games/duke/src/actors.cpp     | 24 ++++++++------------
 source/games/duke/src/actors_r.cpp   | 34 +++++++++++++---------------
 source/games/duke/src/game_misc.cpp  |  6 ++---
 source/games/duke/src/prediction.cpp |  6 ++---
 4 files changed, 32 insertions(+), 38 deletions(-)

diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp
index 0d273fcb1..a8a3b5574 100644
--- a/source/games/duke/src/actors.cpp
+++ b/source/games/duke/src/actors.cpp
@@ -397,7 +397,7 @@ void moveplayers(void)
 		{
 			if (p->newOwner != nullptr) //Looking thru the camera
 			{
-				act->set_int_pos({ p->player_int_opos().X, p->player_int_opos().Y, p->player_int_opos().Z + gs.int_playerheight });
+				act->spr.pos = p->opos.plusZ(gs.playerheight);
 				act->backupz();
 				act->spr.ang = p->angle.oang.asbuild();
 				SetActor(act, act->int_pos());
@@ -5202,7 +5202,7 @@ void recordoldspritepos()
 
 void movefta(void)
 {
-	int x, px, py, sx, sy;
+	int x;
 	int canseeme, p;
 	sectortype* psect, * ssect;
 
@@ -5229,20 +5229,16 @@ void movefta(void)
 				{
 					if (badguy(act))
 					{
-						px = ps[p].player_int_opos().X + 64 - (krand() & 127);
-						py = ps[p].player_int_opos().Y + 64 - (krand() & 127);
-						updatesector(px, py, &psect);
+						double px = ps[p].opos.X + (64 - (krand() & 127)) * maptoworld;
+						double py = ps[p].opos.Y + (64 - (krand() & 127)) * maptoworld;
+						updatesector(DVector3(px, py, 0), &psect);
 						if (psect == nullptr)
 						{
 							continue;
 						}
-						sx = act->int_pos().X + 64 - (krand() & 127);
-						sy = act->int_pos().Y + 64 - (krand() & 127);
-						updatesector(px, py, &ssect);
-						if (ssect == nullptr)
-						{
-							continue;
-						}
+						double sx = act->spr.pos.X + (64 - (krand() & 127)) * maptoworld;
+						double sy = act->spr.pos.Y + (64 - (krand() & 127)) * maptoworld;
+						// The second updatesector call here used px and py again and was redundant as coded.
 
 						// SFLAG_MOVEFTA_CHECKSEE is set for all actors in Duke.
 						if (act->spr.pal == 33 || actorflag(act, SFLAG_MOVEFTA_CHECKSEE) ||
@@ -5251,14 +5247,14 @@ void movefta(void)
 						{
 							int r1 = krand();
 							int r2 = krand();
-							canseeme = cansee(sx, sy, act->int_pos().Z - (r2 % (52 << 8)), act->sector(), px, py, ps[p].player_int_opos().Z - (r1 % (32 << 8)), ps[p].cursector);
+							canseeme = cansee({ sx, sy, act->spr.pos.Z - (r2 % (52 << 8)) * maptoworld }, act->sector(), { px, py, ps[p].opos.Z - (r1 % (32 << 8)) * maptoworld }, ps[p].cursector);
 						}
 					}
 					else
 					{
 						int r1 = krand();
 						int r2 = krand();
-						canseeme = cansee(act->int_pos().X, act->int_pos().Y, act->int_pos().Z - ((r2 & 31) << 8), act->sector(), ps[p].player_int_opos().X, ps[p].player_int_opos().Y, ps[p].player_int_opos().Z - ((r1 & 31) << 8), ps[p].cursector);
+						canseeme = cansee(act->spr.pos.plusZ(-(r2 & 31)), act->sector(), ps[p].opos.plusZ(-(r1 & 31)), ps[p].cursector);
 					}
 
 
diff --git a/source/games/duke/src/actors_r.cpp b/source/games/duke/src/actors_r.cpp
index 6891e74f3..a0a332bb2 100644
--- a/source/games/duke/src/actors_r.cpp
+++ b/source/games/duke/src/actors_r.cpp
@@ -1471,7 +1471,7 @@ void movetransports_r(void)
 					}
 					else break;
 
-					if (onfloorz == 0 && abs(act->int_pos().Z - ps[p].player_int_pos().Z) < 6144)
+					if (onfloorz == 0 && fabs(act->spr.pos.Z - ps[p].pos.Z) < 24)
 						if ((ps[p].jetpack_on == 0) || (ps[p].jetpack_on && PlayerInput(p, SB_JUMP)) ||
 							(ps[p].jetpack_on && PlayerInput(p, SB_CROUCH)))
 						{
@@ -1494,14 +1494,14 @@ void movetransports_r(void)
 
 					if (isRRRA())
 					{
-						if (onfloorz && sectlotag == 160 && ps[p].player_int_pos().Z > (sectp->int_floorz() - (48 << 8)))
+						if (onfloorz && sectlotag == 160 && ps[p].pos.Z > sectp->floorz - 48)
 						{
 							k = 2;
 							ps[p].pos.Z = Owner->sector()->ceilingz + 7;
 							ps[p].backupz();
 						}
 
-						if (onfloorz && sectlotag == 161 && ps[p].player_int_pos().Z < (sectp->int_ceilingz() + (6 << 8)))
+						if (onfloorz && sectlotag == 161 && ps[p].pos.Z < sectp->ceilingz + 6)
 						{
 							k = 2;
 							if (ps[p].GetActor()->spr.extra <= 0) break;
@@ -1510,7 +1510,7 @@ void movetransports_r(void)
 						}
 					}
 
-					if ((onfloorz && sectlotag == ST_1_ABOVE_WATER && ps[p].player_int_pos().Z > (sectp->int_floorz() - (6 << 8))) ||
+					if ((onfloorz && sectlotag == ST_1_ABOVE_WATER && ps[p].pos.Z > sectp->floorz - 6) ||
 						(onfloorz && sectlotag == ST_1_ABOVE_WATER && ps[p].OnMotorcycle))
 					{
 						if (ps[p].OnBoat) break;
@@ -1526,7 +1526,7 @@ void movetransports_r(void)
 							ps[p].moto_underwater = 1;
 					}
 
-					if (onfloorz && sectlotag == ST_2_UNDERWATER && ps[p].player_int_pos().Z < (sectp->int_ceilingz() + (6 << 8)))
+					if (onfloorz && sectlotag == ST_2_UNDERWATER && ps[p].pos.Z < sectp->ceilingz + 6)
 					{
 						k = 1;
 						if (ps[p].GetActor()->spr.extra <= 0) break;
@@ -2498,7 +2498,7 @@ DETONATEB:
 		}
 	}
 	else if (actor->spr.picnum == HEAVYHBOMB && x < 788 && actor->temp_data[0] > 7 && actor->spr.xvel == 0)
-		if (cansee(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - (8 << 8), actor->sector(), ps[p].player_int_pos().X, ps[p].player_int_pos().Y, ps[p].player_int_pos().Z, ps[p].cursector))
+		if (cansee(actor->spr.pos.plusZ(-8), actor->sector(), ps[p].pos, ps[p].cursector))
 			if (ps[p].ammo_amount[DYNAMITE_WEAPON] < gs.max_ammo_amount[DYNAMITE_WEAPON])
 				if (actor->spr.pal == 0)
 				{
@@ -3492,8 +3492,8 @@ void move_r(DDukeActor *actor, int pnum, int xvel)
 	if (a & face_player)
 	{
 		if (ps[pnum].newOwner != nullptr)
-			goalang = getangle(ps[pnum].player_int_opos().X - actor->int_pos().X, ps[pnum].player_int_opos().Y - actor->int_pos().Y);
-		else goalang = getangle(ps[pnum].player_int_pos().X - actor->int_pos().X, ps[pnum].player_int_pos().Y - actor->int_pos().Y);
+			goalang = getangle(ps[pnum].opos.XY() - actor->spr.pos.XY());
+		else goalang = getangle(ps[pnum].pos.XY() - actor->spr.pos.XY());
 		angdif = getincangle(actor->spr.ang, goalang) >> 2;
 		if (angdif > -8 && angdif < 0) angdif = 0;
 		actor->spr.ang += angdif;
@@ -3505,8 +3505,8 @@ void move_r(DDukeActor *actor, int pnum, int xvel)
 	if (a & face_player_slow)
 	{
 		if (ps[pnum].newOwner != nullptr)
-			goalang = getangle(ps[pnum].player_int_opos().X - actor->int_pos().X, ps[pnum].player_int_opos().Y - actor->int_pos().Y);
-		else goalang = getangle(ps[pnum].player_int_pos().X - actor->int_pos().X, ps[pnum].player_int_pos().Y - actor->int_pos().Y);
+			goalang = getangle(ps[pnum].opos.XY() - actor->spr.pos.XY());
+		else goalang = getangle(ps[pnum].pos.XY() - actor->spr.pos.XY());
 		angdif = Sgn(getincangle(actor->spr.ang, goalang)) << 5;
 		if (angdif > -32 && angdif < 0)
 		{
@@ -3521,8 +3521,8 @@ void move_r(DDukeActor *actor, int pnum, int xvel)
 		if (a & antifaceplayerslow)
 		{
 			if (ps[pnum].newOwner != nullptr)
-				goalang = (getangle(ps[pnum].player_int_opos().X - actor->int_pos().X, ps[pnum].player_int_opos().Y - actor->int_pos().Y) + 1024) & 2047;
-			else goalang = (getangle(ps[pnum].player_int_pos().X - actor->int_pos().X, ps[pnum].player_int_pos().Y - actor->int_pos().Y) + 1024) & 2047;
+				goalang = (getangle(ps[pnum].opos.XY() - actor->spr.pos.XY()) + 1024) & 2047;
+			else goalang = (getangle(ps[pnum].pos.XY() - actor->spr.pos.XY()) + 1024) & 2047;
 			angdif = Sgn(getincangle(actor->spr.ang, goalang)) << 5;
 			if (angdif > -32 && angdif < 0)
 			{
@@ -3586,11 +3586,9 @@ void move_r(DDukeActor *actor, int pnum, int xvel)
 
 	if (a & face_player_smart)
 	{
-		int newx, newy;
-
-		newx = ps[pnum].player_int_pos().X + (ps[pnum].vel.X / 768);
-		newy = ps[pnum].player_int_pos().Y + (ps[pnum].vel.Y / 768);
-		goalang = getangle(newx - actor->int_pos().X, newy - actor->int_pos().Y);
+		double newx = ps[pnum].pos.X + (ps[pnum].vel.X / 768) * inttoworld;
+		double newy = ps[pnum].pos.Y + (ps[pnum].vel.Y / 768) * inttoworld;
+		goalang = getangle(newx - actor->spr.pos.X, newy - actor->spr.pos.Y);
 		angdif = getincangle(actor->spr.ang, goalang) >> 2;
 		if (angdif > -8 && angdif < 0) angdif = 0;
 		actor->spr.ang += angdif;
@@ -3689,7 +3687,7 @@ void move_r(DDukeActor *actor, int pnum, int xvel)
 			{
 
 				daxvel = -(1024 - xvel);
-				angdif = getangle(ps[pnum].player_int_pos().X - actor->int_pos().X, ps[pnum].player_int_pos().Y - actor->int_pos().Y);
+				angdif = getangle(ps[pnum].pos.XY() - actor->spr.pos.XY());
 
 				if (xvel < 512)
 				{
diff --git a/source/games/duke/src/game_misc.cpp b/source/games/duke/src/game_misc.cpp
index 2ecbd017f..0f21a75e7 100644
--- a/source/games/duke/src/game_misc.cpp
+++ b/source/games/duke/src/game_misc.cpp
@@ -60,8 +60,8 @@ FString GameInterface::GetCoordString()
 	int snum = screenpeek;
 	FString out;
 
-	out.Format("pos= %d, %d, %d - angle = %2.3f - sector = %d, lotag = %d, hitag = %d",
-		ps[snum].player_int_pos().X, ps[snum].player_int_pos().Y, ps[snum].player_int_pos().Z, ps[snum].angle.ang.asdeg(), sectnum(ps[snum].cursector),
+	out.Format("pos= %2.3f, %2.3f, %2.3f - angle = %2.3f - sector = %d, lotag = %d, hitag = %d",
+		ps[snum].pos.X, ps[snum].pos.Y, ps[snum].pos.Z, ps[snum].angle.ang.asdeg(), sectnum(ps[snum].cursector),
 		ps[snum].cursector->lotag, ps[snum].cursector->hitag);
 
 	return out;
@@ -577,7 +577,7 @@ bool GameInterface::DrawAutomapPlayer(int mx, int my, int cposx, int cposy, int
 			else
 				i = TILE_APLAYERTOP;
 
-			j = abs(int(pp.truefz * zworldtoint) - pp.player_int_pos().Z) >> 8;
+			j = abs(int(pp.truefz - pp.pos.Z));
 			j = czoom * (act->spr.yrepeat + j);
 
 			if (j < 22000) j = 22000;
diff --git a/source/games/duke/src/prediction.cpp b/source/games/duke/src/prediction.cpp
index 2ffbedbb2..7b29dcce4 100644
--- a/source/games/duke/src/prediction.cpp
+++ b/source/games/duke/src/prediction.cpp
@@ -50,9 +50,9 @@ short myangbak[MOVEFIFOSIZ];
 
 void resetmys()
 {
-	myx = omyx = ps[myconnectindex].player_int_pos().X;
-	myy = omyy = ps[myconnectindex].player_int_pos().Y;
-	myz = omyz = ps[myconnectindex].player_int_pos().Z;
+	myx = omyx = ps[myconnectindex].pos.X;
+	myy = omyy = ps[myconnectindex].pos.Y;
+	myz = omyz = ps[myconnectindex].pos.Z;
 	myxvel = myyvel = myzvel = 0;
 	myang = ps[myconnectindex].angle.ang;
 	myhoriz = omyhoriz = ps[myconnectindex].horizon.horiz;