diff --git a/source/games/duke/src/player_d.cpp b/source/games/duke/src/player_d.cpp
index b7bd9b5fa..c75ed6b01 100644
--- a/source/games/duke/src/player_d.cpp
+++ b/source/games/duke/src/player_d.cpp
@@ -40,8 +40,8 @@ source as it is released.
 
 BEGIN_DUKE_NS 
 
-void fireweapon_ww(int snum);
-void operateweapon_ww(int snum, ESyncBits actions);
+void fireweapon_ww(DDukePlayer* const p);
+void operateweapon_ww(DDukePlayer* const p, ESyncBits actions);
 
 //---------------------------------------------------------------------------
 //
@@ -1510,12 +1510,12 @@ static void processweapon(int snum, ESyncBits actions)
 		p->last_weapon == -1 && (p->weapon_pos == 0 || p->holster_weapon == 1))
 	{
 		if (!isWW2GI()) fireweapon(p);
-		else fireweapon_ww(snum);
+		else fireweapon_ww(p);
 	}
 	else if (p->kickback_pic)
 	{
 		if (!isWW2GI()) operateweapon(p, actions);
-		else operateweapon_ww(snum, actions);
+		else operateweapon_ww(p, actions);
 	}
 }
 //---------------------------------------------------------------------------
diff --git a/source/games/duke/src/player_w.cpp b/source/games/duke/src/player_w.cpp
index e3f805a06..d4662f124 100644
--- a/source/games/duke/src/player_w.cpp
+++ b/source/games/duke/src/player_w.cpp
@@ -48,9 +48,9 @@ int operateTripbomb(DDukePlayer* const p);
 //
 //---------------------------------------------------------------------------
 
