From 8c5d42fbfd08956667bbaf8e4fd2ab7e57c46ded Mon Sep 17 00:00:00 2001 From: lordhavoc Date: Fri, 17 Feb 2006 10:55:07 +0000 Subject: [PATCH] added .float spawnshieldtime which is used to grant temporary invulnerability to newly spawned players (if g_spawnshieldtime is not 0), and also used internally by g_midair mode (along with g_midair_shieldtime cvar), this means that players are invulnerable for a short time after leaving the floor in midair mode, so that multishot weapons (crylink, shotgun, electro secondary) don't do damage on the second and later hits in a single frame (because their first hit cleared the onground flag) added g_spawnshieldtime cvar added g_midair_shieldtime cvar git-svn-id: svn://svn.icculus.org/nexuiz/trunk@1075 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/default.cfg | 2 ++ data/qcsrc/server/gamec/cl_client.c | 12 ++++++++++++ data/qcsrc/server/gamec/cl_player.c | 1 + data/qcsrc/server/gamec/defs.h | 5 ++++- data/qcsrc/server/gamec/g_damage.c | 7 ------- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/data/default.cfg b/data/default.cfg index c73896e3d..6dceca881 100644 --- a/data/default.cfg +++ b/data/default.cfg @@ -137,6 +137,8 @@ set g_rocketarena 0 set g_vampire 0 set g_homing_missile 0 set g_midair 0 +set g_midair_shieldtime 0.3 +set g_spawnshieldtime 0 set g_forced_respawn 0 set g_fullbrightplayers 0 set g_fullbrightitems 0 diff --git a/data/qcsrc/server/gamec/cl_client.c b/data/qcsrc/server/gamec/cl_client.c index b07941bdf..f730725d5 100644 --- a/data/qcsrc/server/gamec/cl_client.c +++ b/data/qcsrc/server/gamec/cl_client.c @@ -267,6 +267,7 @@ void PutClientInServer (void) self.effects = 0; self.health = cvar("g_balance_health_start"); self.armorvalue = cvar("g_balance_armor_start"); + self.spawnshieldtime = time + cvar("g_spawnshieldtime"); self.pauserotarmor_finished = time + 10; self.pauserothealth_finished = time + 10; self.pauseregen_finished = 0; @@ -883,6 +884,17 @@ void player_powerups (void) if (cvar("g_fullbrightplayers")) self.effects = self.effects | EF_FULLBRIGHT; + // midair gamemode: damage only while in the air + // if in midair mode, being on ground grants temporary invulnerability + // (this is so that multishot weapon don't clear the ground flag on the + // first damage in the frame, leaving the player vulnerable to the + // remaining hits in the same frame) + if (self.flags & FL_ONGROUND) + if (cvar("g_midair")) + self.spawnshieldtime = max(self.spawnshieldtime, time + cvar("g_midair_shieldtime")); + + if (time < self.spawnshieldtime) + self.effects = self.effects | (EF_ADDITIVE | EF_FULLBRIGHT); } void player_regen (void) diff --git a/data/qcsrc/server/gamec/cl_player.c b/data/qcsrc/server/gamec/cl_player.c index 091a43c89..3ce58a387 100644 --- a/data/qcsrc/server/gamec/cl_player.c +++ b/data/qcsrc/server/gamec/cl_player.c @@ -267,6 +267,7 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht TossGib (world, "models/gibs/chunk.mdl", hitloc, force * -0.2,1); if (!(self.flags & FL_GODMODE)) + if (time > self.spawnshieldtime) { self.armorvalue = self.armorvalue - save; self.health = self.health - take; diff --git a/data/qcsrc/server/gamec/defs.h b/data/qcsrc/server/gamec/defs.h index b7c35d45d..ff4049175 100644 --- a/data/qcsrc/server/gamec/defs.h +++ b/data/qcsrc/server/gamec/defs.h @@ -225,7 +225,7 @@ float GRAPHOOK_RELEASE = 21; .float extralives; .float jump_interval; // laser refire -//swamp +//swamp .float in_swamp; // bool .entity swampslug; // Uses this to release from swamp ("untouch" fix) @@ -236,3 +236,6 @@ float GRAPHOOK_RELEASE = 21; .float deaths; .float jointime; + +.float spawnshieldtime; + diff --git a/data/qcsrc/server/gamec/g_damage.c b/data/qcsrc/server/gamec/g_damage.c index 384e45214..b9b67ecf5 100644 --- a/data/qcsrc/server/gamec/g_damage.c +++ b/data/qcsrc/server/gamec/g_damage.c @@ -294,13 +294,6 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float } } - // midair gamemode: damage only while in the air - if (cvar("g_midair") - && self.classname == "player" // e.g. grenades take damage - && self.flags & FL_ONGROUND) { - damage = 0; - } - // apply strength multiplier if (attacker.items & IT_STRENGTH && !cvar("g_minstagib")) { -- 2.39.2