- Exhumed: Wrap access to player's actor pointer.

This commit is contained in:
Mitchell Richters 2023-09-30 20:44:31 +10:00
parent 6d6872fea7
commit 61bc8c23cf
19 changed files with 81 additions and 77 deletions

View file

@ -53,7 +53,7 @@ static DExhumedActor* BuildBubble(const DVector3& pos, sectortype* pSector, cons
nSize -= 4; nSize -= 4;
// Was inita global previously. // Was inita global previously.
const auto nAngle = PlayerList[nPlayer].pActor->spr.Angles.Yaw; const auto nAngle = PlayerList[nPlayer].GetActor()->spr.Angles.Yaw;
const auto pActor = insertActor(pSector, 402); const auto pActor = insertActor(pSector, 402);
pActor->spr.pos = pos; pActor->spr.pos = pos;

View file

@ -234,7 +234,7 @@ struct GameInterface : public ::GameInterface
bool DrawAutomapPlayer(const DVector2& mxy, const DVector2& cpos, const DAngle cang, const DVector2& xydim, const double czoom, double const interpfrac) override; bool DrawAutomapPlayer(const DVector2& mxy, const DVector2& cpos, const DAngle cang, const DVector2& xydim, const double czoom, double const interpfrac) override;
DAngle playerPitchMin() override { return DAngle::fromDeg(49.5); } DAngle playerPitchMin() override { return DAngle::fromDeg(49.5); }
DAngle playerPitchMax() override { return DAngle::fromDeg(-49.5); } DAngle playerPitchMax() override { return DAngle::fromDeg(-49.5); }
DCoreActor* getConsoleActor() override { return PlayerList[nLocalPlayer].pActor; } DCoreActor* getConsoleActor() override { return PlayerList[nLocalPlayer].GetActor(); }
void ToggleThirdPerson() override; void ToggleThirdPerson() override;
void processSprites(tspriteArray& tsprites, const DVector3& view, DAngle viewang, double interpfrac) override; void processSprites(tspriteArray& tsprites, const DVector3& view, DAngle viewang, double interpfrac) override;
int GetCurrentSkill() override; int GetCurrentSkill() override;

View file

@ -69,7 +69,7 @@ void ThrowGrenade(int nPlayer, double dz, double push1)
return; return;
DExhumedActor* pActor = PlayerList[nPlayer].pPlayerGrenade; DExhumedActor* pActor = PlayerList[nPlayer].pPlayerGrenade;
auto pPlayerActor = PlayerList[nPlayer].pActor; auto pPlayerActor = PlayerList[nPlayer].GetActor();
DAngle nAngle = pPlayerActor->spr.Angles.Yaw; DAngle nAngle = pPlayerActor->spr.Angles.Yaw;
@ -123,7 +123,7 @@ void BuildGrenade(int nPlayer)
{ {
auto pActor = insertActor(PlayerList[nPlayer].pPlayerViewSect, 201); auto pActor = insertActor(PlayerList[nPlayer].pPlayerViewSect, 201);
auto pPlayerActor = PlayerList[nPlayer].pActor; auto pPlayerActor = PlayerList[nPlayer].GetActor();
pActor->spr.pos = pPlayerActor->spr.pos.plusZ(-15); pActor->spr.pos = pPlayerActor->spr.pos.plusZ(-15);
pActor->spr.shade = -64; pActor->spr.shade = -64;
@ -199,7 +199,7 @@ void ExplodeGrenade(DExhumedActor* pActor)
if (pActor->nTurn < 0) if (pActor->nTurn < 0)
{ {
auto pPlayerActor = PlayerList[nPlayer].pActor; auto pPlayerActor = PlayerList[nPlayer].GetActor();
auto nAngle = pPlayerActor->spr.Angles.Yaw; auto nAngle = pPlayerActor->spr.Angles.Yaw;
DVector2 vect = nAngle.ToVector() * 32; DVector2 vect = nAngle.ToVector() * 32;

View file

@ -287,7 +287,7 @@ void ResetSwordSeqs()
Collision CheckCloseRange(int nPlayer, DVector3& pos, sectortype* *ppSector) Collision CheckCloseRange(int nPlayer, DVector3& pos, sectortype* *ppSector)
{ {
auto pActor = PlayerList[nPlayer].pActor; auto pActor = PlayerList[nPlayer].GetActor();
HitInfo hit{}; HitInfo hit{};
hitscan(pos, *ppSector, DVector3(pActor->spr.Angles.Yaw.ToVector() * 1024, 0 ), hit, CLIPMASK1); hitscan(pos, *ppSector, DVector3(pActor->spr.Angles.Yaw.ToVector() * 1024, 0 ), hit, CLIPMASK1);
@ -357,7 +357,7 @@ void MoveWeapons(int nPlayer)
if (!pPlayer->bIsFiring || (nSectFlag & kSectUnderwater)) if (!pPlayer->bIsFiring || (nSectFlag & kSectUnderwater))
pPlayer->nTemperature = 0; pPlayer->nTemperature = 0;
auto pPlayerActor = pPlayer->pActor; auto pPlayerActor = pPlayer->GetActor();
int nWeapon = pPlayer->nCurrentWeapon; int nWeapon = pPlayer->nCurrentWeapon;
if (nWeapon < -1) if (nWeapon < -1)
@ -413,7 +413,7 @@ void MoveWeapons(int nPlayer)
if (!WeaponCanFire(nPlayer)) if (!WeaponCanFire(nPlayer))
{ {
if (!dword_96E22) { if (!dword_96E22) {
D3PlayFX(StaticSound[4], pPlayer->pActor); D3PlayFX(StaticSound[4], pPlayer->GetActor());
} }
} }
else else
@ -904,7 +904,7 @@ loc_flag:
void DrawWeapons(Player* const pPlayer, double interpfrac) void DrawWeapons(Player* const pPlayer, double interpfrac)
{ {
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
const int nWeapon = pPlayer->nCurrentWeapon; const int nWeapon = pPlayer->nCurrentWeapon;
if (bCamera || nWeapon < -1) if (bCamera || nWeapon < -1)

View file

@ -772,9 +772,9 @@ void ExamineSprites(TArray<DExhumedActor*>& actors)
if (nNetPlayerCount) if (nNetPlayerCount)
{ {
auto pActor = insertActor(PlayerList[nLocalPlayer].pActor->sector(), 0); auto pActor = insertActor(PlayerList[nLocalPlayer].GetActor()->sector(), 0);
pActor->spr.pos = PlayerList[nLocalPlayer].pActor->spr.pos; pActor->spr.pos = PlayerList[nLocalPlayer].GetActor()->spr.pos;
pActor->spr.cstat = CSTAT_SPRITE_INVISIBLE; pActor->spr.cstat = CSTAT_SPRITE_INVISIBLE;
nNetStartSprite[nNetStartSprites] = pActor; nNetStartSprite[nNetStartSprites] = pActor;
nNetStartSprites++; nNetStartSprites++;

View file

@ -204,7 +204,7 @@ static bool UseEye(int nPlayer)
if (PlayerList[nPlayer].nInvisible >= 0) if (PlayerList[nPlayer].nInvisible >= 0)
PlayerList[nPlayer].nInvisible = 900; PlayerList[nPlayer].nInvisible = 900;
auto pActor = PlayerList[nPlayer].pActor; auto pActor = PlayerList[nPlayer].GetActor();
pActor->spr.cstat |= CSTAT_SPRITE_INVISIBLE; pActor->spr.cstat |= CSTAT_SPRITE_INVISIBLE;
@ -233,7 +233,7 @@ static bool UseMask(int nPlayer)
if (nPlayer == nLocalPlayer) if (nPlayer == nLocalPlayer)
{ {
D3PlayFX(StaticSound[kSound31], PlayerList[nPlayer].pActor); D3PlayFX(StaticSound[kSound31], PlayerList[nPlayer].GetActor());
} }
return true; return true;
} }
@ -269,7 +269,7 @@ bool UseHeart(int nPlayer)
if (nPlayer == nLocalPlayer) if (nPlayer == nLocalPlayer)
{ {
ItemFlash(); ItemFlash();
D3PlayFX(StaticSound[kSound31], PlayerList[nPlayer].pActor); D3PlayFX(StaticSound[kSound31], PlayerList[nPlayer].GetActor());
} }
return true; return true;
} }
@ -290,7 +290,7 @@ bool UseScarab(int nPlayer)
if (nPlayer == nLocalPlayer) if (nPlayer == nLocalPlayer)
{ {
ItemFlash(); ItemFlash();
D3PlayFX(StaticSound[kSound31], PlayerList[nPlayer].pActor); D3PlayFX(StaticSound[kSound31], PlayerList[nPlayer].GetActor());
} }
return true; return true;
} }
@ -303,7 +303,7 @@ static bool UseHand(int nPlayer)
if (nPlayer == nLocalPlayer) if (nPlayer == nLocalPlayer)
{ {
ItemFlash(); ItemFlash();
D3PlayFX(StaticSound[kSound31], PlayerList[nPlayer].pActor); D3PlayFX(StaticSound[kSound31], PlayerList[nPlayer].GetActor());
} }
return true; return true;
} }

View file

@ -45,7 +45,7 @@ void GrabMap()
void UpdateMap() void UpdateMap()
{ {
const auto initsectp = PlayerList[nLocalPlayer].pActor->sector(); const auto initsectp = PlayerList[nLocalPlayer].GetActor()->sector();
if (initsectp->ceilingpal != 3 || (PlayerList[nLocalPlayer].nTorch != 0)) { if (initsectp->ceilingpal != 3 || (PlayerList[nLocalPlayer].nTorch != 0)) {
MarkSectorSeen(initsectp); MarkSectorSeen(initsectp);
} }
@ -73,7 +73,7 @@ bool GameInterface::DrawAutomapPlayer(const DVector2& mxy, const DVector2& cpos,
{ {
if (i == nLocalPlayer)// || gGameOptions.nGameType == 1) if (i == nLocalPlayer)// || gGameOptions.nGameType == 1)
{ {
auto pPlayerActor = PlayerList[i].pActor; auto pPlayerActor = PlayerList[i].GetActor();
auto vect = OutAutomapVector(mxy - cpos, cangvect, czoom, xydim); auto vect = OutAutomapVector(mxy - cpos, cangvect, czoom, xydim);
DrawTexture(twod, pPlayerActor->spr.spritetexture(), true, vect.X, vect.Y, DTA_ClipLeft, viewport3d.Left(), DTA_ClipTop, viewport3d.Top(), DTA_ScaleX, czoom * (2. / 3.), DTA_ScaleY, czoom * (2. / 3.), DTA_CenterOffset, true, DrawTexture(twod, pPlayerActor->spr.spritetexture(), true, vect.X, vect.Y, DTA_ClipLeft, viewport3d.Left(), DTA_ClipTop, viewport3d.Top(), DTA_ScaleX, czoom * (2. / 3.), DTA_ScaleY, czoom * (2. / 3.), DTA_CenterOffset, true,

View file

@ -271,7 +271,7 @@ Collision movespritez(DExhumedActor* pActor, double z, double height, double cli
if (pSect2->Flag & kSectUnderwater) if (pSect2->Flag & kSectUnderwater)
{ {
if (pActor == PlayerList[nLocalPlayer].pActor) { if (pActor == PlayerList[nLocalPlayer].GetActor()) {
D3PlayFX(StaticSound[kSound2], pActor); D3PlayFX(StaticSound[kSound2], pActor);
} }
@ -616,7 +616,7 @@ DExhumedActor* FindPlayer(DExhumedActor* pActor, int nDistance, bool dontengage)
if (i >= nTotalPlayers) if (i >= nTotalPlayers)
return nullptr; return nullptr;
pPlayerActor = PlayerList[i].pActor; pPlayerActor = PlayerList[i].GetActor();
if ((pPlayerActor->spr.cstat & CSTAT_SPRITE_BLOCK_ALL) && (!(pPlayerActor->spr.cstat & CSTAT_SPRITE_INVISIBLE))) if ((pPlayerActor->spr.cstat & CSTAT_SPRITE_BLOCK_ALL) && (!(pPlayerActor->spr.cstat & CSTAT_SPRITE_INVISIBLE)))
{ {
@ -930,7 +930,7 @@ void SetQuake(DExhumedActor* pActor, int nVal)
{ {
for (int i = 0; i < nTotalPlayers; i++) for (int i = 0; i < nTotalPlayers; i++)
{ {
auto nSqrt = ((PlayerList[i].pActor->spr.pos.XY() - pActor->spr.pos.XY()) * (1. / 16.)).Length(); auto nSqrt = ((PlayerList[i].GetActor()->spr.pos.XY() - pActor->spr.pos.XY()) * (1. / 16.)).Length();
if (nSqrt) if (nSqrt)
{ {
@ -1015,7 +1015,7 @@ Collision AngleChase(DExhumedActor* pActor, DExhumedActor* pActor2, int threshol
DVector3 WheresMyMouth(int nPlayer, sectortype **sectnum) DVector3 WheresMyMouth(int nPlayer, sectortype **sectnum)
{ {
auto pActor = PlayerList[nPlayer].pActor; auto pActor = PlayerList[nPlayer].GetActor();
double height = GetActorHeight(pActor) * 0.5; double height = GetActorHeight(pActor) * 0.5;
*sectnum = pActor->sector(); *sectnum = pActor->sector();

View file

@ -61,7 +61,7 @@ static int osdcmd_doors(CCmdFuncPtr parm)
static int osdcmd_spawn(CCmdFuncPtr parm) static int osdcmd_spawn(CCmdFuncPtr parm)
{ {
auto pActor = PlayerList[nLocalPlayer].pActor; auto pActor = PlayerList[nLocalPlayer].GetActor();
if (parm->numparms != 1) return CCMD_SHOWHELP; if (parm->numparms != 1) return CCMD_SHOWHELP;
if (!pActor) return CCMD_SHOWHELP; if (!pActor) return CCMD_SHOWHELP;
auto c = parm->parms[0]; auto c = parm->parms[0];

View file

@ -86,7 +86,7 @@ size_t MarkPlayers()
{ {
for (auto& p : PlayerList) for (auto& p : PlayerList)
{ {
GC::Mark(p.pActor); GC::Mark(p.actor);
GC::Mark(p.pDoppleSprite); GC::Mark(p.pDoppleSprite);
GC::Mark(p.pPlayerFloorSprite); GC::Mark(p.pPlayerFloorSprite);
GC::Mark(p.pPlayerGrenade); GC::Mark(p.pPlayerGrenade);
@ -123,7 +123,7 @@ void InitPlayer()
{ {
const auto pPlayer = &PlayerList[i]; const auto pPlayer = &PlayerList[i];
pPlayer->pActor = nullptr; pPlayer->actor = nullptr;
pPlayer->Angles = {}; pPlayer->Angles = {};
pPlayer->pPlayerPushSect = nullptr; pPlayer->pPlayerPushSect = nullptr;
pPlayer->pPlayerViewSect = nullptr; pPlayer->pPlayerViewSect = nullptr;
@ -151,7 +151,7 @@ void InitPlayerInventory(int nPlayer)
pPlayer->nItem = -1; pPlayer->nItem = -1;
pPlayer->nPlayerSwear = 4; pPlayer->nPlayerSwear = 4;
pPlayer->nLives = kDefaultLives; pPlayer->nLives = kDefaultLives;
pPlayer->pActor = nullptr; pPlayer->actor = nullptr;
pPlayer->Angles = {}; pPlayer->Angles = {};
pPlayer->nRun = -1; pPlayer->nRun = -1;
pPlayer->nPistolClip = 6; pPlayer->nPistolClip = 6;
@ -190,7 +190,7 @@ int GetPlayerFromActor(DExhumedActor* pActor)
void RestartPlayer(int nPlayer) void RestartPlayer(int nPlayer)
{ {
const auto pPlayer = &PlayerList[nPlayer]; const auto pPlayer = &PlayerList[nPlayer];
DExhumedActor* pPlayerActor = pPlayer->pActor; DExhumedActor* pPlayerActor = pPlayer->GetActor();
DExhumedActor* pDopSprite = pPlayer->pDoppleSprite; DExhumedActor* pDopSprite = pPlayer->pDoppleSprite;
DExhumedActor* pFloorSprite = pPlayer->pPlayerFloorSprite; DExhumedActor* pFloorSprite = pPlayer->pPlayerFloorSprite;
@ -201,7 +201,7 @@ void RestartPlayer(int nPlayer)
ChangeActorStat(pPlayerActor, 0); ChangeActorStat(pPlayerActor, 0);
pPlayer->pActor = nullptr; pPlayer->actor = nullptr;
pPlayer->Angles = {}; pPlayer->Angles = {};
if (pFloorSprite) if (pFloorSprite)
@ -279,7 +279,7 @@ void RestartPlayer(int nPlayer)
pDopSprite->spr.lotag = runlist_HeadRun() + 1; pDopSprite->spr.lotag = runlist_HeadRun() + 1;
pDopSprite->spr.intowner = runlist_AddRunRec(pDopSprite->spr.lotag - 1, nPlayer, 0xA0000); pDopSprite->spr.intowner = runlist_AddRunRec(pDopSprite->spr.lotag - 1, nPlayer, 0xA0000);
pPlayer->pActor = pPlayerActor; pPlayer->actor = pPlayerActor;
pPlayer->pDoppleSprite = pDopSprite; pPlayer->pDoppleSprite = pDopSprite;
pPlayer->pPlayerFloorSprite = pFloorSprite; pPlayer->pPlayerFloorSprite = pFloorSprite;
pPlayer->pPlayerViewSect = pPlayer->sPlayerSave.pSector; pPlayer->pPlayerViewSect = pPlayer->sPlayerSave.pSector;
@ -361,7 +361,7 @@ int GrabPlayer()
void StartDeathSeq(int nPlayer, int nVal) void StartDeathSeq(int nPlayer, int nVal)
{ {
const auto pPlayer = &PlayerList[nPlayer]; const auto pPlayer = &PlayerList[nPlayer];
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
const auto pPlayerSect = pPlayerActor->sector(); const auto pPlayerSect = pPlayerActor->sector();
FreeRa(nPlayer); FreeRa(nPlayer);
@ -455,7 +455,7 @@ int AddAmmo(int nPlayer, int nWeapon, int nAmmoAmount)
void SetPlayerMummified(int nPlayer, int bIsMummified) void SetPlayerMummified(int nPlayer, int bIsMummified)
{ {
const auto pPlayer = &PlayerList[nPlayer]; const auto pPlayer = &PlayerList[nPlayer];
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
pPlayerActor->vel.XY().Zero(); pPlayerActor->vel.XY().Zero();
@ -482,7 +482,7 @@ void SetPlayerMummified(int nPlayer, int bIsMummified)
void ShootStaff(int nPlayer) void ShootStaff(int nPlayer)
{ {
const auto pPlayer = &PlayerList[nPlayer]; const auto pPlayer = &PlayerList[nPlayer];
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
pPlayerActor->nAction = 15; pPlayerActor->nAction = 15;
pPlayerActor->nFrame = 0; pPlayerActor->nFrame = 0;
@ -531,7 +531,7 @@ void AIPlayer::Draw(RunListEvent* ev)
assert(nPlayer >= 0 && nPlayer < kMaxPlayers); assert(nPlayer >= 0 && nPlayer < kMaxPlayers);
const auto pPlayer = &PlayerList[nPlayer]; const auto pPlayer = &PlayerList[nPlayer];
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
const auto playerSeq = &PlayerSeq[pPlayerActor->nAction]; const auto playerSeq = &PlayerSeq[pPlayerActor->nAction];
seq_PlotSequence(ev->nParam, pPlayerActor->nSeqFile, playerSeq->nSeqId, pPlayerActor->nFrame, playerSeq->nFlags); seq_PlotSequence(ev->nParam, pPlayerActor->nSeqFile, playerSeq->nSeqId, pPlayerActor->nFrame, playerSeq->nFlags);
} }
@ -552,7 +552,7 @@ void AIPlayer::RadialDamage(RunListEvent* ev)
if (pPlayer->nHealth <= 0) if (pPlayer->nHealth <= 0)
return; return;
ev->nDamage = runlist_CheckRadialDamage(pPlayer->pActor); ev->nDamage = runlist_CheckRadialDamage(pPlayer->GetActor());
Damage(ev); Damage(ev);
} }
@ -573,7 +573,7 @@ void AIPlayer::Damage(RunListEvent* ev)
if (!nDamage || !pPlayer->nHealth) if (!nDamage || !pPlayer->nHealth)
return; return;
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
const auto pDamageActor = (!ev->isRadialEvent()) ? ev->pOtherActor : ev->pRadialActor->pTarget.Get(); const auto pDamageActor = (!ev->isRadialEvent()) ? ev->pOtherActor : ev->pRadialActor->pTarget.Get();
if (!pPlayer->invincibility) if (!pPlayer->invincibility)
@ -843,7 +843,7 @@ static void doPickupHealth(Player* pPlayer, DExhumedActor* pPickupActor, int nIt
void doPlayerItemPickups(Player* const pPlayer) void doPlayerItemPickups(Player* const pPlayer)
{ {
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
const auto pPlayerSect = pPlayerActor->sector(); const auto pPlayerSect = pPlayerActor->sector();
if (const auto pPickupActor = feebtag(pPlayerActor->spr.pos, pPlayerSect, pPlayer->nMagic, pPlayer->nHealth, 48)) if (const auto pPickupActor = feebtag(pPlayerActor->spr.pos, pPlayerSect, pPlayer->nMagic, pPlayer->nHealth, 48))
@ -1043,7 +1043,7 @@ void doPlayerItemPickups(Player* const pPlayer)
void updatePlayerTarget(Player* const pPlayer) void updatePlayerTarget(Player* const pPlayer)
{ {
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
const auto pRa = &Ra[pPlayer->nPlayer]; const auto pRa = &Ra[pPlayer->nPlayer];
const auto nAngVect = (-pPlayerActor->spr.Angles.Yaw).ToVector(); const auto nAngVect = (-pPlayerActor->spr.Angles.Yaw).ToVector();
@ -1106,7 +1106,7 @@ void updatePlayerTarget(Player* const pPlayer)
static void updatePlayerVelocity(Player* const pPlayer) static void updatePlayerVelocity(Player* const pPlayer)
{ {
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
if (pPlayer->nHealth > 0) if (pPlayer->nHealth > 0)
{ {
@ -1236,7 +1236,7 @@ unsigned GameInterface::getCrouchState()
static void updatePlayerAction(Player* const pPlayer) static void updatePlayerAction(Player* const pPlayer)
{ {
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
const auto pInput = &pPlayer->input; const auto pInput = &pPlayer->input;
const auto kbdDir = !!(pInput->actions & SB_CROUCH) - !!(pInput->actions & SB_JUMP); const auto kbdDir = !!(pInput->actions & SB_CROUCH) - !!(pInput->actions & SB_JUMP);
const double dist = pPlayer->bUnderwater ? 8 : 14; const double dist = pPlayer->bUnderwater ? 8 : 14;
@ -1355,7 +1355,7 @@ static void updatePlayerAction(Player* const pPlayer)
static void doPlayerCounters(Player* const pPlayer) static void doPlayerCounters(Player* const pPlayer)
{ {
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
const bool bConsolePlayer = pPlayer->nPlayer == nLocalPlayer; const bool bConsolePlayer = pPlayer->nPlayer == nLocalPlayer;
if (pPlayer->nTorch > 0) if (pPlayer->nTorch > 0)
@ -1436,7 +1436,7 @@ static void doPlayerCounters(Player* const pPlayer)
static void doPlayerUnderwater(Player* const pPlayer, const bool oUnderwater) static void doPlayerUnderwater(Player* const pPlayer, const bool oUnderwater)
{ {
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
const bool bUnderwater = pPlayer->pPlayerViewSect->Flag & kSectUnderwater; const bool bUnderwater = pPlayer->pPlayerViewSect->Flag & kSectUnderwater;
if (!pPlayer->invincibility) if (!pPlayer->invincibility)
@ -1530,7 +1530,7 @@ static void doPlayerRamses(Player* const pPlayer)
if (nTotalPlayers <= 1) if (nTotalPlayers <= 1)
{ {
pPlayer->pActor->vel.Zero(); pPlayer->GetActor()->vel.Zero();
if (nFreeze < 1) if (nFreeze < 1)
{ {
@ -1570,7 +1570,7 @@ static void doPlayerGravity(DExhumedActor* const pPlayerActor)
static void doPlayerCameraEffects(Player* const pPlayer, const double nDestVertPan) static void doPlayerCameraEffects(Player* const pPlayer, const double nDestVertPan)
{ {
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
const auto nUnderwater = !!(pPlayerActor->sector()->Flag & kSectUnderwater); const auto nUnderwater = !!(pPlayerActor->sector()->Flag & kSectUnderwater);
constexpr auto maxVel = 15.25; constexpr auto maxVel = 15.25;
@ -1617,7 +1617,7 @@ static void updatePlayerFloorActor(Player* const pPlayer)
if (nTotalPlayers <= 1 || !pFloorActor) if (nTotalPlayers <= 1 || !pFloorActor)
return; return;
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
const auto pPlayerSect = pPlayerActor->sector(); const auto pPlayerSect = pPlayerActor->sector();
pFloorActor->spr.pos.XY() = pPlayerActor->spr.pos.XY(); pFloorActor->spr.pos.XY() = pPlayerActor->spr.pos.XY();
pFloorActor->spr.pos.Z = pPlayerSect->floorz; pFloorActor->spr.pos.Z = pPlayerSect->floorz;
@ -1634,7 +1634,7 @@ static void updatePlayerFloorActor(Player* const pPlayer)
static void updatePlayerDoppleActor(Player* const pPlayer) static void updatePlayerDoppleActor(Player* const pPlayer)
{ {
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
const auto pPlayerSect = pPlayerActor->sector(); const auto pPlayerSect = pPlayerActor->sector();
DExhumedActor* const pDopple = pPlayer->pDoppleSprite; DExhumedActor* const pDopple = pPlayer->pDoppleSprite;
pDopple->spr.pos = pPlayerActor->spr.pos; pDopple->spr.pos = pPlayerActor->spr.pos;
@ -1659,7 +1659,7 @@ static void updatePlayerDoppleActor(Player* const pPlayer)
static void updatePlayerViewSector(Player* const pPlayer, const Collision& nMove, const DVector3& spr_vel) static void updatePlayerViewSector(Player* const pPlayer, const Collision& nMove, const DVector3& spr_vel)
{ {
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
const auto pPlayerSect = pPlayerActor->sector(); const auto pPlayerSect = pPlayerActor->sector();
const auto bPlayerBelowCeil = (pPlayerActor->getOffsetZ() + pPlayer->nQuake) < pPlayerSect->ceilingz; const auto bPlayerBelowCeil = (pPlayerActor->getOffsetZ() + pPlayer->nQuake) < pPlayerSect->ceilingz;
const auto pViewSect = bPlayerBelowCeil && pPlayerSect->pAbove ? pPlayerSect->pAbove : pPlayerSect; const auto pViewSect = bPlayerBelowCeil && pPlayerSect->pAbove ? pPlayerSect->pAbove : pPlayerSect;
@ -1698,7 +1698,7 @@ static void updatePlayerViewSector(Player* const pPlayer, const Collision& nMove
static void doPlayerFloorDamage(Player* const pPlayer, const double nStartVelZ) static void doPlayerFloorDamage(Player* const pPlayer, const double nStartVelZ)
{ {
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
pPlayer->nThrust *= 0.5; pPlayer->nThrust *= 0.5;
if (nStartVelZ < (6500 / 256.)) if (nStartVelZ < (6500 / 256.))
@ -1727,7 +1727,7 @@ static void doPlayerFloorDamage(Player* const pPlayer, const double nStartVelZ)
static void doPlayerMovingBlocks(Player* const pPlayer, const Collision& nMove, const DVector3& spr_vel, sectortype* const spr_sect) static void doPlayerMovingBlocks(Player* const pPlayer, const Collision& nMove, const DVector3& spr_vel, sectortype* const spr_sect)
{ {
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
sectortype* sect; sectortype* sect;
DAngle nNormal = nullAngle; DAngle nNormal = nullAngle;
@ -1788,7 +1788,7 @@ static bool doPlayerInput(Player* const pPlayer)
// update the player/actor's velocity before anything. // update the player/actor's velocity before anything.
updatePlayerVelocity(pPlayer); updatePlayerVelocity(pPlayer);
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
const auto spr_vel = DVector3(pPlayerActor->vel.XY() * (pPlayer->bIsMummified ? 0.5 : 1.), pPlayerActor->vel.Z); const auto spr_vel = DVector3(pPlayerActor->vel.XY() * (pPlayer->bIsMummified ? 0.5 : 1.), pPlayerActor->vel.Z);
const auto spr_sect = pPlayerActor->sector(); const auto spr_sect = pPlayerActor->sector();
@ -1877,7 +1877,7 @@ static bool doPlayerInput(Player* const pPlayer)
static void doPlayerRunlistSignals(Player* const pPlayer, sectortype* const pStartSect) static void doPlayerRunlistSignals(Player* const pPlayer, sectortype* const pStartSect)
{ {
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
const auto pPlayerSect = pPlayerActor->sector(); const auto pPlayerSect = pPlayerActor->sector();
if (pPlayer->bTouchFloor && pPlayerSect->lotag > 0) if (pPlayer->bTouchFloor && pPlayerSect->lotag > 0)
@ -1916,7 +1916,7 @@ static void doPlayerRunlistSignals(Player* const pPlayer, sectortype* const pSta
static bool doPlayerDeathRestart(Player* const pPlayer) static bool doPlayerDeathRestart(Player* const pPlayer)
{ {
if (!(pPlayer->input.actions & SB_OPEN) || pPlayer->pActor->nAction < 16) if (!(pPlayer->input.actions & SB_OPEN) || pPlayer->GetActor()->nAction < 16)
return true; return true;
pPlayer->input.actions &= ~SB_OPEN; pPlayer->input.actions &= ~SB_OPEN;
@ -1932,9 +1932,9 @@ static bool doPlayerDeathRestart(Player* const pPlayer)
if (pPlayer->nLives && nNetTime) if (pPlayer->nLives && nNetTime)
{ {
if (pPlayer->pActor->nAction != 20) if (pPlayer->GetActor()->nAction != 20)
{ {
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
pPlayerActor->spr.setspritetexture(getSequence("joe", 120)->getFirstFrameTexture()); pPlayerActor->spr.setspritetexture(getSequence("joe", 120)->getFirstFrameTexture());
pPlayerActor->spr.cstat = 0; pPlayerActor->spr.cstat = 0;
pPlayerActor->spr.pos.Z = pPlayerActor->sector()->floorz; pPlayerActor->spr.pos.Z = pPlayerActor->sector()->floorz;
@ -1962,7 +1962,7 @@ static bool doPlayerDeathRestart(Player* const pPlayer)
static void doPlayerActionSequence(Player* const pPlayer) static void doPlayerActionSequence(Player* const pPlayer)
{ {
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
const auto playerSeq = getSequence(pPlayerActor->nSeqFile, PlayerSeq[pPlayerActor->nAction].nSeqId); const auto playerSeq = getSequence(pPlayerActor->nSeqFile, PlayerSeq[pPlayerActor->nAction].nSeqId);
const auto& seqFrame = playerSeq->frames[pPlayerActor->nFrame]; const auto& seqFrame = playerSeq->frames[pPlayerActor->nFrame];
@ -2017,7 +2017,7 @@ static void doPlayerActionSequence(Player* const pPlayer)
static void doPlayerDeathPitch(Player* const pPlayer) static void doPlayerDeathPitch(Player* const pPlayer)
{ {
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
pPlayer->nThrust.Zero(); pPlayer->nThrust.Zero();
if (pPlayerActor->viewzoffset >= -11) if (pPlayerActor->viewzoffset >= -11)
@ -2059,7 +2059,7 @@ void AIPlayer::Tick(RunListEvent* ev)
assert(nPlayer >= 0 && nPlayer < kMaxPlayers); assert(nPlayer >= 0 && nPlayer < kMaxPlayers);
const auto pPlayer = &PlayerList[nPlayer]; const auto pPlayer = &PlayerList[nPlayer];
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
pPlayerActor->spr.setspritetexture(getSequence(pPlayerActor->nSeqFile, PlayerSeq[nHeightTemplate[pPlayerActor->nAction]].nSeqId)->getFirstFrameTexture()); pPlayerActor->spr.setspritetexture(getSequence(pPlayerActor->nSeqFile, PlayerSeq[nHeightTemplate[pPlayerActor->nAction]].nSeqId)->getFirstFrameTexture());
pPlayer->pDoppleSprite->spr.setspritetexture(pPlayerActor->spr.spritetexture()); pPlayer->pDoppleSprite->spr.setspritetexture(pPlayerActor->spr.spritetexture());
@ -2109,7 +2109,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, Player& w, Player*
if (arc.BeginObject(keyname)) if (arc.BeginObject(keyname))
{ {
arc("health", w.nHealth) arc("health", w.nHealth)
("sprite", w.pActor) ("sprite", w.actor)
("mummy", w.bIsMummified) ("mummy", w.bIsMummified)
("invincible", w.invincibility) ("invincible", w.invincibility)
("air", w.nAir) ("air", w.nAir)
@ -2200,7 +2200,7 @@ DEFINE_FIELD_X(ExhumedPlayer, Player, nLives);
DEFINE_FIELD_X(ExhumedPlayer, Player, nDouble); DEFINE_FIELD_X(ExhumedPlayer, Player, nDouble);
DEFINE_FIELD_X(ExhumedPlayer, Player, nInvisible); DEFINE_FIELD_X(ExhumedPlayer, Player, nInvisible);
DEFINE_FIELD_X(ExhumedPlayer, Player, nTorch); DEFINE_FIELD_X(ExhumedPlayer, Player, nTorch);
DEFINE_FIELD_X(ExhumedPlayer, Player, pActor); DEFINE_FIELD_X(ExhumedPlayer, Player, actor);
DEFINE_FIELD_X(ExhumedPlayer, Player, bIsMummified); DEFINE_FIELD_X(ExhumedPlayer, Player, bIsMummified);
DEFINE_FIELD_X(ExhumedPlayer, Player, invincibility); DEFINE_FIELD_X(ExhumedPlayer, Player, invincibility);
DEFINE_FIELD_X(ExhumedPlayer, Player, nAir); DEFINE_FIELD_X(ExhumedPlayer, Player, nAir);
@ -2244,7 +2244,7 @@ DEFINE_ACTION_FUNCTION(_ExhumedPlayer, IsUnderwater)
DEFINE_ACTION_FUNCTION(_ExhumedPlayer, GetAngle) DEFINE_ACTION_FUNCTION(_ExhumedPlayer, GetAngle)
{ {
PARAM_SELF_STRUCT_PROLOGUE(Player); PARAM_SELF_STRUCT_PROLOGUE(Player);
ACTION_RETURN_INT(self->pActor->spr.Angles.Yaw.Buildang()); ACTION_RETURN_INT(self->GetActor()->spr.Angles.Yaw.Buildang());
} }

View file

@ -49,7 +49,7 @@ struct PlayerSave
struct Player struct Player
{ {
DExhumedActor* pActor; DExhumedActor* actor;
int16_t nHealth; int16_t nHealth;
int16_t nLives; int16_t nLives;
int16_t nDouble; int16_t nDouble;
@ -112,6 +112,10 @@ struct Player
TObjPtr<DExhumedActor*> pDoppleSprite; TObjPtr<DExhumedActor*> pDoppleSprite;
TObjPtr<DExhumedActor*> pTarget; TObjPtr<DExhumedActor*> pTarget;
inline DExhumedActor* GetActor()
{
return actor;
}
}; };
extern int PlayerCount; extern int PlayerCount;

View file

@ -108,7 +108,7 @@ void FreeRa(int nPlayer)
void BuildRa(int nPlayer) void BuildRa(int nPlayer)
{ {
auto pPlayerActor = PlayerList[nPlayer].pActor; auto pPlayerActor = PlayerList[nPlayer].GetActor();
auto pActor = insertActor(pPlayerActor->sector(), 203); auto pActor = insertActor(pPlayerActor->sector(), 203);
@ -189,7 +189,7 @@ void MoveRaToEnemy(int nPlayer)
} }
pActor->spr.cstat = CSTAT_SPRITE_INVISIBLE; pActor->spr.cstat = CSTAT_SPRITE_INVISIBLE;
pTarget = PlayerList[nPlayer].pActor; pTarget = PlayerList[nPlayer].GetActor();
} }
pActor->spr.pos = pTarget->spr.pos.plusZ(-GetActorHeight(pTarget)); pActor->spr.pos = pTarget->spr.pos.plusZ(-GetActorHeight(pTarget));
@ -297,7 +297,7 @@ void AIRa::Tick(RunListEvent* ev)
{ {
if (PlayerList[nPlayer].nAmmo[kWeaponRing] > 0) if (PlayerList[nPlayer].nAmmo[kWeaponRing] > 0)
{ {
runlist_DamageEnemy(Ra[nPlayer].pTarget, PlayerList[Ra[nPlayer].nPlayer].pActor, BulletInfo[kWeaponRing].nDamage); runlist_DamageEnemy(Ra[nPlayer].pTarget, PlayerList[Ra[nPlayer].nPlayer].GetActor(), BulletInfo[kWeaponRing].nDamage);
AddAmmo(nPlayer, kWeaponRing, -WeaponInfo[kWeaponRing].d); AddAmmo(nPlayer, kWeaponRing, -WeaponInfo[kWeaponRing].d);
SetQuake(pActor, 100); SetQuake(pActor, 100);
} }

View file

@ -196,7 +196,7 @@ void DoSpiritHead()
auto Worktile = GetWritablePixels(aTexIds[kTexTileRamsesWorkTile]); auto Worktile = GetWritablePixels(aTexIds[kTexTileRamsesWorkTile]);
const auto pPlayer = &PlayerList[0]; const auto pPlayer = &PlayerList[0];
const auto pPlayerActor = pPlayer->pActor; const auto pPlayerActor = pPlayer->GetActor();
const auto nSpiritAngle = (pSpiritSprite->spr.pos.XY() - pPlayerActor->spr.pos.XY()).Angle(); const auto nSpiritAngle = (pSpiritSprite->spr.pos.XY() - pPlayerActor->spr.pos.XY()).Angle();
pPlayerActor->spr.Angles.Yaw += deltaangle(pPlayerActor->spr.Angles.Yaw, nSpiritAngle) * 0.25; pPlayerActor->spr.Angles.Yaw += deltaangle(pPlayerActor->spr.Angles.Yaw, nSpiritAngle) * 0.25;
pPlayerActor->spr.Angles.Pitch += deltaangle(pPlayerActor->spr.Angles.Pitch, currentLevel->ex_ramses_horiz) * 0.25; pPlayerActor->spr.Angles.Pitch += deltaangle(pPlayerActor->spr.Angles.Pitch, currentLevel->ex_ramses_horiz) * 0.25;

View file

@ -1865,7 +1865,7 @@ void runlist_DamageEnemy(DExhumedActor* pActor, DExhumedActor* pActor2, int nDam
if (PlayerList[nPlayer].nTauntTimer <= 0) if (PlayerList[nPlayer].nTauntTimer <= 0)
{ {
// Do a taunt // Do a taunt
auto pPlayerActor = PlayerList[nPlayer].pActor; auto pPlayerActor = PlayerList[nPlayer].GetActor();
auto pSector = pPlayerActor->sector(); auto pSector = pPlayerActor->sector();
if (!(pSector->Flag & kSectUnderwater)) if (!(pSector->Flag & kSectUnderwater))

View file

@ -508,7 +508,7 @@ void seq_PlotSequence(const int nSprite, const FName seqFile, const int16_t seqI
const auto pSector = pTSprite->sectp; const auto pSector = pTSprite->sectp;
const double nFloorZ = pSector->floorz; const double nFloorZ = pSector->floorz;
if (nFloorZ <= PlayerList[nLocalPlayer].pActor->viewzoffset + PlayerList[nLocalPlayer].pActor->spr.pos.Z) if (nFloorZ <= PlayerList[nLocalPlayer].GetActor()->viewzoffset + PlayerList[nLocalPlayer].GetActor()->spr.pos.Z)
{ {
pTSprite->ownerActor = nullptr; pTSprite->ownerActor = nullptr;
} }
@ -552,7 +552,7 @@ DEFINE_FIELD_X(Seq, Seq, flags);
DEFINE_ACTION_FUNCTION(_SeqFrame, playSound) DEFINE_ACTION_FUNCTION(_SeqFrame, playSound)
{ {
PARAM_SELF_STRUCT_PROLOGUE(SeqFrame); PARAM_SELF_STRUCT_PROLOGUE(SeqFrame);
self->playSound(PlayerList[nLocalPlayer].pActor); self->playSound(PlayerList[nLocalPlayer].GetActor());
return 0; return 0;
} }

View file

@ -138,7 +138,7 @@ void ExplodeSnakeSprite(DExhumedActor* pActor, int nPlayer)
// take a copy of this, to revert after call to runlist_RadialDamageEnemy() // take a copy of this, to revert after call to runlist_RadialDamageEnemy()
DExhumedActor* nOwner = pActor->pTarget; DExhumedActor* nOwner = pActor->pTarget;
pActor->pTarget = PlayerList[nPlayer].pActor; pActor->pTarget = PlayerList[nPlayer].GetActor();
runlist_RadialDamageEnemy(pActor, nDamage, BulletInfo[kWeaponStaff].nRadius); runlist_RadialDamageEnemy(pActor, nDamage, BulletInfo[kWeaponStaff].nRadius);
@ -161,7 +161,7 @@ void BuildSnake(int nPlayer, double zVal)
{ {
zVal -= 5; zVal -= 5;
auto pPlayerActor = PlayerList[nPlayer].pActor; auto pPlayerActor = PlayerList[nPlayer].GetActor();
auto pViewSect = PlayerList[nPlayer].pPlayerViewSect; auto pViewSect = PlayerList[nPlayer].pPlayerViewSect;
auto nPic = getSequence("snakbody", 0)->getFirstFrameTexture(); auto nPic = getSequence("snakbody", 0)->getFirstFrameTexture();
@ -277,7 +277,7 @@ void BuildSnake(int nPlayer, double zVal)
DExhumedActor* FindSnakeEnemy(int nSnake) DExhumedActor* FindSnakeEnemy(int nSnake)
{ {
int nPlayer = SnakeList[nSnake].nSnakePlayer; int nPlayer = SnakeList[nSnake].nSnakePlayer;
auto pPlayerActor = PlayerList[nPlayer].pActor; auto pPlayerActor = PlayerList[nPlayer].GetActor();
DExhumedActor* pActor = SnakeList[nSnake].pSprites[0]; // CHECKME DExhumedActor* pActor = SnakeList[nSnake].pSprites[0]; // CHECKME
if (!pActor) return nullptr; if (!pActor) return nullptr;

View file

@ -418,7 +418,7 @@ void EXSoundEngine::CalcPosVel(int type, const void* source, const float pt[3],
Snake* pSnake = &SnakeList[nSnakeCam]; Snake* pSnake = &SnakeList[nSnakeCam];
campos = pSnake->pSprites[0]->spr.pos; campos = pSnake->pSprites[0]->spr.pos;
} }
else if (const auto pActor = PlayerList[nLocalPlayer].pActor) else if (const auto pActor = PlayerList[nLocalPlayer].GetActor())
{ {
campos = pActor->spr.pos; campos = pActor->spr.pos;
} }
@ -485,7 +485,7 @@ void GameInterface::UpdateSounds()
if (nFreeze) if (nFreeze)
return; return;
const auto pActor = PlayerList[nLocalPlayer].pActor; const auto pActor = PlayerList[nLocalPlayer].GetActor();
DVector3 pos; DVector3 pos;
DAngle ang; DAngle ang;
@ -628,7 +628,7 @@ void PlayFX2(int nSound, DExhumedActor* pActor, int sectf, EChanFlags chanflags,
} }
// Nuke: added nSprite >= 0 check // Nuke: added nSprite >= 0 check
if (pActor != PlayerList[nLocalPlayer].pActor && pActor != nullptr && (pActor->spr.cstat & CSTAT_SPRITE_BLOCK_ALL)) if (pActor != PlayerList[nLocalPlayer].GetActor() && pActor != nullptr && (pActor->spr.cstat & CSTAT_SPRITE_BLOCK_ALL))
nCreepyTimer = kCreepyCount; nCreepyTimer = kCreepyCount;
} }
@ -669,7 +669,7 @@ void CheckAmbience(sectortype* sect)
{ {
if (sect == pSector2) if (sect == pSector2)
{ {
amb = GetSoundPos(PlayerList[0].pActor->spr.pos); amb = GetSoundPos(PlayerList[0].GetActor()->spr.pos);
} }
else else
{ {
@ -716,7 +716,7 @@ void UpdateCreepySounds()
if (totalmoves & 2) if (totalmoves & 2)
adder.Y = -adder.Y; adder.Y = -adder.Y;
auto sp = PlayerList[nLocalPlayer].pActor->spr.pos + adder; auto sp = PlayerList[nLocalPlayer].GetActor()->spr.pos + adder;
creepy = GetSoundPos(sp); creepy = GetSoundPos(sp);
auto soundid = FSoundID::fromInt((seqFrameSound & 0x1ff) + 1); auto soundid = FSoundID::fromInt((seqFrameSound & 0x1ff) + 1);

View file

@ -556,7 +556,7 @@ void AISWPressSector::Use(RunListEvent* ev)
{ {
if (SwitchData[nSwitch].nKeyMask) if (SwitchData[nSwitch].nKeyMask)
{ {
PlayFXAtXYZ(StaticSound[nSwitchSound], PlayerList[nPlayer].pActor->spr.pos, CHANF_LISTENERZ); PlayFXAtXYZ(StaticSound[nSwitchSound], PlayerList[nPlayer].GetActor()->spr.pos, CHANF_LISTENERZ);
StatusMessage(300, GStrings("TXT_EX_NEEDKEY")); StatusMessage(300, GStrings("TXT_EX_NEEDKEY"));
} }

View file

@ -73,7 +73,7 @@ void DrawView(double interpfrac, bool sceneonly)
DoInterpolations(interpfrac); DoInterpolations(interpfrac);
auto pPlayer = &PlayerList[nLocalPlayer]; auto pPlayer = &PlayerList[nLocalPlayer];
auto pPlayerActor = pPlayer->pActor; auto pPlayerActor = pPlayer->GetActor();
auto nPlayerOldCstat = pPlayerActor->spr.cstat; auto nPlayerOldCstat = pPlayerActor->spr.cstat;
auto pDop = pPlayer->pDoppleSprite; auto pDop = pPlayer->pDoppleSprite;
auto nDoppleOldCstat = pDop->spr.cstat; auto nDoppleOldCstat = pDop->spr.cstat;