General SDK Snippets & Fixes
Remove Head Crab
How to Remove HeadCrab from zombie
in hl2_dll\npc_zombie.cpp look for void CZombie::Spawn( void ) then find this line.
m_fIsHeadless = false;
and simply change it to read this
m_fIsHeadless = true;
Now open hl2_dll\npc_BaseZombie.cpp and change this section to look like this.
//-----------------------------------------------------------------------------
// Purpose: A zombie has taken damage. Determine whether he release his headcrab.
// Output : YES, IMMEDIATE, or SCHEDULED (see HeadcrabRelease_t)
//-----------------------------------------------------------------------------
HeadcrabRelease_t CNPC_BaseZombie::ShouldReleaseHeadcrab( const CTakeDamageInfo &info, float flDamageThreshold )
{
return ( m_iHealth <= 0 && m_fIsTorso && IsChopped( info ) )?RELEASE_RAGDOLL_SLICED_OFF:RELEASE_NO;
}
Working CS:S Muzzle Flashes without Model Editing
In c_baseanimating.cpp, at line 3024 (after the big switch statement), comment out the code so it looks like this
if ( iAttachment != -1 && m_Attachments.Count() > iAttachment )
{
/*
GetAttachment( iAttachment+1, attachOrigin, attachAngles );
int entId = render->GetViewEntity();
ClientEntityHandle_t hEntity = ClientEntityList().EntIndexToHandle( entId );
tempents->MuzzleFlash( attachOrigin, attachAngles, atoi( options ), hEntity, bFirstPerson );
*/
}
and insert the following code after the comment.
if ( input->CAM_IsThirdPerson() )
{
C_BaseCombatWeapon *pWeapon = GetActiveWeapon();
pWeapon->GetAttachment( iAttachment+1, attachOrigin, attachAngles );
}
else
{
C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer();
CBaseViewModel *vm = pPlayer->GetViewModel();
vm->GetAttachment( iAttachment+1, attachOrigin, attachAngles );
engine->GetViewAngles( attachAngles );
}
g_pEffects->MuzzleFlash( attachOrigin, attachAngles, 1.0, MUZZLEFLASH_TYPE_DEFAULT );
Go to fx.cpp, under the statement pParticle->m_vecVelocity.Init(); in FX_MuzzleFlash, place the following code.
C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer(); Vector velocity = pPlayer->GetLocalVelocity(); pParticle->m_vecVelocity += velocity;
Crossbow Bolt going through glass (func_breakable)
Open weapon_crossbow.cpp
In CCrossbowBolt::BoltTouch( CBaseEntity *pOther ) After :
if ( pOther->GetCollisionGroup() == COLLISION_GROUP_BREAKABLE_GLASS )
return;
Insert the following code :
if(Q_strcmp(pOther->GetClassname(), "func_breakable") == 0)
{
CBreakable* pOtherEntity = static_cast<CBreakable*> (pOther);
if(pOtherEntity->GetMaterialType() == 0)
return;
}
Ignite Your Ragdolls
In your player's class (CSDKPlayer or CBasePlayer) find the Event_Killed() function. Add this inside of it:
if( info.GetDamageType() & (DMG_BLAST|DMG_BURN) )
{
if( m_hRagdoll )
{
CBaseAnimating *pRagdoll = (CBaseAnimating *)CBaseEntity::Instance(m_hRagdoll);
if( info.GetDamageType() & (DMG_BURN|DMG_BLAST) )
{
pRagdoll->Ignite(45, false, 10 );
}
}
}
If you don't have a ragdoll to ignite before that is called, make sure that code is placed after a call to CreateRagdollEntity(). If you're not doing that, add it in right above the
if( info.GetDamageType() & (DMG_BLAST|DMG_BURN) )
line.