r5160 - in trunk/data: . qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Wed Dec 3 13:40:27 EST 2008


Author: div0
Date: 2008-12-03 13:40:25 -0500 (Wed, 03 Dec 2008)
New Revision: 5160

Modified:
   trunk/data/qcsrc/server/g_damage.qc
   trunk/data/qcsrc/server/w_hook.qc
   trunk/data/weapons.cfg
Log:
hook: apply the hook bomb damage over time (FIXME check if this may cause too much server load)


Modified: trunk/data/qcsrc/server/g_damage.qc
===================================================================
--- trunk/data/qcsrc/server/g_damage.qc	2008-12-03 16:06:17 UTC (rev 5159)
+++ trunk/data/qcsrc/server/g_damage.qc	2008-12-03 18:40:25 UTC (rev 5160)
@@ -520,7 +520,7 @@
 					RemoveGrapplingHook(targ); // STOP THAT, you parasite!
 
 	// special rule: gravity bomb does not hit team mates (other than for disconnecting the hook)
-	if(DEATH_WEAPONOF(deathtype) == WEP_HOOK)
+	if(DEATH_ISWEAPON(deathtype, WEP_HOOK))
 	{
 		if(targ.classname == "player")
 			if not(IsDifferentTeam(targ, attacker))

Modified: trunk/data/qcsrc/server/w_hook.qc
===================================================================
--- trunk/data/qcsrc/server/w_hook.qc	2008-12-03 16:06:17 UTC (rev 5159)
+++ trunk/data/qcsrc/server/w_hook.qc	2008-12-03 18:40:25 UTC (rev 5160)
@@ -1,3 +1,29 @@
+.float dmg;
+.float dmg_edge;
+.float dmg_radius;
+.float dmg_force;
+.float dmg_power;
+.float dmg_duration;
+.float dmg_last;
+
+void W_Hook_ExplodeThink (void)
+{
+	float dt, dmg_remaining, dmg_remaining_next, f;
+
+	dt = time - self.teleport_time;
+	dmg_remaining_next = pow(bound(0, 1 - dt / self.dmg_duration, 1), self.dmg_power);
+
+	f = self.dmg_last - dmg_remaining_next;
+	self.dmg_last = dmg_remaining_next;
+
+	RadiusDamage (self, self.owner, self.dmg * f, self.dmg_edge * f, self.dmg_radius, self.owner, self.dmg_force * f, self.projectiledeathtype, world);
+
+	if(dt < self.dmg_duration)
+		self.nextthink = time + 0.05; // soon
+	else
+		remove(self);
+}
+
 void W_Hook_Explode2 (void)
 {
 	vector org2;
@@ -7,9 +33,18 @@
 	sound (self, CHAN_PROJECTILE, "weapons/hookbomb_impact.wav", VOL_BASE, ATTN_NORM);
 
 	self.event_damage = SUB_Null;
-	RadiusDamage (self, self.owner, cvar("g_balance_hook_secondary_damage"), cvar("g_balance_hook_secondary_edgedamage"), cvar("g_balance_hook_secondary_radius"), self.owner, cvar("g_balance_hook_secondary_force"), self.projectiledeathtype, other);
+	self.touch = SUB_Null;
 
-	remove(self);
+	self.think = W_Hook_ExplodeThink;
+	self.nextthink = time;
+	self.dmg = cvar("g_balance_hook_secondary_damage");
+	self.dmg_edge = cvar("g_balance_hook_secondary_edgedamage");
+	self.dmg_radius = cvar("g_balance_hook_secondary_radius");
+	self.dmg_force = cvar("g_balance_hook_secondary_force");
+	self.dmg_power = cvar("g_balance_hook_secondary_power");
+	self.dmg_duration = cvar("g_balance_hook_secondary_duration");
+	self.teleport_time = time;
+	self.dmg_last = 1;
 }
 
 void W_Hook_Touch2 (void)

Modified: trunk/data/weapons.cfg
===================================================================
--- trunk/data/weapons.cfg	2008-12-03 16:06:17 UTC (rev 5159)
+++ trunk/data/weapons.cfg	2008-12-03 18:40:25 UTC (rev 5160)
@@ -244,6 +244,8 @@
 set g_balance_hook_secondary_gravity 5 // fast falling
 set g_balance_hook_secondary_refire 3 // don't drop too many bombs...
 set g_balance_hook_secondary_animtime 0.3 // good shoot anim
+set g_balance_hook_secondary_power 4 // effect behaves like a square function
+set g_balance_hook_secondary_duration 3 // effect runs for three seconds
 
 // HLAC 
 set g_balance_hlac_primary_spread_min 0.01




More information about the nexuiz-commits mailing list