RvS Mapping Tutorials
Odds & Ends
Navigation

Ambient Sounds in Raven Shield Maps
-by Beckett, last updated May 15, 2003

This tutorial will teach you how to place several types of ambient sounds, import your own custom sounds, apply EAX effects, trigger dynamic music, and enable footsteps throughout your map. This tutorial will not cover basic interaction sounds such as lock-picking, climbing, or exploding. For information on assigning sounds to doors, ladders, or destructible objects, see my previous tutorial on Doors, Ladders, and Damage Models.

This tutorial assumes that you understand the basics of UnrealED and know how to manipulate brushes, build map geometry, and load custom maps into Raven Shield. In addition, this tutorial assumes that you know how to place rotating doors and breakable windows, and are comfortable placing portal sheets to separate a map into multiple zones. If you’re not comfortable with these concepts, please review my earlier tutorials and then come back to this one.

Let’s get started. For the purpose of this tutorial, we’re going to create a simple 5 room map in which we’ll be able to place logical sounds. Set your builder brush to a cube primitive sized Height=320,Width=640,Breadth=640. In a perfect square formation, subtract out 4 rooms, selecting a different texture for each room and leaving a 16 unit wall between each room. These four rooms constitute our house. Resize your builder brush to Height=640,Width=640,Breadth=1296. Select any appropriate outdoor texture and subtract out an area parallel to the house, separated from two of the rooms by a 16 unit wall, to serve as our front yard. Make sure the floor of the front yard is aligned with the floor of the house.

Carve out four standard-sized (230x128x16) doorways, one between each room, and an additional doorway leading from one of the front rooms into the front lawn. Then, in the other front room (the other room adjacent to the front lawn), carve out a small window (any size you wish) looking into the front lawn. Place a rotating door and a breakable window pane in the front of the house. (If you need help setting these up properly, review my
Doors, Ladders, and Damage Models tutorial.) Finally, place portal sheets and zone info actors to separate the map into 5 distinct zones. (If you need help with this, please work through my Zones, Portals, and Anti-portals tutorial and then come back to this one.) Check your map in ‘Zone/Portal View’; it is essential that your zones are setup correctly or very little of what I show you will function properly. Assign some ambient light to each zone and place an insertion zone and path node in the front yard. Test your map in-game if you’d like, to make sure the door and window are working properly. At this point, your map should look something like this:


Now we’ll place a few objects throughout the house, to identify each room. This may seem silly at first, but it will help us to keep things straight as we go along. Open the static meshes browser and browse to ‘Island_SM.Clock.GrandClock’. Right click on the floor of the room where we placed the front door (in the room, not in the front lawn) and choose “Add Static Mesh: ‘Island_SM.Clock.GrandClock’”. Reposition the static mesh, if necessary, so that it sits properly on the floor. From now on, I'll refer to this room as our living room. Move to the room with the breakable window, and place the static mesh ‘Garage_SM.cafeteria.frigo’. This, of course, will be our kitchen. In the other room adjacent to the living room, place the static mesh ‘Island_SM.Salle_de_bain.toilet_01’. This room will be our bathroom. In the final room, furthest from the living room, place the static mesh ‘Island_SM.Meuble.Bed_Double’. This is now the bedroom, and our house is complete.

Ambient Sound Actors

When attaching a sound to a particular object, you can use an ambient sound actor, or--if the object is a static mesh--you can assign the sound properties directly to the object. I’ll show you both methods.

For our first example, let’s add sound to the refrigerator in our kitchen. Open the actor classes browser, expand “Keypoint”, and select “AmbientSound”. Right click on the kitchen floor in front of the refrigerator and choose “Add AmbientSound Here”. Reposition the AmbientSound actor (represented by a key sitting on top of an audio icon) so that it sits a few feet off the floor and is partially embedded in the front of the refrigerator. Double click on the AmbientSound actor to open the properties window and expand “R6Sound”. Select AmbientSound and click the “…” button. Open the “SFX_Import.uax” sound package, and select “Play_Fridge_Compressor”. (If the sound begins playing in the editor, click the square “Stop” button in the sound browser.) Return to the properties window and click the “Use” button. Select AmbientSoundStop and click the “…” button. Select “Stop_Fridge_Compressor”. Return to the properties window and click the “Use” button.

Let’s take a look at some of the other settings in the “R6Sound” section of the ambient sound actor’s properties. m_fAmbientSoundRadius doesn’t do anything, so keep it set to “0”. m_fSoundRadiusActivation sets the maximum distance from the actor where the sound should begin playing. m_fSoundRadiusLinearFadeEnd marks the distance from the actor where the sound should begin playing at the lowest volume possible. m_fSoundRadiusLinearFadeDist marks the distance from the actor where the sound should reach maximum volume, gradually gaining volume as the player moves toward the ambient sound actor from the LinearFadeEnd point to the LinearFadeDist point. Finally, m_fSoundRadiusSaturation marks the distance from the actor within which the sound should play at maximum volume.

