All about Movers

Anythang about UnrealED
User avatar
MattMan
Site Admin
Site Admin
Posts: 1464
Joined: Thu Aug 25, 2005 12:00 am
Location: New York
Contact:

All about Movers

Postby MattMan » Tue Jan 08, 2013 6:36 pm

I found this site usefull for building movers in unrealEd. Just incase the site gets taken down for whatever reason i'm posting the whole thing here. Original page can be found here: http://lodev.org/unrealed/movers/movers.html

------------------------------------------------------------------

Lode's All about Movers Tutorial

Table of contents


<FONT COLOR="#FF0000">Part I</FONT>

Assumptions
Introduction
What is a mover?
<A HREF="#6">A Lift in 6 Steps</A>

Creating a basic lift (more detailed explanation)

Creating a basic door
Creating a rotating door
Movers with multiple keys

Moving the mover around in the editor


Basic Mover Properties

MoverSounds



<FONT COLOR="#FF0000">Part II</FONT>


Things you like to know

Rotating movers
Movers & lighting

Triggered movers

Looping Movers

AttachMovers

Attaching movers to another mover

Mover events

The ElevatorMover

The AssertMover

The GradualMover
ReturnGroup

More Mover Properties



<P>
<FONT COLOR="#FF0000">Part III</FONT></P>

A door that opens by pushing a button
A train with a button

A wiggling boat
A Real "Office Building" Elevator


<font COLOR="#FF0000">Other</font>


Download
The Future
Contact


<font size="4">Assumptions</font>

I assume that you can work with basic elements of the editor and you can make
a map. If you don't, please read a beginners tutorial first.

<font size="4">Introduction</font>


It's not difficult to make a basic mover, like a simple door or lift, but
you can do so much more with movers. This tutorial will teach you
everything about movers. <u>Every</u> propertie and <u> every</u> movertype is
explained.


This tutorial is optimised for UEd2, but if you have UEd1, you can use it as well, because these two versions don't differ that much. And
I've added remarks for UEd1 when there is a difference. You can of course
apply the official UT 420 or higher patch to get UEd2. I recommend patch
436, because this one adds even more new features such as realtime
preview of skyzones, editing the textures of a mover and a replace textures
function.


There are 3 parts in this tutorial:


*Part I is for beginners and describes the
basics of creating simple movers.
*Part II is for intermediate and advanced mappers,
and contains a description about <u>all</u> mover proporties and classes.
*Part III will use everything you learned in the
previous two parts to create some cool stuff. A door with a button, a
train with triggers in it, a boat that wiggles and sails at the same time and an
elevator with inner and outer doors, that can go and stop at 4 different floors.


<font size="4" color="#FF0000">Part I</font>

<font size="4">What is a mover?</font>

A mover is a moving brush. It can move to different locations and/or rotate
around an axis.&nbsp; Most movers have several keys. Key0
is the begin position, the mover will wait there until it is triggered.
The other keys are the locations the mover will move to when activated. It
will move through all the other keys until it reaches the last one.

You can recognise movers in the editor because they are purple. In the
3D view, you can see the movers through the walls.


Movers can be used for doors, lifts, trains, boats, buttons, rotating rocks
in the sky, or anything else that moves.


In this tutorial, when I say the mover is "open" then I mean it is
at its last key, and when it is "closed" it is at its first key,
Key0. A "closing" mover is one that is moving from the last to
the first key, and an "opening" mover is one that is going from the
first key to the last one. So even if the mover is not a door, I will
still use "open" and "close" for these situations.


<H3><A NAME="6"></A>A Lift in 6 Steps</H3>

<LI>Make a template of your mover with normal brushes</LI>
<LI>Intersect your template with the red brush.&nbsp; Make sure it's transformed permanently!</LI>
<LI>Place the red brush at the down position of the lift and press the Add Mover button</LI>
<LI>Right click on the purple mover brush, expand Movers and press Key1</LI>
<LI>Move the purple brush to the up position of your lift</LI>
<LI>Right click on it again, expand Movers and press Key0</LI>


<P>Done.</P>

<font size="4">Creating a basic lift (more detailed explanation)</font>


The most standard mover in the Unreal engine is a mover that starts moving to
a new position when you touch it, then waits for a few seconds, and then returns
to its original position.

We are now going to make a lift that starts rising when you step on it.
Please make a large room now.


To add a mover at the location where your red brush is, press this button: .&nbsp;
its located in the toolbar on the left, under the add, subtract, intersect and deintersect buttons



In UnrealEd1, you have to press the button that looks like this: .


When you pressed the button, you see a purple brush appear at the red
brush. That's a mover! However, this mover will not do anything yet
when you touch it. Also, this mover probably doesn't have the textures and
shape you want. In version 436 of the editor, you can view and edit the
textures of the mover by right clicking on it, expanding Movers and then
clicking Show Polys, but then still the shape isn't
correct. Your mover must be one single brush, so if you want it to have
more complex forms than a cube, a sphere or whatever, you can't create it this
way.


That's why most people first make a template of the lift with normal brushes, then
intersect the whole thing, and then use the red brush to add the mover.


