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