//==============================================================================
//  Contains all client-side (mostly) game configuration properties
//
//  Written by Ron Prestenback
//  © 2003, Epic Games, Inc.  All Rights Reserved
//==============================================================================
class UT2K4Tab_GameSettings extends Settings_Tabs;

var automated GUISectionBackground i_BG1, i_BG2, i_BG3, i_BG4, i_BG5;
var automated moCheckBox    ch_WeaponBob, ch_AutoSwitch, ch_Speech,
                            ch_Dodging, ch_AutoAim, ch_ClassicTrans, ch_LandShake;
var automated moComboBox    co_GoreLevel;

var GUIComponent LastGameOption;  // Hack

var bool    bBob, bDodge, bAim, bAuto, bClassicTrans, bLandShake, bLandShakeD, bSpeechRec;
var int     iGore;

// From network tab
var localized string    NetSpeedText[4];

var localized string    StatsURL;
var localized string    EpicIDMsg;

var automated GUILabel  l_Warning, l_ID;
var automated GUIButton b_Stats;
var automated moCheckBox    ch_TrackStats, ch_DynNetspeed, ch_Precache;
var automated moComboBox    co_Netspeed;
var automated moEditBox     ed_Name, ed_Password;

var int iNetspeed, iNetSpeedD;
var string sPassword, sName;
var bool bStats, bDynNet, bPrecache;


function InitComponent(GUIController MyController, GUIComponent MyOwner)
{
	local int i;

    Super.InitComponent(MyController, MyOwner);
    if ( class'GameInfo'.Default.bAlternateMode )
    	RemoveComponent(co_GoreLevel);
    else
    {
    	for (i = 0; i < ArrayCount(class'GameInfo'.default.GoreLevelText); i++)
    		co_GoreLevel.AddItem(class'GameInfo'.default.GoreLevelText[i]);
    }

    LastGameOption = ch_LandShake;

    // Network
    for(i = 0;i < ArrayCount(NetSpeedText);i++)
        co_Netspeed.AddItem(NetSpeedText[i]);

    ed_Name.MyEditBox.bConvertSpaces = true;
    ed_Name.MyEditBox.MaxWidth=14;

    ed_Password.MyEditBox.MaxWidth=14;

    ed_Password.MaskText(true);
    l_ID.Caption = FormatID(PlayerOwner().GetPlayerIDHash());

}

function string FormatID(string id)
{
    id=Caps(id);
    return mid(id,0,8)$"-"$mid(id,8,8)$"-"$mid(id,16,8)$"-"$mid(id,24,8);
}

function ShowPanel(bool bShow)
{
    Super.ShowPanel(bShow);
    if ( bShow )
	{
		if ( bInit )
	    {
            i_BG1.ManageComponent(ch_WeaponBob);
            i_BG1.Managecomponent(ch_AutoSwitch);
            i_BG1.ManageComponent(ch_Dodging);
            i_BG1.ManageComponent(ch_AutoAim);
            i_BG1.ManageComponent(ch_ClassicTrans);
            i_BG1.ManageComponent(ch_LandShake);
	        i_BG1.Managecomponent(co_GoreLevel);

            // No speech recognition except on win32... --ryan.
            if ( (!PlatformIsWindows()) || (PlatformIs64Bit()) )
                ch_Speech.DisableMe();

	    }
    	UpdateStatsItems();
    }
}

