]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Distribute particles between damage effects on the same player. eg: Having one damage...
authorMircea Kitsune <sonichedgehog_hyperblast00@yahoo.com>
Thu, 5 Jan 2012 15:11:19 +0000 (17:11 +0200)
committerMircea Kitsune <sonichedgehog_hyperblast00@yahoo.com>
Thu, 5 Jan 2012 15:11:19 +0000 (17:11 +0200)
defaultXonotic.cfg
qcsrc/client/autocvars.qh
qcsrc/client/damage.qc

index c1bdf867e57ec3444afea45fb1525ec4df370e14..bc001941cd09c6967765d6a29fac24e1218070f1 100644 (file)
@@ -322,8 +322,9 @@ set g_telefrags_avoid 1 "when teleporters have a random destination, avoid telep
 set g_teleport_maxspeed 0 "maximum speed that a player can keep when going through a teleporter (if a misc_teleporter_dest also has a cap the smallest one of these will be used), 0 = don't limit, -1 = keep no speed"
 
 set cl_damageeffect 2 "enable weapon damage effects. 1 enables effects on players, 2 on players and objects"
-set cl_damageeffect_ticrate 0.05 "particles spawn rate"
-set cl_damageeffect_limit 3 "how many damages to show on a player at once (objects are limited to one effect)"
+set cl_damageeffect_ticrate 0.1 "particles spawn rate"
+set cl_damageeffect_limit 5 "how many damages to allow on a player at once (objects are limited to one)"
+set cl_damageeffect_distribute 1 "divide particle intensity if multiple damages are present on a player"
 set cl_damageeffect_lifetime 0.1 "how much a damage effect lasts, multiplied by damage amount"
 set cl_damageeffect_lifetime_min 3 "minimum lifetime a damage effect may have"
 set cl_damageeffect_lifetime_max 6 "maximum lifetime a damage effect may have"
index 0e3d171bf9eb5990cfc0c79a6b6b837f5261ea33..fd5e8f58844d2c1f8dbba8ee6569e46d628a5850 100644 (file)
@@ -376,6 +376,7 @@ string autocvar__togglezoom;
 float autocvar_cl_damageeffect;
 float autocvar_cl_damageeffect_ticrate;
 float autocvar_cl_damageeffect_limit;
+float autocvar_cl_damageeffect_distribute;
 float autocvar_cl_damageeffect_lifetime;
 float autocvar_cl_damageeffect_lifetime_min;
 float autocvar_cl_damageeffect_lifetime_max;
index b83cd2a5c34c6cabb8d18267740cedc046c18b00..8d967d7a0f9794a63a5c87119f5eb572cd33e1a0 100644 (file)
@@ -238,15 +238,22 @@ void DamageInfo_Precache()
                (get_weaponinfo(i)).weapon_func(WR_PRECACHE);
 }
 
+.float total_damages;
 void DamageEffect_Think()
 {
+       // if particle distribution is enabled, decrease ticrate by total number of damages
+       if(autocvar_cl_damageeffect_distribute)
+               self.nextthink = time + autocvar_cl_damageeffect_ticrate * self.owner.total_damages;
+       else
+               self.nextthink = time + autocvar_cl_damageeffect_ticrate;
+
        if(time >= self.cnt || self.owner == world || self.owner.model == "" || !self.owner.drawmask)
        {
                // time is up or the player got gibbed / disconnected
+               self.owner.total_damages -= 1;
                remove(self);
                return;
        }
-       self.nextthink = time + autocvar_cl_damageeffect_ticrate;
        if(self.owner.entnum == player_localentnum && !autocvar_chase_active)
                return; // if we aren't using a third person view, hide our own effects
 
@@ -260,7 +267,7 @@ void DamageEffect(vector hitorg, float dmg, float type, float specnum)
 {
        // particle effects for players and objects damaged by weapons (eg: flames coming out of victims shot with rockets)
 
-       float life, i;
+       float life;
        string specstr, effectnum;
        entity e;
 
@@ -270,17 +277,14 @@ void DamageEffect(vector hitorg, float dmg, float type, float specnum)
                return;
 
        // return if we reached our damage effect limit
-       for(e = world; (e = find(e, classname, "damageeffect")); )
-               if(e.owner.entnum == self.entnum)
-                       i += 1;
        if(self.isplayermodel)
        {
-               if(autocvar_cl_damageeffect < 1 || i >= autocvar_cl_damageeffect_limit)
+               if(autocvar_cl_damageeffect < 1 || self.total_damages >= autocvar_cl_damageeffect_limit)
                        return; // allow multiple damage effects on players
        }
        else
        {
-               if(autocvar_cl_damageeffect < 2 || i)
+               if(autocvar_cl_damageeffect < 2 || self.total_damages)
                        return; // allow a single damage effect on objects
        }
 
@@ -328,4 +332,5 @@ void DamageEffect(vector hitorg, float dmg, float type, float specnum)
        e.team = particleeffectnum(effectnum);
        e.think = DamageEffect_Think;
        e.nextthink = time;
+       self.total_damages += 1;
 }