From cf45705db9fb94a5348f9125df4f42cab3d85de2 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 12 Jun 2014 19:53:15 +1000 Subject: [PATCH] Show a visual nade timer, hide nade trail from owner and spectators (fixes 1st person trail covering view, but also hides it in 3rd person mode), fix nade pushing owner back when tossed --- mutators.cfg | 1 + qcsrc/client/View.qc | 6 ++++++ qcsrc/client/autocvars.qh | 1 + qcsrc/common/constants.qh | 2 ++ qcsrc/server/mutators/mutator_nades.qc | 17 +++++++++++++---- qcsrc/server/mutators/mutator_nades.qh | 1 + 6 files changed, 24 insertions(+), 4 deletions(-) diff --git a/mutators.cfg b/mutators.cfg index d3a979e6b..f75113e37 100644 --- a/mutators.cfg +++ b/mutators.cfg @@ -155,6 +155,7 @@ set g_nades_nade_force 650 set g_nades_nade_newton_style 0 set g_nades_nade_type 1 "Type of the off-hand grenade. 1:normal 2:napalm 3:ice 4:translocate 5:spawn 6:heal 7:pokenade" +seta cl_nade_timer 1 "show a visual timer for nades, 1 = only circle, 2 = circle with text" seta cl_nade_type 3 seta cl_pokenade_type "zombie" diff --git a/qcsrc/client/View.qc b/qcsrc/client/View.qc index e7a95c0a6..d4f7c8584 100644 --- a/qcsrc/client/View.qc +++ b/qcsrc/client/View.qc @@ -1159,6 +1159,12 @@ void CSQC_UpdateView(float w, float h) drawfill('0 0 0', eX * vid_conwidth + eY * vid_conheight, ((getstatf(STAT_REVIVE_PROGRESS)) ? ('0.25 0.90 1' + ('1 0 0' * getstatf(STAT_REVIVE_PROGRESS)) + ('0 1 1' * getstatf(STAT_REVIVE_PROGRESS) * -1)) : '0.25 0.90 1'), autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE); else if (getstatf(STAT_HEALING_ORB)>time) drawfill('0 0 0', eX * vid_conwidth + eY * vid_conheight, Nade_Color(NADE_TYPE_HEAL), autocvar_hud_colorflash_alpha*getstatf(STAT_HEALING_ORB_ALPHA), DRAWFLAG_ADDITIVE); + if(!intermission) + if(getstatf(STAT_NADE_TIMER) && autocvar_cl_nade_timer) // give nade top priority, as it's a matter of life and death + { + DrawCircleClippedPic(eX * 0.5 * vid_conwidth + eY * 0.6 * vid_conheight, 0.1 * vid_conheight, "gfx/crosshair_ring.tga", getstatf(STAT_NADE_TIMER), '0.25 0.90 1', autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE); + drawstring_aspect(eY * 0.64 * vid_conheight, ((autocvar_cl_nade_timer == 2) ? _("Nade timer") : ""), eX * vid_conwidth + eY * 0.025 * vid_conheight, '1 1 1', 1, DRAWFLAG_NORMAL); + } else if(getstatf(STAT_REVIVE_PROGRESS)) { DrawCircleClippedPic(eX * 0.5 * vid_conwidth + eY * 0.6 * vid_conheight, 0.1 * vid_conheight, "gfx/crosshair_ring.tga", getstatf(STAT_REVIVE_PROGRESS), '0.25 0.90 1', autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE); diff --git a/qcsrc/client/autocvars.qh b/qcsrc/client/autocvars.qh index 67a032593..17813e3f2 100644 --- a/qcsrc/client/autocvars.qh +++ b/qcsrc/client/autocvars.qh @@ -440,3 +440,4 @@ string autocvar__cl_playermodel; float autocvar_cl_deathglow; float autocvar_developer_csqcentities; float autocvar_g_jetpack_attenuation; +float autocvar_cl_nade_timer; diff --git a/qcsrc/common/constants.qh b/qcsrc/common/constants.qh index 437afd854..c0b56652f 100644 --- a/qcsrc/common/constants.qh +++ b/qcsrc/common/constants.qh @@ -175,6 +175,8 @@ const float STAT_VEHICLESTAT_RELOAD1 = 64; const float STAT_VEHICLESTAT_AMMO2 = 65; const float STAT_VEHICLESTAT_RELOAD2 = 66; +const float STAT_NADE_TIMER = 69; + const float STAT_SECRETS_TOTAL = 70; const float STAT_SECRETS_FOUND = 71; diff --git a/qcsrc/server/mutators/mutator_nades.qc b/qcsrc/server/mutators/mutator_nades.qc index 03a9e90a2..6d4759b01 100644 --- a/qcsrc/server/mutators/mutator_nades.qc +++ b/qcsrc/server/mutators/mutator_nades.qc @@ -669,7 +669,7 @@ void toss_nade(entity e, vector _velocity, float _time) _nade.flags = FL_PROJECTILE; _nade.projectiledeathtype = DEATH_NADE; _nade.toss_time = time; - _nade.solid = ((_nade.nade_type == NADE_TYPE_TRANSLOCATE) ? SOLID_CORPSE : SOLID_BBOX); + _nade.solid = SOLID_CORPSE; //((_nade.nade_type == NADE_TYPE_TRANSLOCATE) ? SOLID_CORPSE : SOLID_BBOX); nade_spawn(_nade); @@ -680,6 +680,7 @@ void toss_nade(entity e, vector _velocity, float _time) } e.nade_refire = time + autocvar_g_nades_nade_refire; + e.nade_timer = 0; } void nades_GiveBonus(entity player, float score) @@ -716,7 +717,8 @@ float nade_customize() { // somewhat hide the model, but keep the glow //self.effects = 0; - self.alpha = -1; + //self.alpha = -1; + return FALSE; // or not } else { @@ -842,6 +844,7 @@ void nades_Clear(entity player) remove(player.fake_nade); player.nade = player.fake_nade = world; + player.nade_timer = 0; } MUTATOR_HOOKFUNCTION(nades_CheckThrow) @@ -870,6 +873,8 @@ MUTATOR_HOOKFUNCTION(nades_PlayerPreThink) if(self.nade) { + self.nade_timer = bound(0, (time - self.nade.lifetime) / autocvar_g_nades_nade_lifetime, 1); + //print(sprintf("%d %d\n", self.nade_timer, time - self.nade.lifetime)); makevectors(self.angles); self.nade.velocity = self.velocity; @@ -997,6 +1002,8 @@ MUTATOR_HOOKFUNCTION(nades_PlayerSpawn) if(autocvar_g_nades_bonus_client_select) self.nade_type = self.cvar_cl_nade_type; + self.nade_timer = 0; + if(self.nade_spawnloc) { setorigin(self, self.nade_spawnloc.origin); @@ -1085,6 +1092,7 @@ MUTATOR_HOOKFUNCTION(nades_RemovePlayer) MUTATOR_HOOKFUNCTION(nades_SpectateCopy) { + self.nade_timer = other.nade_timer; self.nade_type = other.nade_type; self.pokenade_type = other.pokenade_type; self.bonus_nades = other.bonus_nades; @@ -1116,6 +1124,7 @@ MUTATOR_HOOKFUNCTION(nades_BuildMutatorsPrettyString) void nades_Initialize() { + addstat(STAT_NADE_TIMER, AS_FLOAT, nade_timer); addstat(STAT_NADE_BONUS, AS_FLOAT, bonus_nades); addstat(STAT_NADE_BONUS_TYPE, AS_INT, nade_type); addstat(STAT_NADE_BONUS_SCORE, AS_FLOAT, bonus_nade_score); @@ -1142,9 +1151,9 @@ MUTATOR_DEFINITION(mutator_nades) MUTATOR_HOOK(ForbidThrowCurrentWeapon, nades_CheckThrow, CBC_ORDER_LAST); MUTATOR_HOOK(VehicleEnter, nades_VehicleEnter, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerPreThink, nades_PlayerPreThink, CBC_ORDER_ANY); - MUTATOR_HOOK(PlayerSpawn, nades_PlayerSpawn, CBC_ORDER_LAST); + MUTATOR_HOOK(PlayerSpawn, nades_PlayerSpawn, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerDies, nades_PlayerDies, CBC_ORDER_LAST); - MUTATOR_HOOK(PlayerDamage_Calculate, nades_PlayerDamage, CBC_ORDER_FIRST); + MUTATOR_HOOK(PlayerDamage_Calculate, nades_PlayerDamage, CBC_ORDER_ANY); MUTATOR_HOOK(MonsterDies, nades_MonsterDies, CBC_ORDER_ANY); MUTATOR_HOOK(MakePlayerObserver, nades_RemovePlayer, CBC_ORDER_ANY); MUTATOR_HOOK(ClientDisconnect, nades_RemovePlayer, CBC_ORDER_ANY); diff --git a/qcsrc/server/mutators/mutator_nades.qh b/qcsrc/server/mutators/mutator_nades.qh index 90c3296bd..c6c30c6d5 100644 --- a/qcsrc/server/mutators/mutator_nades.qh +++ b/qcsrc/server/mutators/mutator_nades.qh @@ -1,5 +1,6 @@ .entity nade; .entity fake_nade; +.float nade_timer; .float nade_refire; .float bonus_nades; .float nade_special_time; -- 2.39.2