• Introduction (Home)
  • What's New?!
  • MapMaking Q&A:
  • Beginning Issues
  • Intermediate Issues
  • Advanced Issues
  • Mega-TF Issues
  • More Information:
  • Errors & Solutions
  • Author Advice
  • Files Archive
  • Real Audio Show:
  • Blueprints Mint
  • Internal Links:
  • Blueprints News
  • DyerMaker's Maps
  • Blueprints Guestbook
  • External Links:
  • The Forge
  • QuakeLab
  • TF Console
  • Ented Home
  • Rotation Entities Explained

    • 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? :}