From d369501ef18fd24d95b8a8d0bdc7ed16c6510872 Mon Sep 17 00:00:00 2001 From: div0 Date: Tue, 25 Nov 2008 17:33:43 +0000 Subject: [PATCH] comments in cl_physics.qc handicap: apply handicap both to dealt and to received damage, but only square rooted. So a player with handicap 4 deals 0.5x damage, and receives 2x, making him 4x weaker in comparison. git-svn-id: svn://svn.icculus.org/nexuiz/trunk@5097 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/cl_physics.qc | 6 ++++++ data/qcsrc/server/cl_player.qc | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/data/qcsrc/server/cl_physics.qc b/data/qcsrc/server/cl_physics.qc index 866b13cc4..b1828eeda 100644 --- a/data/qcsrc/server/cl_physics.qc +++ b/data/qcsrc/server/cl_physics.qc @@ -175,6 +175,7 @@ void RaceCarPhysics() // responsiveness factor for steering and acceleration f = 1 / (1 + pow(max(-myspeed, myspeed) / g_bugrigs_speed_ref, g_bugrigs_speed_pow)); + //MAXIMA: f(v) := 1 / (1 + (v / g_bugrigs_speed_ref) ^ g_bugrigs_speed_pow); if(myspeed < 0 && g_bugrigs_reverse_spinning) steerfactor = -myspeed * g_bugrigs_steer; @@ -185,6 +186,7 @@ void RaceCarPhysics() accelfactor = g_bugrigs_accel; else accelfactor = f * g_bugrigs_accel; + //MAXIMA: accel(v) := f(v) * g_bugrigs_accel; if(accel < 0) { @@ -213,6 +215,7 @@ void RaceCarPhysics() } } // terminal velocity = velocity at which 50 == accelfactor, that is, 1549 units/sec + //MAXIMA: friction(v) := g_bugrigs_friction_floor; self.angles_y += steer * frametime * steerfactor; // apply steering makevectors(self.angles); // new forward direction! @@ -235,6 +238,9 @@ void RaceCarPhysics() } rigvel = rigvel * max(0, 1 - vlen(rigvel) * g_bugrigs_friction_air * frametime); + //MAXIMA: airfriction(v) := v * v * g_bugrigs_friction_air; + //MAXIMA: total_acceleration(v) := accel(v) - friction(v) - airfriction(v); + //MAXIMA: solve(total_acceleration(v) = 0, v); if(g_bugrigs_planar_movement) { diff --git a/data/qcsrc/server/cl_player.qc b/data/qcsrc/server/cl_player.qc index 0b24a566a..eeb28c2f4 100644 --- a/data/qcsrc/server/cl_player.qc +++ b/data/qcsrc/server/cl_player.qc @@ -364,7 +364,13 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht { local float take, save, waves, sdelay; - damage = damage * bound(1.0, self.cvar_cl_handicap, 100.0); + if(!DEATH_ISSPECIAL(deathtype)) + { + damage *= sqrt(bound(1.0, self.cvar_cl_handicap, 100.0)); + if(self != attacker) + damage /= sqrt(bound(1.0, attacker.cvar_cl_handicap, 100.0)); + } + if(sv_gentle > 0) { pointparticles(particleeffectnum("damage_hit"), hitloc, force, bound(0, damage, 200)); } else { -- 2.39.2