]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
New/better force calculations, now players shouldn't ever be pulled
authorSamual Lenks <samual@xonotic.org>
Tue, 31 Jul 2012 04:07:10 +0000 (00:07 -0400)
committerSamual Lenks <samual@xonotic.org>
Tue, 31 Jul 2012 04:07:10 +0000 (00:07 -0400)
towards you

balance25.cfg
balanceFruitieX.cfg
balanceXPM.cfg
balanceXonotic.cfg
qcsrc/server/autocvars.qh
qcsrc/server/w_laser.qc

index 7a45ad60dcff6c422c62bee5da1eddb43d53139f..4a4f518bfbe1244caf158ef2b8451cdb8de3496f 100644 (file)
@@ -281,6 +281,7 @@ set g_balance_laser_shockwave_damage 20
 set g_balance_laser_shockwave_distance 2000
 set g_balance_laser_shockwave_edgedamage 0
 set g_balance_laser_shockwave_force 250
+set g_balance_laser_shockwave_force_forwardbias 0.5
 set g_balance_laser_shockwave_jump_damage 20
 set g_balance_laser_shockwave_jump_edgedamage 0
 set g_balance_laser_shockwave_jump_force 300
@@ -296,6 +297,7 @@ set g_balance_laser_shockwave_multiplier_min 0
 set g_balance_laser_shockwave_splash_damage 15
 set g_balance_laser_shockwave_splash_edgedamage 0
 set g_balance_laser_shockwave_splash_force 100
+set g_balance_laser_shockwave_splash_force_forwardbias 0.5
 set g_balance_laser_shockwave_splash_multiplier_accuracy 0.5
 set g_balance_laser_shockwave_splash_multiplier_distance 0.5
 set g_balance_laser_shockwave_splash_multiplier_min 0
index 219ea0f315df3b4c3817766f963d2f80c3158543..bf4307f4b560dd0b4fa02f4c87fd62eb404177fe 100644 (file)
@@ -281,6 +281,7 @@ set g_balance_laser_shockwave_damage 20
 set g_balance_laser_shockwave_distance 2000
 set g_balance_laser_shockwave_edgedamage 0
 set g_balance_laser_shockwave_force 250
+set g_balance_laser_shockwave_force_forwardbias 0.5
 set g_balance_laser_shockwave_jump_damage 20
 set g_balance_laser_shockwave_jump_edgedamage 0
 set g_balance_laser_shockwave_jump_force 300
@@ -296,6 +297,7 @@ set g_balance_laser_shockwave_multiplier_min 0
 set g_balance_laser_shockwave_splash_damage 15
 set g_balance_laser_shockwave_splash_edgedamage 0
 set g_balance_laser_shockwave_splash_force 100
+set g_balance_laser_shockwave_splash_force_forwardbias 0.5
 set g_balance_laser_shockwave_splash_multiplier_accuracy 0.5
 set g_balance_laser_shockwave_splash_multiplier_distance 0.5
 set g_balance_laser_shockwave_splash_multiplier_min 0
index 8fc4cc639ccd7e580b04776e756f225f6370482b..6c0a2679d49831c5028da84e00f42e819b52be49 100644 (file)
@@ -281,6 +281,7 @@ set g_balance_laser_shockwave_damage 20
 set g_balance_laser_shockwave_distance 2000
 set g_balance_laser_shockwave_edgedamage 0
 set g_balance_laser_shockwave_force 250
+set g_balance_laser_shockwave_force_forwardbias 0.5
 set g_balance_laser_shockwave_jump_damage 20
 set g_balance_laser_shockwave_jump_edgedamage 0
 set g_balance_laser_shockwave_jump_force 300
@@ -296,6 +297,7 @@ set g_balance_laser_shockwave_multiplier_min 0
 set g_balance_laser_shockwave_splash_damage 15
 set g_balance_laser_shockwave_splash_edgedamage 0
 set g_balance_laser_shockwave_splash_force 100
