]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge remote branch 'origin/master' into samual/menu_updates
authorSamual <samual@xonotic.org>
Wed, 18 Jan 2012 16:18:27 +0000 (11:18 -0500)
committerSamual <samual@xonotic.org>
Wed, 18 Jan 2012 16:18:27 +0000 (11:18 -0500)
Conflicts:
qcsrc/menu/xonotic/dialog_settings_network.c

defaultXonotic.cfg
qcsrc/csqcmodellib/cl_player.qc
qcsrc/server/vehicles/racer.qc
qcsrc/server/vehicles/raptor.qc
qcsrc/server/vehicles/spiderbot.qc

index d4b2fb86fc46270634f03a913e491703d961fe4b..e8d6dc7c07959aa269432fd5d198fe40fcd27ae9 100644 (file)
@@ -1783,7 +1783,7 @@ seta cl_forceplayercolors 0 "make everyone look like your own color (requires se
 seta cl_forcemyplayermodel "" "set to the model file name you want to show yourself as (requires server to have sv_use_csqc_players 1; does not affect how enemies look with cl_forceplayermodels)"
 seta cl_forcemyplayerskin 0 "set to the skin number you want to show yourself as (requires server to have sv_use_csqc_players 1; does not affect how enemies look with cl_forceplayermodels)"
 seta cl_forcemyplayercolors 0 "set to the color value (encoding is same as _cl_color) for your own player model (requires server to have sv_use_csqc_players 1, and is ignored in teamplay; does not affect how enemies look with cl_forceplayermodels)"
-seta cl_movement_errorcompensation 0 "try to compensate for prediction errors and reduce preceived lag (requires server to have sv_use_csqc_players 1)"
+seta cl_movement_errorcompensation 1 "try to compensate for prediction errors and reduce preceived lag (requires server to have sv_use_csqc_players 1)"
 
 // debug cvars for keyhunt attaching
 set _angles "0 0 0"
index 404a29a474d78ccd3fee0d2ccd295f8fa5cdba9a..3c75b399f7b31a310979443620a048a6c1301655 100644 (file)
@@ -54,19 +54,32 @@ vector CSQCPlayer_GetPredictionErrorV()
        return csqcplayer_predictionerrorv * (csqcplayer_predictionerrortime - time) * csqcplayer_predictionerrorfactor;
 }
 
-void CSQCPlayer_SetPredictionError(vector o, vector v)
+void CSQCPlayer_SetPredictionError(vector o, vector v, float onground_diff)
 {
-       if(!autocvar_cl_movement_errorcompensation)
+       // error too big to compensate, we LIKELY hit a teleport or a
+       // jumppad, or it's a jump time disagreement that'll get fixed
+       // next frame
+
+       // FIXME we sometimes have disagreement in order of jump velocity. Do not act on them!
+       /*
+       // commented out as this one did not help
+       if(onground_diff)
        {
-               csqcplayer_predictionerrorfactor = 0;
+               print(sprintf("ONGROUND MISMATCH: %d x=%v v=%v\n", onground_diff, o, v));
+               return;
+       }
+       */
+       if(vlen(o) > 32 || vlen(v) > 192)
+       {
+               //print(sprintf("TOO BIG: x=%v v=%v\n", o, v));
                return;
        }
 
-       // error too big to compensate, we LIKELY hit a teleport or a
-       // jumppad, or it's a jump time disagreement that'll get fixed
-       // next frame
-       if(vlen(o) > 32 || vlen(v) > 128)
+       if(!autocvar_cl_movement_errorcompensation)
+       {
+               csqcplayer_predictionerrorfactor = 0;
                return;
+       }
 
        csqcplayer_predictionerroro = CSQCPlayer_GetPredictionErrorO() + o;
        csqcplayer_predictionerrorv = CSQCPlayer_GetPredictionErrorV() + v;
@@ -210,7 +223,7 @@ void CSQCPlayer_SetCamera()
                                v = v0;
                                csqcplayer_status = CSQCPLAYERSTATUS_PREDICTED;
                                CSQCPlayer_PredictTo(servercommandframe + 1, FALSE);
-                               CSQCPlayer_SetPredictionError(self.origin - o, self.velocity - v);
+                               CSQCPlayer_SetPredictionError(self.origin - o, self.velocity - v, pmove_onground - !!(self.pmove_flags & PMF_ONGROUND));
                                self.origin = o;
                                self.velocity = v;
 
index 7f5e80e4b29ae339be8003fed9e7fe29a61a053c..777820e48c261c26f18cc8c9b093b42abfa71a85 100644 (file)
@@ -521,10 +521,12 @@ void racer_exit(float eject)
            spot = vehicles_findgoodexit(spot);
            setorigin(self.owner , spot);
            self.owner.velocity = (v_up + v_forward * 0.25) * 750;
+           self.owner.oldvelocity = self.owner.velocity;
        }
        else
        {
-           self.owner.velocity = '0 0 0';
+           self.owner.velocity = normalize(self.velocity) * autocvar_sv_maxairspeed;
+           self.owner.oldvelocity = self.owner.velocity;
            spot = self.origin - v_forward * 200 + '0 0 64';
            spot = vehicles_findgoodexit(spot);
            setorigin(self.owner , spot);
index ae91c8303a7db7e1bd4284b291d37f4a6f36d894..4973859259be48a3619eabdba70de148b87b8366 100644 (file)
@@ -244,10 +244,12 @@ void raptor_exit(float eject)
            spot = vehicles_findgoodexit(spot);
            setorigin(self.owner , spot);
            self.owner.velocity = (v_up + v_forward * 0.25) * 750;
+           self.owner.oldvelocity = self.owner.velocity;
        }
        else
        {
-           self.owner.velocity = '0 0 0';
+           self.owner.velocity = normalize(self.velocity) * autocvar_sv_maxairspeed;
+           self.owner.oldvelocity = self.owner.velocity;
            spot = self.origin - v_forward * 200 + '0 0 64';
            spot = vehicles_findgoodexit(spot);
            setorigin(self.owner , spot);
index 3d809e2425714cf3ce3b5fc74290223681d46aae..913e3316f012ecd2280611c1a2a05c6c6c4b0186 100644 (file)
@@ -450,10 +450,12 @@ void spiderbot_exit(float eject)
            spot = vehicles_findgoodexit(spot);
            setorigin(self.owner , spot);
            self.owner.velocity = (v_up + v_forward * 0.25) * 750;
+           self.owner.oldvelocity = self.owner.velocity;
        }
        else
        {
-           self.owner.velocity = '0 0 0';
+           self.owner.velocity = normalize(self.velocity) * autocvar_sv_maxairspeed;
+           self.owner.oldvelocity = self.owner.velocity;           
            spot = self.origin - v_forward * 200 + '0 0 64';
            spot = vehicles_findgoodexit(spot);
            setorigin(self.owner , spot);