diff --git a/cl_dll/input_xash3d.cpp b/cl_dll/input_xash3d.cpp index 93a7eefb..ec3eb9aa 100644 --- a/cl_dll/input_xash3d.cpp +++ b/cl_dll/input_xash3d.cpp @@ -54,6 +54,8 @@ float rel_pitch; #define IMPULSE_DOWN 2 #define IMPULSE_UP 4 +bool CL_IsDead(); +Vector dead_viewangles(0, 0, 0); void IN_ToggleButtons( float forwardmove, float sidemove ) { @@ -152,51 +154,68 @@ void IN_ClientLookEvent( float relyaw, float relpitch ) void IN_Move( float frametime, usercmd_t *cmd ) { Vector viewangles; - gEngfuncs.GetViewAngles( viewangles ); bool fLadder = false; + + if( gHUD.m_iIntermission ) + return; // we can't move during intermission + if( cl_laddermode->value != 2 ) - fLadder = gEngfuncs.GetLocalPlayer()->curstate.movetype == MOVETYPE_FLY; - //if( ac_forwardmove || ac_sidemove ) - //gEngfuncs.Con_Printf( "Move: %f %f %f %f\n", ac_forwardmove, ac_sidemove, rel_pitch, rel_yaw ); + { + cl_entity_t *pplayer = gEngfuncs.GetLocalPlayer(); + if( pplayer ) + fLadder = pplayer->curstate.movetype == MOVETYPE_FLY; + } + //if(ac_forwardmove || ac_sidemove) + //gEngfuncs.Con_Printf("Move: %f %f %f %f\n", ac_forwardmove, ac_sidemove, rel_pitch, rel_yaw); #if 0 if( in_mlook.state & 1 ) { V_StopPitchDrift(); } #endif - if( !gHUD.m_iIntermission ) + if( CL_IsDead() ) { - if( gHUD.GetSensitivity() != 0 ) - { - rel_yaw *= gHUD.GetSensitivity(); - rel_pitch *= gHUD.GetSensitivity(); - } - else - { - rel_yaw *= sensitivity->value; - rel_pitch *= sensitivity->value; - } - - viewangles[YAW] += rel_yaw; - if( fLadder ) - { - if( cl_laddermode->value == 1 ) - viewangles[YAW] -= ac_sidemove * 5; - ac_sidemove = 0; - } - if( gHUD.m_MOTD.m_bShow ) - gHUD.m_MOTD.scroll += rel_pitch; - else - viewangles[PITCH] += rel_pitch; - if( viewangles[PITCH] > cl_pitchdown->value ) - viewangles[PITCH] = cl_pitchdown->value; - if( viewangles[PITCH] < -cl_pitchup->value ) - viewangles[PITCH] = -cl_pitchup->value; + viewangles = dead_viewangles; // HACKHACK: see below } - float rgfl[3]; - viewangles.CopyToArray( rgfl ); - gEngfuncs.SetViewAngles( rgfl ); + else + { + gEngfuncs.GetViewAngles( viewangles ); + } + if( gHUD.GetSensitivity() != 0 ) + { + rel_yaw *= gHUD.GetSensitivity(); + rel_pitch *= gHUD.GetSensitivity(); + } + else + { + rel_yaw *= sensitivity->value; + rel_pitch *= sensitivity->value; + } + viewangles[YAW] += rel_yaw; + if( fLadder ) + { + if( cl_laddermode->value == 1 ) + viewangles[YAW] -= ac_sidemove * 5; + ac_sidemove = 0; + } + if( gHUD.m_MOTD.m_bShow ) + gHUD.m_MOTD.scroll += rel_pitch; + else + viewangles[PITCH] += rel_pitch; + if( viewangles[PITCH] > cl_pitchdown->value ) + viewangles[PITCH] = cl_pitchdown->value; + if( viewangles[PITCH] < -cl_pitchup->value ) + viewangles[PITCH] = -cl_pitchup->value; + + // HACKHACK: change viewangles directly in viewcode, + // so viewangles when player is dead will not be changed on server + if( !CL_IsDead() ) + { + gEngfuncs.SetViewAngles( viewangles ); + } + + dead_viewangles = viewangles; // keep them actual if( ac_movecount ) { IN_ToggleButtons( ac_forwardmove / ac_movecount, ac_sidemove / ac_movecount ); @@ -204,13 +223,13 @@ void IN_Move( float frametime, usercmd_t *cmd ) cmd->forwardmove = ac_forwardmove * cl_forwardspeed->value / ac_movecount; if( ac_sidemove ) cmd->sidemove = ac_sidemove * cl_sidespeed->value / ac_movecount; - if(in_speed.state & 1) + if( in_speed.state & 1 ) { cmd->forwardmove *= cl_movespeedkey->value; cmd->sidemove *= cl_movespeedkey->value; } } - + ac_sidemove = ac_forwardmove = rel_pitch = rel_yaw = 0; ac_movecount = 0; } diff --git a/cl_dll/view.cpp b/cl_dll/view.cpp index 401f2c68..b581cc82 100644 --- a/cl_dll/view.cpp +++ b/cl_dll/view.cpp @@ -78,6 +78,7 @@ extern cvar_t *cl_forwardspeed; extern cvar_t *chase_active; extern cvar_t *scr_ofsx, *scr_ofsy, *scr_ofsz; extern cvar_t *cl_vsmoothing; +extern Vector dead_viewangles; #define CAM_MODE_RELAX 1 #define CAM_MODE_FOCUS 2 @@ -429,7 +430,7 @@ void V_CalcNormalRefdef( struct ref_params_s *pparams ) ent = gEngfuncs.GetLocalPlayer(); } - // view is the weapon model (only visible from inside body ) + // view is the weapon model (only visible from inside body) view = gEngfuncs.GetViewModel(); // transform the view offset by the model's matrix to get the offset from @@ -441,7 +442,14 @@ void V_CalcNormalRefdef( struct ref_params_s *pparams ) pparams->vieworg[2] += bob ; VectorAdd( pparams->vieworg, pparams->viewheight, pparams->vieworg ); - VectorCopy( pparams->cl_viewangles, pparams->viewangles ); + if( pparams->health <= 0 ) + { + VectorCopy( dead_viewangles, pparams->viewangles ); + } + else + { + VectorCopy( pparams->cl_viewangles, pparams->viewangles ); + } gEngfuncs.V_CalcShake(); gEngfuncs.V_ApplyShake( pparams->vieworg, pparams->viewangles, 1.0 ); @@ -519,7 +527,14 @@ void V_CalcNormalRefdef( struct ref_params_s *pparams ) V_AddIdle( pparams ); // offsets - VectorCopy( pparams->cl_viewangles, angles ); + if ( pparams->health <= 0 ) + { + VectorCopy( dead_viewangles, angles ); + } + else + { + VectorCopy( pparams->cl_viewangles, angles ); + } AngleVectors( angles, pparams->forward, pparams->right, pparams->up ); @@ -553,8 +568,14 @@ void V_CalcNormalRefdef( struct ref_params_s *pparams ) } // Give gun our viewangles - VectorCopy( pparams->cl_viewangles, view->angles ); - + if( pparams->health <= 0 ) + { + VectorCopy( dead_viewangles, view->angles ); + } + else + { + VectorCopy( pparams->cl_viewangles, view->angles ); + } // set up gun position V_CalcGunAngle( pparams ); @@ -616,6 +637,7 @@ void V_CalcNormalRefdef( struct ref_params_s *pparams ) float steptime; steptime = pparams->time - lasttime; + if( steptime < 0 ) //FIXME I_Error( "steptime < 0" ); steptime = 0; diff --git a/dlls/gauss.cpp b/dlls/gauss.cpp index 46415182..db806eb3 100644 --- a/dlls/gauss.cpp +++ b/dlls/gauss.cpp @@ -579,7 +579,9 @@ void CGauss::WeaponIdle( void ) iAnim = GAUSS_FIDGET; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 3; } +#ifndef CLIENT_DLL SendWeaponAnim( iAnim ); +#endif } }