function InternalOnLoadINI(GUIComponent Sender, string s)
{
	local int i;
    local PlayerController PC;

    if (GUIMenuOption(Sender) != None)
    {
        PC = PlayerOwner();

        switch (GUIMenuOption(Sender))
        {
            case ch_AutoSwitch:
                bAuto = !PC.bNeverSwitchOnPickup;
                ch_AutoSwitch.Checked(bAuto);
                break;

            case ch_WeaponBob:
            	if ( PC.Pawn != None )
            		bBob = PC.Pawn.bWeaponBob;
            	else bBob = class'Pawn'.default.bWeaponBob;
                ch_WeaponBob.Checked(bBob);
                break;

            case co_GoreLevel:
            	if ( PC.Level.Game != None )
            		iGore = PC.Level.Game.GoreLevel;
                else iGore = class'GameInfo'.default.GoreLevel;
                co_GoreLevel.SetIndex(iGore);
                break;

            case ch_Dodging:
                bDodge = PC.DodgingIsEnabled();
                ch_Dodging.Checked(bDodge);
                break;

            case ch_AutoAim:
                bAim = PC.bAimingHelp;
                ch_AutoAim.Checked(bAim);
                break;

            case ch_ClassicTrans:
            	if ( xPlayer(PC) != None )
            		bClassicTrans = xPlayer(PC).bClassicTrans;
                else bClassicTrans = class'xPlayer'.default.bClassicTrans;
                ch_ClassicTrans.Checked(bClassicTrans);
                break;

			case ch_LandShake:
				bLandShake = PC.bLandingShake;
				ch_LandShake.Checked(bLandShake);
				break;

            case ch_Speech:
            	bSpeechRec = bool(PC.ConsoleCommand("get ini:Engine.Engine.ViewportManager UseSpeechRecognition"));
            	ch_Speech.SetComponentValue(bSpeechRec, True);
            	break;

        // Network
        	case ch_Precache:
        		bPrecache = PC.Level.bDesireSkinPreload;
        		ch_Precache.Checked(bPrecache);
        		break;

            case co_Netspeed:
            	if ( PC.Player != None )
            		i = PC.Player.ConfiguredInternetSpeed;
            	else i = class'Player'.default.ConfiguredInternetSpeed;

                if (i <= 2600)
                    iNetSpeed = 0;

                else if (i <= 5000)
                    iNetSpeed = 1;

                else if (i <= 10000)
                    iNetSpeed = 2;

                else iNetSpeed = 3;

				iNetSpeedD = iNetSpeed;
                co_NetSpeed.SetIndex(iNetSpeed);
                break;

            case ed_Name:
                sName = PC.StatsUserName;
                ed_Name.SetText(sName);
                break;

            case ed_Password:
                sPassword = PC.StatsPassword;
                ed_Password.SetText(sPassword);
                break;

            case ch_TrackStats:
            	bStats = PC.bEnableStatsTracking;
                ch_TrackStats.Checked(bStats);
                UpdateStatsItems();
                break;

            case ch_DynNetspeed:
                bDynNet = PC.bDynamicNetSpeed;
                ch_DynNetspeed.Checked(bDynNet);
                break;

        }
    }
}

function SaveSettings()
{
    local PlayerController PC;
    local bool bSave;

	Super.SaveSettings();
    PC = PlayerOwner();

    if ( bSpeechRec != bool(PC.ConsoleCommand("get ini:Engine.Engine.ViewportManager UseSpeechRecognition")) )
    	PC.ConsoleCommand("set ini:Engine.Engine.ViewportManager UseSpeechRecognition"@bSpeechRec);

    if ( xPlayer(PC) != None && xPlayer(PC).bClassicTrans != bClassicTrans)
    {
        xPlayer(PC).bClassicTrans = bClassicTrans;
        xPlayer(PC).ServerSetClassicTrans(bClassicTrans);
        bSave = True;
    }

    if (class'XGame.xPlayer'.default.bClassicTrans != bClassicTrans)
    {
        class'XGame.xPlayer'.default.bClassicTrans = bClassicTrans;
        class'XGame.xPlayer'.static.StaticSaveConfig();
    }

	if (PC.bLandingShake != bLandShake)
	{
		PC.bLandingShake = bLandShake;
		bSave = True;
	}

    if (PC.DodgingIsEnabled() != bDodge)
    {
        PC.SetDodging(bDodge);
        bSave = True;
    }

    if (PC.bNeverSwitchOnPickup == bAuto)
    {
        PC.bNeverSwitchOnPickup = !bAuto;
        bSave = True;
    }

    if ( PC.bAimingHelp != bAim )
    {
    	PC.bAimingHelp = bAim;
    	bSave = True;
    }

    if (PC.Pawn != None)
    {

        PC.Pawn.bWeaponBob = bBob;
        PC.Pawn.SaveConfig();
    }
    else if (class'Engine.Pawn'.default.bWeaponBob != bBob)
    {
        class'Engine.Pawn'.default.bWeaponBob = bBob;
        class'Engine.Pawn'.static.StaticSaveConfig();
    }

    if (PC.Level != None && PC.Level.Game != None)
    {
    	if ( PC.Level.Game.GoreLevel != iGore )
    	{
	        PC.Level.Game.GoreLevel = iGore;
	        PC.Level.Game.SaveConfig();
	    }
    }
    else
    {
		if ( class'Engine.GameInfo'.default.GoreLevel != iGore )
		{
	        class'Engine.GameInfo'.default.GoreLevel = iGore;
	        class'Engine.GameInfo'.static.StaticSaveConfig();
	    }
    }

	// Network
	if ( bPrecache != PC.Level.bDesireSkinPreload )
	{
		PC.Level.bDesireSkinPreload = bPrecache;
		PC.Level.SaveConfig();
	}

	if ( iNetSpeed != iNetSpeedD || (class'Player'.default.ConfiguredInternetSpeed == 9636) )
	{
		if ( PC.Player != None )
		{
			switch (iNetSpeed)
			{
				case 0: PC.Player.ConfiguredInternetSpeed = 2600; break;
				case 1: PC.Player.ConfiguredInternetSpeed = 5000; break;
				case 2: PC.Player.ConfiguredInternetSpeed = 10000; break;
				case 3: PC.Player.ConfiguredInternetSpeed = 15000; break;
			}

			PC.Player.SaveConfig();
		}

		else
		{
			switch (iNetSpeed)
			{
				case 0: class'Player'.default.ConfiguredInternetSpeed = 2600; break;
				case 1: class'Player'.default.ConfiguredInternetSpeed = 5000; break;
				case 2: class'Player'.default.ConfiguredInternetSpeed = 10000; break;
				case 3: class'Player'.default.ConfiguredInternetSpeed = 15000; break;
			}

			class'Player'.static.StaticSaveConfig();
		}
	}

	if ( bStats != PC.bEnableStatsTracking )
	{
		PC.bEnableStatsTracking = bStats;
		bSave = True;
	}

	if ( sName != PC.StatsUserName )
	{
		PC.StatsUserName = sName;
		bSave = True;
	}

	if ( PC.StatsPassword != sPassword )
	{
		PC.StatsPassword = sPassword;
		bSave = True;
	}

	if ( PC.bDynamicNetSpeed != bDynNet )
	{
		PC.bDynamicNetSpeed = bDynNet;
		bSave = True;
	}


    if (bSave)
        PC.SaveConfig();
}

