class HideLobbyMenu extends UT2k4MainPage;


struct FPlayerBoxEntry
{
  var moCheckBox ReadyBox;
  var KFPlayerReadyBar PlayerBox;
  var GUIImage PlayerPerk;
  var GUILabel PlayerVetLabel;
  var bool bIsEmpty;
};
var array<FPlayerBoxEntry> PlayerBoxes;

var const int MaxPlayersOnList;
var const string str_Beginner, str_Normal, str_Hard, str_Sui, str_HOE;

var const string str_LvlAbbr;
var const string str_CurrentMap;
var const string str_Difficulty;

var const string SelectPerkInformationString;
var const string PerksDisabledString;

var bool bShowProfilePage;

var automated HideLobbyChat t_ChatBox;
var automated KFMapStoryLabel l_StoryBox;
var automated AltSectionBackground StoryBoxBG;

var automated AltSectionBackground GameInfoBG;
var automated GUILabel CurrentMapLabel;
var automated GUILabel DifficultyLabel;

var automated GUIImage WaveBG;
var automated GUILabel WaveLabel;

var automated GUILabel label_TimeOutCounter;
var automated GUILabel PerkClickLabel;

var bool bStoryBoxFilled;
var bool bAllowClose;

// Perks / Profile
var() string sChar, sCharD;
var() int    nFOV;
var() xUtil.PlayerRecord PlayerRec;

var automated GUISectionBackground  i_BGPerks;
var automated GUISectionBackground  i_BGPerk;

var automated GUISectionBackground  i_BGPerkEffects;
var automated GUIScrollTextBox    lb_PerkEffects;

var automated GUIImage        i_Portrait;
var automated GUISectionBackground  PlayerPortraitBG;

var float IconBorder;         // Percent of Height to leave blank inside Icon Background
var float ItemBorder;         // Percent of Height to leave blank inside Item Background
var float ItemSpacing;        // Number of Pixels between Items
var float ProgressBarHeight;  // Percent of Height to make Progress Bar's Height
var float TextTopOffset;      // Percent of Height to off Progress String from top of Progress Bar(typically negative)
var float IconToInfoSpacing;  // Percent of Width to offset Info from right side of Icon

var texture ItemBackground;
var texture ProgressBarBackground;
var texture ProgressBarForeground;
var texture PerkBackground;
var texture InfoBackground;

//var bool bAdminUse;  // If you're not an admin, gtfo!

var int  ActivateTimeoutTime;    // When was the lobby timeout turned on?
var bool bTimeoutTimeLogged;     // Was it already logged once?
var bool bTimedOut;              // Have we timed out out successfully?

var const string WaitingForServerStatus;
var const string WaitingForOtherPlayers;
var const string AutoCommence;

var bool bShouldUpdateVeterancy;
var class<KFVeterancyTypes> CurrentVeterancy;
var int CurrentVeterancyLevel;


function InitComponent(GUIController MyC, GUIComponent MyO)
{
  super(UT2k4MainPage).InitComponent(MyC, MyO);

  i_Portrait.WinTop = PlayerPortraitBG.ActualTop() + 30;
  i_Portrait.WinHeight = PlayerPortraitBG.ActualHeight() - 36;

  t_ChatBox.FocusInstead = PerkClickLabel;
}


// if we don't reset persistence, playerboxes will continue to pile
function bool NotifyLevelChange()
{
	bPersistent = false;
	bAllowClose = true;
	Controller.CloseMenu(true);
	return true;
}


function bool InternalOnKeyEvent(out byte Key, out byte State, float delta)
{
  local int i;
  local bool bVoiceChatKey;
  local array<string> BindKeyNames, LocalizedBindKeyNames;

  Controller.GetAssignedKeys("VoiceTalk", BindKeyNames, LocalizedBindKeyNames);

  for (i = 0; i < BindKeyNames.Length; i++)
  {
    if (Mid(GetEnum(enum'EInputKey', Key), 3) ~= BindKeyNames[i])
    {
      bVoiceChatKey = true;
      break;
    }
  }

  if (bVoiceChatKey)
  {
    if (state == 1 || state == 2)
    {
      if (PlayerOwner() != none)
      {
        PlayerOwner().bVoiceTalk = 1;
      }
    }
    else
    {
      if (PlayerOwner() != none)
      {
        PlayerOwner().bVoiceTalk = 0;
        return false;
      }
    }

    return true;
  }

  return false;
}