In my opinion, it makes sense to always set the Saturation radius and the LinearFadeDist radius to the same smaller value and to set the Activation radius and the LinearFadeEnd radius to the same larger value, so that you essentially have an inner radius where maximum volume occurs and then an outer radius where the linear fade occurs. Unfortunately, there is no way to view a graphical representation of the sound radius in the editor the way you could in earlier versions of UnrealED. However, if we could view a graphic representation of what I’m describing, you would see one circle centered inside another, with the ambient sound actor in the exact center of both circles.

Note that the LinearFadeDist radius and LinearFadeEnd radius settings only function with positional sounds. If you ever assign LinearFade settings, but then find that the sound is staying at full volume no matter where you stand, the reason is probably that the sound you are using was not imported using the “Space” option. In these cases, you’ll also notice that the sound fills both ears/speakers, even when testing on a surround sound system. (I’ll discuss positional sound a bit more, later.) Note also that aside from the LinearFade settings, there is no way to modify the default volume of an ambient sound. If you ever desperately need to lower the volume of a positional sound that’s already in a sound package, you can set the Saturation radius and LinearFadeDist radius to “0” so that the sound never reaches maximum volume without the player putting their face right next to it.

Let’s decide how far we want our refrigerator compressor sound to extend. A good way to estimate your distances is to first select the top-down viewport, then, hold [Shift] and click and drag the middle mouse button in the top-down viewport from your ambient sound actor to the furthermost spot where you think the sound should reach. Note the number of units displayed, and then use that distance as your m_fSoundRadiusActivation value. In the case of our humming refrigerator, let’s make sure the sound fill the kitchen completely. Set m_fSoundRadiusSaturation and m_fSoundRadiusLinearFadeDist to “200”. Set m_fSoundRadiusActivation and m_fSoundRadiusLinearFadeEnd to “700”.

Unfortunately, the 3d viewport’s realtime preview doesn’t allow you to preview ambient sounds in the editor the way you can in UT2003 maps, so we’ll need to launch the game to test our sounds. Try out the map in-game. Notice that when you get within 700 units of the refrigerator, if you listen closely you can hear a quiet hum. As you get closer the hum becomes louder, and when you get within 200 units of the fridge (practically right next to), the sound stays at maximum volume. Depending on your sound card and speaker configuration, you’ll observe a 3d positional effect as you navigate around the kitchen. Notice also that the sound is not blocked by our zone portals or BSP walls and reaches easily into other zones.

Now that we’ve listened to it, I don’t know if it’s appropriate that the refrigerator should be heard outside of the kitchen. Let’s go back to the editor and adjust this. Open the properties for the ambient sound actor. Expand “R6Sound” and set m_bPlayIfSameZone to “True”. If the Activation radius is larger than the size of your zone, the m_bPlayIfSameZone setting will limit the sound to the edges of the zone the actor is placed in. However, if the Activation radius is smaller than the size of the zone, the m_bPlayIfSameZone setting will not cause the sound to expand past that radius (in other words, it will not automatically fill the zone). The m_bPlayIfSameZone setting can be useful to prevent sound from bleeding through a wall in cases where a portion of the activation radius overlaps into another zone. If you test the map again, you’ll see that the sound is no longer heard outside of the kitchen. However, within the kitchen the linear fade still functions as before.

Let’s move to the living room and assign a sound to our grandfather clock. As I mentioned earlier, you can assign ambient sounds directly to a static mesh. Double click on the grandfather clock to open it’s properties and expand “R6Sound”. Select AmbientSound and click the “…” button. Open the “SFX_Island1.uax” sound package, and select “Play_Island1_Clock”. Return to the properties window and click the “Use” button. Select AmbientSoundStop and click the “…” button. Select “Stop_Island1_Clock”. Return to the properties window and click the “Use” button. Set m_fSoundRadiusSaturation and m_fSoundRadiusLinearFadeDist to “400”. Set m_fSoundRadiusActivation and m_fSoundRadiusLinearFadeEnd to “1500”. Of course, a radius this large will cover most if not all of our small map. Ideally, I’d like the tick-tock of the clock to extend into kitchen and bathroom, but not into the bedroom and especially not into the front yard, as it surely would if were to test the map now. So let’s limit the sound to three zones: the living room, kitchen, and bathroom.