function ResetClicked()
{
    local class<Client> ViewportClass;
    local bool bTemp;
    local PlayerController PC;
    local int i;

    Super.ResetClicked();

	PC = PlayerOwner();
    ViewportClass = class<Client>(DynamicLoadObject(GetNativeClassName("Engine.Engine.ViewportManager"), class'Class'));

    ViewportClass.static.ResetConfig("UseSpeechRecognition");
    ViewportClass.static.ResetConfig("ScreenFlashes");
    class'XGame.xPlayer'.static.ResetConfig("bClassicTrans");

    PC.ResetConfig("bNeverSwitchOnPickup");
    PC.ResetConfig("bEnableDodging");
	PC.ResetConfig("bLandingShake");
	PC.ResetConfig("bAimingHelp");

    class'Engine.Pawn'.static.ResetConfig("bWeaponBob");
    class'Engine.GameInfo'.static.ResetConfig("GoreLevel");

    // Network
    class'Engine.Player'.static.ResetConfig("ConfiguredInternetSpeed");
    class'Engine.LevelInfo'.static.ResetConfig("bDesireSkinPreload");
    PC.ResetConfig("bEnableStatsTracking");
    PC.ClearConfig("StatsUserName");
    PC.ClearConfig("StatsPassword");
    PC.ResetConfig("bDynamicNetSpeed");

    bTemp = Controller.bCurMenuInitialized;
    Controller.bCurMenuInitialized = False;

    for (i = 0; i < Components.Length; i++)
        Components[i].LoadINI();

    Controller.bCurMenuInitialized = bTemp;
}