function ClearChatBox()
{
  t_ChatBox.lb_Chat.SetContent("");
}


function TimedOut()
{
  bTimedOut = true;
  PlayerOwner().ServerRestartPlayer();
  bAllowClose = true;
}


function bool InternalOnPreDraw(Canvas C)
{
  local int i, j;
  local string StoryString;
  local String SkillString;
  local KFGameReplicationInfo KFGRI;
  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;
  }

  t_Footer.InternalOnPreDraw(C);
  KFGRI = KFGameReplicationInfo(PC.GameReplicationInfo);

  if (KFGRI != none)
  {
    WaveLabel.Caption = string(KFGRI.WaveNumber + 1) $ "/" $ string(KFGRI.FinalWave);
  }
  else
  {
    WaveLabel.Caption = "?/?";
    return false;
  }
  C.DrawColor.A = 255;

  // CHECK ME LATER
  if (KFPlayerController(PC) != none && bShouldUpdateVeterancy)
  {
    if (KFPlayerController(PC).SelectedVeterancy == none)
    {
      bShowProfilePage = true;

      if (PC.SteamStatsAndAchievements == none)
      {
        if (PC.Level.NetMode != NM_Client)
        {
          PC.SteamStatsAndAchievements = PC.Spawn(PC.default.SteamStatsAndAchievementsClass, PC);
          if (!PC.SteamStatsAndAchievements.Initialize(PC))
          {
            Controller.OpenMenu(Controller.QuestionMenuClass);
            GUIQuestionPage(Controller.TopPage()).SetupQuestion(class'KFMainMenu'.default.UnknownSteamErrorText, QBTN_Ok, QBTN_Ok);
            PC.SteamStatsAndAchievements.Destroy();
            PC.SteamStatsAndAchievements = none;
          }
          else
          {
            PC.SteamStatsAndAchievements.OnDataInitialized = OnSteamStatsAndAchievementsReady;
          }
        }

        bShowProfilePage = false;
      }
      else if (!PC.SteamStatsAndAchievements.bInitialized)
      {
        PC.SteamStatsAndAchievements.OnDataInitialized = OnSteamStatsAndAchievementsReady;
        PC.SteamStatsAndAchievements.GetStatsAndAchievements();
        bShowProfilePage = false;
      }

      if (KFSteamStatsAndAchievements(PC.SteamStatsAndAchievements) != none)
      {
        for (i = 0; i < class'KFGameType'.default.LoadedSkills.Length; i++)
        {
          if (KFSteamStatsAndAchievements(PC.SteamStatsAndAchievements).GetPerkProgress(i) < 0.0)
          {
            PC.SteamStatsAndAchievements.OnDataInitialized = OnSteamStatsAndAchievementsReady;
            PC.SteamStatsAndAchievements.GetStatsAndAchievements();
            bShowProfilePage = false;
          }
        }
      }

      if (bShowProfilePage)
      {
        OnSteamStatsAndAchievementsReady();
      }

      bShouldUpdateVeterancy = false;
    }
    else if (PC.SteamStatsAndAchievements != none && PC.SteamStatsAndAchievements.bInitialized)
    {
      KFPlayerController(PC).SendSelectedVeterancyToServer();
      bShouldUpdateVeterancy = false;
    }
  }

  // First fill in non-ready players.
  for (i = 0; i < KFGRI.PRIArray.Length; i++)
  {
    if (!bValidPRI(KFGRI.PRIArray[i]) || KFGRI.PRIArray[i].bReadyToPlay)
      continue;

    // start from 0
    AddPlayer(KFPlayerReplicationInfo(KFGRI.PRIArray[i]), j, C);
    if (++j >= MaxPlayersOnList)
      GoTo'DoneIt';
  }

  // Then comes rest.
  for (i = 0; i < KFGRI.PRIArray.Length; i++)
  {
    if (!bValidPRI(KFGRI.PRIArray[i]) || !KFGRI.PRIArray[i].bReadyToPlay)
      continue;

    if (KFGRI.PRIArray[i].bReadyToPlay)
    {
      if (!bTimeoutTimeLogged)
      {
        ActivateTimeoutTime = PC.Level.TimeSeconds;
        bTimeoutTimeLogged = true;
      }
    }
    // continue from last idx
    AddPlayer(KFPlayerReplicationInfo(KFGRI.PRIArray[i]), j, C);
    if (++j >= MaxPlayersOnList)
      GoTo'DoneIt';
  }

  if (j < MaxPlayersOnList)
    EmptyPlayers(j);