+set g_balance_laser_shockwave_splash_force_forwardbias 0.5
 set g_balance_laser_shockwave_splash_multiplier_accuracy 0.5
 set g_balance_laser_shockwave_splash_multiplier_distance 0.5
 set g_balance_laser_shockwave_splash_multiplier_min 0
index 4fe95a6904514bb5993eb54aa435b119d6565b16..f12f497206ac611ae45959da760f5f9bac193b4c 100644 (file)
@@ -280,7 +280,8 @@ set g_balance_laser_secondary_force_other_scale 1
 set g_balance_laser_shockwave_damage 20
 set g_balance_laser_shockwave_distance 2000
 set g_balance_laser_shockwave_edgedamage 0
-set g_balance_laser_shockwave_force 250
+set g_balance_laser_shockwave_force 300
+set g_balance_laser_shockwave_force_forwardbias 50
 set g_balance_laser_shockwave_jump_damage 20
 set g_balance_laser_shockwave_jump_edgedamage 0
 set g_balance_laser_shockwave_jump_force 300
@@ -296,6 +297,7 @@ set g_balance_laser_shockwave_multiplier_min 0
 set g_balance_laser_shockwave_splash_damage 15
 set g_balance_laser_shockwave_splash_edgedamage 0
 set g_balance_laser_shockwave_splash_force 100
+set g_balance_laser_shockwave_splash_force_forwardbias 50
 set g_balance_laser_shockwave_splash_multiplier_accuracy 0.5
 set g_balance_laser_shockwave_splash_multiplier_distance 0.5
 set g_balance_laser_shockwave_splash_multiplier_min 0
index 37dbc372df2dcb8912edc595f3ce91553f4d9058..5833db2c6f0c2c94c1fcf8a8b8b34a34897c2095 100644 (file)
@@ -473,6 +473,7 @@ float autocvar_g_balance_laser_shockwave_damage;
 float autocvar_g_balance_laser_shockwave_distance;
 float autocvar_g_balance_laser_shockwave_edgedamage;
 float autocvar_g_balance_laser_shockwave_force;
+float autocvar_g_balance_laser_shockwave_force_forwardbias;
 float autocvar_g_balance_laser_shockwave_jump_damage;
 float autocvar_g_balance_laser_shockwave_jump_edgedamage;
 float autocvar_g_balance_laser_shockwave_jump_force;
@@ -488,6 +489,7 @@ float autocvar_g_balance_laser_shockwave_multiplier_min;
 float autocvar_g_balance_laser_shockwave_splash_damage;
 float autocvar_g_balance_laser_shockwave_splash_edgedamage;
 float autocvar_g_balance_laser_shockwave_splash_force;
+float autocvar_g_balance_laser_shockwave_splash_force_forwardbias;
 float autocvar_g_balance_laser_shockwave_splash_multiplier_accuracy;
 float autocvar_g_balance_laser_shockwave_splash_multiplier_distance;
 float autocvar_g_balance_laser_shockwave_splash_multiplier_min;
