[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