Triggers and More Triggers
 Home
 Overview
 Starting
 Interiors
 Exteriors
 Triggers
 Movers
 Skybox
 Decorations
 Inventory
 Monsters
 URLs & Notes

ATTENTION: This work is copyright 1998 Ron Andrade for Portal Special Edition. Do not duplicate for other than your own purposes or redistribute without the permission of the author: Ron Andrade (Gadget Factor)

Second Edition is Sponsored by

AT&T Chat `n Talk
AT&T Chat `n Talk

By  now, you should be an absolute whiz with manipulating your brushes,  creating primitives and using the intersect and desintersect tools to  create impressive structures. You should also be quite familiar with  zones and what they are. Also, you have touched on sound, textures and  basic mover creation.

As you become  more adept at creating and manipulating these things, the Special  Edition tutorials will become less verbose on these subjects. You  will become more advanced in specific features of UnrealEd and SE  will become less expressive of how to accomplish them.

With that said,  we will recap: By now, your should have an outdoor world, with ground  or organic texture from the absolute floor almost to the top. The  floor is under water and is now referred to as your "lake bed."  The low plateau is now just above your water surface and is the portion  of your map where part of your antenna array structure is founded.  The other portion of your array may or may not be founded in the lake  at the far end of your valley.

Also in the valley,  near the top of your antenna array is a second plateau. A place where  your players can duke it out - and a place where they can attempt  to snipe anyone on the array itself. You have a couple of underground  tunnels accessible from under water in the lake.

As for the array,  it is at least most of the length of your valley and slightly taller  that the upper plateau. This allows your players to look slightly  downward at the plateau. Your array has four movers: The elevator  the lifts the player to the top of the array; the plank that drops  from beneath the player - it connects the elevator tower to the actual  "control" platform; a twisting-lift mover (to demonstrate  that movers do not have to be up-and-down only); and the antenna dish  itself, which drops out from under any player standing on it.

These movers are  not very original. And, without a minor change, they will become very  boring, very fast and your deathmatch players will not go near them  once they learn what they do.

If you have been  following these tutorials from the beginning, you may recall a statement  similar to this:

"Some first-person  shooter players seem to have nothing better to do than to spend every  waking moment perfecting their skills at annihilating the human competition.  'Dying' is part of the fun of multi-player deathmatch games, but not  when that is all you do.

"One of the  interesting things of Jedi Knight from LucasArts, is that the designers  included booby-traps and other perilous situations for players. This  helps to even the score between the 'deathmatch Gods' and the rest  of us.

"By including  simple puzzles, secret areas and booby-traps, we will cause the player  to rely, at least partially, on skill and tactics as well as cunning  and marksmanship."

To accomplish  this, we need to change the properties of a couple of these movers.  Right-click and bring up the properties box on your plank mover. Set  the mover's object settings to "Trigger Toggle" - and set  its TAG to "Plank." Under most circumstances, the plank  would fall, wait a few seconds and raise itself. With the Trigger  Toggle command, the plank will open when triggered and stay there.  When triggered again, it will close and so on.

Select TRIGGERS  > TRIGGER in your objects library (Classes.) Then, in your camera  view, right-click to place a trigger anywhere on your plank. Double-click  the trigger to bring-up the properties box. Set the trigger type to  TT_Shoot and the event to "Plank." It your axis views, move  the trigger right next to the computer console on your control platform.  Now when a player shoots at the computer console, it will trigger  the plank to fall (or rise) each time a projectile hits it.

This can prove  interesting primarily because the player must first discover that  this can be done. It makes for a great defense mechanism if another  player or bot is charging across the plank. Also, if a fire-fight  ensues on the plank, a stray round could surprise everyone! (Evil  grin time, folks.)

Let's add an additional  trigger for this event. Click once on your plank trigger and duplicate  it (press CTRL-W) - drag the copy and move it right next to the cylinder  that pivots the plank. Put it on the side facing the plateau. This  way, anyone with a little savvy and an experimental streak will discover  that they can trigger the plank from the plateau - all they need do  is shoot at the cylinder which "contains the engine and gearbox"  that moves the plank up and down.

