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