Set m_bListOfZoneHearable to “True”. Select m_ListOfZoneInfo and click the “Add” button three times. Select [0], click the “Pick” button, and carefully click the eyedropper on the ZoneInfo actor in the living room. Select [1], click the “Pick” button, and click the eyedropper on the ZoneInfo actor in the kitchen. Finally, select [2], click the “Pick” button, and click the eyedropper on the ZoneInfo actor in the bathroom. The m_bListOfZoneHearable setting causes the ambient sound to only play in the zones you specify under m_ListOfZoneInfo. This setting is especially useful in a multi-floor situation to control whether you want the sound bleeding into the upper and lower floors. Like the m_bPlayIfSameZone setting, the m_bListOfZoneHearable setting will never cause the sound to expand past it’s Activation radius. So, if you are using the bListOfZoneHearable setting, make sure you set an Activation radius large enough to cover all the zones listed under m_ListOfZoneInfo.

Test the map and see how our grandfather clock sounds from different rooms. As you can see, ambient sound functions pretty much the same whether it’s assigned to an ambient sound actor or to a static mesh. The benefit of assigning sound right to a static mesh is that the sound will mold itself to the shape of the object. So, for example, if the static mesh is a long pipe, positional sound will radiate out from the full extent of the pipe. On the other hand, the benefit of using all ambient sound actors is that your map will be better organized in the editor. If you assign a lot of sounds to static meshes throughout your map, you could find yourself scratching your head later, wondering “where is that sound coming from?!”

Next, we’re going to create a destructible sound source. Open the actor classes browser and select "R6InteractiveObject" (no need to expand it). Right click on the floor of the bathroom, near the wall, and choose "Add R6InteractiveObject Here"; a little dragonhead icon will appear. Double click on him to open the properties window, and expand "Display". Change DrawType to "DT_StaticMesh". Select StaticMesh and click the "..." button. Open the “Garage_SM.usx” package, choose the “BreakableObject” group, and select “Radio”. Return to the actor properties window, and then click the "Use" button. Reposition the radio so that it sits properly on the floor of the bathroom, if necessary.

Expand “R6Sound”. Select AmbientSound and click the “…” button. Open the “SFX_Island1.uax” sound package, and select “Play_Island1_TVMusic”. Return to the properties window and click the “Use” button. Select AmbientSoundStop and click the “…” button. Select “Stop_Island1_TVMusic”. Return to the properties window and click the “Use” button. Set m_fSoundRadiusSaturation and m_fSoundRadiusLinearFadeDist to “200”. Set m_fSoundRadiusActivation and m_fSoundRadiusLinearFadeEnd to “500”. At this point, of course, the TVMusic loop will play out of the radio from the start of the game. To make it more fun, we’re going to allow the player to destroy the radio, and thereby silence the music.

Expand "R6Damage". Set m_iHitPoints to "500". Select m_StateList and click the "Add" button. Select SoundList and click the "Add" button. Select [0] and click the "..." button. With the “SFX_Island1” sound package still open, select "Play_Island1TVCrash". Return to the properties window and click the "Use" button. Select SoundList and click the "Add" button again. Select [1] and click the "..." button. Select "Stop_Island1_TVMusic". Return to the properties window and click the "Use" button. Triggering this “Stop_” clip will instantly silence the ‘TVMusic’ loop. (I’ll explain sound loops in more detail in the next section.) Of course, normally we would swap the skin or static mesh of the radio to show the damage inflicted, but we’re not going to spend time doing that now. If you’re not sure how to assign those properties to a destructible object, I recommend you review the last section of my
Doors, Ladders, and Damage Models tutorial. You should now have a good understanding of how to assign ambient sound actors to objects. We’ll revisit some of these concepts later when I discuss importing custom sounds.

Zone Entry Sounds

When you want to assign background noises to your map, environmental sounds that are not attached to any particular object, you should use what I refer to as zone entry sounds. The purpose of zone entry sounds is to make the player feel like the map area is part of a larger universe, to convince the player’s imagination that there are birds chirping, cars honking, and planes flying overhead, just out of sight. I am going to show you first a simple way to implement zone entry sounds, which will work with both RvS campaign sound clips and custom imported sounds, and then a more complex technique which produces better results, but will only work with the built-in campaign sound files.

Double click on the ZoneInfo actor in the front yard to open it’s properties widow, and expand “R6Sound”. You’ll notice two settings here: ‘m_EnterSounds’ and ‘m_StartingSounds’. It’s important to understand how these work. Starting sounds only trigger upon insertion into a zone. Enter sounds only play when physically walking into a new zone, or when switching from an operative in one zone to an operative in a different zone. Both settings are designed to play looping sounds. Once a starting sound or enter sound begins playing, it will continue looping and playing even if the player crosses into another zone. (In fact, some special effect sound files--which we’ll deal with later on--even continue playing when you die and respawn.)