Repeat the steps  you used to create the first trigger for the plank, only create one  for the antenna dish this time. For now, just leave that trigger on  the dish and set the dish itself from Stand Open Timed to Trigger  Open Timed (not toggle.) We will move it later. Do the same, once  again, for the twister lift, also as an "open timed" object.  There are a couple of minor problems with the twister lift you need  to take into account.

First, a projectile  should not activate the twister. Primarily because this is not the  obvious solution and it will confuse your players. The trigger type  should be the similar as the one created for your lifts and elevators  - but not a stand open timed - meaning the mover will be activated  when the player or any other character stands on it. If the mover  is based on something standing on it - it will activate when something  stands on it, sure, but then it will return back to the original position  afterward. Though this may be your initial intent, you should keep  a thing or two in mind: Always provide a way out for your players  - especially in deathmatch games. There is nothing more frustrating  than running into a corner and being helpless. Sure, the player could  jump off the array and hope he hits water, but that should be a last  resort. We will want a way to cause the twister lift to open to its  second position in case a player needs to reurn to the control platform.  Set the twister lift mover to a trigger open timed object.

Create the trigger  and set the trigger type to TT_AnyProximity. This way, any player  or bot or monster or bird or fish and falling Forrest Gump feather  that even comes close to the trigger will open the twister lift. Create  the trigger for the twister lift.

Next  problem: the trigger will be activated when a player comes within  range, thereby activating the trigger and opening the twister lift  even before the player can step aboard. Though this could prove to  be fun for the designer, the player would be dumbfounded and start  cursing your name forevermore for creating a broken map. The fix is  to set the trigger's Collision Proximity to a very low number, like  5 or 10. This means the player must get very close to the trigger  before it is activated. Because of the low proximity radius, you will  need more than on trigger so the twist is activated no matter what  portion of the twister the player happens to step on.

Duplicate the  twister trigger and place four or five of them along the outer edge  of the twister platform. Make one more duplicate of the trigger and  move it to a location near the open position. This last trigger is  the key. When the twister is closed, and a player coming from the  antenna dish side of the array needs to get back to the control platform,  he only needs to run into that trigger to open the twister - allowing  him to jump on board and ride up to the deck of the platform.

You  may want to create the appearance of a button our other control near  the twisters open point. This will give the player something to reason  on as to controlling the twister.

Our movers are  now complete (don't worry, we won't forget the dish.)

Your structure  layout may be very different from the sample map included with the  previous tutorial. If you have looked at it, you will have noticed  that one of the tower support beams, connecting the control tower  to the side of the plateau cliff, is hollow. This simply adds a little  fun to your level.

Locate a strategic  position where a player can see the dish clearly, but happens to be  a location that is inconspicuous. In the sample map mentioned, that  location is inside the support beam. The area near one end of the  beam is cut away to expose the interior of the beam. This is not to  allow the players of the game to notice the secret area - the exposed  cutaway will be covered with a zone portal to hide it. It is simply  a way to allow a player at this location to set a booby-trap in motion.

Based on this  sample map: Create a cube inside the support beam and subtract. This  gives you a nice hollow location that is oblivious to the rest of  your world. Using the cube brush and the intersection tool, create  a hole in the beam so the inner hallway is exposed to the outside  world. A picture window, if you will, where a player can watch his  victim plummeting to the ground when the antenna dish dips from beneath  him.

Decorate this  hallway with your desired textures and create more computer screens  at one end. Move the dish trigger you created earlier to these computer  screens and be sure the trigger type is set to TT_Shoot. Cover the  opening with a zone portal and set it to a transparent texture. This  will allow the player to watch the splat-in-progress, yet helps to  make the position inconspicuous to outside onlookers. Place an invisible  collision hull in front of the zone portal so the player cannot simply  walk through the glass (inplausiblility) - and create another hole  somewhere in the top of the beam - to allow the player access to the  hallway. Note: make the hole large enough that the player will fall-in  even if he is running - about 100 units square will be good. Use another  zone portal to cover this hole and set its texture to match the beams  texture.