Delete that mover you just made, because now you will make a good one.
First make a template of the lift. You can make it at any location, the best place to make it is in a large room outside your map, or if your map is a large outdoor map you can make it somewhere in the sky.
Use normal brushes for this template, I mean the blue and the yellow ones.
Give it the textures you want, align it, apply the texture properties you want, vertex edit it if necessary.
When the lift is finished, rebuild geometry and then move the red brush around the lift. Make sure the lift is completely inside the red brush, and there is nothing else inside the red brush.
Also make sure the red brush is not scaled or rotated, so if it is right click
on it and use Reset Scaling and Reset Rotation, or use Transform
Permanently.&nbsp; Otherwise the mover will have a weird collision.




<font size="1">Position the red brush around the lift before intersecting</font>



Now intersect by pressing the Intersect button . The red brush now has the same shape as the lift.




<font size="1">The red brush after intersecting</font>



It is safe to delete the template now, you won't need it anymore, except if you want to intersect the same lift again later.



Move the red brush to the begin position of the lift, this means the position the lift will have when down. Now press the Add Mover button .
The lift looks like purple lines in the editor, if you start the map now in the game it will look like the template you created earlier.




<font size="1">The "down" position of the lift</font>



However it will not yet move. To make it working you first have to give the lift a second key.
Do this by right clicking on the purple mover brush, then in the menu that appears expand
"Movers" and there select Key1.




<font size="1">Selecting Key1</font>



After you did this, place the purple mover brush to the position you want the lift to have when up.




<font size="1">The "up" position of the lift</font>



