]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Show a visual nade timer, hide nade trail from owner and spectators (fixes 1st person...
authorMario <mario.mario@y7mail.com>
Thu, 12 Jun 2014 09:53:15 +0000 (19:53 +1000)
committerMario <mario.mario@y7mail.com>
Thu, 12 Jun 2014 09:53:15 +0000 (19:53 +1000)
mutators.cfg
qcsrc/client/View.qc
qcsrc/client/autocvars.qh
qcsrc/common/constants.qh
qcsrc/server/mutators/mutator_nades.qc
qcsrc/server/mutators/mutator_nades.qh

index d3a979e6b7bb41b35f6d4c841b3db6a6d5a5118b..f75113e37ffc04d4bbc758e94d236f2f38992574 100644 (file)
@@ -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"
 
index e7a95c0a65cb2be91dce561dfc92893900bed722..d4f7c85846a964fe4c0df24f8bdd32fb7575cf53 100644 (file)
@@ -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);
index 67a03259382feba3d5e14adf53087c834eac6491..17813e3f2e33b2f490b32d92d179e2254919b40a 100644 (file)
@@ -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;
index 437afd85465ecab5ca056e3646a70f9a23448119..c0b56652fac72ec854f45ec947648fef03988d59 100644 (file)
@@ -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;
 
index 03a9e90a2d7ea02eb3050e1d8c6e731e99cb19b9..6d4759b01b7b913e2216479b51c079c004ea10b2 100644 (file)
@@ -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);
index 90c3296bdbf8a9e828d5c158ce182010881d50c7..c6c30c6d53210dfee9143e12646831e7b727f147 100644 (file)
@@ -1,5 +1,6 @@
 .entity nade;
 .entity fake_nade;
+.float nade_timer;
 .float nade_refire;
 .float bonus_nades;
 .float nade_special_time;