void EmitAmbientSound(int entindex, const Vector &origin, const char *pSample, float volume, soundlevel_t soundlevel, int flags, int pitch, float soundtime /*= 0.0f*/, float *duration /*=NULL*/) { #ifdef STAGING_ONLY if ( sv_snd_filter.GetString()[ 0 ] && !V_stristr( pSample, sv_snd_filter.GetString() )) { return; } #endif // STAGING_ONLY #if !defined( CLIENT_DLL ) CUtlVector< Vector > dummyorigins; // Loop through all registered microphones and tell them the sound was just played // NOTE: This means that pitch shifts/sound changes on the original ambient will not be reflected in the re-broadcasted sound bool bSwallowed = CEnvMicrophone::OnSoundPlayed( entindex, pSample, soundlevel, volume, flags, pitch, &origin, soundtime, dummyorigins); if (bSwallowed) return; #endif if (pSample && (Q_stristr(pSample, ".wav") || Q_stristr(pSample, ".mp3"))) { #if defined( CLIENT_DLL ) enginesound->EmitAmbientSound( pSample, volume, pitch, flags, soundtime ); #else engine->EmitAmbientSound(entindex, origin, pSample, volume, soundlevel, flags, pitch, soundtime); #endif if (duration) { *duration = enginesound->GetSoundDuration(pSample); } TraceEmitSound("EmitAmbientSound: Raw wave emitted '%s' (ent %i)\n", pSample, entindex); } else { EmitAmbientSound(entindex, origin, pSample, volume, flags, pitch, soundtime, duration); } }
void CNPC_Stalker::StartAttackBeam( void ) { if ( m_fBeamEndTime > gpGlobals->curtime || m_fBeamRechargeTime > gpGlobals->curtime ) { // UNDONE: Debug this and fix!?!?! m_fBeamRechargeTime = gpGlobals->curtime; } // --------------------------------------------- // If I don't have a beam yet, create one // --------------------------------------------- // UNDONE: Why would I ever have a beam already?!?!?! if (!m_pBeam) { Vector vecSrc = LaserStartPosition(GetAbsOrigin()); trace_t tr; AI_TraceLine ( vecSrc, vecSrc + m_vLaserDir * MAX_STALKER_FIRE_RANGE, MASK_SHOT, this, COLLISION_GROUP_NONE, &tr); if ( tr.fraction >= 1.0 ) { // too far TaskComplete(); return; } m_pBeam = CBeam::BeamCreate( "sprites/laser.vmt", 2.0 ); m_pBeam->PointEntInit( tr.endpos, this ); m_pBeam->SetEndAttachment( STALKER_LASER_ATTACHMENT ); m_pBeam->SetBrightness( 255 ); m_pBeam->SetNoise( 0 ); switch (m_eBeamPower) { case STALKER_BEAM_LOW: m_pBeam->SetColor( 255, 0, 0 ); m_pLightGlow = CSprite::SpriteCreate( "sprites/redglow1.vmt", GetAbsOrigin(), FALSE ); break; case STALKER_BEAM_MED: m_pBeam->SetColor( 255, 50, 0 ); m_pLightGlow = CSprite::SpriteCreate( "sprites/orangeglow1.vmt", GetAbsOrigin(), FALSE ); break; case STALKER_BEAM_HIGH: m_pBeam->SetColor( 255, 150, 0 ); m_pLightGlow = CSprite::SpriteCreate( "sprites/yellowglow1.vmt", GetAbsOrigin(), FALSE ); break; } // ---------------------------- // Light myself in a red glow // ---------------------------- m_pLightGlow->SetTransparency( kRenderGlow, 255, 200, 200, 0, kRenderFxNoDissipation ); m_pLightGlow->SetAttachment( this, 1 ); m_pLightGlow->SetBrightness( 255 ); m_pLightGlow->SetScale( 0.65 ); #if 0 CBaseEntity *pEnemy = GetEnemy(); // -------------------------------------------------------- // Play start up sound - client should always hear this! // -------------------------------------------------------- if (pEnemy != NULL && (pEnemy->IsPlayer()) ) { EmitAmbientSound( 0, pEnemy->GetAbsOrigin(), "NPC_Stalker.AmbientLaserStart" ); } else { EmitAmbientSound( 0, GetAbsOrigin(), "NPC_Stalker.AmbientLaserStart" ); } #endif } SetThink( &CNPC_Stalker::StalkerThink ); m_flNextNPCThink = GetNextThink(); SetNextThink( gpGlobals->curtime + g_StalkerBeamThinkTime ); m_fBeamEndTime = gpGlobals->curtime + STALKER_LASER_DURATION; }