To do this, first  make sure the zone portal is not invisible and is not transparent.  Be sure it is two-sided. Apply the same texture used on the beam itself.  Use the surface properties to rotate, flip, scale and pan the texture  so it blends in well with the rest of the beam.

You will need  to create a way out for the player who is here, so at the opposite  end of the hallway, create another hole in the bottom of the beam.  This one does not need to be as large as the first, because the player  will see it. Place a tiny platform about 200 units below the hole  to catch any player who jumps through. Create a mover or stairs as  desired to get the player back down to the ground. Remember, the secret  area should be a reward, not a punishment. So the player should not  be harmed too badly as he exits this area.

This secret area  presents a common problem for deathmatch games: squatters. Those players  who camp out in locations like these just so they can get in the kills  without being in relative danger themselves. An easy fix is to create  another mover - that is triggered by the dish mover.

Create a simple  square mover that fits snugly within the hallway of the support beam.  Place it at the end opposite the exit hole. Set keyframe 1 to the  end at the exit hole (or beyond) and sets the movers properties to  move nice and slow… say 5 or 10 seconds from keyframe 0 to 1.  Give this moving wall a TAG name and put this same name in the dish  mover's EVENT properties. Also, set the wall's properties to Crush  When Encroach. - this causes the mover to crush the player if he tries  to stay put.

Here is what you  will get: The player shoots the computers, causing the dish to tip  and spilling anyone on it to the ground. When the dish reaches its  full open position, the moving wall will be activated - forcing the  player to move to the exit hole. The slow movement of the wall will  allow the player to see his work as it goes splat. Also, if a player  enters the secret hallway while the mover is open - he will be in  for a surprise. When the wall returns to its normal position, the  dish will return to its normal position.

The key here is  to never tell any player about the secret area - or even that he should  try shooting at the computer consoles. Let them figure it out for  themselves. After all, that is where the fun is.

At this point,  your array is complete as far as this tutorial is concerned. However,  before you start on the skies and lighting and such, there are a couple  more things we need to do. Your players on the array may be able to  jump to the high plateau, but once they get there, how do they get  down without taking a deep water dive? You could create two lifts  on the side of the cliff - one going up and the other going down.  But, for education'' sake, we will implement the solution to a question  asked of this author.

The end result  will be a single mover that starts at the bottom of the cliff, goes  up and waits a few seconds then comes back down, waits a few more  seconds then goes back up and so on - totally automated with no other  interaction on the part of any player, bot, monster or pawn.

You will now create  what is called a "pounding" mover.

The following  description may not be the way UnrealEd authors intended the function  to work … but it does work and "if it ain't broke, why fix  it?"

First, create  your mover lift - make it nice and big - say 200 by 200 and about  10 units thick (or 100 units thick with stairs - it is really up to  you.) Set the appropriate keyframes - one on the ground and the other  at the top - where your player can step off onto the plateau surface.

In this mover's  properties, set the following configuration (working from the bottom  up):

OBJECT: set the  initial state to TriggerPound. This is what tells the trigger to rotate  between the first and last keyframe automatically.

MOVERSOUNDS: hey,  whatever you want here. We covered it previously.

MOVER: Anything  you want, except for these:

 MoveTime: Whatever  you want, but a nice slow ride might get some players' adrenaline  going ;-)

 OtherTime: This  is a very important setting. When the mover is set to pound - the  stay open time no longer exists. The mover has become a looping animation  so there really is no beginning or end - and the open time is simply  the time a mover pauses at it's "end" before it reverses  itself. Thus, the "other" time is the time a pounding mover  pauses at each keyframe.

 StayOpenTime:  This is the time to pause the mover at keyframe ZERO.

EVENTS: Give this  mover's TAG any name you wish, but remember the name. For this tutorial,  we will call it Pounder. We will call the EVENT ProxyMover.

Close the properties  box and create another mover. This "dumb" mover will not  actually move. You can hide it anywhere or even make it part of your  scenery. Do NOT set any keyframes for this mover. In the dumb mover's  properties…