The only way to silence a looping zone entry sound once it has been triggered is by triggering the looping sound’s matching “Stop_” file, a file that is automatically created along with the “Play_” file for every looping sound that is created/imported. (In other words, every looping sound is actually made up of two clips, for example: “Play_MySound_1” and “Stop_MySound_1”. I’ll show you how to import your own looping sounds later on in this tutorial.) The “Stop_” file can be triggered as an enter sound in a different zone, or as an ‘m_ExitSound’ in the present zone, a third setting which you’ll notice in the “R6Sound” section of the ZoneInfo actor properties. Exit sounds trigger as the player leaves the present zone. In most cases either strategy will work. I find that I rarely use the exit sound setting because it limits your control of the situation. For example, let’s say a map contains two connected outdoor zones and one indoor zone, and the player spawns in one of the outdoor zones where they hear the sound of the wind. In this situation you probably want the wind to stop if the player moves indoors, but not if they move into the adjacent outdoor zone.

With the front lawn ZoneInfo actor still selected, and the “R6Sound” section expanded, select m_StartingSounds and click the “Add” button. Select [0] and click the “...” button. Open the “Ambiences_Import.uax” sound package and select “Play_Theme_Multi_Import”. (If the sound begins playing in the editor, click the square “Stop” button in the sound browser.) Return to the actor properties window and click the “Use” button. Next, open the properties for the ZoneInfo actor in the living room. Select m_EnterSounds and click the “Add” button. Select [0] and click the “...” button. With the “Ambiences_Import” package still open, select “Stop_Theme_Multi_Import”. Return to the actor properties window and click the “Use” button.

If we were to test the map at this point, there would still be one major problem; the street sounds would stop as soon as we entered the living room, but they would remain silent even if we walked back in to the front yard. Open the front lawn’s ZoneInfo properties again. This time, select m_EnterSounds and click the “Add” button. Select [0] and click the “...” button. Select “Play_Theme_Multi_Import” again. Return to the actor properties window and click the “Use” button. Now test the map in-game. The front lawn sounds good, but it certainly is a sudden change in atmosphere when you enter the living room. That was the simple method. Now I’ll show you the more complex technique, which is used by all of the campaign maps.

This time we’re going to let the ‘Theme_Multi_Import’ loop play right from the beginning to the end of the game. So double-click on the living room ZoneInfo actor, expand “R6Sound”, expand ‘m_EnterSound’, select [0] and click the “Delete” button. Do the same thing to remove the m_EnterSound we assigned to the ZoneInfo in the front lawn. (Don’t remove the ‘Play_Theme_Multi_Import’ clip which we assigned to the m_StartingSound setting.)

The technique we’re going to use will essentially fade-out and dampen the outdoor sounds as we move deeper into the house. The secret to making this technique work is that the ‘Play_Theme_Multi_Import’ sound is a multi-track sound clip. (It’s similar, as far as I can tell, to how multi track music is used in some other Unreal engine games.) And the other so-called sounds in that same package are actually special effects filters which allow us to fade individual tracks in and out, without interrupting the loop. I found the naming of these special effects filters rather confusing at first. Just carefully double-check as you do the following steps to make sure you’re assigning the correct effect each time.

Select the ZoneInfo actor in the living room, open the actor properties window, and expand “R6Sound”. Select m_EnterSounds and click the “Add” button. Select [0] and click the “...” button. With the “Ambiences_Import” package still open, select “Import_Trck0_Out_InRoom”. Return to the actor properties window and click the “Use” button. The important part of this name to notice is “Trck0_Out”, which means that this filter will fade out track 0 if that track is already playing when the player enters the living room. Note that track 0 will then remain faded out until another zone fades it back in. Select m_EnterSounds and click the “Add” button again. Select [1] and click the “...” button. Select “Import_Trck1_In_FromRoom”. Return to the actor properties window and click the “Use” button. This filter will fade in track 1 if it is not already playing. Now repeat the steps above to assign those same two m_EnterSounds to the ZoneInfo actor in the kitchen. The result of what we’ve just done is that whenever the player is in the front section of the house, he or she will continue to hear the ‘Theme_Multi_Import’ loop, but track 0 will be faded out.

