Client: add cvar net_debugUpdates, to show which entity updates.

NSSurfacePropEntity: Add method: TimeSinceDeath()
Also further improvements to consistency of cvars, etc.
This commit is contained in:
Marco Cawthorne 2023-01-08 13:18:57 -08:00
parent 9c3622f59b
commit 1069468be1
Signed by: eukara
GPG Key ID: CE2032F0A2882A22
13 changed files with 147 additions and 46 deletions

View File

@ -96,3 +96,4 @@ seta "scr_sshot_type" "tga"
seta "media_repeat "0"
exec masters.lst
exec cvars.cfg

View File

@ -24,49 +24,70 @@
#include "NSView.h"
#include "crosshair.h"
#define PRINTFLAG(x) if (cvar("net_showUpdates")) \
print(sprintf("%f %s read update %s\n", time, classname, #x));
#define READENTITY_BYTE(field, changedflag) {\
if (flChanged & changedflag)\
if (flChanged & changedflag) {\
field = readbyte();\
PRINTFLAG(changedflag); \
}\
}
#define READENTITY_SHORT(field, changedflag) {\
if (flChanged & changedflag)\
if (flChanged & changedflag) {\
field = readshort();\
PRINTFLAG(changedflag); \
}\
}
#define READENTITY_FLOAT(field, changedflag) {\
if (flChanged & changedflag)\
if (flChanged & changedflag) {\
field = readfloat();\
PRINTFLAG(changedflag); \
}\
}
#define READENTITY_INT(field, changedflag) {\
if (flChanged & changedflag)\
if (flChanged & changedflag) {\
field = readint();\
PRINTFLAG(changedflag); \
}\
}
#define READENTITY_STRING(field, changedflag) {\
if (flChanged & changedflag)\
if (flChanged & changedflag) {\
field = readstring();\
PRINTFLAG(changedflag); \
}\
}
#define READENTITY_COORD(field, changedflag) {\
if (flChanged & changedflag)\
if (flChanged & changedflag) {\
field = readcoord();\
PRINTFLAG(changedflag); \
}\
}
#define READENTITY_ANGLE(field, changedflag) {\
if (flChanged & changedflag)\
if (flChanged & changedflag) {\
field = readshort() / (32767 / 360);\
PRINTFLAG(changedflag); \
}\
}
#define READENTITY_ENTITY(field, changedflag) {\
if (flChanged & changedflag)\
if (flChanged & changedflag) {\
field = findfloat(world, ::entnum, readentitynum());\
PRINTFLAG(changedflag); \
}\
}
#define READENTITY_ENTNUM(field, changedflag) {\
if (flChanged & changedflag)\
if (flChanged & changedflag) {\
field = readentitynum();\
PRINTFLAG(changedflag); \
}\
}
/* undocumented printcall types */

View File

@ -276,7 +276,7 @@ View_DrawViewModel(void)
m_eMuzzleflash.angles[2] += (random() * 10) - 5;
if (autocvar_cg_muzzleDLight == true)
dynamiclight_add(pSeat->m_vecPredictedOrigin + (v_forward * 32), 400, [1,0.45,0]);
dynamiclight_add(pSeat->m_vecPredictedOrigin + (v_forward * 32), 256, [1,0.45,0]);
setorigin(m_eMuzzleflash, m_eMuzzleflash.origin);
addentity(m_eMuzzleflash);
@ -288,7 +288,7 @@ View_DrawViewModel(void)
m_eMuzzleflashL.angles[2] += (random() * 10) - 5;
if (autocvar_cg_muzzleDLight == true)
dynamiclight_add(pSeat->m_vecPredictedOrigin + (v_forward * 32), 400, [1,0.45,0]);
dynamiclight_add(pSeat->m_vecPredictedOrigin + (v_forward * 32), 256, [1,0.45,0]);
setorigin(m_eMuzzleflashL, m_eMuzzleflashL.origin);
addentity(m_eMuzzleflashL);

View File

@ -345,3 +345,27 @@ TraceAttack_SetPenetrationPower(int power)
g_traceAttack.SetPenetrationMaxThickness((8 * power) * g_traceAttack.m_flRangeModifier);
}
#endif
/* generic function that applies damage, pain and suffering */
void
Damage_Apply(entity t, entity c, float dmg, int w, damageType_t type)
{
CGameRules rules = (CGameRules)g_grMode;
rules.DamageApply(t, c, dmg, w, type);
}
/* physical check of whether or not we can trace important parts of an ent */
float
Damage_CheckTrace(entity t, vector vecHitPos)
{
CGameRules rules = (CGameRules)g_grMode;
return rules.DamageCheckTrace(t, vecHitPos);
}
/* even more pain and suffering, mostly used for explosives */
void
Damage_Radius(vector org, entity attacker, float dmg, float r, int check, int w)
{
CGameRules rules = (CGameRules)g_grMode;
rules.DamageRadius(org, attacker, dmg, r, check, w);
}

