]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
WIP damagepush scaling
authorMartin Taibr <taibr.martin@gmail.com>
Mon, 21 Aug 2017 20:44:59 +0000 (22:44 +0200)
committerMartin Taibr <taibr.martin@gmail.com>
Mon, 21 Aug 2017 20:44:59 +0000 (22:44 +0200)
balance-overkill.cfg
qcsrc/server/g_damage.qc

index fc99616f94eaff821e575442fcdfca74d0de6052..8b66e4b4fbb8d9dc954aef9da49f74abbabb48f3 100644 (file)
@@ -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
index d96c28bf1adaac3df8328bbc05ef5db3c9f76b6b..38d9b2e2ee7f0c8368ef6f61250cb222ffd1e261 100644 (file)
@@ -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);