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