diff --git a/platform/platform_default.cfg b/platform/platform_default.cfg index 065fac27..e7f7a7e9 100644 --- a/platform/platform_default.cfg +++ b/platform/platform_default.cfg @@ -96,3 +96,4 @@ seta "scr_sshot_type" "tga" seta "media_repeat "0" exec masters.lst +exec cvars.cfg diff --git a/src/client/defs.h b/src/client/defs.h index 191d128c..9f69f81d 100644 --- a/src/client/defs.h +++ b/src/client/defs.h @@ -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 */ diff --git a/src/client/view.qc b/src/client/view.qc index 2dd16fce..5ea74ee2 100644 --- a/src/client/view.qc +++ b/src/client/view.qc @@ -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); diff --git a/src/server/NSTraceAttack.qc b/src/server/NSTraceAttack.qc index 80617f60..4e198b72 100644 --- a/src/server/NSTraceAttack.qc +++ b/src/server/NSTraceAttack.qc @@ -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); +} diff --git a/src/server/mapcycle.qc b/src/server/mapcycle.qc index 43d2be97..24605800 100644 --- a/src/server/mapcycle.qc +++ b/src/server/mapcycle.qc @@ -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); } diff --git a/src/shared/NSClientPlayer.qc b/src/shared/NSClientPlayer.qc index 648379db..48a68b76 100644 --- a/src/shared/NSClientPlayer.qc +++ b/src/shared/NSClientPlayer.qc @@ -775,6 +775,7 @@ NSClientPlayer::Death(void) forceinfokey(this, "*deaths", ftos(deaths)); forceinfokey(this, "*dead", "1"); forceinfokey(this, "*spectator", "0"); + m_flDeathTime = time; } /* diff --git a/src/shared/NSSurfacePropEntity.h b/src/shared/NSSurfacePropEntity.h index 4d98ba5d..15dfc77e 100644 --- a/src/shared/NSSurfacePropEntity.h +++ b/src/shared/NSSurfacePropEntity.h @@ -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 diff --git a/src/shared/NSSurfacePropEntity.qc b/src/shared/NSSurfacePropEntity.qc index 2f2c478b..eee5a9f0 100644 --- a/src/shared/NSSurfacePropEntity.qc +++ b/src/shared/NSSurfacePropEntity.qc @@ -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) { diff --git a/src/shared/NSWeapon.h b/src/shared/NSWeapon.h index f61a6e9e..8fe53600 100644 --- a/src/shared/NSWeapon.h +++ b/src/shared/NSWeapon.h @@ -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 }; \ No newline at end of file diff --git a/src/shared/NSWeapon.qc b/src/shared/NSWeapon.qc index ff4908e4..83bb0b95 100644 --- a/src/shared/NSWeapon.qc +++ b/src/shared/NSWeapon.qc @@ -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) diff --git a/src/shared/pmove.qc b/src/shared/pmove.qc index 6a6c12df..7706fda4 100644 --- a/src/shared/pmove.qc +++ b/src/shared/pmove.qc @@ -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 diff --git a/src/shared/pmove_custom.qc b/src/shared/pmove_custom.qc index c5b09c70..208b3513 100644 --- a/src/shared/pmove_custom.qc +++ b/src/shared/pmove_custom.qc @@ -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 diff --git a/src/shared/weapons.h b/src/shared/weapons.h index c09e4b94..03b41982 100644 --- a/src/shared/weapons.h +++ b/src/shared/weapons.h @@ -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);