Now let’s take care of the back rooms. Select the ZoneInfo actor in the bathroom, open the actor properties window, and expand “R6Sound”. Select m_EnterSounds and click the “Add” button. Select [0] and click the “...” button. Select “Import_Trck0_Out_InRoom”. Return to the actor properties window and click the “Use” button. This is the same filter we assigned to the front rooms, which fades out track 0. You may wonder why we bother assigning this filter to the back rooms if the player must pass through the front rooms to get there. You’re forgetting that a player can jump from any zone to any other zone by switching to a new operative. Keep this in mind whenever you assign zone entry sounds. Select m_EnterSounds and click the “Add” button again. Select [1] and click the “...” button. Select “Import_Trck1_Out_In_Room'”. Return to the actor properties window and click the “Use” button. This filter will fade out track 1 if it is already playing when the player enters the bathroom. Now repeat the steps above to assign those same two m_EnterSounds to the ZoneInfo actor in the bedroom. Good job! Now, players will have both track 0 and track 1 faded out when they are in either of the back rooms.

We’re almost done, but we still need to assign filters to the front lawn in case players come back out of the house. Open the actor properties for the ZoneInfo actor in the front lawn and expand “R6Sound”. Select m_EnterSounds and click the “Add” button. Select [0] and click the “...” button. Select “Import_Trck0_In_FromRoom”. Return to the actor properties window and click the “Use” button. This filter will fade in track 0. Select m_EnterSounds and click the “Add” button again. Select [1] and click the “...” button. Select “Import_Trck1_In_FromRoom”. Return to the actor properties window and click the “Use” button. This filter will, of course, fade in track 1.

There’s just one more thing we need to do. Remember how I mentioned earlier that some special sound effects continue playing, even when the round restarts? At this point, if our last team member died in one of the back rooms (or if we manually restarted the round while standing in a back room), we would respawn in the front lawn but it would sound as if we were still in the back room! Let’s fix that by automatically fading in both tracks upon insertion. Select m_StartingSounds and click the “Add” button. Select [1] and click the “...” button. (Make sure you don’t accidentally select [0] and replace the ‘Play_Theme_Multi_Import’ clip.) Select “Import_Trck0_Insert1”. Return to the actor properties window and click the “Use” button. Select m_StartingSounds and click the “Add” button again. Select [2] and click the “...” button. Select “Import_Trck1_Insert1”. Return to the actor properties window and click the “Use” button.

Excellent! Let’s load up the map and explore. Notice now that as you enter the front door of the house, the street sounds fade to a lower volume, but you can still hear a few car horns and barking dogs outside. Now move into one of the back rooms. Pretty quiet. But if you crank up your speakers, you can still make out a few car horns in the distance. It’s so subtle that most players won’t consciously notice it, and--in my opinion--that helps to make it even more effective in enhancing the atmosphere.


I used sounds from the Import Export package in this tutorial, because out of all the campaign maps I felt this sound package did the best job of simulating the effect of hearing outside background noise as you move through a building. All of the campaign maps use this same multi-track technique, however it’s not handled exactly the same on every map (for example, in the Penthouse map the soccer game is one of the tracks in the main loop). I don’t plan to write a separate ambient sound tutorial for each campaign sound package, but hopefully I’ve given you a good understanding of how the multi-track technique works, so that you can play with a particular sound package on your own--fading different tracks in and out--until you get the exact effects you want on your map. The major downside to this multi-track approach is that, at this point in time, I have no idea how the multi-track sound clips or the special effects filters were created, so I can’t offer any tips on how to implement this technique with imported custom sounds.

If you are comfortable doing some sound editing, there is one other method you could try when using custom sounds as background noise, to avoid having the sound suddenly silenced as you enter a new zone. First, using sound editing software, split your sound into 3 or 4 different .wav files. This could be done by simply staggering the timeline of each clip (so the dogs don’t all bark at the same moment), or by separating different ‘tracks’ (dogs barking, horns honking, etc.). Next, import each .wav file as a looping, positional sound (which I’ll show you how to do later in this tutorial). Then, instead of using zone entry sounds, assign each clip to a different ambient sound actor and place them around the edge of your outdoor area. Finally, play with the LinearFade and Activation radius values on each ambient sound actor so that the clips fade out as the player heads indoors. This method still won’t be nearly as effective as the multi-track technique. I mention it merely as a workaround solution if you are working with custom background noise and need to soften the harshness of your zone transitions.

Our simple little map is sounding pretty good now, isn’t it? But let’s face it, no room in a real-life modern home is as quiet as that back bedroom. And shouldn’t the street sounds be louder if I put my ear towards the open door? Let’s add some additional touches.

