-
Func_Rotate_Entity
-
Func_Rotate_Door
-
Func_Rotate_Train
-
Dyerfort's Catapult Tutorial
Be VERY AWARE that these will not run if you run your map locally. You must create
a Mega server and connect localhost. Instructions and links are on the Catapult
Tutorial page.
Func_Rotate_Entity
Let's start with the easy one, shall we? This entity has three parts.
Rotate_Object
- This is or are the brushes of your thing that you want to spin around, for
example a gear. It may be as complex as you want, but keep the players away
from it - for until it gets fixed, this entity cannot be walked on or ridden.
You basically run right through it.
- Targetname - Required for use. Example: "bob"
- Target - Required for use. Example: "bob_center"
Func_Rotate_Entity
- This should be in your Entities list, if it is not you may use "monster_dog"
and change the words monster_dog to func_rotate_entity.
It needs to be located inside at the center of your rotate_object.
It has these parts:
- "spawnflags" "1" - allows it to be toggled on and off.
- "speed" "1" - how fast it gets up to its final speed.
- "targetname" - in case you want to trigger it. "start_bob"
- "target" - Required for use. Example: "bob"
- "rotate" - "0 120 0" How fast, and on what axis, it spins. (X, Y, Z)
- "dmg" "0" - How much health to remove if you want it to hurt players.
Info_Rotate
- This should be in your Entities list, if it is not you may use "light"
and change the words light to info_rotate. It needs to be placed in the center
of your rotate_object, inside the func_rotate_entity even.
It has these parts:
- "targetname" - Required for use. Example: "bob_center"

Func_Rotate_Door
A little more complex, because we need to make the door solid if
we're going to keep players from just running right through them, as in the example
above. The trick here is to make your door, then add little func_movewall brushes
that actually make up the physical door. If it's confusing, here's a
screenshot of
one of my func_movewall pieces of my catapult (for DyerFort). It's the highlighted
red box. As you will see, there are many of them.
Doors have four parts.
Rotate_Object
- This is the brush(es) of your door.
- Targetname - Required for use. Example: "door"
- Target - Required for use. Example: "door_center"
Func_Rotate_Door
- This should be in your Entities list, if it is not you may use "monster_dog"
and change the words monster_dog to func_rotate_door.
It needs to be located at the hinge-point of your door.
It has these parts:
- "speed" ".6" - how fast the door operates.
- "dmg" "2" - How much health to remove when blocked.
- "targetname" - in case you want to trigger it. "swing_door"
- "target" - Required for use. Example: "door"
- "sounds" - "1" = medieval, "2" = metal, "3" = base
- "angles" - "0 90 0" - how far to open on (X, Y, Z) axis.
- "rotate" - "0 90 0" - which axis (X, Y, Z) to rotate on.
Info_Rotate
- This should be in your Entities list, if it is not you may use "light"
and change the words light to info_rotate. It needs to be placed in the center
of your func_rotate_entity.
It has these parts:
- "targetname" - Required for use. Example: "door_center"
Func_Movewall
- These are the tiny brushes that make up your door. If the door is to
swing like a regular door, make tall vertical brushes. If it is supposed
to swing like a drawbridge, make long horizontal brushes.
It has these parts:
- "targetname" "door" Required for use.
- "spawnflags" "1" Makes brush visible.
- "spawnflags" "2" Damage on touch ("dmg").
- "spawnflags" "4" Makes brush non-blocking - pointless if we
want the player affected by the door!
- "dmg" "10" Makes door hurt players when blocked.

