From 477b19e6f32febc9739d96bdb40157ff04525d78 Mon Sep 17 00:00:00 2001 From: div0 Date: Thu, 24 Sep 2009 11:12:42 +0000 Subject: [PATCH] distance-based nex damage falloff option (not used in any config yet) git-svn-id: svn://svn.icculus.org/nexuiz/trunk@7890 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/balance.cfg | 5 ++++- data/balance25.cfg | 5 ++++- data/balanceHavoc.cfg | 5 ++++- data/qcsrc/server/constants.qh | 2 +- data/qcsrc/server/g_triggers.qc | 6 +++--- data/qcsrc/server/miscfunctions.qc | 10 ++++++++++ data/qcsrc/server/w_common.qc | 9 +++++---- data/qcsrc/server/w_minstanex.qc | 2 +- data/qcsrc/server/w_nex.qc | 2 +- 9 files changed, 33 insertions(+), 13 deletions(-) diff --git a/data/balance.cfg b/data/balance.cfg index 9b4b8cbc5..a71dcae4d 100644 --- a/data/balance.cfg +++ b/data/balance.cfg @@ -3,7 +3,7 @@ // // And... don't forget to edit the other balance*.cfg too. -set cvar_check_balance 3ff761c8f23b7181d7038c4d05b527aa +set cvar_check_balance df069a840b96084fe7ea4de2efb12ae5 // {{{ weapon replacement // NOTE: this only replaces weapons on the map @@ -363,6 +363,9 @@ set g_balance_nex_force 0 set g_balance_nex_refire 1 set g_balance_nex_animtime 0.3 set g_balance_nex_ammo 5 +set g_balance_nex_damagefalloff_mindist 0 +set g_balance_nex_damagefalloff_maxdist 0 +set g_balance_nex_damagefalloff_halflife 0 // }}} // {{{ minstanex set g_balance_minstanex_refire 1 diff --git a/data/balance25.cfg b/data/balance25.cfg index aa897d507..f261096e1 100644 --- a/data/balance25.cfg +++ b/data/balance25.cfg @@ -3,7 +3,7 @@ // // And... don't forget to edit the other balance*.cfg too. -set cvar_check_balance 3ff761c8f23b7181d7038c4d05b527aa +set cvar_check_balance df069a840b96084fe7ea4de2efb12ae5 // {{{ weapon replacement // NOTE: this only replaces weapons on the map @@ -363,6 +363,9 @@ set g_balance_nex_force 600 set g_balance_nex_refire 1.5 set g_balance_nex_animtime 0.3 set g_balance_nex_ammo 5 +set g_balance_nex_damagefalloff_mindist 0 +set g_balance_nex_damagefalloff_maxdist 0 +set g_balance_nex_damagefalloff_halflife 0 // }}} // {{{ minstanex set g_balance_minstanex_refire 1 diff --git a/data/balanceHavoc.cfg b/data/balanceHavoc.cfg index 682ecbd1b..c07e6d717 100644 --- a/data/balanceHavoc.cfg +++ b/data/balanceHavoc.cfg @@ -3,7 +3,7 @@ // // And... don't forget to edit the other balance*.cfg too. -set cvar_check_balance 3ff761c8f23b7181d7038c4d05b527aa +set cvar_check_balance df069a840b96084fe7ea4de2efb12ae5 // {{{ weapon replacement // NOTE: this only replaces weapons on the map @@ -363,6 +363,9 @@ set g_balance_nex_force 0 set g_balance_nex_refire 0.7 set g_balance_nex_animtime 0.3 set g_balance_nex_ammo 5 +set g_balance_nex_damagefalloff_mindist 0 +set g_balance_nex_damagefalloff_maxdist 0 +set g_balance_nex_damagefalloff_halflife 0 // }}} // {{{ minstanex set g_balance_minstanex_refire 1 diff --git a/data/qcsrc/server/constants.qh b/data/qcsrc/server/constants.qh index 69a795195..cd0b12781 100644 --- a/data/qcsrc/server/constants.qh +++ b/data/qcsrc/server/constants.qh @@ -1,5 +1,5 @@ string CVAR_CHECK_DEFAULT = "a806b2ec1a306ab62c20ebb3dd3fb5d2"; -string CVAR_CHECK_BALANCE = "3ff761c8f23b7181d7038c4d05b527aa"; +string CVAR_CHECK_BALANCE = "df069a840b96084fe7ea4de2efb12ae5"; float FALSE = 0; float TRUE = 1; diff --git a/data/qcsrc/server/g_triggers.qc b/data/qcsrc/server/g_triggers.qc index 052bc9bc0..70b5ad382 100644 --- a/data/qcsrc/server/g_triggers.qc +++ b/data/qcsrc/server/g_triggers.qc @@ -838,7 +838,7 @@ void spawnfunc_func_snow() }; -void FireRailgunBullet (vector start, vector end, float bdamage, float bforce, float deathtype); +void FireRailgunBullet (vector start, vector end, float bdamage, float bforce, float mindist, float maxdist, float halflifedist, float deathtype); .float modelscale; void misc_laser_aim() @@ -914,9 +914,9 @@ void misc_laser_think() if(self.dmg) { if(self.dmg < 0) - FireRailgunBullet(self.origin, o, 100000, 0, DEATH_HURTTRIGGER); + FireRailgunBullet(self.origin, o, 100000, 0, 0, 0, 0, DEATH_HURTTRIGGER); else - FireRailgunBullet(self.origin, o, self.dmg * frametime, 0, DEATH_HURTTRIGGER); + FireRailgunBullet(self.origin, o, self.dmg * frametime, 0, 0, 0, 0, DEATH_HURTTRIGGER); } if(self.enemy.target != "") // DETECTOR laser diff --git a/data/qcsrc/server/miscfunctions.qc b/data/qcsrc/server/miscfunctions.qc index cf2cf8c75..f7f9426cf 100644 --- a/data/qcsrc/server/miscfunctions.qc +++ b/data/qcsrc/server/miscfunctions.qc @@ -2637,3 +2637,13 @@ void randombit_test(float bits, float iter) --iter; } } + +float ExponentialFalloff(float mindist, float maxdist, float halflifedist, float d) +{ + if(halflifedist > 0) + return pow(0.5, (bound(mindist, d, maxdist) - mindist) / halflifedist); + else if(halflifedist < 0) + return pow(0.5, (maxdist - bound(mindist, d, maxdist)) / halflifedist); + else + return 1; +} diff --git a/data/qcsrc/server/w_common.qc b/data/qcsrc/server/w_common.qc index c45bc01d7..6a7e03be8 100644 --- a/data/qcsrc/server/w_common.qc +++ b/data/qcsrc/server/w_common.qc @@ -24,11 +24,10 @@ void W_GiveWeapon (entity e, float wep, string name) sprint (other, "\n"); } - self = oldself; } -void FireRailgunBullet (vector start, vector end, float bdamage, float bforce, float deathtype) +void FireRailgunBullet (vector start, vector end, float bdamage, float bforce, float mindist, float maxdist, float halflifedist, float deathtype) { local vector hitloc, force, endpoint, dir; local entity ent, endent; @@ -138,9 +137,11 @@ void FireRailgunBullet (vector start, vector end, float bdamage, float bforce, f if(ent.team == self.team) did_hit = 0; + f = ExponentialFalloff(mindist, maxdist, halflifedist, (msg_entity.origin - start) * dir); + // apply the damage - if (ent.takedamage || ent.classname == "case") - Damage (ent, self, self, bdamage, deathtype, hitloc, force); + if (ent.takedamage) + Damage (ent, self, self, bdamage * f, deathtype, hitloc, force * f); // create a small explosion to throw gibs around (if applicable) //setorigin (explosion, hitloc); diff --git a/data/qcsrc/server/w_minstanex.qc b/data/qcsrc/server/w_minstanex.qc index 2d0929f1d..8c6e9140e 100644 --- a/data/qcsrc/server/w_minstanex.qc +++ b/data/qcsrc/server/w_minstanex.qc @@ -10,7 +10,7 @@ void W_MinstaNex_Attack (void) yoda = 0; damage_goodhits = 0; headshot = 0; - FireRailgunBullet (w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, 10000, 800, WEP_MINSTANEX); + FireRailgunBullet (w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, 10000, 800, 0, 0, 0, WEP_MINSTANEX); if(g_minstagib) { diff --git a/data/qcsrc/server/w_nex.qc b/data/qcsrc/server/w_nex.qc index 285a58cc2..34e2d8221 100644 --- a/data/qcsrc/server/w_nex.qc +++ b/data/qcsrc/server/w_nex.qc @@ -18,7 +18,7 @@ void W_Nex_Attack (void) W_SetupShot (self, TRUE, 5, "weapons/nexfire.wav", cvar("g_balance_nex_damage")); yoda = 0; - FireRailgunBullet (w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, cvar("g_balance_nex_damage"), cvar("g_balance_nex_force"), WEP_NEX); + FireRailgunBullet (w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, cvar("g_balance_nex_damage"), cvar("g_balance_nex_force"), cvar("g_balance_nex_damagefalloff_mindist"), cvar("g_balance_nex_damagefalloff_maxdist"), cvar("g_balance_nex_damagefalloff_halflife"), WEP_NEX); if(yoda && flying) announce(self, "announcer/male/yoda.wav"); -- 2.39.2