View File

@ -14,8 +14,6 @@
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
var bool autocvar_mapcycle_enabled = true;
var string autocvar_mapcycle_file = "mapcycle.txt";
noref var string g_mapcycle_override = __NULL__;
void
@ -65,16 +63,18 @@ Mapcycle_Load(string filename)
void
Mapcycle_Init(void)
{
string cycleFile = cvar_string("g_mapCycle");
/* by default, this will be multiplayer only */
if (g_grMode.IsMultiplayer() == false)
return;
/* in case some server admin wants a map to continously loop */
if (autocvar_mapcycle_enabled == false) {
if not (cycleFile) {
print("mapcycle disabled via cvar. skipping\n");
return;
}
print("--------- Initializing MapCycle ----------\n");
Mapcycle_Load(autocvar_mapcycle_file);
Mapcycle_Load(cycleFile);
}

View File

@ -775,6 +775,7 @@ NSClientPlayer::Death(void)
forceinfokey(this, "*deaths", ftos(deaths));
forceinfokey(this, "*dead", "1");
forceinfokey(this, "*spectator", "0");
m_flDeathTime = time;
}
/*

View File

@ -65,6 +65,8 @@ private:
int m_iPropData;
string m_strPropData;
float m_flDeathTime;
nonvirtual void _SurfaceDataFinish(void);
nonvirtual void _PropDataFinish(void);
#endif
@ -133,6 +135,8 @@ public:
nonvirtual void SetSurfaceData(string);
/** Assigns the prop data of a given description onto this entity. */
nonvirtual void SetPropData(string);
/** Returns how many seconds have passed since we died. Will return -1 if not applicable. */
nonvirtual float TimeSinceDeath(void);
#endif
#ifdef CLIENT

View File

@ -582,6 +582,8 @@ NSSurfacePropEntity::Pain(void)
void
NSSurfacePropEntity::Death(void)
{
m_flDeathTime = time;
print(sprintf("%S", m_strOnBreak));
print("\n");
@ -645,7 +647,19 @@ NSSurfacePropEntity::_PropDataFinish(void)
else
m_iPropData = -1;
}
#else
float
NSSurfacePropEntity::TimeSinceDeath(void)
{
if (IsAlive())
return -1;
return time - m_flDeathTime;
}
#endif
#ifdef CLIENT
void
NSSurfacePropEntity::RenderFire(void)
{

View File

@ -1,4 +1,6 @@
#ifndef MAX_WEAPONS
#define MAX_WEAPONS 32
#endif
/** This class represents inventory items and weapons that you can directly interact with.
@ -90,8 +92,17 @@ public:
virtual void Reload(void);
/** Called whenever the no weapon command is called by a client. */
virtual void Release(void);
#ifdef CLIENT
/** Called before 3D world rendering is performed. */
virtual void ClientPredraw(void);
/** Called after 3D world rendering is performed. */
virtual void ClientPostdraw(void);
virtual void ReceiveEntity(float, float);
#endif
#ifdef SERVER
virtual float SendEntity(entity, float);
#endif
};

View File

