From: Mario Date: Fri, 24 Jun 2016 23:10:50 +0000 (+1000) Subject: Merge branch 'master' into Mario/gameover_fixes X-Git-Tag: xonotic-v0.8.2~700^2~101^2 X-Git-Url: http://git.xonotic.org/?a=commitdiff_plain;h=1237e104131b37576287fddcbee29a0fe8806f9c;hp=a7bdc71738ce2bcabf678c3c78d45baf928d4261;p=xonotic%2Fxonotic-data.pk3dir.git Merge branch 'master' into Mario/gameover_fixes --- diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index dea35012a..9a136cdae 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -1193,6 +1193,7 @@ seta cl_forcemyplayermodel "" "set to the model file name you want to show yours seta cl_forcemyplayerskin 0 "set to the skin number you want to show yourself as (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 (ignored in teamplay; does not affect how enemies look with cl_forceplayermodels)" seta cl_movement_errorcompensation 1 "try to compensate for prediction errors and reduce preceived lag" +seta cl_movement_intermissionrunning 0 "keep velocity after the match ends, players may appear to continue running while stationary" // campaign internal, set when loading a campaign map1G set _campaign_index "" diff --git a/qcsrc/client/player_skeleton.qc b/qcsrc/client/player_skeleton.qc index c8abdc6f5..85a798f3f 100644 --- a/qcsrc/client/player_skeleton.qc +++ b/qcsrc/client/player_skeleton.qc @@ -178,7 +178,7 @@ void skeleton_from_frames(entity e, bool is_dead) if(!is_dead) { - if(e == csqcplayer) + if(e == csqcplayer && !intermission) e.v_angle_x = input_angles_x; int i; for(i = 0; i < MAX_AIM_BONES; ++i) diff --git a/qcsrc/common/csqcmodel_settings.qh b/qcsrc/common/csqcmodel_settings.qh index ff890afec..82662fc41 100644 --- a/qcsrc/common/csqcmodel_settings.qh +++ b/qcsrc/common/csqcmodel_settings.qh @@ -21,6 +21,8 @@ .float tag_networkviewloc; # define MOVETYPE_NAME move_movetype + +# define GAMEOVER intermission #else # define TAG_ENTITY_NAME tag_entity # define TAG_ENTITY_TYPE entity @@ -29,6 +31,8 @@ # define TAG_VIEWLOC_TYPE entity # define MOVETYPE_NAME movetype + +# define GAMEOVER gameover #endif // new fields @@ -62,7 +66,9 @@ CSQCMODEL_PROPERTY(BIT(9), float, ReadChar, WriteChar, anim_upper_action) \ CSQCMODEL_PROPERTY(BIT(9), float, ReadApproxPastTime, WriteApproxPastTime, anim_upper_time) \ CSQCMODEL_ENDIF \ - CSQCMODEL_PROPERTY(BIT(10), float, ReadAngle, WriteAngle, v_angle_x) \ + CSQCMODEL_IF(!GAMEOVER) \ + CSQCMODEL_PROPERTY(BIT(10), float, ReadAngle, WriteAngle, v_angle_x) \ + CSQCMODEL_ENDIF \ CSQCMODEL_PROPERTY(BIT(11), int, ReadByte, WriteByte, traileffect) \ CSQCMODEL_PROPERTY_SCALED(BIT(12), float, ReadByte, WriteByte, scale, 16, 0, 255) \ CSQCMODEL_PROPERTY(BIT(13), int, ReadInt24_t, WriteInt24_t, dphitcontentsmask) \ diff --git a/qcsrc/lib/csqcmodel/cl_player.qc b/qcsrc/lib/csqcmodel/cl_player.qc index 0b0de7564..3b4c5fe69 100644 --- a/qcsrc/lib/csqcmodel/cl_player.qc +++ b/qcsrc/lib/csqcmodel/cl_player.qc @@ -35,6 +35,7 @@ #include float autocvar_cl_movement_errorcompensation = 0; +bool autocvar_cl_movement_intermissionrunning = false; // engine stuff float pmove_onground; // weird engine flag we shouldn't really use but have to for now @@ -254,7 +255,7 @@ void CSQCPlayer_SetViewLocation() /** Called once per CSQC_UpdateView() */ void CSQCPlayer_SetCamera() { - const vector v0 = pmove_vel; // TRICK: pmove_vel is set by the engine when we get here. No need to network velocity + const vector v0 = ((intermission && autocvar_cl_movement_intermissionrunning) ? '0 0 0' : pmove_vel); // TRICK: pmove_vel is set by the engine when we get here. No need to network velocity const float vh = STAT(VIEWHEIGHT); const vector pl_viewofs = STAT(PL_VIEW_OFS, NULL); const vector pl_viewofs_crouch = STAT(PL_CROUCH_VIEW_OFS, NULL); diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index c959bafd0..f2eb1d118 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -1299,6 +1299,7 @@ When the player presses attack or jump, change to the next level void IntermissionThink(entity this) { FixIntermissionClient(this); + CSQCMODEL_AUTOUPDATE(this); // PlayerPostThink returns before calling this during intermission, so run it here float server_screenshot = (autocvar_sv_autoscreenshot && this.cvar_cl_autoscreenshot); float client_screenshot = (this.cvar_cl_autoscreenshot == 2);