From: bones_was_here <bones_was_here@xonotic.au>
Date: Thu, 16 Feb 2023 18:21:48 +0000 (+1000)
Subject: Adjust jump pad velocity on Q3 maps to match 125fps frametime-dependent behaviour
X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=d4b79aa887a397e30597e193fda3ed5708a79e80;p=xonotic%2Fxonotic-data.pk3dir.git

Adjust jump pad velocity on Q3 maps to match 125fps frametime-dependent behaviour
---

diff --git a/qcsrc/common/mapobjects/trigger/jumppads.qc b/qcsrc/common/mapobjects/trigger/jumppads.qc
index eee980618..c5284db33 100644
--- a/qcsrc/common/mapobjects/trigger/jumppads.qc
+++ b/qcsrc/common/mapobjects/trigger/jumppads.qc
@@ -39,6 +39,14 @@ vector trigger_push_calculatevelocity(vector org, entity tgt, float ht, entity p
 	if(pushed_entity && pushed_entity.gravity)
 		grav *= pushed_entity.gravity;
 
+	// Q3 has frametime-dependent gravity, but its trigger_push velocity calculation doesn't account for that.
+	// This discrepancy can be simulated accurately which ensures that all entities will arrive
+	// where they would in Q3 with gravity 800 at 125fps, even if entity-specific gravity is applied.
+	// This can be hard-coded because we don't support the Q3 world.gravity field at this time.
+	// See physicsCPMA.cfg for maths and test results.
+	if (Q3COMPAT_COMMON)
+		grav /= 750/800; // exact float, unlike 800/750
+
 	zdist = torg.z - org.z;
 	sdist = vlen(torg - org - zdist * '0 0 1');
 	sdir = normalize(torg - org - zdist * '0 0 1');