// base class, not vanilla class HideMainMenu extends UT2K4GUIPage; #exec OBJ LOAD FILE=InterfaceContent.utx #exec OBJ LOAD FIlE=2K4Menus.utx // #exec OBJ LOAD FIlE=2K4MenuSounds.uax #exec OBJ LOAD FIlE=2K4Menus.utx #exec OBJ LOAD FIlE=PatchTex.utx #exec OBJ LOAD FIlE=KF_DLC.utx #exec OBJ LOAD FIlE=KillingFloorHUD_SUMMER.utx #exec OBJ LOAD FIlE=KillingFloorHUD_HALLOWEEN.utx #exec OBJ LOAD FIlE=KillingFloorHUD_XMAS.utx //============================================================================= // VARIABLES //============================================================================= //var KFDataObject SPAmmo; var bool bOpenAlready; var bool bMovingOnTraining, bMovingOnResume, bMovingOnSP; var automated FloatingImage KFBackground; var automated FloatingImage KFBackgroundOverlay; var automated GUIImage KFLogoBit; var automated GUILabel KFVersionNum; // Keep track of updates from now on ! :D var automated GUILabel KFWorkshopDownload; // Variable Name Legend // l_ GUILabel lb_ GUIListBox // i_ GUIImage li_ GUIList // b_ GUIButton tp_ GUITabPanel // t_ GUITitleBar sp_ GUISplitter // c_ GUITabControl // p_ GUIPanel // ch_ moCheckBox // co_ moComboBox // nu_ moNumericEdit // ed_ moEditBox // fl_ moFloatEdit // sl_ moSlider var automated BackgroundImage i_BkChar, i_Background; var automated GUIImage i_UT2Logo, i_PanHuge, i_PanBig, i_PanSmall, i_UT2Shader, i_TV; var automated GUIButton b_SinglePlayer, b_MultiPlayer, b_Host, b_InstantAction, b_ModsAndDemo, b_Profile, b_JoinLH, b_Workshop, b_Settings, b_Quit; var bool bAllowClose; var array CharShots; var float CharFade, DesiredCharFade, CharFadeTime; var GUIButton Selected; var() bool bNoInitDelay; var() config string MenuSong; var bool bNewNews; var float FadeTime; var bool FadeOut; var localized string NewNewsMsg, FireWallTitle, FireWallMsg, SteamMustBeRunningText, UnknownSteamErrorText, DownloadingText, DownloadedText; //============================================================================= // LOGIC //============================================================================= // DISABLED function OnClose(optional Bool bCancelled){} // remove NEWS tab and all logs spam / lags caused by it event Opened(GUIComponent Sender) { super(GUIMultiComponent).Opened(Sender); class'KFServerBrowser'.default.PanelClass[0] = "none"; } function InitComponent(GUIController MyController, GUIComponent MyOwner) { local byte SpecialEventType; super.InitComponent(MyController, MyOwner); Background = none; i_BkChar.Image = CharShots[rand(CharShots.Length)]; SpecialEventType = class'KFGameType'.static.GetSpecialEventType(); if (SpecialEventType == 1) { KFBackground.Image = MaterialSequence'KillingFloorHUD_SUMMER.MainMenu.kf_menu_seq'; KFLogoBit.Image = FinalBlend'KillingFloorHUD_SUMMER.KFLogoFB'; } else if (SpecialEventType == 2) { KFBackground.Image = MaterialSequence'KillingFloorHUD_HALLOWEEN.MainMenu.kf_menu_seq_HALLOWEEN'; KFLogoBit.Image = FinalBlend'KillingFloorHUD_HALLOWEEN.KFLogoFB_halloween'; } else if (SpecialEventType == 3) { KFBackground.Image = MaterialSequence'KillingFloorHUD_XMAS.MainMenu.kf_menu_seq_XMAS'; KFLogoBit.Image = FinalBlend'KillingFloorHUD_XMAS.KFLogoFB_XMAS'; } } function InternalOnOpen() { if (bNoInitDelay) Timer(); else SetTimer(4.5, false); Controller.PerformRestore(); // if ( !PlayerOwner().level.game.IsA('KFCinematicGame') ) // { // bOpenAlready = True; // PlayerOwner().ConsoleCommand("OPEN Entry?Game=KFMod.KFCinematicGame"); // PlayerOwner().ClientSetInitialMusic(MenuSong,MTRAN_Segue); // } PlayerOwner().ClientSetInitialMusic(MenuSong,MTRAN_Segue); // Begin Syncing Subscribed Steam Workshop Files(if necessary) PlayerOwner().SyncSteamWorkshop(); } function bool MyOnDraw(Canvas Canvas) { local GUIButton FButton; local int i,x2; local float XL,YL; local float DeltaTime; local int percentage; if (PlayerOwner().SubscribedFileDownloadTitle != "") { if (PlayerOwner().SubscribedFileDownloadIndex != -1) { percentage = int(PlayerOwner().DownloadFileProgress * 100); KFWorkshopDownload.Caption = DownloadingText @ "|" @ PlayerOwner().SubscribedFileDownloadTitle @ "|" @percentage $ "%"; } else { KFWorkshopDownload.Caption = PlayerOwner().SubscribedFileDownloadTitle @ "|" @ DownloadedText; } } if ( bAnimating || !Controller.bCurMenuInitialized ) { return false; } DeltaTime = Controller.RenderDelta; for ( i = 0; i < Controls.Length; i++ ) { if ( GUIButton(Controls[i]) != none ) { FButton = GUIButton(Controls[i]); if ( FButton.Tag > 0 && FButton.MenuState != MSAT_Focused ) { FButton.Tag -= 784 * DeltaTime; if ( FButton.Tag < 0 ) { FButton.Tag = 0; } } else if ( FButton.MenuState == MSAT_Focused ) { FButton.Tag = 200; } if ( FButton.Tag > 0 ) { fButton.Style.TextSize(Canvas, MSAT_Focused, FButton.Caption, XL, YL, FButton.FontScale); x2 = FButton.ActualLeft() + XL + 16; Canvas.Style = 5; Canvas.SetDrawColor(150, 25, 25, FButton.Tag); Canvas.SetPos(0, fButton.ActualTop()); Canvas.DrawTilePartialStretched(material'Highlight', x2, FButton.ActualHeight()); } } } return false; } event Timer() { if (!bMovingOnTraining && !bMovingOnResume && !bMovingOnSP) { bNoInitDelay = true; if (!Controller.bQuietMenu) { PlayerOwner().PlaySound(SlideInSound,SLOT_None); } i_TV.Animate(-0.000977, 0.332292, 0.35); i_UT2Logo.Animate(0.007226,0.016926,0.35); i_UT2Shader.Animate(0.249023,0.180988,0.35); i_TV.OnEndAnimation = MenuIn_OnArrival; i_UT2Logo.OnEndAnimation = MenuIn_OnArrival; i_UT2Shader.OnEndAnimation = MenuIn_OnArrival; } else { if (bMovingOnResume) { bMovingOnResume = false; Controller.ConsoleCommand("OPEN KFS-RESUMEGAME?Game=KFmod.KFSPGameType"); } if (bMovingOnTraining) { bMovingOnTraining = false; Controller.ConsoleCommand("OPEN KF-MANOR?Game=KFmod.KFGameType"); } if (bMovingOnSP) { bMovingOnSP = false; Controller.ConsoleCommand("OPEN KF-G-BIOTICSLAB?Game=KFmod.KFGameType"); } } } function MoveOn() { local int i; local bool bShowPerkInfo; switch (Selected) { case b_SinglePlayer: return; case b_MultiPlayer: if (!Controller.CheckSteam()) { Controller.OpenMenu(Controller.QuestionMenuClass); GUIQuestionPage(Controller.TopPage()).SetupQuestion(SteamMustBeRunningText, QBTN_Ok, QBTN_Ok); return; } Profile("ServerBrowser"); Controller.OpenMenu("KFGUI.KFServerBrowser"); Profile("ServerBrowser"); return; case b_Host: if (!Controller.CheckSteam()) { Controller.OpenMenu(Controller.QuestionMenuClass); GUIQuestionPage(Controller.TopPage()).SetupQuestion(SteamMustBeRunningText, QBTN_Ok, QBTN_Ok); return; } Profile("MPHost"); if (PlayerOwner() != none) { PlayerOwner().OpenUPNPPorts(); } Controller.OpenMenu("KFGUI.KFGamePageMP"); Profile("MPHost"); return; case b_InstantAction: Profile("InstantAction"); Controller.OpenMenu("KFGUI.KFGamePageSP"); Profile("InstantAction"); return; case b_Profile: if (!Controller.CheckSteam()) { Controller.OpenMenu(Controller.QuestionMenuClass); GUIQuestionPage(Controller.TopPage()).SetupQuestion(SteamMustBeRunningText, QBTN_Ok, QBTN_Ok); return; } if (PlayerOwner() != none) { if (PlayerOwner().SteamStatsAndAchievements == none) { PlayerOwner().SteamStatsAndAchievements = PlayerOwner().Spawn(PlayerOwner().default.SteamStatsAndAchievementsClass, PlayerOwner()); if (!PlayerOwner().SteamStatsAndAchievements.Initialize(PlayerOwner())) { Controller.OpenMenu(Controller.QuestionMenuClass); GUIQuestionPage(Controller.TopPage()).SetupQuestion(UnknownSteamErrorText, QBTN_Ok, QBTN_Ok); PlayerOwner().SteamStatsAndAchievements.Destroy(); PlayerOwner().SteamStatsAndAchievements = none; } else { PlayerOwner().SteamStatsAndAchievements.OnDataInitialized = OnSteamStatsAndAchievementsReady; } return; } else if (!PlayerOwner().SteamStatsAndAchievements.bInitialized) { PlayerOwner().SteamStatsAndAchievements.OnDataInitialized = OnSteamStatsAndAchievementsReady; PlayerOwner().SteamStatsAndAchievements.GetStatsAndAchievements(); return; } for (i = 0; i < class'KFGameType'.default.LoadedSkills.Length; i++) { if (KFSteamStatsAndAchievements(PlayerOwner().SteamStatsAndAchievements).GetPerkProgress(i) < 0.0) { Controller.OpenMenu(Controller.QuestionMenuClass); GUIQuestionPage(Controller.TopPage()).SetupQuestion(class'HideMainMenu'.default.UnknownSteamErrorText, QBTN_Ok, QBTN_Ok); PlayerOwner().SteamStatsAndAchievements.OnDataInitialized = OnSteamStatsAndAchievementsReady; PlayerOwner().SteamStatsAndAchievements.GetStatsAndAchievements(); return; } } if (class'KFPlayerController'.default.SelectedVeterancy == none) { bShowPerkInfo = true; } Profile("Profile"); Controller.OpenMenu("KFGUI.KFProfileAndAchievements"); Profile("Profile"); if (bShowPerkInfo) { Controller.OpenMenu(Controller.QuestionMenuClass); GUIQuestionPage(Controller.TopPage()).SetupQuestion(class'LobbyMenu'.default.SelectPerkInformationString, QBTN_Ok, QBTN_Ok); } } return; case b_JoinLH: Controller.ViewportOwner.Console.ConsoleCommand("open 127.0.0.1"); return; case b_Workshop: PlayerOwner().SteamStatsAndAchievements.ShowWorkshopContent(); return; case b_ModsAndDemo: Profile("ModsandDemos"); Controller.ViewportOwner.Console.ConsoleCommand("OPEN KF-Intro?Game=unrealgame.cinematicgame"); Controller.CloseAll(True); SetTimer(0.5,false); Profile("ModsandDemos"); return; case b_Settings: Profile("Settings"); Controller.OpenMenu("KFGUI.KFSettingsPage"); Profile("Settings"); return; case b_Quit: Profile("Quit"); Controller.OpenMenu(Controller.GetQuitPage()); Profile("Quit"); return; default: StopWatch(True); break; } } function MenuIn_OnArrival(GUIComponent Sender, EAnimationType Type) { Sender.OnArrival = none; if (bAnimating) return; i_UT2Shader.OnDraw = MyOnDraw; DesiredCharFade=255; CharFadeTime = 0.75; if (!Controller.bQuietMenu) PlayerOwner().PlaySound(FadeInSound); } function MainReopened() { if (!PlayerOwner().Level.IsPendingConnection()) { i_BkChar.Image = CharShots[rand(CharShots.Length)]; Opened(none); Timer(); } } function bool MyKeyEvent(out byte Key,out byte State,float delta) { // Escape pressed if (Key == 0x1B && state == 1) bAllowClose = true; return false; } function bool CanClose(optional bool bCancelled) { if (bAllowClose) ButtonClick(b_Quit); bAllowClose = false; return PlayerOwner().Level.IsPendingConnection(); } function PlayPopSound(GUIComponent Sender, EAnimationType Type) { if (!Controller.bQuietMenu) PlayerOwner().PlaySound(PopInSound); } function MenuIn_Done(GUIComponent Sender, EAnimationType Type) { Sender.OnArrival = none; PlayPopSound(Sender,Type); } function bool ButtonClick(GUIComponent Sender) { Selected = GUIButton(Sender); if (Selected == none) return false; DesiredCharFade=0; CharFadeTime = 0.35; MoveOn(); return true; } function MenuOut_Done(GUIComponent Sender, EAnimationType Type) { Sender.OnArrival = none; if (bAnimating) return; MoveOn(); } event bool NotifyLevelChange() { if (bDebugging) log(Name@"NotifyLevelChange PendingConnection:"$PlayerOwner().Level.IsPendingConnection()); return PlayerOwner().Level.IsPendingConnection(); } function bool CommunityDraw(canvas c) { local float x,y,xl,yl,a; if (bNewNews) { a = 255.0 * (FadeTime/1.0); if (FadeOut) a = 255 - a; FadeTime += Controller.RenderDelta; if (FadeTime>=1.0) { FadeTime = 0; FadeOut = !FadeOut; } a = fclamp(a,1.0,254.0); x = b_ModsAndDemo.ActualLeft(); y = b_Settings.ActualTop(); C.Font = Controller.GetMenuFont("UT2MenuFont").GetFont(C.ClipX); C.Strlen("Qz,q",xl,yl); y -= yl - 5; C.Style=5; C.SetPos(x+1,y+1); C.SetDrawColor(0,0,0,A); C.DrawText(NewNewsMsg); C.SetPos(x,y); C.SetDrawColor(207,185,103,A); C.DrawText(NewNewsMsg); } return false; } function OnSteamStatsAndAchievementsReady() { Profile("Profile"); Controller.OpenMenu("KFGUI.KFProfileAndAchievements"); Profile("Profile"); } //============================================================================= // DEFAULTPROPERTIES //============================================================================= defaultproperties { Begin Object Class=FloatingImage Name=FloatingBackground Image=MaterialSequence'KillingFloorHUD.MainMenu.kf_menu_seq' DropShadow=None ImageStyle=ISTY_Scaled WinTop=0.136089 WinLeft=0.273078 WinWidth=0.802660 WinHeight=1.080918 RenderWeight=0.000003 End Object KFBackground=FloatingImage'HideMut.HideMainMenu.FloatingBackground' Begin Object Class=FloatingImage Name=FloatingBackgroundOverlay Image=FinalBlend'InterfaceArt2_tex.filmgrain.FilmgrainOverlayFB' DropShadow=None ImageStyle=ISTY_Scaled WinTop=0.000000 WinLeft=0.000000 WinWidth=1.000000 WinHeight=1.000000 RenderWeight=0.900000 End Object KFBackgroundOverlay=FloatingImage'HideMut.HideMainMenu.FloatingBackgroundOverlay' Begin Object Class=GUIImage Name=KFMenuLogo Image=FinalBlend'KillingFloorHUD.KFLogoFB' ImageStyle=ISTY_Scaled WinTop=0.012000 WinLeft=0.008000 WinWidth=0.620000 WinHeight=0.300000 RenderWeight=0.050000 End Object KFLogoBit=GUIImage'HideMut.HideMainMenu.KFMenuLogo' Begin Object Class=GUILabel Name=WorkshopDownloadLabel TextAlign=TXTA_Right TextColor=(B=200,G=200,R=200) bMultiLine=True FontScale=FNS_Small WinTop=0.050000 WinLeft=0.600000 WinWidth=0.390000 WinHeight=0.150000 RenderWeight=0.950000 End Object KFWorkshopDownload=GUILabel'HideMut.HideMainMenu.WorkshopDownloadLabel' Begin Object Class=BackgroundImage Name=ImgBkChar ImageColor=(A=160) ImageRenderStyle=MSTY_Alpha X1=0 Y1=0 X2=1024 Y2=768 RenderWeight=0.040000 Tag=0 End Object i_bkChar=BackgroundImage'HideMut.HideMainMenu.ImgBkChar' Begin Object Class=BackgroundImage Name=PageBackground ImageStyle=ISTY_Scaled ImageRenderStyle=MSTY_Alpha X1=0 Y1=0 X2=1024 Y2=768 End Object i_Background=BackgroundImage'HideMut.HideMainMenu.PageBackground' Begin Object Class=GUIImage Name=ImgUT2Logo End Object i_UT2Logo=GUIImage'HideMut.HideMainMenu.ImgUT2Logo' Begin Object Class=GUIImage Name=iPanHuge End Object i_PanHuge=GUIImage'HideMut.HideMainMenu.iPanHuge' Begin Object Class=GUIImage Name=iPanBig End Object i_PanBig=GUIImage'HideMut.HideMainMenu.iPanBig' Begin Object Class=GUIImage Name=iPanSmall End Object i_PanSmall=GUIImage'HideMut.HideMainMenu.iPanSmall' Begin Object Class=GUIImage Name=ImgUT2Shader End Object i_UT2Shader=GUIImage'HideMut.HideMainMenu.ImgUT2Shader' Begin Object Class=GUIImage Name=ImgTV End Object i_TV=GUIImage'HideMut.HideMainMenu.ImgTV' Begin Object Class=GUIButton Name=MultiplayerButton CaptionAlign=TXTA_Left CaptionEffectStyleName="TextButtonEffect" Caption="Multiplayer" StyleName="ListSelection" Hint="All hell breaks loose..." WinTop=0.290000 WinLeft=0.050000 WinWidth=0.200000 WinHeight=0.035000 TabOrder=1 bFocusOnWatch=True OnClick=HideMainMenu.ButtonClick OnKeyEvent=MultiplayerButton.InternalOnKeyEvent End Object b_MultiPlayer=GUIButton'HideMut.HideMainMenu.MultiplayerButton' Begin Object Class=GUIButton Name=HostButton CaptionAlign=TXTA_Left CaptionEffectStyleName="TextButtonEffect" Caption="Host Game" StyleName="ListSelection" Hint="Start a server and invite others to join your game" WinTop=0.325000 WinLeft=0.050000 WinWidth=0.200000 WinHeight=0.035000 TabOrder=2 bFocusOnWatch=True OnClick=HideMainMenu.ButtonClick OnKeyEvent=HostButton.InternalOnKeyEvent End Object b_Host=GUIButton'HideMut.HideMainMenu.HostButton' Begin Object Class=GUIButton Name=InstantActionButton CaptionAlign=TXTA_Left CaptionEffectStyleName="TextButtonEffect" Caption="Solo" StyleName="ListSelection" Hint="Play Killing Floor Solo Mode" WinTop=0.360000 WinLeft=0.050000 WinWidth=0.200000 TabOrder=3 bFocusOnWatch=True OnClick=HideMainMenu.ButtonClick OnKeyEvent=InstantActionButton.InternalOnKeyEvent End Object b_InstantAction=GUIButton'HideMut.HideMainMenu.InstantActionButton' Begin Object Class=GUIButton Name=ProfileButton CaptionAlign=TXTA_Left CaptionEffectStyleName="TextButtonEffect" Caption="Profile and Achievements" StyleName="ListSelection" Hint="Your profile and achievements" WinTop=0.420000 WinLeft=0.050000 WinWidth=0.220000 TabOrder=4 bFocusOnWatch=True OnDraw=HideMainMenu.CommunityDraw OnClick=HideMainMenu.ButtonClick OnKeyEvent=ModsAndDemosButton.InternalOnKeyEvent End Object b_Profile=GUIButton'HideMut.HideMainMenu.ProfileButton' Begin Object Class=GUIButton Name=JoinLHButton CaptionAlign=TXTA_Left CaptionEffectStyleName="TextButtonEffect" Caption="Join Local Host" StyleName="ListSelection" Hint="Joins local host server." WinTop=0.455000 WinLeft=0.050000 WinWidth=0.220000 TabOrder=4 bFocusOnWatch=True OnClick=HideMainMenu.ButtonClick OnKeyEvent=ModsAndDemosButton.InternalOnKeyEvent End Object b_JoinLH=GUIButton'HideMut.HideMainMenu.JoinLHButton' Begin Object Class=GUIButton Name=WorkshopButton CaptionAlign=TXTA_Left CaptionEffectStyleName="TextButtonEffect" Caption="Steam Workshop Content" StyleName="ListSelection" Hint="Custom Content in the Steam Workshop" WinTop=0.490000 WinLeft=0.050000 WinWidth=0.220000 TabOrder=4 bFocusOnWatch=True OnClick=HideMainMenu.ButtonClick OnKeyEvent=ModsAndDemosButton.InternalOnKeyEvent End Object b_Workshop=GUIButton'HideMut.HideMainMenu.WorkshopButton' Begin Object Class=GUIButton Name=SettingsButton CaptionAlign=TXTA_Left CaptionEffectStyleName="TextButtonEffect" Caption="Settings" StyleName="ListSelection" Hint="Change your controls and settings" WinTop=0.550000 WinLeft=0.050000 WinWidth=0.200000 WinHeight=0.035000 TabOrder=6 bFocusOnWatch=True OnClick=HideMainMenu.ButtonClick OnKeyEvent=SettingsButton.InternalOnKeyEvent End Object b_Settings=GUIButton'HideMut.HideMainMenu.SettingsButton' Begin Object Class=GUIButton Name=QuitButton CaptionAlign=TXTA_Left CaptionEffectStyleName="TextButtonEffect" Caption="Exit" StyleName="ListSelection" Hint="Leave this loose game" WinTop=0.585000 WinLeft=0.050000 WinWidth=0.200000 WinHeight=0.035000 TabOrder=7 bFocusOnWatch=True OnClick=HideMainMenu.ButtonClick OnKeyEvent=QuitButton.InternalOnKeyEvent End Object b_Quit=GUIButton'HideMut.HideMainMenu.QuitButton' MenuSong="KFMenu" SteamMustBeRunningText="Steam must be running and you must have an active internet connection to access this" UnknownSteamErrorText="Unknown Steam error prevented access to this" PopInSound=Sound'PatchSounds.slide1-1' SlideInSound=Sound'PatchSounds.slide1-1' BeepSound=Sound'KFWeaponSound.bullethitmetal3' bRenderWorld=True bPersistent=True OnOpen=HideMainMenu.InternalOnOpen OnReOpen=HideMainMenu.MainReopened OnCanClose=HideMainMenu.CanClose WinTop=0.000000 WinHeight=1.000000 OnKeyEvent=HideMainMenu.MyKeyEvent }