diff --git a/source/core/coreplayer.h b/source/core/coreplayer.h index fa6b952f4..69250e3a9 100644 --- a/source/core/coreplayer.h +++ b/source/core/coreplayer.h @@ -7,4 +7,7 @@ struct CorePlayer { InputPacket input; PlayerAngles Angles; + DCoreActor* actor; + + virtual DCoreActor* GetActor() = 0; }; diff --git a/source/games/blood/src/bloodactor.h b/source/games/blood/src/bloodactor.h index 9334ccebc..50f86f14f 100644 --- a/source/games/blood/src/bloodactor.h +++ b/source/games/blood/src/bloodactor.h @@ -147,6 +147,113 @@ public: }; +struct BloodPlayer final : public CorePlayer +{ + DUDEINFO* pDudeInfo; + uint8_t newWeapon; + int weaponQav; + int qavCallback; + bool isRunning; + int posture; // stand, crouch, swim + int sceneQav; // by NoOne: used to keep qav id + double bobPhase; + int bobAmp; + double bobHeight; + double bobWidth; + double obobHeight; + double obobWidth; + int swayAmp; + double swayHeight; + double swayWidth; + double oswayHeight; + double oswayWidth; + int nPlayer; // Connect id + int lifeMode; + double zView; + double ozView; + double zViewVel; + double zWeapon; + double ozWeapon; + double zWeaponVel; + double slope; + bool isUnderwater; + bool hasKey[8]; + int8_t hasFlag; + TObjPtr ctfFlagState[2]; + int damageControl[7]; + int8_t curWeapon; + int8_t nextWeapon; + int weaponTimer; + int weaponState; + int weaponAmmo; //rename + bool hasWeapon[kWeapMax]; + int weaponMode[kWeapMax]; + int weaponOrder[2][kWeapMax]; + //int at149[14]; + int ammoCount[12]; + bool qavLoop; + int qavLastTick; + int qavTimer; + int fuseTime; + int throwTime; + double throwPower; + DVector3 aim; // world + DVector3 relAim; // relative + TObjPtr aimTarget; // aim target sprite + int aimTargetsCount; + TObjPtr aimTargets[16]; + int deathTime; + int pwUpTime[kMaxPowerUps]; + int fragCount; + int fragInfo[8]; + int teamId; + TObjPtr fragger; + int underwaterTime; + int bubbleTime; + int restTime; + int kickPower; + int laughCount; + bool godMode; + bool fallScream; + bool cantJump; + int packItemTime; // pack timer + int packItemId; // pack id 1: diving suit, 2: crystal ball, 3: beast vision 4: jump boots + PACKINFO packSlots[5]; // at325 [1]: diving suit, [2]: crystal ball, [3]: beast vision [4]: jump boots + int armor[3]; // armor + //int at342; + //int at346; + TObjPtr voodooTarget; + int voodooTargets; // --> useless + int voodooVar1; // --> useless + int vodooVar2; // --> useless + int flickerEffect; + int tiltEffect; + int visibility; + int painEffect; + int blindEffect; + int chokeEffect; + int handTime; + bool hand; // if true, there is hand start choking the player + int pickupEffect; + bool flashEffect; // if true, reduce pPlayer->visibility counter + int quakeEffect; + int player_par; + int nWaterPal; + POSTURE pPosture[kModeMax][kPostureMax]; + + inline DBloodActor* GetActor() override + { + return static_cast(actor); + } +}; + +extern BloodPlayer PlayerArray[kMaxPlayers]; + +inline BloodPlayer* getPlayer(int index) +{ + return &PlayerArray[index]; +} + // subclassed to add a game specific actor() method extern HitInfo gHitInfo; diff --git a/source/games/blood/src/player.h b/source/games/blood/src/player.h index feaeb61f9..6c5470648 100644 --- a/source/games/blood/src/player.h +++ b/source/games/blood/src/player.h @@ -78,106 +78,7 @@ struct POSTURE extern POSTURE gPostureDefaults[kModeMax][kPostureMax]; -struct BloodPlayer final : public CorePlayer -{ - DBloodActor* actor; - DUDEINFO* pDudeInfo; - uint8_t newWeapon; - int weaponQav; - int qavCallback; - bool isRunning; - int posture; // stand, crouch, swim - int sceneQav; // by NoOne: used to keep qav id - double bobPhase; - int bobAmp; - double bobHeight; - double bobWidth; - double obobHeight; - double obobWidth; - int swayAmp; - double swayHeight; - double swayWidth; - double oswayHeight; - double oswayWidth; - int nPlayer; // Connect id - int lifeMode; - double zView; - double ozView; - double zViewVel; - double zWeapon; - double ozWeapon; - double zWeaponVel; - double slope; - bool isUnderwater; - bool hasKey[8]; - int8_t hasFlag; - TObjPtr ctfFlagState[2]; - int damageControl[7]; - int8_t curWeapon; - int8_t nextWeapon; - int weaponTimer; - int weaponState; - int weaponAmmo; //rename - bool hasWeapon[kWeapMax]; - int weaponMode[kWeapMax]; - int weaponOrder[2][kWeapMax]; - //int at149[14]; - int ammoCount[12]; - bool qavLoop; - int qavLastTick; - int qavTimer; - int fuseTime; - int throwTime; - double throwPower; - DVector3 aim; // world - DVector3 relAim; // relative - TObjPtr aimTarget; // aim target sprite - int aimTargetsCount; - TObjPtr aimTargets[16]; - int deathTime; - int pwUpTime[kMaxPowerUps]; - int fragCount; - int fragInfo[8]; - int teamId; - TObjPtr fragger; - int underwaterTime; - int bubbleTime; - int restTime; - int kickPower; - int laughCount; - bool godMode; - bool fallScream; - bool cantJump; - int packItemTime; // pack timer - int packItemId; // pack id 1: diving suit, 2: crystal ball, 3: beast vision 4: jump boots - PACKINFO packSlots[5]; // at325 [1]: diving suit, [2]: crystal ball, [3]: beast vision [4]: jump boots - int armor[3]; // armor - //int at342; - //int at346; - TObjPtr voodooTarget; - int voodooTargets; // --> useless - int voodooVar1; // --> useless - int vodooVar2; // --> useless - int flickerEffect; - int tiltEffect; - int visibility; - int painEffect; - int blindEffect; - int chokeEffect; - int handTime; - bool hand; // if true, there is hand start choking the player - int pickupEffect; - bool flashEffect; // if true, reduce pPlayer->visibility counter - int quakeEffect; - int player_par; - int nWaterPal; - POSTURE pPosture[kModeMax][kPostureMax]; - - inline DBloodActor* GetActor() - { - return actor; - } -}; +struct BloodPlayer; struct AMMOINFO { @@ -196,13 +97,6 @@ struct POWERUPINFO void playerResetPosture(BloodPlayer* pPlayer); -extern BloodPlayer PlayerArray[kMaxPlayers]; - -inline BloodPlayer* getPlayer(int index) -{ - return &PlayerArray[index]; -} - extern bool gBlueFlagDropped; extern bool gRedFlagDropped; diff --git a/source/games/duke/src/dukeactor.h b/source/games/duke/src/dukeactor.h index 58f43e5af..6cd8c6582 100644 --- a/source/games/duke/src/dukeactor.h +++ b/source/games/duke/src/dukeactor.h @@ -11,7 +11,7 @@ using DukeSpriteIterator = TSpriteIterator; inline DDukeActor* DukePlayer::GetActor() { - return actor; + return static_cast(actor); } inline int DukePlayer::GetPlayerNum() diff --git a/source/games/duke/src/types.h b/source/games/duke/src/types.h index 655ea98b7..719a4ead6 100644 --- a/source/games/duke/src/types.h +++ b/source/games/duke/src/types.h @@ -268,7 +268,7 @@ struct DukePlayer final : public CorePlayer sectortype* cursector; sectortype* one_parallax_sectnum; // wall + sector references. walltype* access_wall; - DDukeActor* GetActor(); + DDukeActor* GetActor() override; TObjPtr actorsqu, wackedbyactor, on_crane, holoduke_on, somethingonplayer, access_spritenum, dummyplayersprite, newOwner; short last_extra, subweapon; @@ -345,7 +345,6 @@ struct DukePlayer final : public CorePlayer TArray uservars; - DDukeActor* actor; int GetPlayerNum(); void apply_seasick(); diff --git a/source/games/exhumed/src/player.h b/source/games/exhumed/src/player.h index 906d3e8db..7f399738f 100644 --- a/source/games/exhumed/src/player.h +++ b/source/games/exhumed/src/player.h @@ -49,7 +49,6 @@ struct PlayerSave struct ExhumedPlayer final : public CorePlayer { - DExhumedActor* actor; int16_t nHealth; int16_t nLives; int16_t nDouble; @@ -110,9 +109,9 @@ struct ExhumedPlayer final : public CorePlayer TObjPtr pDoppleSprite; TObjPtr pTarget; - inline DExhumedActor* GetActor() + inline DExhumedActor* GetActor() override { - return actor; + return static_cast(actor); } }; diff --git a/source/games/sw/src/game.h b/source/games/sw/src/game.h index 53c0c2710..c95df8440 100644 --- a/source/games/sw/src/game.h +++ b/source/games/sw/src/game.h @@ -1848,9 +1848,9 @@ struct SWPlayer final : public CorePlayer uint8_t WpnReloadState; - inline DSWActor* GetActor() + inline DSWActor* GetActor() override { - return actor; + return static_cast(actor); } void posZset(const double val)