function EFFECT:Init( data ) local vOffset = data:GetOrigin() local dir = data:GetAngles() local velocity = data:GetMagnitude() local spread = data:GetScale() // sound.Play( "tacrp/kids_cheering.mp3", vOffset, 80, 100 ) local NumParticles = 100 local emitter = ParticleEmitter( vOffset, true ) local forward, up, right = dir:Forward(), dir:Up(), dir:Right() for i = 0, NumParticles do local oDir = Angle(dir) local a = math.Rand(0, 360) local angleRand = Angle(math.sin(a), math.cos(a), 0) angleRand:Mul(spread * math.Rand(0, 45) * 1.4142135623730) oDir:RotateAroundAxis(right, angleRand.p) oDir:RotateAroundAxis(up, angleRand.y) oDir:RotateAroundAxis(forward, angleRand.r) local particle = emitter:Add( "particles/balloon_bit", vOffset + VectorRand(spread) ) if ( particle ) then particle:SetVelocity( oDir:Forward() * math.Rand(0.5, 1) * velocity) particle:SetLifeTime( 0 ) particle:SetDieTime( 10 ) particle:SetStartAlpha( 255 ) particle:SetEndAlpha( 255 ) local Size = math.Rand( 1.5, 3 ) particle:SetStartSize( Size ) particle:SetEndSize( 0 ) particle:SetRoll( math.Rand( 0, 360 ) ) particle:SetRollDelta( math.Rand( -2, 2 ) ) particle:SetAirResistance( 50 ) particle:SetGravity( Vector( 0, 0, -75 ) ) particle:SetColor( math.Rand(50, 255), math.Rand(50, 255), math.Rand(50, 255) ) particle:SetCollide( true ) particle:SetAngleVelocity( Angle( math.Rand( -160, 160 ), math.Rand( -160, 160 ), math.Rand( -160, 160 ) ) ) particle:SetBounce( 0.7 ) particle:SetLighting( true ) end end emitter:Finish() end function EFFECT:Think() return false end function EFFECT:Render() end