L4D2 Custom Sound and Music Tutorial: Difference between revisions
ThaiGrocer (talk | contribs) |
ThaiGrocer (talk | contribs) mNo edit summary |
||
Line 9: | Line 9: | ||
#A map that can be loaded in-game named however you like - '''maps/<map name>.bsp''' | #A map that can be loaded in-game named however you like - '''maps/<map name>.bsp''' | ||
#A blank per-map [[Soundscripts|soundscript]] (a .txt file) named '''maps/<map name>_level_sounds.txt''' | #A blank per-map [[Soundscripts|soundscript]] (a .txt file) named '''maps/<map name>_level_sounds.txt''' | ||
#A text file to document the sound files or an unpacked add-on folder. | #A text file to document the sound files or an unpacked add-on folder. This is '''optional'''. This is only done to keep track of sound files added into existing folders Valve provided. | ||
{{Tip|Add-on content in the '''addons''' folder no longer loads unless packed in a VPK. As always, this may change in the future. If there are a lot of custom sounds used in a campaign, one way to streamline testing (for proper priority, volume, etc.) is to work with custom sound files in the main '''sound''' folder. Keep documentation of the custom sound files used or simultaneously maintain an unpacked add-on folder during the testing period for easier shipping. Remember to update sound.cache before testing!}} | {{Tip|Add-on content in the '''addons''' folder no longer loads unless packed in a VPK. As always, this may change in the future. If there are a lot of custom sounds used in a campaign, one way to streamline testing (for proper priority, volume, etc.) is to work with custom sound files in the main '''sound''' folder. Keep documentation of the custom sound files used or simultaneously maintain an unpacked add-on folder during the testing period for easier shipping. Remember to update sound.cache before testing!}} | ||
Revision as of 08:23, 2 February 2011
Introduction
Since the August 20, 2010 update, L4D2 fully supports custom sounds (custom sound cache named sound.cache). Initial instructions provided by Valve are available in the L4D2 Campaign Add-on Tutorial article. The rest of this article covers how custom sounds in L4D2 can be managed and tested during development and when shipping.
Getting started
Start with the following (only a recommendation):
- A map that can be loaded in-game named however you like - maps/<map name>.bsp
- A blank per-map soundscript (a .txt file) named maps/<map name>_level_sounds.txt
- A text file to document the sound files or an unpacked add-on folder. This is optional. This is only done to keep track of sound files added into existing folders Valve provided.

Location matters!
A feature called soundmixers manage the priority and volume of groups of sounds. The location of a sound file within the sound directory determines what is played in the foreground and what is softened or muted. The script is located in scripts\soundmixers.txt within pak01_dir.vpk. See GCFScape for details on how to extract the script for viewing.
Soundscripts
Per-map soundscripts appear to be the only way to create custom or modified soundscript entries. Brand new soundscript entries can easily be created or an existing soundscript entry like Event.Tank
can be safely overridden for a single map. When testing or shipping, the result is a maps folder that contains a <map name>_level_sounds.txt for every map within the campaign.
Open <map name>_level_sounds.txt with a text editor.
Soundscript Entries
An entry can be played in-game via console or entity, such as ambient_generic or ambient_music. An example entry:
entry.name { channel CHAN_AUTO volume VOL_NORM pitch PITCH_NORM soundlevel SNDLVL_NORM wave common/null.wav }
If a value has a space or tab character within it, wrap it in "quote marks".
Examples
Ambience.Siren { channel CHAN_WEAPON volume VOL_NORM pitch PITCH_NORM soundlevel SNDLVL_NORM wave siren1.wav }
Arbitrary.Song { channel CHAN_AUTO volume VOL_NORM pitch PITCH_NORM soundlevel SNDLVL_NORM wave music/singalongsong.wav }
Foo.Song_mp3 { channel CHAN_STATIC volume VOL_NORM pitch 100 soundlevel SNDLVL_NORM wave music/songalongdong.mp3 }
Official Sound and Music Uses Soundscripts
All official in-game sound effects, vocalizations, and music rely on soundscripts to tweak the sound to the correct channels, volume, pitch, etc. With maps/<map name>_level_sounds.txt, you can customize those entries without causing conflicts with other addons and the official campaigns. Simply copy the entries you would like to change to the per-map soundscript.
Soundscript entries can be found in the scripts/game_sounds_*.txt folder by opening pak01_dir.vpk with GCFScape.
A lot of music entries rely on Map Properties, Post-Fix String and nav mesh attributes. For example, the Post-Fix String of the map c5m1_waterfront.bsp is "BigEasy" and it plays its style of intro music in-game, where the nav mesh is marked PLAYER_START
and CHECKPOINT
.
Interesting Soundscripts
They're all interesting, but here are a couple of them:
- game_sounds_music.txt provides great sample soundscript entries for music. Some entries string together different notes of the same instrument and are played randomly in succession.
- game_sounds_physics.txt has entries for sounds that play during in-game interactions, such as a walking on snow or shooting a concrete wall.
Soundscapes
Custom soundscapes in L4D2 appear to work well without the need to modify the official soundscapes manifest during development or when shipped as a VPK (named as a per-map soundscape).
In short, custom soundscapes in L4D2 are text files located in the scripts folder, named "per-map" as scripts/soundscapes_<map name>.txt
There is nothing different about preparing the sound files in order for the soundscapes to play, although using .MP3 files for soundscapes would be unusual there is typically looping involved.
Testing
Testing custom sounds is simple as creating an up-to-date sound.cache and then playing the sound in-game. As noted in the add-on tutorial, this is done with the console command snd_buildsoundcachefordirectory ..\left4dead2\<location of sound folder>
to create an updated sound cache. When the sound cache is successfully created or updated, the console will output the number of sound files found in the add-on sound directory.

By Console
- Open <map name>.bsp
map <map name> coop
- Test out the sound
playgamesound entry.name
- In most cases, if a sound refuses to stop playing, stop the sound
stopsound
By Entities
- Create an ambient_generic, ambient_music, or any other entity that has a property that requires a sound name
Tip:For ambient_generic, if the sound file is programmed to loop (the actual sound file itself), then un-check the flag "is NOT looped" in order to be able to stop the sound from continuously looping with input
StopSound
. ambient_music does not have this flag, but it is not necessary. - Change the targetname and change sound name to the soundscript entry of your choice
- Optional: create an entity that will trigger the sound, if necessary or desired
- Open <map name>.bsp via console
map <map name> coop
- Test out the sound via "trigger entity" or console command:
ent_fire <ambient_generic targetname> PlaySound
- In most cases, if a sound refuses to stop playing, stop the sound via console
stopsound
Shipping
See L4D2 Campaign Add-on Tutorial.