WiseWind: Wind
January 2024
This tutorial was originally created by wisemx. It was originally posted on SDKnuts.net.
Wind Effects
This project illustrates two methods for creating the illusion of environmental wind in your maps.
The two methods used in this project are:
- env_wind - an entity to control wind in the map.
- trigger_wind - a trigger volume that pushes physics objects that touch it.
I’ve also used a func_dustcloud for the trigger_wind, for effect.
env_wind is only used once in HL2. In d3_citadel_01 as you come out of the tunnel and can see the Citadel. The wires you see swaying in front of you at the end of that tunnel are randomly pushed by a env_wind.
trigger_wind is used in the beginning of HL2, in d1_trainstation_01 as you step off the Train and see some trash blowing across the cement. It’s also used in d2_prison_03 for the large fan you have to sneak past in the air vents.
In this project the trigger_wind is used to blow a dust cloud. The env_wind is used to randomly sway the power lines.
Both of these methods have advantages.
- trigger_wind is a brush based volume so you have more control over the area it effects. It can also be enabled and disabled as needed.
- env_wind is easy to place in your map and it can be directed but you can’t turn it on and off unless you kill the entity.
The power lines in this project are created with move_rope and keyframe_rope entities.
I’ve used a logic_timer to control the trigger_wind, func_dustcloud and an ambient_generic. The logic_timer is set to use random time.
These are the properties I used for each entity in this project.
Swaying Wires
Class: logic_timer
- Start disabled: No
- Use Random time: Yes
- Min Random Interval: 6
- Max Random Interval: 12
- Outputs: (see image)
Class: env_wind
- Pitch Yaw Roll: Use the Point At tool for this.
- Min normal speed: 30
- Max normal speed: 80
- Min gust speed: 100
- Max gust speed: 150
- Min gust delay: 10
- Max gust delay: 20
- Max gust dir change: 30
Classes: move_rope and keyframe_rope:
- Speed: 64
- Slack: 140
- Type: Rope
- Subdivision: 3
- Barbed: No
- Width: 3
- Texture scale: 1
- Collide with world: No
- Start dangling: No
- Breakable: No
- Rope material: cable/cable.vmt
- Position Interpolator: 2
A Dust Cloud
Class: trigger_wind
- Name: windtrigger01
- Start disabled: Yes
- Pitch Yaw Roll: Use the Point At tool for this.
- Speed: 120
- Speed Noise: 0
- Direction Noise: 20
- Hold Time: 0
- Hold Noise: 0
- Flags:
- Everything, Checked
Class: func_dustcloud
- Name: DustCloud1
- Start disabled: Yes
- Particle color: 168 141 123
- Particle per second: 30
- Max particle speed: 13
- Min particle lifetime: 3
- Max particle lifetime: 5
- Max visible distance: 750
- Frozen: No
- Alpha: 30
- Min particle size: 5
- Max particle size: 50
Sound
Class: ambient_generic
- Name: WindSound
- Sound Name: ambient/wind/windgust_strong.wav
- Volume: 8
Setup and Final Result
In the images below you can see the volume created by the brush based entities and the placement of the env_wind. The black arrow shows the direction of both wind entities. the other image is a shot from HL2 of the combine effect.