function InternalOnChange(GUIComponent Sender)
{
    local PlayerController PC;

	Super.InternalOnChange(Sender);
    if (GUIMenuOption(Sender) != None)
    {
        PC = PlayerOwner();

        switch (GUIMenuOption(Sender))
        {
            case ch_Speech:
            	bSpeechRec = ch_Speech.IsChecked();
            	break;

            case ch_AutoSwitch:
                bAuto = ch_AutoSwitch.IsChecked();
                break;

            case ch_WeaponBob:
                bBob = ch_WeaponBob.IsChecked();
                break;

            case co_GoreLevel:
                iGore = co_GoreLevel.GetIndex();
                break;

            case ch_Dodging:
                bDodge = ch_Dodging.IsChecked();
                break;

            case ch_AutoAim:
                bAim = ch_AutoAim.IsChecked();
                break;

            case ch_ClassicTrans:
                bClassicTrans = ch_ClassicTrans.IsChecked();
                break;

			case ch_LandShake:
				bLandShake = ch_LandShake.IsChecked();
				break;

		// Network
        	case ch_Precache:
        		bPrecache = ch_Precache.IsChecked();
        		break;

            case co_Netspeed:
                iNetSpeed = co_NetSpeed.GetIndex();
                break;

            case ed_Name:
                sName = ed_Name.GetText();
                break;

            case ed_Password:
                sPassword = ed_Password.GetText();
                break;

            case ch_TrackStats:
            	bStats = ch_TrackStats.IsChecked();
                UpdateStatsItems();
                break;

            case ch_DynNetspeed:
                bDynNet = ch_DynNetspeed.IsChecked();
                break;

        }
    }

    l_Warning.SetVisibility(!ValidStatConfig());
}

function bool ValidStatConfig()
{
    if(bStats)
    {
        if(Len(ed_Name.GetText()) < 4)
            return false;

        if(Len(ed_Password.GetText()) < 6)
            return false;
    }

    return true;
}

function bool OnViewStats(GUIComponent Sender)
{
    PlayerOwner().ConsoleCommand("start"@StatsURL);
    return true;
}

function UpdateStatsItems()
{
	if ( bStats )
	{
		EnableComponent(ed_Name);
		EnableComponent(ed_Password);
		EnableComponent(b_Stats);
	}
	else
	{
		DisableComponent(ed_Name);
		DisableComponent(ed_Password);
		DisableComponent(b_Stats);
	}

	l_Warning.SetVisibility(!ValidStatConfig());
}