@ -40,6 +40,7 @@ NSWeapon::Release(void)
{
}
#ifdef CLIENT
void
NSWeapon::ClientPredraw(void)
{
@ -50,6 +51,29 @@ NSWeapon::ClientPostdraw(void)
{
}
void
NSWeapon::ReceiveEntity(float new, float flChanged)
{
}
#endif
#ifdef SERVER
float
NSWeapon::SendEntity(entity ePEnt, float flChanged)
{
/* if we have a model, assume we're a pickup */
if (modelindex) {
return super::SendEntity(ePEnt, flChanged);
}
/* don't network to anyone but the owner */
if (ePEnt != owner) {
return (false);
}
}
#endif
/* get */
string
NSWeapon::GetPlayerModel(void)

View File

@ -114,31 +114,31 @@
#endif
/* if they're undefined by a config, they'll be set by the game/mod default */
var float autocvar_sv_stepheight = PMOVE_STEPHEIGHT;
var float autocvar_sv_airstepheight = PMOVE_AIRSTEPHEIGHT;
var float autocvar_sv_friction = PMOVE_FRICTION;
var float autocvar_sv_edgefriction = PMOVE_EDGEFRICTION;
var float autocvar_sv_stopspeed = PMOVE_STOPSPEED;
var float autocvar_sv_gravity = PMOVE_GRAVITY;
var float autocvar_sv_airaccelerate = PMOVE_AIRACCELERATE;
var float autocvar_sv_wateraccelerate = PMOVE_WATERACCELERATE;
var float autocvar_sv_accelerate = PMOVE_ACCELERATE;
var float autocvar_sv_maxspeed = PMOVE_MAXSPEED;
var float autocvar_pm_stepsize = PMOVE_STEPHEIGHT;
var float autocvar_pm_airstepsize = PMOVE_AIRSTEPHEIGHT;
var float autocvar_pm_friction = PMOVE_FRICTION;
var float autocvar_pm_edgefriction = PMOVE_EDGEFRICTION;
var float autocvar_pm_stopspeed = PMOVE_STOPSPEED;
var float autocvar_pm_airaccelerate = PMOVE_AIRACCELERATE;
var float autocvar_pm_wateraccelerate = PMOVE_WATERACCELERATE;
var float autocvar_pm_accelerate = PMOVE_ACCELERATE;
var float autocvar_pm_maxspeed = PMOVE_MAXSPEED;
var float autocvar_g_gravity = PMOVE_GRAVITY;
void
PMove_Init(void)
{
#ifdef SERVER
cvar_set("sv_stepheight", ftos(PMOVE_STEPHEIGHT));
cvar_set("sv_airstepheight", ftos(PMOVE_AIRSTEPHEIGHT));
cvar_set("sv_friction", ftos(PMOVE_FRICTION));
cvar_set("sv_edgefriction", ftos(PMOVE_EDGEFRICTION));
cvar_set("sv_stopspeed", ftos(PMOVE_STOPSPEED));
cvar_set("sv_gravity", ftos(PMOVE_GRAVITY));
cvar_set("sv_airaccelerate", ftos(PMOVE_AIRACCELERATE));
cvar_set("sv_wateraccelerate", ftos(PMOVE_WATERACCELERATE));
cvar_set("sv_accelerate", ftos(PMOVE_ACCELERATE));
cvar_set("sv_maxspeed", ftos(PMOVE_MAXSPEED));
cvar_set("pm_stepsize", ftos(PMOVE_STEPHEIGHT));
cvar_set("pm_airstepsize", ftos(PMOVE_AIRSTEPHEIGHT));
cvar_set("pm_friction", ftos(PMOVE_FRICTION));
cvar_set("pm_edgefriction", ftos(PMOVE_EDGEFRICTION));
cvar_set("pm_stopspeed", ftos(PMOVE_STOPSPEED));
cvar_set("pm_airaccelerate", ftos(PMOVE_AIRACCELERATE));
cvar_set("pm_wateraccelerate", ftos(PMOVE_WATERACCELERATE));
cvar_set("pm_accelerate", ftos(PMOVE_ACCELERATE));
cvar_set("pm_maxspeed", ftos(PMOVE_MAXSPEED));
cvar_set("g_gravity", ftos(PMOVE_GRAVITY)); /* global */
#endif
#ifdef CUSTOMPLAYERPHYSICS

View File

@ -35,16 +35,16 @@ PMoveCustom_UpdateVar(string info, string cv)
void
PMoveCustom_StartFrame(void)
{
PMoveCustom_UpdateVar("phy_stepheight", "sv_stepheight");
PMoveCustom_UpdateVar("phy_airstepheight", "sv_airstepheight");
PMoveCustom_UpdateVar("phy_friction", "sv_friction");
PMoveCustom_UpdateVar("phy_edgefriction", "sv_edgefriction");
PMoveCustom_UpdateVar("phy_stopspeed", "sv_stopspeed");
PMoveCustom_UpdateVar("phy_gravity", "sv_gravity");
PMoveCustom_UpdateVar("phy_airaccelerate", "sv_airaccelerate");
PMoveCustom_UpdateVar("phy_wateraccelerate", "sv_wateraccelerate");
PMoveCustom_UpdateVar("phy_accelerate", "sv_accelerate");
PMoveCustom_UpdateVar("phy_maxspeed", "sv_maxspeed");
PMoveCustom_UpdateVar("phy_stepheight", "pm_stepsize");
PMoveCustom_UpdateVar("phy_airstepheight", "pm_airstepsize");
PMoveCustom_UpdateVar("phy_friction", "pm_friction");
PMoveCustom_UpdateVar("phy_edgefriction", "pm_edgefriction");
PMoveCustom_UpdateVar("phy_stopspeed", "pm_stopspeed");
PMoveCustom_UpdateVar("phy_gravity", "g_gravity");
PMoveCustom_UpdateVar("phy_airaccelerate", "pm_airaccelerate");
PMoveCustom_UpdateVar("phy_wateraccelerate", "pm_wateraccelerate");
PMoveCustom_UpdateVar("phy_accelerate", "pm_accelerate");
PMoveCustom_UpdateVar("phy_maxspeed", "pm_maxspeed");
}
#endif

View File

@ -15,6 +15,7 @@ void Weapons_Release(NSClientPlayer);
void Weapons_Primary(NSClientPlayer);
void Weapons_Secondary(NSClientPlayer);
void Weapons_Reload(NSClientPlayer);
void Weapons_PreDraw(NSClientPlayer, bool);
void Weapons_Init(void);
string Weapons_GetWorldmodel(int);
weapontype_t Weapons_GetType(NSClientPlayer, int);