A multi-year pursuit of programming? As you say, I think this would interfere too much with my development in audio related areas. My goal is to be a sound designer, however, I do frequently see jobs advertised called "Audio Programmer". Not knowing how much an audio programmer would need to know, I don't know if programming is something I should add to my skill set. The whole point of this Portal mod is to create an audio implementation/sound design demo, that will demonstrate that I can do a sound design job. I still find the programming subject tempting, though. It must be quite rewarding!
I did find a tutorial video last night, which helped me understand things a bit more, but for the sake of posting something code-ish...
Here is something I do understand, except for a few minor things; There is a file path for the sound file, yet I cannot find this sound file in my windows explorer. It is apparently a WAV file, so it should not be hidden. Also, I'd like to know what the very first line represents ("Portal.Glados..." , and also the significance of the quotation marks. Is this the name that Hammer references the sound file + properties by? This came from a script .txt file, and only consists of what I've shown below, repeated for different sound files, so there are no introductory instructions. I'm wondering how the game/Hammer will know it has to read this file?
If that wasn't enough of a challenge, this nearly gave me a heart attack. All I know here is that "//" means comments. From a text file called "Soundmixers", and there is no page on Valve explaining it. If I had to guess, I'd say this details some way of determining which sounds are played over others, such as when Glados speaks, and all other sounds are reduced. In audio, this could be called 'ducking'. There is, as you can see, some instructions listed as comments, but it's got me too confused, at this point:
// Halflife 2 custom sound mixers.
// These Sound Mixers are referenced by name from Soundscapes, and are used to provide
// custom volume control over various sound categories, called 'mix groups'
// "GROUPRULES" specifies the rules for inclusion of a sound in a mix group.
// Rules are checked sequentially (from top to bottom). All fields must match
// in a row in order for a sound to match the group. A sound my be included
// in up to 8 mix groups.
// LIMITS:
// up to 64 unique mix groups
// up to 76 group rules entries
// up to 32 sound mixers
// all strings are limited to 31 characters!
// NOTE2: at runtime, you can display the classname of the sound source by
// setting snd_showclassname 1 in the console.
// NOTE3: main character dialog during critical scenes is ducked using a separate code path which, when
// active, temporarilly disables mixer ducking (prevent double ducking).
// Lower priority sounds are ducked by higher priority sounds, if "is ducked" is enabled.
// Only sounds with "causes ducking" enabled can cause a lower priority sound to be ducked.
"MixGroups"
{
// NOTE: order these from least general to most general
// directory or .wav classname Causes Duck to Ducker
// group name name substring substring chan sndlvl_min sndlvl_max priority Is Ducked Ducking Percent Threshold
// --------- ------------------ --------- ----------- ---------- ---------- -------- -------- ------- ------- ---------
"voip" "?VoiceSfx" "" "" "" "" "60" "0" "0" "100" "40"
"UI" "ui/" "" "" "" "" "60" "0" "0" "100" "40"
"commentary" "commentary/" "" "" "" "" "60" "0" "0" "100" "40"
"mstr" "mstr/" "" "" "" "" "60" "0" "0" "100" "40"
"noDSP" "nodsp" "" "" "" "" "60" "0" "0" "100" "40"
"potatosVO" "vo/glados/potatos" "" "" "" "" "60" "0" "0" "100" "40"
"gladosVO" "vo/glados/" "" "" "" "" "60" "0" "0" "100" "40"
"announcerVO" "vo/announcer/" "" "" "" "" "60" "0" "0" "100" "40"
"wheatleyVO" "vo/wheatley/" "" "" "" "" "60" "0" "0" "100" "40"
"caveVO" "vo/cavejohnson/" "" "" "" "" "60" "0" "0" "100" "40"
"coreVO" "vo/core" "" "" "" "" "60" "0" "0" "100" "40"
"inTBeam" "player_enter_tbeam_lp" "" "" "" "" "60" "0" "0" "100" "40"
"gelBounce" "player_bounce_jump_paint" "" "" "" "" "60" "0" "0" "100" "40"
"epilogueMusic" "music/sp_a5_x1" "" "" "" "" "60" "0" "0" "75" "40"
"Music" "music/" "" "" "" "" "60" "0" "0" "75" "40"
"beep" "xray/beep" "" "" "" "" "60" "0" "0" "75" "40"
"bullethit" "impact_bullet" "" "" "" "" "60" "0" "0" "100" "40"
"bulletmiss" "nearmiss" "" "" "" "" "60" "0" "0" "100" "40"
"Explosions" "explo" "" "" "120" "" "60" "0" "0" "100" "40"
"Player_Fall" "fall_whoosh" "" "" "" "" "60" "0" "0" "100" "40"
"Portalgun" "portalgun" "" "" "" "" "60" "0" "0" "100" "40"
"Player_Weapons_Loud" "weapon" "Player" "" "140" "" "60" "0" "0" "100" "40"
"Player_Weapons" "weapon" "Player" "" "" "" "60" "0" "0" "100" "40"
"Player" "player/" "Player" "" "" "" "60" "0" "0" "100" "40"
"turrets" "npc/turret" "" "" "" "" "60" "0" "0" "100" "40"
"defective_turrets" "vo/turret" "" "" "" "" "60" "0" "0" "100" "40"
"NPC_Voice" "" "NPC" "CHAN_VOICE" "" "" "60" "0" "0" "100" "40"
"NPC_Weapons_Loud" "" "NPC" "CHAN_WEAPON" "140" "" "60" "0" "0" "100" "40"
"NPC_Weapons" "" "NPC" "CHAN_WEAPON" "" "" "60" "0" "0" "100" "40"
"NPC_Body" "" "NPC" "CHAN_BODY" "" "" "60" "0" "0" "100" "40"
"NPC_Looping" "" "NPC" "CHAN_STATIC" "" "" "60" "0" "0" "100" "40"
"NPC" "" "NPC" "" "" "" "60" "0" "0" "100" "40"
"Ambient" "ambien" "" "" "" "" "60" "0" "0" "100" "40"
"Container" "container" "" "" "" "" "60" "0" "0" "100" "40"
"Robot" "robot_parts/" "" "" "" "" "60" "0" "0" "100" "40"
"Trains" "plats/" "" "" "" "" "60" "0" "0" "100" "40"
"Doors" "doors/" "" "" "" "" "60" "0" "0" "100" "40"
"Buttons" "buttons/" "" "" "" "" "60" "0" "0" "100" "40"
"Items" "items/" "" "" "" "" "60" "0" "0" "100" "40"
"Beams" "beams/" "" "" "" "" "60" "0" "0" "100" "40"
"Vehicles" "vehicles/" "" "" "" "" "60" "0" "0" "68" "40"
"Vehicles_Looping" "vehicles/" "" "CHAN_STATIC" "" "" "60" "0" "0" "68" "40"
"Physics" "physics/" "" "" "" "" "60" "0" "0" "100" "40"
"Dialog" "combined/" "" "" "" "" "60" "0" "0" "100" "20"
"Combat" "explo" "" "" "110" "" "60" "0" "0" "100" "40"
"Weapons" "weapon" "" "" "120" "" "60" "0" "0" "100" "40"
"Quiet" "" "" "" "0" "70" "60" "0" "0" "100" "40"
"Medium" "" "" "" "71" "90" "60" "0" "0" "100" "40"
"Loud" "" "" "" "91" "100" "60" "0" "0" "100" "40"
"VeryLoud" "" "" "" "101" "149" "60" "0" "0" "100" "40"
"SuperLoud" "" "" "" "150" "" "60" "0" "0" "100" "40"
"All" "" "" "" "" "" "60" "0" "0" "100" "40"
"Claw" "asdfasdf" "" "" "" "" "60" "0" "0" "100" "40"
"ReducedDuckingSm" "asdfxxx" "" "" "" "" "60" "0" "0" "100" "40"
"ReducedDuckingMd" "asdfwww" "" "" "" "" "60" "0" "0" "100" "40"
"ReducedDuckingLg" "asdfyyy" "" "" "" "" "60" "0" "0" "100" "40"
"ReducedDuckingXl" "asdfbbb" "" "" "" "" "60" "0" "0" "100" "40"
"ReducedDuckingXxl" "asdfhhh" "" "" "" "" "60" "0" "0" "100" "40"
"ReducedDuckingMstr" "asdfqqd" "" "" "" "" "60" "0" "0" "100" "40"
"testTBin" "asdfaef" "" "" "" "" "60" "0" "0" "100" "40"
"testGelBounce" "asxdrf" "" "" "" "" "60" "0" "0" "100" "40"
"testGelSpeed" "asxdrf" "" "" "" "" "60" "0" "0" "100" "40"
"unduckedMusic" "music/" "" "" "" "" "60" "0" "0" "75" "40"
"unTBeam" "untbeam" "" "" "" "" "60" "0" "0" "100" "40"
"xLoud" "xloud" "" "" "" "" "60" "0" "0" "100" "40"
}
Thanks a lot for your time!