class TSCLobbyMenu extends ScrnLobbyMenu
    dependson(TSCLobbyFooter);

#exec OBJ LOAD FILE=TSC_T.utx

var automated   GUIImage            TSCLogo;

var    automated    GUIButton            TeamButtons[2];
var automated   GUIImage            TeamLogos[2];
var automated   GUIImage            TeamTitles[2];

var automated   GUILabel            l_PlayerTeam;
var automated   GUILabel            l_HDmgCaption;
var automated   GUILabel            l_HDmgInfo;

var    localized string    ReadyString, UnreadyString;
var    localized string    strJoin, strJoined;
var    localized string    strCurrentWave, strWaves;
var    localized string    strTeam;
var    localized string    strNotTeamMember;

var    localized string    WaitingForMorePlayers;
var    localized string    TeamNames[2];

var    localized string    strHDmg;
var array<localized string> HDmgNames, HDmgInfo;


var array<FPlayerBoxEntry>        BluePlayerBoxes;


var TeamInfo MyTeam;

// stats
var int RedPlayers, BluePlayers;


event Timer()
{
    local TSCGameReplicationInfo GRI;
    local PlayerReplicationInfo PRI;


    PRI = PlayerOwner().PlayerReplicationInfo;
    if ( PRI != none ) {
        if ( PRI.bOnlySpectator ) {
            label_TimeOutCounter.Caption = "You are a spectator.";
            Return;
        }
    }



    GRI = TSCGameReplicationInfo(PlayerOwner().GameReplicationInfo);
    if ( GRI==None )
        label_TimeOutCounter.Caption = WaitingForServerStatus;
    else if ( GRI.Level.NetMode != NM_Standalone && (RedPlayers == 0 || BluePlayers == 0
                || RedPlayers+BluePlayers < GRI.MinNetPlayers) )
        label_TimeOutCounter.Caption = WaitingForMorePlayers;
    else if ( GRI.LobbyTimeout <= 0 )
        label_TimeOutCounter.Caption = WaitingForOtherPlayers;
    else
        label_TimeOutCounter.Caption = AutoCommence$":" @ GRI.LobbyTimeout;

    if ( GRI != None ) {
        l_HDmgCaption.Caption = strHDmg $ HdmgNames[GRI.HumanDamageMode];
        l_HDmgInfo.Caption = HdmgInfo[GRI.HumanDamageMode];
    }

    UpdateButtonCaptions();
}

function TeamChanged()
{
    local ScrnPlayerController PC;
    local string CN;

    PC = ScrnPlayerController(PlayerOwner());
    if ( PC == none )
        return;

    CN = PC.PlayerReplicationInfo.CharacterName;
    if ( !PC.ValidateCharacter(CN) )
        PC.ChangeCharacter(CN);
}

function bool OnTeamButtonClick(GUIComponent Sender)
{
    local KFPlayerController PC;
    local int TeamIndex;

    PC = KFPlayerController(PlayerOwner());
    if ( PC == none )
        return true;

    if ( Sender == TeamButtons[1] )
        TeamIndex = 1;
    else
        TeamIndex = 0;

    if ( PC.PlayerReplicationInfo == none || PC.PlayerReplicationInfo.Team == none
            || PC.PlayerReplicationInfo.Team.TeamIndex != TeamIndex )
    {
        if ( PC.PlayerReplicationInfo.bReadyToPlay ) {
            PC.ServerUnreadyPlayer();
            PC.PlayerReplicationInfo.bReadyToPlay = False;
        }
        PC.ServerChangeTeam(TeamIndex);
    }
    else {
        // if already in this team, then do ready/unready
        if ( PC.Level.NetMode == NM_Standalone || !PC.PlayerReplicationInfo.bReadyToPlay ) {
            PC.SendSelectedVeterancyToServer(true);

            //Set Ready
            PC.ServerRestartPlayer();
            PC.PlayerReplicationInfo.bReadyToPlay = True;
            if ( PC.Level.GRI.bMatchHasBegun )
                PC.ClientCloseMenu(true, false);
        }
        else {
            PC.ServerUnreadyPlayer();
            PC.PlayerReplicationInfo.bReadyToPlay = False;
        }
    }

    UpdateButtonCaptions();

    return true;
}

