Rotating doors

How to set up rotating doors

As its name suggests, a rotating door is a kind of door which performs a rotation around an axis when it opens, instead of a translation as a usual sliding func_door does. That's why there is a specific entity for that: func_door_rotating.

Portal rotating door

Hexen II's most familiar rotating door

There are 3 things a rotating door needs to rotate properly:
  • An origin: the point in the 3D space around which the door rotates.
  • An axis (implicitly going through the origin) defining whether the rotation is a yaw, pitch or roll one.
  • An angle telling how many degrees the rotation goes.
To define an origin, just add one extra brush to your func_door_rotating entity. Make it a perfect cube, all textured with the special ORIGIN texture and that's it. The center of gravity of the cube is your entity's origin. The cube itself is disposed and will never show in-game, don't worry. The same technique applies to any kind of rotating entity as well: func_rotating, rotating trains, etc.

The axis is mandatorily the X, Y or Z axis. The latter is the default. If you want an X or Y rotation instead, check the corresponding check box in the entity's spawnflags property.

Put how many degrees the rotation should go in the entity's flags property (not really intuitive, eh?). Positive values go one way, negative ones the other way round.

What a func_door_rotating can also be used for

Just like its func_door cousin, despite its name func_door_rotating has not to always be a door, strictly speaking. It can be used each time you need something to rotate a certain amount of degrees when triggered. You can find many examples in the vanilla maps: the bars which initially block the Septimus portals and open upon approach, the falling beams partially destroying the bridge over lava in meso5 - Obelisk of the Moon, the scary blades in romeric5 - Temple of Mars, etc.

Another interesting and visually cool use is for levers or any kind of rotating buttons.

A lever in Hexen II

Lever in demo1 - Blackmarsh

Moving such a lever when the player comes close to it as doors usually do would still be too early: the player has to touch it or even shoot at it as with a regular button. To perfectly mimic a button's behavior, the func_door_rotating must have a targetname set and a surrounding trigger entity reacting to touch (by default) or shoot (if a health is set).

What a func_door_rotating can NOT be used for

A func_door_rotating cannot rotate forever around its axis. Use a func_rotating instead, like they did in demo3 - The Mill for the windmill wings and gears. The big blades in romeric5 - Temple of Mars are func_door_rotating entities because they don't rotate forever: they forever "open" then "close" which is different from always going in the same direction.

A func_door_rotating cannot rotate along more than one axis. If you want to perform complex moves like those of the tomb of Loric's lid, use a func_train.

Youtuber Degorram finds the (too?) swanky tomb

As said a func_door_rotating cannot rotate around a non-orthogonal axis (that is anything else than X, Y or Z axis). If you want a rotation along an oblique axis, then again you'll need a func_train. Set its angles property to define the "entity direction" in the 3D space (it's a 'x y z' vector) then the path_corner's angles to define the rotation itself. Yet be aware it's tricky anyway and may need tedious tweaking. It's always so when it comes to adding angles to angles in 3D.

Want to ask for clarification, report an issue with this trick or propose another one? Drop me an email If you use the trick please credit me and put a link to this website.