Last active
August 14, 2017 19:10
-
-
Save kyokyoknutt/8e6607d78409637fa9ac069c482eb303 to your computer and use it in GitHub Desktop.
[Source 2013 MP] Wanna edit how your weapon bobs when moving? Lookie here.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#if defined( CLIENT_DLL ) | |
//here for compatability purposes | |
#define HL2_BOB_CYCLE_MIN 1.5f | |
#define HL2_BOB_CYCLE_MAX 0.45f | |
#define HL2_BOB 0.002f | |
#define HL2_BOB_UP 0.5f | |
extern float g_lateralBob; | |
extern float g_verticalBob; | |
static ConVar cl_bobcyclemin( "cl_bobcyclemin","1.5" ); | |
static ConVar cl_bobcyclemax("cl_bobcyclemax", "0.45"); | |
static ConVar cl_bob( "cl_bob","1" ); | |
static ConVar cl_bobroll("cl_bobroll", "1"); | |
static ConVar cl_bobpitch("cl_bobpitch", "1"); | |
static ConVar cl_bobyaw("cl_bobyaw", "1"); | |
static ConVar cl_bobup( "cl_bobup","0.5" ); | |
// Register these cvars if needed for easy tweaking | |
static ConVar v_iyaw_cycle( "v_iyaw_cycle", "2", FCVAR_REPLICATED | FCVAR_CHEAT ); | |
static ConVar v_iroll_cycle( "v_iroll_cycle", "0.5", FCVAR_REPLICATED | FCVAR_CHEAT ); | |
static ConVar v_ipitch_cycle( "v_ipitch_cycle", "1", FCVAR_REPLICATED | FCVAR_CHEAT ); | |
static ConVar v_iyaw_level( "v_iyaw_level", "0.3", FCVAR_REPLICATED | FCVAR_CHEAT ); | |
static ConVar v_iroll_level( "v_iroll_level", "0.1", FCVAR_REPLICATED | FCVAR_CHEAT ); | |
static ConVar v_ipitch_level( "v_ipitch_level", "0.3", FCVAR_REPLICATED | FCVAR_CHEAT ); | |
//----------------------------------------------------------------------------- | |
// Purpose: | |
// Output : float | |
//----------------------------------------------------------------------------- | |
float CBaseHL2MPCombatWeapon::CalcViewmodelBob( void ) | |
{ | |
static float bobtime; | |
static float lastbobtime; | |
float cycle; | |
CBasePlayer *player = ToBasePlayer( GetOwner() ); | |
//Assert( player ); | |
//NOTENOTE: For now, let this cycle continue when in the air, because it snaps badly without it | |
if ( ( !gpGlobals->frametime ) || ( player == NULL ) ) | |
{ | |
//NOTENOTE: We don't use this return value in our case (need to restructure the calculation function setup!) | |
return 0.0f;// just use old value | |
} | |
//Find the speed of the player | |
float speed = player->GetLocalVelocity().Length2D(); | |
//FIXME: This maximum speed value must come from the server. | |
// MaxSpeed() is not sufficient for dealing with sprinting - jdw | |
speed = clamp( speed, -320, 320 ); | |
float bob_offset = RemapVal( speed, 0, 320, 0.0f, 1.0f ); | |
bobtime += ( gpGlobals->curtime - lastbobtime ) * bob_offset; | |
lastbobtime = gpGlobals->curtime; | |
//Calculate the vertical bob | |
cycle = bobtime - (int)(bobtime/cl_bobcyclemax.GetFloat())*cl_bobcyclemax.GetFloat(); | |
cycle /= cl_bobcyclemax.GetFloat(); | |
if ( cycle < cl_bobup.GetFloat() ) | |
{ | |
cycle = M_PI * cycle / cl_bobup.GetFloat(); | |
} | |
else | |
{ | |
cycle = M_PI + M_PI*(cycle-cl_bobup.GetFloat())/(1.0 - cl_bobup.GetFloat()); | |
} | |
g_verticalBob = speed*0.005f; | |
g_verticalBob = g_verticalBob*0.3 + g_verticalBob*0.7*sin(cycle); | |
g_verticalBob = clamp( g_verticalBob, -7.0f, 4.0f ); | |
//Calculate the lateral bob | |
cycle = bobtime - (int)(bobtime/cl_bobcyclemax.GetFloat()*2)*cl_bobcyclemax.GetFloat()*2; | |
cycle /= cl_bobcyclemax.GetFloat()*2; | |
if ( cycle < cl_bobup.GetFloat() ) | |
{ | |
cycle = M_PI * cycle / cl_bobup.GetFloat(); | |
} | |
else | |
{ | |
cycle = M_PI + M_PI*(cycle-cl_bobup.GetFloat())/(1.0 - cl_bobup.GetFloat()); | |
} | |
g_lateralBob = speed*0.005f; | |
g_lateralBob = g_lateralBob*0.3 + g_lateralBob*0.7*sin(cycle); | |
g_lateralBob = clamp( g_lateralBob, -7.0f, 4.0f ); | |
//NOTENOTE: We don't use this return value in our case (need to restructure the calculation function setup!) | |
return 0.0f; | |
} | |
//----------------------------------------------------------------------------- | |
// Purpose: | |
// Input : &origin - | |
// &angles - | |
// viewmodelindex - | |
//----------------------------------------------------------------------------- | |
void CBaseHL2MPCombatWeapon::AddViewmodelBob( CBaseViewModel *viewmodel, Vector &origin, QAngle &angles ) | |
{ | |
Vector forward, right; | |
AngleVectors( angles, &forward, &right, NULL ); | |
CalcViewmodelBob(); | |
// Apply bob, but scaled down to 40% | |
VectorMA( origin, g_verticalBob * 0.1f, forward, origin ); | |
// Z bob a bit more | |
origin[2] += g_verticalBob * 0.1f; | |
// bob the angles | |
if (cl_bob.GetInt() > 0){ | |
angles[ROLL] += g_verticalBob * 0.5f * cl_bobroll.GetFloat(); | |
angles[PITCH] -= g_verticalBob * 0.4f * cl_bobpitch.GetFloat(); | |
angles[YAW] -= g_lateralBob * 0.6f * cl_bobyaw.GetFloat(); | |
} | |
VectorMA( origin, g_lateralBob * 0.8f, right, origin ); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment