]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Get damage effects working without using a separate entity, but taking advantage...
authorMircea Kitsune <sonichedgehog_hyperblast00@yahoo.com>
Wed, 4 Jan 2012 00:06:12 +0000 (02:06 +0200)
committerMircea Kitsune <sonichedgehog_hyperblast00@yahoo.com>
Wed, 4 Jan 2012 00:06:12 +0000 (02:06 +0200)
qcsrc/client/Main.qc
qcsrc/client/damage.qc
qcsrc/common/constants.qh
qcsrc/server/g_damage.qc
qcsrc/server/g_violence.qc

index b2a21706a0861795444631c5f415c175900811a7..fd8afe117c49d2354e0768f3406eabd67b49fdf0 100644 (file)
@@ -1049,7 +1049,6 @@ void CSQC_Ent_Update(float bIsNewEntity)
                case ENT_CLIENT_ACCURACY: Ent_ReadAccuracy(); break;
                case ENT_CLIENT_AUXILIARYXHAIR: Net_AuXair2(bIsNewEntity); break;
                case ENT_CLIENT_TURRET: ent_turret(); break; 
-               case ENT_CLIENT_DAMAGEEFFECT: Ent_DamageEffect(); break;
                case ENT_CLIENT_MODEL: CSQCModel_Read(bIsNewEntity); break; 
                default:
                        //error(strcat(_("unknown entity type in CSQC_Ent_Update: %d\n"), self.enttype));
index fa930e3231ab7a156753465d37abf216a6740db3..4828a5b43ec948f61291d81d15fda3c8acc2db69 100644 (file)
@@ -1,6 +1,7 @@
+void DamageEffect(float dmg, float type, float specnum1, float entnumber);
 void Ent_DamageInfo(float isNew)
 {
-       float dmg, rad, edge, thisdmg, forcemul;
+       float dmg, rad, edge, thisdmg, forcemul, species;
        vector force, thisforce;
        entity oldself;
 
@@ -18,6 +19,7 @@ void Ent_DamageInfo(float isNew)
        rad = ReadByte();
        edge = ReadByte();
        force = decompressShortVector(ReadShort());
+       species = ReadByte();
 
        if not(isNew)
                return;
@@ -66,6 +68,8 @@ void Ent_DamageInfo(float isNew)
 
                if(self.event_damage)
                        self.event_damage(thisdmg, w_deathtype, w_org, thisforce);
+
+               DamageEffect(dmg, w_deathtype, species, self.entnum);
        }
 
        self = oldself;
@@ -234,7 +238,7 @@ void DamageInfo_Precache()
 .float dmgpartnum, dmgtime;
 .float lifetime;
 
-void Ent_DamageEffect_Think()
+void DamageEffect_Think()
 {
        self.nextthink = time;
 
@@ -280,18 +284,12 @@ void Ent_DamageEffect_Think()
        self.dmgtime = time + autocvar_cl_damageeffect_player;
 }
 
-void Ent_DamageEffect()
+void DamageEffect(float dmg, float type, float specnum1, float entnumber)
 {
-       float dmg, type, specnum1, specnum2, entnumber, life;
-       vector org;
+       float specnum2, life;
        string specstr, effectnum;
        entity e;
 
-       dmg = ReadByte(); // damage amount
-       type = ReadByte(); // damage weapon
-       specnum1 = ReadByte(); // player species
-       entnumber = ReadByte(); // player entnum
-
        if(!autocvar_cl_damageeffect_player && !autocvar_cl_damageeffect_gibs)
                return;
        if(autocvar_cl_gentle || autocvar_cl_gentle_damage)
@@ -330,6 +328,6 @@ void Ent_DamageEffect()
        e.team = entnumber - 1;
        e.dmgpartnum = particleeffectnum(effectnum);
        e.lifetime = time + life;
-       e.think = Ent_DamageEffect_Think;
+       e.think = DamageEffect_Think;
        e.nextthink = time;
 }
index cf8ed5215ba5ca11277edb1d3a8fd5686202c020..7532b3f50b0a85a25dab66ae98a40ccc79dff39c 100644 (file)
@@ -95,8 +95,7 @@ const float ENT_CLIENT_GAUNTLET = 29;
 const float ENT_CLIENT_ACCURACY = 30;
 const float ENT_CLIENT_SHOWNAMES = 31;
 const float ENT_CLIENT_WARPZONE_TELEPORTED = 32;
-const float ENT_CLIENT_DAMAGEEFFECT = 33;
-const float ENT_CLIENT_MODEL = 34;
+const float ENT_CLIENT_MODEL = 33;
 
 const float ENT_CLIENT_TURRET = 40;
 const float ENT_CLIENT_AUXILIARYXHAIR = 50;
index 2e3296fbaf335e4526af59eedd9fde26c8cf717d..16bde33c2b865aeec7e14cbd0240576d30bdd103 100644 (file)
@@ -14,6 +14,7 @@ float Damage_DamageInfo_SendEntity(entity to, float sf)
        WriteByte(MSG_ENTITY, bound(0, self.dmg_radius, 255));
        WriteByte(MSG_ENTITY, bound(1, self.dmg_edge, 255));
        WriteShort(MSG_ENTITY, self.oldorigin_x);
+       WriteByte(MSG_ENTITY, self.species);
        return TRUE;
 }
 
@@ -527,10 +528,6 @@ entity damage_attacker;
 
 void Damage (entity targ, entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
 {
-       // if the target is a player or dead body, activate damage effects
-       if(targ.classname == "player" || targ.classname == "body")
-               Violence_DamageEffect(targ, damage, DEATH_WEAPONOF(deathtype));
-
        float mirrordamage;
        float mirrorforce;
        float teamdamage0;
index a006677bbe77e0b88d4d2f7724ae67a54816f766..40fb19018673255269b2de4500090548cfdadb55 100644 (file)
@@ -45,35 +45,3 @@ void Violence_GibSplash(entity source, float type, float amount, entity attacker
 {
        Violence_GibSplash_At(source.origin + source.view_ofs, source.velocity, type, amount, source, attacker);
 }
-
-// damage effect
-
-float Violence_DamageEffect_SendEntity(entity to, float sf)
-{
-       WriteByte(MSG_ENTITY, ENT_CLIENT_DAMAGEEFFECT);
-       WriteByte(MSG_ENTITY, self.cnt); // damage amount
-       WriteByte(MSG_ENTITY, self.weapon); // damage weapon
-       WriteByte(MSG_ENTITY, self.state); // player species
-       WriteByte(MSG_ENTITY, self.team); // player entnum
-       return TRUE;
-}
-
-void Violence_DamageEffect(entity pl, float damage, float type)
-{
-       if(sv_gentle || !type)
-               return; // return if gentle mode is enabled or the damage was not caused by a weapon
-
-       entity e;
-       e = spawn();
-       e.cnt = damage;
-       e.weapon = type;
-       e.state |= 8 * pl.species; // gib type, ranges from 0 to 15
-
-       // if this is a copied dead body, send the num of its player instead
-       if(pl.classname == "body")
-               e.team = num_for_edict(pl.owner);
-       else
-               e.team = num_for_edict(pl);
-
-       Net_LinkEntity(e, FALSE, 0.2, Violence_DamageEffect_SendEntity);
-}