access functions for the dudeinfo properties.

These get used quite often so look them up only once.
This commit is contained in:
Christoph Oelckers 2023-10-08 23:51:07 +02:00
parent 7bf6702a6a
commit 55621e9a38
4 changed files with 197 additions and 49 deletions

View file

@ -51,6 +51,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "tilesetbuilder.h"
#include "nnexts.h"
#include "thingdef.h"
#include "types.h"
BEGIN_BLD_NS
@ -718,6 +719,36 @@ void GameInterface::FinalizeSetup()
actorinfo->TypeNum = pair->Key;
}
}
auto getvar = [](PClassActor* cls, FName name)
{
auto sym = dyn_cast<PField>(cls->FindSymbol(name, true));
if (sym && (sym->Flags & VARF_Meta))
{
return sym->Offset;
}
I_Error("failed to get offset for %s", name.GetChars());
};
// set up some pointers to members to access the dudeinfo properties from the script
auto dudedef = PClass::FindActor("BloodDudeBase");
o_seqStartID = getvar(dudedef, "seqStartID");
o_Periphery = getvar(dudedef, "periphery");
o_SeeDist = getvar(dudedef, "seedist");
o_HearDist = getvar(dudedef, "heardist");
o_MeleeDist = getvar(dudedef, "meleedist");
o_TurnRange = getvar(dudedef, "turnrange");
o_FrontSpeed = getvar(dudedef, "frontspeed");
o_SideSpeed = getvar(dudedef, "sidespeed");
o_ClipDist = getvar(dudedef, "defclipdist");
o_startHealth = getvar(dudedef, "startHealth");
o_mass = getvar(dudedef, "mass");
o_eyeHeight = getvar(dudedef, "eyeHeight");
o_aimHeight = getvar(dudedef, "aimHeight");
o_fleeHealth = getvar(dudedef, "fleeHealth");
o_alertChance = getvar(dudedef, "alertchance");
o_lockout = getvar(dudedef, "lockout");
}
//---------------------------------------------------------------------------

View file

