** WCU 03/23/97 - Hipnotic Rotation *** stuff common to all rotating entities ok, first off when you're working with rotating entities, you'll be using the same entities alot there are three entities common to all types of rotation: rotate_object, info_rotate, and func_movewall the rotate object is the thing you'll actually be seeing in quake. It is *not* solid to make a rotating object solid, you have to use func_movewall, which is *not* normally visible (so, you know, they kinda go together well :) the info_rotate is the point the rotate_object (and func_movewall) will rotate around the func_movewall is really the only one of the three that requires any special explanation the f_m does not actually "rotate" as much as act like a func_train this being the case, you cannot just make one f_m for a rotating entity. they are typically split up into smaller sections for the func_rotate_train example, i split the trains func_movewalls into 16 small cubes there is a problem with using the func_movewall that makes it require extensive testing before you are "done" with it and can move on to something else in your level when you start your map, the func_movewall will be fine, but after it is triggered once, it will most likely be out of alignment in the rotating door examples, you will see that i made the f_m progressively smaller as you go closer to the ground this is because they would eventually become mis-aligned, and form a sort of invisible stairway, making it possible to actually climb a 90 degree surface (or at least, what appeared to be a 90 degree suface) ok, each type of entity has its one special crap :) *** func_rotate_entity the func_rotate_entity is used for...uh...generally rotating entities :) In the example, i just made three rotating discs (lets hear it for creativity!! :) in the rotating entity room, look to the sky, and you'll see what happens when you make the entity rotate in every plane...this gives me motion sickness! :) here's where it gets confusing on irc, im gonna attempt to show you the correct target/targetname combos, because this is basically the part you need to know *** note you can also check the rotation.txt file, which has been included with *** the example map/bsp, for the target/targetname relationships func_rotate_entity "targetname" t1 "target" t3 info_rotate_"targetname" t2 rotate_object "targetname" t3 "target" t2 func_movewall "targetname" t3 (this is only necessary if you want the entity solid) ok, as to the special properties of the func_rotate_entity you must fill in the "rotate" key with a value that tells it what plane to turn in, and the rate of rotation it has a value similiar to the "mangle" type key, an "x y z" value the values corespond to the xz xy yz planes (the top, front, and side views in worldcraft) so first you have to figure out which plane to rotate in, then fill in that area...so to rotate at a speed of 90 in the xz plane, you would give the "rotate" a value of "90 0 0" these can be mixed to rotate in any or all planes (the "mangle" key is used with the info_intermission to specify a vector coordinate, in the form of x y z, it is only an example) if you want the entity to start in a rotating state, you can set the START ON flag, and to make it so you can switch the entity on and off, you should set the TOGGLE flag *** func_rotate_door allrighty then...on to the rotating doors once again, the rotating doors share the common entities (info_rotate, rotate_object, and func_movewall) everything is set up exactly the same as a rotating entities, but you use a func_rotate_door, as opposed to a func_rotate_entity (duh!) there isnt too much special or complicated about using the rotating doors first, place the info_rotate and func_rotate_door at the point where you want the door's "hinge" t o be then, in the func_rotate_door, set the "angles" key the same way you set the "rotate" key for the rotating entities however, this time, you will be setting it to rotate to a specific angle, ie, for a normal rotating door (like the one from Hipnotic's own example), you would give "angles" a value of "0 90 0" i would suggest setting the speed to something lower than the default (which is 10), and the base sound also give a nice effect to make it so you cannot retrigger the door to close it, you can set the STAY OPEN flag in the flags section um...thats really all there is to rotating doors...except for the movewall stuff like I said before, with the movewall's misalignment problem, you will have to do alot of testing before you can make it "right" in the hip1m1 level, where (presumably) you saw the first rotating door of the pack, they were forced to make the movewalls progressively bigger as you went up the door, to...uh...stop you from going up the door :) *** func_rotate_train - part #1 alrighty, on with the show func_rotate_trains (looks of shock and disgust) i think this was an ongoing development through the entire Scourge of Armagon thing...they must have kept adding stuff, but Jim Dose tells me "everything made sense at the time" :) ok...the first part of making a rotating train is actually quite simple...its alot like a func_train you set up the train with all the common entities, and you place the func_rotate_train in the spot that will go to the path_rotates (the equivalent of path_corners) the func_rotate_train does not include any keys for the actual rotation of the train all you need to specify in the func_rotate_train is the "targetname", the "target" (center of rotation), and the "path" key, which has as a value the "targetname" of the first path_rotate ok, so thats the first part...setting up the actuall train object *** func_rotate_train - part #2 - path_rotate's the next part is setting up the path_rotate's to form the trains path setting up the path is easy, its just like setting up normal path_corners *but* (and this is the part that seemed to make sense at the time...) the rotation/angle stuff is kinda strange ok, first of all, if you want the train to rotate to a specific angle, you have to set the ANGLES flag, and specify that angle in the "angles" value (once again, an "xz xy yz" value) to make the brush just rotate continuously, you have to set the ROTATION flag, and specify what plane and speed in the "rotate" key *** Try2Try is now known as USteppin ok, that stuff kinda makes sense, right? allright, well, you have to set the flags and angles/rotation stuff on the *next* path corner to quote an email from Jim Dose: "if you're travelling from point 1 to point 2, and at point 2 your s'posed to be oriented "0 90 0", then set the ANGLES flag at point 2" (and the "angles" key) one note about the "angles" value the value is absolute, based on the initial position so to make it go around 4 corners, youd have to use the values "0 90 0" "0 180 0" "0 270 0" and "0 0 0" if you were to always specify "0 90 0" thinking it would turn 90 degrees ewach time, it would only turn the first time ok, besides ANGLES and ROTATION, there are a bunch of other flags to set for the path_rotate the STOP flag allows the train to stop and be restarted the NO ROTATE flag makes the train stop rotating while waiting to be restarted the DAMAGE flag causes the train to do damage based on the "dmg" key the SET DAMAGE flag set all targets damage to the "dmg" key (this is from the Hipnotic entity faq...i take this to mean that all path_rotates will be set to this damage ammount) the MOVETIME flag, when set, will interpret a "speed" key as the length of time the train should take between the current path_rotate, and the next you can set the speed at each path_rotate, allowing for pauses and speed-ups, etc) something new to both normal path_corners and path_rotate is the "event" key when the train reaches a path_rotate with the "event" key set to something, that event will get triggered its kind of like a trigger_multiple, in that the event will be triggered each time the train reaches that path_rotate To see an example of this, (as long as you are able to...) run the map i made, and go to the train room start the train, and quickly walk over and stand where the train initially starts "something" will happen :)