function UpdateButtonCaptions()
{
    local KFPlayerController PC;
    local int TeamIndex;

    PC = KFPlayerController(PlayerOwner());
    if ( PC == none )
        return;

    if ( PC.PlayerReplicationInfo == none || PC.PlayerReplicationInfo.Team == none ) {
        TeamButtons[0].Caption = strJoin;
        TeamButtons[1].Caption = strJoin;
    }
    else {
        TeamIndex = PC.PlayerReplicationInfo.Team.TeamIndex;
        TeamButtons[1-TeamIndex].Caption = strJoin;
        if ( PC.PlayerReplicationInfo.bReadyToPlay )
            TeamButtons[TeamIndex].Caption = UnreadyString;
        else
            TeamButtons[TeamIndex].Caption = ReadyString;
    }
}

function AddPlayer( KFPlayerReplicationInfo PRI, int Index, Canvas C )
{
    local float Top;
    local Material M;
    local ScrnBalance Mut;
    local String PlayerName;

    if( Index>=PlayerBoxes.Length )
    {
        Top = 0.025 + Index*0.045;
        PlayerBoxes.Length = Index+1;
        PlayerBoxes[Index].ReadyBox = new (None) Class'moCheckBox';
        PlayerBoxes[Index].ReadyBox.bValueReadOnly = true;
        PlayerBoxes[Index].ReadyBox.ComponentJustification = TXTA_Left;
        PlayerBoxes[Index].ReadyBox.CaptionWidth = 0.82;
        PlayerBoxes[Index].ReadyBox.LabelColor.B = 0;
        PlayerBoxes[Index].ReadyBox.WinTop = 0.0475+Top;
        PlayerBoxes[Index].ReadyBox.WinLeft = 0.125;
        PlayerBoxes[Index].ReadyBox.WinWidth = 0.40;
        PlayerBoxes[Index].ReadyBox.WinHeight = 0.045;
        PlayerBoxes[Index].ReadyBox.RenderWeight = 0.55;
        PlayerBoxes[Index].ReadyBox.bAcceptsInput = False;

        PlayerBoxes[Index].PlayerBox = new (None) Class'KFPlayerReadyBar';
        PlayerBoxes[Index].PlayerBox.WinTop = 0.04+Top;
        PlayerBoxes[Index].PlayerBox.WinLeft = 0.09;
        PlayerBoxes[Index].PlayerBox.WinWidth = 0.35;
        PlayerBoxes[Index].PlayerBox.WinHeight = 0.045;
        PlayerBoxes[Index].PlayerBox.RenderWeight = 0.35;

        PlayerBoxes[Index].PlayerPerk = new (None) Class'GUIImage';
        PlayerBoxes[Index].PlayerPerk.ImageStyle = ISTY_Justified;
        PlayerBoxes[Index].PlayerPerk.WinTop = 0.043+Top;
        PlayerBoxes[Index].PlayerPerk.WinLeft = 0.0918;
        PlayerBoxes[Index].PlayerPerk.WinWidth = 0.039;
        PlayerBoxes[Index].PlayerPerk.WinHeight = 0.039;
        PlayerBoxes[Index].PlayerPerk.RenderWeight = 0.56;

        PlayerBoxes[Index].PlayerVetLabel = new (None) Class'GUILabel';
        PlayerBoxes[Index].PlayerVetLabel.TextAlign = TXTA_Right;
        PlayerBoxes[Index].PlayerVetLabel.TextColor = Class'Canvas'.Static.MakeColor(19,19,19);
        PlayerBoxes[Index].PlayerVetLabel.TextFont = "UT2SmallFont";
        PlayerBoxes[Index].PlayerVetLabel.WinTop = 0.04+Top;
        PlayerBoxes[Index].PlayerVetLabel.WinLeft = 0.27907;
        PlayerBoxes[Index].PlayerVetLabel.WinWidth = 0.151172;
        PlayerBoxes[Index].PlayerVetLabel.WinHeight = 0.045;
        PlayerBoxes[Index].PlayerVetLabel.RenderWeight = 0.5;

        AppendComponent(PlayerBoxes[Index].ReadyBox, true);
        AppendComponent(PlayerBoxes[Index].PlayerBox, true);
        AppendComponent(PlayerBoxes[Index].PlayerPerk, true);
        AppendComponent(PlayerBoxes[Index].PlayerVetLabel, true);

        /*
        Top = (PlayerBoxes[Index].PlayerBox.WinTop+PlayerBoxes[Index].PlayerBox.WinHeight);
        if( !bMOTDHidden && Top>=ADBackground.WinTop )
        {
            ADBackground.WinTop = Top+0.01;
            if( (ADBackground.WinTop+ADBackground.WinHeight)>t_ChatBox.WinTop )
            {
                ADBackground.WinHeight = t_ChatBox.WinTop-ADBackground.WinTop;
                if( ADBackground.WinHeight<0.15 )
                {
                    RemoveComponent(ADBackground);
                    RemoveComponent(tb_ServerMOTD);
                    bMOTDHidden = true;
                }
            }
        }
        */
    }
    PlayerBoxes[Index].ReadyBox.Checked(PRI.bReadyToPlay);

    Mut = class'ScrnBalance'.default.Mut;
    if ( Mut != none ) {
        PlayerName = Mut.LeftCol(Mut.ColoredPlayerName(PRI), 20);
    }
    else {
        PlayerName = Left(PRI.PlayerName, 20);
    }
    PlayerBoxes[Index].ReadyBox.SetCaption(" "$PlayerName);

    if ( PRI.ClientVeteranSkill != none )
    {
        PlayerBoxes[Index].PlayerVetLabel.Caption = LvAbbrString @ PRI.ClientVeteranSkillLevel @ PRI.ClientVeteranSkill.default.VeterancyName;
        if( Class<SRVeterancyTypes>(PRI.ClientVeteranSkill)!=None )
        {
            Class<SRVeterancyTypes>(PRI.ClientVeteranSkill).Static.PreDrawPerk(C,PRI.ClientVeteranSkillLevel,PlayerBoxes[Index].PlayerPerk.Image,M);
            PlayerBoxes[Index].PlayerPerk.ImageColor = C.DrawColor;
        }
        else
        {
            PlayerBoxes[Index].PlayerPerk.Image = PRI.ClientVeteranSkill.default.OnHUDIcon;
            PlayerBoxes[Index].PlayerPerk.ImageColor = Class'Canvas'.Static.MakeColor(255,255,255);
        }
    }
    else
    {
        PlayerBoxes[Index].PlayerPerk.Image = None;
        PlayerBoxes[Index].PlayerVetLabel.Caption = "";
    }
    PlayerBoxes[Index].bIsEmpty = false;
}

