![]() |
Okay, we're past the halfway point! Pretty much all that's left, is to make our multi_manager and set everything up to happen at the right moment. Let's switch to entity mode; and create a new entity (don't forget the alignment stuff! Remember: no overlap, no overlap - you'll be chanting it in your sleep by the end of this tutorial!). Now switch to selection mode, bring up the entity properties box for this new entity, and change the entity type to "multi_manager". One thing you may notice right off the bat: This sucker doesn't really have any keys! This may LOOK true; but in reality the multi_manager can have LOTS of keys. But you see, for the multi_manager - its keys are the NAMES of the entities it is supposed to trigger! So this means that they must be entered manually. The VALUES are the delay times before setting off the entity. So if I put "siren" with a value of "0.25", it means that a quarter of a second after the multi_manager is triggered, the siren will begin blaring. The MAIN thing to remember is that all times are from the BEGINNING of the multi_manager's activation. So, if I want the fly-by sounds to happen exactly 12 seconds after the SIRENS, I need to give the "flyby" a value of "12.25". NOTE: For all of these values, I arrived at them by a combination of timing each sound file (for a rough initial guess. I used PakExplorer to check out the sounds; see the FAQ in the Wavelength levels Department for a link to PakExplorer); and I did a fair bit of play-testing. To enter these values, you must TURN OFF "SmartEdit" Then, hit the "add" button, and type in the appropriate information into the little dialog box that pops up. Repeat this to fill in all of the following information:
KEY | VALUE |
targetname | airstrike0 |
siren | 0.25 |
team0close | 3.25 |
sirenoff | 13.25 |
flyby | 12.25 |
incoming | 16.25 |
explosion | 18.25 |
whitescreen | 18.25 |
rumble | 18.75 |
team0open | 22.25 |
You may see a few things that confuse you (some of those items we haven't even made yet), so let me explain: One quarter of a second after pressing the button, the sirens activate. Three seconds later the doors and such begin to close, through activating an entity we have yet to set up. At the 12.25 second-mark (9 seconds after the doors began closing), the Jet sound starts to play. One second after this, the sirens are shut off by an entity we haven't set up yet. Three seconds after THAT (while the jet sounds fade away), the "incoming" sound is played. Since it's 2 seconds long, the explosion sound happens precisely 2 seconds after it. At the SAME time, the screen is turned white and fades back in. Since the screen is white for a moment, there is a half-second delay before the screen-shake is set to activate. Then, 3.5 seconds later, the door/blast-shield opening sequence triggers (again, we haven't made this yet).
Well, I've put it off long enough; time to fill in those missing things. First off, the REASON we didn't just link the doors and such straight into the main multi_manager, is because you can't have two of the same "key". Since we need to trigger things like the doors and sirens TWICE; we need to do so indirectly. For that, we use (you guessed it) - ANOTHER multi_manager! Hey, nothing says you can't link (or "nest") these. I already set up and named the doors and blast-shields in the original map (The doors are "team0door" and "team1door", and the blast-shields are "blastshield0" and "blastshield1" - if you bring up the entity properties for them, you should see those already specified); so we don't need to worry about them. Just repeat what we did before by creating a new multi_manager, and set the following (remember to turn OFF SmartEdit!):
KEY | VALUE |
targetname | team0close |
team0door | 0 |
blastshield0 | 7 |
This sets the door in motion IMMEDIATELY, and shuts the window 7 seconds later. The reason for the delay, is because the window blast-shield slams shut quickly; while the door is set to move ominously and slowly (and allow time for would-be fighters outside to rush in). Now we need to open the doors and such back up (with another multi_manager), so copy and paste this entity, open the properties, turn off SmartEdit; and modify it to match the following:
KEY | VALUE |
targetname | team0open |
team0door | 0 |
blastshield0 | 0 |
We want people to begin fighting again immediately; so the blast shield raises without a delay in this one. The only thing missing from our list now, is the "sirenoff" multi_manager. So paste again, bring up the entity properties window, and turn off SmartEdit. Enter the following:
KEY | VALUE |
targetname | sirenoff |
siren | 0 |
And that's it! Our little "airstrike" for Team 0 is complete as far as special effects go. Select the button with the master of "teammaster0", and change the TARGET key to "airstrike0"
Try Compiling and running in TEAMPLAY mode; and see if you can get it all to work. When you're done testing it, come back and start WorldCraft again. Back? Okay, time to set up our "damage zone". Change to block creation mode. Select the "AAAtrigger" texture. Make a new brush in the XY view that spans from coordinates (-480, 256) to (-288, -192), and adjust it in the XZ or YZ views to span Z coordinates (32) to (64). Change to selection mode and Tie this new brush to an entity. Bring up the entity properties box if it isn't already up; and change the entity class to "game_zone_player".
This is a special new type of entity; so let me explain it really quickly. What the game_zone_player does, is track who is touching/INSIDE itself; and who is OUTSIDE of it. When activated, the game_zone_player triggers its "OUTSIDE Trigger" and applies that to all of the players OUTSIDE of it; and applies the effects of the "INSIDE Trigger" to everyone INSIDE of the game_zone_player. The game_zone_player also has keys for setting counters to the specific number of people inside/outside of it at the moment it was triggered; but we won't be dealing with those today. Simply set the following:
KEY | VALUE |
Name | zone0 |
Target for Inside | score |
Target for Outside | killer |
Okay, now we need to create those two items we just named off in that entity. So switch to entity creation mode; and make a new "game_score" entity. This is another new type of entity that awards a certain number of positive or negative points to whomever triggers it. Since our game_zone_player activates this for every player inside the zone, each player will get 5 points. In the entity properties box enter the following:
KEY | VALUE |
Name | score |
Points | 5 |
And of course, we simply MUST splatter those people who didn't make it to safety; so make another new entity, this time a "game_player_hurt" entity. This entity works like "game_score", only instead of points, it does damage. Here's what you should enter in the entity properties box for this entity:
KEY | VALUE |
Name | killer |
Damage | 500 |
Lastly, these new sequences aren't any good if we don't link them in to our main events; so go to Selection mode and select the "airstrike0" multi_manager. Turn OFF SmartEdit, and ADD a key:
KEY | VALUE |
zone0 | 18.25 |
Why don't you Compile and test this in TEAMPLAY mode? See if you can make it back to your bunker in time to be saved; and also try getting killed. Look at your score a couple of times to make sure its being affected properly (5 points every time you survive a strike)! When you're done with that, come back and select the OTHER func_button (in the other bunker). Bring up it's entity properties; and enter "airstrike1" into the TARGET key. We've got everything working for one team; we need to make it happen for both now.
In selection mode, copy the "airstrike0" multi_manager and paste it in near by. Bring up the entity properties box and change the following (with SmartEdit OFF):
Now, we need to do similar things for the door multi_managers. Select the "team0close" multi_manager. Copy and paste it. Then bring up the entity properties box and change the following (with SmartEdit OFF):
Now, we need to do the same thing for the other door multi_manager. Select the "team0open" multi_manager. Copy and paste it. Then bring up the entity properties box and change the following (with SmartEdit OFF):
Almost there! The absolute last step to complete things, is to switch to brush creation mode. Make sure that you're using the "AAAtrigger" texture, and in the XY view make a brush that spans from (800, -64) to (992, -512); and in the XZ or YZ views it should span from Z coordinate (32) to (64). Confirm the brush, then select it and tie it to an entity. Bring up the entity properties box; and enter the following:
KEY | VALUE |
Name | zone1 |
Target for Inside | score |
Target for Outside | killer |
That should do it! Try compiling and running in TEAMPLAY mode; and see if you can get both teams' triggers working. Happy hunting! Part 2 will take this map and increase the complexity and restrictions on scoring. If you would like to see how I did this map, you can DOWNLOAD IT HERE.
As always, feel free to E-mail me (see the contact page in Wavelength's Levels department) if you have any questions or problems. Good luck!
![]() |
Half-Life, and the Half-Life logo are trademarks of Valve Software and Sierra Online, used with permission. All screenshots and drawings of Half-Life are (c) copyright Valve Software, 1998. All rights reserved. All original content (text and art) are (c) copyright Wavelength, 1998, and may not be reproduced without permission. |