]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
sv_q3compat_changehitbox: use correct model scale and offset
authorbones_was_here <bones_was_here@xonotic.au>
Tue, 23 May 2023 11:51:18 +0000 (21:51 +1000)
committerbones_was_here <bones_was_here@xonotic.au>
Tue, 23 May 2023 11:51:18 +0000 (21:51 +1000)
This reverts ead859bab7cbd97dea819ac023599c10a3bb017c
forgot to check model offset, oops
and better documents the config.
Player's head no longer sticks out of the bbox, offset and scaling are
equivalent to default settings.

qcsrc/common/physics/player.qc
qcsrc/server/client.qc

index 8f681ce5f9d12b9b7559fd330d8b1a169485add7..e7f88b27becb157837cd186c047ec6d2fb1b3fbd 100644 (file)
@@ -64,13 +64,23 @@ void Physics_UpdateStats(entity this)
                STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW, this) = Physics_ClientOption(this, "airspeedlimit_nonqw", autocvar_sv_airspeedlimit_nonqw) * maxspd_mod;
        }
 
+       /* Q3 uses the following:
+        *             MIN '-15 -15 -24'
+        *             MAX '15 15 32'
+        *        VIEW_OFS '0 0 26'
+        *      CROUCH_MIN '-15 -15 -24'
+        *      CROUCH_MAX '15 15 16'
+        * CROUCH_VIEW_OFS '0 0 12'
+        * but xon player models have a different z offset to suit the origin at 24/69
+        * at q3compat hitbox and model scale the equivalent offset is origin at 20/56
+        */
        bool q3hb = q3compat && autocvar_sv_q3compat_changehitbox;
-       STAT(PL_MIN, this)             = q3hb ? '-15 -15 -24' : autocvar_sv_player_mins;
-       STAT(PL_MAX, this)             = q3hb ? '15 15 32'    : autocvar_sv_player_maxs;
-       STAT(PL_VIEW_OFS, this)        = q3hb ? '0 0 26'      : autocvar_sv_player_viewoffset;
-       STAT(PL_CROUCH_MIN, this)      = q3hb ? '-15 -15 -24' : autocvar_sv_player_crouch_mins;
-       STAT(PL_CROUCH_MAX, this)      = q3hb ? '15 15 16'    : autocvar_sv_player_crouch_maxs;
-       STAT(PL_CROUCH_VIEW_OFS, this) = q3hb ? '0 0 12'      : autocvar_sv_player_crouch_viewoffset;
+       STAT(PL_MIN, this)             = q3hb ? '-15 -15 -20' : autocvar_sv_player_mins;
+       STAT(PL_MAX, this)             = q3hb ? '15 15 36'    : autocvar_sv_player_maxs;
+       STAT(PL_VIEW_OFS, this)        = q3hb ? '0 0 30'      : autocvar_sv_player_viewoffset;
+       STAT(PL_CROUCH_MIN, this)      = q3hb ? '-15 -15 -20' : autocvar_sv_player_crouch_mins;
+       STAT(PL_CROUCH_MAX, this)      = q3hb ? '15 15 20'    : autocvar_sv_player_crouch_maxs;
+       STAT(PL_CROUCH_VIEW_OFS, this) = q3hb ? '0 0 16'      : autocvar_sv_player_crouch_viewoffset;
 
        // old stats
        // fix some new settings
index f78d772c5d0f363a377e86c7650b7f071faaf0eb..4c19adcff1081e845e1d2314d8478843fcb7adad 100644 (file)
@@ -641,7 +641,8 @@ void PutPlayerInServer(entity this)
        this.respawn_flags = 0;
        this.respawn_time = 0;
        STAT(RESPAWN_TIME, this) = 0;
-       this.scale = ((q3compat && autocvar_sv_q3compat_changehitbox) ? 0.9 : autocvar_sv_player_scale);
+       // DP model scaling uses 1/16 accuracy and 13/16 is closest to 56/69
+       this.scale = ((q3compat && autocvar_sv_q3compat_changehitbox) ? 0.8125 : autocvar_sv_player_scale);
        this.fade_time = 0;
        this.pain_finished = 0;
        this.pushltime = 0;