Ambient Sounds Tutorial by Sledge
Ambient Sounds Tutorial
The following is a tutorial for placing ambient sounds in your level. It is semi-complete, meaning that there are one or two things which I am not sure of, either because I never discovered them or because they were never implemented in DromEd or DromEd2 by LGS. However, this should contain some useful information on how to use different types of sounds in your level. This should be applicable to both D1 and D2. If any parts of this tutorial are found to be incorrect or obsolete, let me know and I'll fix it.
This tutorial assumes no pre-existing knowledge of ambient sounds.
Ambient Sound in Thief and Thief 2 are created using the property A > AmbientHacked. This property may be added to almost any object in the game, including fnord objects or SFX. Certain objects in the game have a default Ambient property. If you create a torch, it will sound like a torch when you place it in your level. Objects like the torch inherit an AmbientHacked property from their parent object in the Object Hierarchy. Most of the time, you will want to leave these inherited ambient sounds alone. However, occasionally you may want to edit them.
In the Inverted Manse, I had a bunch of debris and unused material in an abandoned factory setting. In one location, I created a coil to go along with some trashed electronic material. However, I wanted to give the impression that the coil was not working properly. By default, a coil inherits an AmbientHacked property entitled coil_lp. In order to change this, all I had to do was click on Properties of the coil, then delete the AmbientHacked property. If I wanted, instead of deleting the property, I could have of course simply Edited the ambient property to change the sound, but I had no need to do this.
When placing your own ambient sound 95% of the time you will want to use a marker. The reason for this is because you have the most control over placement of a marker. Because it is not rendered and has no physical properties, you can place it wherever you want. It is also easier to remember where you place sounds when you use a marker (or you give an object a name) so you can identify it easily should you need to edit it. LGS often used markers, increased the size of the markers, AND named these markers so they could be identified easily in DromEd, but something like that isn't necessary.
Let's move on to specifics.
IDENTIFYING THE SOUNDS YOU WANT:
All of the sounds for Thief are kept in the snd.crf file located somewhere in your Thief directory (or on the disc if you don't have full install). You can potentially unzip this file into a folder (be ware! The one for Thief 2 is over 300 MB). Listen to the sounds and find the ones you want. The sound effects and music-type sounds are located in the SFX folder, and in Thief 2, also in the MiscVOs folder.
Also, you can find sounds in the Object Hierarchy in DromEd. They are located under Sound > Schema > Ambients and they are segregated by mission. However, you cannot play them in the Object Hierarchy. Find the ones that you want, then close the Object Hierarchy. Go to the command window and type in "play_schema x" (no quotes) where "x" is the name of the sound. For example, you could try "play_schema m13wind." To stop it, type in "halt_schema m13wind" or simply "halt_schemas" (again, no quotes). I find the easiest way to do this is to open up a SECOND DromEd window, then find the list in the Object Hierarchy. Then in the other DromEd, type in what you need.
In the Thief games, LGS "combined" different sounds. The sounds you see in the Object Hierarchy are not always individual sounds, but can sometimes be combinations of sounds. M05wind for example, is made up of at least 3 different wind sounds that I can hear. The advantage of searching for sounds in snd.crf is that you can find and play individual sounds. However, sometimes the names given to the ambients in the Object Hierarchy are not similar to the names of the wav files, and it can be frustrating searching for the one you want. The names you use in DromEd for your AmbientHacked property MUST BE the name in the Object Hierarchy, and not any of the wav files in the snd.crf file. Therefore at some point you most likely will have to use the method mentioned in the 2nd paragraph (above) to get the final sound you're looking for.
In advanced sound editing, you can edit the schemas, which are the files which dictate how the sounds are combined and set up in the Object Hierarchy. I should hopefully have a tutorial on schemas out at the time this document is released.
THE DIALOGUE BOX:
When you add the property AMBIENT HACKED to an object or when you click Edit on an existing property, you'll be presented with a dialogue box. Below is list of what they do.
RADIUS: The radius in feet, of the sound.
OVERRIDE VOLUME: The volume of sounds in a sense goes backwards. -1 is the loudest and goes backwards into the negative thousands. Each sound has a default value specified in a schema file (you can find the schema files on the Thief discs, they have .sch extensions). You can override this if you like here, in DromEd, without touching the schemas or the gamesys. Extreme loud would be -1, extreme quiet would probably be somewhere around -5000. The number you specify can affect some sounds more than others, as each sound already has a "default" volume already (for example, if you typed -100 for Override Volume for a sound that already had a default sound value of -100, the effect would do nothing). You can check default volumes in the schemas or in the gamesys if you wish.
SCHEMA NAME: This is the name of the sound as it appears in the Object Hierarchy. Make sure you check the name in the Object Hierarchy so that the sound will play correctly. If you want to "double check" a name that you think is right, the name is technically an object (although you would never ever "create" it), so you can do a "find_obj x" if you like.
AUX SCHEMA 1 and 2: This is a way to effectively play more than one sound from an object. This is particularly useful for Environmental Sounds (see below), as technically, you can only have one Environmental Sound at once.
FLAGS: This is the complicated part of the AmbientHacked property. This is where you specify how the sound is played.
(None): If there are no flags, the sound will play with its default characteristics at the radius you specify (see above). Many times, you don't need any flags, and the sound will play just fine without any.
Environmental: This is an extremely useful Flag which makes the sound "universal" from all directions and plays it essentially like music. Thief 2 used a lot of prevalent tone and rumbling sounds this way, usually when you entered a building. The sound will loop and repeat indefinitely after you get within the radius of the object with this AmbientHacked property. The sound will be played at a constant volume. Unlike most sounds, where they get louder as you approach the marker, this is simply "on" and "off." The sound is turned "on" when you get within the radius of the marker, and turned "off" when you get within the radius of ANOTHER marker with an Environmental Flag that either has a different Environmental Sound, or has the Environmental Flag checked with the SCHEMA NAME left blank. You can only play one Environmental Sound at once, although the way to "cheat" this is to use the AUX SCHEMA boxes. Try, for example, placing "M02hits1" in the SCHEMA NAME box and "M02mainL" (no quotes) in the AUX SCHEMA box. There are some advanced techniques with Environmental sounds discussed below.
NoSharpCurve: This sound will fade more gradually as you get closer to it or get further away. However, this generally softens the sound a bit.
TurnedOff: If you're not sure about a sound but don't want to delete it just yet, you can check this flag to turn it off.
RemoveProp: Removes the AmbientHacked property from an object after one full cycle of play. Does not seem to work on objects who have a sound that has loop params (a sound that is naturally looped).
Music: Doesn't seem to have any effect in T1. Turns sound off in T2. Not used, as far as I know.
Synch: Not used, as far as I know.
NoFade: Not used, as far as I know.
DestroyObj: Destroys the object with the ambient sound after one full cycle. Does not seem to work on objects that have a sound that has loop params.
DoAutoOff: Adds the Flag Turned Off after the sound plays one full cycle. Like DestroyObj and RemoveProp, this only seems to work on sounds that do not have loop params.
ENVIRONMENTAL SOUND TECHNIQUES:
Certain sounds are meant to be played as Environmental Sounds, certain sounds are not. An example of an Environmental Sound would be M01tones. Such a sound plays a series of tones like music around the player, and generally sounds awful if they are played any other way. Try looking at the OMs and experimenting to see which ones work.
Almost all of the Thief 2 OMs use tones or rumbling of one variety or another for interiors and wind noises for the exteriors. However, sometimes when you "cut" from one sound to another, the result sounds quite choppy. This was the case even in some of the OMs. The following is a technique I discovered which should smooth this over a bit.
Create or look at an interior area with a door leading to an exterior area. Make sure gen and convict are loaded and the place is room-brushed. On the interior side of the door, create a marker with the AmbientHacked property. Give it a small radius (like 5) and the Environmental Flag. Leave the other boxes blank. Now create a marker outside the door and give it the AmbientHacked property. Give it a small radius (and make sure this radius does not interfere with the radius of the first marker) and the Environmental Flag. Now, give this second marker a sound. Let's use M04wind. Place this name in the SCHEMA NAME box. Now, go in game. The sound should begin when you go outside, then cease when you go inside. Works well, but sounds choppy, eh?
Now for the smoothing part. Create a third marker and place it between these markers. Give this marker a large radius (such as 20 or 30) and make sure the Flags are set to NONE. Set the Override Volume high, perhaps all the way to -1. Give this marker the Schema Name M04wind also. Now go in game. There should be a small area of overlap of wind, but effectively what this does is "smooth" over the transition from environmental sound to no sound. When the Environmental "wind" sound cuts out, the NONE Flag sound is there to mask it out. If you toy with it a bit, the effect can be quite convincing.
A useful way to get sounds to go on and off is to use sound traps. To get them to work, create a sound trap and place it somewhere. Open up the Links and then create a SoundDescription link from the sound trap to a sound in the ObjectHierarchy. An "on" signal (such as a button/lever with a Control Device link to the sound trap) will turn the sound on. An "off" signal (via button to inverter to the soundtrap with ControlDevice links, or flipping a lever off) will shut the sound off.
There is a limit to the number of ambient objects you can have in your level. In creating the Inverted Manse, I used tons of torches. Near the very end, I got an error which said "Ran Out of Ambient Objects." I had to reconfigure a couple of things to cut down on the number of ambient objects. I am not sure what the exact number is, but I believe it was somewhere around 225 when I began getting the error. It probably won't be a problem for most folk, but it is something to keep in mind when creating large levels.
EDITING THE PLAY PARAMS:
Chances are you won't ever need to do this, but each Ambient "object" in the Object Hierarchy has a specific set of properties called Play Params and Loop Params which you can tinker with. While you probably won't want to fool with these, as they specify things like whether or not the sound is a voice or an ambient, occasionally they can be useful. For example, in The Inverted Manse I had Garrett's "End Potion" sound triggered by a VO Trap, but the sound in the gamesys was set to "Play Once." In order to get this sound to play more than once (I had more than one special potion), I unchecked this property.
Potentially, you could also change things like the default volume (useful when you're substituting sounds rather than writing new schemas), the initial delay between the time when the sound is triggered and when the sound is played, and pan and fade factors, among others. HOWEVER, the information in Play Params and Loop Params is merely a reflection of what is in the schema files, so if you do a reload_schemas command this information will disappear. If you are going to adjust anything beyond the Flags in either Play Params or Loop Params for a sound, it's best to adjust the schema files themselves, then do a reload_schemas command in DromEd so the changes will be done for you.
THUS ENDETH THIS TUTORIAL
FYI, you don't have to unzip the snd.crf file if you have WinZip. Right-click on it and choose "open with...". Chose WinZip, and if you want to, check the "always use this program to open files of this type" box. From here, you can right click on the sound you want to listen to and choose to open or play it. WinZip creates a temp file and opens that in your sound player.