//----------------------------------------------------------------------------- // Creates the explosion effect //----------------------------------------------------------------------------- void CEnvHeadcrabCanister::Detonate( ) { // Send the impact output m_OnImpacted.FireOutput( this, this, 0 ); if ( !HasSpawnFlags( SF_NO_IMPACT_SOUND ) ) { StopSound( "HeadcrabCanister.IncomingSound" ); EmitSound( "HeadcrabCanister.Explosion" ); } // If we're supposed to be removed, do that now if ( HasSpawnFlags( SF_REMOVE_ON_IMPACT ) ) { SetAbsOrigin( m_vecImpactPosition ); SetModel( ENV_HEADCRABCANISTER_BROKEN_MODEL ); SetMoveType( MOVETYPE_NONE ); IncrementInterpolationFrame(); m_bLanded = true; // Become invisible so our trail can finish up AddEffects( EF_NODRAW ); SetSolidFlags( FSOLID_NOT_SOLID ); SetThink( &CEnvHeadcrabCanister::SUB_Remove ); SetNextThink( gpGlobals->curtime + ENV_HEADCRABCANISTER_TRAIL_TIME ); return; } // Test for damaging things TestForCollisionsAgainstWorld( m_vecImpactPosition ); // Shake the screen unless flagged otherwise if ( !HasSpawnFlags( SF_NO_SHAKE ) ) { CBasePlayer *pPlayer = UTIL_GetNearestPlayer(GetAbsOrigin()); // If the player is on foot, then do a more limited shake float shakeRadius = ( pPlayer && pPlayer->IsInAVehicle() ) ? sk_env_headcrabcanister_shake_radius_vehicle.GetFloat() : sk_env_headcrabcanister_shake_radius.GetFloat(); UTIL_ScreenShake( m_vecImpactPosition, sk_env_headcrabcanister_shake_amplitude.GetFloat(), 150.0, 1.0, shakeRadius, SHAKE_START ); } // Do explosion effects if ( !HasSpawnFlags( SF_NO_IMPACT_EFFECTS ) ) { // Normal explosion ExplosionCreate( m_vecImpactPosition, GetAbsAngles(), this, 50.0f, 500.0f, SF_ENVEXPLOSION_NODLIGHTS | SF_ENVEXPLOSION_NOSPARKS | SF_ENVEXPLOSION_NODAMAGE | SF_ENVEXPLOSION_NOSOUND, 1300.0f ); // Dust explosion AR2Explosion *pExplosion = AR2Explosion::CreateAR2Explosion( m_vecImpactPosition ); if( pExplosion ) { pExplosion->SetLifetime(10); } } }
//----------------------------------------------------------------------------- // Purpose: Spawns this entitye //----------------------------------------------------------------------------- void CTFFlameEntity::Spawn( void ) { BaseClass::Spawn(); // don't collide with anything, we do our own collision detection in our think method SetSolid( SOLID_NONE ); SetSolidFlags( FSOLID_NOT_SOLID ); SetCollisionGroup( COLLISION_GROUP_NONE ); // move noclip: update position from velocity, that's it SetMoveType( MOVETYPE_NOCLIP, MOVECOLLIDE_DEFAULT ); AddEFlags( EFL_NO_WATER_VELOCITY_CHANGE ); float flBoxSize = tf_flamethrower_boxsize.GetFloat(); CALL_ATTRIB_HOOK_FLOAT_ON_OTHER( GetOwnerEntity(), flBoxSize, mult_flame_size ); UTIL_SetSize( this, -Vector( flBoxSize, flBoxSize, flBoxSize ), Vector( flBoxSize, flBoxSize, flBoxSize ) ); // Setup attributes. m_takedamage = DAMAGE_NO; m_vecInitialPos = GetAbsOrigin(); m_vecPrevPos = m_vecInitialPos; m_flTimeRemove = gpGlobals->curtime + ( tf_flamethrower_flametime.GetFloat() * random->RandomFloat( 0.9, 1.1 ) ); m_hLauncher = dynamic_cast<CTFFlameThrower *>( GetOwnerEntity() ); // Setup the think function. SetThink( &CTFFlameEntity::FlameThink ); SetNextThink( gpGlobals->curtime ); }
void CBaseGrenadeProjectile::Spawn( void ) { BaseClass::Spawn(); SetSolidFlags( FSOLID_NOT_STANDABLE ); SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_CUSTOM ); SetSolid( SOLID_BBOX ); // So it will collide with physics props! // smaller, cube bounding box so we rest on the ground SetSize( Vector ( -2, -2, -2 ), Vector ( 2, 2, 2 ) ); }
void CReplayPlayer::Spawn( void ) { SetClassname("replay_player"); Precache(); SetSolidFlags(FSOLID_NOT_SOLID); SetModel( SDK_PLAYER_MODEL ); SetSolid( SOLID_BBOX ); UTIL_SetSize( this, -Vector(20,20,20), Vector(20,20,20) ); SetSimulatedEveryTick(true); SetAnimatedEveryTick(true); SetThink(&CReplayPlayer::Think); SetNextThink(gpGlobals->curtime); }
void CFunc_LiquidPortal::Spawn( void ) { BaseClass::Spawn(); SetSolid( SOLID_VPHYSICS ); SetSolidFlags( FSOLID_NOT_SOLID ); SetMoveType( MOVETYPE_NONE ); SetModel( STRING( GetModelName() ) ); CBaseEntity *pBaseEnt = gEntList.FindEntityByName( NULL, STRING(m_strInitialLinkedPortal) ); Assert( (pBaseEnt == NULL) || (dynamic_cast<CFunc_LiquidPortal *>(pBaseEnt) != NULL) ); SetLinkedLiquidPortal( (CFunc_LiquidPortal *)pBaseEnt ); SetThink( &CFunc_LiquidPortal::Think ); }
//----------------------------------------------------------------------------- // 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 ); }
void CBaseGrenadeProjectile::Spawn( void ) { BaseClass::Spawn(); SetSolidFlags( FSOLID_NOT_STANDABLE ); SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_CUSTOM ); SetSolid( SOLID_BBOX ); // So it will collide with physics props! // smaller, cube bounding box so we rest on the ground SetSize( Vector ( -2, -2, -2 ), Vector ( 2, 2, 2 ) ); SetCollisionGroup( COLLISION_GROUP_WEAPON ); CreateVPhysics(); //Tony; bit of a hack for the sdk, the CS grenade is really heavy for some reason. if ( VPhysicsGetObject() ) VPhysicsGetObject()->SetMass( 5 ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CGrenadeSpit::Spawn( void ) { Precache( ); SetSolid( SOLID_BBOX ); SetMoveType( MOVETYPE_FLYGRAVITY ); SetSolidFlags( FSOLID_NOT_STANDABLE ); SetModel( "models/spitball_large.mdl" ); UTIL_SetSize( this, vec3_origin, vec3_origin ); SetUse( &CBaseGrenade::DetonateUse ); SetTouch( &CGrenadeSpit::GrenadeSpitTouch ); SetNextThink( gpGlobals->curtime + 0.1f ); m_flDamage = sk_antlion_worker_spit_grenade_dmg.GetFloat(); m_DmgRadius = sk_antlion_worker_spit_grenade_radius.GetFloat(); m_takedamage = DAMAGE_NO; m_iHealth = 1; SetGravity( UTIL_ScaleForGravity( SPIT_GRAVITY ) ); SetFriction( 0.8f ); SetCollisionGroup( HL2COLLISION_GROUP_SPIT ); AddEFlags( EFL_FORCE_CHECK_TRANSMIT ); // We're self-illuminating, so we don't take or give shadows AddEffects( EF_NOSHADOW|EF_NORECEIVESHADOW ); // Create the dust effect in place m_hSpitEffect = (CParticleSystem *) CreateEntityByName( "info_particle_system" ); if ( m_hSpitEffect != NULL ) { // Setup our basic parameters m_hSpitEffect->KeyValue( "start_active", "1" ); m_hSpitEffect->KeyValue( "effect_name", "antlion_spit_trail" ); m_hSpitEffect->SetParent( this ); m_hSpitEffect->SetLocalOrigin( vec3_origin ); DispatchSpawn( m_hSpitEffect ); if ( gpGlobals->curtime > 0.5f ) m_hSpitEffect->Activate(); } }
void CSquidSpit:: Spawn( void ) { Precache(); SetMoveType ( MOVETYPE_FLY ); SetClassname( "squidspit" ); SetSolid( SOLID_BBOX ); SetSolidFlags( FSOLID_NOT_SOLID | FSOLID_TRIGGER ); m_nRenderMode = kRenderTransAlpha; SetRenderColorA( 255 ); SetModel( "" ); SetSprite( CSprite::SpriteCreate( "sprites/bigspit.vmt", GetAbsOrigin(), true ) ); UTIL_SetSize( this, Vector( 0, 0, 0), Vector(0, 0, 0) ); SetCollisionGroup( HL2COLLISION_GROUP_SPIT ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CTFWeaponBaseGrenadeProj::Spawn( void ) { // Base class spawn. BaseClass::Spawn(); // So it will collide with physics props! SetSolidFlags( FSOLID_NOT_STANDABLE ); SetSolid( SOLID_BBOX ); AddEffects( EF_NOSHADOW ); // Set the grenade size here. UTIL_SetSize( this, Vector( -2.0f, -2.0f, -2.0f ), Vector( 2.0f, 2.0f, 2.0f ) ); // Set the movement type. SetCollisionGroup( TF_COLLISIONGROUP_GRENADES ); // Don't collide with players on the owner's team for the first bit of our life m_flCollideWithTeammatesTime = gpGlobals->curtime + 0.25; m_bCollideWithTeammates = false; VPhysicsInitNormal( SOLID_BBOX, 0, false ); m_takedamage = DAMAGE_EVENTS_ONLY; if (GetThrower()) { // Set the team. ChangeTeam(GetThrower()->GetTeamNumber()); } // Set skin based on team ( red = 1, blue = 2 ) m_nSkin = GetTeamNumber() - 2; if ( TFGameRules()->IsDeathmatch() ) // Custom DM skin for coloring m_nSkin = 4; // Setup the think and touch functions (see CBaseEntity). SetThink( &CTFWeaponBaseGrenadeProj::DetonateThink ); SetNextThink( gpGlobals->curtime + 0.2 ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CTFPowerup::Spawn( void ) { BaseClass::Precache(); BaseClass::Spawn(); BaseClass::SetOriginalSpawnOrigin( GetAbsOrigin() ); BaseClass::SetOriginalSpawnAngles( GetAbsAngles() ); VPhysicsDestroyObject(); SetMoveType( MOVETYPE_NONE ); SetSolidFlags( FSOLID_NOT_SOLID | FSOLID_TRIGGER ); if ( m_bDisabled ) { SetDisabled( true ); } m_bRespawning = false; ResetSequence( LookupSequence("idle") ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CASW_Sentry_Top::Spawn( void ) { SetSolid( SOLID_NONE ); SetSolidFlags( 0 ); SetMoveCollide( MOVECOLLIDE_DEFAULT ); SetMoveType( MOVETYPE_NONE ); SetCollisionGroup( COLLISION_GROUP_DEBRIS ); Precache(); SetTopModel(); BaseClass::Spawn(); AddEFlags( EFL_NO_DISSOLVE | EFL_NO_MEGAPHYSCANNON_RAGDOLL | EFL_NO_PHYSCANNON_INTERACTION ); m_fDeployYaw = GetAbsAngles().y; m_fCurrentYaw = GetAbsAngles().y; SetThink( &CASW_Sentry_Top::AnimThink ); SetNextThink( gpGlobals->curtime + 0.01f ); }
//------------------------------------------------------------------------------ // Purpose : // Input : // Output : //------------------------------------------------------------------------------ void C_ColorCorrectionVolume::OnDataChanged(DataUpdateType_t updateType) { BaseClass::OnDataChanged( updateType ); if ( updateType == DATA_UPDATE_CREATED ) { if ( m_CCHandle == INVALID_CLIENT_CCHANDLE ) { // forming a unique name without extension char cleanName[MAX_PATH]; V_StripExtension( m_lookupFilename, cleanName, sizeof( cleanName ) ); char name[MAX_PATH]; Q_snprintf( name, MAX_PATH, "%s_%d", cleanName, entindex() ); m_CCHandle = g_pColorCorrectionMgr->AddColorCorrectionVolume( this, name, m_lookupFilename ); SetSolid( SOLID_BSP ); SetSolidFlags( FSOLID_TRIGGER | FSOLID_NOT_SOLID ); } } }
void CFunc_LiquidPortal::Activate( void ) { BaseClass::Activate(); SetSolid( SOLID_VPHYSICS ); SetSolidFlags( FSOLID_NOT_SOLID ); SetMoveType( MOVETYPE_NONE ); SetModel( STRING( GetModelName() ) ); ComputeLinkMatrix(); //collision origin may have changed during activation SetThink( &CFunc_LiquidPortal::Think ); for( int i = m_hLeftToTeleportThisFill.Count(); --i >= 0; ) { CBaseEntity *pEnt = m_hLeftToTeleportThisFill[i].Get(); if( pEnt && pEnt->IsPlayer() ) { ((CPortal_Player *)pEnt)->m_hSurroundingLiquidPortal = this; } } }
//------------------------------------------------------------------------------ // Purpose : //------------------------------------------------------------------------------ void CColorCorrectionVolume::Spawn( void ) { BaseClass::Spawn(); AddEFlags( EFL_FORCE_CHECK_TRANSMIT | EFL_DIRTY_ABSTRANSFORM ); Precache(); SetSolid( SOLID_BSP ); SetSolidFlags( FSOLID_TRIGGER | FSOLID_NOT_SOLID ); SetModel( STRING( GetModelName() ) ); SetThink( &CColorCorrectionVolume::ThinkFunc ); SetNextThink( gpGlobals->curtime + 0.01f ); if( m_bStartDisabled ) { m_bEnabled = false; } else { m_bEnabled = true; } }
void CASW_Laser_Mine::StartSpawnFlipping( Vector vecStart, Vector vecEnd, QAngle angEnd, float flDuration ) { m_vecSpawnFlipStartPos = vecStart; m_vecSpawnFlipEndPos = vecEnd; m_angSpawnFlipEndAngle = angEnd; StopFollowingEntity( ); SetMoveType( MOVETYPE_NOCLIP ); SetGroundEntity( NULL ); SetTouch(NULL); SetSolidFlags( 0 ); m_flSpawnFlipStartTime = gpGlobals->curtime; m_flSpawnFlipEndTime = gpGlobals->curtime + flDuration; SetContextThink( &CASW_Laser_Mine::SpawnFlipThink, gpGlobals->curtime, s_pLaserMineSpawnFlipThink ); SetAbsAngles( m_angSpawnFlipEndAngle ); QAngle angVel( 0, random->RandomFloat ( 200, 400 ), 0 ); SetLocalAngularVelocity( angVel ); m_bIsSpawnFlipping = true; }
// Regular explosions void CPlantedC4::Explode2( trace_t *pTrace, int bitsDamageType ) { float flRndSound;// sound randomizer CCSGameRules *mp = CSGameRules(); SetSolidFlags( FSOLID_NOT_SOLID ); m_takedamage = DAMAGE_NO; // Shake the ground!! //UTIL_ScreenShake( pTrace->endpos, 25.0, 150.0, 1.0, 3000 ); mp->m_bTargetBombed = true; // This variable is checked by the function CheckWinConditions() to see if the bomb has just detonated. m_bJustBlew = true; // Check to see if the round is over after the bomb went off... mp->CheckWinConditions(); // Pull out of the wall a bit if ( pTrace->fraction != 1.0 ) { SetAbsOrigin( pTrace->endpos + (pTrace->plane.normal * 0.6) ); } // Fireball sprite and sound!! { Vector fireballPos = GetAbsOrigin(); CPVSFilter filter( fireballPos ); te->Sprite( filter, 0, &fireballPos, g_sModelIndexFireball, 100, 150 ); } { Vector fireballPos = GetAbsOrigin() + Vector( random->RandomFloat( -512, 512 ), random->RandomFloat( -512, 512 ), random->RandomFloat( -10, 10 ) ); CPVSFilter filter( fireballPos ); te->Sprite( filter, 0, &fireballPos, g_sModelIndexFireball, 100, 150 ); } { Vector fireballPos = GetAbsOrigin() + Vector( random->RandomFloat( -512, 512 ), random->RandomFloat( -512, 512 ), random->RandomFloat( -10, 10 ) ); CPVSFilter filter( fireballPos ); te->Sprite( filter, 0, &fireballPos, g_sModelIndexFireball, 100, 150 ); } // Emit a sound effect of the explosion that travels across the entire level! CPASAttenuationFilter filter( this ); EmitSound( filter, entindex(), "c4.explode" ); //EMIT_SOUND(ENT(pev), CHAN_WEAPON, "weapons/c4_explode1.wav", 1.0, 0.25); SetOwnerEntity( NULL ); // can't traceline attack owner if this is set float flBombRadius = 100; if ( g_pMapInfo ) flBombRadius = g_pMapInfo->m_flBombRadius; CSGameRules()->RadiusDamage( CTakeDamageInfo( this, GetOwnerEntity(), 1000, bitsDamageType ), GetAbsOrigin(), flBombRadius, CLASS_NONE ); // send director message, that something important happed here /* MESSAGE_BEGIN( MSG_SPEC, SVC_DIRECTOR ); WRITE_BYTE ( 9 ); // command length in bytes WRITE_BYTE ( DRC_CMD_EVENT ); // bomb explode WRITE_SHORT( ENTINDEX(this->edict()) ); // index number of primary entity WRITE_SHORT( 0 ); // index number of secondary entity WRITE_LONG( 15 | DRC_FLAG_FINAL ); // eventflags (priority and flags) MESSAGE_END(); */ UTIL_DecalTrace( pTrace, "Scorch" ); flRndSound = random->RandomFloat( 0 , 1 ); CPASAttenuationFilter debrisFilter( this ); EmitSound( debrisFilter, entindex(), "c4.debris" ); m_fEffects |= EF_NODRAW; //SetThink( &CPlantedC4::Smoke2 ); //SetNextThink( gpGlobals->curtime + 0.85 ); }