From c6057488ffe84f64c15497d363a3357765d9dfe7 Mon Sep 17 00:00:00 2001 From: div0 Date: Tue, 5 May 2009 07:13:14 +0000 Subject: [PATCH] experimental CPMA-style physics mode (only server side atm, won't work until the engine is updated for it) git-svn-id: svn://svn.icculus.org/nexuiz/trunk@6664 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/physics15.cfg | 10 +++++--- data/physics151.cfg | 12 ++++++--- data/physics151b.cfg | 10 +++++--- data/physics16rc1.cfg | 12 ++++++--- data/physics25.cfg | 10 +++++--- data/physicsHavoc.cfg | 10 +++++--- data/physicsQ.cfg | 10 +++++--- data/physicsQ3.cfg | 10 +++++--- data/physicsQBF.cfg | 10 +++++--- data/physicsQBFplus.cfg | 10 +++++--- data/physicsQBR.cfg | 10 +++++--- data/qcsrc/server/cl_physics.qc | 44 ++++++++++++++++++++++++++++++++- 12 files changed, 122 insertions(+), 36 deletions(-) diff --git a/data/physics15.cfg b/data/physics15.cfg index 772f45bef..7faa7f854 100644 --- a/data/physics15.cfg +++ b/data/physics15.cfg @@ -5,7 +5,11 @@ sv_airaccelerate 5.5 sv_friction 5 edgefriction 1 sv_stepheight 34 -set sv_jumpvelocity 300 +sv_jumpvelocity 300 +sv_airaccel_sideways_friction 0 +sv_airaccel_qw 0 +sv_airstopaccelerate 0 +sv_airstrafeaccelerate 0 +sv_maxairstrafespeed 0 +sv_aircontrol 0 set sv_friction_on_land 0.25 -set sv_airaccel_sideways_friction 0 -set sv_airaccel_qw 0 diff --git a/data/physics151.cfg b/data/physics151.cfg index 80b887ffb..2b95eed1e 100644 --- a/data/physics151.cfg +++ b/data/physics151.cfg @@ -5,7 +5,11 @@ sv_airaccelerate 5.5 sv_friction 5 edgefriction 1 sv_stepheight 34 -set sv_jumpvelocity 300 -set sv_friction_on_land 0 -set sv_airaccel_sideways_friction 0 -set sv_airaccel_qw 0 +sv_jumpvelocity 300 +sv_airaccel_sideways_friction 0 +sv_airaccel_qw 0 +sv_airstopaccelerate 0 +sv_airstrafeaccelerate 0 +sv_maxairstrafespeed 0 +sv_aircontrol 0 +sv_friction_on_land 0 diff --git a/data/physics151b.cfg b/data/physics151b.cfg index a1768ee61..1bf7427a5 100644 --- a/data/physics151b.cfg +++ b/data/physics151b.cfg @@ -5,7 +5,11 @@ sv_airaccelerate 5.5 sv_friction 5 edgefriction 1 sv_stepheight 34 -set sv_jumpvelocity 300 +sv_jumpvelocity 300 +sv_airaccel_sideways_friction 0 +sv_airaccel_qw 0 +sv_airstopaccelerate 0 +sv_airstrafeaccelerate 0 +sv_maxairstrafespeed 0 +sv_aircontrol 0 set sv_friction_on_land 0 -set sv_airaccel_sideways_friction 0 -set sv_airaccel_qw 0 diff --git a/data/physics16rc1.cfg b/data/physics16rc1.cfg index 8c7a10e4c..559430bb5 100644 --- a/data/physics16rc1.cfg +++ b/data/physics16rc1.cfg @@ -5,7 +5,11 @@ sv_airaccelerate 5.5 sv_friction 5 edgefriction 1 sv_stepheight 34 -set sv_jumpvelocity 300 -set sv_friction_on_land 0.2 -set sv_airaccel_sideways_friction 0 -set sv_airaccel_qw 0 +sv_jumpvelocity 300 +sv_airaccel_sideways_friction 0 +sv_airaccel_qw 0 +sv_airstopaccelerate 0 +sv_airstrafeaccelerate 0 +sv_maxairstrafespeed 0 +sv_aircontrol 0 +sv_friction_on_land 0.2 diff --git a/data/physics25.cfg b/data/physics25.cfg index 5cc76e6c5..72f89c80e 100644 --- a/data/physics25.cfg +++ b/data/physics25.cfg @@ -5,7 +5,11 @@ sv_airaccelerate 5.5 sv_friction 7 edgefriction 1 sv_stepheight 34 -set sv_jumpvelocity 300 +sv_jumpvelocity 300 +sv_airaccel_sideways_friction 0.35 +sv_airaccel_qw 0.95 +sv_airstopaccelerate 0 +sv_airstrafeaccelerate 0 +sv_maxairstrafespeed 0 +sv_aircontrol 0 set sv_friction_on_land 0 -set sv_airaccel_sideways_friction 0.35 -set sv_airaccel_qw 0.95 diff --git a/data/physicsHavoc.cfg b/data/physicsHavoc.cfg index 461deea30..282da83a7 100644 --- a/data/physicsHavoc.cfg +++ b/data/physicsHavoc.cfg @@ -5,7 +5,11 @@ sv_airaccelerate 5.5 sv_friction 7 edgefriction 1 sv_stepheight 34 -set sv_jumpvelocity 300 +sv_jumpvelocity 300 +sv_airaccel_sideways_friction 0.65 +sv_airaccel_qw 0.95 +sv_airstopaccelerate 0 +sv_airstrafeaccelerate 0 +sv_maxairstrafespeed 0 +sv_aircontrol 0 set sv_friction_on_land 0 -set sv_airaccel_sideways_friction 0.65 -set sv_airaccel_qw 0.95 diff --git a/data/physicsQ.cfg b/data/physicsQ.cfg index e37bac080..3dde9066c 100644 --- a/data/physicsQ.cfg +++ b/data/physicsQ.cfg @@ -5,7 +5,11 @@ sv_airaccelerate 5.5 sv_friction 5 edgefriction 1 sv_stepheight 34 -set sv_jumpvelocity 300 +sv_jumpvelocity 300 +sv_airaccel_sideways_friction 0 +sv_airaccel_qw 1 +sv_airstopaccelerate 0 +sv_airstrafeaccelerate 0 +sv_maxairstrafespeed 0 +sv_aircontrol 0 set sv_friction_on_land 0 -set sv_airaccel_sideways_friction 0 -set sv_airaccel_qw 1 diff --git a/data/physicsQ3.cfg b/data/physicsQ3.cfg index 5c48741b1..79725b5ee 100644 --- a/data/physicsQ3.cfg +++ b/data/physicsQ3.cfg @@ -6,7 +6,11 @@ sv_airaccelerate 1 sv_friction 6 edgefriction 1 sv_stepheight 18 -set sv_jumpvelocity 270 +sv_jumpvelocity 270 +sv_airaccel_sideways_friction 0 +sv_airaccel_qw 1 +sv_airstopaccelerate 0 +sv_airstrafeaccelerate 0 +sv_maxairstrafespeed 0 +sv_aircontrol 0 set sv_friction_on_land 0 -set sv_airaccel_sideways_friction 0 -set sv_airaccel_qw 1 diff --git a/data/physicsQBF.cfg b/data/physicsQBF.cfg index 08867661f..69de10645 100644 --- a/data/physicsQBF.cfg +++ b/data/physicsQBF.cfg @@ -5,7 +5,11 @@ sv_airaccelerate 5.5 sv_friction 5 edgefriction 1 sv_stepheight 34 -set sv_jumpvelocity 300 +sv_jumpvelocity 300 +sv_airaccel_sideways_friction 0.8 +sv_airaccel_qw 1 +sv_airstopaccelerate 0 +sv_airstrafeaccelerate 0 +sv_maxairstrafespeed 0 +sv_aircontrol 0 set sv_friction_on_land 0 -set sv_airaccel_sideways_friction 0.8 -set sv_airaccel_qw 1 diff --git a/data/physicsQBFplus.cfg b/data/physicsQBFplus.cfg index ec2984ada..108bf591d 100644 --- a/data/physicsQBFplus.cfg +++ b/data/physicsQBFplus.cfg @@ -5,7 +5,11 @@ sv_airaccelerate 5.5 sv_friction 5 edgefriction 1 sv_stepheight 34 -set sv_jumpvelocity 300 +sv_jumpvelocity 300 +sv_airaccel_sideways_friction 0.5 +sv_airaccel_qw 0.93 +sv_airstopaccelerate 0 +sv_airstrafeaccelerate 0 +sv_maxairstrafespeed 0 +sv_aircontrol 0 set sv_friction_on_land 0 -set sv_airaccel_sideways_friction 0.5 -set sv_airaccel_qw 0.93 diff --git a/data/physicsQBR.cfg b/data/physicsQBR.cfg index 06847e77d..6677f1a4e 100644 --- a/data/physicsQBR.cfg +++ b/data/physicsQBR.cfg @@ -5,7 +5,11 @@ sv_airaccelerate 5.5 sv_friction 5 edgefriction 1 sv_stepheight 34 -set sv_jumpvelocity 300 +sv_jumpvelocity 300 +sv_airaccel_sideways_friction 0.3 +sv_airaccel_qw 0.93 +sv_airstopaccelerate 0 +sv_airstrafeaccelerate 0 +sv_maxairstrafespeed 0 +sv_aircontrol 0 set sv_friction_on_land 0 -set sv_airaccel_sideways_friction 0.3 -set sv_airaccel_qw 0.93 diff --git a/data/qcsrc/server/cl_physics.qc b/data/qcsrc/server/cl_physics.qc index fc75f7c18..8ba1dce93 100644 --- a/data/qcsrc/server/cl_physics.qc +++ b/data/qcsrc/server/cl_physics.qc @@ -7,6 +7,10 @@ float sv_stopspeed; float sv_gravity; float sv_airaccel_sideways_friction; float sv_airaccel_qw; +float sv_airstopaccelerate; +float sv_airstrafeaccelerate; +float sv_maxairstrafespeed; +float sv_aircontrol; .float ladder_time; .entity ladder_entity; .float gravity; @@ -346,6 +350,29 @@ void RaceCarPhysics() self.angles_z = smoothangles_z; } +void CPM_PM_Aircontrol(vector wishdir, float wishspeed) +{ + float zspeed, xyspeed, dot, k; + + if(self.movement_x == 0 || self.movement_y != 0) + return; + + zspeed = self.velocity_z; + self.velocity_z = 0; + xyspeed = vlen(self.velocity); + self.velocity = normalize(self.velocity); + + dot = self.velocity * wishdir; + k = 32; + k *= sv_aircontrol*dot*dot*frametime; + + if(dot > 0) // we can't change direction while slowing down + self.velocity = normalize(self.velocity * xyspeed + wishdir * k); + + self.velocity = self.velocity * xyspeed; + self.velocity_z = zspeed; +} + .vector movement_old; .float buttons_old; .vector v_angle_old; @@ -837,10 +864,22 @@ void SV_PlayerPhysics() wishspeed = wishspeed * 0.5; if (time >= self.teleport_time) { + // CPM: air control + float wishspeed2; + wishspeed2 = wishspeed; + if(self.velocity * wishdir < 0) + airaccel = sv_airstopaccelerate; + if(self.movement_x == 0 && self.movement_y != 0) + { + wishspeed = min(wishspeed, sv_maxairstrafespeed); + airaccel = sv_airstrafeaccelerate; + } + // !CPM + // NOTE: this does the same as the commented out old code if: // sv_airaccel_qw 0 // sv_airaccel_sideways_friction 0 - + float vel_straight; float vel_z; vector vel_perpend; @@ -858,6 +897,9 @@ void SV_PlayerPhysics() vel_perpend = vel_perpend * (1 - frametime * (wishspeed / maxairspd) * sv_airaccel_sideways_friction); self.velocity = vel_straight * wishdir + vel_z * '0 0 1' + vel_perpend; + + if(sv_aircontrol) + CPM_PM_Aircontrol(wishdir, wishspeed2); /* f = wishspeed;// - (self.velocity * wishdir); -- 2.39.2