Open the actor properties for the ZoneInfo actor in the living room and expand “R6Sound”. Select m_EnterSounds and click the “Add” button. Select [2] and click the “...” button. Open the “SFX_Island1.uax” sound package, and select “Play_Island1_InTone”. Return to the actor properties window and click the “Use” button. This sound will add the realistic hum of a modern home to our rooms. Repeat these steps to add the same sound to the other three indoor zones. Of course, we need to switch it off when the player goes outdoors. Open the actor properties for the ZoneInfo actor in the front lawn and expand “R6Sound”. Select m_EnterSounds and click the “Add” button. Select [0] and click the “...” button. With the “SFX_Island1” package still open, select “Stop_Island1_InTone”. Return to the actor properties window and click the “Use” button.

Finally, let’s assign some sounds to our rotating door and breakable window. Double click on the front door to open it’s properties, and expand “R6DoorSounds”. Select m_MoveAmbientSound and click the “...” button. Open the “SFX_Import.uax” sound package, and select “Play_ImportExteriorVar”. Return to the actor properties window and click the “Use” button. Select m_MoveAmbientSoundStop and click the “...” button. Select “Stop_ImportExteriorVar”. Return to the actor properties window and click the “Use” button. Move into the kitchen, double click on the window pane to open it’s properties, and expand “R6Damage”. Expand m_StateList and expand [0]. Select NewAmbientSound and click the “...” button. With the “SFX_Import” package still open, select “Play_ImportExteriorVar”. Return to the actor properties window and click the “Use” button. Select NewAmbientSoundStop and click the “...” button. Select “Stop_ImportExteriorVar”. Return to the actor properties window and click the “Use” button.

Load up the map in-game and check out the cool effects we just created. Walk inside the living room and open and close the front door a few times. Notice that the new outdoors sound is silenced when you close the door. Leave the door open, stand beside it, and turn one ear towards it, then the other. The sound is positional to the doorway (at least for players with a surround sound configuration). Move into the kitchen. Stand close to the window and shoot out the window pane. Notice how the sound suddenly streams in through the open window.

EAX Effects

For anyone not familiar with the term, ‘EAX’ refers to applying stereo and echo effects to all sound, to reproduce the feeling of a particular setting, for example a large concert hall vs. a small cave vs. a normal sized kitchen. Despite the term I’m using, I’m not sure if the EAX effects in Raven Shield are truly limited to EAX sound cards. In UT2003, the effects required EAX 3.0 support, but RvS handles these effects differently. Even if you have a non-EAX sound card, you’ll want to enable these effects anyway for the benefit of those playing your map. (If anyone can verify whether the effects work for non-EAX sound cards, please drop me a line.)

Raven Shield does not use the same ZoneEffects setting that UT2003 does to set EAX effects. The EAX effects are all stored in one of the RvS sound packages, and they are assigned the same way that we attached zone entry sounds above. At the risk of hurting the current realism of our little house, we’re going to assign some over-the-top effects to some of the rooms.

Select the ZoneInfo actor in the living room, open the actor properties window, and expand “R6Sound”. Select m_EnterSounds and click the “Add” button. Select [3] and click the “...” button. Open the “FX_RavenShield.uax” sound package. All of the Raven Shield EAX effects are stored in this package; there are around 40 that you can choose from. Select “FX_MountainTunnel”. Return to the actor properties window and click the “Use” button. Now, when a player enters the living room, the sound of their movements and gunshots as well as any ambient sounds in the zone, will echo wildly. Just like other m_EnterSounds, once the effect is turned on it will stay on even if the player moves to a different zone. The only way to switch an EAX effect off is to switch on a new EAX effect in another zone. So once you enable an EAX effect for one zone, I recommend enabling effects for every single one of your zones. Note that some of the effects in the FX_RavenShield package include ‘FX_Plain1’, ‘FX_Room1’, and ‘Disable_FX’; the effects are not necessarily intended just for large, exotic areas. Go ahead and assign any EAX effects that you think look interesting to each of the other four zones (including the front lawn), repeating the steps above.

Remember how special sound effects can carry over into the next round? Currently, if a player was to die in the living room, they would respawn in the front lawn still hearing the MountainTunnel echo, regardless of the EAX effect specified in the front lawn’s m_EnterSounds setting (since enter sounds aren’t triggered upon insertion). So always remember to assign EAX effects to the m_StartingSounds setting of any zone that includes an insertion. In this case, we only have one zone that contains an insertion. So, select the ZoneInfo actor in the front lawn, open the actor properties window, and expand “R6Sound”. Select m_StartingSounds and click the “Add” button. Select [3] and click the “...” button. Select “FX_Exterior”. Return to the actor properties window and click the “Use” button.

Importing Sounds

