From: Martin Taibr Date: Mon, 21 Aug 2017 20:44:59 +0000 (+0200) Subject: WIP damagepush scaling X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=8b45801bcf76cbe080360bf849c13a9437f4901f;p=xonotic%2Fxonotic-data.pk3dir.git WIP damagepush scaling --- diff --git a/balance-overkill.cfg b/balance-overkill.cfg index fc99616f9..8b66e4b4f 100644 --- a/balance-overkill.cfg +++ b/balance-overkill.cfg @@ -178,6 +178,10 @@ set g_balance_falldamage_minspeed 900 set g_balance_falldamage_factor 0.20 set g_balance_falldamage_maxdamage 40 set g_balance_damagepush_speedfactor 2.5 +set g_balance_damagepush_scaling_speed_min 700 +set g_balance_damagepush_scaling_speed_max 1300 +set g_balance_damagepush_scaling_factor_slowest 1 +set g_balance_damagepush_scaling_factor_fastest 1 set g_balance_contents_damagerate 0.2 // ticrate interval for applying damage with playerdamage/projectiledamage set g_balance_contents_drowndelay 10 // time under water before a player begins drowning set g_balance_contents_playerdamage_drowning 20 // damage per second for while player is drowning diff --git a/qcsrc/server/g_damage.qc b/qcsrc/server/g_damage.qc index d96c28bf1..38d9b2e2e 100644 --- a/qcsrc/server/g_damage.qc +++ b/qcsrc/server/g_damage.qc @@ -617,6 +617,11 @@ void Unfreeze (entity targ) targ.iceblock = NULL; } +// TODO balance cfgs +float autocvar_g_balance_damagepush_scaling_speed_min; +float autocvar_g_balance_damagepush_scaling_speed_max; +float autocvar_g_balance_damagepush_scaling_factor_slowest; +float autocvar_g_balance_damagepush_scaling_factor_fastest; void Damage (entity targ, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) { float complainteamdamage = 0; @@ -878,6 +883,25 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, int d if (!IS_PLAYER(targ) || time >= targ.spawnshieldtime || targ == attacker) { vector farce = damage_explosion_calcpush(targ.damageforcescale * force, targ.velocity, autocvar_g_balance_damagepush_speedfactor); + + /*LOG_INFOF("farce %v (%f)\n", farce, vlen(targ.velocity + farce)); + vector velocity_end = targ.origin + targ.velocity / 10; + vector farce_end = velocity_end + farce / 10; + te_lightning1(NULL, targ.origin, velocity_end); + te_lightning1(NULL, velocity_end, farce_end);*/ + + //float horiz_speed = vlen(vec2(targ.velocity)); + /*float factor = map_bound_ranges(horiz_speed, + autocvar_g_balance_damagepush_scaling_speed_min, autocvar_g_balance_damagepush_scaling_speed_max, + autocvar_g_balance_damagepush_scaling_factor_slowest, autocvar_g_balance_damagepush_scaling_factor_fastest);*/ + + float factor = map_bound_ranges(vlen(targ.velocity + farce), + autocvar_g_balance_damagepush_scaling_speed_min, autocvar_g_balance_damagepush_scaling_speed_max, + autocvar_g_balance_damagepush_scaling_factor_slowest, autocvar_g_balance_damagepush_scaling_factor_fastest); + farce = vec3(farce.x * factor, farce.y * factor, farce.z); + /*te_lightning1(NULL, targ.origin, targ.origin + farce / 10); + LOG_INFOF("factor %f - new farce %v (%f)\n", factor, farce, vlen(farce));*/ + if(targ.move_movetype == MOVETYPE_PHYSICS) { entity farcent = new(farce);