defaultproperties
{
    Begin Object class=GUISectionBackground Name=GameBK1
		WinWidth=0.449609
		WinHeight=0.748936
		WinLeft=0.014649
		WinTop=0.033853
        RenderWeight=0.1001
        Caption="Gameplay"
    End Object
    i_BG1=GameBK1

    Begin Object class=GUISectionBackground Name=GameBK2
		WinWidth=0.496484
		WinHeight=0.199610
		WinLeft=0.486328
		WinTop=0.033853
        RenderWeight=0.1002
		Caption="Network"
    End Object
    i_BG2=GameBK2

    Begin Object class=GUISectionBackground Name=GameBK3
		WinWidth=0.496484
		WinHeight=0.308985
		WinLeft=0.486328
		WinTop=0.240491
        RenderWeight=0.1002
		Caption="Stats"
    End Object
    i_BG3=GameBK3

    Begin Object class=GUISectionBackground Name=GameBK4
		WinWidth=0.496484
		WinHeight=0.219141
		WinLeft=0.486328
		WinTop=0.559889
        RenderWeight=0.1002
		Caption="Misc"
    End Object
    i_BG4=GameBK4

    Begin Object class=GUISectionBackground Name=GameBK5
		WinWidth=0.965712
		WinHeight=0.200706
		WinLeft=0.017419
		WinTop=0.791393
        RenderWeight=0.1002
		Caption="Unique ID / Messages"
    End Object
    i_BG5=GameBK5

    Begin Object class=moCheckBox Name=GameWeaponBob
        WinWidth=0.400000
        WinLeft=0.050000
        WinTop=0.290780
        Caption="Weapon Bob"
        INIOption="@Internal"
        OnLoadINI=InternalOnLoadINI
        OnChange=InternalOnChange
        Hint="Prevent your weapon from bobbing up and down while moving"
        ComponentJustification=TXTA_Right
        LabelJustification=TXTA_Left
        ComponentWidth=-1
        CaptionWidth=0.8
        RenderWeight=1.04
        TabOrder=1
    End Object
    ch_WeaponBob=GameWeaponBob

    Begin Object class=moComboBox Name=GameGoreLevel
        WinWidth=0.400000
        WinLeft=0.050000
        WinTop=0.415521
        Caption="Gore Level"
        INIOption="@Internal"
        OnLoadINI=InternalOnLoadINI
        OnChange=InternalOnChange
        Hint="Configure the amount of blood and gore you see while playing the game"
        ComponentJustification=TXTA_Right
        LabelJustification=TXTA_Left
        ComponentWidth=-1
        CaptionWidth=0.5
        RenderWeight=1.04
        TabOrder=2
        bReadOnly=True
    End Object
    co_GoreLevel=GameGoreLevel

    Begin Object class=moCheckBox Name=GameDodging
        WinWidth=0.400000
        WinLeft=0.050000
        WinTop=0.541563
        Caption="Dodging"
        INIOption="@Internal"
        OnLoadINI=InternalOnLoadINI
        OnChange=InternalOnChange
        Hint="Turn this option off to disable special dodge moves."
        ComponentJustification=TXTA_Right
        LabelJustification=TXTA_Left
        ComponentWidth=-1
        CaptionWidth=0.8
        RenderWeight=1.04
        TabOrder=3
    End Object
    ch_Dodging=GameDodging

    Begin Object class=moCheckBox Name=GameAutoAim
        WinWidth=0.400000
        WinLeft=0.050000
        WinTop=0.692344
        Caption="Auto Aim"
        INIOption="@Internal"
        OnLoadINI=InternalOnLoadINI
        OnChange=InternalOnChange
        Hint="Enabling this option will activate computer-assisted aiming in single player games."
        ComponentJustification=TXTA_Right
        LabelJustification=TXTA_Left
        ComponentWidth=-1
        CaptionWidth=0.8
        RenderWeight=1.04
        TabOrder=4
    End Object
    ch_AutoAim=GameAutoAim

    Begin Object class=moCheckBox Name=GameClassicTrans
        Caption="High Beacon Trajectory"
        IniOption="@Internal"
        OnChange=InternalOnChange
        OnLoadINI=InternalOnLoadINI
        Hint="Enable to use traditional-style high translocator beacon toss trajectory"
        bSquare=True
        ComponentJustification=TXTA_Right
        LabelJustification=TXTA_Left
        ComponentWidth=-1
        CaptionWidth=0.8
        RenderWeight=1.04
        TabOrder=5
    End Object
    ch_ClassicTrans=GameClassicTrans

    Begin Object class=moCheckBox Name=WeaponAutoSwitch
        Caption="Weapon Switch On Pickup"
        Hint="Automatically change weapons when you pick up a better one."
        IniOption="@Internal"
        OnLoadINI=InternalOnLoadINI
        OnChange=InternalOnChange
        bSquare=true
        ComponentJustification=TXTA_Right
        LabelJustification=TXTA_Left
        ComponentWidth=-1
        CaptionWidth=0.8
        RenderWeight=1.04
        TabOrder=6
    End Object
    ch_AutoSwitch=WeaponAutoSwitch

	Begin Object class=moCheckBox Name=LandShaking
		WinWidth=0.266797
		WinLeft=0.705430
		WinTop=0.150261
		Caption="Landing Viewshake"
		OnLoadINI=InternalOnLoadINI
		OnChange=InternalOnChange
		INIOption="@Internal"
		Hint="Enable view shaking upon landing."
		CaptionWidth=0.9
		bSquare=True
		bHeightFromComponent=False
		ComponentJustification=TXTA_Right
		LabelJustification=TXTA_Left
		TabOrder=7
	End Object
	ch_LandShake=LandShaking

    // Network
    Begin Object class=moComboBox Name=OnlineNetSpeed
		WinWidth=0.419297
		WinLeft=0.528997
		WinTop=0.122944
        Caption="Connection"
        INIOption="@Internal"
        INIDefault="Cable Modem/DSL"
        OnLoadINI=InternalOnLoadINI
        OnChange=InternalOnChange
        Hint="How fast is your connection?"
        CaptionWidth=0.55
        ComponentJustification=TXTA_Left
        bReadOnly=true
        bHeightFromComponent=false
        TabOrder=8
    End Object
    co_Netspeed=OnlineNetSpeed

    Begin Object class=moCheckBox Name=NetworkDynamicNetspeed
		WinWidth=0.419297
		WinLeft=0.528997
		WinTop=0.166017
        Caption="Dynamic Netspeed"
        Hint="Netspeed is automatically adjusted based on the speed of your network connection"
        CaptionWidth=0.94
        bSquare=true
        ComponentJustification=TXTA_Left
        IniOption="@Internal"
        OnLoadINI=InternalOnLoadINI
        OnChange=InternalOnChange
        TabOrder=9
    End Object
    ch_DynNetspeed=NetworkDynamicNetspeed

    Begin Object class=moCheckBox Name=OnlineTrackStats
		WinWidth=0.170273
		WinLeft=0.642597
		WinTop=0.321733
        Caption="Track Stats"
        INIOption="@Internal"
        INIDefault="True"
        OnLoadINI=InternalOnLoadINI
        OnChange=InternalOnChange
        Hint="Enable this option to join the online ranking system."
        CaptionWidth=0.9
        bSquare=true
        ComponentJustification=TXTA_Left
        TabOrder=10
    End Object
    ch_TrackStats=OnlineTrackStats

    Begin Object class=moEditBox Name=OnlineStatsName
		WinWidth=0.419316
		WinLeft=0.524912
		WinTop=0.373349
        INIOption="@Internal"
        OnLoadINI=InternalOnLoadINI
        OnChange=InternalOnChange
        Caption="UserName"
        Hint="Please select a name to use for UT Stats!"
        CaptionWidth=0.4
        TabOrder=11
    End Object
    ed_Name=OnlineStatsName

    Begin Object class=moEditBox Name=OnlineStatsPW
		WinWidth=0.419316
		WinLeft=0.524912
		WinTop=0.430677
        Caption="Password"
        INIOption="@Internal"
        OnLoadINI=InternalOnLoadINI
        OnChange=InternalOnChange
        Hint="Please select a password that will secure your UT Stats!"
        CaptionWidth=0.4
        TabOrder=12
    End Object
    ed_Password=OnlineStatsPW

    Begin Object class=GUIButton Name=ViewOnlineStats
		WinWidth=0.166055
		WinHeight=0.05
		WinLeft=0.780383
		WinTop=0.469391
        Caption="View Stats"
        Hint="Click to launch the UT stats website."
        OnClick=OnViewStats
        TabOrder=13
    End Object
    b_Stats=ViewOnlineStats

    Begin Object Class=moCheckBox Name=SpeechRecognition
		WinWidth=0.403353
		WinLeft=0.540058
		WinTop=0.654527
    	Caption="Speech Recognition"
    	Hint="Enable speech recognition"
    	IniOption="@Internal"
    	OnLoadIni=InternalOnLoadIni
    	OnChange=InternalOnChange
    	ComponentJustification=TXTA_Left
    	CaptionWidth=0.9
    	TabOrder=14
		bBoundToParent=True
		bScaleToParent=True
    End Object
    ch_Speech=SpeechRecognition


    Begin Object class=moCheckBox Name=PrecacheSkins
		WinWidth=0.403353
		WinLeft=0.540058
		WinTop=0.707553
    	Caption="Preload all player skins"
    	Hint="Preloads all player skins, increasing level load time but reducing hitches during network games.  You must have at least 512 MB of system memory to use this option."
    	CaptionWidth=0.9
    	bSquare=True
    	ComponentJustification=TXTA_Left
    	IniOption="@Internal"
    	OnLoadINI=InternalOnLoadINI
    	OnChange=InternalOnChange
    	TabOrder=15
    End Object
    ch_Precache=PrecacheSkins

    Begin Object class=GUILabel Name=InvalidWarning
		WinWidth=0.887965
		WinHeight=0.058335
		WinLeft=0.057183
		WinTop=0.916002
        Caption="Your stats username or password is invalid.  Your username must be at least 4 characters long, and your password must be at least 6 characters long."
        TextAlign=TXTA_Center
        bMultiLine=True
        TextColor=(R=255,G=255,B=0,A=255)
        TextFont="UT2SmallFont"
    End Object
    l_Warning=InvalidWarning

    Begin Object class=GUILabel Name=EpicID
		WinWidth=0.888991
		WinHeight=0.067703
		WinLeft=0.054907
		WinTop=0.858220
        Caption="Your Unique id is:"
        TextAlign=TXTA_Center
        bMultiLine=false
        StyleName="TextLabel"
        RenderWeight=0.2
    End Object
    l_ID=EpicID

    NetSpeedText(0)="Modem"
    NetSpeedText(1)="ISDN"
    NetSpeedText(2)="Cable/ADSL"
    NetSpeedText(3)="LAN/T1"

// if _RO_
    StatsURL="http://www.killingfloorthegame.com/"
// else
//    StatsURL="http://ut2004stats.epicgames.com/"
// end if _RO_
    EpicIDMsg="Your Unique id is:"

    WinTop=0.15
    WinLeft=0
    WinWidth=1
    WinHeight=0.74
    bAcceptsInput=false

    PanelCaption="Game"
}