Func_Rotate_Train
Trains are the most complex of the rotation entities. They have
five parts.
Rotate_Object
- This is the brush(es) of your train. The more complex you make
your train, the harder it is going to be to ride. The most obvious
example of this is in my map Frontlin. The blue team's scout can
hail the Chinook helicopter (by using the radio in the tent). The
Chinook then flies to one base's front line, hesitates, then flies
to the other base's frontline, and repeats. Riding the thing was no
joy under Quakeworld; however, I'm hoping these new engines are fixing
that for us. See also the note under func_movewall.
- Targetname - Required for use. Example: "train"
- Target - Required for use. Example: "train_center"
Func_Rotate_Train
- This should be in your Entities list, if it is not you may use "monster_dog"
and change the words monster_dog to func_rotate_train.
It needs to be located at the centermost point of your rotate_object.
It has these parts:
- "speed" ".6" - how fast the train moves. Default 100.
- "dmg" "10" - How much health to remove when blocked.
- "deathtype" - message if someone gets killed by the train.
- "target" - Required for use. Example: "train"
- "sounds" - "1" = ratchetmetal. Sound train makes.
- "noise" - the sound the train makes when it stops.
- "noise1" - the sound to play when the train moves.
- "targetname" - In case you want to trigger it. Example: "start_train"
- "path" - the first path_rotate the train is to move to.
Info_Rotate
- This should be in your Entities list, if it is not you may use "light"
and change the words light to info_rotate. It needs to be placed in the center
of your func_rotate_train.
It has these parts:
- "targetname" - Required for use. Example: "train_center"
Func_Movewall
- These are the tiny brushes that make up your train. Since my
Chinook Helicopter was a complex item, I just copied my rotate_object,
pasted it, and called the copy a func_movewall. However, this defeats
the purpose of the func_movewall(s) ability to turn *with* the
rotate_object. Esentially, a complex func_movewall *will not* rotate,
although it will follow along the same path-rotates as the
rotate_object.
It has these parts:
- "targetname" - Required for use. Example: "train"
- "spawnflags" "1" Makes brush visible.
- "spawnflags" "2" Damage on touch ("dmg").
- "spawnflags" "4" Makes brush non-blocking - pointless if we
want the player to ride the train!
- "dmg" "10" Makes train hurt players when blocked.
Path_Rotate
- This should be in your Entities list, if it is not you may use "light"
and change the words light to path_rotate. These little guys work differently
than the simpler version, path_corner.
It has these parts:
- "targetname" - Required for use. Example: "train_path_1"
- "target" - Required for use. Example: "train_path_2"
- "noise" - overrides the train's noise setting.
- "noise1" - overrides the train's noise1 setting.
- "speed" - at which to travel to the next path_rotate.
- "wait" - how long to hesitate at the path_rotate.
- "dmg" - tells the train to cause damage based on "dmg"
- "rotate" - rotate at rate specified by "rotate".
Use '0 0 0' to stop rotation.
- "angle" - train will rotate to the angles specified by "angle"
while traveling to this path_rotate. Use values < 0 or > 360
to guarantee that it turns in a certain direction. Example: "90" or "-90"
Having this flag set automatically clears any rotation.
- "spawnflags" "1" - Rotation is set.
- "spawnflags" "2" - Angle is set.
- "spawnflags" "4" - Stop (train waits for another trigger).
- "spawnflags" "8" - no rotate.
- "event" "event_1" - a target to trigger when train arrives.
Here's an example of one of mine taken straight out of Frontlin:
{
"origin" "2000 1222 314"
"rotate" "0"
"target" "move_5b"
"dmg" "0"
"wait" "0"
"noise1" "ambience/chopper.wav"
"noise" "ambience/chopper.wav"
"speed" "100"
"targetname" "move_5a"
"spawnflags" "2"
"angle" "-90"
"classname" "path_rotate"
}
*** NOTE *** When I was creating the path for the Chinook
for Frontlin, I noticed how awkward the path_rotates work when you use their angles to
get an object around full circle.
First of all, place 2 path_rotates at every corner. Say we start out at 1b. We want
to go to 2a, in a straight line. 2b is nearby 2a, but "around the corner" from whatever
wall or structure we are circling. There's no 'angle' set for 2a - but there is for 2b
because we want our train to go around the corner.
2b's 'angle' is set for '360' to get the train moving from left to right, straight
toward our pal 3a. At 3b we have another 'angle' setting. This one is especially
tricky so I will discuss it later. At 4a, no angle setting. At 4b our angle is set
for 180. Now we're heading in a straight line at 1a. Our angle on 1b is 270.
Notice anything unusual yet? Yes, I skipped the setting at 3b. I bet you're thinking
that angle setting is either '90' or '0' right? Yeah, that's what I thought too.
Dead wrong.
It took me so long to figure out what was going on that I should make people pay me
for the information. :} I became so frustrated that I opened the example map that came
with CustEnts ... and Ha! The map
author had HIDDEN this particularly maddening descrepancy instead of having the coder
FIX IT! I told Ambush about the problem and he had fixed within minutes what took
me HOURS to try and figure out! God I love that man! :}
What was happening was the train was doing an entire 360 at that spot, whether I
set it for 0 or 90. I tried all sorts of angles. Ambush made it so if you give it an
angle of 450 it works, smooth as silk. Ain't he great? :}