function AddBluePlayer( KFPlayerReplicationInfo PRI, int Index, Canvas C )
{
    local float Top;
    local Material M;
    local ScrnBalance Mut;
    local String PlayerName;

    if( Index>=BluePlayerBoxes.Length )
    {
        Top = 0.025 + Index*0.045;
        BluePlayerBoxes.Length = Index+1;
        BluePlayerBoxes[Index].ReadyBox = new (None) Class'moCheckBox';
        BluePlayerBoxes[Index].ReadyBox.bValueReadOnly = true;
        BluePlayerBoxes[Index].ReadyBox.ComponentJustification = TXTA_Left;
        BluePlayerBoxes[Index].ReadyBox.CaptionWidth = 0.82;
        BluePlayerBoxes[Index].ReadyBox.LabelColor.B = 0;
        BluePlayerBoxes[Index].ReadyBox.WinTop = 0.0475+Top;
        BluePlayerBoxes[Index].ReadyBox.WinLeft = 0.545;
        BluePlayerBoxes[Index].ReadyBox.WinWidth = 0.4;
        BluePlayerBoxes[Index].ReadyBox.WinHeight = 0.045;
        BluePlayerBoxes[Index].ReadyBox.RenderWeight = 0.55;
        BluePlayerBoxes[Index].ReadyBox.bAcceptsInput = False;

        BluePlayerBoxes[Index].PlayerBox = new (None) Class'KFPlayerReadyBar';
        BluePlayerBoxes[Index].PlayerBox.WinTop = 0.04+Top;
        BluePlayerBoxes[Index].PlayerBox.WinLeft = 0.51;
        BluePlayerBoxes[Index].PlayerBox.WinWidth = 0.35;
        BluePlayerBoxes[Index].PlayerBox.WinHeight = 0.045;
        BluePlayerBoxes[Index].PlayerBox.RenderWeight = 0.35;

        BluePlayerBoxes[Index].PlayerPerk = new (None) Class'GUIImage';
        BluePlayerBoxes[Index].PlayerPerk.ImageStyle = ISTY_Justified;
        BluePlayerBoxes[Index].PlayerPerk.WinTop = 0.043+Top;
        BluePlayerBoxes[Index].PlayerPerk.WinLeft = 0.5118;
        BluePlayerBoxes[Index].PlayerPerk.WinWidth = 0.039;
        BluePlayerBoxes[Index].PlayerPerk.WinHeight = 0.039;
        BluePlayerBoxes[Index].PlayerPerk.RenderWeight = 0.56;

        BluePlayerBoxes[Index].PlayerVetLabel = new (None) Class'GUILabel';
        BluePlayerBoxes[Index].PlayerVetLabel.TextAlign = TXTA_Right;
        BluePlayerBoxes[Index].PlayerVetLabel.TextColor = Class'Canvas'.Static.MakeColor(19,19,19);
        BluePlayerBoxes[Index].PlayerVetLabel.TextFont = "UT2SmallFont";
        BluePlayerBoxes[Index].PlayerVetLabel.WinTop = 0.04+Top;
        BluePlayerBoxes[Index].PlayerVetLabel.WinLeft = 0.69907;
        BluePlayerBoxes[Index].PlayerVetLabel.WinWidth = 0.151172;
        BluePlayerBoxes[Index].PlayerVetLabel.WinHeight = 0.045;
        BluePlayerBoxes[Index].PlayerVetLabel.RenderWeight = 0.5;

        AppendComponent(BluePlayerBoxes[Index].ReadyBox, true);
        AppendComponent(BluePlayerBoxes[Index].PlayerBox, true);
        AppendComponent(BluePlayerBoxes[Index].PlayerPerk, true);
        AppendComponent(BluePlayerBoxes[Index].PlayerVetLabel, true);

        /*
        Top = (BluePlayerBoxes[Index].PlayerBox.WinTop+BluePlayerBoxes[Index].PlayerBox.WinHeight);
        if( !bMOTDHidden && Top>=ADBackground.WinTop )
        {
            ADBackground.WinTop = Top+0.01;
            if( (ADBackground.WinTop+ADBackground.WinHeight)>t_ChatBox.WinTop )
            {
                ADBackground.WinHeight = t_ChatBox.WinTop-ADBackground.WinTop;
                if( ADBackground.WinHeight<0.15 )
                {
                    RemoveComponent(ADBackground);
                    RemoveComponent(tb_ServerMOTD);
                    bMOTDHidden = true;
                }
            }
        }
        */
    }
    BluePlayerBoxes[Index].ReadyBox.Checked(PRI.bReadyToPlay);

    Mut = class'ScrnBalance'.default.Mut;
    if ( Mut != none ) {
        PlayerName = Mut.LeftCol(Mut.ColoredPlayerName(PRI), 20);
    }
    else {
        PlayerName = Left(PRI.PlayerName, 20);
    }
    BluePlayerBoxes[Index].ReadyBox.SetCaption(" "$PlayerName);

    if ( PRI.ClientVeteranSkill != none )
    {
        BluePlayerBoxes[Index].PlayerVetLabel.Caption = LvAbbrString @ PRI.ClientVeteranSkillLevel @ PRI.ClientVeteranSkill.default.VeterancyName;
        if( Class<SRVeterancyTypes>(PRI.ClientVeteranSkill)!=None )
        {
            Class<SRVeterancyTypes>(PRI.ClientVeteranSkill).Static.PreDrawPerk(C,PRI.ClientVeteranSkillLevel,BluePlayerBoxes[Index].PlayerPerk.Image,M);
            BluePlayerBoxes[Index].PlayerPerk.ImageColor = C.DrawColor;
        }
        else
        {
            BluePlayerBoxes[Index].PlayerPerk.Image = PRI.ClientVeteranSkill.default.OnHUDIcon;
            BluePlayerBoxes[Index].PlayerPerk.ImageColor = Class'Canvas'.Static.MakeColor(255,255,255);
        }
    }
    else
    {
        BluePlayerBoxes[Index].PlayerPerk.Image = None;
        BluePlayerBoxes[Index].PlayerVetLabel.Caption = "";
    }
    BluePlayerBoxes[Index].bIsEmpty = false;
}


