From 468c3f048383e21326d350ecd8c6e7af753a96a0 Mon Sep 17 00:00:00 2001 From: bones_was_here Date: Fri, 17 Feb 2023 02:27:59 +1000 Subject: [PATCH] Corrections and documentation for gravity etc in physicsCPMA.cfg and physicsQ3.cfg Adds sv_track_canjump to configs that lacked it. --- physicsCPMA.cfg | 47 +++++++++++++++++++++++++++++++++++---------- physicsOverkill.cfg | 1 + physicsQ3.cfg | 19 +++++++++++------- physicsX.cfg | 1 + physicsX010.cfg | 1 + physicsX07.cfg | 1 + physicsXDF.cfg | 1 + physicsXDFLight.cfg | 1 + 8 files changed, 55 insertions(+), 17 deletions(-) diff --git a/physicsCPMA.cfg b/physicsCPMA.cfg index 30a18cab9..559ce3a37 100644 --- a/physicsCPMA.cfg +++ b/physicsCPMA.cfg @@ -1,13 +1,37 @@ g_mod_physics CPMA // these values match CPMA -sv_gravity 800 +// CPMA uses gravity 800 but the strength of Q3 gravity is frametime-dependent. +// It also differs slightly between ascending and descending, which we don't attempt to replicate. +// Modern CPMA has frametime-independent physics that ~match 125fps frametime-dependent. +// DeFRaG still has frametime-dependent physics and DFWC rules mandate 125fps. +// 125 * round(800/125) = 750 simulates 125fps Q3 gravity in Xonotic, +// tested mathematically by k9 and ingame with printf by bones_was_here. + +// Jump height: +// Taking into account the effect of velocity snapping, a general formula for origin.z k frames after jumping can be derived: +// kT(270 + (round(gT) - GT)/2) - 1/2 k^2 T round(gT) +// Inputting g=750, T=1/125 and solving on the 45th frame, we find that the jump height in Quake 3 is 48.528 units. +// Q3 test results: 48.527999872 in every test (at end of frame). +// Xonotic test results: 48.6 as expected by (270^2)/(2*750) (see: physicsX.cfg) + +// Jump distance/duration: +// The above formula can also be used to calculate that landing in Q3 occurs after 89.93333... 8ms frames, +// for a duration of 720ms at end of frame, as predicted by (2*270)/750 (see: physicsX.cfg), +// so the expected distance is 230.4 units at 320ups. +// Q3 test results: 230.405274 230.405274 230.404723 230.404969 (at end of frame when ONGROUND is set). +// Xonotic test results: 230.39637 in every test (Xonotic can set ONGROUND earlier in the frame, when the collision occurs). + +sv_gravity 750 + sv_maxspeed 320 sv_maxairspeed 320 sv_stopspeed 100 -sv_accelerate 15 +sv_accelerate 15 // from cpm1_dev_docs sv_airaccelerate 1 -sv_friction 8 +// The cpm1_dev_docs.zip (only CPMA source code release) used friction 8, +// but friction is 6 in all ~modern CPMA releases, and in DeFRaG CPM. +sv_friction 6 edgefriction 1 sv_stepheight 18 sv_jumpvelocity 270 @@ -17,11 +41,11 @@ sv_waterfriction 1 sv_airaccel_sideways_friction 0 sv_airaccel_qw 1 sv_airaccel_qw_stretchfactor 0 -sv_airstopaccelerate 2.5 -sv_airstrafeaccelerate 70 -sv_maxairstrafespeed 30 +sv_airstopaccelerate 2.5 // from cpm1_dev_docs +sv_airstrafeaccelerate 70 // from cpm1_dev_docs strafeaccelerate +sv_maxairstrafespeed 30 // from cpm1_dev_docs wishspeed sv_airstrafeaccel_qw 0 -sv_aircontrol 150 +sv_aircontrol 150 // from cpm1_dev_docs sv_aircontrol_penalty 0 sv_aircontrol_power 2 sv_aircontrol_backwards 0 @@ -34,10 +58,13 @@ sv_warsowbunny_backtosideratio 0.8 sv_friction_on_land 0 sv_friction_slick 0 sv_doublejump 0 -sv_jumpspeedcap_min "" +// match the downhill ramp jumping behaviour of CPMA +sv_jumpspeedcap_min 0 sv_jumpspeedcap_max "" -sv_jumpspeedcap_max_disable_on_ramps 0 +// CPMA has ramp jumping +sv_jumpspeedcap_max_disable_on_ramps 1 +// FIXME: Q3 teleporters _set_ speed to 400, not cap it g_teleport_maxspeed 400 -sv_track_canjump 0 +sv_track_canjump 1 sv_gameplayfix_stepdown_maxspeed 0 g_movement_highspeed_q3_compat 1 diff --git a/physicsOverkill.cfg b/physicsOverkill.cfg index be6ea4963..aa97fb15b 100644 --- a/physicsOverkill.cfg +++ b/physicsOverkill.cfg @@ -52,5 +52,6 @@ sv_jumpspeedcap_min "" sv_jumpspeedcap_max "" sv_jumpspeedcap_max_disable_on_ramps 1 g_teleport_maxspeed 0 +sv_track_canjump 0 sv_gameplayfix_stepdown_maxspeed 400 g_movement_highspeed_q3_compat 0 diff --git a/physicsQ3.cfg b/physicsQ3.cfg index 76ee484ec..08fdde547 100644 --- a/physicsQ3.cfg +++ b/physicsQ3.cfg @@ -1,7 +1,8 @@ g_mod_physics Q3 // these values match Quake3 -sv_gravity 800 +// See physicsCPMA.cfg for the source of this sv_gravity setting +sv_gravity 750 sv_maxspeed 320 sv_maxairspeed 320 sv_stopspeed 100 @@ -17,8 +18,10 @@ sv_waterfriction 1 sv_airaccel_sideways_friction 0 sv_airaccel_qw 1 sv_airaccel_qw_stretchfactor 0 -sv_airstopaccelerate 0 -sv_airstrafeaccelerate 0 +// Q3A doesn't have airstopaccelerate and strafeaccelerate +// but they're added in cpm1_dev_docs.zip with values 1 and 1 in VQ3 mode +sv_airstopaccelerate 1 +sv_airstrafeaccelerate 1 sv_maxairstrafespeed 0 sv_airstrafeaccel_qw 0 sv_aircontrol 0 @@ -35,9 +38,11 @@ sv_friction_on_land 0 sv_friction_slick 0 sv_doublejump 0 sv_jumpspeedcap_min "" -sv_jumpspeedcap_max "" +// VQ3 has no ramp jumping +sv_jumpspeedcap_max 270 sv_jumpspeedcap_max_disable_on_ramps 0 -g_teleport_maxspeed 320 -sv_track_canjump 0 +// FIXME: Q3 teleporters _set_ speed to 400, not cap it +g_teleport_maxspeed 400 +sv_track_canjump 1 sv_gameplayfix_stepdown_maxspeed 0 -g_movement_highspeed_q3_compat 0 +g_movement_highspeed_q3_compat 1 diff --git a/physicsX.cfg b/physicsX.cfg index 252c2e7e9..21ded2a8c 100644 --- a/physicsX.cfg +++ b/physicsX.cfg @@ -53,5 +53,6 @@ sv_jumpspeedcap_min "" sv_jumpspeedcap_max "" sv_jumpspeedcap_max_disable_on_ramps 1 g_teleport_maxspeed 0 +sv_track_canjump 0 sv_gameplayfix_stepdown_maxspeed 400 g_movement_highspeed_q3_compat 0 diff --git a/physicsX010.cfg b/physicsX010.cfg index 8b81ca042..e350037e6 100644 --- a/physicsX010.cfg +++ b/physicsX010.cfg @@ -46,5 +46,6 @@ sv_jumpspeedcap_min "" sv_jumpspeedcap_max "" sv_jumpspeedcap_max_disable_on_ramps 1 g_teleport_maxspeed 0 +sv_track_canjump 0 sv_gameplayfix_stepdown_maxspeed 400 g_movement_highspeed_q3_compat 0 diff --git a/physicsX07.cfg b/physicsX07.cfg index aa582bd99..c7c2250e7 100644 --- a/physicsX07.cfg +++ b/physicsX07.cfg @@ -52,5 +52,6 @@ sv_jumpspeedcap_min "" sv_jumpspeedcap_max "" sv_jumpspeedcap_max_disable_on_ramps 1 g_teleport_maxspeed 0 +sv_track_canjump 0 sv_gameplayfix_stepdown_maxspeed 400 g_movement_highspeed_q3_compat 0 diff --git a/physicsXDF.cfg b/physicsXDF.cfg index 8bbe28eaa..1436bbdcb 100644 --- a/physicsXDF.cfg +++ b/physicsXDF.cfg @@ -44,6 +44,7 @@ sv_jumpspeedcap_min 0 sv_jumpspeedcap_max 0.5 sv_jumpspeedcap_max_disable_on_ramps 1 g_teleport_maxspeed 600 +sv_track_canjump 0 sv_gameplayfix_stepdown_maxspeed 400 // needed for correct q3 haste simulation g_movement_highspeed_q3_compat 1 diff --git a/physicsXDFLight.cfg b/physicsXDFLight.cfg index dd657afaf..1c86e786d 100644 --- a/physicsXDFLight.cfg +++ b/physicsXDFLight.cfg @@ -44,5 +44,6 @@ sv_jumpspeedcap_min "" sv_jumpspeedcap_max "" sv_jumpspeedcap_max_disable_on_ramps 1 g_teleport_maxspeed 0 +sv_track_canjump 0 sv_gameplayfix_stepdown_maxspeed 400 g_movement_highspeed_q3_compat 0 -- 2.39.2