DoneIt:
  StoryString = PC.Level.Description;

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

  if (KFGRI.BaseDifficulty <= 1)
    SkillString = str_Beginner;
  else if (KFGRI.BaseDifficulty <= 2)
    SkillString = str_Normal;
  else if (KFGRI.BaseDifficulty <= 4)
    SkillString = str_Hard;
  else if (KFGRI.BaseDifficulty <= 5)
    SkillString = str_Sui;
  else
    SkillString = str_HOE;

  CurrentMapLabel.Caption = str_CurrentMap @ PC.Level.Title;
  DifficultyLabel.Caption = str_Difficulty @ SkillString;

  return false;
}


// filter none, spectators, non-KFPRI ones
final private function bool bValidPRI(PlayerReplicationInfo PRI)
{
  if (PRI == none || PRI.bOnlySpectator || KFPlayerReplicationInfo(PRI) == none)
    return false;
  else
    return true;
}


final private function AddPlayer(KFPlayerReplicationInfo PRI, int Index, Canvas C)
{
  local float Top;

  if (Index >= PlayerBoxes.Length)
  {
    Top = Index * 0.045;
    PlayerBoxes.Length = Index + 1;
    // create GUIComponents and set defaults
    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.075;
    PlayerBoxes[Index].ReadyBox.WinWidth = 0.4;
    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.04;
    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.0418;
    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.22907;
    PlayerBoxes[Index].PlayerVetLabel.WinWidth = 0.151172;
    PlayerBoxes[Index].PlayerVetLabel.WinHeight = 0.045;
    PlayerBoxes[Index].PlayerVetLabel.RenderWeight = 0.5;

    // finally add the GUIComponents
    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);
  }
  PlayerBoxes[Index].ReadyBox.Checked(PRI.bReadyToPlay);
  PlayerBoxes[Index].ReadyBox.SetCaption(" "$Left(PRI.PlayerName,20));

  if (PRI.ClientVeteranSkill != none)
  {
    PlayerBoxes[Index].PlayerVetLabel.Caption = str_LvlAbbr @ PRI.ClientVeteranSkillLevel @ PRI.ClientVeteranSkill.default.VeterancyName;

    PlayerBoxes[Index].PlayerPerk.Image = PRI.ClientVeteranSkill.default.OnHUDIcon;
    PlayerBoxes[Index].PlayerPerk.ImageColor = class'Canvas'.Static.MakeColor(255, 255, 255);
  }
  else
  {
    // REVERT!
    PlayerBoxes[Index].PlayerPerk.Image = none;
    PlayerBoxes[Index].PlayerVetLabel.Caption = "";

    // // try KFPC
    // PlayerBoxes[Index].PlayerVetLabel.Caption = str_LvlAbbr @ PRI.ClientVeteranSkillLevel @ PRI.ClientVeteranSkill.default.VeterancyName;

    // PlayerBoxes[Index].PlayerPerk.Image = KFPlayerController(PRI.Owner).SelectedVeterancy.default.OnHUDIcon;
    // PlayerBoxes[Index].PlayerPerk.ImageColor = class'Canvas'.Static.MakeColor(255, 255, 255);
  }
  PlayerBoxes[Index].bIsEmpty = false;
}


