Fans are an obvious application of the func_rotating
entity, and combined with various other bits and pieces, you can create some interesting ones for your maps.
Build a Fan
The first thing we need to do is create a fan solid. It's actually pretty easy to get everything aligned and properly angled. Start with a single blade: create a rectangular brush, then clip it to form a flat blade shape (1). Use the transform tool (Ctrl+M
) to rotate the blade around its longer axis. To find out which axis that is, look at the window you would like the rotation to be visible in. In the example map, with the fan facing forward, this is the top view (x/y). The axis is the letter not in the view's name. In this case, z. So, rotate the blade about 30?
on the z axis (2). Now shift-drag the blade twice, rotate one 120?
and the other -120?
on their x axes. Then arrange the three blades and place a shaft in the middle (3).
Make it Go
Now we need to make it spin. Entities that rotate, like our fan, need a point around which they should move. This is called the origin, and you create that point by placing an 'origin brush' into the entity. An origin brush is simply a solid that has the texture called 'origin' on all its faces. So to create one, select the 'origin' texture, and create a block that runs through the axis of rotation. In our case, we want a block that has a centre-point the same as the centre of our shaft when we look at it from the front view. It can be any size, but its front-view centre-point must be in the middle of the shaft. Ctrl-select all the solids, including the origin, right click and select Tie to Entity
. Select func_rotating
and set the following attributes:Name
: fanRotation Speed
: 3Fan Sounds
: Fast Beating
Experiment with the speed, friction and sound settings. On the Flags page, tick X Axis
, which sets the axis to rotate around. You can work this out using the same view-name method I've already described. Also tick Acc/Dcc
. This makes the fan accelerate and decelerate when it is turned on and off. It combines with the Friction
property which is used to work out how fast to slow down / speed up. Experiment with the other properties - most of them are self-explanatory.
We now need to be able to trigger the fan on and off. To do this, create a brush, tie it to a func_button
entity, and set its Target
. Then, in the flags sheet, set Don't move
(which prevents the button from physically moving) and Toggle
(which allows the player to switch the target on and off at will) on.
If you run the map at this point, the fan should work fine. But let's add something more interesting - a push effect that makes it appear as if the fan is creating a lot of wind. This is easy to create. Start by building a block that covers the whole area you want to be affected. Tie this to a trigger_push
entity, set its Name
, Speed of push
to something like 250
and turn the Start Off
flag on. The compass needs to be at 180?
in the example map so that the push happens in the right direction. Now the player will be pushed away from the fan, whenever the fan is on!
And Some More...
In the example map, I created an ambient_generic
entity, also called fan
. With a Dynamic Presets
value of Fade in
, the sound is nicely synchronized with the fan's spin up. If you've set a sound for the fan, this isn't really necessary, but I intended it to sound like the hum of the motor, which I created complete with heat sinks and power lines, just to add interest. By the way, the trigger_push
entity can also be used in other directions, for, say, vertical fans and those alien jump-pads.