These are the  only settings for the dumb mover:

OBJECT > INITIALSTATE  is TriggerToggle.

EVENTS > EVENT  is Pounder (or whatever your pounder's TAG is)

EVENTS > TAG  is ProxyMover. (or whatever your Pounder's EVENT is)

Close the properties  box. Create a standard trigger from your object library's Classes  group. Place the trigger next to the pounder mover - but not on it.  The trigger's properties are pretty simple: only the Trigger Type  and EVENTS settings are required. Set the trigger's EVENT to ProxyMover.  The TAG setting is not required. Set the trigger type to TT_AnyProximity.  Close the properties box.

Duplicate this  trigger and place it around the mover so that anything trying to get  on the mover must cross one of these triggers. Duplicate this group  of triggers and move the copies to the top of the cliff where a player  must pass over them to get onto the lift when it is at the top.

Now, here is how  it all works: Something must trigger the whole sequence. This is why  the trigger is needed. The reason for so many triggers is to ensure  the event get started as soon as possible. The trigger (any one of  them) will cause the dumb mover to begin its own event. Since it doesn't  move, it simply sends its event. The dumb mover's event signals the  pounder's tag - activating it. The pounder completes one cycle and  returns to keyframe 0. This completes the pounder's event, signaling  the dumb mover to begin its event all over again - which signals the  pounder all over again, creating a loop.

It took several  hours to figure out how to answer this one question of how to accomplish  this kind of event. After THAT kind of hard work, we hope the original  creator of this idea doesn't mind our using it. J

Since the dumb  mover doesn't move - it's event is over at the same time that it starts  - allowing the loop to continue.

Now that your  custom mover is pounding away, we have one more addition to make before  we end this chapter. If you have ever stood at the edge of any steep  incline or cliff, you may have noticed how the wind has a tendancy  to rush upward - accelerating as it gets closer to the top. Hence,  it is very windy at the top edge of most cliffs. You will now recreate  the sound of this rushing wind along the cliff edges of your plateau.

This is a very  easy task to accomplish. Move you camera view to the top of your plateau  at one end. In your object library, in the CLASSES section, locate  TRIGGERS > SPECIALEVENT. The special event trigger is a useful  tool for creating unique ambient effects, such as sound and music.  Create the special event trigger on the ground of your plateau and  double-click to open its properties box.

Set the properties  like so:

SPECIALEVENT:  No changes here.

SOUND > AMBIENTSOUND:  pick a nice rushing wind sound. A good selection can be found in the  AMBOUTSIDE library. In the looping section, a good selection of Winds  exists. Select one you desire for the ambient sound.

Set the RADIUS  to about 100. Not too much or the sound will be heard clearly from  the backside of the plateau - killing plausibility. You want the player  to hear the wind as he approaches the cliff.

The VOLUME should  be set to maximum for … well … maximum effect!

That's it. Close  the properties box.

Duplicate the  Special Event icon and spread the copies along the top of the cliff  and place them about 25 to 50 units away from the cliff (outward.)  Place them about 1000 to 1300 units apart and keep the level with  the ground of the plateau.

Creativity tip:  Use a different wind sound for each of your special events. As a player  moves along the top of the cliff - the sound and pitch will change  slightly giving the effect of real cliff-like wind physics. The different  shapes of the cliffs cause the wind to flow differently at different  points - causing a different sound at different portions of the cliff.  That;s not different - that's plausibility! ;-)

Time constraints  have dictated this chapter to be slightly shorter than previous chapters.  This is because a head-start is need on the creation of chapter five,  which will require high levels of verbal detail to describe the intricate  and highly customized movers for the last section of our map.

In the next chapter  we will deal with: intricately conceived movers and more booby-traps.  We will be creating the last of our construction before we move on  to the fine-tuning portion of level design. Beginning with chapter  six and thereafter, you will learn the finer points of special effects,  tighter trigger control, class-actor-pawn-decoration placement and  paradigms and a lot more.

Previous Chapter | Home | Next Chapter