I need to begin this section with a warning: the editor isn’t always 100% stable when importing sounds. It’s not nearly as bad as the terrain editor, but it will generally crash if it doesn’t like the file you are trying to import, and it will sometimes crash even when you aren’t doing anything wrong. If the editor crashes, don’t panic… just try the same action again. Like the terrain editor, I’ve learned to keep the sound browser open only when necessary.

Find a small .WAV file on your computer that you would like to try importing into your map. Any sampling rate will work, however the .WAV file you import must be in 16-bit mono format. The editor will not allow you to import 8-bit or 32-bit sounds, and it will not allow you to set a sound as 3d positional if that file is in a 2-channel/stereo format. In Windows XP, checking the sampling format of an existing .WAV file is as easy as opening the file properties and viewing the "Summary" tab. If the .WAV file you want to import is in the wrong sampling format, you'll need to convert it to a 16-bit mono file. I recommend ModPlug Tracker as a good free program for this (
http://modplug.com/, and there are tons of other sound conversion programs available online). If you need to do more complex sound editing (fades, effects, touch-ups, etc.), you’ll want a good sound editor, like SoundForge (http://soundforge.com/). Also, as I mentioned earlier, there is no setting in the editor for modifying the default volume of an ambient sound, so you may sometimes need to adjust the volume of the .WAV file before you import it.

Make sure there are no spaces in the filename of your .WAV file, and place it in a location with no spaces in the filepath (this is necessary for the import to work). Open the sounds browser in the editor. Open the “File” menu in the sounds browser and choose “Import Sample…”. Locate and open your .WAV file. You’ll be presented with three import options, ‘loop’, ‘stream’, and ‘space’. Let’s discuss each of these a bit.

‘Loop’, as you would guess, imports the sound as a looping clip. As I mentioned earlier, anytime you import a sound file with the ‘loop’ option, two sound clips will actually be created: “Play_yourfilename” and “Stop_yourfilename”. Once the “Play_” loop begins playing, it will continue playing until the matching “Stop_” clip is triggered. You should always import ambient sounds as loops. What good is a sound that stops playing a few seconds into the game? The only types of sounds which should not be imported as loops are interaction sounds, such as a closing door or an explosion (note however, that even some interaction sounds, like lock-picking, should be loops as well). ‘Stream’ imports the sound into a format that will stream off the player’s hard-drive. Not only will the 'stream' setting decrease the quality of your sound, it will prevent the sound from being heard in multiplayer games (thanks to Abbey for this tip). So, obviously I recommend against ever choosing this option. ‘Space’ imports the sound in a format that supports 3d positioning, as demonstrated by many of the ambient sounds we placed earlier in this tutorial. In my opinion, any sound that will be attached to an object in your map should be imported using the ‘space’ option.

For this example, select the ‘Loop’ and ‘Space’ options. Change the package name to “SFX_mymap” and name the sound clip “myLoop1”. Immediately save the “SFX_mymap.uax” sound package. You can preview the “Play_myLoop1” clip right in the sound browser if you’d like, to check how well the sound loops. Double click on the grandfather clock in the living room to open the properties window, and expand “R6Sound”. We’re going to replace the tick-tock sound of the clock with the sound we just imported. Select AmbientSound and click the “…” button. Select “Play_myLoop1”. Return to the properties window and click the “Use” button. Select AmbientSoundStop and click the “…” button. Select “Stop_myLoop1”. Return to the properties window and click the “Use” button. Test out the new sound in-game.

Let’s import two more custom sounds, and then I’ll show you how to create a ‘random’ sound clip. Import two compatible .WAV files, repeating the steps above. Leave the ‘Loop’ option deselected for both sound clips. Name the clips whatever you choose, but import them both to the same “SFX_mymap” package. Immediately resave the package. Now, open the “File” menu in the sound browser again, and this time choose “Import Random…” Notice that only the non-looping sounds in our package appear in the Sound list. Double click on each sound clip to copy them both into the Random list. Change the Name to “myRandom” and click the “OK” button. Now, preview the “Play_myRandom” clip a few times in the sound browser. As you would expect, it randomly plays one of the two sounds we imported.. There frankly aren’t a lot of uses for random sounds in Raven Shield maps; the two places they are used in the campaign maps are for dynamic music clips (which we'll be looking at in a bit) and for the John Clark sound bytes played at the beginning and end of a successful single player mission. (These 'Intro' and 'Extro' sound bytes are assigned in the map .INI file, as outlined in my tutorial on
Creating an RvS Map Info file.)

