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. |