-void DoFire(DDukePlayer* p, int snum)
+static void DoFire(DDukePlayer* const p)
 {
-	int i;
+	const auto pact = p->GetActor();
 
 	if (aplWeaponWorksLike(p->curr_weapon, p) != KNEE_WEAPON)
 	{
@@ -59,15 +59,15 @@ void DoFire(DDukePlayer* p, int snum)
 
 	if (aplWeaponFireSound(p->curr_weapon, p))
 	{
-		S_PlayActorSound(aplWeaponFireSound(p->curr_weapon, p), p->GetActor());
+		S_PlayActorSound(aplWeaponFireSound(p->curr_weapon, p), pact);
 	}
 
-	SetGameVarID(g_iWeaponVarID, p->curr_weapon, p->GetActor(), snum);
-	SetGameVarID(g_iWorksLikeVarID, aplWeaponWorksLike(p->curr_weapon, p), p->GetActor(), snum);
-	shoot(p->GetActor(), GetSpawnType(aplWeaponShoots(p->curr_weapon, p)));
-	for (i = 1; i < aplWeaponShotsPerBurst(p->curr_weapon, p); i++)
+	SetGameVarID(g_iWeaponVarID, p->curr_weapon, pact, p->pnum);
+	SetGameVarID(g_iWorksLikeVarID, aplWeaponWorksLike(p->curr_weapon, p), pact, p->pnum);
+	shoot(pact, GetSpawnType(aplWeaponShoots(p->curr_weapon, p)));
+	for (int i = 1; i < aplWeaponShotsPerBurst(p->curr_weapon, p); i++)
 	{
-		shoot(p->GetActor(), GetSpawnType(aplWeaponShoots(p->curr_weapon, p)));
+		shoot(pact, GetSpawnType(aplWeaponShoots(p->curr_weapon, p)));
 		if (aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_AMMOPERSHOT)
 		{
 			p->ammo_amount[p->curr_weapon]--;
@@ -105,7 +105,7 @@ void DoFire(DDukePlayer* p, int snum)
 //
 //---------------------------------------------------------------------------
 
-void DoSpawn(DDukePlayer *p, int snum)
+static void DoSpawn(DDukePlayer* const p)
 {
 	if(!aplWeaponSpawn(p->curr_weapon, p))
 		return;
@@ -138,9 +138,8 @@ void DoSpawn(DDukePlayer *p, int snum)
 //
 //---------------------------------------------------------------------------
 
-void fireweapon_ww(int snum)
+void fireweapon_ww(DDukePlayer* const p)
 {
-	auto p = getPlayer(snum);
 	auto pact = p->GetActor();
 
 	p->crack_time = CRACK_TIME;
@@ -156,11 +155,11 @@ void fireweapon_ww(int snum)
 	}
 	else
 	{
-		SetGameVarID(g_iReturnVarID, 0, p->GetActor(), snum);
-		SetGameVarID(g_iWeaponVarID, p->curr_weapon, p->GetActor(), snum);
-		SetGameVarID(g_iWorksLikeVarID, aplWeaponWorksLike(p->curr_weapon, p), p->GetActor(), snum);
-		OnEvent(EVENT_FIRE, snum, p->GetActor(), -1);
-		if (GetGameVarID(g_iReturnVarID, p->GetActor(), snum).value() == 0)
+		SetGameVarID(g_iReturnVarID, 0, pact, p->pnum);
+		SetGameVarID(g_iWeaponVarID, p->curr_weapon, pact, p->pnum);
+		SetGameVarID(g_iWorksLikeVarID, aplWeaponWorksLike(p->curr_weapon, p), pact, p->pnum);
+		OnEvent(EVENT_FIRE, p->pnum, pact, -1);
+		if (GetGameVarID(g_iReturnVarID, pact, p->pnum).value() == 0)
 		{
 			switch (aplWeaponWorksLike(p->curr_weapon, p))
 			{
@@ -305,9 +304,8 @@ void fireweapon_ww(int snum)
 //
 //---------------------------------------------------------------------------
 
-void operateweapon_ww(int snum, ESyncBits actions)
+void operateweapon_ww(DDukePlayer* const p, ESyncBits actions)
 {
-	auto p = getPlayer(snum);
 	auto pact = p->GetActor();
 
 	// already firing...
@@ -341,14 +339,14 @@ void operateweapon_ww(int snum, ESyncBits actions)
 				zvel -= 4;
 			}
 
-			auto spawned = CreateActor(p->cursector, p->GetActor()->getPosWithOffsetZ() + p->GetActor()->spr.Angles.Yaw.ToVector() * 16, DukePipeBombClass, -16, DVector2(0.140625, 0.140625),
-				p->GetActor()->spr.Angles.Yaw, vel + p->hbomb_hold_delay * 2, zvel, pact, 1);
+			auto spawned = CreateActor(p->cursector, pact->getPosWithOffsetZ() + pact->spr.Angles.Yaw.ToVector() * 16, DukePipeBombClass, -16, DVector2(0.140625, 0.140625),
+				pact->spr.Angles.Yaw, vel + p->hbomb_hold_delay * 2, zvel, pact, 1);
 
 			if (spawned)
 			{
 				{
-					int lGrenadeLifetime = GetGameVar("GRENADE_LIFETIME", NAM_GRENADE_LIFETIME, nullptr, snum).value();
-					int lGrenadeLifetimeVar = GetGameVar("GRENADE_LIFETIME_VAR", NAM_GRENADE_LIFETIME_VAR, nullptr, snum).value();
+					int lGrenadeLifetime = GetGameVar("GRENADE_LIFETIME", NAM_GRENADE_LIFETIME, nullptr, p->pnum).value();
+					int lGrenadeLifetimeVar = GetGameVar("GRENADE_LIFETIME_VAR", NAM_GRENADE_LIFETIME_VAR, nullptr, p->pnum).value();
 					// set timer.  blows up when at zero....
 					spawned->spr.extra = lGrenadeLifetime
 						+ MulScale(krand(), lGrenadeLifetimeVar, 14)
@@ -361,7 +359,7 @@ void operateweapon_ww(int snum, ESyncBits actions)
 					spawned->spr.pos.Z += 8;
 				}
 
-				double hd = hits(p->GetActor());
+				double hd = hits(pact);
 				if (hd < 32)
 				{
 					spawned->spr.Angles.Yaw += DAngle180;
@@ -402,9 +400,9 @@ void operateweapon_ww(int snum, ESyncBits actions)
 					lastvisinc = PlayClock + 32;
 					p->visibility = 0;
 				}
-				SetGameVarID(g_iWeaponVarID, p->curr_weapon, p->GetActor(), snum);
-				SetGameVarID(g_iWorksLikeVarID, aplWeaponWorksLike(p->curr_weapon, p), p->GetActor(), snum);
-				shoot(p->GetActor(), GetSpawnType(aplWeaponShoots(p->curr_weapon, p)));
+				SetGameVarID(g_iWeaponVarID, p->curr_weapon, pact, p->pnum);
+				SetGameVarID(g_iWorksLikeVarID, aplWeaponWorksLike(p->curr_weapon, p), pact, p->pnum);
+				shoot(pact, GetSpawnType(aplWeaponShoots(p->curr_weapon, p)));
 			}
 		}
 
@@ -435,7 +433,7 @@ void operateweapon_ww(int snum, ESyncBits actions)
 		if (aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_STANDSTILL
 			&& p->kickback_pic < (aplWeaponFireDelay(p->curr_weapon, p) + 1))
 		{
-			p->GetActor()->restorez();
+			pact->restorez();
 			p->vel.Z = 0;
 		}
 		if (p->kickback_pic == aplWeaponSound2Time(p->curr_weapon, p))
@@ -447,11 +445,11 @@ void operateweapon_ww(int snum, ESyncBits actions)
 		}
 		if (p->kickback_pic == aplWeaponSpawnTime(p->curr_weapon, p))
 		{
-			DoSpawn(p, snum);
+			DoSpawn(p);
 		}
 		if (p->kickback_pic == aplWeaponFireDelay(p->curr_weapon, p))
 		{
-			DoFire(p, snum);
+			DoFire(p);
 		}
 
 		if (p->kickback_pic > aplWeaponFireDelay(p->curr_weapon, p)
@@ -469,16 +467,16 @@ void operateweapon_ww(int snum, ESyncBits actions)
 				{
 					if (((p->kickback_pic) % 3) == 0)
 					{
-						DoFire(p, snum);
-						DoSpawn(p, snum);
+						DoFire(p);
+						DoSpawn(p);
 					}
 
 				}
 				if (aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_FIREEVERYOTHER)
 				{
 					// fire every other...
-					DoFire(p, snum);
-					DoSpawn(p, snum);
+					DoFire(p);
+					DoSpawn(p);
 				}
 
 			} // 'automatic