I’ve had many people ask me about importing a favorite .MP3 song into their map. As long as you convert the .MP3 to a .WAV file first, UnrealED can handle the import, but it’s still not the best idea. First, you need to be concerned about copyright issues. Second, a three minute song, even with heavy compression, will be larger than all the other elements of your map combined. Third, if your map becomes heavily played in the community, people may love the song the first five times they play your map, but they’ll soon grow tired of it and then grow to hate it. If you want to add music to your map, make sure it is original/generic, a short, highly-compressed loop, and assigned to an interactive object that can be destroyed (as illustrated with the bathroom radio above).

Footsteps

The first step to enabling footsteps is to assign a sound pack which will be used throughout the map. You should pick a sound pack used by one of the official campaign maps, one that shares a similar environment and surfaces to your own map. In this example, we'll use the sound pack from the Airport map. Open the "View" menu in the editor and choose "Level Properties". Expand "R6sound". Select m_SurfaceSwitchSnd and click the "..." button. Open "Foley_AirportRainbowMovement.uax" and select "Play_Air_RnbMovements". Return to the level properties window and click the "Use" button. Select m_SurfaceSwitchForOtherPawnSnd and click the "..." button. Open " Foley_NPC_Airport.uax" and select "Play_Air_NPC_Movements". Return to the level properties window and click the "Use" button. Close the level properties window.

We’ve now enabled the default footstep effects for any texture which supports them (which includes just about every floor texture that came with the game). Let me show you what I mean. Open the texture browser, open the “Airport_T.utx” package, and browse to the ‘Airport_T.Floor.airport_floor_01e’ texture. Apply this texture to the floor of our living room. Right click on the ‘airport_floor_01e’ texture in the texture browser and choose “Properties”. Expand “Rainbow”, select m_eSurfldForSnd, and open it’s dropdown list. Notice that there are around 20 different built-in effects that can be assigned to a texture. However, we don’t want to permanently modify the ‘Airport_T’ package, so let’s close the Texture Properties window and we’ll copy this texture to our own package.

Right click on the ‘airport_floor_01e’ texture in the texture browser again, and this time select “Duplicate”. Set Package to “FootstepTest_T”, Group to “Floor”, and Name to “RoughWood”. Click the “OK” button. Rebuild your map (this is necessary to make the new package appear in the list; don’t ask me why). In the texture browser, select the ‘FootstepTest_T’ package, right click on the ‘RoughWood’ texture, and choose “Properties”. Expand “Rainbow” and set m_eSurfldForSnd to “SURF_Gravel”. Close the Texture Properties window and immediately save our new texture package as “FootstepTest_T.utx”. Finally, apply our new texture to the floor of the kitchen. Load the map in-game, and take a walk to the kitchen. It’s rare that you’ll need to change the default footsteps of the campaign map textures; in most cases each sound is perfectly suited to the texture. However, now you should know how to assign appropriate footstep sounds to your own custom textures.

Note: unfortunately, none of the Foley sound packages by itself contains all of the possible surface sounds. Click here to view a list of which packages contain which sounds. (Thanks to Chris Wilkerson for taking the time to put together this chart.)

Dynamic Music

I’m sure you’ve noticed in the single player campaign how you enter a dark stairwell or dangerous looking alley and suddenly dramatic music plays, heightening the tension of the moment. Let’s implement that in our map too. Open the properties of the ZoneInfo actor in our living room, select m_SinglePlayerMusic, and click the “…” button. Open the “Music.uax” package and select “Play_theme_Ambients” from the list. The ‘Play_theme_Ambients’ sound bank contains several short, dramatic themes of which one will be randomly played. Note that one of these random tracks is silence, so you might not hear music every game. There are some other good sound banks in the “Music.uax” package (a few which I don’t even recall hearing in the course of playing the official campaign), but to my knowledge the other banks are not random, so if you use one of them the player will hear the same theme every game.

Return to the Actor Properties window and click the “Use” button. Load your map in-game and notice how the music plays the first time you step foot into the living room during each game (unless the silence track is randomly chosen, in which case that zone won’t trigger music until the next game begins). I should mention that, for whatever reason, that there must be at least one EnterSound assigned to a zone in order for single player music to play. (This won’t ever cause a problem for you as long as you assign an EAX effect to every zone, as I recommend above.) To get the greatest dramatic impact out of your single player music, I recommend only assigning music to one or two zones on a normal sized map, and choose quiet zones positioned just before choke-points and terrorist strongholds. Ideally you want the music to fade out just before the next firefight begins.


I hope you found this tutorial helpful. If there's anything I've gotten wrong, please let me know and I'll correct the information. Email me if you have any questions or mapping issues you'd like to discuss. -Beckett

Display a printable version of this article


© 2005, RvSMaps.com, all rights reserved
Send questions, critiques, etc. to http://www.juncmodule.net/rvs/rvsmaps/content/contact.htm