function EmptyBluePlayers( int Index )
{
    while( Index<BluePlayerBoxes.Length && !BluePlayerBoxes[Index].bIsEmpty )
    {
        BluePlayerBoxes[Index].ReadyBox.Checked(False);
        BluePlayerBoxes[Index].PlayerPerk.Image = None;
        BluePlayerBoxes[Index].PlayerVetLabel.Caption = "";
        BluePlayerBoxes[Index].ReadyBox.SetCaption("");
        BluePlayerBoxes[Index].bIsEmpty = true;
        ++Index;
    }
}

function bool InternalOnPreDraw(Canvas C)
{
    local int i, r, b;
    //local string StoryString;
    local String SkillString;
    local TSCGameReplicationInfo GRI;
    local KFPlayerReplicationInfo KFPRI;
    local PlayerController PC;

    PC = PlayerOwner();

    if ( PC == none || PC.Level == none ) // Error?
        return false;

    if ( (PC.PlayerReplicationInfo != none && (!PC.PlayerReplicationInfo.bWaitingPlayer || PC.PlayerReplicationInfo.bOnlySpectator)) || PC.Outer.Name=='Entry' )
    {
        bAllowClose = true;
        PC.ClientCloseMenu(True,False);
        return false;
    }

    if (  PC.PlayerReplicationInfo != none && PC.PlayerReplicationInfo.Team != MyTeam ) {
        MyTeam = PC.PlayerReplicationInfo.Team;
        TeamChanged();
    }

    t_Footer.InternalOnPreDraw(C);

    GRI = TSCGameReplicationInfo(PC.GameReplicationInfo);

    if ( GRI != none ) {
        if ( GRI.bMatchHasBegun )
            WaveLabel.Caption = strCurrentWave @ string(GRI.WaveNumber + 1) $ "/" $ string(GRI.FinalWave)$"+"$ string(GRI.OvertimeWaves) $"OT+"$ string(GRI.SudDeathWaves)$"SD";
        else
            WaveLabel.Caption = string(GRI.FinalWave) @ strWaves @ "+" @ string(GRI.OvertimeWaves)$"OT"
                @ "+" @ string(GRI.SudDeathWaves)$"SD";
    }
    else {
        WaveLabel.Caption = "Wrong Game Type!"; // shouldn't happen
        return false;
    }
    C.DrawColor.A = 255;

    // First fill in non-ready players.
    RedPlayers = 0;
    BluePlayers = 0;
    for ( i = 0; i<GRI.PRIArray.Length; i++ ) {
        KFPRI = KFPlayerReplicationInfo(GRI.PRIArray[i]);
        if ( KFPRI == none || KFPRI.bOnlySpectator || KFPRI.bReadyToPlay || KFPRI.Team == none)
            continue;

        if ( KFPRI.Team.TeamIndex == 0 ) {
            RedPlayers++;
            if ( r < MaxPlayersOnList ) {
                AddPlayer(KFPRI, r++, C);
            }
        }
        else if ( KFPRI.Team.TeamIndex == 1 ) {
            BluePlayers++;
            if ( b < MaxPlayersOnList )
                AddBluePlayer(KFPRI, b++, C);
        }
    }

    // Then comes rest.
    for ( i = 0; i < GRI.PRIArray.Length; i++ ) {
        KFPRI = KFPlayerReplicationInfo(GRI.PRIArray[i]);
        if ( KFPRI == none || KFPRI.bOnlySpectator || !KFPRI.bReadyToPlay || KFPRI.Team == none)
            continue;

        if ( KFPRI.bReadyToPlay ) {
            if ( !bTimeoutTimeLogged ) {
                ActivateTimeoutTime = PC.Level.TimeSeconds;
                bTimeoutTimeLogged = true;
            }
        }

        if ( KFPRI.Team.TeamIndex == 0 ) {
            RedPlayers++;
            if ( r < MaxPlayersOnList )
                AddPlayer(KFPRI, r++, C);
        }
        else if ( KFPRI.Team.TeamIndex == 1 ) {
            BluePlayers++;
            if ( b < MaxPlayersOnList )
                AddBluePlayer(KFPRI, b++, C);
        }
    }

    if( r < MaxPlayersOnList )
        EmptyPlayers(r);
    if( b < MaxPlayersOnList )
        EmptyBluePlayers(b);

DoneIt:
    //StoryString = PC.Level.Description;

    if ( !bStoryBoxFilled )
    {
        l_StoryBox.LoadStoryText();
        bStoryBoxFilled = true;
    }

    CheckBotButtonAccess();

    if ( GRI.BaseDifficulty <= 1 )
        SkillString = BeginnerString;
    else if ( GRI.BaseDifficulty <= 2 )
        SkillString = NormalString;
    else if ( GRI.BaseDifficulty <= 4 )
        SkillString = HardString;
    else if ( GRI.BaseDifficulty <= 5 )
        SkillString = SuicidalString;
    else
        SkillString = HellOnEarthString;

    CurrentMapLabel.Caption = PC.Level.Title;
    DifficultyLabel.Caption = SkillString;

    if ( MyTeam != none ) {
        l_PlayerTeam.Caption = strTeam @ TeamNames[MyTeam.TeamIndex];
        l_PlayerTeam.TextColor = MyTeam.TeamColor;
    }
    else {
        l_PlayerTeam.Caption = strNotTeamMember;
        l_PlayerTeam.TextColor = class'Canvas'.static.MakeColor(192, 192, 192, 255);
    }

    return false;
}