final private function EmptyPlayers(int Index)
{
  local int i;

	while (Index < PlayerBoxes.Length && !PlayerBoxes[Index].bIsEmpty)
	{
		PlayerBoxes[Index].ReadyBox.Checked(false);
		PlayerBoxes[Index].PlayerPerk.Image = none;
		PlayerBoxes[Index].PlayerVetLabel.Caption = "";
		PlayerBoxes[Index].ReadyBox.SetCaption("");
		PlayerBoxes[Index].bIsEmpty = true;
		++Index;
	}

  for (i = 0; i < PlayerBoxes.Length; i++)
  {
    if (PlayerBoxes[i].bIsEmpty)
    {
      // remove GUIComponents
      RemoveComponent(PlayerBoxes[i].ReadyBox, false);
      RemoveComponent(PlayerBoxes[i].PlayerBox, false);
      RemoveComponent(PlayerBoxes[i].PlayerPerk, false);
      RemoveComponent(PlayerBoxes[i].PlayerVetLabel, false);
      // remove refs
      PlayerBoxes[i].ReadyBox = none;
      PlayerBoxes[i].PlayerBox = none;
      PlayerBoxes[i].PlayerPerk = none;
      PlayerBoxes[i].PlayerVetLabel = none;
      // remove from array
      PlayerBoxes.remove(i, 1);
      log(">>> HideLobbyMenu: EmptyPlayers executed.");
    }
  }
}


function bool StopClose(optional bool bCancelled)
{
  bStoryBoxFilled = false;

  ClearChatBox();

  // this is for the OnCanClose delegate
  // can't close now unless done by call to CloseAll,
  // or the bool has been set to true by LobbyFooter
  return false;
}


// Called when the Menu Owner is opened
event Opened(GUIComponent Sender)
{
  bShouldUpdateVeterancy = true;
  SetTimer(1, true);
}


function InternalOnClosed(bool bCancelled)
{
  if (PlayerOwner() != none)
  {
    PlayerOwner().Advertising_ExitZone();
  }
}


event Timer()
{
  local KFGameReplicationInfo KF;

  if (PlayerOwner().PlayerReplicationInfo == none)
    return;

  if (PlayerOwner().PlayerReplicationInfo.bOnlySpectator)
  {
    label_TimeOutCounter.caption = "You are a spectator.";
    return;
  }

  KF = KFGameReplicationInfo(PlayerOwner().GameReplicationInfo);

  if (KF == none)
  {
    label_TimeOutCounter.caption = WaitingForServerStatus;
  }
  else if (KF.LobbyTimeout <= 0)
  {
    label_TimeOutCounter.caption = WaitingForOtherPlayers;
  }
  else
  {
    label_TimeOutCounter.caption = AutoCommence$":" @ KF.LobbyTimeout;
  }
}


final private function DrawPerk(Canvas Canvas)
{
  local float X, Y, Width, Height;
  local int LevelIndex, CurIndex;
  local float TempX, TempY;
  local float TempWidth, TempHeight;
  local float IconSize, ProgressBarWidth;
  local string PerkName, PerkLevelString;
  local KFPlayerReplicationInfo KFPRI;
  local Material M;

  DrawPortrait();

  KFPRI = KFPlayerReplicationInfo(PlayerOwner().PlayerReplicationInfo);

  if (KFPRI == none || KFPRI.ClientVeteranSkill == None)
	{
		if (CurrentVeterancyLevel != 255)
		{
			CurrentVeterancyLevel = 255;
			lb_PerkEffects.SetContent("None perk active");
		}
		return;
	}

  CurIndex = KFPlayerController(PlayerOwner()).SelectedVeterancy.default.PerkIndex;
  LevelIndex = KFSteamStatsAndAchievements(PlayerOwner().SteamStatsAndAchievements).PerkHighestLevelAvailable(CurIndex);
  PerkName = KFPlayerController(PlayerOwner()).SelectedVeterancy.default.VeterancyName;
  PerkLevelString = str_LvlAbbr @ LevelIndex;

  //Get the position size etc in pixels
  X = (i_BGPerk.WinLeft + 0.003) * Canvas.ClipX;
  Y = (i_BGPerk.WinTop + 0.040) * Canvas.ClipY;

  Width = (i_BGPerk.WinWidth - 0.006) * Canvas.ClipX;
  Height = (i_BGPerk.WinHeight - 0.043) * Canvas.ClipY;

  // Offset for the Background
  TempX = X;
  TempY = Y;

  // Initialize the Canvas
  Canvas.Style = 1;
  Canvas.Font = class'ROHUD'.Static.GetSmallMenuFont(Canvas);
  Canvas.SetDrawColor(255, 255, 255, 255);

  // Draw Item Background
  Canvas.SetPos(TempX, TempY);
  //Canvas.DrawTileStretched(ItemBackground, Width, Height);

  // Offset and Calculate Icon's Size
  TempX += ItemBorder * Height;
  TempY += ItemBorder * Height;
  IconSize = Height - (ItemBorder * 2.0 * Height);

  // Draw Icon
  Canvas.SetPos(TempX, TempY);
  M = class'KFGameType'.default.LoadedSkills[CurIndex].default.OnHUDIcon;
  Canvas.DrawTile(M, IconSize, IconSize, 0, 0, M.MaterialUSize(), M.MaterialVSize());

  TempX += IconSize + (IconToInfoSpacing * Width);
  TempY += TextTopOffset * Height;

  ProgressBarWidth = Width - (TempX - X) - (IconToInfoSpacing * Width);

  // Select Text Color
  Canvas.SetDrawColor(255, 255, 255, 255);

  // Draw the Perk's Level name
  Canvas.StrLen(PerkName, TempWidth, TempHeight);
  Canvas.SetPos(TempX, TempY);
  Canvas.DrawText(PerkName);

  // Draw the Perk's Level
  if (PerkLevelString != "")
  {
    Canvas.StrLen(PerkLevelString, TempWidth, TempHeight);
    Canvas.SetPos(TempX + ProgressBarWidth - TempWidth, TempY);
    Canvas.DrawText(PerkLevelString);
  }

  TempY += TempHeight + (0.01 * Height);

  if (CurrentVeterancy != KFPRI.ClientVeteranSkill || CurrentVeterancyLevel != LevelIndex)
  {
    CurrentVeterancy = KFPRI.ClientVeteranSkill;
    CurrentVeterancyLevel = LevelIndex;
    lb_PerkEffects.SetContent(KFPRI.ClientVeteranSkill.default.LevelEffects[LevelIndex]);
  }
}