The mover brush now has two different positions: Key0 (base) is the "down" position, and Key1 is the "up" position.
If you right click on the mover again and choose Key0 (base), you will be able to see the original position again
(down).
Now your lift is ready and works! Rebuild your map, save it (don't forget to place a PlayerStart in the map), and play it.
When you step on the lift, it will rise, and after a few seconds descend again
automatically.



<font size="4">Creating a basic door</font>


To make a sliding door, do exact the same as you did with the lift, only now
make a mover that looks like a door and place the second key now on the left or
the right of the door, or above the door to make one that opens into the
ceiling.

<font size="4">Creating a rotating door</font>


Most people have rotating doors in their houses, and not these futuristic
sliding doors. To make a rotating door, again make a mover that looks like
a door. But now you don't have to move the second key.&nbsp; Rotate the second key the same way as you would rotate a normal
brush with the rotation tool, as you can see on these pictures:


<font size="1">Key0 of the rotating door</font>


<font size="1">Key1 of the rotating door</font>

You now learned how to make
lifts, doors and rotating doors. You can make any other moving object the
same way. The Unreal engine doesn't see any difference between lifts,
doors, trains, or whatever. It just sees movers as things that move
between different Keys.

<font size="4">Movers with multiple keys</font>


The lift and doors you just created use only 2 keys: Key0 (base) and Key1. You can also make movers with more than 2 keys, with a maximum of 8 keys.
If you make such a mover with for example 4 keys, it will, when activated, move from Key0 to Key1, then to Key2 and then to Key3.
There it will wait for a few seconds, and then it will return to Key2, then to Key1 and then back to Key0 where it will wait until it is activated again.
To give a mover multiple keys, do the same as you did with Key1 in the lift example, but this time do it for Key2, Key3, etc... as well.
But that's not all, you also have to tell the mover how many keys you want it to
use. Right click on the mover and choose "Mover Properties". In the window that appears, expand "Mover" and
there set NumKeys to the number of keys you are using. So if you use Key0, Key1, Key2 and Key3, set NumKeys to 4.


<font size="1">The Mover Properties</font>

The KeyNum propertie does the same as what you have done before to select a key of the
mover. When you right click on the mover, expand Movers and there choose
Key1, that is the same as setting KeyNum to 1 in the Mover Properties.

Most of
the times you set KeyNum to 0 before saving and playing the map, but if you
leave the KeyNum for example to 1, this gives another effect on the mover:
if Key1 is the up position of a lift, and Key0 its down position, and you leave
it to Key1 before saving, the lift will be up when you start the map. It
will stay up until you activate it by touching it. Then in will wait for a
few seconds, and then go down. Now it will stay down forever until you
touch it again, but now it will not stay up forever, but go back down after a
few seconds. So once you touched it, it acts like as if you set KeyNum to
0 before saving the map.


<font size="4">Moving the mover around in the editor</font>


You can move almost anything in the editor (brushes, actors, ...), even movers. As you know by now, movers have more than one location, each Key has
its own location. To move a certain Key of the mover, you first have to select that key and then move the mover around in the editor. If you move Key1, Key2, Key3, ... , or Key7, only that key will move. However, if you move Key0, all other keys will move as well. So if you made a lift that can rise etc..., and you want to place it somewhere else in the map, you only have to move Key0. Key1 will follow then.

You
can move the mover, but you also can rotate it. If you rotate Key0, the
other keys will rotate as well, but the will not move. This means if you
have a door like this (the bright door represents Key0, the dark one Key1):

and
you rotate Key0 90°, it will look like this:

and
not like this as you might have hoped:

This
means, if you have made a sliding door and want to use the same door again, but rotated
90°, and duplicated the first door and then rotated it, you have to reposition
the second key before the door works the way you want it.

<font size="4">Basic Mover Properties</font>


Every mover has a lot of properties, for example to change the speed, the sounds, etc... of the mover.

To
open the Mover Properties of a mover, right click on it and select "Mover Properties".
In there, expand "Mover".


<font size="1">The Mover Properties</font>

The
most important Mover Properties are:

-bTriggerOnceOnly: If this is true, the mover
will work only once, and after that never anymore.
-BumpType: Determinates what will make the mover start (if it is not a
triggermover).
BT_PlayerBump: the mover will be activated when touched by a
player
BT_PawnBump: the mover will be activated by a pawn, like
rockets, crates, Nali, etc...
BT_AnyBump: the mover will be activated by players and by pawns
-KeyNum: the mover key you are editing, also the key the mover will have when
you start the map.
-MoverEncroachType: this determinates what the mover does when a player blocks
it.
ME_StopWhenEncroach: the mover will stop when it hits
you. It will almost never move again, not even if you touch it. However, if you have another mover that is set to ReturnWhenEncroach, and this
mover has to return because it has hit a player, all the stopped
StopWhenEncroach movers with the same tag will move again. This has to do
with ReturnGroups, as you will see later.
ME_ReturnWhenEncroach: it will return to where it came from,
wait a while and then try again.
ME_CrushWhenEncroach: it will kill you when it hits you
ME_IgnoreWhenEncroach: it will go through you and continue its
way as if nothing has happened
-MoverGlideType:
MV_MoveByTime: the mover will move without acceleration
(constant speed)
MV_GlideByTime: the mover will use an acceleration when it
starts (positive acceleration) or stops (negative acceleration) moving.
-MoveTime: the number of seconds the mover uses when moving from one key to
another. This means that if your mover uses 5 keys and MoveTime is 1, the
mover will need 4 seconds to open or close, because it has to go 4 times from
one key to another. If you set MoveTime to 0, the mover will
"flash" to the new location, however you will not be able to use this
as a teleporter, except if there are no walls or objects to obstruct
the player on its path.
-NumKeys: the number of keys your mover uses.
-StayOpenTime: how long the mover will wait before returning to its begin
position.

<font size="4">MoverSounds</font>

In
the MoverSounds expansion of the Mover Properties, you can determinate all the
different sounds the mover can use. There are 5 different fields, each of
them for another situation of the mover:

ClosedSound: the sound the mover will
make when it has finished closing
ClosingSound: the sound it will make when it starts closing
MoveAmbientSound: the sound it will make while moving; this is a looping sound
OpenedSound: the sound the mover will make when finished opening
OpeningSound: the sound it will make when it starts opening

To select a sound,
first open the Sound Browser by opening the View menu and selecting "Sound
Browser...", or press the speaker button
in the toolbar. Then, open the File menu of the Sound Browser and choose
"Open...". Make sure you are in the Sounds folder of your Unreal
Tournament. There are two packages that have good door and elevator
sounds: DoorsAnc.uax and DoorsMod.uax. The DoorAnc.uax has ancient door
sounds, like wooden doors etc..., and the DoorsMod.uax has modern sounds.
Select the sound you want, then go to the Mover Properties and press the Use
button of the fields to activate the sound.

Now, to choose sounds for
your mover, keep this in mind:
-Use sounds with "start" or "S" in their name for the
ClosingSound and OpeningSound. Use sounds with "end" or
"E" in the name for ClosedSound and OpenedSound. Use sounds with
"loop" or "L" in the name for the MoveAmbientSound.
This way you get the best effect, because these sounds are made for this.
-Use sounds that belong together for the same mover. For example, use
md6start, md6loop and md6end together. It is possible to use md4start,
md5loop and md6end for 1 lift, but that sounds really weird.
-<u>Never</u> use looping sounds for the Closed-, Closing-, Opened- or
OpeningSound, otherwise they will keep playing forever!


<font size="1">Choosing the sounds for a mover</font>

If you ever have
problems with the looping sounds, and there really is no explanation for it, try
selecting another looping sound and after that back the original one, or if that
doens't help, make the mover again.&nbsp; Sometimes this helps against
mysterious problems.

<font size="4" color="#FF0000">Part
II</font>

<font size="4">Things you like to know</font>

Many
people wonder about these things but never tried it:

-Movers <u>can</u> go
through walls. However the players standing on the movers cannot.
Movers also work if you let them start in a wall, and if you place a mover
completely away from your map, somewhere in the dark blackness, it will still
move, although you can't see it. That will be useful if you are attaching
things to a hidden mover.

-Movers work underwater. But you need to be
aware that when a player stands on the mover, and the mover goes down,
the player will stay floating on the water. The solution is to give the
mover a roof and walls.

-When you save your map with movers without rebuilding, and
reopen it later, all movers might disappear. At least, this happened to me
once.

<font size="4">Rotating
movers
</font>

You don't need any special mover class to make a
mover that keeps rotating around its own axis forever. Any object,
decoration, weapon, mover, etc... can be made to rotate, they all use the same
propertie for it.

Make a mover. You don't have to give it any keys. Open
its properties and expand
"Movement". In there, expand "RotationRate". You
now see three values: Pitch, Roll and Yaw. As long as you leave them 0,
the mover will not rotate. Small values, like 1, 10 or 100 make it rotate
very slowly, so you can hardly see the rotation. A value of 1000 makes it
rotate quite slowly, and values of around 2000 - 10000 make it rotate
faster. You can also make it rotate as fast as you want, for example if
you give it a value of 100000, but at this high speed you might see strange
effects when stepping on the mover.


<font size="1">The RotationRate of a mover</font>

Use
Pitch to make the mover rotate around its X-axis, Roll to make it rotate around its
Y-axis and Yaw to make it rotate around its Z-axis. This means, if
you want to make a rotating platform, you need to use Yaw, and
for things like the wheels of a car, use Roll or Pitch.

The mover will rotate
around its own axis. The location of this axis is determinated by that
red vertex that every brush has. For example, the cylinder on the two pictures
below will rotate around the red vertex, so the first one will rotate around its
center, while the second one will rotate around one of its sides.


To place the red
vertex, click on any purple vertex of the brush and the red one will go to that
location, or right click on any place and select Pivot --&gt; Place Pivot
(Snapped) Here.

Important is to set the mover's InitialState to None, otherwise the
movement of it will be disturbed when players touch it. Expand
"Object" in the Mover Properties, and there set InitialState to
None. I will talk about InitialState in a minute.

<font size="4">Triggered
movers
</font>

All movers we made until now were activated by touching
it. You can also make movers that are activated by triggers. First
of all I will tell you how to make a trigger. Open the Actor Class Browser
by selecting "Actor Class Browser..." in the View menu, or by pressing
the pawn button in the
toolbar. In there, expand "Triggers" and there select
"Trigger".


<font size="1">The Actor Class Browser</font>

The trigger will be activated if a players walks in his radius. The
trigger will then give an out event that will activate the mover, or anything
else. Now place the
trigger in your map, at a place where players can walk to activate it.

To
make this trigger activate a mover, give the trigger an Event and give the mover
the same Tag. Open the Trigger Properties and expand
"Events". There, type a name under "Event" (Mover1 in
my example). Now, open the properties of the mover that will be triggered,
there expand "Events" too, and type the same name under
"Tag" (Mover1).


The editor
will now paint a red line from the trigger to the mover.

You also have to set the mover to be activated by a trigger, and not by a
playerbump. Expand "Object" in the mover properties, and use
InitialState for this.


<font size="1">The InitialStates of a mover</font>

-None:
the mover will never move through keys, but still can be used as a rotating mover
or a mover attached to another one
-StandOpenTimed: Same as BumpOpenTimed
-BumpButton: The same as BumpOpenTimed, but the mover will return immediately
-BumpOpenTimed: the default setting. When you touch (bump) it it will go
open, wait a while and then close again
-TriggerPound: This will be explained later
-TriggerControl: as long as the trigger is activated (as long as you are in its radius), the mover will be open. When you are not it the
trigger's radius, the mover will be closed
-TriggerToggle: every time you enter the trigger's radius, the mover will toggle
between open and closed
-TriggerOpenTimed: every time you enter the trigger's radius, the mover will
open, wait a while and then close again

To make the mover work with a
trigger, you will have to use one of the trigger settings, such as
TriggerOpenTimed or TriggerToggle.

To determinate the
radius of the trigger, open its properties and expand collision.


<font size="1">Choosing the radius of a trigger</font>

The
radius of the trigger is like a cylinder: use CollisionHeight to determinate the
height of it, and use CollisionRadius to determinate the radius. As long
as you stand in this cylinder, the mover is activated. If you want to view
this cylinder in the 2D views, right click on top of the views, expand
"Actor" and there choose "Radii View". You will have
to do this.




<font size="1">Radii View</font>

There are also some other trigger properties that might be interesting.
In the Trigger Properties expand "Trigger"


<font size="1">The Trigger Proporties</font>

The
most important options are:
-bTriggerOnceOnly: If true, the trigger will work only one time, and after that
never anymore.
-DamageThreshold: How many damage is at least required when TriggerType is TT_Shoot.
The damage of the UT weapons is: (based on what's in the scripts and properties)
enforcer: 17
pulsegun: 72
shockrifle: projectile 55, shot 40, superexplosion 165
enhanced shockrifle: 1000
ripper: razorblade 30, explosive razorblade 34 (?)
biorifle: small glob 20, large glob 75
rocketlauncher: rocket 75, grenade 80
flackcannon: flakshell 70, chunk 16
redeemer: 1000
So a trigger with DamageThreshold = 999 will be activated by the redeemer, but if
DamageThreshold = 1001 it will not
-Message: A message that will appear in the textbox of your HUD when you enter
the trigger's radius
-RepeatTriggerTime: If the mover has a message, this determinates after how many
seconds the message will be repeated as long as you are in the mover's
radius. 0 means the message will be displayed only once without being
repeated.
-ReTriggerDelay: If this is larger than 0, you will only be able to activate the
trigger again after the TriggerDelay time is expired.
-TriggerType: determinates what will activate the trigger:
TT_PlayerProximity: the trigger will be activated if a player
is in its radius
TT_PawnProximity: it will be activated when a pawn is in its radius
TT_ClassProximity: it will be activated if the Class you
selected in ClassProximityType is in its radius. This might not work.
TT_AnyProximity: it will be activated if a player or a pawn
is in its radius
TT_Shoot: it will be activated it you shoot at it, and the
damage is larger than what you entered in DamagaThreshold.

<font size="4">Movers
& lighting
</font>

Movers have several properties that have to do with lighting: expand "Mover" in the Mover
Properties.

-bDynamicLightMover:
If True, the lighting will be calculated for every place where the mover will
be, so if its first in a dark room and goes to a bright one, the mover will
become bright as well. Don't use these too much if you want your map to
work on slower computers.
-BrushRaytraceKey: If the mover isn't a dynamiclightmover, the lighting on the
brush will be calculated for this Mover Keyframe only.
-WorldRaytraceKey: If the mover isn't a dynamiclightmover, the lighting around
the mover (for example shadow of it) will be calculated for this Mover
Keyframe only.

An example of the effect of WorldRaytraceKey is shown on these
screenshots. The mover is a lift with two keyframes: Key0 is down, and
Key1 is up. Of course this only works when bDynamicLightMover is False



<font size="1">WorldRaytraceKey = 0</font>



<font size="1">WorldRaytraceKey = 1</font>


The second shadow is calculated as if the mover was at its up
position. You can also use this to create fake shadows.


<font size="4">Looping Movers</font>

Looping movers are movers that,
once activated, will keep moving forever. There are a lot of ways to make
a looping mover, I will explain three of them. Every way has it own
advantages, disadvantages and results.

<u>The DualDispatcherMethod</u> (Thanks to
Wanderer): This method needs two dispatchers and a trigger. Once you
activate the trigger, one of the dispatchers will start a chain-reaction that
makes a normal mover toggle between its keyframes.

In your map, first add a
normal mover, give it the Keys you want, and open its properties. Set its InitialState (under "Object") to TriggerToggle. Also give
it a tag (under "Events"), for example "loopingmover".
Now add two dispatchers (they are in the Actor Class Browser under Triggers).

Open the
properties of the first one, and expand Events. Give it a Tag,
for example "Dispatcher1". Now, expand "Dispatcher"
and there expand "OutEvents". Set [0] to the tag of the mover,
in this case "loopingmover", and set [1] to
"dispatcher2". After that, expand "OutDelays" and set
[1] to the time the mover needs to move from its first key to open or close (in
seconds). So if the MoveTime of the mover is 2, but it has 4 keys, it will
need 6 seconds to move. (not 8 seconds! 4 keys means it has to move from
Key0 to Key1, then from Key1 to Key2, and then from Key2 to Key3, which is the
last key).

Now do the same for the second dispatcher, but only give this one
"dispatcher2" as tag, and set its OutEvent [1] to
"dispatcher1".


You now have
to do only one more thing: add a trigger somewhere in the map. When you
open the map in UT the mover will not yet move, first one of the dispatchers
needs to be triggered and after that the mover will keep moving forever.
If you want it to appear that the mover was moving already, place the trigger
somewhere nearby a startlocation so the player will
activate it without even knowing it.

When you placed the trigger, open its properties
and set its Event under Events to "dispatcher1" or
"dispatcher2", you may choose which one yourself.

<u>The LoopMover</u>: There are different
kinds of movers. To get a list of all movers, right click on the Add Mover
Brush button instead of left clicking on it. "Mover" is the one
we used until now. However, now choose "LoopMover" instead.


<font size="1">The Mover Classes</font>

After
you added it and made its Keys, open the LoopMover Properties. Expand
"Object" and then "InitialState". As you can see there
is a new propertie there, "LoopMove". This is the only
InitialState that makes the LoopMover work. Select it.


<font size="1">The LoopMove InitialState of the LoopMover</font>

The LoopMover will not move on its own. It will need a
trigger. Add a trigger somewhere, give the trigger an Event and the
LoopMover the same Tag. If you now play the map, the LoopMover will start
moving as long as you are in the radius of the trigger. If you step out of
the radius, the mover will stop at the next key it will reach.

If you want the mover to keep moving, even if you are
not in the radius of the trigger, it's best to use a TimedTrigger (Thank you, 32_Pistoleta, for pointing me out the
NaliRabbit wasn't necessary :)<BR>
The TimedTrigger in the Actor Class Browser --&gt; Triggers --&gt; Trigger --&gt; TimedTrigger.&nbsp; Open
&quot;TimedTrigger&quot; in it's properties and set bRepeating to True.&nbsp; In DelaySeconds, enter the total time the
LoopMover needs for 1 cycle (opening and closing).&nbsp; If you don't do this, this trigger will not work in
Tournament-style maps (where you have to press a button before the map starts).&nbsp; Of couse don't forget to set the
Event of the trigger to the tag of the LoopMover.

If you experience any problems with the TimedTrigger, or you are
using Unreal1, you will need the NaliRabbit anyway.&nbsp; For this, I am making a tutorial: &quot;Activating a trigger
with a NaliRabbit&quot;

One
final thing you can do is set the LoopMover's MoverEncroachType to
ME_IgnoreWhenEncroach, otherwise its movement will stop
forever when it hits a player.

If you want to prevent that problem, you can
also use the DualDispatcherMethod in combination with a LoopMover. Set
OutDelay [1] to the MoveTime of the mover then, instead of the total time it
needs to move.

Now, what is the difference between the
DualDispatcherMethod and the method with the LoopMover? its in the
sequence of the Keys the mover will follow, if there are more than two
keys: For example, if the mover has three keys, a normal mover will move
from Key0 to Key1 to Key2, then it will go back to Key1 and then back to Key0.

A
LoopMover, however, will move from Key0 to Key1 to Key2, and then immidiatly the
shortest way back to Key0.

So
what method you use depends on how you want your looping mover to move.

<u>TriggerPound</u>: This method uses a particular InitialState of a
normal mover: TriggerPound. So when you added your mover and gave it some
keys, set its InitialState to this. TriggerPound is somewhat the same as
the LoopMove InitialState of the LoopMover, only TriggerPound will use the same
key sequence as the DualDispatcherMethod. So to activate the mover you
have to do the same as you did with the LoopMover.

The advantage of TriggerPound is that you control 2
different timers: how long the mover will wait at the last key before closing, and how long it will wait at the first key before
opening again. In the Mover Properties, expand Mover. To set how
long it will wait at the first key, use StayOpenTime. To set how long it
will wait at the last key, use OtherTime.

You can represent it like this:

<font size="4">AttachMovers</font>

There is a special AttachMover class, but actually its easier and more
reliable to use normal movers if you want an object to move together with a
mover.

Make a working normal mover, and give it a Tag, for example
"AttachMover". Now add some objects, for example weapons,
decorations, lights, etc... in the map. Open the properties of the
objects, and expand "Movement". In there, set the AttachTag to
the same Tag you gave the mover, in this case "AttachMover". Now
expand "Advanced" and make sure that bMovable is True, bNoDelete is
False and bStatic is False.


<font size="1">The Properties for a moving object</font>

The
object will now always make the same movements as the mover, no matter how far
it is away from it, and even if the object has to go through walls.

You can
also use the AttachMover class. Right click on the Add Mover button to see
it. After you added one, open its properties and expand
"AttachMover". There give it an AttachTag. Now, all objects with the same Tag will move
together with it.

So, the difference between using normal movers, and using
AttachMovers, is that with the normal mover, you need to give the objects an
AttachTag, and the mover the same Tag, and with AttachMovers, you have to give
the objects a Tag and the AttachMover the same AttachTag.

<font size="4">Attaching
movers to another mover
</font>

It is possible to attach another mover to a mover, just the same way as you
attach an object to it. This way, you can make movers that have more
states than only open or closed. If you have a mover (A) that is attached
to another one (B), mover A will move if it is activated by bumping or a trigger, but
it will also move if mover B moves. If mover B moves in a different way than mover A, mover A
is able to move through two different paths: its own one, and the one of mover
B.

Of course you need to hide mover B somewhere in your map, players want to
see mover A only!

If
you want the mover to be attached to more movers, you will have to create a
chain: mover A attached to mover B, and at the same time mover B attached to
mover C.

There are some problems with this: when a mover is attached to
another one, and also has it's own keys, the following scenario might happen:
Mover A moves to the left. Then Mover B moves up, and Mover A will follow
Mover B and also go up. Now mover A is up and to the left. If Mover
A now wants to move to the right again, it will move to the Key that represents
the right position, so it will automaticly down again, even if Mover B stays
up. If now Mover B moves down, Mover A will also move even more down, so
it will disappear in the floor!

One
of the main things you can do when attaching a mover to another mover, is make a
lift with inner doors. So the doors will descend and raise together with
the lift.

Rotations might not work, however I have seen it working sometimes.

If you start using this, you will see that attaching movers to other movers
has great potential, you can do amazing things with it without having to script!

<font size="4">Mover
events
</font>

There are several events a mover can give when something
happens with it.

The first kind of event, is when something or
someone bumps it. Under "Mover" in the Mover Properties are two
settings: BumpEvent and PlayerBumpEvent. BumpEvent will be activated
everytime a player or an object bumps the mover, and PlayerBumpEvent will be
activated only when a player bumps it.

The second kind of event is the same
event you use for triggers: its under "Events" in the Mover Properties. When you enter the name of an event in Event, that event will
be called when the mover has reached its last keypoint. This way you can
for example make a button that is a small mover that moves into the wall, and as
soon as its there a door opens. You don't have to use any trigger for
this.

Some types of movers, such as the GradualMover and the AssertMover can
give a different event for every Key they reach. I'll handle this
later.

<font size="4">The
ElevatorMover
</font>

One of my favourite mover classes is the
ElevatorMover. That's because this mover gives you control over each key.
For example if it has 4 keys, you can place 4 ElevatorTriggers in the
map: one to go to Key0, one for Key1, one for Key2 and one for Key3.

To add an
ElevatorMover, right click on the add mover button and choose ElevatorMover.
Now give it 4 different keys.

Open
the properties of the ElevatorMover, expand Object and set InitialState to
"ElevatorTriggerGradual". After this expand Events and set the
tag to "ElevatorMover".

The ElevatorMover does not work with normal
triggers. You need to use ElevatorTriggers. These have some specific
properties, that a normal trigger hasn't got. You can find the ElevatorTrigger in the Actor Class Browser under
Triggers.


<font size="1">The ElevatorTrigger</font>

Add
four of these triggers in your map (one for each key), and open their properties. Under
"Events", set their Event to "ElevatorMover". You now
should see red lines going from the triggers to the mover.


<font size="1">4 ElevatorTriggers, one for each Key of the mover</font>

After
this, select one of the ElevatorTriggers, open its properties and expand
"ElevatorTrigger".


<font size="1">The ElevatorTrigger Properties</font>

It
has the following properties:

-bTriggerOnceOnly: the trigger will work only
once, and then it will never work anymore.
-ClassProximityType: used together with TT_ClassProximity. Go to the section
"Triggered Movers" for this.
-GotoKeyFrame: this is the setting that makes the ElevatorTrigger unique: when
you activate an ElevatorTrigger, it will not only give the command to the mover
to start moving, but it will also tell the mover to which key it has to move,
and that key do you control by using this setting.
-MoveTime: if it is larger that 0, this should determinate the speed of the
ElevatorMover, but I have never seen this work. If you get it to work,
please contact me.
-TriggerType: What will activate the trigger. Go to the section
"Triggered Movers" for this.

Set "GotoKeyFrame" for each
of the 4 triggers to respectively 0,1,2 and 3.

If you now play this map, and
you walk in the radius of one of the triggers, the mover will go to the Key that
you selected in GotoKeyFrame of the trigger, and stop there. It does not
matter where the mover starts, it will always reach the correct keyframe!

This
kind of mover is called "ElevatorMover", but it can be used for other
things as well, of course. Anything that needs multiple fixed positions
will need one. A good example is a
train with a button on each stop position of it to call the train. Also if you want to make a mover with only two Keys, but a
separate trigger for each key, you need to use this.

The sounds
of the ElevatorMover don't work as supposed; <u>never</u> use looping sounds for
this mover, or they will stay playing forever.

There is also another bug: when
the elevator is encroached, it will stop and never listen to any of the buttons
again. The only solution is to set MoverEncroachType to
ME_IgnoreWhenEncroach.

<font size="4">The
AssertMover
</font>

This mover will keep opening as long as you are in the
trigger's radius. When you step out, it will wait at the first keyframe it
reaches on its path, and then return. This means the longer you are
in the trigger's radius, the more the mover will open, providing it has more
than 2 keys.

To add one, right click on the Add Mover button and select
AssertMover. Give it more than 2 keys, for example 4. Set its InitialState to "AssertTriggerOpenTimed". Give it a Tag, for
example "AssertMover", and add a trigger with the same Event.

Then
expand "AssertMover" in its properties, and use the following
parameters:


<font size="1">The AssertMover Properties</font>

-bOnceOnlyStopOpen:
if this is True, the mover will stay at its last keyframe forever once it has
reached it.
-CloseTimes: The normal mover has only one MoveTime setting, that
determinates the movespeed between every two keyframes. But the
AssertMover has a separate setting for each keyframe. CloseTime[0] is the
time the mover needs to close from Key1 to Key0, CloseTime[1] is the time it
needs to close from Key2 to Key1, etc... Never forget to use these instead
of the MoveTime setting. If you leave these at 0, your mover will move
unrealistically fast.
-OpenTimes: OpenTime[0] is the time it needs to open from Key0 to Key1,
OpenTime[1] is the time it needs to open from Key1 to Key2, etc...
Too bad, Close- and OpenTimes will only work when the InitialState is
"AssertTriggerOpenTimed". If you use any of the other
InitialStates, the MoveTime will be used. If you really want a bumpmover
to have different Close- and OpenTimes, you can simulate one by attaching the
trigger to the mover (see section AttachMovers for this).
-WaitUnAssertTime: this is the time the mover will wait before returning when
you left the trigger's radius.

<font size="4">The
GradualMover
</font>

The GradualMover changes its Tag at every
keyframe. So it its at Key0 it will listen to another trigger than when its
at Key1. You can also set an Event for each key, so the mover will
call another Event everytime it reached one of its keys. Add one and open its
GradualProperties.


<font size="1">The GradualMover Properties</font>

-CloseTimes:
this is the same as the CloseTimes of the AssertMover
-Events: the events the mover will call for its first 6 keys. You can use
this for example to open a different door everytime the GradualMover is at
another floor.
-OpenTimes: this is the same as the OpenTimes of the AssertMover
-Tags: the tags of the mover for its first 6 keys. If Tag[0] is
"A" and Tag[1] is "B", and the mover is at Key0, the mover
will move if it receives an event "A", but not if it receives an event
"B". If its at Key1, it will only by activated by event
"B" and not by event "A".

If you go to its InitialState
propertie in Object, you will note that there are 3 new InitialStates:

-GradualTriggerToggle:
when activated by the trigger for Tag[0] the mover will go to the last keyframe, and return to the first
keyframe when triggered again by that same trigger. The mover does not stop at the middle
keyframes, and you can't use the different tags, only Tag[0] will be used.
The different Events work, of course.

-GradualTriggerPound: this makes the
mover go a little weird. When I tested it looked most like this:
when you enter the trigger's radius for the first time, it will open and then
close. When you leave the radius it will open and close again. But
when you enter the trigger again, it will suddenly act like a
GradualTriggerOpenTimed mover, which is described below. The trigger I
mentioned was Trigger0 of the example below.

-GradualTriggerOpenTimed:
this is the only InitialState that fully uses the different tags. If the
mover is closed, and if Tag[0] is
"A", Tag[1] is "B" and Tag[2] is "C", and the
corresponding triggers have the same events, Trigger0 will make the mover go to
Key1. It will wait there forever, until you activate Trigger1. Then
the mover will go to Key2. This is the last key in this example, so now
the mover will wait for StayOpenTime and then go back to Key0. If you use
6 different keys, you will have a mover that will only reach its last key after
you activated 5 triggers in the correct order (the last key doesn't need a
trigger). Plus you can use the different Events of the
mover to activate other things.

<font size="4">ReturnGroup</font>

Quite
important, but not known by a lot of people, is the ReturnGroup setting for movers. It is used to divide movers with the same Tag into
subgroups.

If you encroach a mover (= block its path), it will stop or
return (or crush or ignore you, but that's not important in this section), depending on
its MoverEncroachType. If you have
different several movers with <u>the
same</u> Tag, and you encroach one of them, the other movers will stop or return
as well! If you don't want this to happen, the only thing you have to do
is give each mover a different ReturnGroup. Now your two movers have still
the same Tag (activated by the same trigger etc...), but will not return or stop
together when encroached.

Warning: when you add movers, no matter how many,
the Tag of all of them will be by default "Mover", this means all
movers have the same Tag if you don't give them another one yourself. If
you ever had doors acting strange when encroaching an elevator in your map, and
wondered why, this is the reason. To avoid this give them different Tags
or give them different ReturnGroups.

Some mover classes, like the GradualMover
will also return or stop together if they have different Tags. You always
have to give them different ReturnGroups if you don't want this. If you
have made a puzzle using gradualmovers, the puzzle can be ruined if you don't
give them a different ReturnGroup!

If you have normal movers with different
Tags but the same ReturnGroup, they will also stop or return together.

<font size="4">More Mover
Properties
</font>

This
lists all the mover properties that weren't explained yet in the other sections.

-bDamageTriggered:
the mover will be triggered if it gets the damage amount defined by
DamageThreshold. This only works if the InitialState of the mover is
TriggerOpenTimed or TriggerToggle. For a list of the damage of the UT weapons,
and more about InitialState, go to the section Triggered
Movers
.
-bSlave: makes the mover brush a slave of another mover with the same Tag.
This is another way to attach movers to each other, and the effect is the same
as if you would use the AttachTag of a mover.
-bUseTriggered: this was supposed to activate the mover when a player pushed a
key on the keyboard, like the use key in HalfLife. This was left away in
the final version of Unreal.
-DamageThreshold: The amount of damage the mover needs to get to be opened
when it is bDamageTriggered.

<font size="4" color="#FF0000">Part III</font>

<font size="4">A
door that opens by pushing a button
</font>

This will be a regular door,
that is opened by a button. The button itself is also a mover that
disappears in the wall when you push it, and returns after a few seconds.
There will not be used any triggers.

First make two rooms and connect them
with a door. Set the InitialState of the door to TriggerToggle or
TriggerOpenTime, and set its Tag to "Door". Now add a mover
that looks like a button next to the door. Make Key0 the position of the
button outside the wall, and Key1 the position of the button inside the
wall. Set its Event to "Door". You can also use BumpEvent
instead, then the door will open as soon as you touch the button, instead of
after its completely in the wall. You should see a red line going from
the button to the door.

Now make a similar button for the other room
(otherwise you will not be able to open the door again when you're in the other
room).

That's it, its done!


<font size="1">The door with buttons</font>

<font size="4">A
train with a button
</font>

This train will have one button in it to toggle
between two stations. In the stations will be placed a button as well to
call the train.

Make a large area and make tracks. Then make a mover
that looks like a train with a button in it, and let it be able to go to both
stations.


<font size="1">The train mover</font>

Set the
train's InitialState to TriggerToggle and Tag to Train. Add a trigger in
the train, set both its AttachTag and Event to Train. The trigger will
now move when the train moves, so it will always follow the train.
Sometimes this might give small problems, especially if you give the trigger a
small radius. So give the trigger a large radius. If you would have
placed two fixed triggers at the begin- and endposition of the train, you would
reactivate the triggers everytime you reach the other side, so attaching it is
the only solution.

Now also add two buttons with triggers in the stations, and
set their Event to Train as well (but <u>not</u> their AttachTag!)


<font size="1">The triggers for the train</font>

The
buttons will call the train immediately, even if its moving. This might be
annoying in multiplayer, where players will be pressing the buttons on two sides
at the same time while another player is on the train, etc... To prevent
this you can remove the triggers in the stations, or you can use an
ElevatorMover for the train instead, and give it two buttons.
ElevatorMovers don't listen to triggers while moving. The only
disadvantage then is that you won't be able to give your train sound.

An
example map, dm-train.unr, is included in the zipped version.

<font size="4">A
wiggling boat
</font>

In reality, boats always wiggle a bit with the
waves. That's a good reason to make your boats or rafts in UT do this as
well.

To do it, attach the boat to another mover that does the wave
movement. The keys of the boat itself are the different places it will
sail to.

Rotations will not work for attached movers,
but you still can make a subtle up and down movement. Actually, I'm not
sure if rotations work or not. When I tried it, it didn't, but once I
attached a mover to a bird, and the mover rotated when the bird did.

Here's a step-by-step
guide on making such a boat:

Make a room or outdoor environment with water in
it, and place boat or raft on the water.


<font size="1">The raft</font>

Give
the raft a Key1: its position on the other side of the water. Now you
have a working normal raft.

Now make a new room outside your map, with a TimedTrigger and a mover inside of it.&nbsp;
Set the movers InitialState to TriggerPound, set StayOpenTime and OtherTime to 0.5 and its MoveTime to 1.&nbsp; Make its
Key1 a little below Key0 (8 or 16 units lower).&nbsp; Read the section Looping
Movers
to get this to work.

Give the trigger
the Event "Wiggle", give the small mover the same Tag, and give the
boat mover the same AttachTag.

If
everything went well, it should work now. If you play the map you will
find the raft is moving up and down on the waves. It will only move up and down when it's not moving to the other side
of the water.&nbsp; You can't do much about that (except if you give the
raft more keys), its the way the movers are programmed.

An
example map, dm-boat.unr, is included in the zipped version.

<font size="4">A
Real "Office Building" Elevator
</font>

I made a seperate page on
this: elevator.html

Image

Return to “UnrealED”

Who is online

Users browsing this forum: No registered users and 1 guest