Adding a Camera Bone to a Viewmodel
a camera bone is a bone inside of your ViewModel which can be animated to control the movement of the camera with animations. You can have cool results like a camera shake when reloading.
adding it is super easy all you will need to do is go inside of view.cpp
and right underneath this section of code inside of the void CViewRender::Render( vrect_t *rect ) function
int flags = 0;
if( eEye == STEREO_EYE_MONO || eEye == STEREO_EYE_LEFT || ( g_ClientVirtualReality.ShouldRenderHUDInWorld() ) )
{
flags = RENDERVIEW_DRAWHUD;
}
if ( drawViewModel )
{
flags |= RENDERVIEW_DRAWVIEWMODEL;
}
if( eEye == STEREO_EYE_RIGHT )
{
// we should use the monitor view from the left eye for both eyes
flags |= RENDERVIEW_SUPPRESSMONITORRENDERING;
}
add the following code
//--------------------------------
// Handle camera anims
//--------------------------------
if (!UseVR() && pPlayer && cl_camera_anim_intensity.GetFloat() > 0)
{
if (pPlayer->GetViewModel(0))
{
int attachment = pPlayer->GetViewModel(0)->LookupAttachment("camera");
if (attachment != -1)
{
int rootBone = pPlayer->GetViewModel(0)->LookupAttachment("camera_root");
Vector cameraOrigin = Vector(0, 0, 0);
QAngle cameraAngles = QAngle(0, 0, 0);
Vector rootOrigin = Vector(0, 0, 0);
QAngle rootAngles = QAngle(0, 0, 0);
pPlayer->GetViewModel(0)->GetAttachmentLocal(attachment, cameraOrigin, cameraAngles);
if (rootBone != -1)
{
pPlayer->GetViewModel(0)->GetAttachmentLocal(rootBone, rootOrigin, rootAngles);
cameraOrigin -= rootOrigin;
cameraAngles -= rootAngles;
DevMsg("camera attachment found\n");
}
view.angles += cameraAngles * cl_camera_anim_intensity.GetFloat();
view.origin += cameraOrigin * cl_camera_anim_intensity.GetFloat();
}
}
}
next to fix the cl_camera_anim_intensity go to ConVar zoom_sensitivity_ratio inside of view.cpp
and add the following below it
ConVar cl_camera_anim_intensity("cl_camera_anim_intensity", "1.0", FCVAR_ARCHIVE, "intensity of the cammera animation");
and you are done!
please remember that you need to have 2 camera bones inside of your ViewModel one is stationary the other is the one you will animate the one that's stationary you will need to make an attachment inside of the ViewModel called "camera_root" and attach it to the stationary bone.
the other that you are going to animate should have an attachment called "camera".
remember that the bones should be at the center of the ViewModel where the player is supposed to see the ViewModel with his camera
here is an example of what it looks like in action: https://www.youtube.com/watch?v=WnW0vXmUBp4
have fun!