class KFAudioSettingsTab extends Settings_Tabs; var localized string AudioModes[4], VoiceModes[3]; var automated GUISectionBackground i_BG1, i_BG2, i_BG3; var automated moSlider sl_MusicVol, sl_EffectsVol, sl_VOIP; var automated moComboBox co_Mode, co_Announce; var automated moCheckbox ch_ReverseStereo, ch_MessageBeep, ch_LowDetail, ch_Default, ch_VoiceChat; var automated moCheckBox ch_AJPublic, ch_AutoSpeak, ch_Dampen; var automated moEditBox ed_Active; var automated moEditBox ed_ChatPassword; var automated moComboBox co_Quality, co_LANQuality; var float fMusic, fEffects, fVOIP; var int iVoice, iMode, iVoiceMode; var bool bRev, bBeep, bLow, bCompat, b3DSound, bEAX, bDefault, bVoiceChat, bDampen; var bool bAJPublic, bAutoSpeak; var string sPwd, sCodec, sLANCodec, sActive; var float fVoice; var class VoiceChatClass; var string VoiceChatClassName; function InitComponent(GUIController MyController, GUIComponent MyOwner) { local int i; local bool bIsWin32; local string CName, CDesc; local class Cls; local array InstalledCodecs; bIsWin32 = ( ( PlatformIsWindows() ) && ( !PlatformIs64Bit() ) ); Super.InitComponent(MyController, MyOwner); if ( bIsWin32 ) { for(i = 0;i < ArrayCount(AudioModes);i++) co_Mode.AddItem(AudioModes[i]); } else { co_Mode.AddItem("OpenAL"); } // Need to load TeamVoiceReplicationInfo to get team channel names Cls = class( DynamicLoadObject( VoiceChatClassName, class'Class') ); if ( Cls != None ) VoiceChatClass = Cls; VoiceChatClass.static.GetInstalledCodecs( InstalledCodecs ); for ( i = 0; i < InstalledCodecs.Length; i++ ) { VoiceChatClass.static.GetCodecInfo( InstalledCodecs[i], CName, CDesc ); co_Quality.AddItem( CName,, InstalledCodecs[i] ); co_LANQuality.AddItem( CName,, InstalledCodecs[i] ); } ed_ChatPassword.MaskText(True); i_BG1.ManageComponent(sl_MusicVol); i_BG1.ManageComponent(sl_EffectsVol); i_BG1.ManageComponent(sl_VOIP); i_BG1.ManageComponent(co_Mode); i_BG1.ManageComponent(ch_LowDetail); i_BG1.ManageComponent(ch_Default); i_BG1.ManageComponent(ch_reverseStereo); i_BG1.ManageComponent(ch_MessageBeep); i_BG3.ManageComponent(ch_VoiceChat); i_BG3.ManageComponent(ch_Dampen); i_BG3.ManageComponent(ch_AJPublic); i_BG3.ManageComponent(ch_AutoSpeak); i_BG3.ManageComponent(ed_Active); i_BG3.ManageComponent(ed_ChatPassword); i_BG3.ManageComponent(co_Quality); i_BG3.ManageComponent(co_LANQuality); // !!! FIXME: Might use a preinstalled system OpenAL in the future on // !!! FIXME: Mac or Unix, but for now, we don't... --ryan. if ( !PlatformIsWindows() ) ch_Default.DisableMe(); } function ResetClicked() { local class A; local PlayerController PC; local int i; Super.ResetClicked(); PC = PlayerOwner(); A = class(DynamicLoadObject(GetNativeClassName("Engine.Engine.AudioDevice"), Class'Class')); A.static.ResetConfig(); class'Hud'.static.ResetConfig("bMessageBeep"); class'LevelInfo'.static.ResetConfig("bLowSoundDetail"); class'PlayerController'.static.ResetConfig("bNoVoiceTaunts"); class'PlayerController'.static.ResetConfig("bNoVoiceMessages"); A.static.ResetConfig("VoiceVolume"); class'Engine.PlayerController'.static.ResetConfig("VoiceChatCodec"); class'Engine.PlayerController'.static.ResetConfig("VoiceChatLANCodec"); class'Engine.PlayerController'.static.ResetConfig("AutoJoinMask"); class'Engine.PlayerController'.static.ResetConfig("ChatPassword"); class'Engine.PlayerController'.static.ResetConfig("DefaultActiveChannel"); class'Engine.PlayerController'.static.ResetConfig("bEnableInitialChatRoom"); for (i = 0; i < Components.Length; i++) Components[i].LoadINI(); } function InternalOnLoadINI(GUIComponent Sender, string s) { local PlayerController PC; local bool bIsWin32; PC = PlayerOwner(); switch (Sender) { case sl_MusicVol: fMusic = float(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice MusicVolume")); sl_MusicVol.SetComponentValue(fMusic,true); break; case sl_EffectsVol: fEffects = float(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice SoundVolume")); sl_EffectsVol.SetComponentValue(fEffects,true); break; case co_Mode: iMode = 1; bIsWin32 = ( ( PlatformIsWindows() ) && ( !PlatformIs64Bit() ) ); if ( !bIsWin32 ) { bCompat = False; b3DSound = True; iMode = 0; } else { if ( bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice CompatibilityMode")) ) { bCompat = True; iMode = 0; } if ( bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice Use3DSound")) ) { b3DSound = True; iMode = 2; } if ( bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice UseEAX" )) ) { bEAX = True; iMode = 3; } } co_Mode.SilentSetIndex(iMode); break; case ch_ReverseStereo: bRev = bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice ReverseStereo")); ch_ReverseStereo.SetComponentValue(bRev,true); break; case ch_Default: bDefault = bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice UseDefaultDriver")); ch_Default.SetComponentValue(bDefault,true); break; case ch_MessageBeep: bBeep = class'HUD'.default.bMessageBeep; ch_MessageBeep.SetComponentValue(bBeep,true); break; case ch_LowDetail: bLow = PC.Level.bLowSoundDetail; // Make sure both are the same - LevelInfo.bLowSoundDetail take priority if ( bLow != bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice LowQualitySound" )) ) { PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice LowQualitySound"@bLow); PC.ConsoleCommand("SOUND_REBOOT"); // Restart music. if( PC.Level.Song != "" && PC.Level.Song != "None" ) PC.ClientSetMusic( PC.Level.Song, MTRAN_Instant ); else PC.ClientSetMusic( class'ROMainMenu'.default.MenuSong, MTRAN_Instant ); } ch_LowDetail.SetComponentValue(bLow,true); break; case ch_VoiceChat: bVoiceChat = bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice UseVoIP")); ch_VoiceChat.SetComponentValue(bVoiceChat,true); UpdateVOIPControlsState(); break; case ed_ChatPassword: sPwd = PC.ChatPassword; ed_ChatPassword.SetComponentValue(sPwd, True); break; case sl_VOIP: fVoice = float(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice VoiceVolume")); sl_VOIP.SetComponentValue(fVoice, True); break; case co_Quality: sCodec = PC.VoiceChatCodec; co_Quality.SetExtra(sCodec,true); break; case co_LANQuality: sLANCodec = PC.VoiceChatLANCodec; co_LANQuality.SetExtra(sLANCodec,true); break; case ch_Dampen: bDampen = bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice DampenWithVoIP")); ch_Dampen.SetComponentValue(bDampen,true); break; case ch_AJPublic: bAJPublic = bool(PC.AutoJoinMask & 1); ch_AJPublic.SetComponentValue(bAJPublic,True); break; case ch_AutoSpeak: bAutoSpeak = PC.bEnableInitialChatRoom; if ( bAutoSpeak ) EnableComponent(ed_Active); else DisableComponent(ed_Active); ch_AutoSpeak.SetComponentValue(bAutoSpeak, True); break; case ed_Active: sActive = PC.DefaultActiveChannel; ed_Active.SetComponentValue(sActive, True); break; default: log(Name@"Unknown component calling LoadINI:"$ GUIMenuOption(Sender).Caption); GUIMenuOption(Sender).SetComponentValue(s,true); } } function InternalOnChange(GUIComponent Sender) { local PlayerController PC; local bool bIsWin32; bIsWin32 = ( ( PlatformIsWindows() ) && ( !PlatformIs64Bit() ) ); Super.InternalOnChange(Sender); PC = PlayerOwner(); switch(Sender) { case sl_MusicVol: fMusic = sl_MusicVol.GetValue(); PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice MusicVolume"@fMusic); PC.ConsoleCommand("SetMusicVolume"@fMusic); if( PC.Level.Song != "" && PC.Level.Song != "None" ) PC.ClientSetMusic( PC.Level.Song, MTRAN_Instant ); else PC.ClientSetMusic( class'ROMainMenu'.default.MenuSong, MTRAN_Instant ); break; case sl_EffectsVol: fEffects = sl_EffectsVol.GetValue(); PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice SoundVolume"@fEffects); PC.ConsoleCommand("stopsounds"); break; case co_Mode: if ( !bIsWin32 ) // Simple OpenAL abstraction... --ryan. break; iMode = co_Mode.GetIndex(); if (iMode > 1) ShowPerformanceWarning(); bCompat = iMode < 1; b3DSound = iMode > 1; bEAX = iMode > 2; PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice CompatibilityMode"@bCompat); PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice Use3DSound"@b3DSound); PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice UseEAX"@bEAX); PC.ConsoleCommand("SOUND_REBOOT"); // Restart music. if( PC.Level.Song != "" && PC.Level.Song != "None" ) PC.ClientSetMusic( PC.Level.Song, MTRAN_Instant ); else PC.ClientSetMusic( class'ROMainMenu'.default.MenuSong, MTRAN_Instant ); break; case ch_ReverseStereo: bRev = ch_ReverseStereo.IsChecked(); break; case ch_MessageBeep: bBeep = ch_MessageBeep.IsChecked(); break; case ch_Default: bDefault = ch_Default.IsChecked(); PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice UseDefaultDriver"@bDefault); PC.ConsoleCommand("SOUND_REBOOT"); break; case ch_LowDetail: bLow = ch_LowDetail.IsChecked(); PC.Level.bLowSoundDetail = bLow; PC.Level.SaveConfig(); PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice LowQualitySound"@bLow); PC.ConsoleCommand("SOUND_REBOOT"); // Restart music. if( PC.Level.Song != "" && PC.Level.Song != "None" ) PC.ClientSetMusic( PC.Level.Song, MTRAN_Instant ); else PC.ClientSetMusic( class'ROMainMenu'.default.MenuSong, MTRAN_Instant ); break; case ch_VoiceChat: bVoiceChat = ch_VoiceChat.IsChecked(); UpdateVOIPControlsState(); break; case ch_Dampen: bDampen = ch_Dampen.IsChecked(); break; case ed_ChatPassword: sPwd = ed_ChatPassword.GetText(); break; case sl_VOIP: fVoice = sl_VOIP.GetValue(); break; case co_Quality: sCodec = co_Quality.GetExtra(); break; case co_LANQuality: sLANCodec = co_LANQuality.GetExtra(); break; case ch_AJPublic: bAJPublic = ch_AJPublic.IsChecked(); break; case ch_AutoSpeak: bAutoSpeak = ch_AutoSpeak.IsChecked(); if ( bAutoSpeak ) EnableComponent(ed_Active); else DisableComponent(ed_Active); break; case ed_Active: sActive = ed_Active.GetText(); break; } } function SaveSettings() { local PlayerController PC; local bool bSave, bReboot; Super.SaveSettings(); PC = PlayerOwner(); if (PC.bNoAutoTaunts != iVoiceMode > 0) { PC.bNoAutoTaunts = iVoiceMode > 0; PC.default.bNoAutoTaunts = PC.bNoAutoTaunts; bSave = True; } if (PC.bNoVoiceTaunts != iVoiceMode > 0) { PC.bNoVoiceTaunts = iVoiceMode > 0; PC.default.bNoVoiceTaunts = PC.bNoVoiceTaunts; bSave = True; } if (PC.bNoVoiceMessages != iVoiceMode == 2) { PC.bNoVoiceMessages = iVoiceMode == 2; PC.default.bNoVoiceMessages = PC.bNoVoiceMessages; bSave = True; } if (fMusic != sl_MusicVol.GetValue()) PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice MusicVolume"@fMusic); if (fEffects != sl_EffectsVol.GetValue()) PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice SoundVolume"@fEffects); if (bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice ReverseStereo")) != bRev) PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice ReverseStereo"@bRev); if (bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice DampenWithVoIP")) != bDampen) PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice DampenWithVoIP"@bDampen); if (bDefault != bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice UseDefaultDriver"))) { PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice UseDefaultDriver"@bDefault); bReboot = True; } if( PC.MyHud != None ) { if ( PC.myHUD.bMessageBeep != bBeep ) { PC.myHUD.bMessageBeep = bBeep; PC.myHUD.SaveConfig(); } } else { if ( class'HUD'.default.bMessageBeep != bBeep ) { class'HUD'.default.bMessageBeep = bBeep; class'HUD'.static.StaticSaveConfig(); } } if ( bAJPublic != bool(PC.AutoJoinMask & 1) ) { if ( bAJPublic ) PC.AutoJoinMask = PC.AutoJoinMask | 1; else PC.AutoJoinMask = PC.AutoJoinMask & ~1; bSave = True; } if ( fVoice != float(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice VoiceVolume")) ) PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice VoiceVolume"@fVoice); if ( sCodec != PC.VoiceChatCodec ) { PC.VoiceChatCodec = sCodec; bSave = True; } if ( sLANCodec != PC.VoiceChatLANCodec ) { PC.VoiceChatLANCodec = sLANCodec; bSave = True; } if ( PC.bEnableInitialChatRoom != bAutoSpeak ) { PC.bEnableInitialChatRoom = bAutoSpeak; bSave = True; } if ( !(PC.DefaultActiveChannel ~= sActive) ) { PC.DefaultActiveChannel = sActive; bSave = True; } if (PC.ChatPassword != sPwd) { PC.SetChatPassword(sPwd); bSave = False; } if (bVoiceChat != bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice UseVoIP"))) { if (bVoiceChat) PC.EnableVoiceChat(); else PC.DisableVoiceChat(); bReboot = False; } if (bSave) PC.SaveConfig(); if (bReboot) PC.ConsoleCommand("SOUND_REBOOT"); } function UpdateVOIPControlsState() { if (bVoiceChat) { //ch_AJLocal.EnableMe(); sl_VOIP.EnableMe(); //ch_AJLocal.EnableMe(); ch_AJPublic.EnableMe(); //ch_AJTeam.EnableMe(); ed_Active.EnableMe(); ed_ChatPassword.EnableMe(); co_Quality.EnableMe(); co_LANQuality.EnableMe(); ch_AutoSpeak.EnableMe(); } else { //ch_AJLocal.DisableMe(); sl_VOIP.DisableMe(); //ch_AJLocal.DisableMe(); ch_AJPublic.DisableMe(); //ch_AJTeam.DisableMe(); ed_Active.DisableMe(); ed_ChatPassword.DisableMe(); co_Quality.DisableMe(); co_LANQuality.DisableMe(); ch_AutoSpeak.DisableMe(); } } defaultproperties { Begin Object class=GUISectionBackground Name=AudioBK1 WinWidth=0.485000 WinHeight=0.65 WinLeft=0.000948 WinTop=0.1 Caption="Sound System" End Object i_BG1=AudioBK1 Begin Object class=GUISectionBackground Name=AudioBK3 WinWidth=0.502751 WinHeight=0.65 WinLeft=0.495826 WinTop=0.1 Caption="Voice Chat" End Object i_BG3=AudioBK3 Begin Object class=moSlider Name=AudioEffectsVolumeSlider WinWidth=0.450000 WinLeft=0.524024 WinTop=0.070522 MinValue=0.0 MaxValue=0.5//1.0 Caption="Effects Volume" Hint="Adjusts the volume of all in game sound effects." LabelJustification=TXTA_Left ComponentJustification=TXTA_Right CaptionWidth=0.5 ComponentWidth=-1 bAutoSizeCaption=True OnLoadINI=InternalOnLoadINI OnChange=InternalOnChange INIOption="@Internal" INIDefault="0.35" TabOrder=1 End Object sl_EffectsVol=AudioEffectsVolumeSlider Begin Object class=moSlider Name=AudioMusicVolume WinWidth=0.450000 WinLeft=0.018164 WinTop=0.070522 Caption="Music Volume" LabelJustification=TXTA_Left ComponentJustification=TXTA_Right CaptionWidth=0.5 ComponentWidth=-1 bAutoSizeCaption=True MinValue=0.0 MaxValue=0.5//1.0 OnLoadINI=InternalOnLoadINI OnChange=InternalOnChange INIOption="@Internal" INIDefault="0.25" Hint="Adjusts the volume of the background music." TabOrder=2 End Object sl_MusicVol=AudioMusicVolume Begin Object Class=moSlider Name=VoiceVolume WinWidth=0.408907 WinLeft=0.518507 WinTop=0.142484 Caption="Voice Chat Volume" Hint="Adjusts the volume of other players' voice chat communication." IniOption="@Internal" INIDefault="1.0" OnLoadINI=InternalOnLoadINI OnChange=InternalOnChange RenderWeight=1.04 TabOrder=3 MinValue=1.0 MaxValue=10.0 CaptionWidth=0.5 ComponentWidth=-1 bAutoSizeCaption=True ComponentJustification=TXTA_Right LabelJustification=TXTA_Left End Object sl_VOIP=VoiceVolume Begin Object class=moComboBox Name=AudioMode WinWidth=0.450000 WinLeft=0.018164 WinTop=0.149739 Caption="Audio Mode" INIOption="@Internal" INIDefault="Software 3D Audio" OnLoadINI=InternalOnLoadINI OnChange=InternalOnChange Hint="Changes the audio system mode." CaptionWidth=0.5 LabelJustification=TXTA_Left ComponentJustification=TXTA_Right bReadOnly=true TabOrder=4 End Object co_Mode=AudioMode Begin Object class=moCheckBox Name=AudioLowDetail WinWidth=0.45 WinLeft=0.018164 WinTop=0.235052 Caption="Low Sound Detail" INIOption="@Internal" INIDefault="False" OnLoadINI=InternalOnLoadINI OnChange=InternalOnChange Hint="Lowers quality of sound." CaptionWidth=0.94 bSquare=true ComponentJustification=TXTA_Left TabOrder=5 End Object ch_LowDetail=AudioLowDetail Begin Object class=moCheckBox Name=AudioDefaultDriver WinWidth=0.45 WinLeft=0.018164 WinTop=0.320365 Caption="System Driver" Hint="Use system installed OpenAL driver" INIOption="@Internal" INIDefault="False" OnLoadINI=InternalOnLoadINI OnChange=InternalOnChange CaptionWidth=0.94 ComponentJustification=TXTA_Left TabOrder=6 End Object ch_Default=AudioDefaultDriver Begin Object class=moCheckBox Name=AudioReverseStereo WinWidth=0.45 WinLeft=0.018164 WinTop=0.405678 Caption="Reverse Stereo" Hint="Reverses the left and right audio channels." INIOption="@Internal" INIDefault="False" OnLoadINI=InternalOnLoadINI OnChange=InternalOnChange CaptionWidth=0.94 ComponentJustification=TXTA_Left TabOrder=7 End Object ch_ReverseStereo=AudioReverseStereo Begin Object class=moCheckBox Name=AudioMessageBeep WinWidth=0.45 WinLeft=0.524024 WinTop=0.405678 Caption="Message Beep" Hint="Enables a beep when receiving a text message from other players." INIOption="@Internal" INIDefault="True" OnLoadINI=InternalOnLoadINI OnChange=InternalOnChange CaptionWidth=0.94 bSquare=true ComponentJustification=TXTA_Left TabOrder=9 End Object ch_MessageBeep=AudioMessageBeep Begin Object class=moCheckBox Name=EnableVoiceChat WinWidth=0.461134 WinLeft=0.527734 WinTop=0.834777 INIOption="@Internal" OnLoadINI=InternalOnLoadINI OnChange=InternalOnChange Hint="Enables the voice chat system during online matches." Caption="Enable Voice Chat" CaptionWidth=-1 bSquare=true TabOrder=20 ComponentJustification=TXTA_Right End Object ch_VoiceChat=EnableVoiceChat Begin Object Class=moCheckBox Name=Dampen WinWidth=0.826652 WinLeft=0.086280 WinTop=0.145784 Caption="Dampen Game Volume When Using VOIP" Hint="Dampens the volume of the game when receiving VOIP communications." IniOption="@Internal" OnLoadINI=InternalOnLoadIni OnChange=InternalOnChange bSquare=True ComponentJustification=TXTA_Right LabelJustification=TXTA_Left ComponentWidth=-1 CaptionWidth=0.94 TabOrder=21 End Object ch_Dampen=Dampen Begin Object Class=moCheckBox Name=AutoJoinPublic WinWidth=0.826652 WinLeft=0.086280 WinTop=0.145784 Caption="Autojoin Public Channel" Hint="Automatically join the 'Public' channel upon connecting to a server." IniOption="@Internal" OnLoadINI=InternalOnLoadIni OnChange=InternalOnChange bSquare=True ComponentJustification=TXTA_Right LabelJustification=TXTA_Left ComponentWidth=-1 CaptionWidth=0.94 TabOrder=23 End Object ch_AJPublic=AutoJoinPublic Begin Object Class=moCheckBox Name=AutoSpeakCheckbox WinWidth=0.442638 WinHeight=0.060000 WinLeft=0.039812 WinTop=0.603526 Caption="Auto-select Active Channel" Hint="Automatically set an active channel when you join a server. The default channel is determined by the gametype, but you can specify your own using the editbox below" IniOption="@Internal" OnLoadINI=InternalOnLoadIni OnChange=InternalOnChange bSquare=True ComponentJustification=TXTA_Right LabelJustification=TXTA_Left ComponentWidth=-1 CaptionWidth=0.8 TabOrder=24 bBoundToParent=True bScaleToParent=True End Object ch_AutoSpeak=AutoSpeakCheckbox Begin Object Class=moEditBox Name=DefaultActiveChannelEditBox WinWidth=0.420403 WinLeft=0.032569 WinTop=0.757277 Hint="Enter the name of the channel to speak on by default when you join the server. To use the default chatroom for whichever gametype you're playing, leave this field empty" Caption="Default Channel Name" IniOption="@Internal" OnLoadIni=InternalOnLoadIni OnChange=InternalOnChange ComponentJustification=TXTA_Right LabelJustification=TXTA_Left CaptionWidth=0.6 ComponentWidth=-1 TabOrder=25 End Object ed_Active=DefaultActiveChannelEditBox Begin Object Class=moEditBox Name=ChatPasswordEdit WinWidth=0.420403 WinLeft=0.032569 WinTop=0.332828 Hint="Set a password on your personal chat room to limit who is allowed to join" Caption="Chat Password" IniOption="@Internal" OnLoadIni=InternalOnLoadIni OnChange=InternalOnChange ComponentJustification=TXTA_Right LabelJustification=TXTA_Left CaptionWidth=0.6 ComponentWidth=-1 bAutoSizeCaption=True TabOrder=26 End Object ed_ChatPassword=ChatPasswordEdit Begin Object class=moComboBox Name=VoiceQuality WinWidth=0.408907 WinLeft=0.523390 WinTop=0.241391 Caption="Internet Quality" Hint="Determines the codec used to transmit voice chat to and from internet servers." IniOption="@Internal" OnLoadINI=InternalOnLoadINI OnChange=InternalOnChange TabOrder=27 bReadOnly=True CaptionWidth=0.6 ComponentWidth=-1 bAutoSizeCaption=True ComponentJustification=TXTA_Right LabelJustification=TXTA_Left End Object co_Quality=VoiceQuality Begin Object class=moComboBox Name=VoiceQualityLAN WinWidth=0.408907 WinLeft=0.523390 WinTop=0.333786 Caption="LAN Quality" Hint="Determines the codec used to transmit voice chat to and from LAN servers." IniOption="@Internal" OnLoadINI=InternalOnLoadINI OnChange=InternalOnChange TabOrder=28 bReadOnly=True CaptionWidth=0.6 ComponentWidth=-1 bAutoSizeCaption=True ComponentJustification=TXTA_Right LabelJustification=TXTA_Left End Object co_LANQuality=VoiceQualityLAN VoiceChatClassName="UnrealGame.TeamVoiceReplicationInfo" VoiceChatClass=class'Engine.VoiceChatReplicationInfo' WinTop=0.15 WinLeft=0 WinWidth=1 WinHeight=0.74 bAcceptsInput=false AudioModes[0]="Safe Mode" AudioModes[1]="3D Audio" AudioModes[2]="H/W 3D Audio" AudioModes[3]="H/W 3D + EAX" VoiceModes[0]="All" VoiceModes[1]="No taunts" VoiceModes[2]="None" PanelCaption="Audio" }