//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CAntlionGrub::Spawn( void ) { Precache(); BaseClass::Spawn(); SetModel( ANTLIONGRUB_MODEL ); // FIXME: This is a big perf hit with the number of grubs we're using! - jdw CreateGlow(); SetSolid( SOLID_BBOX ); SetSolidFlags( FSOLID_TRIGGER ); SetMoveType( MOVETYPE_NONE ); SetCollisionGroup( COLLISION_GROUP_NONE ); AddEffects( EF_NOSHADOW ); CollisionProp()->UseTriggerBounds(true,1); SetTouch( &CAntlionGrub::GrubTouch ); SetHealth( 1 ); m_takedamage = DAMAGE_YES; // Stick to the nearest surface if ( HasSpawnFlags( SF_ANTLIONGRUB_NO_AUTO_PLACEMENT ) == false ) { AttachToSurface(); } // At this point, alter our bounds to make sure we're within them Vector vecMins, vecMaxs; RotateAABB( EntityToWorldTransform(), CollisionProp()->OBBMins(), CollisionProp()->OBBMaxs(), vecMins, vecMaxs ); UTIL_SetSize( this, vecMins, vecMaxs ); // Start our idle activity SetSequence( SelectWeightedSequence( ACT_IDLE ) ); SetCycle( random->RandomFloat( 0.0f, 1.0f ) ); ResetSequenceInfo(); m_State = GRUB_STATE_IDLE; // Reset m_flFlinchTime = 0.0f; m_flNextIdleSoundTime = gpGlobals->curtime + random->RandomFloat( 4.0f, 8.0f ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CNPC_AntlionGrub::Spawn( void ) { Precache(); SetModel( ANTLIONGRUB_MODEL ); m_NPCState = NPC_STATE_NONE; m_iHealth = sk_antliongrub_health.GetFloat(); m_iMaxHealth = m_iHealth; m_flFieldOfView = 0.5f; SetSolid( SOLID_BBOX ); SetMoveType( MOVETYPE_NONE ); SetCollisionGroup( COLLISION_GROUP_DEBRIS ); SetHullSizeNormal(); SetHullType( HULL_SMALL_CENTERED ); SetBloodColor( BLOOD_COLOR_YELLOW ); CapabilitiesClear(); m_flNextVoiceChange = gpGlobals->curtime; m_flSquashTime = gpGlobals->curtime; m_flNearTime = gpGlobals->curtime; m_flHealthTime = gpGlobals->curtime; m_flEnemyHostileTime = gpGlobals->curtime; m_bMoving = false; m_bSquashed = false; m_bSquashValid = false; m_bHealing = false; m_nHealthReserve = 10; SetTouch( GrubTouch ); // Attach to the surface under our belly AttachToSurface(); // Use detailed collision because we're an odd shape CollisionProp()->SetSurroundingBoundsType( USE_HITBOXES ); /* CSoundEnvelopeController &controller = CSoundEnvelopeController::GetController(); CPASAttenuationFilter filter( this ); m_pMovementSound = controller.SoundCreate( filter, entindex(), CHAN_BODY, "NPC_Antlion.Movement", 3.9f ); m_pVoiceSound = controller.SoundCreate( filter, entindex(), CHAN_VOICE, "NPC_Antlion.Voice", 3.9f ); m_pHealSound = controller.SoundCreate( filter, entindex(), CHAN_STATIC, "NPC_Antlion.Heal", 3.9f ); controller.Play( m_pMovementSound, 0.0f, 100 ); controller.Play( m_pVoiceSound, 0.0f, 100 ); controller.Play( m_pHealSound, 0.0f, 100 ); */ m_pGlowSprite = CSprite::SpriteCreate( "sprites/blueflare1.vmt", GetLocalOrigin(), false ); Assert( m_pGlowSprite ); if ( m_pGlowSprite == NULL ) return; Vector vecUp; GetVectors( NULL, NULL, &vecUp ); m_pGlowSprite->TurnOn(); m_pGlowSprite->SetTransparency( kRenderWorldGlow, 156, 169, 121, 164, kRenderFxNoDissipation ); m_pGlowSprite->SetAbsOrigin( GetAbsOrigin() + vecUp * 8.0f ); m_pGlowSprite->SetScale( 1.0f ); m_pGlowSprite->SetGlowProxySize( 16.0f ); // We don't want to teleport at this point AddSpawnFlags( SF_NPC_FALL_TO_GROUND ); // We get a bogus error otherwise NPCInit(); AddSolidFlags( FSOLID_TRIGGER ); }