Multiplayer Vehicle Fixes: Difference between revisions
TomEdwards (talk | contribs) m (recat) |
|||
Line 41: | Line 41: | ||
Open '''cl_dll/c_prop_vehicle.cpp''' | Open '''cl_dll/c_prop_vehicle.cpp''' | ||
<br>(Note: As Of 7/05/2009 Using the Orange Box Source SDK from a scratch build this section is in file vehicle_viewblend_shared.cpp -- line 291 of function "void SharedVehicleViewSmoothing". I suspect this does not need to be changed due to the fact the next step calls the SharedVehicleViewSmoothing function in c_prop_vehicle.cpp --Digi ) | |||
Find void VehicleViewSmoothing | Find void VehicleViewSmoothing | ||
Line 75: | Line 76: | ||
Find C_PropVehicleDriveable::GetVehicleViewPosition | Find C_PropVehicleDriveable::GetVehicleViewPosition | ||
<br>(Note: As Of 7/05/2009 Using the Orange Box Source SDK from a scratch build this section is in void C_PropVehicleDriveable::GetVehicleViewPosition and is called | |||
<pre> SharedVehicleViewSmoothing( m_hPlayer, pAbsOrigin, pAbsAngles, m_bEnterAnimOn, m_bExitAnimOn, m_vecEyeExitEndpoint, &m_ViewSmoothingData, pFOV ); </pre> This part calls the part listed above so I doubt it is needed to do the step listed above for Orange Box. --Digi) | |||
Revision as of 01:22, 5 July 2009
These fixes are to correct some issues with using Valves vehicle code in a multiplayer game. A true way of doing vehicles in Source Multiplayer would be to write prediction code for the client, but this is not possible with the current engine. The only other option would be to write your own vehicle movement code, which is no easy task for complicated vehicles like the buggy. Research was made into the possibility of predicted physics simulations between the server and client with poor results. Half-Life 2 Rally closed 27 Dec 2006 and has written a list of critical problems they experienced here.
Laggy Vehicle View
A couple of changes will fix the laggy view, but present different issues. One being the cameras position no longer interpolating to where it should.
Open cl_dll/c_prop_vehicle.cpp
Find C_PropVehicleDriveable::C_PropVehicleDriveable() constructor.
Replace
m_ViewSmoothingData.bDampenEyePosition = true;
with
m_ViewSmoothingData.bDampenEyePosition = false;
Open cl_dll/c_prop_vehicle.h
In class C_PropVehicleDriveable replace
virtual bool IsPredicted() const { return false; }
with
virtual bool IsPredicted() const { return true; }
Vehicle Camera affecting other players
A simple fix is to make sure the vehicles view changes only affect the local player.
Open cl_dll/c_prop_vehicle.cpp
(Note: As Of 7/05/2009 Using the Orange Box Source SDK from a scratch build this section is in file vehicle_viewblend_shared.cpp -- line 291 of function "void SharedVehicleViewSmoothing". I suspect this does not need to be changed due to the fact the next step calls the SharedVehicleViewSmoothing function in c_prop_vehicle.cpp --Digi )
Find void VehicleViewSmoothing
Replace
if ( !bExitAnimOn ) { Vector localEyeOrigin; QAngle localEyeAngles; pData->pVehicle->GetAttachmentLocal( eyeAttachmentIndex, localEyeOrigin, localEyeAngles ); engine->SetViewAngles( localEyeAngles ); }
with
if ( pPlayer->IsLocalPlayer() ) { if ( !bExitAnimOn ) { Vector localEyeOrigin; QAngle localEyeAngles; pData->pVehicle->GetAttachmentLocal( eyeAttachmentIndex, localEyeOrigin, localEyeAngles ); engine->SetViewAngles( localEyeAngles ); } }
Find C_PropVehicleDriveable::GetVehicleViewPosition
(Note: As Of 7/05/2009 Using the Orange Box Source SDK from a scratch build this section is in void C_PropVehicleDriveable::GetVehicleViewPosition and is called
SharedVehicleViewSmoothing( m_hPlayer, pAbsOrigin, pAbsAngles, m_bEnterAnimOn, m_bExitAnimOn, m_vecEyeExitEndpoint, &m_ViewSmoothingData, pFOV );
This part calls the part listed above so I doubt it is needed to do the step listed above for Orange Box. --Digi)
Replace
VehicleViewSmoothing( m_hPlayer, pAbsOrigin, pAbsAngles, m_bEnterAnimOn, m_bExitAnimOn, &m_vecEyeExitEndpoint, &m_ViewSmoothingData, &m_flFOV );
with
if( m_hPlayer->IsLocalPlayer() ) { VehicleViewSmoothing( m_hPlayer, pAbsOrigin, pAbsAngles, m_bEnterAnimOn, m_bExitAnimOn, &m_vecEyeExitEndpoint, &m_ViewSmoothingData, &m_flFOV ); }