These are cool things to add to your map, and there is a lot of potential in how they can be used. They are, however, a pain in the ass to set up.
Fortunately, we can follow in the footsteps of great mappers. Here we present the original hiprotate tutorial written by the awesome and quite literally scandinavian czg.
CZG’s instructions for making a HIPNOTIC rotating entity!
Firstly, place an
info_rotate on the center/axis of rotation and give it a unique
Next make your rotating bit, and make it a
rotate_object, give it too a unique
targetname, and also let it target the
Then make a
func_rotate_entity or a
func_rotate_door, which despite their names are point entities, and target them at the
rotate_object. They too must be placed on the center/axis of rotation.
Now for a
func_rotate_entity, you must give it a
rotate key and set its value to three integers,
0 -90 0 for example, which will make it rotate clockwise along the Z axis at 90 degrees/second. You can set it to rotate around all the axis too, and to make it rotate the other way, just add/remove a – ( minus sign ).
Give it a
speed field which sets the amount of time it should take from it’s triggered, until it’s at full speed, ie it accelerates.
Spawnflags 1 makes it toggleable, and spawnflags 2 makes it start on.
Now for the
rotate field to three 0’s or 1’s, with either 1 or -1 to set which axis it will rotate on. i.e.
0 1 -1 will make it rotate counterclockwise around the Z axis and clockwise around the Y axis.
Then give it an
angles field too, that sets how much it should rotate on each of the axis.
"rotate" "0 1 -1" and
"angles" "0 90 -180" will make a door that rotates 90 degrees counterclockwise on the Z axis, and 180 degrees clockwise on the Y axis. Of course set it to whatever suits your needs.
Then give it a
speed which is the amount of time in seconds it should take to complete the movement.
You can give it a
dmg to make it hurt you, more on that later, as it’s a bit complicated.
sounds are sounds as normal, base, medieval, and metal.
Now, all this only makes a nonsolid shell that rotates.
To emulate collision on it, (because that’s the best you can do in Q1,) you need loads of
func_movewalls move in a circular orbit around the
func_rotate_door, but don’t rotate themselves. So make a lot of tiny
func_movewalls that will move around and keep roughly in the same place as the
They should be targeted by the
func_rotate_door, and you can set the following spawnflags on them:
- Spawnflags 1 makes it visible, as it by default is invisible to only provide collision on other entities.
- Spawnflags 2 makes it damage you even if you just touch it, and you’re not squished by it. Useful for maybe fans or something.
- Spawnflags 4 makes it nonsolid, which is completely useless unless you also set spawnflags 1 too. Otherwise it’s make an invisible, nonsolid brush that does nothing. Stupid.
A couple of general notes:
rotate_objects don’t block a monsters line of sight, but a
rotate_objects are textured in a quite bizarre manner. In order for them to have an origin that can be used in Quake, QBSP moves them together with their respective
info_rotateso it is situated smack on the center of the level: (0 0 0) The
rotate_objects are textured from there, so when they are moved back to their original position in game, the textures will appear misaligned. To compensate you either have to use a flat texture on them so any misalignments aren’t visible, or you have to move them to the center of the level yourself, texture them there and then move them back again yourself.
func_movewalls don’t move 100% exactly after the
rotate_object; they lag slightly behind, creating a staircase effect. Adjust their thickness/placement to compensate.
- Oh yeah, the most important thing of all: You must have compile tools that can handle these entities. The most popular and powerful compilers for Quake 1 are those by aguirRe. His site is here: http://user.tninet.se/~xir870k