@ -5,6 +5,25 @@
BEGIN_BLD_NS
// access helpers to dudeinfo properties. We do not really want to go through the hashmap each time when reading them.
inline size_t o_seqStartID;
inline size_t o_Periphery;
inline size_t o_SeeDist;
inline size_t o_HearDist;
inline size_t o_MeleeDist;
inline size_t o_TurnRange;
inline size_t o_FrontSpeed;
inline size_t o_SideSpeed;
inline size_t o_ClipDist;
inline size_t o_startHealth;
inline size_t o_mass;
inline size_t o_eyeHeight;
inline size_t o_aimHeight;
inline size_t o_fleeHealth;
inline size_t o_alertChance;
inline size_t o_lockout;
struct SPRITEHIT
{
@ -172,8 +191,107 @@ public:
{
return spr.lotag;
}
// dudeinfo helpers.
inline int seqStartID() const
{
return *(int*)(GetClass()->Meta + o_seqStartID);
}
inline int startHealth() const
{
return *(int*)(GetClass()->Meta + o_startHealth);
}
inline int mass() const
{
return *(int*)(GetClass()->Meta + o_mass);
}
inline int eyeHeight() const
{
return *(int*)(GetClass()->Meta + o_eyeHeight);
}
inline int aimHeight() const
{
return *(int*)(GetClass()->Meta + o_aimHeight);
}
inline int fleeHealth() const
{
return *(int*)(GetClass()->Meta + o_fleeHealth);
}
inline int alertChance() const
{
return *(int*)(GetClass()->Meta + o_alertChance);
}
inline int lockout() const
{
return *(int*)(GetClass()->Meta + o_lockout);
}
/*
int hinderDamage; // recoil damage
int changeTarget; // chance to change target when attacked someone else
int changeTargetKin; // chance to change target when attacked by same type
int backSpeed; // backward speed (unused)
*/
inline double HearDist() const
{
return *(double*)(GetClass()->Meta + o_HearDist);
}
inline double SeeDist() const
{
return *(double*)(GetClass()->Meta + o_SeeDist);
}
inline double MeleeDist() const
{
return *(double*)(GetClass()->Meta + o_MeleeDist);
}
inline DAngle Periphery() const
{
return *(DAngle*)(GetClass()->Meta + o_Periphery);
}
inline double FrontSpeed() const
{
return *(double*)(GetClass()->Meta + o_FrontSpeed);
}
inline int FrontSpeedFixed() const
{
return FloatToFixed(*(double*)(GetClass()->Meta + o_FrontSpeed));
}
inline double SideSpeed() const
{
return *(double*)(GetClass()->Meta + o_SideSpeed);
}
inline int SideSpeedFixed() const
{
return FloatToFixed(*(double*)(GetClass()->Meta + o_SideSpeed));
}
inline DAngle TurnRange() const
{
return *(DAngle*)(GetClass()->Meta + o_TurnRange);
}
double fClipDist() const { return clipdist * 0.25; }
};
class DBloodPlayer final : public DCorePlayer
{
DECLARE_CLASS(DBloodPlayer, DCorePlayer)

View file

@ -18,7 +18,7 @@ class BloodDudeBase : Bloodactor
meta double frontSpeed;
meta double sideSpeed;
meta double backSpeed;
meta double angSpeed;
meta double turnRange;
meta int gibType[3]; // which gib used when explode dude
property prefix: none;
@ -40,7 +40,7 @@ class BloodDudeBase : Bloodactor
property frontSpeed: frontSpeed;
property sideSpeed: sideSpeed;
property backSpeed: backSpeed;
property angSpeed: angSpeed;
property turnRange: turnRange;
default
@ -385,7 +385,7 @@ class BloodPlayerBase : BloodDudeBase
frontspeed 0;
sidespeed 0;
backspeed 0;
angspeed 11.25;
turnrange 11.25;
gibtype 15, -1, -1;
dmgcontrol 256, 256, 256, 256, 256, 256, 256;
}
@ -419,7 +419,7 @@ class BloodDudeCultistTommy : BloodDudeBase
frontspeed 0.711105347;
sidespeed 0.533325195;
backspeed 0.21333313;
angspeed 45;
turnrange 45;
gibtype 15, -1, -1;
dmgcontrol 256, 256, 96, 256, 256, 256, 192;
}
@ -448,7 +448,7 @@ class BloodDudeCultistShotgun : BloodDudeBase
frontspeed 0.533325195;
sidespeed 0.533325195;
backspeed 0.21333313;
angspeed 45;
turnrange 45;
gibtype 15, -1, -1;
dmgcontrol 256, 256, 128, 256, 256, 256, 192;
}
@ -477,7 +477,7 @@ class BloodDudeZombieAxeNormal : BloodDudeBase
frontspeed 0.888885498;
sidespeed 0.711105347;
backspeed 0.533325195;
angspeed 67.5;
turnrange 67.5;
gibtype 15, -1, -1;
dmgcontrol 256, 256, 112, 256, 256, 256, 160;
}
@ -506,7 +506,7 @@ class BloodDudeZombieButcher : BloodDudeBase
frontspeed 0.355545044;
sidespeed 0.355545044;
backspeed 0.21333313;
angspeed 45;
turnrange 45;
gibtype 15, -1, -1;
dmgcontrol 256, 256, 32, 128, 256, 64, 128;
}
@ -535,7 +535,7 @@ class BloodDudeZombieAxeBuried : BloodDudeBase
frontspeed 0.888885498;
sidespeed 0.711105347;
backspeed 0.533325195;
angspeed 67.5;
turnrange 67.5;
gibtype 15, -1, -1;
dmgcontrol 256, 256, 112, 256, 256, 256, 256;
}
@ -564,7 +564,7 @@ class BloodDudeGargoyleFlesh : BloodDudeBase
frontspeed 0.711105347;
sidespeed 0.533325195;
backspeed 0.355545044;
angspeed 67.5;
turnrange 67.5;
gibtype 30, -1, -1;
dmgcontrol 0, 128, 48, 208, 256, 256, 256;
}
@ -593,7 +593,7 @@ class BloodDudeGargoyleStone : BloodDudeBase
frontspeed 0.711105347;
sidespeed 0.533325195;
backspeed 0.355545044;
angspeed 45;
turnrange 45;
gibtype 19, -1, -1;
dmgcontrol 0, 0, 10, 10, 0, 128, 64;
}
@ -621,7 +621,7 @@ class BloodDudeGargoyleStatueFlesh : BloodDudeBase
frontspeed 0;
sidespeed 0;
backspeed 0;
angspeed 0;
turnrange 0;
gibtype -1, -1, -1;
}
}
@ -648,7 +648,7 @@ class BloodDudeGargoyleStatueStone : BloodDudeBase
frontspeed 0;
sidespeed 0;
backspeed 0;
angspeed 0;
turnrange 0;
gibtype -1, -1, -1;
}
}
@ -675,7 +675,7 @@ class BloodDudePhantasm : BloodDudeBase
frontspeed 0.888885498;
sidespeed 0.711105347;
backspeed 0.533325195;
angspeed 67.5;
turnrange 67.5;
gibtype -1, -1, -1;
dmgcontrol 0, 0, 48, 0, 0, 16, 0;
}
@ -702,7 +702,7 @@ class BloodDudeHellHound : BloodDudeBase
frontspeed 1.777771;
sidespeed 1.24443054;
backspeed 1.06666565;
angspeed 67.5;
turnrange 67.5;
gibtype 29, -1, -1;
dmgcontrol 48, 0, 48, 48, 256, 128, 192;
}
@ -729,7 +729,7 @@ class BloodDudeHand : BloodDudeBase
frontspeed 0.888885498;
sidespeed 0.711105347;
backspeed 0.533325195;
angspeed 67.5;
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 64, 256, 256, 256, 0, 64, 256;
}
@ -757,7 +757,7 @@ class BloodDudeSpiderBrown : BloodDudeBase
frontspeed 0.888885498;
sidespeed 0.711105347;
backspeed 0.533325195;
angspeed 67.5;
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 64, 256, 256, 96, 256, 64, 256;
}
@ -785,7 +785,7 @@ class BloodDudeSpiderRed : BloodDudeBase
frontspeed 0.888885498;
sidespeed 0.711105347;
backspeed 0.533325195;
angspeed 67.5;
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 64, 128, 256, 96, 256, 64, 256;
}
@ -813,7 +813,7 @@ class BloodDudeSpiderBlack : BloodDudeBase
frontspeed 0.888885498;
sidespeed 0.711105347;
backspeed 0.533325195;
angspeed 67.5;
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 128, 256, 256, 96, 256, 64, 256;
}
@ -841,7 +841,7 @@ class BloodDudeSpiderMother : BloodDudeBase
frontspeed 0.888885498;
sidespeed 0.711105347;
backspeed 0.533325195;
angspeed 67.5;
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 32, 16, 16, 16, 32, 32, 32;
}
@ -870,7 +870,7 @@ class BloodDudeGillBeast : BloodDudeBase
frontspeed 0.888885498;
sidespeed 0.711105347;
backspeed 0.533325195;
angspeed 67.5;
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 48, 80, 64, 128, 0, 128, 48;
}
@ -897,7 +897,7 @@ class BloodDudeBoneEel : BloodDudeBase
frontspeed 0.533325195;
sidespeed 0.355545044;
backspeed 0.355545044;
angspeed 22.5;
turnrange 22.5;
gibtype 7, -1, -1;
dmgcontrol 256, 256, 256, 256, 0, 256, 192;
}
@ -924,7 +924,7 @@ class BloodDudeBat : BloodDudeBase
frontspeed 0.355545044;
sidespeed 0.355545044;
backspeed 0.21333313;
angspeed 67.5;
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 256, 256, 256, 256, 256, 64, 256;
}
@ -951,7 +951,7 @@ class BloodDudeRat : BloodDudeBase
frontspeed 0.888885498;
sidespeed 0.711105347;
backspeed 0.533325195;
angspeed 67.5;
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 256, 256, 256, 256, 256, 128, 256;
}
@ -977,7 +977,7 @@ class BloodDudePodGreen : BloodDudeBase
frontspeed 0;
sidespeed 0;
backspeed 0;
angspeed 67.5;
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 160, 160, 128, 160, 0, 0, 256;
}
@ -1002,7 +1002,7 @@ class BloodDudeTentacleGreen : BloodDudeBase
frontspeed 0;
sidespeed 0;
backspeed 0;
angspeed 67.5;
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 256, 256, 256, 80, 0, 0, 256;
}
@ -1028,7 +1028,7 @@ class BloodDudePodFire : BloodDudeBase
frontspeed 0;
sidespeed 0;
backspeed 0;
angspeed 67.5;
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 96, 0, 128, 64, 256, 64, 160;
}
@ -1053,7 +1053,7 @@ class BloodDudeTentacleFire : BloodDudeBase
frontspeed 0;
sidespeed 0;
backspeed 0;
angspeed 67.5;
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 128, 0, 128, 128, 0, 0, 128;
}
@ -1079,7 +1079,7 @@ class BloodDudePodMother : BloodDudeBase
frontspeed 0;
sidespeed 0;
backspeed 0;
angspeed 0;
turnrange 0;
gibtype 7, -1, -1;
dmgcontrol 256, 256, 256, 256, 256, 256, 256;
}
@ -1104,7 +1104,7 @@ class BloodDudeTentacleMother : BloodDudeBase
frontspeed 0;
sidespeed 0;
backspeed 0;
angspeed 0;
turnrange 0;
gibtype 7, -1, -1;
dmgcontrol 256, 256, 128, 256, 128, 128, 256;
}
@ -1131,7 +1131,7 @@ class BloodDudeCerberusTwoHead : BloodDudeBase
frontspeed 1.06666565;
sidespeed 0.888885498;
backspeed 0.711105347;
angspeed 67.5;
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 16, 0, 16, 16, 0, 96, 48;
}
@ -1158,7 +1158,7 @@ class BloodDudeCerberusOneHead : BloodDudeBase
frontspeed 0.888885498;
sidespeed 0.533325195;
backspeed 0.391098022;
angspeed 67.5;
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 16, 0, 16, 16, 0, 96, 48;
}
@ -1185,7 +1185,7 @@ class BloodDudeTchernobog : BloodDudeBase
frontspeed 0.888885498;
sidespeed 0.888885498;
backspeed 0.533325195;
angspeed 67.5;
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 3, 1, 4, 4, 0, 4, 3;
}
@ -1212,7 +1212,7 @@ class BloodDudeCultistTommyProne : BloodDudeBase
frontspeed 0.888885498;
sidespeed 0.711105347;
backspeed 0.533325195;
angspeed 67.5;
turnrange 67.5;
gibtype 15, -1, -1;
dmgcontrol 256, 256, 96, 256, 256, 256, 192;
}
@ -1270,7 +1270,7 @@ class BloodDudeBurningInnocent : BloodDudeBase
frontspeed 0;
sidespeed 0;
backspeed 0;
angspeed 28.125;
turnrange 28.125;
gibtype 7, 5, -1;
dmgcontrol 256, 256, 256, 256, 256, 256, 256;
}
@ -1296,7 +1296,7 @@ class BloodDudeBurningCultist : BloodDudeBase
frontspeed 0.711105347;
sidespeed 0.533325195;
backspeed 0.21333313;
angspeed 28.125;
turnrange 28.125;
gibtype 7, 5, -1;
dmgcontrol 256, 256, 256, 256, 256, 256, 256;
}
@ -1324,7 +1324,7 @@ class BloodDudeBurningZombieAxe : BloodDudeBase
frontspeed 0.888885498;
sidespeed 0.711105347;
backspeed 0.533325195;
angspeed 28.125;
turnrange 28.125;
gibtype 7, 5, -1;
dmgcontrol 256, 256, 256, 256, 256, 256, 256;
}
@ -1352,7 +1352,7 @@ class BloodDudeBurningZombieButcher : BloodDudeBase
frontspeed 0.604431152;
sidespeed 0.42666626;
backspeed 0.21333313;
angspeed 17.578125;
turnrange 17.578125;
gibtype 7, 5, -1;
dmgcontrol 256, 256, 256, 256, 256, 256, 256;
}
@ -1380,7 +1380,7 @@ class BloodDudeCultistReserved : BloodDudeBase
frontspeed 0;
sidespeed 0;
backspeed 0;
angspeed 11.25;
turnrange 11.25;
gibtype 15, -1, -1;
dmgcontrol 256, 256, 256, 256, 256, 256, 256;
}
@ -1409,7 +1409,7 @@ class BloodDudeZombieAxeLaying : BloodDudeBase
frontspeed 0.888885498;
sidespeed 0.711105347;
backspeed 0.533325195;
angspeed 67.5;
turnrange 67.5;
gibtype 15, -1, -1;
dmgcontrol 256, 256, 112, 256, 256, 256, 256;
}
@ -1438,7 +1438,7 @@ class BloodDudeInnocent : BloodDudeBase
frontspeed 0.888885498;
sidespeed 0.711105347;
backspeed 0.533325195;
angspeed 67.5;
turnrange 67.5;
gibtype 15, -1, -1;
dmgcontrol 288, 288, 288, 288, 288, 288, 288;
}
@ -1465,7 +1465,7 @@ class BloodDudeCultistShotgunProne : BloodDudeBase
frontspeed 0;
sidespeed 0;
backspeed 0;
angspeed 11.25;
turnrange 11.25;
gibtype 7, 5, -1;
dmgcontrol 256, 256, 256, 256, 256, 256, 256;
}
@ -1494,7 +1494,7 @@ class BloodDudeCultistTesla : BloodDudeBase
frontspeed 0.711105347;
sidespeed 0.533325195;
backspeed 0.21333313;
angspeed 45;
turnrange 45;
gibtype 15, -1, -1;
dmgcontrol 256, 256, 96, 160, 256, 256, 12;
}
@ -1523,7 +1523,7 @@ class BloodDudeCultistTNT : BloodDudeBase
frontspeed 0.711105347;
sidespeed 0.533325195;
backspeed 0.21333313;
angspeed 45;
turnrange 45;
gibtype 15, -1, -1;
dmgcontrol 256, 160, 96, 64, 256, 256, 256;
}
@ -1552,7 +1552,7 @@ class BloodDudeCultistBeast : BloodDudeBase
frontspeed 0.711105347;
sidespeed 0.533325195;
backspeed 0.21333313;
angspeed 45;
turnrange 45;
gibtype 15, -1, -1;
dmgcontrol 128, 128, 16, 16, 0, 64, 48;
}
@ -1579,7 +1579,7 @@ class BloodDudeTinyCaleb : BloodDudeBase
frontspeed 0.888885498;
sidespeed 0.711105347;
backspeed 0.533325195;
angspeed 67.5;
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 160, 160, 160, 160, 256, 128, 288;
}
@ -1608,7 +1608,7 @@ class BloodDudeBeast : BloodDudeBase
frontspeed 1.777771;
sidespeed 1.24443054;
backspeed 1.06666565;
angspeed 67.5;
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 5, 5, 15, 8, 0, 15, 15;
}
@ -1635,7 +1635,7 @@ class BloodDudeBurningTinyCaleb : BloodDudeBase
frontspeed 0.888885498;
sidespeed 0.711105347;
backspeed 0.533325195;
angspeed 67.5;
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 256, 256, 256, 256, 256, 256, 256;
}
@ -1664,7 +1664,7 @@ class BloodDudeBurningBeast : BloodDudeBase
frontspeed 1.777771;
sidespeed 1.24443054;
backspeed 1.06666565;
angspeed 67.5;
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 256, 256, 256, 256, 256, 256, 256;
}

View file

@ -144,7 +144,6 @@ class BloodPlayer : CorePlayer native
native readonly BloodActor actor;
//DUDEINFO* pDudeInfo;
//PlayerHorizon horizon;
//PlayerAngle angle;
native uint8 newWeapon;