It’s easy enough to create new sounds for your level, but then the question becomes how you get them to work in DromEd. Assuming you have basic knowledge of Ambient Sounds, this tutorial will hopefully explain a little bit more about how Schema Files work. This should be useful for both Thief 1 and Thief 2.
Email me if you have any questions about this information, but before you do please read this entire document and make sure you’ve double checked your work.
Where They AreThe first thing you need to do is to get the schema files themselves. They are not by default in your Thief directory, even on full install. They should be on one of the Thief discs in a folder called Schemas. You need to grab all of the files in this folder, including Speech.spc and Envsound.spc. Make sure the “schema” folder is intact (in other words, you should have a folder called “schema” [no quotes] in your Thief 2 folder with all of the files in it).
From now on, whenever you do a reload_schemas command in DromEd it will reload all of the information in these files. So don’t remove any of them from your schema folder unless you’re done making all of the changes you’re going to make.
Where to put themOnce you have made your new schema files or edited the existing (although there’s really no need to do the latter), you type reload_schemas in DromEd to compute the changes. After this, you save the gamesys. Beyond this, you don’t need to include the schema files when you release your mission or use them ever again. However, it’s good to leave them where they are so that if you decide to make any changes in the future they’re in the right place.
Your sound files go in a folder called “snd” (no quotes) in your Thief 2 folder. Create an individual folder for each group of sounds, and then another folder within this one to specify language. In other words, the folders might go Thief2 > snd > mynewsounds > English. Then, in the English folder, you would place all of your wav files.
DromEd does not care how you organize your sounds or your schemas. It will compute everything in the “Schema” folder and everything in the “Snd” folder. The reason we separate things into their own schema files or our own folders is for convenience and convenience only.
Following with this idea, it is not necessary to edit the existing schema files if you do not like a sound. Just create a new one. Say, for example, you wanted M04wind to use 2 new wind sounds as well as the ones LGS created. You don’t need to open up the existing amb_m04.sch file in order to do this. Simply create a new file, stick it at the end of the list, then re-create the information about m04wind from amb_m04.sch in your new schema file and add your sounds to the information. The reason for this is to not confuse things and to not mess up the original files should you do more than one mission with new sound. There’s no reason not to simply use completely new schema files.
How you name your schema files is arbitrary.
How to create a schema fileOpen up Notepad and think of a name for your schema file. It really doesn’t matter what it is. Let’s say it’s called “blog.” Open up your text file, and before you do anything, click “Save As.” Save the file as an “All Files” (not a txt file) and type the following exactly in the name line: “blog.sch” (WITH the quotes). Now the icon for the file appears and you’ve got an .sch file.
From here on, the easiest thing for ambient schemas is to copy one whole entry from an existing schema into your own. Then, change the names to your own liking and use this as a model for all of your entries which follow.
For an AI voice schema, I’ve found it’s best to copy an ENTIRE voice repetoire into your own, then edit it to your liking. The easiest schema file to use is Testvoice.sch because it is complete and is not cluttered with extraneous file names and comments.
It’s going to be easiest for me to illustrate this through ostensive definitions and explanations, so what I’ve done below is copied a single entry from some schema files and then explained line by line what they do.
Ambient schema SCH filesThis is an example of something I put in my FM in a new schema file:
mono_loop 0 0
//wind = A comment which is only there for the person looking at the schema. Whenever you have a “//” that means that this is a “comment” and does not have any meaning other than to that of the viewer.
schema invwind = This is the name that will show up in the gamesys in DromEd when you type in reload_schemas. You DO NOT have to edit anything in DromEd to get your new sounds (with one exception, see below). Everything can be done in the schema sch file. This is the name of the object that will “appear” in DromEd after you type reload_schemas. When you place an object with the AmbientHacked property in DromEd, you will specify this name under SCHEMA NAME and not the name of the wav file(s).
archetype AMB_INV = The name of the pre-existing “object” found in the object hierarchy under which the ambient sound is to be placed when you hit that reload_schemas command. In order for your reload_schemas command to work, you do have to make one small gamesys change. Create a new category for your sounds. The pre-existing ambients are classified according to mission. If you open up the Object Hierarchy, you’ll notice that under Sounds > Schema > Ambients there is a category for each mission. For my mission, The Inverted Manse, I used AMB_INV as an abbreviation. To do this, find Ambients in the Object Hierarchy. Hilight it, then click “Add.” Type in a fitting name. Save your gamesys. Then, when you write your schema files, make sure that this third line is exactly the same as the one in your gamesys for every entry.
mono_loop 0 0 = This means the sound consists of a single loop played repeatedly with no delay. The two numbers (in this case 0 0) are an interval of delay. 2000, 5000 would mean that the wav plays once, stops, then plays again at a random time somewhere between 2 and 5 seconds after the stop for another full loop, then stops again. If you want to have file with multiple sounds, then you would put poly_loop 2000, 5000 (I’ve never seen such a combination of sounds at 0 0 for obvious reasons). The wind I had in this case was consistent and played repeatedly.
volume -1 = this is the default volume for the sound, -1 being the loudest and anything beneath that being quieter (all numbers must be negative). This can be “overridden” when placing an ambient sound in DromEd, but the default volume is still important as it is easier to place unadjusted sounds… and you can’t adjust volume when using a sound trap as opposed to an ambient marker, as far as I know.
invwind = This is the name of the actual wav file to be placed in a folder in the snd directory. When naming them here, multiple files are placed side by side with no comma.
Thus, if I had several wav files of different wind sounds that I wanted to be repeated after a slight delay, the entry in the .sch file might look something like this:
poly_loop 2 10000 12000
invwind2 invwind3 invwind4
For some reason there is always a “2” after poly_loop. If it is not there, the sound will not be created in the gamesys.
The no_repeat means that the sounds (in this case, invwind2, invwind3, and invwind4) will play randomly and one of those sounds will never be played twice in a row.
AI voice schema SCH filesMany of the same rules that apply to Ambient schemas apply to AI schemas. The entries look a little different, but are basically the same in practice. As mentioned above, it is best to use an existing schema file to base yours off of. Also, as mentioned, I’ve found that Testvoice.sch is the best choice. You can of course remove things from this for your own schema. For example, a servant would never fight, so you could remove all of the combat entries. But it’s still nice to see everything in one place, even if you have some deleting to do.
Here is an example from an existing AI voice schema (not testvoice.sch):
schema sg2a0 //AT ALERT 0
mono_loop 10000 20000
sg2a0hu1 sg2a0hu2 sg2a0hu3 sg2a0hu4 sg2a0hu5 sg2a0hu6
sg2a0mu1 sg2a0mu2 sg2a0mu3 sg2a0mu4
sg2a0co1 sg2a0co2 sg2a0co3 sg2a0co4 sg2a0co5 sg2a0co6 sg2a0co7
schema_voice vguard2 1 atlevelzero
schema sg2a0 = This is the name that shows up in DromEd and is the sound “object” which includes all of the wavs associated with it that are specified several lines below. Name this however you like, but you probably want to give it some kind of meaning. “Sg2a0” is of course short for “Sergeant #2 at Alert 0.”
//AT ALERT 0 = The comment at the top that tells you when the sounds will be played. In this case, the AI is at alert 0, which means he has no knowledge of the player. Alert 3 means he knows for sure the player is there.
archetype AI_NONE = The “object” under which the new group of sounds (or sound, but it all goes by one name) is placed in the obj hierarchy. Although new ones should be added for ambients, for the purposes of voice schemas, these should be left intact. The way that LGS has their schema files organized, this line varies BETWEEN Ambient schema files and not within them, but varies WITHIN AI schema files but not between them. In other words, if you’re using a base model such as Testvoice.sch (as I suggest) in writing your own schema, you can leave this line alone. You do not have to make any changes to this line. Leave it be.
delay 2000 = The delay before it’s played, in milliseconds. No need to add a delay into the wav.
volume -500 = The default volume, -1 being the highest and everything under that quieter.
mono_loop 10000 20000 = Plays one of the below files once, then waits 10 to 20 seconds before playing another. Best probably to only fool with these settings a little, as this is the tried and true method LGS used in both Thief games.
sg2a0hu1 sg2a0hu2 sg2a0hu3 sg2a0hu4 sg2a0hu5 sg2a0hu6
sg2a0mu1 sg2a0mu2 sg2a0mu3 sg2a0mu4
sg2a0co1 sg2a0co2 sg2a0co3 sg2a0co4 sg2a0co5 sg2a0co6 sg2a0co7 = The name of the wav files (without the extension) that this one “object” in the obj hierarchy references. One of these will be chosen at random. The last couple letters on each file vaguely reference what the thing is… hu would be a hum, mu would be a mutter, co would be a cough. The engine doesn’t know the difference between a cough and a hum… it simply randomly picks one of these files for the AI to use at any given time. This line must be changed to reflect the names of your wav files. However, how you name them is completely up to you. Also, as stated before, it doesn’t matter to what sub-folder your wav files belong, as long as these sub-folders are in the snd folder.
schema_voice vguard2 1 atlevelzero = The number here is a priority, 1 being absolute, higher numbers being less probable. The vguard2 is the name of the voice in DromEd. The rest (schema_voice and atlevelzero) are command interpretations for the engine.
NOTE: The above “vguard2” is an existing voice. To create your own voice, name it whatever you want. This must be the same in every entry within your schema sch file. Try to use something that makes sense, such as “vnewguard1” or similar. This name is what you will type in in DromEd when giving AI your new voice. In DromEd, you would create a guard (or other AI), then give them the property Speech > Voice and then type in vnewguard1 or whatever name you have chosen.
When you are adding a new voice and writing a new AI schema file, there is one more step which you must do. In Notepad, open the Speech.spc. Go to the very end of this file. Type the following line:
…where “x” is the name of your voice. Using the above example, you would type in: voice vnewguard1 This is very important. If you do not do this, then DromEd will give you an error message when you reload your schemas. Type this line somewhere at the end of the Speech.spc file and then save it. This file must be in your schema folder when you do the final reload_schemas.
The final stepsOnce you have completed your schema files and both these files and your wavs are in the right place, (as mentioned above) open up DromEd and type reload_schemas. I know I’ve mentioned this command several times, but you only need to do it once… at the end after everything else is done. Check to make sure your new sounds work, then save your gamesys. If you did everything right, the “objects” you specified will appear in the Object Hierarchy and you will have everything you need in order to use the new sounds. There is nothing else manual other than actually placing the sounds or voices in the editor. Also, remember to include all of the “old” LGS schemas in your “schema” folder. DromEd literally replaces all of the sounds in the Object Hierarchy with the ones from the “schema” folder, so you need all of the old ones there in addition to your new ones when you do this command.