final private function DrawPortrait()
{
  if (PlayerOwner().PlayerReplicationInfo != none)
    sChar = PlayerOwner().PlayerReplicationInfo.CharacterName;
  else
    sChar = PlayerOwner().GetUrlOption("Character");

  if (sCharD != sChar)
  {
    sCharD = sChar;
    SetPlayerRec();
  }
}


final private function SetPlayerRec()
{
  PlayerRec = Class'xUtil'.Static.FindPlayerRecord(sChar);
  i_Portrait.Image = PlayerRec.Portrait;
}


final private function bool ShowPerkMenu(GUIComponent Sender)
{
  if (PlayerOwner() != none)
  {
    PlayerOwner().ClientOpenMenu("KFGUI.KFProfilePage", false);
  }

  return true;
}


final private function OnSteamStatsAndAchievementsReady()
{
  Controller.OpenMenu("KFGUI.KFProfilePage");

  Controller.OpenMenu(Controller.QuestionMenuClass);
  GUIQuestionPage(Controller.TopPage()).SetupQuestion(SelectPerkInformationString, QBTN_Ok, QBTN_Ok);
}


//=============================================================================
//                             DEFAULTPROPERTIES
//=============================================================================

defaultproperties
{
     MaxPlayersOnList=18
     str_Beginner="Beginner"
     STR_Normal="Normal"
     str_Hard="Hard"
     str_Sui="Suicidal"
     str_HOE="Hell on Earth"
     str_LvlAbbr="Lv"
     str_CurrentMap="Current Map:"
     str_Difficulty="Difficulty Level:"
     SelectPerkInformationString="Perks enhance certain abilities of your character.|There are 6 Perks to choose from in the center of the screen.|Each has different Effects shown in the upper right.|Perks improve as you complete the Level Requirements shown on the right."
     PerksDisabledString="Perk Progress has been disabled because the Game Length is set to Custom, Sandbox Mode is on, or you have previously used Cheats."
     Begin Object Class=HideLobbyChat Name=ChatBox
         OnCreateComponent=ChatBox.InternalOnCreateComponent
         WinTop=0.807600
         WinLeft=0.016090
         WinWidth=0.971410
         WinHeight=0.100000
         RenderWeight=0.010000
         TabOrder=1
         OnPreDraw=ChatBox.FloatingPreDraw
         OnRendered=ChatBox.FloatingRendered
         OnHover=ChatBox.FloatingHover
         OnMousePressed=ChatBox.FloatingMousePressed
         OnMouseRelease=ChatBox.FloatingMouseRelease
     End Object
     t_ChatBox=HideLobbyChat'HideMut.HideLobbyMenu.ChatBox'

     Begin Object Class=KFMapStoryLabel Name=LobbyMapStoryBox
         OnCreateComponent=LobbyMapStoryBox.InternalOnCreateComponent
         ToolTip=None

     End Object
     l_StoryBox=KFMapStoryLabel'HideMut.HideLobbyMenu.LobbyMapStoryBox'

     Begin Object Class=AltSectionBackground Name=StoryBoxBackground
         bNoCaption=True
         WinTop=0.109808
         WinLeft=0.489062
         WinWidth=0.487374
         WinHeight=0.309092
         OnPreDraw=StoryBoxBackground.InternalPreDraw
     End Object
     StoryBoxBG=AltSectionBackground'HideMut.HideLobbyMenu.StoryBoxBackground'

     Begin Object Class=AltSectionBackground Name=GameInfoB
         WinTop=0.037851
         WinLeft=0.489062
         WinWidth=0.487374
         WinHeight=0.075000
         OnPreDraw=GameInfoB.InternalPreDraw
     End Object
     GameInfoBG=AltSectionBackground'HideMut.HideLobbyMenu.GameInfoB'

     Begin Object Class=GUILabel Name=CurrentMapL
         Caption="LAlalala Map"
         TextColor=(B=158,G=176,R=175)
         WinTop=0.042179
         WinLeft=0.496524
         WinWidth=0.360000
         WinHeight=0.035714
         RenderWeight=0.900000
     End Object
     CurrentMapLabel=GUILabel'HideMut.HideLobbyMenu.CurrentMapL'

     Begin Object Class=GUILabel Name=DifficultyL
         Caption="Difficulty"
         TextColor=(B=158,G=176,R=175)
         WinTop=0.072381
         WinLeft=0.496524
         WinWidth=0.360000
         WinHeight=0.035714
         RenderWeight=0.900000
     End Object
     DifficultyLabel=GUILabel'HideMut.HideLobbyMenu.DifficultyL'

     Begin Object Class=GUIImage Name=WaveB
         Image=Texture'KillingFloorHUD.HUD.Hud_Bio_Circle'
         ImageStyle=ISTY_Justified
         ImageRenderStyle=MSTY_Normal
         WinTop=0.043810
         WinLeft=0.923238
         WinWidth=0.051642
         WinHeight=0.061783
         RenderWeight=0.800000
     End Object
     WaveBG=GUIImage'HideMut.HideLobbyMenu.WaveB'

     Begin Object Class=GUILabel Name=WaveL
         Caption="1/4"
         TextAlign=TXTA_Center
         TextColor=(B=158,G=176,R=175)
         VertAlign=TXTA_Center
         FontScale=FNS_Small
         WinTop=0.043810
         WinLeft=0.923238
         WinWidth=0.051642
         WinHeight=0.061783
         RenderWeight=0.900000
     End Object
     WaveLabel=GUILabel'HideMut.HideLobbyMenu.WaveL'

     Begin Object Class=GUILabel Name=TimeOutCounter
         Caption="Game will auto-commence in: "
         TextAlign=TXTA_Center
         TextColor=(B=158,G=176,R=175)
         WinTop=0.000010
         WinLeft=0.059552
         WinWidth=0.346719
         WinHeight=0.045704
         TabOrder=6
     End Object
     label_TimeOutCounter=GUILabel'HideMut.HideLobbyMenu.TimeOutCounter'

     Begin Object Class=GUILabel Name=PerkClickArea
         WinTop=0.432395
         WinLeft=0.488851
         WinWidth=0.444405
         WinHeight=0.437312
         bAcceptsInput=True
         OnClickSound=CS_Click
         OnClick=HideLobbyMenu.ShowPerkMenu
     End Object
     PerkClickLabel=GUILabel'HideMut.HideLobbyMenu.PerkClickArea'

     Begin Object Class=GUISectionBackground Name=BGPerk
         bFillClient=True
         Caption="Current Perk"
         WinTop=0.432291
         WinLeft=0.650976
         WinWidth=0.325157
         WinHeight=0.138086
         OnPreDraw=BGPerk.InternalPreDraw
     End Object
     i_BGPerk=GUISectionBackground'HideMut.HideLobbyMenu.BGPerk'

     Begin Object Class=GUISectionBackground Name=BGPerkEffects
         bFillClient=True
         Caption="Perk Effects"
         WinTop=0.568448
         WinLeft=0.650976
         WinWidth=0.325157
         WinHeight=0.307442
         OnPreDraw=BGPerkEffects.InternalPreDraw
     End Object
     i_BGPerkEffects=GUISectionBackground'HideMut.HideLobbyMenu.BGPerkEffects'

     Begin Object Class=GUIScrollTextBox Name=PerkEffectsScroll
         CharDelay=0.002500
         EOLDelay=0.100000
         OnCreateComponent=PerkEffectsScroll.InternalOnCreateComponent
         WinTop=0.626094
         WinLeft=0.659687
         WinWidth=0.309454
         WinHeight=0.244961
         TabOrder=9
         ToolTip=None

     End Object
     lb_PerkEffects=GUIScrollTextBox'HideMut.HideLobbyMenu.PerkEffectsScroll'

     Begin Object Class=GUIImage Name=PlayerPortrait
         Image=Texture'InterfaceArt_tex.Menu.changeme_texture'
         ImageStyle=ISTY_Scaled
         ImageRenderStyle=MSTY_Normal
         IniOption="@Internal"
         WinTop=0.472396
         WinLeft=0.492522
         WinWidth=0.156368
         WinHeight=0.397022
         RenderWeight=0.300000
     End Object
     i_Portrait=GUIImage'HideMut.HideLobbyMenu.PlayerPortrait'

     Begin Object Class=GUISectionBackground Name=PlayerPortraitB
         WinTop=0.432291
         WinLeft=0.489062
         WinWidth=0.163305
         WinHeight=0.443451
         OnPreDraw=PlayerPortraitB.InternalPreDraw
     End Object
     PlayerPortraitBG=GUISectionBackground'HideMut.HideLobbyMenu.PlayerPortraitB'

     IconBorder=0.050000
     ItemBorder=0.110000
     ProgressBarHeight=0.300000
     TextTopOffset=0.050000
     IconToInfoSpacing=0.050000
     ProgressBarBackground=Texture'KF_InterfaceArt_tex.Menu.Innerborder'
     ProgressBarForeground=Texture'InterfaceArt_tex.Menu.progress_bar'
     PerkBackground=Texture'KF_InterfaceArt_tex.Menu.Item_box_box'
     InfoBackground=Texture'KF_InterfaceArt_tex.Menu.Item_box_bar'
     WaitingForServerStatus="Awaiting server status..."
     WaitingForOtherPlayers="Waiting for players to be ready..."
     AutoCommence="Game will auto-commence in"
     Begin Object Class=GUITabControl Name=PageTabs
         bDockPanels=True
         TabHeight=0.040000
         WinLeft=0.010000
         WinWidth=0.980000
         WinHeight=0.040000
         RenderWeight=0.490000
         TabOrder=3
         bAcceptsInput=True
         OnActivate=PageTabs.InternalOnActivate
     End Object
     c_Tabs=GUITabControl'KFGui.GUILibraryMenu.PageTabs'

     Begin Object Class=GUIHeader Name=ServerBrowserHeader
         bVisible=False
     End Object
     t_Header=GUIHeader'HideMut.HideLobbyMenu.ServerBrowserHeader'

     Begin Object Class=HideLobbyFooter Name=BuyFooter
         RenderWeight=0.300000
         TabOrder=8
         bBoundToParent=False
         bScaleToParent=False
         OnPreDraw=BuyFooter.InternalOnPreDraw
     End Object
     t_Footer=HideLobbyFooter'HideMut.HideLobbyMenu.BuyFooter'

     i_Background=None

     i_bkChar=None

     bRenderWorld=True
     bAllowedAsLast=True
     OnClose=HideLobbyMenu.InternalOnClosed
     OnCanClose=HideLobbyMenu.StopClose
     WinHeight=0.500000
     OnPreDraw=HideLobbyMenu.InternalOnPreDraw
     OnRendered=HideLobbyMenu.DrawPerk
     OnKeyEvent=HideLobbyMenu.InternalOnKeyEvent
}
