[nexuiz-commits] r7561 - trunk/data/qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sun Aug 30 04:46:42 EDT 2009
Author: div0
Date: 2009-08-30 04:46:42 -0400 (Sun, 30 Aug 2009)
New Revision: 7561
Modified:
trunk/data/qcsrc/server/cl_client.qc
trunk/data/qcsrc/server/g_damage.qc
Log:
add a subsystem to set players on fire (unused)
Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc 2009-08-30 08:42:42 UTC (rev 7560)
+++ trunk/data/qcsrc/server/cl_client.qc 2009-08-30 08:46:42 UTC (rev 7561)
@@ -631,6 +631,7 @@
self.punchangle = '0 0 0';
self.punchvector = '0 0 0';
self.oldvelocity = self.velocity;
+ self.fire_endtime = -1;
if(sv_loddistance1)
SetCustomizer(self, Client_customizeentityforclient, Client_uncustomizeentityforclient);
@@ -899,6 +900,7 @@
self.punchangle = '0 0 0';
self.punchvector = '0 0 0';
self.oldvelocity = self.velocity;
+ self.fire_endtime = -1;
msg_entity = self;
WRITESPECTATABLE_MSG_ONE({
@@ -1713,10 +1715,13 @@
self.modelflags &~= MF_ROCKET;
}
- self.effects &~= (EF_RED | EF_BLUE | EF_ADDITIVE | EF_FULLBRIGHT);
+ self.effects &~= (EF_RED | EF_BLUE | EF_ADDITIVE | EF_FULLBRIGHT | EF_FLAME);
if(!self.modelindex || self.deadflag) // don't apply the flags if the player is gibbed
return;
+
+ Fire_ApplyDamage(self);
+ Fire_ApplyEffect(self);
if (g_minstagib)
{
Modified: trunk/data/qcsrc/server/g_damage.qc
===================================================================
--- trunk/data/qcsrc/server/g_damage.qc 2009-08-30 08:42:42 UTC (rev 7560)
+++ trunk/data/qcsrc/server/g_damage.qc 2009-08-30 08:46:42 UTC (rev 7561)
@@ -1078,3 +1078,62 @@
return total_damage_to_creatures;
}
+
+.float fire_damagepersec;
+.float fire_endtime;
+.float fire_deathtype;
+.entity fire_owner;
+float Fire_AddDamage(entity e, entity o, float d, float t, float dt)
+{
+ float dps;
+ dps = d / t;
+ if(time >= e.fire_endtime)
+ {
+ e.fire_damagepersec = dps;
+ e.fire_endtime = time + t;
+ e.fire_deathtype = dt;
+ e.fire_owner = o;
+ return d;
+ }
+ else
+ {
+ float totaldamage, totaltime, maxdps, olddamage, oldtime;
+ oldtime = e.fire_endtime - time;
+ olddamage = e.fire_damagepersec * oldtime;
+ if(t > oldtime || d > olddamage || dps > e.fire_damagepersec)
+ {
+ maxdps = max(dps, e.fire_damagepersec);
+ totaltime = max(oldtime, t);
+ totaldamage = max(maxdps * totaltime, olddamage + d);
+ e.fire_damagepersec = totaldamage / totaltime;
+ e.fire_endtime = time + totaltime;
+ e.fire_deathtype = dt;
+ e.fire_owner = e;
+ return totaldamage - olddamage; // can never be negative
+ }
+ else
+ return 0;
+ }
+}
+void Fire_ApplyDamage(entity e)
+{
+ float t, d;
+
+ // water and slime stop fire
+ if(e.waterlevel)
+ if(e.watertype != CONTENT_LAVA)
+ e.fire_endtime = 0;
+
+ if(time >= e.fire_endtime)
+ return;
+ t = min(frametime, e.fire_endtime - time);
+ d = e.fire_damagepersec * t;
+ Damage(e, e, e.fire_owner, d, e.fire_deathtype, e.origin, '0 0 0');
+}
+void Fire_ApplyEffect(entity e)
+{
+ if(time < e.fire_endtime)
+ e.effects |= EF_FLAME;
+ else
+ e.effects &~= EF_FLAME;
+}
More information about the nexuiz-commits
mailing list