Talk:L4D2 Soundscripts
Contents
Preliminary data
I've been having a lot of trouble with this, so I'll have to keep things in discussion first. There's still a lot to learn about sound, but I think it's a very interesting aspect of a campaign that should be dealt with. There are interesting snippets that need testing. As a side note, I'm not sure if it will be appropriate to cover soundscapes in this article, as well.
Unique to L4D Series (or maybe just L4D2)
- Dynamic music
- Mixing channels
- Blockable channels
- ?gamedata?
Gamedata
Following are examples of use of gamedata in soundscript entries. Compiled together in this section to possibly get a list out of it. Out of all the official soundscripts, the following scripts uses gamedata. Note that while gamedata is the main focus here, there are also really interesting questions that crop up re: general soundscript entries. It gets very interesting when we hit the music script entries!
game_sounds_doors.txt
Priority = Interesting is the only gamedata used in this script.
"WoodenDoor.Break" { "volume" "1.0" "soundlevel" "SNDLVL_90dB" "pitch" "95,105" "GameData" { "Priority" "Interesting" } "rndwave" { "wave" "physics/wood/wood_crate_break4.wav" "wave" "physics/wood/wood_crate_break5.wav" } }
game_sounds_infected_common.txt
Priority = Interesting & Important used in this script. Also interesting is the use of $gender variable.
"Zombie.IgniteScream" { "channel" "CHAN_VOICE" "soundlevel" "SNDLVL_70dB" "volume" "0.80" "pitch" "90,110" "GameData" { "Priority" "Interesting" } "rndwave" { "wave" "npc/infected/action/die/mp/squeal_1.wav" "wave" "npc/infected/action/die/mp/squeal_2.wav" "wave" "npc/infected/action/die/mp/squeal_3.wav" "wave" "npc/infected/action/die/mp/squeal_4.wav" "wave" "npc/infected/action/Ignite/Ignite01.wav" "wave" "npc/infected/action/Ignite/Ignite07.wav" "wave" "npc/infected/action/Ignite/Ignite08.wav" "wave" "npc/infected/action/Ignite/Ignite09.wav" "wave" "npc/infected/action/Ignite/$gender/Ignite11.wav" "wave" "npc/infected/action/Ignite/$gender/Ignite12.wav" "wave" "npc/infected/action/Ignite/$gender/Ignite13.wav" "wave" "npc/infected/action/Ignite/$gender/Ignite14.wav" "wave" "npc/infected/action/Ignite/$gender/Ignite10.wav" } } // raging mad, running through the streets, NO SPECIFIC VICTIM "Zombie.Rage" { "channel" "CHAN_VOICE" "soundlevel" "SNDLVL_85dB" "volume" "0.85" "pitch" "95,105" "GameData" { "Priority" "Important" } "rndwave" { "wave" "npc/infected/action/rage/$gender/rage_50.wav" "wave" "npc/infected/action/rage/$gender/rage_51.wav" "wave" "npc/infected/action/rage/$gender/rage_52.wav" "wave" "npc/infected/action/rage/$gender/rage_53.wav" "wave" "npc/infected/action/rage/$gender/rage_54.wav" "wave" "npc/infected/action/rage/$gender/rage_55.wav" "wave" "npc/infected/action/rage/$gender/rage_56.wav" "wave" "npc/infected/action/rage/$gender/rage_57.wav" "wave" "npc/infected/action/rage/$gender/rage_58.wav" "wave" "npc/infected/action/rage/$gender/rage_59.wav" "wave" "npc/infected/action/rage/$gender/rage_60.wav" "wave" "npc/infected/action/rage/$gender/rage_61.wav" "wave" "npc/infected/action/rage/$gender/rage_62.wav" "wave" "npc/infected/action/rage/$gender/rage_64.wav" "wave" "npc/infected/action/rage/$gender/rage_65.wav" "wave" "npc/infected/action/rage/$gender/rage_66.wav" "wave" "npc/infected/action/rage/$gender/rage_67.wav" "wave" "npc/infected/action/rage/$gender/rage_68.wav" "wave" "npc/infected/action/rage/$gender/rage_69.wav" "wave" "npc/infected/action/rage/$gender/rage_70.wav" "wave" "npc/infected/action/rage/$gender/rage_71.wav" "wave" "npc/infected/action/rage/$gender/rage_72.wav" "wave" "npc/infected/action/rage/$gender/rage_73.wav" "wave" "npc/infected/action/rage/$gender/rage_74.wav" "wave" "npc/infected/action/rage/$gender/rage_75.wav" "wave" "npc/infected/action/rage/$gender/rage_76.wav" "wave" "npc/infected/action/rage/$gender/rage_77.wav" "wave" "npc/infected/action/rage/$gender/rage_78.wav" "wave" "npc/infected/action/rage/$gender/rage_79.wav" "wave" "npc/infected/action/rage/$gender/rage_80.wav" "wave" "npc/infected/action/rage/$gender/rage_81.wav" "wave" "npc/infected/action/rage/$gender/rage_82.wav" } }
game_sounds_infected_special.txt
Priority = Interesting & Critical. Critical is used for WitchZombie.Scream, for example.
// This plays 25% of "Yell" during engagement "HulkZombie.Growl" { "channel" "CHAN_VOICE" "volume" "1" "soundlevel" "SNDLVL_115dB" "pitch" "92, 100" "GameData" { "Priority" "Interesting" } "rndwave" { "wave" "player/tank/voice/idle/Tank_Growl_01.wav" "wave" "player/tank/voice/idle/Tank_Growl_02.wav" "wave" "player/tank/voice/idle/Tank_Growl_03.wav" "wave" "player/tank/voice/idle/Tank_Growl_09.wav" "wave" "player/tank/voice/idle/Tank_Growl_10.wav" "wave" "player/tank/voice/idle/Tank_Growl_11.wav" "wave" "player/tank/voice/idle/Tank_Growl_12.wav" } } "BoomerZombie.Fall" { "channel" "CHAN_BODY" // "CHAN_STATIC" "volume" "1" "soundlevel" "SNDLVL_75dB" "pitch" "95, 105" "GameData" { "Priority" "Critical" } "wave" "player/Boomer/fall/boomer_dive_01.wav" }
game_sounds_music.txt
Music is crucial in L4D Series, so there's a lot of interesting stuff involving gamedata. In summary (look at scripts for more meaningful info):
- MusicDelayTime = <float> (in seconds)
- MusicPriority = Low, Medium, High, CRITICAL
- MusicTrack = checkpoint, overdub, ambient, safeAmbient, zombieIntro, zombat, zombat2, zombat2c, zombat3, ledge, ledgeHits, down, downHits, default, finaleStart, scavengeLevel, tank, tank2, witch, witchChoir, mobRules, PZAttack, hunterHits, smokerHits, boomerHits, chargerHits, chargerSlamHits, jockeyHits, spitterSpit, BoomerAlert, SmokerAlert, HunterAlert, ChargerAlert, SpitterAlert, JockeyAlert, mobsignal, zombiechoir, glimpse, jukebox, infection, concert
- MusicAutoQueue = Event.MissionStart_BaseLoop_POSTFIX (defined in map properties in Hammer), Event.Zombat_1 (this can be any soundscript entry)
- MusicParameters = AFTER_DEATH, NO_INTENSITY_TRACK, "AFTER_DEATH | AFTER_MISSION_END", INTENSITY_CELING
- MusicMaster = PLAY_TO_END, PLAY_SPLIT, "PLAY_TO_END | DONT_DISENGAGE"
- MusicDuckTrackList = all, tank
- MusicBlockTrackList = zombat, zombat2, zombat3, zombatIntro, ambient, tank, finaleStart
- MusicStopTrackList = zombat, zombat2, zombat3, zombatIntro, ambient, tank, concert1, concert2, finaleStart
- MusicFadeOut = <float> (in seconds)
- MusicTagTrack = zombat, scavengeLevel
- MusicMasterDivTags = <int> or <float> = 8, 8.0, 1.0, 4.0
- MusicTagDelay = <int> or <int, int> (?in seconds?)
- MusicTagIndex = <int> = 0, 2
- MusicTagDelayMult = <int> = 2
- MusicMasterTags
- Ex:
"MusicMasterTags"
{
"loopStart" "108.197"
}
"MusicMasterTags"
{
"tag1" "1.033"
"tag2" "2.806"
"tag3" "5.647"
}
game_sounds_terror.txt
Priority = Interesting
Reaction = ChaseFromAnywhere
"InfectedChaseGoal.Attract" { "channel" "CHAN_STATIC" "volume" "1.0" "soundlevel" "SNDLVL_NORM" "pitch" "PITCH_NORM" "wave" "common/null.wav" "GameData" { "Priority" "Interesting" "Reaction" "ChaseFromAnywhere" } }
game_sounds_weapons.txt
Priority = Interesting
Reaction = SeekAndDestroy
"PipeBomb.TimerBeep" { "channel" "CHAN_STATIC" "soundlevel" "SNDLVL_90dB" "volume" "0.75" "wave" "weapons/hegrenade/beep.wav" "GameData" { "Priority" "Interesting" "Reaction" "SeekAndDestroy" } }
game_sounds_world.txt
"c1m4.ElevatorJingle" { "channel" "CHAN_STATIC" "volume" "1" "soundlevel" "SNDLVL_150dB" "pitch" "100" // "wave" "*)ambient/mall/elevator.wav" "wave" "common/null.wav" // GameData // { // "MusicDuckTrackList" "zombat, zombat2, zombat3, ambient" // } }
Official soundscripts to look through
game_sounds.txt game_sounds_ambient_generic.txt game_sounds_arenaheli.txt game_sounds_biker.txt game_sounds_bots.txt game_sounds_coach.txt game_sounds_doors.txt game_sounds_gambler.txt game_sounds_infected_common.txt game_sounds_infected_special.txt game_sounds_manager.txt game_sounds_manifest.txt game_sounds_mechanic.txt game_sounds_melee_vo.txt game_sounds_moustachio.txt game_sounds_music.txt game_sounds_namvet.txt game_sounds_npc2.txt game_sounds_npcs.txt game_sounds_physics.txt game_sounds_player.txt game_sounds_producer.txt game_sounds_soldier1.txt game_sounds_soldier2.txt game_sounds_teengirl.txt game_sounds_terror.txt game_sounds_virgil.txt game_sounds_weapons.txt game_sounds_whitaker.txt game_sounds_world.txt level_sounds_general.txt soundmixers.txt
Other
- I don't understand "sound priorities" (not sure if that is the proper terminology). To describe it, it is where the location of the sound file in the sound directory makes all the difference. One sound can drown out others, depending on their location.
- Sound priorities appear to be independent of soundscript entries.
- I thought scripts/soundmixers.txt would have dictated everything about priority, but directories with the same settings appear to have different priorities. Weird! I will need help or more time on explaining that.
- How does Valve automatically generate these soundscripts?