index 22689b56b5ee967f5d21aff07afc2fb7c2e60652..c9ea5932296252551d3beaee39bdcf82416321f4 100644 (file)
@@ -118,15 +118,9 @@ float W_Laser_Shockwave_CheckHit(float queue, entity head, vector final_force, f
        {
                if(shockwave_hit[i] == head)
                {
-                       float new_attack_value = (vlen(final_force) + final_damage);
-                       float prev_attack_value = (vlen(shockwave_hit_force[i]) + shockwave_hit_damage);
-                       if(new_attack_value > prev_attack_value)
-                       {
-                               print("new value: ", ftos(new_attack_value), ", prev value: ", ftos(prev_attack_value), ".\n");
-                               shockwave_hit_force[i] = final_force;
-                               shockwave_hit_damage[i] = final_damage;
-                               return FALSE;
-                       }
+                       if(vlen(final_force) > vlen(shockwave_hit_force[i])) { shockwave_hit_force[i] = final_force; }
+                       if(final_damage > shockwave_hit_damage[i]) { shockwave_hit_damage[i] = final_damage; }
+                       return FALSE;
                }
        }
 
@@ -149,7 +143,7 @@ void W_Laser_Shockwave()
        // set up the shot direction
        W_SetupShot(self, FALSE, 3, "weapons/lasergun_fire.wav", CH_WEAPON_B, autocvar_g_balance_laser_shockwave_damage);
        vector attack_endpos = (w_shotorg + (w_shotdir * autocvar_g_balance_laser_shockwave_distance));
-       WarpZone_TraceLine(w_shotorg, attack_endpos, FALSE, self);
+       WarpZone_TraceLine(w_shotorg, attack_endpos, MOVE_NOMONSTERS, self);
        vector attack_hitpos = trace_endpos;
        float distance_to_end = vlen(w_shotorg - attack_endpos);
        float distance_to_hit = vlen(w_shotorg - attack_hitpos);
@@ -193,8 +187,10 @@ void W_Laser_Shockwave()
                                multiplier_from_accuracy = (1 - (distance_to_head ? min(1, (distance_to_head / autocvar_g_balance_laser_shockwave_splash_radius)) : 0));
                                multiplier_from_distance = (1 - (distance_to_hit ? min(1, (distance_to_hit / distance_to_end)) : 0));
                                multiplier = max(autocvar_g_balance_laser_shockwave_splash_multiplier_min, ((multiplier_from_accuracy * autocvar_g_balance_laser_shockwave_splash_multiplier_accuracy) + (multiplier_from_distance * autocvar_g_balance_laser_shockwave_splash_multiplier_distance)));
-                               
-                               final_force = ((normalize(center - attack_hitpos) * autocvar_g_balance_laser_shockwave_splash_force) * multiplier);
+
+                               final_force = normalize(center - (attack_hitpos - (w_shotdir * autocvar_g_balance_laser_shockwave_splash_force_forwardbias)));
+                               te_lightning2(world, attack_hitpos, (attack_hitpos + (final_force * 200)));
+                               final_force = ((final_force * autocvar_g_balance_laser_shockwave_splash_force) * multiplier);
                                final_damage = (autocvar_g_balance_laser_shockwave_splash_damage * multiplier + autocvar_g_balance_laser_shockwave_splash_edgedamage * (1 - multiplier));
 
                                if(W_Laser_Shockwave_CheckHit(queue, head, final_force, final_damage)) { ++queue; }
@@ -235,7 +231,9 @@ void W_Laser_Shockwave()
                                multiplier_from_distance = (1 - (distance_to_hit ? min(1, (distance_to_target / distance_to_end)) : 0));
                                multiplier = max(autocvar_g_balance_laser_shockwave_multiplier_min, ((multiplier_from_accuracy * autocvar_g_balance_laser_shockwave_multiplier_accuracy) + (multiplier_from_distance * autocvar_g_balance_laser_shockwave_multiplier_distance)));
 
-                               final_force = ((normalize(center - nearest_on_line) * autocvar_g_balance_laser_shockwave_force) * multiplier);
+                               final_force = normalize(center - (nearest_on_line - (w_shotdir * autocvar_g_balance_laser_shockwave_force_forwardbias)));
+                               te_lightning2(world, nearest_on_line, (attack_hitpos + (final_force * 200)));
+                               final_force = ((final_force * autocvar_g_balance_laser_shockwave_force) * multiplier);
                                final_damage = (autocvar_g_balance_laser_shockwave_damage * multiplier + autocvar_g_balance_laser_shockwave_edgedamage * (1 - multiplier));
 
                                if(W_Laser_Shockwave_CheckHit(queue, head, final_force, final_damage)) { ++queue; }