defaultproperties
{
     Begin Object Class=GUIImage Name=TSCLogoLeft
         Image=Texture'TSC_T.Team.TSC_Left'
         ImageStyle=ISTY_Scaled
         ImageRenderStyle=MSTY_Normal
         IniOption="@Internal"
         WinTop=0.160000
         WinWidth=0.075650
         WinHeight=0.680000
     End Object
     TSCLogo=GUIImage'ScrnBalanceSrv.TSCLobbyMenu.TSCLogoLeft'

     Begin Object Class=GUIButton Name=RedButton
         Caption="Join"
         Hint="Click to join the British Squad, or Ready/Unredy, if already joined"
         WinTop=0.025000
         WinLeft=0.370000
         WinWidth=0.100000
         RenderWeight=2.000000
         TabOrder=0
         bBoundToParent=True
         ToolTip=None

         OnClick=TSCLobbyMenu.OnTeamButtonClick
         OnKeyEvent=ReadyButton.InternalOnKeyEvent
     End Object
     TeamButtons(0)=GUIButton'ScrnBalanceSrv.TSCLobbyMenu.RedButton'

     Begin Object Class=GUIButton Name=BlueButton
         Caption="Join"
         Hint="Click to join the Steampunk Squad, or Ready/Unredy, if already joined"
         WinTop=0.025000
         WinLeft=0.790000
         WinWidth=0.100000
         RenderWeight=2.000000
         TabOrder=1
         bBoundToParent=True
         ToolTip=None

         OnClick=TSCLobbyMenu.OnTeamButtonClick
         OnKeyEvent=ReadyButton.InternalOnKeyEvent
     End Object
     TeamButtons(1)=GUIButton'ScrnBalanceSrv.TSCLobbyMenu.BlueButton'

     Begin Object Class=GUIImage Name=RedLogo
         Image=Texture'TSC_T.Team.BritishLogo'
         ImageStyle=ISTY_Scaled
         ImageRenderStyle=MSTY_Normal
         IniOption="@Internal"
         WinWidth=0.090000
         WinHeight=0.160000
     End Object
     TeamLogos(0)=GUIImage'ScrnBalanceSrv.TSCLobbyMenu.RedLogo'

     Begin Object Class=GUIImage Name=BlueLogo
         Image=Texture'TSC_T.Team.SteampunkLogo'
         ImageStyle=ISTY_Scaled
         ImageRenderStyle=MSTY_Normal
         IniOption="@Internal"
         WinLeft=0.900000
         WinWidth=0.090000
         WinHeight=0.160000
     End Object
     TeamLogos(1)=GUIImage'ScrnBalanceSrv.TSCLobbyMenu.BlueLogo'

     Begin Object Class=GUIImage Name=RedTitle
         Image=Texture'TSC_T.Team.BritishSquad'
         ImageStyle=ISTY_Scaled
         ImageRenderStyle=MSTY_Normal
         IniOption="@Internal"
         WinLeft=0.100000
         WinWidth=0.240000
         WinHeight=0.060000
         RenderWeight=0.150000
     End Object
     TeamTitles(0)=GUIImage'ScrnBalanceSrv.TSCLobbyMenu.RedTitle'

     Begin Object Class=GUIImage Name=BlueTitle
         Image=Texture'TSC_T.Team.SteampunkSquad'
         ImageStyle=ISTY_Scaled
         ImageRenderStyle=MSTY_Normal
         IniOption="@Internal"
         WinLeft=0.511800
         WinWidth=0.240000
         WinHeight=0.060000
         RenderWeight=0.150000
     End Object
     TeamTitles(1)=GUIImage'ScrnBalanceSrv.TSCLobbyMenu.BlueTitle'

     Begin Object Class=GUILabel Name=PlayerTeam
         Caption="Select a team"
         TextColor=(B=192,G=192,R=192)
         VertAlign=TXTA_Center
         FontScale=FNS_Small
         WinTop=0.660000
         WinLeft=0.703000
         WinWidth=0.230000
         WinHeight=0.035000
         RenderWeight=0.950000
     End Object
     l_PlayerTeam=GUILabel'ScrnBalanceSrv.TSCLobbyMenu.PlayerTeam'

     Begin Object Class=GUILabel Name=HumanDamageL
         Caption="Human Damage: Normal"
         TextColor=(B=158,G=176,R=175)
         FontScale=FNS_Small
         WinTop=0.825000
         WinLeft=0.655000
         WinWidth=0.330000
         WinHeight=0.035000
         RenderWeight=0.950000
     End Object
     l_HDmgCaption=GUILabel'ScrnBalanceSrv.TSCLobbyMenu.HumanDamageL'

     Begin Object Class=GUILabel Name=HumanDamageInfoL
         Caption="Full protection within own Base."
         TextColor=(B=90,G=115,R=115)
         bMultiLine=True
         FontScale=FNS_Small
         WinTop=0.850000
         WinLeft=0.655000
         WinWidth=0.330000
         WinHeight=0.070000
         RenderWeight=0.950000
     End Object
     l_HDmgInfo=GUILabel'ScrnBalanceSrv.TSCLobbyMenu.HumanDamageInfoL'

     ReadyString="Ready"
     UnreadyString="Unready"
     strJoin="Join"
     strJoined="Joined"
     strCurrentWave="Current Wave:"
     strWaves="waves"
     strTeam="Team:"
     strNotTeamMember="Select team..."
     WaitingForMorePlayers="Waiting for more players to join in..."
     TeamNames(0)="British"
     TeamNames(1)="Steampunk"
     strHDmg="Human Damage: "
     HDmgNames(0)="OFF"
     HDmgNames(1)="No Friendly Fire"
     HDmgNames(2)="PvP, No Friendly Fire."
     HDmgNames(3)="Normal"
     HDmgNames(4)="PvP"
     HDmgNames(5)="Always"
     HDmgInfo(0)="Players can't hurt each other at all."
     HDmgInfo(1)="Teammates can't hurt each other."
     HDmgInfo(2)="Players can hurt enemies only."
     HDmgInfo(3)="Full protection within own Base."
     HDmgInfo(4)="Base protects from Friendly Fire only."
     HDmgInfo(5)="Base does not protect from Human Damage."
     MaxPlayersOnList=11
     Begin Object Class=SRLobbyChat Name=ChatBox
         OnCreateComponent=ChatBox.InternalOnCreateComponent
         WinTop=0.807600
         WinLeft=0.016090
         WinWidth=0.971410
         WinHeight=0.100000
         RenderWeight=1.000000
         TabOrder=1
         OnPreDraw=ChatBox.FloatingPreDraw
         OnRendered=ChatBox.FloatingRendered
         OnHover=ChatBox.FloatingHover
         OnMousePressed=ChatBox.FloatingMousePressed
         OnMouseRelease=ChatBox.FloatingMouseRelease
     End Object
     t_ChatBox=SRLobbyChat'ScrnBalanceSrv.TSCLobbyMenu.ChatBox'

     Begin Object Class=KFMapStoryLabel Name=LobbyMapStoryBox
         OnCreateComponent=LobbyMapStoryBox.InternalOnCreateComponent
         bVisible=False
     End Object
     l_StoryBox=KFMapStoryLabel'ScrnBalanceSrv.TSCLobbyMenu.LobbyMapStoryBox'

     Begin Object Class=AltSectionBackground Name=StoryBoxBackground
         bVisible=False
         OnPreDraw=StoryBoxBackground.InternalPreDraw
     End Object
     StoryBoxBG=AltSectionBackground'ScrnBalanceSrv.TSCLobbyMenu.StoryBoxBackground'

     Begin Object Class=AltSectionBackground Name=GameInfoB
         bVisible=False
         OnPreDraw=GameInfoB.InternalPreDraw
     End Object
     GameInfoBG=AltSectionBackground'ScrnBalanceSrv.TSCLobbyMenu.GameInfoB'

     Begin Object Class=GUILabel Name=CurrentMapL
         Caption="LAlalala Map"
         TextColor=(B=158,G=176,R=175)
         WinTop=0.750000
         WinLeft=0.655000
         WinWidth=0.330000
         WinHeight=0.035000
         RenderWeight=0.900000
     End Object
     CurrentMapLabel=GUILabel'ScrnBalanceSrv.TSCLobbyMenu.CurrentMapL'

     Begin Object Class=GUILabel Name=DifficultyL
         Caption="Difficulty"
         TextColor=(B=158,G=176,R=175)
         WinTop=0.775000
         WinLeft=0.655000
         WinWidth=0.330000
         WinHeight=0.035000
         RenderWeight=0.900000
     End Object
     DifficultyLabel=GUILabel'ScrnBalanceSrv.TSCLobbyMenu.DifficultyL'

     Begin Object Class=GUIImage Name=WaveB
         bVisible=False
     End Object
     WaveBG=GUIImage'ScrnBalanceSrv.TSCLobbyMenu.WaveB'

     Begin Object Class=GUILabel Name=WaveL
         Caption="1/4"
         TextColor=(B=158,G=176,R=175)
         FontScale=FNS_Small
         WinTop=0.800000
         WinLeft=0.655000
         WinWidth=0.330000
         WinHeight=0.035000
         RenderWeight=0.950000
     End Object
     WaveLabel=GUILabel'ScrnBalanceSrv.TSCLobbyMenu.WaveL'

     DifficultyString="Difficulty:"
     Begin Object Class=GUILabel Name=TimeOutCounter
         Caption="Game will auto-commence in: "
         TextColor=(B=158,G=176,R=175)
         WinTop=0.960000
         WinLeft=0.005000
         WinWidth=0.995000
         WinHeight=0.033203
         TabOrder=6
     End Object
     label_TimeOutCounter=GUILabel'ScrnBalanceSrv.TSCLobbyFooter.TimeOutCounter'

     Begin Object Class=GUILabel Name=PerkClickArea
         WinTop=0.567412
         WinLeft=0.511800
         WinWidth=0.122478
         WinHeight=0.332588
         bAcceptsInput=True
         OnClickSound=CS_Click
         OnClick=LobbyMenu.ShowPerkMenu
     End Object
     PerkClickLabel=GUILabel'ScrnBalanceSrv.TSCLobbyMenu.PerkClickArea'

     Begin Object Class=GUISectionBackground Name=BGPerk
         bFillClient=True
         Caption="Player Info"
         WinTop=0.567412
         WinLeft=0.634278
         WinWidth=0.355722
         WinHeight=0.140000
         OnPreDraw=BGPerk.InternalPreDraw
     End Object
     i_BGPerk=GUISectionBackground'ScrnBalanceSrv.TSCLobbyMenu.BGPerk'

     Begin Object Class=GUISectionBackground Name=BGPerkEffects
         bFillClient=True
         Caption="Game Info"
         WinTop=0.707412
         WinLeft=0.634278
         WinWidth=0.355722
         WinHeight=0.192588
         OnPreDraw=BGPerkEffects.InternalPreDraw
     End Object
     i_BGPerkEffects=GUISectionBackground'ScrnBalanceSrv.TSCLobbyMenu.BGPerkEffects'

     Begin Object Class=GUIScrollTextBox Name=PerkEffectsScroll
         OnCreateComponent=PerkEffectsScroll.InternalOnCreateComponent
         bVisible=False
     End Object
     lb_PerkEffects=GUIScrollTextBox'ScrnBalanceSrv.TSCLobbyMenu.PerkEffectsScroll'

     Begin Object Class=GUIImage Name=PlayerPortrait
         Image=Texture'InterfaceArt_tex.Menu.changeme_texture'
         ImageStyle=ISTY_Scaled
         ImageRenderStyle=MSTY_Normal
         IniOption="@Internal"
         WinTop=0.607517
         WinLeft=0.515260
         WinWidth=0.115541
         WinHeight=0.286159
         RenderWeight=0.300000
     End Object
     i_Portrait=GUIImage'ScrnBalanceSrv.TSCLobbyMenu.PlayerPortrait'

     Begin Object Class=GUISectionBackground Name=PlayerPortraitB
         WinTop=0.567412
         WinLeft=0.511800
         WinWidth=0.122478
         WinHeight=0.332588
         OnPreDraw=PlayerPortraitB.InternalPreDraw
     End Object
     PlayerPortraitBG=GUISectionBackground'ScrnBalanceSrv.TSCLobbyMenu.PlayerPortraitB'

     Begin Object Class=GUISectionBackground Name=ADBG
         Caption="Server Info"
         WinTop=0.567412
         WinLeft=0.090000
         WinWidth=0.380000
         WinHeight=0.250000
         RenderWeight=0.300000
         OnPreDraw=ADBG.InternalPreDraw
     End Object
     ADBackground=GUISectionBackground'ScrnBalanceSrv.TSCLobbyMenu.ADBG'

     Begin Object Class=TSCLobbyFooter Name=BuyFooter
         RenderWeight=0.300000
         TabOrder=8
         bBoundToParent=False
         bScaleToParent=False
         OnPreDraw=BuyFooter.InternalOnPreDraw
     End Object
     t_Footer=TSCLobbyFooter'ScrnBalanceSrv.TSCLobbyMenu.BuyFooter'

}
