Áƒ*žE±H|E›&7¥ÿ‚û"†ÆC«ÑuÍ.zq*¾i±NoneolrootCoreuwindowSystemUMenuSetTextCreated AddMenuItem HideWindowAddItemmappack SetHelpTextGetSelectedIndexSetHelp ShowWindow MonthNamesCreateControl GetMenuBarUTMenuClose oldskool ClosePressed CreateMenu CloseUWindowSetSelectedIndexSetFontConsoleCommand ClientClass GetValueSinglePlayer2 ShowModalBreath3 ClientTravel SetEditableSetMap SetButtonsAddPageSkills PackChangedIterateMapsQuickNotify SlotHelp AnalyzeLoads IterateMaps AutoWidthPaint SetSizePosTick BeforePaint ExecuteItemSetPackSortClearAll ReadWeaponLook flyfresh PackHelp AnalyzeSavesOldSkoolGameMenuoldskoolnewgameclientwindowDeathMatchPlus MapChanged SkillChanged StartPressed SaveConfigsPoopBreath MessageBoxFindItemIndex2 ShowThisItemSelectResizedClientSetMusic GetItemName savemenuf11f21 spgameinfof41 RestartLevelUpdateWeaponPrioritiesf31f22f32f42f13f23f33 StartText creditsHelp FlyByHelp FlyByText creditsTextPriorityListClass NewSPHelp NewSPName advancednameOldconfighelpOldconfigNameUTIntroitcoopserverwindownobuttonmessageboxoldskoolPlayerSetupClient oldskoolPlayerSetupScrollClienttickyoldskoolUTBotmatchWindowoldskoolUTConfigIndivBotsCW oldskoolUTConfigIndivBotsWindowoldskoolUTBotConfigClientOldskoolUTMenuBotmatchCWoldskoolUTBotConfigSClientOldSkoolOptionsMenuOldSkoolNewgamewindowoldskoolRootwindowOldSkoolScreenshotCWoldskoolmenubarOldSkoolHelpMenuOldSkoolLoadGameScrollClientOldSkoolLoadGameWindowOldSkoolLoadGameClientWindowOldSkoolSlotClientWindowOldSkoolSaveGameClientWindowOldSkoolSaveGameScrollClientOldSkoolSaveGameWindowOldSkoolmapsClientWindowoldskoolWeaponPriorityListoldskoolWeaponPriorityListAreaoldskoolWeaponPriorityListBoxoldskoolWeaponPriorityCWOldskoolWeaponPriorityWindowOldSkoolPlayerMeshClientoldskoolPlayerClientWindowOldSkoolPlayerWindowPlayerSetupClassSetMesh utbackround backrounds BeginPlay LoadClassesEngine AdvancedHelp MutatorListalltrue DuckDnlgfrGetLookAndFeelTexturef12f43weaponwindowclass loadmenu DrawItem playerwindowResolutionChangedInsertAddText oldskoolhud coopgameinfo CreatePages SetupMods UTBrowserListFactories QuitTextServerListTitle LoadName GetValue2 SaveNameListAreaClass musicclass Backround ListClass PackText bQuickMode AfterCreate LoadModsMessageBoxDone PlayerSetupShowPreferences SelectWeaponMapBreath2 UBrowser SetMultiLine WindowTitleLookAndFeelClass QuitGamePlayerWindowClassWeaponPriorityWindowClassAnimEnd GameTypeConfigureIndivBotsUWindowDialogControlUWindowRootWindowUWindowPulldownMenuUWindowComboControlUWindowFramedWindowUWindowWindowUWindowListControlUWindowDialogClientWindow bAlwaysOnTopUWindowPulldownMenuItemUWindowMenuBarItemUSize UWindowListUWindowSmallButtonWindowConsole UWindowBaseUWindowSmallCloseButtonStaticSaveConfig DrawUpBevelUWindowPageWindowUWindowDynamicTextAreaFindChildWindowUWindowMessageBoxUWindowListBoxPlayerUWindowScrollingDialogClientTitleUWindowMenuBarUWindowListBoxItemOptions NewHelpText OwnerWindowPrevSiblingWindowLastChildWindow bDisabledAlignUWindowHSplitterWinLeftUWindowEditControl Advanced Description EditBoxWidthMessageBoxResult bSizableTabUnselectedMGetPlayerOwner GetLevel PageClassSetSizeCanvas CreateWindow DrawScaleMouseYMouseXVSizeAuthor Selected ClipTextIconsDrawStretchedTexture GetParent bStatusBarLeftClientWindowRightClientWindow MaxSplitPos bRightGrowFontsLodMeshLastChild bByParent LookAndFeelMenuBar DesiredWidthBitmapClass ReturnValueTextureBG CloseText Splitter CenterPos CenterWidth CloseButtonConsole MapTitleA ParentWindowPackage SlotNamesHelpXC LoadGame GameInfoHUDXOffsetYOffsetToolNewGameNumPlayerClasses NextPlayerLoad WhiteTexture TextBuffer SkillStrings BlackTextureObjectItemsEnumPawnE FunctionWeapon LevelInfoUMenuPlayerSetupClientColorMesh PlayerPawnSpacing WinHeight WinWidthUWindowLookAndFeelqWinTopCdTrackPreferencesNameResult bShowMenu QuitTitleActorStruct BotMenuType ItemNameRulesMenuType RulesTabFont ShowDesktop LevelSummary Inventory ViewportWeaponPriorityHelpMusicbQuickKeyEnablebLeaveOnscreenUMenuWeaponPriorityListBox bBlackoutRootGameUMenuTypeUMenuRaisedButtonUMenuRootWindowUMenuPlayerMeshClientUMenuPlayerSetupScrollClientAtLeastOneBotTextUMenuOptionsMenuAtLeastOneBotTitle SplitPosDesiredHeight UMenuModMenuPlayerMenuNamePrioritizeName DesktopNameFixedAreaClassMapHelpUMenuLoadGameWindow SaveHelp MinWinWidth LoadHelpNextMap NewGameHelp NewGameName BotmatchName BotmatchHelpModName HelpName ToolNameUMenuLabelControlUMenuWeaponPriorityListAreaUMenuWeaponPriorityListUMenuStatsMenuUMenuStatusBar MeshActorUMenuBotConfigBaseUMenuBotmatchClientWindowUMenuFramedWindowUMenuNewGameClientWindowUMenuPlayerClientWindowUMenuPlayerWindowUMenuDialogClientWindowUMenuGameMenuUMenuHelpMenuUMenuStartMatchClientWindowUMenuSaveGameWindow UMenuMenuBar SkillHelpUMenuPageControl WeaponNum Multiplayer GameItem ModItemsOptionsUMenuTypeGameUMenuNameMultiplayerUMenuNameSave BotmatchQuitEpicURL Preferences Prioritize ControlWidth ControlLeft ControlRightBotmatchParent Initialized NumBotsEdit ButtonWidth ButtonLeft SkillCombo SkillLabel ButtonTop PriorityNameWeaponClassName WeaponClassModsStatsMultiplayerItem HelpItem OptionsItem StatsItem ToolItemModItem ShowHelpPages StartButtonScreenshotWindowMultiplayerUMenuDefaultOptionsUMenuNameY ClassComboSlotsRestartButton ConfirmQuit SupportURLAbout FirstMapTestMapNewMeshMyMesh MapCombo DefaultMap MapAuthorBg11Bg21Bg31Bg41Bg12Bg22Bg32Bg42Bg13Bg23Bg33Bg43 MenuBlack StatusBar BetaFont WeaponMesh WeaponSkinDesktop MeshWindow ModMenuClassbotpackjWeaponDescriptionTournamentWeaponMagPickforcekUTPlayerClientWindowUTConfigIndivBotsCWReturnToGameHelpReturnToGameName LoadGameHelpUTWeaponPriorityListUTWeaponPriorityListBoxUTWeaponPriorityCWUTMenuStartMatchSCUTMenuBotmatchCW UTGameMenuUTConfigIndivBotsWindowUTBotmatchWindowUTBotConfigClient LoadGameNameUTPlayerSetupClient ReturnToGame bAlreadyHaveHUTBrowserServerListWindow StrProperty bNoDrawWorld SelectedItemi bCheckedSkin tempClassoText NextDesc DemoBuild ScreenshotIdealPlayerCountMinuteHourDayMonthmyHUDRegionSongGame ScriptText SongSectionNextContextbFound GameClassStructPropertyItemL bSelectedbMeshEnviroMapWeaponPriorityPrev MultiSkins WeaponNamePURLWClassPropertyWeaponClassParentnull SkillText DeltaTimetrackcdused uselessfloat musiclocal OldconfigMapName Difficulty Selection packclassNewSPMapText QuitHelpt NamePropertybnewmag PackComboGetEntryLevelBPacks MaxPacks filtermaps FlyByButton QuitNameSettingsMenuType refreshmodecreditsButton BotConfigTabStartMatchTabPlayerSetupButton LoadedMapsLastMapbMapsIteratedMultiplayerUMenuType TempPack NextPack TempPacksbFoundSavedMapPackObjectProperty WarningMap bfirstload filteredFirstMaplocalloadyFloatProperty CurrentPackR Packsavesquicksavetype BoolProperty IntProperty PackName Mapwindow coopButtonSelectedPackTypeSelectedPackclassMapsDynamicLoadObjectHealth bNoSmoothGetNextIntDesc GetNextIntUMenuScreenshotCW DrawColor GameName TextSizeUMenuWeaponPriorityCW AnimSequenceUMenuToolsMenu SettingsTab StatsName OptionsNamecreditswindowadditionalmenuMultiplayerNameUTCreditsWindowFlyBybasedir loadreleventbLoadedUMenuWeaponPriorityMesh BytePropertyGUMenuWeaponPriorityWindowNone cshpdetectedDrawBackGround setupbox ResetUWindow messedsongSetupcheatriolUTPlayerSetupClient MouseMove savedrootIterateVoices LMouseDown WindowHidden Destroyed WindowEventGameUMenuDefaultToolTipNotifyAfterLevelChange IntroNullHud MenuHelp MenuCaption oldskoolitemExecuteProcessMessageMsg MenuItemName bswaptrackDeltaHasBeatenGameSetPropertyTextReplicationInfoCRINetMode bscoreboardbhudOther testrootMessageBoxButtons EnterResultcshpLadder swaptimeriUMenuModMenuItem ESCResult oldtrack reptimer WinMessagerecNewPlayerClass SpawnNotifytemp Receiver RootWindowleaveonscreenVoicePackMetaClass UTConsoleMessageOwnerboxKeyButtonsTournamentPlayer NextVoiceVoicePackComboOldInitializedGetPropertyTextOB NumVoicesstrTipÀy`=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6/üXDÀÚãÌ~„.ü'l„.ü'l„.ü'l† œŸt† œŸt„.ü'lŠo û† œŸt„.ü'lŠo û™/Tã2�> £Y„.ü'lŠo ûǼԌŽÇ¼ÔŒŽ„.ü'l—†`‘—†`‘—†`‘—†`‘—†`‘“×7XÓ×7XÓ×7XÓ×7XÓ×7XÓ×7X׆`‘—†`‘—†`‘—†`‘—†`‘—†`‘—†`‘“×7XÆ·+X“×7XÆÔ¿Ð’“×7XÇZ]Startt] Vortex2K ]oldskool.origunreali i E@i ‡P ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ œŸt‡µÏxW‡O]oldskool.singleplayer2^]oldskool.coopgame2LYWVVQYoi ÇH|{ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6Ôä,ÑDZ²�p¥¶ŒsÖ¥¶ŒsÖ¥¶ŒsÖ‡D ]Custom] JanuaryÝ  FebruaryÝMarchÝAprilÝMayÝJuneÝJulyÝAugustÝ  SeptemberÝ OctoberÝ NovemberÝ December*]*)Press to activate this slot. (Save/Load)i i +i i U@@i ³BAtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ/�Ò賑imŸ™/Tã2û�> £YÏÆYQ²ZÆYQ²ZÆYQ²ZÆYQ²Z™/Tã2û�> £YÆYQ²Z†ÆYQ²Z™/Tã2û�> £Y™/Tã2û�> £Y�> £YË5Iœ´�> £YË5Iœ´�> £Y�> £Y�> £Y�> £Y�> £Y�> £Y�> £Y™/Tã2û’Ž�”’Ž�”’Ž�”’Ž�”MÚç„ ™/Tã2™/Tã2†Ç?#,’Ž�”MÚç„ Ì{Oêà‡j]olroot.utbackroundi]utmenu23.utmenu23TÓs ]umenu.UMenuRootWindowi i i i i ˆi i i Ti “i ci ˆi Z€i –i bi ˆi n€i Œi W@i „}KKÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇ?#,„.ü'l�Òè�Òè�Òè�Òè�Òè–x��Òè�Òè�Òè�Òè�Òè�Òè�Òè�Òè�Òè�Òè�Òè�Òè–x�‡i i o€i –i @@i i =i ˆi vi “i $i i i †i i i Qi Œi Ui —i i †i i i i i i i i i }€i –i Fi ¥i Ri i H2@Di i Ei i Ui i Pi i Ci i Gi i i †i i †õi i i <i “i Ii �i i i i ¥©C{uÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ20Ô|wÍ©‘ä‰%®ëŠZ!®ëŠZ!–x�–x�–x�–x�Šo û† œŸt† œŸt† œŸtÚvÅ?ïÚvÅ?ï‡i i i i l@@i i i i ri i 3i i si i #è@Di i Oi 0i M, i €i ¤i 2@@i i ;@Di i i Êi ai †i i �i ki i ^i i W@i i ?i Œi 1i i }@i i x@i i Ji i Ki “i i „i @i i i “i i i Ri i Q€@i i G2@i i c€i âi i �i Hi “i C@i i i „i i i Fi i Xi •DAvÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6XváÝ•ƒïP§�Òè�ÒèÌ{Oêà�Òè�ÒèÌ{Oêà�Òè�ÒèÌ{OêààEf¼$’Ž�”’Ž�”�©Ù«àEf¼$àEf¼$àEf¼$àEf¼$àEf¼$èÜ¡$ÅàEf¼$^¾p>;˜;aG°�Òè�ÒèÌ{Oêà‡y ]UMenu.UMenuGameMenui i >i i f€i Òi _2@i i @i i i „i i i ji i (i i G@i i i Úi a@i i n€i âi S@i i i †i Pi †i i •i Ai ˜i i i @i i Oi i pi i €i †ïi i i i i Î7B"®ÎBD¯”?,<~‘D¯”?B,@%¬–@,}’,#�,@@!.¥ ¥?~?}?B€?@!  c¥@6 i ~i ˜i qi †i {@ i bi i ii ˜i xi ˜i yi ˜i zi ˜i ri ˜i k@i i t@ i h@i i J †„i [2@i i i i wi ˜i ~i i `2@i i Ii ˜i a€i –i @Di i gi i {i i li ÇU[ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6hJÿÌ DDZ²�p„.ü'lŠo ûüXD† œŸt„.ü'lŠo ûˆ_ã‰4üXDüXD„.ü'lŠo û™/Tã2�> £YüXD† œŸtˆ_ã‰4ˆ_ã‰4üXDüXDüXDüXDˆ_ã‰4ˆ_ã‰4üXDˆ_ã‰4üXD0Ô|wÍüXD“×7XÃüXD“×7XÓ×7XÓ×7XÃüXD“×7XÃüXD0Ô|wÍüXDˆ_ã‰4ˆ_ã‰4üXDüXD† œŸt“×7XÓ×7XÃüXD† œŸt“×7XÓ×7XÃüXD† œŸt“×7XÓ×7XÃÊ�᱘†´-9½yˆ_ã‰4üXDˆ_ã‰4üXDˆ_ã‰4üXD0Ô|wÍüXDˆ_ã‰4ˆ_ã‰4ˆ_ã‰4ˆ_ã‰4ˆ_ã‰4ˆ_ã‰4ˆ_ã‰4ˆ_ã‰4ˆ_ã‰4Ê�᱘Ê�᱘“×7XÓ×7XÓ×7XÓ×7XÓ×7XÓ×7XÓ×7XÓ×7XÓ×7XÓ×7XÓ×7XÓ×7XÓ×7XÓ×7XÓ×7XÓ×7XÈ_ã‰4üXDˆ_ã‰4üXD0Ô|wÍüXDˆ_ã‰4üXD0Ô|wÍüXDˆ_ã‰4�> £Yˆ_ã‰4�> £Yˆ_ã‰4ˆ_ã‰4ˆ_ã‰4�> £Yˆ_ã‰4ˆ_ã‰4�> £Yˆ_ã‰4�> £Yˆ_ã‰4�> £Yˆ_ã‰4ˆ_ã‰4ˆ_ã‰4ˆ_ã‰4ˆ_ã‰4ˆ_ã‰4ˆ_ã‰4ˆ_ã‰4�> £Y�> £Y† œŸt�> £YüXDˆ_ã‰4† œŸt† œŸt† œŸtˆ_ã‰4üXDˆ_ã‰4ˆ_ã‰4ˆ_ã‰4üXDüXDüXDüXDüXD† œŸtüXDˆ_ã‰4ˆ_ã‰4†åà_Ž@ˆ_ã‰4†åà_Ž@ˆ_ã‰4ˆ_ã‰4ˆ_ã‰4üXDüXDˆ_ã‰4ˆ_ã‰4†´-9½yˆ_ã‰4†´-9½yˆ_ã‰4ˆ_ã‰4ˆ_ã‰4†´-9½y’Ž�”�©Ù«’Ž�”�©Ù«ˆ_ã‰4’Ž�”�©Ù«üXD’Ž�”�©Ù«üXDˆ_ã‰4’Ž�”�©Ù«’Ž�”�©Ù«Ê�᱘†´-9½y’Ž�”�©Ù«Ê�᱘†´-9½yÊ�᱘“×7XÓ×7XÓ×7XÈ_ã‰4“×7XÓ×7XÓ×7XÓ×7XÓ×7XÓ×7XÓ×7XÓ×7XÓ×7XÈ_ã‰4üXD† œŸt“×7XÓ×7XÈ_ã‰4üXD† œŸt“×7XÓ×7XÓ×7XÇl] Map Pack::]b`Select the episode of maps to play. If you want to play an individual map, choose custom maps.]= View FlyBy\]kiClick the Button to display the FlyBy of this pack. I recommend you use this, before starting the pack.^] Credits[]_]Click this button to see the names of the dedicated people who brought this map pack to you.mÓi i Xi i Bi ¡oIkÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿMÚç„ ¡œÔ�X�Òè�ÒèN‡i i M€i âi @i i i i bi i vi i ai i D@i i i i _i i @i i i i wi i @i i i i Li Mi [@i ÃGXwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2^¾p>;Ã?…˜;aG°˜;aG°•ƒïP§•ƒïP§˜;aG°�Òè�ÒèÌ{Oêà�Òè�ÒèÌ{Oêà•ƒïP§�> £Y�> £Y†�©Ù«Šo û�> £YŠo û™/Tã2‡i i i i Ti i ui i li i W€i i €i ˜i i i g€i i q€i i Gi †«i €i ˜i i i Ii „i Hi i Ti „i M€i Rmoiÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2oµ#è6Rº×¯I�> £Yˆ_ã‰4�> £Yˆ_ã‰4‡i i €i ˜i i Ái `i i @i i z€i ˜i %i i )i i Li i mi †ïi h€i ˜i i †i i i Õq{1'ŃYD¯”?,<w‘D¯”?Y,L%�–L,L!¾?Y€?L!¸?w¥L0 i @i i }i i €i i Ci i €i âi @i i Ri i B i .i áwxGÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2FŽúìáœÔÛ‡i i i ®i c €@i ¬sWEÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2IA­¬ÃûFó¤°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƥ°9Ƈi i L †„i ui i Ki i €i i o€@i i Ei Ji ]i „ë_Dÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2QD™‚ëo1èk‡oi i Ki i P�i i N€@i i @@i æJEyÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2 Ví`#ºæm‘,{„.ü'lŠo û™/Tã2Šo û™/Tã2Šo ûŠo ûŠo û‡]i i {@i i Yi åNt~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2YßÝ)å_ž¨<Šo ûŠo ûŠo û‡^i i Ri i ci Kkzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6p\þ`|Ôä,Ñ’Ž�”�©Ù«Šo û�> £Yˆ_ã‰4†Ôä,цÔä,ц œŸt† œŸt† œŸt�> £Y¥¶ŒsÖˆ_ã‰4ˆ_ã‰4†üXD†üXD†üXD†üXD† œŸt† œŸt† œŸt�> £Y„.ü'l„.ü'l„.ü'lŠo û™/Tã2ˆ_ã‰4ˆ_ã‰4†Ôä,цÔä,цÔä,цÔä,цüXD†Ôä,Ñ¥¶ŒsÖ†Ôä,Ñ¥¶ŒsÖ¥¶ŒsÖ¥¶ŒsÖˆ_ã‰4ˆ_ã‰4ˆ_ã‰4ˆ_ã‰4ˆ_ã‰4ˆ_ã‰4ˆ_ã‰4ˆ_ã‰4�> £Y�> £Y† œŸt�> £Y†üXDˆ_ã‰4† œŸtˆ_ã‰4ˆ_ã‰4†üXD†Ôä,цüXD†Ôä,цÔä,цÔä,цüXD†Ôä,Ñ¥¶ŒsÖ†Ôä,Ñ¥¶ŒsÖ¥¶ŒsÖ’Ž�”¥¶ŒsÖ’Ž�”’Ž�”�©Ù«¥¶ŒsÖ¥¶ŒsÖ†Ôä,Ñ¥¶ŒsÖ‡:]fdSelect the episode of maps to load from. Select Custom Map Saves to load a save from a custom map.*]%$Press to Load a game from this sloti ±Ijxÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ](¥±Ñ$‡i ±Mr}ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ^,)}&±Ñ$‡i L_|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ66_`¡ÍÔä,Ñ�> £Y’Ž�”¥¶ŒsÖ’Ž�”’Ž�”�©Ù«’Ž�”’Ž�”’Ž�”’Ž�”¥¶ŒsÖ’Ž�”’Ž�”�©Ù«’Ž�”’Ž�”’Ž�”’Ž�”†Ôä,Ñ¥¶ŒsÖ†Ôä,ÑŠo û�> £Y„.ü'l„.ü'l„.ü'lŠo û™/Tã2†üXD†Ôä,цüXD†Ôä,цÔä,цÔä,цüXD†Ôä,цÔä,Ñ¥¶ŒsÖ†Ôä,Ñ¥¶ŒsÖ‡{"&]Easy&ÝMedium&ÝHard&ÝUnreal*]#"Press to Save a game to this sloti i O€@i i €i Útnoÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2b€ŸööÚ˜|5íÙtµð„.ü'lŠo û‡i i `€@i äq}mÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿdûþÆeäœuÑ`—†`‘—†`‘—†`‘—†`‘—†`‘—†`‘‡i i €@i i i ««FK<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2OhWÕÉ4«Õ¶mꕃïP§†¢’\M•ƒïP§†¢’\M•ƒïP§†¢’\M•ƒïP§•ƒïP§†ÈR#z’•ƒïP§†ÈR#z’•ƒïP§†ÈR#z’•ƒïP§†¢’\MŠo û†üXD†üXD†üXD’Ž�”’Ž�”�©Ù«†üXDŠo û† œŸtŠo û†üXD†üXD†üXD†üXDŠo û† œŸtŠo û�> £Y�> £YŠo ûŠo û†¢’\MŠo û™/Tã2˜;aG°’Ž�”’Ž�”�©Ù«˜;aG°’Ž�”’Ž�”�©Ù«�> £Y†¢’\M†¢’\M†¢’\M†¢’\M†¢’\M‡a]&New Single Player Game`]+*Select to setup a new single player game.e]&Load Single Player Gameg]&Save Current Gamec]b`Select yes to return to your puny, miserable, useless real life, if you can't handle UNREALity.i i €i Èi x@@i Ñ]yBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6`l/X¬ÖÑSW Ç„.ü'lÁßx ¤°9ÆŒùsO+Áßx ¤°9ÆŒùsO+ŒùsO+Áßx ¤°9ÆÁßx ¤°9ÆÁßx ¤°9Æ„.ü'lÂzÃZÂzÃZË¿!°9ÒK4螌ùsO+�> £YŒùsO+ŒùsO+�> £Y�> £Y�> £Y�> £Y�> £YŒùsO+ŒùsO+ŒùsO+ŒùsO+ŒùsO+ŒùsO+ŒùsO+ŒùsO+ŒùsO+ŒùsO+ŒùsO+ŒùsO+†ïX©'ŒùsO+ŒùsO+ŒùsO+†ïX©'ŒùsO+†ïX©'Ë¿!°9†Ù©&Ì»ŒùsO+–x�–x�–x�–x�–x�–x�ŒùsO+–x�–x�–x�ŒùsO+–x�–x�–x�ŒùsO+–x�–x�–x�–x�–x�–x�–x�Šo ûŒùsO+�> £Y�> £YÒK4螌ùsO+ŒùsO+�> £YÒK4螌ùsO+ŒùsO+�> £YŒùsO+ŒùsO+ŒùsO+ŒùsO+ŒùsO+�> £Y‡kBi æAusÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2m+BTæ“Ú0³Šo ûŠo ûŠo ûŠo ûŠo û‡x] New Gamei i j€i Áõ^Cÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿo…kXÐõJUëV‡h]'&olroot.oldskoolWeaponPriorityListAreai i S€@i i a€i ª@Urÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2$r~*t•ªuX*XváÝXvá݆üXD†üXD†üXD’Ž�”�©Ù«†üXDŠo û† œŸtŠo ûŠo û˜;aG°˜;aG°Šo û™/Tã2Šo û™/Tã2Šo û™/Tã2Šo û™/Tã2Šo û™/Tã2Šo û�> £Y˜;aG°Šo û™/Tã2‡d]Old&Skool Configurationc]Confugure OldSkoolb]&Advanced OptionsO]^\Goto the advanced options menu. Warning: under a few 3d cards, this MAY cause UT to crash.{F|Qi i €i Åêuipÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6tÛ+±êa >öÕIÄ(›ÕIÄ(›†�©Ù«ÕIÄ(›†�©Ù«ÕIÄ(›†�©Ù«†�©Ù«ÕIÄ(›‡tMDM-Synergy.unr~]BotPack.DeathMatchPlusP]oldskool.oldskooli i Di i J€@i i p€@i i G@@i i €@i ÜnsjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzÖï‘ Ü›Ó„.ü'lüXDüXD† œŸt‡i çt\Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{cl<´çrEü—†`‘—†`‘—†`‘—†`‘—†`‘—†`‘‡Hzi i w€@i i �i i |€@i i €@i i D€i åsnÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2A¼ƒõå¨:¦‡di ËWm@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBÿÌ%^Ë¿!°9‡i i €@i i €i ãplÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2EúP]¼ãÆÕ«Ê‡ti i €@i i c@i i F€@i i H€@i i ,€@i i 9 †Ài K †„i |@ i S€i i i ®i p@ i Si ®i Ai i Oi ®i Qi ®i Ti ®i Ui ®i Vi ®i Wi ®i Xi ®i i †i ^ †„i ai ®i \i ®i ~ †„i N€i i _€i –i Yi ®i [€@i i !€@i i x€@i i k�i i S€i –i D ®i m�i i þ*_ ‡®çbotmatchstep 1 doneã.Õ¦ Õ” ãw'ã%ò Ë*õžÊÅ †²w**ã%Ð**õžÊê †úw**ã%ó*d|ÊÎUTMenu.UTBotConfigSClient*õžolroot.oldskoolutbotconfigsclient †ˆ*õžÊÎ †¬w**ã%ë* i Þ7ê \Þ i li i i i Þ dê bÖ*Þ i × do/šJæ%Eöø$$$mÐ §/Ž ¦ AÈBÈBHCHC i iLM –çŸ#äTournamentPlayer%BWÖ‚{B –L,@›‚�|Boldskool.sktrooper�|€B,u4etc.Ë WB%¥LŸ'äTournamentPlayerLBW-Ë4 i |€i i û*ZûD|V¶öUnrealI.sktrooper¶Å)\�=X¶ÅÍÌÌ= i Þ jê _Þ i î:�gëa/!=B|.ëcustomê odê.ëKrê RÖ*Þ i â ž-Ö(-ì(÷B°Ž”? ¾¹CHCR¾´CÀD¸¯¬Ž”?,¬”?,ì¯¬Ž ?,¬ ?, i ü@@Z«/ü@D i Ö (¦-Ö(-ì(÷B°Ž”? ¾¹CHCR¾¹C€D¸¯¬Ž”?,¬”?,ì¯¬Ž ?,¬ ?,-ÿ' i q6& ˧q6%ð¯CíÀ D�| custom&&º–&,2¢„|& # z& #6&°›6%º¥&Gz6 #6 #  æ&�,6¥–&’�,6,t{& 7P!& 7”P!..Empty..¥P¥& i úL -úÎ { i ØIs™n½0rÛ*Û.ÁÐ ÷ Ó ÁÛþö.ŒÃáÛþÔ.ŒÃß?|.ŒÃÂolweapons.olsmmagü-Z&Ûþ Õ.®žolweapons.thirdskin ®<&Ûþ Õ.®žolweapons.newmagskin ®Z&Ûþ Õ*ŠrÌ*Ì.ÂÐ ÷ Ó ÂÌ5Ì\.ËÃö i wh-R}TÝHwT*mTàT'Tm  è -hŽ£ i p€i –i Y€i i ø ;Ïλ.—¦ —” »â.¬»¦ IÈBÈB»ã»$¦âÈBÈBë»-î'»ÓpC i ÈqsIú¶-û(¶Å¶Å¶ösw¶ö*ƒ¶a! ¶ a! ?°¶a!8¶ a!8333?ضa!C¶a!C¶a!D¶a!D¶a!6 i Ö` X<XšÉ.ŒZ-Ú6Ü ²$6á ²$6Ù ²$€¹ fgq¯a?& Ì6Ü ²=,ÿ6á ²=,ÿ6Ù ²=,ÿM6|€.ŒZÂ, OLweapons.6Ü ²$6á ²$6Ù ²$“M |€.ŒZÂ,Legacy.6Ü ²$6á ²$“6Ù ²$M |€.ŒZÂ,Botpack.6Ü ²$6á ²$6Ù ²$M6Ü ²$€6á ²$6Ù ²$ þ%Ž(øÆ ®f?&g.ŒZÍ i B/—¶C°Ž ?"¾?ùD¯Ž”?, \Cj¾?ùD¯Ž”?, ‡C¸¯¬Ž”?,¬”?,ì¯¬Ž ?,¬ ?, i ídR® WO-ýOw.Ž*Ow.Žº*.ŽºÆ i ÷ #-Ö(-ì(÷/ i ÀJeDMKw.Ž*Kw.Žº*.Žº e i @i i ýv}÷Vý-}T�ëa/!<Ž£-ê(Ž£ i T@i i Fi †«i hi †«i þ^'B‚J6'%?ŸC.ŒÄ׎‚wC* wCÄ'?ÈúCä¥'C.ŒCØ,¾–','?Èú!i ¥'Ž'%–',2 þ'?Èú!i '?Èú!i ¥'Å?R?bñ i ùgHINü-Ñ'ê ÑÕê  hí Ï€wœ°*Tœ°ÿ‹TÄh«žT †Ôí hñ Îgñ  rï ÍÓï  Ôð ÌÒð  Äžoü Çé.èüèžï †é `ãù Éèù  ^.^èù-Ö-ý<-ý<w.Ž*<w.Žº*.Žº-å'Ç,  i ÆLpHjø{p 4w.• ¢Ò ax.• ¢Ó �y.• ¢Ïn ³A.• | áv.• ÈÑn i.• ÈÌn =z.• ÈÊn kr.• ¢Ín ÿÿÆp i ÛMnpd…0.‚rnq š:j:$Žz i N+[Ü V‚{ Custom{ sž  †Þ‚‚wœ°*œ°a/!{ CustomŽ*¦s^ÈBÈBHCHC'Ž!¦ VÈBÈBHCHC' i O;S“ ÓV‚{ Custom{ sž  †§{ CustomŽ*¦s[ÈBÈBHCHC'ÑŽ!¦ YÈBÈBHCHC' i ÉQi2.;‹i QwŸ5!UT-Logo-Map.unr?Game=Botpack.LadderNewGame$'~ œxŸ6!UT-Logo-Map.unr?Game=Botpack.LadderLoadGame$'~ ÑyŽ!¦ EÈBÈBHCHC'~ AŽ!¦ mÈBÈBHCHC'~ v+~ (i;~ XzqE ¢ÇS$$$~ {rŽ£~ ÿÿÉi i S@i i ÅR'¥År-÷‚wœ°*œ°a/!ei-÷„„rœ°*�œ°a/!˜Ÿô% i òvxãòw ¢Ö*y ¢Ð*-*A~*vw*ip*-*x ¢Î*r ¢É*-*z ¢Õ* i s€@i i ui i òVdHJ� ad ,D.X HT QÛ.X T ÿÿòd i çwt2"4kV‚{ Custom{ zž  †t núr^ î炜°a/!{ CustomŽ*¦zLÈBÈBHCHC'Ž!¦ÿÈBÈBHCHC'^ sDŽK¦„žoldskool.OldskoolConfigWindow †ÈBÈBHCHC'^ üü-Ö�ü-ÖŽ£-Î�Ž£-ÎŽ£-ÄŽ£-ÎŽ£b^ )ìq^ [ÛŽŸpreferences^ ÿÿÉt i Ï~:}*¢vþ:ý! ]‚:a!R�:a!Q: a&!uÍÌÌ>s: a&!6ÍÌÌ>  :a! : a! ÍÌÌ> i èy2 f%h.•y ùù-Ö�ù-Öh-ý�h-ý½ù-Öºw.Ž*ºw.Žº*.Žºw.Ž*w.Žº*.Žº hb OúŸ'start http://www.epicgames.com/ ‘áŸ,start http://www.gtgames.com/support àØš �Ð&ަ äÈBÈBÈBÈBŸ!UTCredits.unr$(Ž£ ÿÿÉy i öDQ0Rp IöQ³µE¸EQ?wP*j P›/£øó a1 ÆSš™þSÊÃ!p j Sš10³±E?,E2-L¸TQ0³T?T-L(£øó(J.Ïžx Ï=cI$2 -£øóG„„„‚‚‚‚-G w-*w-Þ*�-Þa/!]�-Þa/!| -ar-Ð*%|V-Ðutmenu23.utmenu232-aeolroot.nullI=cFexI=,ÿG„‚-a›:-ðcA„‚�-a�|V-Ðe›:-ñc„zeolroot.null �n Mc-(J.Ïže Ï=cI$G-$J.Ïže Ï$I$-L' i |h`1}¾ß|`_NSD¯”?,<a‘D¯”?S,V�D¬”?,,_‘D¯”?V,/¾?S€?/¸?a¾?V€?¸?_ÍC i çbN)ïN0çNMM \$N 4 'Y E ?Y V@Y ÿÿ. +$N y 9( ØÐ §EŽ6¦~ÈBÈB( %,Ð §3Ž$¦ FÈBÈB( ÿÿ. ÿÿ i ø#Ïλ.—¦ —” »â.¬»¦ IÈBÈB»ã»$¦âÈBÈBë»-î'»ÓpC i Î[">8 È çMap Client OpenedÎð‡CíÈBLD¬” @K‘D¯¬”?,?L,uD®¬”?,?KD�D¬”?,,1‘D¯”?D,.Ð +r*çError: MapsClientWindow without newgamesclient window. Stop hacking these scripts you idiot!!! .ˆ ˆ?1 A?D€? $' c  ` % "(\ŸîMapPack%o{\>ž\ †6{ŸbW%>°9%"\¥"¥R+"\ŸîMapPackRÏ"%�–",2…{"Y%GO"ð‚�-[|GO-['KG>žGO †  >|~ÿY>°9!i XJWY>°9¥X¥Y.¥G¥"v  Custom MapsÝ|custom +ñ K}›  +KOž †W%°9”Custom .ˆ ˆ?14B?D€? $'  åÊ   åË % "(wš  +c-O(w,=.ʦ Ê?1¾B?D€?.ˆ ˆ?1ŒB?D€?$' ´ý  ´Ú%"("%y–", " ´Û¥"@‚–:œ°Ô,�œ°a/!>:œ°ÔU:œ°Ô.U&&ª‚–:œ°Ô,�œ°a/!>=.:œ°Ô ´×É=& ´×=É$ .“ “?1ðB@B€A T %  N š  + -O Refresh-o' z Press to refresh the map list. Only needed to be pushed if you have DELETED maps or changed the map paths around.   .“ “?1C@B€A v%  J,.“ “?1*C@B€A,Player Setup,%,% Select Digital RepresentationU ›  +F zt  U  ¯ ›  +� r~* ¬ ¾  -[' i Æ7f sS|Âolweapons.olflakcannonÍUnreal I Flak CannonÈ¢|Âolweapons.olrifleÍUnreal I Sniper RifleÈø|Âolweapons.olgesbiorifleÍUnreal I GES Bio RifleÈD|Âolweapons.olminigunÍUnreal I MinigunÈ«|Âolweapons.olsmmag�-ZÍSMP 8920¨ÍSMP 7243ÈÍnü‚|Âolweapons.olsmmag-Zá ô-ánößnÔ.ËöÙn÷ i çzP)=’YçPcc T$3˜Ÿô% ñ–œó, .¥P—¨pppp¨¨¨œéon:œ°ÔsSœØ:0Sœó “œÚ&HSœÇ�.¥P‘¨¨pp¨¨¨œéon:œ°ÔsSœØ:Sœó“œÚ&HSœÇçpQ= S6W%ç–W,ÝrPW!X’�6,W¥W¦X 7.¥Pà 掟pSaveGame SXW ÿÿ i ÅZV$í ÃQŸp%É–p,2VpQÈúm„þV!i  þV!i É.ŒÄ [ÀäVÍp(unk) WV¥p$m&FQ îÞ%‚{F –m,2.ŒÄÌæw*Ê|WäQ KFÂF-Ò'¶GxïžF †7xÇ-Ò(æ.ŒÌFQîÞm¥më i i€i i ékeÙ÷9r\*\ûa M\eº.̦ ÌHB€Aº È.•¦ XHBúC€AÆ.ÙžUWindowFonts.UTFont40 ÙIM, i Zu'‘�™%u ù�|custom map saves%&»–%,2£„z% #u[z% #%±›%»¥%Kùz # # %�,—–%’�,,f{% 7U!% 7†U!..Empty..¥U¥% i äC JÔNFw.Ž*Fw.Žº*.Žº õ i i †i A// ============================================================ // olroot.coopserverwindow: the magical co-op game browser :D // ============================================================ class coopserverwindow expands UTBrowserServerListWindow; i ce¬^}IÝHwI*kIàI'Ik  è -eŽ£ i q/4ã�qð¯CíÀDH�D¬”?,,{‘D¯”?H,.ˆ ˆ?{ A?H€?$'Map Pack:  b%"(SŸîMapPack%“{SgžS †Z{ŸbW%g°9%4CS¥4¥rj4SŸîMapPackró4%_–4,2N{4C_[4C‚�-`|_[ -`'`’_&gž_[ † g|¥_¥4š Custom Map Saves™š`%`j ¦` `‰�| custom(&K–(,23„|( # z( #(A›%K¥(؉z # # (�,'–(’�,,ö{( 7G!( 7G!..Empty..¥G¥(˜uD¯”?,<b‘D¯”?u,l’,�,,/.¥ ¥?b?l?u€?/ ¨Restartœé/+ Press to restart the current level.�„rœ°*�œ°a/!/QuickSave/% Press to load your quicksave.�z F/  Üfgÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6iˆˆ›Ü½³­ªav‡d]CO-OPb]ecUBrowser.UBrowserSubsetFact,SupersetTag=UBrowserAll,GameType=coopgame2,bCompatibleServersOnly=Truei i çgd)¼Ì²çdnn %$'° ­$0rd/sœ°a/!ŽŸQ%R Ç| FCustom)ž F †‚w)*)-D)-B')æŸ!?load=1000$( ªX|.¥dÃ..Empty.. ªM% –M,–rdM!v’�,M¥M_R {Custom Map Saves R[)ž  †3 Custom æ�‚w)*)-D)-B')æŸ!p?load=Sv$(° ÿÿ i w // ============================================================ // olroot.oldskoolPlayerSetupClient: all it does is hide various classes...... // ============================================================ class oldskoolPlayerSetupClient expands olUTPlayerSetupClient; function LoadClasses() //hide various ones...... { local int NumPlayerClasses; local string NextPlayer, NextDesc; GetPlayerOwner().GetNextIntDesc("TournamentPlayer", 0, NextPlayer, NextDesc); while( (NextPlayer != "") && (NumPlayerClasses < 64) ) { if (!(NextPlayer ~= "oldskool.sktrooper")&&!(Left(NextPlayer,6) ~= "u4etc.")) //no skaarj or U4e d00dz allowed..... ClassCombo.AddItem(NextDesc, NextPlayer, 0); NumPlayerClasses++; GetPlayerOwner().GetNextIntDesc("TournamentPlayer", NumPlayerClasses, NextPlayer, NextDesc); } ClassCombo.Sort(); } i { // ============================================================ // olroot.oldskoolPlayerSetupScrollClient: allows dynamic swapping of client-class // ============================================================ class oldskoolPlayerSetupScrollClient expands UMenuPlayerSetupScrollClient; function created(){ if (ownerwindow.Isa('oldskoolnewgameclientwindow')){ //don't ask :D if (OldSkoolNewGameClientWindow(ownerwindow).selectedpacktype ~= "custom") Clientclass=class'olroot.oldskoolplayersetupclient'; else Clientclass=OldSkoolNewGameClientWindow(ownerwindow).SelectedPackclass.default.playerwindow; } else ClientClass = class'olUTPlayerSetupClient'; FixedAreaClass = None; Super(UWindowScrollingDialogClient).Created(); } i R// ============================================================ // olroot.ticky: the entry level ticker to tick the good 'old root window. // ============================================================ class ticky expands Actor; var oldskoolrootwindow root; function tick(float delta){ root.tick(delta); } function destroyed(){ //no garbage collecting in entry level. root.ticky=none; } i ~// ============================================================ // oldskool.oldskoolUTBotmatchWindow: put your comment here // Created by UClasses - (C) 2000 by meltdown@thirdtower.com // ============================================================ class oldskoolUTBotmatchWindow expands UTBotmatchWindow; i z // ============================================================ // oldskool.oldskoolUTConfigIndivBotsCW: simply uses the mesh client with animations...... // ============================================================ class oldskoolUTConfigIndivBotsCW expands UTConfigIndivBotsCW; function Created() { Super(umenudialogclientwindow).Created(); Splitter = UWindowHSplitter(CreateWindow(class'UWindowHSplitter', 0, 0, WinWidth, WinHeight)); Splitter.RightClientWindow = UMenuPlayerMeshClient(Splitter.CreateWindow(class'Olroot.OldSkoolPlayerMeshClient', 0, 0, 100, 100)); Splitter.LeftClientWindow = Splitter.CreateWindow(PlayerSetupClass, 0, 0, 100, 100, OwnerWindow); Splitter.bRightGrow = True; Splitter.SplitPos = 240; } i ÞN# \Wçreading from a mapQ~ëN.UNRL›QÿÿÿÿN€NQñ.®žpN.Screenshot ®b.ÚžpN.LevelSummary Úøwb*éAn Unreal Tournament MapðbëÿbéUéAn Unreal 1 MapðOldSkool cannot read levelÿinformation from Unreal Maps i S// ============================================================ // oldskool.oldskoolUTConfigIndivBotsWindow: put your comment here // Created by UClasses - (C) 2000 by meltdown@thirdtower.com // ============================================================ class oldskoolUTConfigIndivBotsWindow expands UTConfigIndivBotsWindow; i p // ============================================================ // oldskool.oldskoolUTBotConfigClient: put your comment here // Created by UClasses - (C) 2000 by meltdown@thirdtower.com // ============================================================ class oldskoolUTBotConfigClient expands UTBotConfigClient; function ConfigureIndivBots() { if(int(NumBotsEdit.GetValue()) == 0) MessageBox(AtLeastOneBotTitle, AtLeastOneBotText, MB_OK, MR_OK, MR_OK); else GetParent(class'UWindowFramedWindow').ShowModal(Root.CreateWindow(class'oldskoolUTConfigIndivBotsWindow', 100, 100, 200, 200, Self)); } i r// ============================================================ // Oldskool.OldskoolUTMenuBotmatchCW: put your comment here // Created by UClasses - (C) 2000 by meltdown@thirdtower.com // ============================================================ class oldskoolUTMenuBotmatchCW expands UTMenuBotmatchCW; function CreatePages() { local class PageClass; log ("botmatchstep 1 done"); Pages = UMenuPageControl(CreateWindow(class'UMenuPageControl', 0, 0, WinWidth, WinHeight)); Pages.SetMultiLine(True); Pages.AddPage(StartMatchTab, class'UTMenuStartMatchSC'); PageClass = class(DynamicLoadObject(GameClass.Default.RulesMenuType, class'Class')); if(PageClass != None) Pages.AddPage(RulesTab, PageClass); PageClass = class(DynamicLoadObject(GameClass.Default.SettingsMenuType, class'Class')); if(PageClass != None) Pages.AddPage(SettingsTab, PageClass); if (GameClass.Default.BotMenuType~="UTMenu.UTBotConfigSClient") PageClass = class(DynamicLoadObject("olroot.oldskoolutbotconfigsclient", class'Class')); else PageClass = class(DynamicLoadObject(GameClass.Default.BotMenuType, class'Class')); if(PageClass != None) Pages.AddPage(BotConfigTab, PageClass); } i rd3%Cafžd †ñfgéf|ðfMÿ i ìD#°òúþ*ìñ*îù*-*DI*ÛF*-*üð*ü-ÖŽ£-Î i yi i fi i I// ============================================================ // Oldskool.oldskoolUTBotConfigSClient: put your comment here // Created by UClasses - (C) 2000 by meltdown@thirdtower.com // ============================================================ class oldskoolUTBotConfigSClient expands UWindowScrollingDialogClient; function Created() { ClientClass = class'oldskoolUTBotConfigClient'; FixedAreaClass = None; Super.Created(); } i Ýv .7\“¹ ”  ÍSwñ*?ùD”ñó?ùD ñòƒ±�±5¬¯”?,3¬¯ ?,6Ü ²=,ÿ6á ²=,ÿ6Ù ²=,ÿ¹ 53ñ þ%Ž(øÑ ÿ5¬¯”?,3¯ «?,Æ 53ÿ#{ðÑ ð5¬¯”?,3¯ «?,Æ 53ð‘{éÑ é5¬¯”?,3¯ «?,Æ 53é ±zmqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|g¦¸9±Ñ$‡i i ~€i i 5€i i ['// ============================================================ // OldSkool.Mappack: // The main info class for all OldSkool Map packs // Subclass Me to built a map pack. // ============================================================ class Mappack expands Object abstract config (OldSkool); //the following is already here (in defaults), but can be changed (I used it for Legacy and Team Vortex...probably PC's can use it too) var () string spgameinfo, coopgameinfo; //aditional menu (appears after you load the game), load menu, and save menu are not used at this time, but can be //Creditswindow: For a mod, you'd probably want to include this. List the full name of the window.. currently used in Team Vortex, Legacy, and Unreal var () class savemenu, loadmenu, creditswindow, additionalmenu, weaponwindowclass; var () class playerwindow; /* The following MUST be assigned in a childclass... maps: list maps to be filtered out (43 is the amount in Unreal and presumably the maximum amount ever found in an SP episode....) I added 1 as it needs to be done to not overload the array, but the maximum amount of maps allowed IS 43!! Use the .UNR extension!!! include all maps played and the flyby (if applicable) */ var () name maps[44]; /* author: The Author's Name (for a true mod, I'd recommend a team name i.e DeCyber for Legacy, Epic/Digital Extremes for Unreal, and Team Vortex for Operation: Na Pali or whatever the hell they call it (ironically enough I'm on that team). Title: The Packs Title flyby: If your map pack has a flyby included (right now only Legacy, Ballad of Ash, and Unreal) included this variable. If not don't include it in the defaults basedir: if map is one of those screwy ones we set the base dir here..... */ var () string Author, Title, FlyBy, basedir; //The screenshot wanted for the pack.... obvious what this is for...... you need to say packscreenshot=Texture'whatever' for this to work. I HIGHLY recommend you put in an #exec texture import in your map list and have the defualts go to it. Or it CAN always default to yourlevelname.screenshot var () texture Screenshot; //is loading notification relevent to pack? (right now for TV it is) var () bool loadrelevent; //bloaded: if the load is relevent, then this will change upon loading games..... a gametype or something is responsible for switching it off...... not meant to be set by a pack.... var config bool bLoaded; i e-// ============================================================ // oldskool.OldSkoolOptionsMenu: To call new player setup, weapon priorities, and the configuration..... // ============================================================ class OldSkoolOptionsMenu expands UmenuOptionsMenu; var UWindowPulldownMenuItem Oldconfig; var localized string OldconfigName; //possibility for future..... var localized string Oldconfighelp; var localized string advancedname; var localized string advancedhelp; function Created() { Super(UwindowPulldownMenu).Created(); Preferences = AddMenuItem(PreferencesName, None); Player = AddMenuItem(PlayerMenuName, None); Prioritize = AddMenuItem(PrioritizeName, None); AddMenuItem("-", None); Oldconfig = AddMenuItem(OldconfigName, None); Advanced = AddMenuItem(AdvancedName, None); AddMenuItem("-", None); Desktop = AddMenuItem(DesktopName, None); Desktop.bChecked = Root.Console.ShowDesktop; } function ExecuteItem(UWindowPulldownMenuItem I) { local class packclass; if (class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType!="Custom"&&class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType!="") packclass=Class(DynamicLoadObject(class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType, class'Class')); switch (I) { case Preferences: ShowPreferences(); break; case Prioritize: // Create prioritize weapons dialog. if ((GetLevel().Game.Isa('SinglePlayer2'))&&(class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType!="Custom")) Root.CreateWindow(PackClass.default.WeaponWindowClass, 100, 100, 200, 200, Self, True); else Root.CreateWindow(WeaponPriorityWindowClass, 100, 100, 200, 200, Self, True); break; case Oldconfig: // Create the oldskoolconfiguration stuff. dynamic loading to reduce startup time....... Root.CreateWindow(class(DynamicLoadObject("oldskool.OldskoolConfigWindow", class'class')) , 100, 100, 200, 200, Self, True); break; case Desktop: // Toggle show desktop. Desktop.bChecked = !Desktop.bChecked; Root.Console.ShowDesktop = !Root.Console.ShowDesktop; Root.Console.bNoDrawWorld = Root.Console.ShowDesktop; Root.Console.SaveConfig(); break; case Player: // Create player dialog. PlayerSetup(); break; case Advanced: //advanced options.... Root.GetPlayerOwner().ConsoleCommand( "preferences"); break; } Super(UwindowPulldownMenu).ExecuteItem(I); //as things are changed........ } function Select(UWindowPulldownMenuItem I) { switch (I) { case Oldconfig: oldskoolMenuBar(GetMenuBar()).SetHelp(OldconfigHelp); break; case Advanced: oldskoolMenuBar(GetMenuBar()).SetHelp(AdvancedHelp); break; } Super.Select(I); } i b // ============================================================ // OldSkool.OldSkoolNewgamewindow: more or less the botmatch window..... // ============================================================ class OldSkoolNewgamewindow expands UMenuFramedWindow; function Created() { bStatusBar = False; bSizable = False; Super.Created(); SetSizePos(); } function SetSizePos() { if(Root.WinHeight < 290) SetSize(Min(Root.WinWidth-10, 520) , 220); else SetSize(Min(Root.WinWidth-10, 520), 270); WinLeft = Root.WinWidth/2 - WinWidth/2; WinTop = Root.WinHeight/2 - WinHeight/2; } function ResolutionChanged(float W, float H) { SetSizePos(); Super.ResolutionChanged(W, H); } i mU// ============================================================ // oldskool.oldskoolRootwindow: The main window..... // didn't want it to extend umenu root window, but was forced to, for RA compatibility....... // ============================================================ class oldskoolRootwindow expands UMenuRootWindow config(oldskool); //load the nullmusic into package #exec OBJ LOAD FILE="..\music\nullmusic.umx" PACKAGE="olroot" //main vars for backrounds and musics var config string Backround; //the backround & the music we are going to play...... var config string musicclass; var config bool force; //force music var config int track; //track selected (for CD's or songs with multiple tracks) var config bool cdused; var config string savedroot; //the last rootwindow that was used. var config bool bscoreboard; //for notifies to spawn. var config bool bhud; var replicationinfo CRI; //CSHP timer. var float reptimer; var int oldtrack; var ticky ticky; var bool bswaptrack; //music bug related vars var float swaptime; //var vool cshpcheck; function Created() { Super(UwindowRootWindow).Created(); if (ticky==None){ //music ticker..... ticky=getEntryLevel().spawn (class'olroot.ticky'); ticky.root=self;} //set me... StatusBar = UMenuStatusBar(CreateWindow(class'Umenu.UMenuStatusBar', 0, 0, 50, 16)); StatusBar.HideWindow(); MenuBar = UmenuMenuBar(CreateWindow(class'olroot.oldskoolMenuBar', 50, 0, 500, 16)); BetaFont = Font(DynamicLoadObject("UWindowFonts.UTFont40", class'Font')); Resized(); oldtrack=3; } function Paint(Canvas C, float MouseX, float MouseY) { local int XOffset, YOffset; local float W, H; local class bg; if(Console.bNoDrawWorld) { DrawStretchedTexture(C, 0, 0, WinWidth, WinHeight, Texture'MenuBlack'); if (Console.bBlackOut) return; bg=class(Dynamicloadobject(Backround, class'class')); if (bg!=none) bg.static.drawbackground(self,c); //now draw background (the function allows customized functions, as well as OSX support) } } function notifyafterlevelchange(){ //allow music to change local playerpawn o; o=Console.ViewPort.Actor; tick(0.0); if (getlevel().netmode==nm_client) //CSHP notifiers! reptimer=0.1; if (bhud) getlevel().spawn(class(dynamicloadobject("oldskool.oldhudNotify",class'class'))); if (bScoreBoard) getlevel().spawn(class(dynamicloadobject("oldskool.oldboardNotify",class'class'))); if (ticky==none){ //may have been nuked by CSHP ticky=getEntryLevel().spawn (class'olroot.ticky'); ticky.root=self;} } function Tick(float delta) { //actual music changer..... (not an actor, thus isn't REALLY a tick...... ) local playerpawn o; local byte cdtrack; local pawn other; local string musiclocal; local replicationinfo RI; //CSHP super.tick(delta); //for quitting if (reptimer!=0.0){ reptimer+=delta; if (cri!=none) cshpdetected(cri); else{ foreach console.viewport.actor.childactors(class'replicationinfo',RI){ if (ri.class.name=='CheatRI'){ cshpdetected(ri); break;} } } if (reptimer>15) //no CSHP found in 15 seconds. reptimer=0.0; } if (bswaptrack){ swaptime+=delta; if (swaptime>=0.5){ swaptime=0.0; bswaptrack=false; console.viewport.actor.ClientSetMusic(Music(DynamicLoadObject(musicclass, class'music')), byte(track), cdtrack, MTRAN_Fade);} else return;} o=Console.ViewPort.Actor; //screw getplayerowner() :D //cdused=bool(o.ConsoleCommand("get ini:Engine.Engine.AudioDevice UseCDMusic")); if ((force&&o!=none&&o.myhud!=none&&!o.myhud.Isa('oldskoolhud')&&!o.myhud.Isa('intronullhud')) || cdused|| o.song==None || string(o.song)~="utmenu23.utmenu23"){ //check if music should be allowed to change... If (cdused){ Musiclocal="olroot.null"; cdtrack=byte(track);}//make it stay as null music...... else{ musiclocal=musicclass; cdtrack=255;} //stop cd music.... if ((cdused&&int(o.cdtrack)!=track)||(!cdused&&(!(string(o.song)~=musiclocal))||int(o.songSection)!=track)){ //check if it's already set.. if (musiclocal=="olroot.null"||!messedsong()){ oldtrack=track; o.ClientSetMusic(Music(DynamicLoadObject(musiclocal, class'music')), byte(track), cdtrack, MTRAN_Fade);} else{ o.ClientSetMusic(Music(DynamicLoadObject(musiclocal, class'music')), 0, cdtrack, MTRAN_Fade); bswaptrack=true;}} //actually set it (note: server has authority over clientsetmusic, yet it's only called when the playerpawn enter's so that's not a big deal.... } } function cshpdetected(replicationinfo cshp){ //handle CSHP stuff local int i; local string temp; //i=cshp.GetPropertyText(bsimple); //cshp.setpropertytext( temp=cshp.getpropertytext("PackageList"); if (instr(temp,"olroot?oldskool?")==-1){ cshp.setpropertytext("PackageList","olroot?oldskool?"$temp); //load olroot into allowed packages. cshp.setpropertytext("PackageCnt",string(int(cshp.getpropertytext("PackageCnt"))+2));} //add 1 to package count. //cshp.disable('tick'); //reptimer=0.0; cri=cshp; } function bool messedsong(){ //is song screwed? (some songs at track 0 are messed up. if (track==0||(oldtrack==0&&string(console.viewport.actor.Song.class)~=musicclass)) //0 track works fine. return false; if (musicclass=="utemple.utemple"||musicclass=="unreal4.unreal4"||musicclass=="nali.nali"||musicclass=="skytwn.skytwn") return true; return false; } i L-// ============================================================ // OldSkool.OldSkoolScreenshotCW: so that the SP stuff is read properly..... // ============================================================ class OldSkoolScreenshotCW expands UMenuScreenshotCW; function SetMap(string MapName) { local int i; local LevelSummary L; log("reading from a map"); i = InStr(Caps(MapName), ".UNR"); if(i != -1) MapName = Left(MapName, i); Screenshot = Texture(DynamicLoadObject(MapName$".Screenshot", class'Texture')); L = LevelSummary(DynamicLoadObject(MapName$".LevelSummary", class'LevelSummary')); //I killed the if thing as we want this info showing regardless of if there is a screenshot or not... // Unreal I levels don't have a level summary, but UT does... If (L != None){ MapTitle = "An Unreal Tournament Map"; MapAuthor = L.Title; IdealPlayerCount = L.Author; } else{ MapTitle = "An Unreal 1 Map"; MapAuthor = "OldSkool cannot read level"; IdealPlayerCount = "information from Unreal Maps"; } } //for use with setting the MapPack stuff function SetPack(string PackName) { local int i; local MapPack L; local class PackClass; //load the screeny from the pack. No accessed nones will occur unless some total dumbass wrote the pack... PackClass=Class(DynamicLoadObject(Packname, class'class')); //was going to make this direct but for some stupid reason it wasn't reading the texture correctly :( Screenshot = Packclass.default.Screenshot; //load all this junk from mappack... MapTitle = Packclass.default.Title; MapAuthor = Packclass.default.Author; IdealPlayerCount = ""; } //gotto stop the screenshot != none from killing everything.... function Paint(Canvas C, float MouseX, float MouseY) { local float X, Y, W, H; DrawStretchedTexture(C, 0, 0, WinWidth, WinHeight, Texture'BlackTexture'); if(Screenshot != None) { W = Min(WinWidth, Screenshot.USize); H = Min(WinHeight, Screenshot.VSize); if(W > H) W = H; if(H > W) H = W; X = (WinWidth - W) / 2; Y = (WinHeight - H) / 2; C.DrawColor.R = 255; C.DrawColor.G = 255; C.DrawColor.B = 255; DrawStretchedTexture(C, X, Y, W, H, Screenshot); C.Font = Root.Fonts[F_Normal]; } TextSize(C, IdealPlayerCount, W, H); X = (WinWidth - W) / 2; Y = WinHeight - H*2; ClipText(C, X, Y, IdealPlayerCount); if(MapAuthor != "") { TextSize(C, MapAuthor, W, H); X = (WinWidth - W) / 2; Y = WinHeight - H*3; ClipText(C, X, Y, MapAuthor); } if(MapTitle != "") { TextSize(C, MapTitle, W, H); X = (WinWidth - W) / 2; Y = WinHeight - H*4; ClipText(C, X, Y, MapTitle); } } i N*// ============================================================ // oldskool.oldskoolmenubar: Menubar for OldSkool.... // ============================================================ class oldskoolmenubar expands UMenuMenuBar config(oldskool); var UWindowPulldownMenu options; function Created() { local Class GameUMenuType; local Class MultiplayerUMenuType; local Class OptionsUMenuType; local string GameUMenuName; local string MultiplayerUMenuName; local string OptionsUMenuName; Super(Uwindowmenubar).Created(); bAlwaysOnTop = True; GameItem = AddItem(GameName); Game = GameItem.CreateMenu(class'olroot.OldSkoolGameMenu'); MultiplayerItem = AddItem(MultiplayerName); if(GetLevel().Game != None) MultiplayerUMenuName = GetLevel().Game.Default.MultiplayerUMenuType; else MultiplayerUMenuName = MultiplayerUMenuDefault; MultiplayerUMenuType = Class(DynamicLoadObject(MultiplayerUMenuName, class'Class')); Multiplayer = MultiplayerItem.CreateMenu(MultiplayerUMenuType); OptionsItem = AddItem(OptionsName); Options = OptionsItem.CreateMenu(class'olroot.OldSkoolOptionsMenu'); StatsItem = AddItem(StatsName); Stats = StatsItem.CreateMenu(class'Umenu.UMenuStatsMenu'); ToolItem = AddItem(ToolName); Tool = ToolItem.CreateMenu(class'Umenu.UMenuToolsMenu'); if(LoadMods()) { ModItem = AddItem(ModName); Mods = UMenuModMenu(ModItem.CreateMenu(class(DynamicLoadObject(ModMenuClass, class'class')))); Mods.SetupMods(ModItems); } HelpItem = AddItem(HelpName); Help = HelpItem.CreateMenu(class'olroot.OldSkoolHelpMenu'); OldSkoolHelpMenu(Help).Context.bChecked = ShowHelp; if (ShowHelp) { if(OldSkoolRootWindow(Root) != None) if(OldSkoolRootWindow(Root).StatusBar != None) OldSkoolRootWindow(Root).StatusBar.ShowWindow(); } bShowMenu = True; Spacing = 12; } function SetHelp(string NewHelpText) { if(OldSkoolRootWindow(Root) != None) if(OldSkoolRootWindow(Root).StatusBar != None) OldSkoolRootWindow(Root).StatusBar.SetHelp(NewHelpText); } function HideWindow() { if(OldSkoolRootWindow(Root) != None) if(OldSkoolRootWindow(Root).StatusBar != None) OldSkoolRootWindow(Root).StatusBar.HideWindow(); Super(UwindowMenubar).HideWindow(); } function ShowWindow() { if (ShowHelp) { if(OldSkoolRootWindow(Root) != None) if(OldSkoolRootWindow(Root).StatusBar != None) OldSkoolRootWindow(Root).StatusBar.ShowWindow(); } Super(UwindowMenuBar).ShowWindow(); } i R€@i i iN// ============================================================ // oldskool.OldSkoolGameMenu: new game menu..... // ============================================================ class OldSkoolGameMenu expands Uwindowpulldownmenu; var UWindowPulldownMenuItem Load, Save, NewSP, NewGame, LoadGame, Botmatch, Quit, ReturnToGame; var localized string NewSPName; //possible future potential..... var localized string NewSPHelp; var localized string LoadName; var localized string SaveName; var localized string QuitText; var class packclass; var UWindowMessageBox ConfirmQuit; function Created() { Super.Created(); // Add menu items. NewGame = AddMenuItem(class'utmenu.utgamemenu'.default.NewGameName, None); Botmatch = AddMenuItem(class'utmenu.utgamemenu'.default.BotmatchName, None); AddMenuItem("-", None); NewSP = AddMenuItem(NewSPName, None); Load = AddMenuItem(LoadName, None); Save = AddMenuItem(SaveName, None); AddMenuItem("-", None); LoadGame = AddMenuItem(class'utmenu.utgamemenu'.default.LoadGameName, None); ReturnToGame = AddMenuItem(class'utmenu.utgamemenu'.default.ReturnToGameName, None); AddMenuItem("-", None); Quit = AddMenuItem(class'utmenu.utgamemenu'.default.QuitName, None); } function ShowWindow() { Super.ShowWindow(); ReturnToGame.bDisabled = GetLevel().Game != None && GetLevel().Game.IsA('UTIntro'); Save.bDisabled = (GetLevel().Game == None || !GetLevel().Game.IsA('SinglePlayer2')) || GetPlayerOwner().Health <= 0 ; } function ExecuteItem(UWindowPulldownMenuItem I) { switch(I) { case NewGame: GetPlayerOwner().ClientTravel( "UT-Logo-Map.unr?Game=Botpack.LadderNewGame", TRAVEL_Absolute, True ); break; case LoadGame: GetPlayerOwner().ClientTravel( "UT-Logo-Map.unr?Game=Botpack.LadderLoadGame", TRAVEL_Absolute, True ); break; case Botmatch: // Create botmatch dialog. Root.CreateWindow(class'oldskoolUTBotmatchWindow', 100, 100, 200, 200, Self, True); //Root.CreateWindow(class'utmenu.UTBotmatchWindow', 100, 100, 200, 200, Self, True); break; case NewSP: // Create new game dialog. Root.CreateWindow(class'olroot.OldSkoolNewGameWindow', 100, 100, 200, 200, Self, True); break; case Load: // Create load game dialog. AnalyzeLoads(); break; case Save: // Create save game dialog. AnalyzeSaves(); break; case Quit: ConfirmQuit = MessageBox(class'utmenu.utgamemenu'.default.QuitTitle, QuitText, MB_YesNo, MR_No, MR_Yes); break; case ReturnToGame: Root.Console.CloseUWindow(); break; } Super.ExecuteItem(I); } function AnalyzeSaves(){ if (class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType!="Custom"&&class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType!="") packclass=Class(DynamicLoadObject(class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType, class'Class')); if (class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType!="Custom") Root.CreateWindow(PackClass.default.savemenu, 100, 100, 200, 200, Self, True); else Root.CreateWindow(class'olroot.OldSkoolSaveGameWindow', 100, 100, 200, 200, Self, True); } function AnalyzeLoads(){ if (class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType!="Custom"&&class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType!="") packclass=Class(DynamicLoadObject(class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType, class'Class')); if ((Getlevel().game!=none&&GetLevel().Game.Isa('SinglePlayer2'))&&(class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType!="Custom")) Root.CreateWindow(PackClass.default.loadmenu, 100, 100, 200, 200, Self, True); else Root.CreateWindow(class'OldSkoolLoadGameWindow', 100, 100, 200, 200, Self, True);} function MessageBoxDone(UWindowMessageBox W, MessageBoxResult Result) { if(W == ConfirmQuit &&Result == MR_Yes) Root.QuitGame(); } function Select(UWindowPulldownMenuItem I) { switch(I) { case NewGame: UMenuMenuBar(GetMenuBar()).SetHelp(class'utmenu.utgamemenu'.default.NewGameHelp); return; case LoadGame: UMenuMenuBar(GetMenuBar()).SetHelp(class'utmenu.utgamemenu'.default.LoadGameHelp); return; case Botmatch: UMenuMenuBar(GetMenuBar()).SetHelp(class'utmenu.utgamemenu'.default.BotmatchHelp); break; case NewSP: UMenuMenuBar(GetMenuBar()).SetHelp(NewSPHelp); return; case Load: UMenuMenuBar(GetMenuBar()).SetHelp(class'umenu.umenugamemenu'.default.LoadHelp); break; case Save: UMenuMenuBar(GetMenuBar()).SetHelp(class'umenu.umenugamemenu'.default.SaveHelp); break; case Quit: UMenuMenuBar(GetMenuBar()).SetHelp(class'umenu.umenugamemenu'.default.QuitHelp); break; case returntogame: UMenuMenuBar(GetMenuBar()).SetHelp(class'utmenu.utgamemenu'.default.returntogameHelp); break; } Super.Select(I); } i S// ============================================================ // oldskool.OldSkoolHelpMenu: To use the PROPER root window (i.e. oldskool root window) // ============================================================ class OldSkoolHelpMenu expands UMenuHelpMenu; function ExecuteItem(UWindowPulldownMenuItem I) { local UmenuMenuBar MenuBar; MenuBar = UmenuMenuBar(GetMenuBar()); switch(I) { case Context: Context.bChecked = !Context.bChecked; MenuBar.ShowHelp = !MenuBar.ShowHelp; if (Context.bChecked) { if(OldSkoolRootWindow(Root) != None) if(OldSkoolRootWindow(Root).StatusBar != None) OldSkoolRootWindow(Root).StatusBar.ShowWindow(); } else { if(OldSkoolRootWindow(Root) != None) if(OldSkoolRootWindow(Root).StatusBar != None) OldSkoolRootWindow(Root).StatusBar.HideWindow(); } MenuBar.SaveConfig(); break; case EpicURL: GetPlayerOwner().ConsoleCommand("start http://www.epicgames.com/"); break; case SupportURL: GetPlayerOwner().ConsoleCommand("start http://www.gtgames.com/support"); break; case About: if(class'GameInfo'.Default.DemoBuild == 1) Root.CreateWindow(class'UTCreditsWindow', 100, 100, 100, 100); else { GetPlayerOwner().ClientTravel( "UTCredits.unr", TRAVEL_Absolute, False ); Root.Console.CloseUWindow(); } break; } Super(UwindowPullDownMenu).ExecuteItem(I); } i D// ============================================================ // oldskool.OldSkoolSlotClientWindow: Edited Umenu slot client... // ============================================================ class OldSkoolSlotClientWindow expands UMenuDialogClientWindow config(oldskool); //why 1000? 50 map packs are possible and with each having 20 saves each...it's called multiplication... note 1000 saves will make the ini PRETTY big.. Save1000.usa BTW is the quicksave...... var globalconfig string SlotNames[1000]; var globalconfig string Packsaves[50]; var localized string MonthNames[12]; var localized string SlotHelp; var UMenuRaisedButton Slots[20]; var globalconfig string quicksavetype; var int q; function Created() { local int ButtonWidth, ButtonLeft, ButtonTop, I, A, B; Super.Created(); ButtonWidth = WinWidth - 60; ButtonLeft = (WinWidth - ButtonWidth)/2; for (I=0; I<20; I++) { ButtonTop = 35 + 25*I; Slots[I] = UMenuRaisedButton(CreateControl(class'UMenuRaisedButton', ButtonLeft, ButtonTop, ButtonWidth, 1)); Slots[I].SetHelpText(SlotHelp); } } function BeforePaint(Canvas C, float X, float Y) { local int ButtonWidth, ButtonLeft, I; ButtonWidth = WinWidth - 60; ButtonLeft = (WinWidth - ButtonWidth)/2; for (I=0; I<20; I++) { Slots[I].SetSize(ButtonWidth, 1); Slots[I].WinLeft = ButtonLeft; } } i E// ============================================================ // oldskool.OldSkoolLoadGameScrollClient: calls the actual (edited) client.... // ============================================================ class OldSkoolLoadGameScrollClient expands UWindowScrollingDialogClient; function Created() { ClientClass = class'OldSkoolLoadGameClientWindow'; Super.Created(); } i h// ============================================================ // oldskool.OldSkoolLoadGameWindow: The Window... // ============================================================ class OldSkoolLoadGameWindow expands UMenuLoadGameWindow; function Created() { //if (ownerwindow!=none) bStatusBar = False; bSizable = False; Super(UwindowFramedWindow).Created(); if (Root.WinWidth < 800) { SetSize(370, 200); //UMenuLoadGameClientWindow(ClientArea).SetScrollable(true); } else { SetSize(370, 590); } WinLeft = Root.WinWidth/2 - WinWidth/2; WinTop = Root.WinHeight/2 - WinHeight/2; //if (ownerwindow==none) //if the hud called it... bleaveonscreen=true; } function Close(optional bool bByParent) { Super.Close(bByParent); if (!ownerwindow.isa('oldskoolgamemenu')){ //if the hud called it... Root.Console.bQuickKeyEnable = False; Root.Console.CloseUWindow();} } i `Ž// ============================================================ // oldskool.OldSkoolLoadGameClientWindow: Load the game... // ============================================================ class OldSkoolLoadGameClientWindow extends OldSkoolSlotClientWindow; var UMenuRaisedButton RestartButton; //Pack vars... var UWindowComboControl PackCombo; var localized string PackHelp; var string Packs[50]; var int MaxPacks; var int P; function Created() { local int I, j, Selection, A, B; local class TempClass; local string TempPack, NextPack; local string TempPacks[50]; local bool bFoundSavedMapPack, bAlreadyHave; local int ButtonWidth, ButtonLeft, ButtonTop; local int CenterWidth, CenterPos; Super.Created(); DesiredWidth = 350; DesiredHeight = 575; // Mappacks CenterWidth = (WinWidth/4)*3; CenterPos = (WinWidth - CenterWidth)/2; PackCombo = UWindowComboControl(CreateControl(class'UWindowComboControl', CenterPos, 10, CenterWidth, 1)); PackCombo.SetButtons(True); PackCombo.SetText("Map Pack:"); PackCombo.SetHelpText(PackHelp); PackCombo.SetFont(F_Normal); PackCombo.SetEditable(False); // Add all map packs. NextPack = GetPlayerOwner().GetNextInt("MapPack", 0); //Custom has to be set to 0.... while (NextPack != "") { TempClass = Class(DynamicLoadObject(NextPack, class'Class')); //is the map pack valid? Note: there is a potential bug here, if a map is called vortex2li for instance, but there was no vortex2, it would still be considered valid, but I doubt this would ever happen..... if( GetPlayerOwner().GetMapName(string(TempClass.default.maps[0]), "", 0) != ""){ TempPacks[i] = NextPack; i++; } j++; //when the loop is complete P will be set to the same index that the custom Maps thingy is... p=i; NextPack = GetPlayerOwner().GetNextInt("MapPack", j); } // Fill the control. for (i=0; i<50; i++) { if (TempPacks[i] != "") { Packs[MaxPacks] = TempPacks[i]; if ( !bFoundSavedMapPack && (Packs[MaxPacks] ~= class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType) ) { bFoundSavedMapPack = true; Selection = MaxPacks+1; } TempClass = Class(DynamicLoadObject(Packs[MaxPacks], class'Class')); PackCombo.AddItem(TempClass.Default.Title); } MaxPacks++; } PackCombo.AddItem("Custom Map Saves"); If (Selection==0) Selection=P; else //reduce it by one... Selection--; PackCombo.SetSelectedIndex(Selection); //save loading..... if (!(class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType ~= "custom")){ for (A=1; A<50; A++){ //unless the INI is corrupt the "" are empty classes...... if ((class'olroot.oldskoolslotclientwindow'.default.Packsaves[A]~=class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType) || (class'olroot.oldskoolslotclientwindow'.default.Packsaves[A]=="")) q=A; if (q != 0) break; //stops for? } If (class'olroot.oldskoolslotclientwindow'.default.Packsaves[Q]==""){ class'olroot.oldskoolslotclientwindow'.default.Packsaves[Q]=class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType; /*class'olroot.oldskoolslotclientwindow'.static.staticSaveConfig();*/} } //now we load the save labels........... (wow, what big math I use :D) A is the names (range 0 to 999) B is the actual slot (range 0 to 19) for (A=(20*q); A<(20*Q+20); A++){ If (class'olroot.oldskoolslotclientwindow'.default.SlotNames[A] != "") Slots[B].SetText(class'olroot.oldskoolslotclientwindow'.default.SlotNames[A]); else Slots[B].SetText("..Empty.."); b++; } //restart stuff ButtonWidth = WinWidth - 60; ButtonLeft = (WinWidth - ButtonWidth)/2; ButtonTop = 25 + 25*21; RestartButton = UMenuRaisedButton(CreateControl(class'UMenuRaisedButton', ButtonLeft, ButtonTop, ButtonWidth, 1)); RestartButton.SetText("Restart"@GetLevel().Title); RestartButton.SetHelpText("Press to restart the current level."); if (Getlevel().Game==None||!GetLevel().Game.IsA('SinglePlayer2')){ RestartButton.SetText("QuickSave"); RestartButton.SetHelpText("Press to load your quicksave."); if (class'olroot.OldSkoolSlotClientWindow'.default.quicksavetype=="") Restartbutton.HideWindow(); } } function BeforePaint(Canvas C, float X, float Y) { local int ButtonWidth, ButtonLeft, I; local int CenterWidth, CenterPos; Super.BeforePaint(C, X, Y); ButtonWidth = WinWidth - 60; ButtonLeft = (WinWidth - ButtonWidth)/2; CenterWidth = (WinWidth/4)*3; CenterPos = (WinWidth - CenterWidth)/2; RestartButton.SetSize(ButtonWidth, 1); RestartButton.WinLeft = ButtonLeft; PackCombo.SetSize(CenterWidth, 1); PackCombo.WinLeft = CenterPos; PackCombo.EditBoxWidth = 150; } function PackChanged() { local int CurrentPack, A, B; //save loading..... Q=0; CurrentPack = PackCombo.GetSelectedIndex(); if (!(PackCombo.GetValue() ~= "custom map saves")){ for (A=1; A<50; A++){ //unless the INI is corrupt the "" are empty classes...... (loading can build the P too.... if ((class'olroot.oldskoolslotclientwindow'.default.Packsaves[A]==Packs[CurrentPack]) || (class'olroot.oldskoolslotclientwindow'.default.Packsaves[A]=="")) q=A; //I haven't fully understood break... I'm too lazy to recompile if it fails...... break if q assigned... if (q != 0) break; } If (class'olroot.oldskoolslotclientwindow'.default.Packsaves[Q]==""){ class'olroot.oldskoolslotclientwindow'.default.Packsaves[Q]=class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType; }} //now we load the save labels........... (wow, what big math I use :D) A is the names (range 0 to 999) B is the actual slot (range 0 to 19) for (A=(20*q); A<(20*Q+20); A++){ If (class'olroot.oldskoolslotclientwindow'.default.SlotNames[A] != "") Slots[B].SetText(class'olroot.oldskoolslotclientwindow'.default.SlotNames[A]); else Slots[B].SetText("..Empty.."); b++; }} function ClosePressed(optional bool bByParent) { local UWindowWindow Prev, Child; for(Child = LastChildWindow;Child != None;Child = Prev) { Prev = Child.PrevSiblingWindow; Child.Close(True); } HideWindow(); ParentWindow.Close(bByParent); Root.Console.CloseUWindow(); } function Notify(UWindowDialogControl C, byte E) { local int I, CurrentPack; local int Selection; local class packclass; Super.Notify(C, E); switch(E) { case DE_Change: PackChanged(); break; case DE_Click: if ( C == RestartButton ) { if (GetLevel().Game.IsA('SinglePlayer2')) Root.GetPlayerOwner().ReStartLevel(); else { CurrentPack = PackCombo.GetSelectedIndex(); if (class'olroot.OldSkoolSlotClientWindow'.default.quicksavetype ~= "Custom") PackClass = Class(DynamicLoadObject(class'olroot.OldSkoolSlotClientWindow'.default.quicksaveType, class'Class')); if ((packclass != None)&&(packclass.default.loadrelevent)) { //a gameinfo should turn this off..... packclass.default.bLoaded = true; packclass.static.StaticSaveConfig(); } //to fix the stupid loading bug..... hopfully travel_absolute is on and the second thing is set to false by default... (damn native funtions :() //the loading is so screwed up that the \ has to be used twice (don't ask why...) //Root.GetPlayerOwner().ConsoleCommand( "open ..\\save\\save1000.usa"); GetPlayerOwner().ClientTravel( "?load=1000", TRAVEL_Absolute, false); } ClosePressed(); //closes u-window and DOESN'T save configs...... return; } else if ( UMenuRaisedButton(C).Text ~= "..Empty.." ) { return; } else{ for (I=0; I<20; I++) { if (C == Slots[I]) Selection = Q*20+I; } CurrentPack = PackCombo.GetSelectedIndex(); if (PackCombo.GetValue() != "Custom Map Saves") { class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType = Packs[CurrentPack]; PackClass = Class(DynamicLoadObject(class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType, class'Class')); } else class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType = "Custom"; class'olroot.OldSkoolNewGameClientWindow'.static.StaticSaveConfig(); //to fix the stupid loading bug..... hopfully travel_absolute is on and the second thing is set to false by default... (damn native funtions :() //the loading is so screwed up that the \ has to be used twice (don't ask why...) if ((packclass != None)&&(packclass.default.loadrelevent)) { packclass.default.bLoaded = true; packclass.static.StaticSaveConfig(); } //Root.GetPlayerOwner().ConsoleCommand( "open ..\\save\\save"$Selection$".usa"); GetPlayerOwner().ClientTravel( "?load="$Selection, TRAVEL_Absolute, false); ClosePressed();} break; } } i V5// ============================================================ // oldskool.OldSkoolSaveGameClientWindow: The modified save game window..... // ============================================================ class OldSkoolSaveGameClientWindow extends OldSkoolSlotClientWindow; //var OldSkoolNewGameClientWindow Classholder; var int q; //default tells Legacy about oldskool version. var string skills[4]; function created(){ local int a,b; super.created(); q=0; //reinitialize. DesiredWidth = 350; DesiredHeight = 555; //save loading..... if (!(class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType ~= "custom")){ for (A=1; A<50; A++){ //unless the INI is corrupt the "" are empty classes...... if ((class'olroot.oldskoolslotclientwindow'.default.Packsaves[A]~=class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType) || (class'olroot.oldskoolslotclientwindow'.default.Packsaves[A]=="")) q=A; //I haven't fully understood break... I'm too lazy to recompile if it fails...... break if q assigned... if (q != 0) break; } If (class'olroot.oldskoolslotclientwindow'.default.Packsaves[Q]==""){ class'olroot.oldskoolslotclientwindow'.default.Packsaves[Q]=class'olroot.oldskoolnewgameclientwindow'.default.SelectedPackType; class'olroot.oldskoolslotclientwindow'.Static.staticSaveConfig();} } //now we load the save labels........... (wow, what big math I use :D) A is the names (range 0 to 999) B is the actual slot (range 0 to 19) for (A=(20*q); A<(20*Q+20); A++){ If (class'olroot.oldskoolslotclientwindow'.default.SlotNames[A] != "") Slots[B].SetText(class'olroot.oldskoolslotclientwindow'.default.SlotNames[A]); else Slots[B].SetText("..Empty.."); b++; } } function ClosePressed(optional bool bByParent) { local UWindowWindow Prev, Child; for(Child = LastChildWindow;Child != None;Child = Prev) { Prev = Child.PrevSiblingWindow; Child.Close(True); } HideWindow(); ParentWindow.Close(bByParent); Root.Console.CloseUWindow(); } function Notify(UWindowDialogControl C, byte E) { local int I; local int Selection; Super.Notify(C, E); switch(E) { //should never get here, but just in case.... case DE_Click: if ( GetPlayerOwner().Health <= 0 ) return; if ( GetLevel().Minute < 10 ) UMenuRaisedButton(C).SetText(GetLevel().Title@"on"@skills[GetLevel().Game.Difficulty]@GetLevel().Hour$"\:0"$GetLevel().Minute$" "$MonthNames[GetLevel().Month - 1]@GetLevel().Day); else UMenuRaisedButton(C).SetText(GetLevel().Title@"on"@skills[GetLevel().Game.Difficulty]@GetLevel().Hour$"\:"$GetLevel().Minute@MonthNames[GetLevel().Month - 1]@GetLevel().Day); /*why the hell is this here???????????? I don't even think it is implamented... but I'll leave it, just for Beta testing... if ( GetLevel().NetMode != NM_Standalone ) UMenuRaisedButton(C).SetText("Net:"$UMenuRaisedButton(C).Text); */ log ("Q= "$Q); for (I=0; I<20; I++) if (C == Slots[I]) Selection = Q*20+I; class'olroot.oldskoolslotclientwindow'.default.SlotNames[Selection] = UMenuRaisedButton(C).Text; class'olroot.oldskoolslotclientwindow'.static.staticSaveConfig(); Root.GetPlayerOwner().ConsoleCommand("SaveGame "$Selection); ClosePressed(); break; } } i x// ============================================================ // oldskool.OldSkoolSaveGameScrollClient: put your comment here // Created by UClasses - (C) 2000 by meltdown@thirdtower.com // ============================================================ class OldSkoolSaveGameScrollClient expands UWindowScrollingDialogClient; function Created() { ClientClass = class'OldSkoolSaveGameClientWindow'; Super.Created(); } i a // ============================================================ // oldskool.OldSkoolSaveGameWindow: the window... // ============================================================ class OldSkoolSaveGameWindow expands UMenuSaveGameWindow; function Created() { bStatusBar = False; bSizable = False; Super(UmenuFramedWindow).Created(); if (Root.WinWidth < 800) { SetSize(370, 200); //UMenuSaveGameClientWindow(ClientArea).SetScrollable(true); } else { SetSize(360, 575); } WinLeft = Root.WinWidth/2 - WinWidth/2; WinTop = Root.WinHeight/2 - WinHeight/2; } i Î8å.—¦ —” ÓŒCÛŒC-î'8.0¦ 0” O.J¦ J” ãOâ8K.“ “¯”?,8¯ ?,@B€AR.“ “¯”?,j¯ ?,@B€AH.“ “¯”?,œ¯ ?,@B€AR ·ÈK ÔÊH Co-opÎ i ÒOI1yA´è”?-Ü(ùUùÈB”” ¯ ?,K¸¯”?,4K쯠?,H¸¯”?,˜H쯠?,R¸¯”?,fR쯠?, i ÂPf.Hž WGSãf?6ÂÍõ”¯ ?6ÂÍõG i Zi i T€i i G€i i cÄ// ============================================================ // OldSkool.OldSkoolmapsClientWindow: mostly an edited Umenu and UTmenu start match window...... // Pretty complex stuff here... // no extending becuase 80%+ of the functions are changed around... so match that supers are useless too..... // ============================================================ class OldSkoolmapsClientWindow expands UMenuDialogClientWindow Config (OldSkool); var bool Initialized; var OldSkoolNewGameClientWindow BotmatchParent; //used to record the number that the "other maps" is set to... var int P; // MapPacks var UWindowComboControl PackCombo; var localized string PackText; var localized string PackHelp; var string Packs[50]; var int MaxPacks; //filters out maps found it packs...... var string filtermaps[512]; // Difficulty (more or less ripped from umenunewgameclientwindow) var UWindowComboControl SkillCombo; var UMenuLabelControl SkillLabel; // Map (if not a map pack) var UWindowComboControl MapCombo; // flyby button (only for mappacks w/ flyby's...Unreal/Legacy/Ballad of Ash) also used for refreshing... a duel function button :D duel function buttons are copyrighted 2000 by UsAaR33. The copyright office has never seen this though. Uhh, All rights reserved. var UWindowSmallButton FlyByButton; var localized string FlyByText; var localized string FlyByHelp; //if true, button is set to refresh. If false it is set to flyby. Notify needs to know this... var bool refreshmode; // credits button (legacy/unreal/teamvortex only right now) var UWindowSmallButton creditsButton; var localized string creditsText; var localized string creditsHelp; //playersetup... var UWindowSmallButton PlayerSetupButton; //strings to save, so next time this won't take so long :D (512 sounds cool, ehh? prob. won't EVER get that amount!!) var globalconfig string LoadedMaps[512]; //first and last maps read..next time it loads, we read from the last map saved and stop at the first map var config string FirstMap, LastMap; //bMapsIterated set true when maps are iterated so won't be called ever again.... var bool bMapsIterated; //bQuickMode variable set in the OldSkool options... with this the menus cache the stuff....... var config bool bQuickMode; function Created() { local int i, j, Selection, c, b; local class TempClass; local string TempPack, NextPack; local string TempPacks[50]; local bool bFoundSavedMapPack, bAlreadyHave; local int ControlWidth, ControlLeft, ControlRight; local int CenterWidth, CenterPos; log ("Map Client Opened"); Super.Created(); DesiredWidth = 270; DesiredHeight = 100; ControlWidth = WinWidth/2.5; ControlLeft = (WinWidth/2 - ControlWidth)/2; ControlRight = WinWidth/2 + ControlLeft; CenterWidth = (WinWidth/4)*3; CenterPos = (WinWidth - CenterWidth)/2; //I'm too lasy to chenge this part around, so it will stay as the master for the screenshot editing BotmatchParent = OldSkoolNewGameClientWindow(GetParent(class'olroot.oldskoolnewgameclientwindow')); //NEVER should happen....... except cause of h4x0rs :D if (BotmatchParent == None) Log("Error: MapsClientWindow without newgamesclient window. Stop hacking these scripts you idiot!!!"); // Mappacks PackCombo = UWindowComboControl(CreateControl(class'UWindowComboControl', CenterPos, 20, CenterWidth, 1)); PackCombo.SetButtons(True); PackCombo.SetText(PackText); PackCombo.SetHelpText(PackHelp); PackCombo.SetFont(F_Normal); PackCombo.SetEditable(False); // Add all map packs. NextPack = GetPlayerOwner().GetNextInt("MapPack", 0); while (NextPack != "") { TempClass = Class(DynamicLoadObject(NextPack, class'Class')); //is the map pack valid? Note: there is a potential bug here, if a map is called vortex2li for instance, but there was no vortex2, it would still be considered valid, but I doubt this would ever happen..... if( GetPlayerOwner().GetMapName(string(TempClass.default.maps[0]), "", 0) != ""){ TempPacks[i] = NextPack; i++; } j++; //when the loop is complete P will be set to the same index that the custom Maps thingy is... p=i; NextPack = GetPlayerOwner().GetNextInt("MapPack", j); } // Fill the control. for (i=0; i<50; i++) { if (TempPacks[i] != "") { b=0; Packs[MaxPacks] = TempPacks[i]; if ( !bFoundSavedMapPack && (Packs[MaxPacks] ~= BotmatchParent.SelectedPackType) ) { bFoundSavedMapPack = true; Selection = MaxPacks; } TempClass = Class(DynamicLoadObject(Packs[MaxPacks], class'Class')); PackCombo.AddItem(TempClass.Default.Title); //builds list of excluded maps while (TempClass.default.maps[b] != ''){ filtermaps[c]=string(TempClass.default.maps[b]); c++; b++;} MaxPacks++; } } PackCombo.AddItem("Custom Maps"); if (BotmatchParent.SelectedPackType~="custom") PackCombo.SetSelectedIndex(p); else PackCombo.SetSelectedIndex(Selection); if (PackCombo.GetSelectedIndex() != P){ BotmatchParent.SelectedPackType = Packs[Selection]; BotmatchParent.SelectedPackClass = Class(DynamicLoadObject(BotmatchParent.SelectedPackType, class'Class')); BotmatchParent.Map = string(BotmatchParent.SelectedPackClass.default.maps[0]);} else BotmatchParent.SelectedPackType = "Custom"; // Map MapCombo = UWindowComboControl(CreateControl(class'UWindowComboControl', CenterPos, 45, CenterWidth, 1)); MapCombo.SetButtons(True); MapCombo.SetText(class'umenu.umenustartmatchclientwindow'.default.MapText); MapCombo.SetHelpText(class'umenu.umenustartmatchclientwindow'.default.MapHelp); MapCombo.SetFont(F_Normal); MapCombo.SetEditable(False); //only iterate maps if maps bar selected, which would ONLY occur if no map packs were valid..... if (PackCombo.GetSelectedIndex() == P){ if (bQuickMode) IterateMapsQuick(BotmatchParent.Map); else IterateMaps(BotmatchParent.Map);} //difficulty: SkillLabel = UMenuLabelControl(CreateWindow(class'UMenuLabelControl', CenterPos, 95, CenterWidth, 1)); SkillCombo = UWindowComboControl(CreateControl(class'UWindowComboControl', CenterPos, 70, CenterWidth, 1)); skillCombo.SetButtons(True); SkillCombo.SetText(class'umenu.umenunewgameclientwindow'.default.SkillText); SkillCombo.SetHelpText(class'umenu.umenunewgameclientwindow'.default.SkillHelp); SkillCombo.SetFont(F_Normal); SkillCombo.SetEditable(False); for (I=0; I<4; I++) SkillCombo.AddItem(class'umenu.umenunewgameclientwindow'.default.Skills[I]); //deathmatch plus difficulty info is irrevelent to this....... Ut intro also gives no dif. level... if (GetLevel().Game.Difficulty <4 && !GetLevel().Game.Isa('DeathMatchPlus')){ SkillCombo.SetSelectedIndex(GetLevel().Game.Difficulty); BotmatchParent.Difficulty=GetLevel().Game.Difficulty;} else{ //defaults at medium BotmatchParent.Difficulty=1; SkillCombo.SetSelectedIndex(1); } if (GetLevel().Game.Difficulty <4&& !GetLevel().Game.Isa('DeathMatchPlus')) SkillLabel.SetText(class'umenu.umenunewgameclientwindow'.default.SkillStrings[GetLevel().Game.Difficulty]); else SkillLabel.SetText(class'umenu.umenunewgameclientwindow'.default.SkillStrings[1]); SkillLabel.Align = TA_Center; // Flyby Button FlyByButton = UWindowSmallButton(CreateControl(class'UWindowSmallButton', CenterPos, 120, 48, 16)); FlyByButton.SetText(FlybyText); FlyByButton.SetFont(F_Normal); FlyByButton.SetHelpText(FlyByHelp); if (PackCombo.GetSelectedIndex() == P){ If (bQuickMode){ FlyByButton.SetText("Refresh"); refreshmode=true; FlyByButton.SetHelpText("Press to refresh the map list. Only needed to be pushed if you have DELETED maps or changed the map paths around.");} else FlyByButton.HideWindow(); } // Credits Button CreditsButton = UWindowSmallButton(CreateControl(class'UWindowSmallButton', CenterPos, 145, 48, 16)); CreditsButton.SetText(CreditsText); CreditsButton.SetFont(F_Normal); CreditsButton.SetHelpText(CreditsHelp); // Player Setup Button (no use really, but Nemo_NX said to add it....) PlayerSetupButton = UWindowSmallButton(CreateControl(class'UWindowSmallButton', CenterPos, 170, 48, 16)); //PlayerSetupButton.Align = TA_Center; PlayerSetupButton.SetText("Player Setup"); PlayerSetupButton.SetFont(F_Normal); PlayerSetupButton.SetHelpText("Select Digital Representation"); //flyby or no flyby????? (custom maps of course are set to refresh or nothing....) if (PackCombo.GetSelectedIndex() != P){ If (BotmatchParent.SelectedPackClass.default.flyby=="") FlyByButton.HideWindow(); else FlyByButton.ShowWindow();} //credits or no credits? if (PackCombo.GetSelectedIndex() != P){ If (BotmatchParent.SelectedPackClass.default.creditswindow==None) CreditsButton.HideWindow(); else CreditsButton.ShowWindow();} //custom maps can't have credits :D else CreditsButton.HideWindow(); Initialized = true; } //too many maps bog load time down? like me... load 'em quickly!!!!!!!! function IterateMapsQuick(string DefaultMap) { local string NextMap, TestMap, WarningMap; local int Selected, i, k; local bool bfirstload, filtered; if (Firstmap == ""){ Log ("Mapclientwindow: First time load detected"); FirstMap = GetPlayerOwner().GetMapName("", "", 0); bfirstload=true;} //minor changes.. regarding where it stops.... if (!bFirstLoad){ NextMap = LastMap; //by the name... alerts if first map was deleted... WarningMap = LastMap; //add all of the SP maps that are known to exist..... (-1 so it doesn't load the lastmap twice....) MapCombo.Clear(); for(i=0;i < 512;i++) { filtered=false; if (loadedmaps[i]=="")//array count doesn't work right, so we must break when this stops.... break; for (k=0; k loady; if (PackCombo.GetSelectedIndex() == P){ BotmatchParent.Map = MapCombo.GetValue2(); BotmatchParent.screenshotWindow.SetMap(BotmatchParent.Map); MapCombo.ShowWindow(); } else { BotmatchParent.ScreenshotWindow.SetPack(BotmatchParent.SelectedPackType); Mapcombo.HideWindow(); } } function BeforePaint(Canvas C, float X, float Y) //set up size....... { local int ControlWidth, ControlLeft, ControlRight; local int CenterWidth, CenterPos; ControlWidth = WinWidth/2.5; ControlLeft = (WinWidth/2 - ControlWidth)/2; ControlRight = WinWidth/2 + ControlLeft; CenterWidth = (WinWidth/4)*3; CenterPos = (WinWidth - CenterWidth)/2; PackCombo.SetSize(CenterWidth, 1); PackCombo.WinLeft = CenterPos; PackCombo.EditBoxWidth = 150; MapCombo.SetSize(CenterWidth, 1); MapCombo.WinLeft = CenterPos; MapCombo.EditBoxWidth = 150; SkillCombo.SetSize(CenterWidth, 1); SkillCombo.WinLeft = CenterPos; SkillCombo.EditBoxWidth = 90; SkillLabel.SetSize(CenterWidth, 1); SkillLabel.WinLeft = CenterPos; FlybyButton.AutoWidth(C); PlayerSetupbutton.AutoWidth(C); CreditsButton.AutoWidth(C); FlybyButton.WinWidth = Max(FlybyButton.WinWidth, CreditsButton.WinWidth); CreditsButton.WinWidth = FlybyButton.WinWidth; PlayerSetupbutton.WinWidth = FlybyButton.WinWidth*1.5; FlybyButton.WinLeft = (WinWidth - FlybyButton.WinWidth)/2; CreditsButton.WinLeft = (WinWidth - FlybyButton.WinWidth)/2; PlayerSetupbutton.WinLeft = (WinWidth - Playersetupbutton.WinWidth)/2; } function MapChanged() { if (!Initialized) return; BotmatchParent.Map = MapCombo.GetValue(); BotmatchParent.ScreenshotWindow.SetMap(BotmatchParent.Map); } function SkillChanged() { SkillLabel.SetText(class'umenu.umenunewgameclientwindow'.default.SkillStrings[SkillCombo.GetSelectedIndex()]); BotmatchParent.Difficulty= SkillCombo.GetSelectedIndex(); } function PackChanged() { local int CurrentPack, i; local class loady; if (!Initialized) return; CurrentPack = PackCombo.GetSelectedIndex(); if (PackCombo.GetSelectedIndex() != P){ BotmatchParent.SelectedPackType = Packs[CurrentPack]; BotmatchParent.SelectedPackClass = Class(DynamicLoadObject(BotmatchParent.SelectedPackType, class'Class'));} else BotmatchParent.SelectedPackType = "Custom"; if (PackCombo.GetSelectedIndex() == P){ MapCombo.Showwindow(); BotmatchParent.Map = MapCombo.GetValue(); BotmatchParent.ScreenshotWindow.SetMap(BotmatchParent.Map); //only would be true if someone couldn't decide :D CreditsButton.HideWindow(); if (bQuickMode){ if (!bMapsIterated) IterateMapsQuick(BotmatchParent.Map); FlyByButton.SetText("Refresh"); refreshmode=true; FlyByButton.ShowWindow(); FlyByButton.SetHelpText("Press to refresh the map list. Only needed to be pushed if you have DELETED maps.");} else { if (!bMapsIterated) IterateMaps(BotmatchParent.Map); FlyByButton.HideWindow();}} else { BotmatchParent.ScreenshotWindow.SetPack(BotmatchParent.SelectedPackType); MapCombo.HideWindow(); loady= Class(DynamicLoadObject(PackCombo.GetValue(), class'Class')); BotmatchParent.Map = string(BotmatchParent.SelectedPackClass.default.maps[0]); FlyByButton.SetText(FlyByText); FlyByButton.SetHelpText(FlyByHelp); refreshmode=false; //to flyby or to not flyby????? that is the question... :D If (BotmatchParent.SelectedPackClass.default.flyby=="") FlyByButton.HideWindow(); else FlyByButton.ShowWindow(); //credits or no credits? If (BotmatchParent.SelectedPackClass.default.creditswindow==None) CreditsButton.HideWindow(); else CreditsButton.ShowWindow();} } function flyfresh(){ local int i; if (refreshmode){ log ("Refreshing lists... deleting all variables..."); LastMap=""; FirstMap=""; for(i=0;i<512;i++) LoadedMaps[i]=""; MapCombo.Clear(); Iteratemapsquick(BotmatchParent.Map); } else{ BotmatchParent.ParentWindow.Close(); Root.Console.CloseUWindow(); GetPlayerOwner().ClientTravel( BotmatchParent.SelectedPackClass.default.flyby, TRAVEL_Absolute, False );} } function Notify(UWindowDialogControl C, byte E) { Super.Notify(C, E); switch(E) { case DE_Change: switch(C) { case PackCombo: PackChanged(); break; case MapCombo: MapChanged(); break; case SkillCombo: SkillChanged(); break; } break; case DE_Click: switch(C) { case FlyByButton: FlyFresh(); break; case CreditsButton: GetParent(class'UWindowFramedWindow').ShowModal(Root.CreateWindow(BotmatchParent.SelectedPackClass.default.creditswindow, 0, 0, 100, 100, BotmatchParent)); break; case PlayerSetupButton: GetParent(class'UWindowFramedWindow').ShowModal(Root.CreateWindow(class'OldSkoolPlayerWindow', 0, 0, 100, 100, BotmatchParent)); break; } break; } } i ÒQA)Na ¹ÒA ´$A 4RA± EK± ®HÐ §OŽ@¦„žoldskool.coopwindow †ÈBÈB± ÿÿ· ÿÿ i z// ============================================================ // olweapons.oldskoolWeaponPriorityList: lets us fine olweapons. stuff...... // ============================================================ class oldskoolWeaponPriorityList expands UTWeaponPriorityList; function bool ShowThisItem() { return bFound; //always show...... } // oldstuff: // && (Left(WeaponClassName, 8) ~= "Botpack." || Left(WeaponClassName, 10) ~= "OLweapons." || Left(WeaponClassName, 7) ~= "legacy.") i T// ============================================================ // oldskool.oldskoolWeaponPriorityListArea: calls the list class // ============================================================ class oldskoolWeaponPriorityListArea expands UMenuWeaponPriorityListArea; i V]Ahi o~‚rJ*�|custom]pppppp?Game=P?Difficulty=SU?Mutator=U.æ|custom]pppp?Game=oldskool.singleplayer2?Difficulty=SU?Mutator=U.Ð §7Ž(¦JÈBÈB 莣Ÿ!]$( óXAÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2Zµ1ÕQó°Ó:‡_li i i �i YSyæp]ÝHw]*P]à]']P Y�-S è -S i BY// ============================================================ // oldskool.oldskoolWeaponPriorityListBox: calls the new list // ============================================================ class oldskoolWeaponPriorityListBox expands UTWeaponPriorityListBox config(oldskool); var config bool bnewmag; function Created() //reads all weapons { local name PriorityName; local string WeaponClassName; local class WeaponClass; local int WeaponNum, i; local UMenuWeaponPriorityList L; local PlayerPawn P; Super(uwindowlistbox).Created(); SetHelpText(WeaponPriorityHelp); P = GetPlayerOwner(); // Load weapons into the list for(i=0;i< ArrayCount(P.WeaponPriority);i++) //all weapons { PriorityName = P.WeaponPriority[i]; if(PriorityName == 'None' || PriorityName == '') break; L = UMenuWeaponPriorityList(Items.Insert(ListClass)); L.PriorityName = PriorityName; L.WeaponName = "(unk) "$PriorityName; } WeaponNum = 1; WeaponClassName = P.GetNextInt(WeaponClassParent, 0); while( WeaponClassName != "" && WeaponNum < 50 ) { for(L = UMenuWeaponPriorityList(Items.Next); L != None; L = UMenuWeaponPriorityList(L.Next)) { if( string(L.PriorityName) ~= P.GetItemName(WeaponClassName) ) { L.WeaponClassName = WeaponClassName; L.bFound = True; if( L.ShowThisItem() ) { WeaponClass = class(DynamicLoadObject(WeaponClassName, class'Class')); ReadWeapon(L, WeaponClass); } else L.bFound = False; break; } } WeaponClassName = P.GetNextInt(WeaponClassParent, WeaponNum); WeaponNum++; } } function DrawItem(Canvas C, UWindowList Item, float X, float Y, float W, float H) //color change of olweapons and UT's... { if(UMenuWeaponPriorityList(Item).bSelected) { C.DrawColor.r = 0; C.DrawColor.g = 0; C.DrawColor.b = 128; DrawStretchedTexture(C, X, Y, W, H-1, Texture'WhiteTexture'); C.DrawColor.r = 255; C.DrawColor.g = 255; C.DrawColor.b = 255; } else { if ((Left(UMenuWeaponPriorityList(Item).WeaponClassName, 10)) ~= "OLweapons."){ //my weapons.... C.DrawColor.r = 29; C.DrawColor.g = 0; C.DrawColor.b = 147; } else if ((Left(UMenuWeaponPriorityList(Item).WeaponClassName, 7)) ~= "Legacy."){ //Legacy...... C.DrawColor.r = 0; C.DrawColor.g = 147; C.DrawColor.b = 29; } else if ((Left(UMenuWeaponPriorityList(Item).WeaponClassName, 8)) ~= "Botpack."){ //UT weapons C.DrawColor.r = 0; C.DrawColor.g = 0; C.DrawColor.b = 0; } else { //custom weapons..... C.DrawColor.r = 128; C.DrawColor.g = 0; C.DrawColor.b = 0; } } C.Font = Root.Fonts[F_Normal]; ClipText(C, X+1, Y, UMenuWeaponPriorityList(Item).WeaponName); } function ReadWeapon(UMenuWeaponPriorityList L, class WeaponClass) //stuff, so item name different and SMP shows different.... { if (L.WeaponClassName ~= "olweapons.olflakcannon") //morph names..... L.WeaponName = "Unreal I Flak Cannon"; else if (L.WeaponClassName ~= "olweapons.olrifle") L.WeaponName = "Unreal I Sniper Rifle"; else if (L.WeaponClassName ~= "olweapons.olgesbiorifle") L.WeaponName = "Unreal I GES Bio Rifle"; else if (L.WeaponClassName ~= "olweapons.olminigun") L.WeaponName = "Unreal I Minigun"; else if (L.WeaponClassName ~= "olweapons.olsmmag"){ //two forms.... if (bnewmag) L.WeaponName = "SMP 8920"; else L.WeaponName = "SMP 7243";} else L.WeaponName = WeaponClass.default.ItemName; if ((L.WeaponClassName ~= "olweapons.olsmmag")&&bnewmag) //two forms.... L.WeaponMesh = LodMesh'Botpack.MagPick'; else L.WeaponMesh = WeaponClass.default.Mesh; L.WeaponSkin = WeaponClass.default.Skin; UTWeaponPriorityList(L).WeaponDescription = class(WeaponClass).default.WeaponDescription; } function SaveConfigs() { local int i; local UMenuWeaponPriorityList L; local PlayerPawn P; i=0; P = GetPlayerOwner(); for(L = UMenuWeaponPriorityList(Items.Last); L != None && L != Items; L = UMenuWeaponPriorityList(L.Prev)) { P.WeaponPriority[i] = L.PriorityName; i++; } while(i<20) //stop any nones! { P.WeaponPriority[i] = ''; i++; } for (i=0;i<50;i++){ //fix all nones If (p.weaponpriority[i]=='none') p.weaponpriority[i]=''; } P.UpdateWeaponPriorities(); P.SaveConfig(); Super(Uwindowlistbox).SaveConfigs(); } function SelectWeapon() //SMP skinz..... { if(MeshWindow == None) MeshWindow = UMenuWeaponPriorityMesh(GetParent(class'UMenuWeaponPriorityCW').FindChildWindow(class'UMenuWeaponPriorityMesh')); MeshWindow.MeshActor.Mesh = UMenuWeaponPriorityList(SelectedItem).WeaponMesh; MeshWindow.MeshActor.Skin = UMenuWeaponPriorityList(SelectedItem).WeaponSkin; if (uMenuWeaponPriorityList(SelectedItem).WeaponClassName ~= "olweapons.olsmmag"){ //set skinz if (bnewmag) meshwindow.meshactor.multiskins[1]=texture(dynamicloadobject("olweapons.thirdskin",class'texture')); else meshwindow.meshactor.multiskins[1]=texture(dynamicloadobject("olweapons.newmagskin",class'texture'));} else meshwindow.meshactor.multiskins[1]=none; if(Description == None) Description = UWindowDynamicTextArea(GetParent(class'UMenuWeaponPriorityCW').FindChildWindow(class'UWindowDynamicTextArea')); Description.Clear(); Description.AddText(UTWeaponPriorityList(SelectedItem).WeaponDescription); } i x// ============================================================ // oldskool.oldskoolWeaponPriorityCW: client window // ============================================================ class oldskoolWeaponPriorityCW expands UTWeaponPriorityCW; i E// ============================================================ // oldskool.OldskoolWeaponPriorityWindow: main window // ============================================================ class OldskoolWeaponPriorityWindow expands UMenuWeaponPriorityWindow; i ñ\B„Ï ñb i \@i i dj9ßDLúž-oçRefreshing lists... deleting all variables...2;j%x–jj<¥jQ 5(øèŽ£Ÿ !t$( i Li i eZ'¯(E7 �-[ Z  …›  +ZOž †œCustomš  +  8# Ô-O?�-l( Refresh-o'  Z Press to refresh the map list. Only needed to be pushed if you have DELETED maps.ó�-l,  583  Zž  †W%°9 T  N-o(èzt  ÷ &r~* 5 i f@§DM=$  ´×U  i q?ŸnCS �-[  8# i ]y(çæ$XYz;çMapclientwindow: First time load detected;Ÿb%-E'�-E2}2 5%.–-.(¼z<.$%ÿ–$õ|<$J-.'¥$Ã$�-.  <¥�Ÿ b2&�|;çpMapClientWindow.adding: -.(25‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚�|€,Dm�|€,CTF�|€,As-�|€,Dom-�|€,Sw-�|€,RA-�|€,Sftdm-�|€,ut-logo�|€,KOTH-�|€,EOL_�|€,RACE-�|€,Usk8�|€,SH-�|€, CityIntro�|€,JS_�|€,UL-�|€, UTcredits�|€,TDK-�|€,FD-�|€,JB-�|€,UNF- {$%ß–$Õ|p$J.unr-.'¥$¡�-.  €“},<€“},¥Ÿ b&|}2çCritical Error!! First map ever read has been deleted!! Resetting all variables to defaults!!!!2;%–<¥Ù|}2I;�|;E-.(2ì‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚�|€,Dm�|€,CTF�|€,As-�|€,Dom-�|€,Sw-�|€,RA-�|€,Sftdm-�|€,ut-logo�|€,KOTH-�|€,EOL_�|€,RACE-�|€,Usk8�|€,SH-�|€, CityIntro�|€,JS_�|€,UL-�|€, UTcredits�|€,TDK-�|€,FD-�|€,JB-�|€,UNF- {$%––$Œ|p$J.unr-.'¥$XÇ�-.  €“},<€“},¥Ÿ b&E#b 4-l' ú Fy'% i i i @€i i gC,M�7%{Ÿb%{å�|{W-@(‹‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚�|€,Dm�|€,CTF�|€,As-�|€,Dom-�|€,Sw-�|€,RA-�|€,Sftdm-�|€,ut-logo�|€,KOTH-�|€,EOL_�|€,RACE-�|€,Usk8�|€,SH-�|€, CityIntro�|€,JS_�|€,UL-�|€, UTcredits�|€,TDK-�|€,FD-�|€,JB-�|€,UNF- {k%‹–k�|pkJ.unr-@'¥kM¼�-@  €“},Ÿ b&W# 4-l' ú FC'% i ki i €i i ÙnG5 -Ò i €i i l€i i [@ i ÕrE1y?˜@D¬” @C‘D¯¬”?,?@,RD®¬”?,?CA�D¬”?,,^‘D¯”?A, ¾?A€? ¸?^ ÍC ¾?A€? ¸?^ ÍC¾?A€?¸?^Í´B=¾?A€?=¸?^ -E, -E -E ”?úD ”D”” ”,”« ”À? ¸¬¯” ”?,¸¬¯” ”?,,¸¬¯”,”?, i Ôjenk6=¦oš  + f8# ¤83   i h// ============================================================ // oldskool.OldSkoolPlayerMeshClient: the thing that lets the U1models animate // ============================================================ class OldSkoolPlayerMeshClient expands UMenuPlayerMeshClient; function created(){ super.created(); if (string(meshactor.mesh)~="UnrealI.sktrooper") meshactor.drawscale=0.070000; //make it fit :D else meshactor.drawscale=0.100000; } function SetMesh(mesh NewMesh) { MeshActor.bMeshEnviroMap = False; MeshActor.DrawScale = MeshActor.Default.DrawScale; MeshActor.Mesh = NewMesh; if(MeshActor.Mesh != None) { //HASANIM the code never before used (no kidding too....) TRY finding it anywhere besides ACTOR.uc //for normals.... if(MeshActor.HasAnim ('Breath3')) MeshActor.PlayAnim('Breath3', 0.5); //Unreal I humans else if(MeshActor.HasAnim ('Look')) MeshActor.Loopanim('Look', 0.7); //cow else if(MeshActor.HasAnim ('Poop')) MeshActor.Loopanim('Poop'); //anything else that might come in the future... else if(MeshActor.HasAnim ('Breath')) MeshActor.LoopAnim('Breath'); //the final test...... else MeshActor.LoopAnim('All'); } } function AnimEnd(MeshActor MyMesh) { if ( MyMesh.AnimSequence == 'Breath3' ){ if (MyMesh.HasAnim('DuckDnlgfr')&&!MyMesh.HasAnim('alltrue')) //HL model fix (new ones don't need fixing... MyMesh.TweenAnim('breath2', 0.4); else MyMesh.TweenAnim('All', 0.4); } else if (MyMesh.HasAnim('Breath3')) MyMesh.PlayAnim('Breath3', 0.4); } i ] // ============================================================ // olroot.oldskoolPlayerClientWindow: the uhh....playerclient window // ============================================================ class oldskoolPlayerClientWindow expands UTPlayerClientWindow; function Created() { Super(umenudialogclientwindow).Created(); Splitter = UWindowHSplitter(CreateWindow(class'UWindowHSplitter', 0, 0, WinWidth, WinHeight)); Splitter.RightClientWindow = UMenuPlayerMeshClient(Splitter.CreateWindow(class'oldskoolPlayerMeshClient', 0, 0, 100, 100)); Splitter.LeftClientWindow = Splitter.CreateWindow(PlayerSetupClass, 0, 0, 100, 100, OwnerWindow); Splitter.bRightGrow = True; Splitter.SplitPos = 240; } i Vi i ûb.1퇅£-Ĺ”  èJ£-ï žk †…w* k  i }// ============================================================ // oldskool.OldSkoolPlayerWindow: the window that pops up to fix up animations.... // ============================================================ class OldSkoolPlayerWindow expands UMenuPlayerWindow; function BeginPlay() { Super.BeginPlay(); ClientClass = class'OldSkoolPlayerClientWindow'; } i øeh0'e 0h i |G// ============================================================ // OldSkool.OldSkoolNewGameClientWindow: I felt like copying stuff thus all this does is split a main window and the screenshot... // ============================================================ class OldSkoolNewGameClientWindow expands UWindowDialogClientWindow config (OldSkool); var OldSkoolScreenshotCW ScreenshotWindow; var OldSkoolMapsClientWindow Mapwindow; var localized string StartText; var UWindowSmallButton StartButton; var UWindowSmallButton coopButton; var UWindowSmallButton CloseButton; var UWindowHSplitter Splitter; var config string MutatorList; var config string Map, SelectedPackType; var int Difficulty; var class SelectedPackclass; function Created() { Splitter = UWindowHSplitter(CreateWindow(class'UWindowHSplitter', 0, 0, WinWidth, WinHeight)); Splitter.SplitPos = 280; Splitter.MaxSplitPos = 280; Splitter.bRightGrow = True; //screenshot and map split..... ScreenshotWindow = OldSkoolScreenshotCW(Splitter.CreateWindow(class'olroot.OldSkoolScreenshotCW', 0, 0, WinWidth, WinHeight)); Mapwindow = OldSkoolMapsClientWindow(Splitter.CreateWindow(class'olroot.OldSkoolmapsclientwindow', 0, 0, WinWidth, WinHeight)); Splitter.LeftClientWindow = MapWindow; Splitter.RightClientWindow = ScreenshotWindow; CloseButton = UWindowSmallButton(CreateControl(class'UWindowSmallButton', WinWidth-56, WinHeight-24, 48, 16)); StartButton = UWindowSmallButton(CreateControl(class'UWindowSmallButton', WinWidth-106, WinHeight-24, 48, 16)); coopButton = UWindowSmallButton(CreateControl(class'UWindowSmallButton', WinWidth-156, WinHeight-24, 48, 16)); StartButton.SetText(class'umenu.umenubotmatchclientwindow'.default.StartText); ///localization CloseButton.SetText(class'uwindow.uwindowsmallclosebutton'.default.closetext); CoopButton.SetText("Co-op"); /*stupid PD menu music thing :D MenuSong = Music(DynamicLoadObject("oldskoolmenu.perfectmenu", class'Music')); GetPlayerOwner().ClientSetMusic( MenuSong, 0, 0, MTRAN_Fade ); */ Super.Created(); } function Resized() { if(ParentWindow.WinWidth == 520) { Splitter.bSizable = False; Splitter.MinWinWidth = 0; } else Splitter.MinWinWidth = 100; Splitter.WinWidth = WinWidth; Splitter.WinHeight = WinHeight - 24; // OK, Cancel area CloseButton.WinLeft = WinWidth-52; CloseButton.WinTop = WinHeight-20; coopButton.WinLeft = WinWidth-152; coopButton.WinTop = WinHeight-20; StartButton.WinLeft = WinWidth-102; StartButton.WinTop = WinHeight-20; } function Paint(Canvas C, float X, float Y) { local Texture T; T = GetLookAndFeelTexture(); DrawUpBevel( C, 0, LookAndFeel.TabUnselectedM.H, WinWidth, WinHeight-LookAndFeel.TabUnselectedM.H, T); } function Notify(UWindowDialogControl C, byte E) { Super.Notify(C, E); switch(E) { case DE_Click: switch (C) { case StartButton: StartPressed(); break; case closeButton: ClosePressed(); break; case coopbutton: GetParent(class'UWindowFramedWindow').ShowModal(Root.CreateWindow(class(Dynamicloadobject("oldskool.coopwindow", class'class')), 0, 0, 100, 100, self)); break; } break; } } function StartPressed() { local string URL; local GameInfo NewGame; if (selectedpackclass.default.additionalmenu==None&&!(selectedpacktype~="custom")) URL = Map$"?Game="$selectedpackclass.default.spgameinfo$"?Difficulty="$difficulty$"?Mutator="$MutatorList; else if (selectedpacktype~="custom") URL = Map$"?Game=oldskool.singleplayer2?Difficulty="$difficulty$"?Mutator="$MutatorList; else{ GetParent(class'UWindowFramedWindow').ShowModal(Root.CreateWindow(SelectedPackClass.default.additionalmenu, 0, 0, 100, 100)); return;} ParentWindow.Close(); Root.Console.CloseUWindow(); GetPlayerOwner().ClientTravel(URL, TRAVEL_Absolute, false); } //we don't want to save configs... I probably would have gotton away with simply overriding close, but I didn't feel like doind extensive testing...... by parent not even needed! LOL! I'm lazy :D function ClosePressed(optional bool bByParent) { local UWindowWindow Prev, Child; for(Child = LastChildWindow;Child != None;Child = Prev) { Prev = Child.PrevSiblingWindow; Child.Close(True); } if(!bByParent) HideWindow(); ParentWindow.Close(bByParent); } function SaveConfigs() { Super.SaveConfigs(); SaveConfig(); } i A// ============================================================ // default UT one // ============================================================ class utbackround expands backrounds; i g@ zJÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|Úú“Ç?#,‡UçYßXÞWÝVÜUÛTÚTÙPæSåNØM×i i ] // ============================================================ // backrounds. those that extend this have functions that load the background. // \me can't spell :P :P // ============================================================ class backrounds expands UWindowWindow; var texture f43, f33, f23, f13, f42, f32, f22, f12, f41, f31, f21, f11; static function drawbackground(oldskoolRootwindow olroot, canvas c){ //function allows customizability (as well as OSX format support) local int XOffset, YOffset; local float W, H; W = olroot.WinWidth / 4; H = W; if(H > olroot.WinHeight / 3) { H = olroot.WinHeight / 3; W = H; } XOffset = (olroot.WinWidth - (4 * (W-1))) / 2; YOffset = (olroot.WinHeight - (3 * (H-1))) / 2; C.bNoSmooth = False; olroot.DrawStretchedTexture(C, XOffset + (3 * (W-1)), YOffset + (2 * (H-1)), W, H, default.f43); olroot.DrawStretchedTexture(C, XOffset + (2 * (W-1)), YOffset + (2 * (H-1)), W, H, default.f33); olroot.DrawStretchedTexture(C, XOffset + (1 * (W-1)), YOffset + (2 * (H-1)), W, H, default.f23); olroot.DrawStretchedTexture(C, XOffset + (0 * (W-1)), YOffset + (2 * (H-1)), W, H, default.f13); olroot.DrawStretchedTexture(C, XOffset + (3 * (W-1)), YOffset + (1 * (H-1)), W, H, default.f42); olroot.DrawStretchedTexture(C, XOffset + (2 * (W-1)), YOffset + (1 * (H-1)), W, H, default.f32); olroot.DrawStretchedTexture(C, XOffset + (1 * (W-1)), YOffset + (1 * (H-1)), W, H, default.f22); olroot.DrawStretchedTexture(C, XOffset + (0 * (W-1)), YOffset + (1 * (H-1)), W, H, default.f12); olroot.DrawStretchedTexture(C, XOffset + (3 * (W-1)), YOffset + (0 * (H-1)), W, H, default.f41); olroot.DrawStretchedTexture(C, XOffset + (2 * (W-1)), YOffset + (0 * (H-1)), W, H, default.f31); olroot.DrawStretchedTexture(C, XOffset + (1 * (W-1)), YOffset + (0 * (H-1)), W, H, default.f21); olroot.DrawStretchedTexture(C, XOffset + (0 * (W-1)), YOffset + (0 * (H-1)), W, H, default.f11); C.bNoSmooth = True; } i fç`IMPM €0}€@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ÿÐ IMPS@@ n@rJ@� <‚<i i i i i B€i i C€i –i Di i @i i Mi i Z@i i j@@i i q€i Æi U@i §M@A ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2J‘ñž§üM»ï�Òè�ÒèŠo û™/Tã2�ÒèŠo û™/Tã2�ÒèŠo û™/Tã2Šo û™/Tã2ÁÂôS‡i i N@i i Ti i \i i F@i i @i i Ei Æi -€i ÝPEq ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2Rº×¯IÝ?Ĉ_ã‰4†ÏÒxxœ�> £Yˆ_ã‰4�> £Yˆ_ã‰4�> £Y†ØÆÚ!ˆ_ã‰4�> £Yˆ_ã‰4‡i i i Æi i i @i i i Ái i Ši Ii i Ki i i i i Ji Vi ‡i P@i i _€i ‡i `€@i i a€@i i b€i ÿi c€i Èi d�i Èi �i i i �i g€i Ái W€i Èi €i i ÀXM nΟ#äTournamentPlayer%IU½{I‚„�|IBotpack.TBoss Ø-õË UI%¥XŸ'äTournamentPlayerXIU-Ë4 i ]@i i s€i i ei çi F€i –i ÷\ P  i n^l H\^VE_`abcV-ÿ-d i YHj ~œÃOH×PackageList¶š~Oolroot?oldskool?ÿÿÿÿH,ÀPackageListpolroot?oldskool?OH3ÀPackageCntS’JH×PackageCnt,PH i Oi i îQm.&" i €i i €i i ÛofpJš:g:$f VW.Šž.ŽG †|rW*.ŽGumenu.UMenuRootWindowŽ£í.ŽGŽ£í.ŽGŽ£bŽ£m  ÿÿ i w€i i €i i ôCyz *¨ i €@i i âx{x +ô i |€i Ái }€i –i ~€i i €i i €i i ìzv , i pBn ‡YÀP„šc%?‚šM%2|V£øóÐÊx(¼„„„zxutemple.utemplezxunreal4.unreal4zxnali.nalizxskytwn.skytwn'( i €i i ÓLvr )† i Ëve{ >¹üe£øó0Kš:œÂ:$EÍÌÌ=ˆ-]œ*aОoldskool.oldhudNotify †Ç-jœ,aОoldskool.oldboardNotify †úr\*\ûa M\e i ÁiYt É-Z-ß-ß(ï5-ß-Z]aô ÏFÏôöFBotpack.ChallengeVoicePackžF †ŸäF%KN{Kï NK%¥YŸäFYKN¯ï4 i G€i i €i i ýrJu 'J i úxw |e\* i t€i i ]Ak $�@¬A”?,@e±¬A ?,¬A ?,@C‘D¯A”«?,¯@?&,D‘D¯A «?,¯?&,B-È(AF¹B®?C«?,¯@?&®?D«?,¯?&@]AF¹B®?C«?,¯@?&®?D«?,¯?&@\AE¹B®?C«?&¯@?&®?D«?,¯?&@aAE¹B®?C«?%¯@?&®?D«?,¯?&@YAE¹B®?C«?,¯@?&®?D«?&¯?&@XAE¹B®?C«?,¯@?&®?D«?&¯?&@WAD¹B®?C«?&¯@?&®?D«?&¯?&@VAD¹B®?C«?%¯@?&®?D«?&¯?&@UAE¹B®?C«?,¯@?&®?D«?%¯?&@TAE¹B®?C«?,¯@?&®?D«?%¯?&@QAD¹B®?C«?&¯@?&®?D«?%¯?&@SAD¹B®?C«?%¯@?&®?D«?%¯?&@OB-È'  i ÃHI(_ i T// ============================================================ // olroot.ProcessMessage: spawns and recieves messages, returning to last thing. // ============================================================ class ProcessMessage expands UWindowFramedWindow; var object receiver; var uwindowmessagebox box; function Created(){ hidewindow(); } function setupbox (object ob, string Title, string Message, MessageBoxButtons Buttons, MessageBoxResult ESCResult, optional MessageBoxResult EnterResult, optional bool leaveonscreen){ receiver=ob; box=messagebox(title,message,buttons,escresult,enterresult); box.bleaveonscreen=leaveonscreen; } function MessageBoxDone(UWindowMessageBox W, MessageBoxResult Result) //idiot wants to disable oldskool. { //receiver.messageboxdone(w,result); local uwindowrootwindow testroot; if(Result == MR_Yes) { switch(W) { case Box: testroot=uwindowrootwindow(dynamicloadobject(oldskoolrootwindow(root).SavedRoot,class'class')); //check if saved root exists. if (testroot==none) oldskoolrootwindow(root).savedroot="umenu.UMenuRootWindow"; root.console.rootwindow=oldskoolrootwindow(root).savedroot; //set to saved one. root.console.default.rootwindow=oldskoolrootwindow(root).savedroot; //allows oldskool item to work right. root.console.saveconfig(); root.console.resetuwindow(); //reinitailize root. break; } } } //don't run these function BeforePaint(Canvas C, float X, float Y); function Paint(Canvas C, float X, float Y); function LMouseDown(float X, float Y); function Resized(); function MouseMove(float X, float Y); function ToolTip(string strTip); function WindowEvent(WinMessage Msg, Canvas C, float X, float Y, int Key); function WindowHidden(); i c// ============================================================ // olroot.oldskoolitem: allows for quick uninstall/installing of oldskool. // ============================================================ class oldskoolitem expands UMenuModMenuItem; function Setup() { if (class'utconsole'.default.rootwindow~="olroot.oldskoolrootwindow"){ MenuCaption="Disable &OldSkool Amp'd"; MenuHelp="Why on earth would you do this? :P"; } } function execute(){ local processmessage rec; if (menuitem.owner.root.isa('oldskoolrootwindow')){ rec=processmessage(menuitem.owner.root.createwindow(class'processmessage', 100, 100, 100, 100)); rec.setupbox(self, "Confirm disable","Are you sure you wish to disable OldSkool Amp'd's menus? Note that to uninstall OldSkool you will need to use setup.exe (but why do that?)", MB_YesNo, MR_No, MR_None, false);} else{ class'olroot.oldskoolrootwindow'.default.savedroot=menuitem.owner.root.console.rootwindow; //backup root. class'olroot.oldskoolrootwindow'.static.staticsaveconfig(); menuitem.owner.root.console.rootwindow="olroot.oldskoolrootwindow"; //update root. menuitem.owner.root.console.default.rootwindow="olroot.oldskoolrootwindow"; menuitem.owner.root.console.saveconfig(); menuitem.owner.root.console.resetuwindow(); //this pretty much unlinks everything and will restart uwindow system with the olroot's. } } ¼NS ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2#OFßU¼Ñ”ŠÏ˜;aG°«Õ¶mêŠo û˜;aG°«Õ¶mêŠo ûJ‘ñž†�Òè˜;aG°«Õ¶mêŠo û™/Tã2†�Òè˜;aG°«Õ¶mêŠo û™/Tã2˜;aG°«Õ¶mêŠo û™/Tã2˜;aG°«Õ¶mêŠo û™/Tã2˜;aG°«Õ¶mêŠo û™/Tã2†à0S‡~ ]Enable &OldSkool Amp'd} ]MKClick to finish the installation of OldSkool Amp'd and activate the menus!i i I// ============================================================ // olroot.olUTPlayerSetupClient: eliminates maximum players to choose... // ============================================================ class olUTPlayerSetupClient expands UTPlayerSetupClient; function LoadClasses() { local int NumPlayerClasses; local string NextPlayer, NextDesc; GetPlayerOwner().GetNextIntDesc("TournamentPlayer", 0, NextPlayer, NextDesc); while( (NextPlayer != "")) { if (!(NextPlayer ~= "Botpack.TBoss") || class'Ladder'.Default.HasBeatenGame) ClassCombo.AddItem(NextDesc, NextPlayer, 0); NumPlayerClasses++; GetPlayerOwner().GetNextIntDesc("TournamentPlayer", NumPlayerClasses, NextPlayer, NextDesc); } ClassCombo.Sort(); } function IterateVoices() //do not require ladder defeat. { local int NumVoices; local string NextVoice, NextDesc; local string VoicepackMetaClass; local bool OldInitialized; OldInitialized = Initialized; Initialized = False; VoicePackCombo.Clear(); Initialized = OldInitialized; if(ClassIsChildOf(NewPlayerClass, class'TournamentPlayer')) VoicePackMetaClass = class(NewPlayerClass).default.VoicePackMetaClass; else VoicePackMetaClass = "Botpack.ChallengeVoicePack"; // Load the base class into memory to prevent GetNextIntDesc crashing as the class isn't loadded. DynamicLoadObject(VoicePackMetaClass, class'Class'); GetPlayerOwner().GetNextIntDesc(VoicePackMetaClass, 0, NextVoice, NextDesc); while (NextVoice != "") //no limit { VoicePackCombo.AddItem(NextDesc, NextVoice, 0); numvoices++; GetPlayerOwner().GetNextIntDesc(VoicePackMetaClass, NumVoices, NextVoice, NextDesc); } VoicePackCombo.Sort(); } i ßuT1%õ i ào yw| àíolroot.oldskoolrootwindowÁDisable &OldSkool Amp'dÂWhy on earth would you do this? :P i áR[@ éG#Óߎa/!t[.JÓߎ¦ JÈBÈBÈBÈB[¬l Confirm disableAre you sure you wish to disable OldSkool Amp'd's menus? Note that to uninstall OldSkool you will need to use setup.exe (but why do that?)$$$(E GÓߎ£í æÓߎ£íolroot.oldskoolrootwindowÓߎ£íolroot.oldskoolrootwindowÓߎ£bÓߎ£m  i k€i –XXXKÿÿÿÿEXNKþÿÿÿKKþÿÿÿkKÿÿÿÿCKþÿÿÿ{KÿÿÿÿAKþÿÿÿpKýÿÿÿrKþÿÿÿG {üÿÿÿSKþÿÿÿjKûÿÿÿvXKûÿÿÿrKÿÿÿÿMA üÿÿÿyKýÿÿÿAKûÿÿÿqKÿÿÿÿdKÿÿÿÿIKÿÿÿÿNKþÿÿÿA KþÿÿÿhpüÿÿÿnKûÿÿÿ^pùÿÿÿN püÿÿÿmA üÿÿÿxKûÿÿÿBKïÿÿÿ`{öÿÿÿTKýÿÿÿuKýÿÿÿUpüÿÿÿrKÿÿÿÿDKþÿÿÿF KýÿÿÿS KýÿÿÿZKÿÿÿÿBKýÿÿÿWKþÿÿÿQKûÿÿÿMCùÿÿÿt{îÿÿÿ~KÿÿÿÿYEêÿÿÿT KýÿÿÿVKýÿÿÿyKýÿÿÿz{ÔÿÿÿuKýÿÿÿwA üÿÿÿepüÿÿÿ{{ÍÿÿÿH{ËÿÿÿPKýÿÿÿV XýÿÿÿzpüÿÿÿpKýÿÿÿQKÿÿÿÿGKýÿÿÿe jôÿÿÿ]Kýÿÿÿ~Kþÿÿÿf XOKûÿÿÿI Kýÿÿÿ|Kýÿÿÿ}KýÿÿÿsKýÿÿÿpKïÿÿÿ[KýÿÿÿtjôÿÿÿMpüÿÿÿKûÿÿÿNpüÿÿÿ|Kïÿÿÿ\KÿÿÿÿL{ÄÿÿÿC f ãÿÿÿ\KýÿÿÿCF èÿÿÿnKÿÿÿÿOKûÿÿÿTf ÑÿÿÿgKûÿÿÿJ{ÁÿÿÿMf ÑÿÿÿC KïÿÿÿepÏÿÿÿ{èÿÿÿe KÿÿÿÿJf Ñÿÿÿg Kÿÿÿÿ@{ÉÿÿÿhpßÿÿÿQ KýÿÿÿpùÿÿÿQp¹ÿÿÿ){üÿÿÿWj×ÿÿÿUQÏÿÿÿ{üÿÿÿ_A üÿÿÿ|jçÿÿÿ` pßÿÿÿR Kûÿÿÿqj×ÿÿÿz{×ÿÿÿuKûÿÿÿX{ŽÿÿÿBKÿÿÿÿFKÿÿÿÿS{ßÿÿÿupÙÿÿÿ{¨ÿÿÿL{½ÿÿÿBcðÿÿÿJKûÿÿÿL{ÖÿÿÿLF ëÿÿÿg{¿ÿÿÿuj×ÿÿÿvKÿÿÿÿWKÿÿÿÿVKÿÿÿÿT{€ÿÿÿl{ŒÿÿÿlA ßÿÿÿspüÿÿÿyKÿÿÿÿzm©ÿÿÿjpÕÿÿÿ2QÉÿÿÿD{·ÿÿÿn{¯ÿÿÿhA øÿÿÿiF çÿÿÿIK»ÿÿÿi {ðÿÿÿ}püÿÿÿV F ôÿÿÿCA éÿÿÿ\KÿÿÿÿP{ßÿÿÿLF Ùÿÿÿ}jÌÿÿÿiK»ÿÿÿS K»ÿÿÿRKïÿÿÿc{ÖÿÿÿgKýÿÿÿX{üÿÿÿa{ðÿÿÿ{F ·ÿÿÿU{üÿÿÿ`{ôÿÿÿJ{éÿÿÿ{éÿÿÿ~côÿÿÿ\Kýÿÿÿ@KýÿÿÿdKûÿÿÿnKýÿÿÿ^jîÿÿÿZKïÿÿÿ_KýÿÿÿvF ÙÿÿÿkA Àÿÿÿ]F éÿÿÿA{£ÿÿÿk A ÀÿÿÿIpüÿÿÿBpÕÿÿÿG îÿÿÿwG YÿÿÿO Eyÿÿÿlpöÿÿÿ0F èÿÿÿb{öÿÿÿBA éÿÿÿfpüÿÿÿLpüÿÿÿfpüÿÿÿZpüÿÿÿ{êÿÿÿHF üÿÿÿPpùÿÿÿH Kÿÿÿÿ[G 7ÿÿÿhjžÿÿÿrF ¨ÿÿÿkpÕÿÿÿpÕÿÿÿHG îÿÿÿyF êÿÿÿP C©ÿÿÿ|QùÿÿÿKKûÿÿÿ_{®ÿÿÿA{üÿÿÿGjãÿÿÿDKûÿÿÿJKûÿÿÿ] KþÿÿÿcpÀÿÿÿ)püÿÿÿU{ßÿÿÿopüÿÿÿ1QÏÿÿÿbpùÿÿÿm G îÿÿÿxKûÿÿÿHG îÿÿÿzpüÿÿÿpK#ÿÿÿiXajÁÿÿÿR{ôÿÿÿKKïÿÿÿc Kýÿÿÿ{QËÿÿÿHKïÿÿÿbKïÿÿÿWKïÿÿÿaKýÿÿÿxKïÿÿÿV{ëÿÿÿZ{ëÿÿÿ_{ëÿÿÿFKýÿÿÿh {ÖÿÿÿX{ëÿÿÿa{ÖÿÿÿP{ëÿÿÿd{ëÿÿÿe{ëÿÿÿcpÖÿÿÿHKýÿÿÿqQ·ÿÿÿ\ Kïÿÿÿ]jµÿÿÿQKýÿÿÿW pËÿÿÿ{ëÿÿÿb{ÖÿÿÿOpÔÿÿÿ{ëÿÿÿfpÙÿÿÿu pÁÿÿÿBm©ÿÿÿP QŒÿÿÿkmüÿÿÿZ pÀÿÿÿ.pÙÿÿÿIKýÿÿÿY pÁÿÿÿpüÿÿÿG ?ÿÿÿw{ÍÿÿÿHf žÿÿÿcjlÿÿÿOpüÿÿÿ{ NMÿÿÿÿgNMÿÿÿÿjQÙÿÿÿpÔÿÿÿ}jÉÿÿÿGF üÿÿÿHpüÿÿÿIpÙÿÿÿr KýÿÿÿsKÿÿÿÿ\pÁÿÿÿX{®ÿÿÿD{®ÿÿÿKKÿÿÿÿfF ëþÿÿHA éÿÿÿ@F éÿÿÿkp×ÿÿÿ.p×ÿÿÿ#pÙÿÿÿ1{½ÿÿÿs{½ÿÿÿrpÙÿÿÿx {ëÿÿÿGKýÿÿÿ` F ëÿÿÿ@{UÿÿÿVpÖÿÿÿ2p½ÿÿÿ2j¦ÿÿÿwF çÿÿÿOjÉÿÿÿppÙÿÿÿv p€ÿÿÿpÙÿÿÿ.F çÿÿÿRjÖÿÿÿajÖÿÿÿ_jÉÿÿÿqjÉÿÿÿZ pÙÿÿÿz püÿÿÿ jUÿÿÿ[pöÿÿÿjUÿÿÿYpëÿÿÿ{½ÿÿÿNpÍÿÿÿ.p?ÿÿÿjÌÿÿÿTjÖÿÿÿ~jãÿÿÿvpëÿÿÿjÄÿÿÿ~ jÄÿÿÿ} jÁÿÿÿMjëÿÿÿkjãÿÿÿF{ÍÿÿÿIjëÿÿÿmpÔÿÿÿIjëÿÿÿnj›ÿÿÿ`j›ÿÿÿcjëÿÿÿojëÿÿÿ[ jëÿÿÿ\ jëÿÿÿ_ G ãÿÿÿtjëÿÿÿU {ëÿÿÿb{ëÿÿÿ`{ëÿÿÿE{ëÿÿÿ~pZÿÿÿNMÃÿÿÿ{NMÃÿÿÿ|NMÃÿÿÿNMÃÿÿÿ@NMÃÿÿÿANMÃÿÿÿBNMÃÿÿÿCNMÃÿÿÿDNMÃÿÿÿEpÄÿÿÿo pÄÿÿÿ@ p[ÿÿÿpüÿÿÿRpëÿÿÿ NMÃÿÿÿ}NMÃÿÿÿ~NMÃÿÿÿFNMÃÿÿÿGpÍÿÿÿjãÿÿÿmj¦ÿÿÿZpÖÿÿÿpëÿÿÿpdÿÿÿjëÿÿÿNf ðÿÿÿ}f ðÿÿÿ@G 1ÿÿÿvG 1ÿÿÿKNC»ÿÿÿSF hÿÿÿG jqÿÿÿb jgÿÿÿQpßÿÿÿ0jÖÿÿÿ`pßÿÿÿw F ßÿÿÿIj|þÿÿEcßÿÿÿX pVÿÿÿ_QÖÿÿÿ|p£ÿÿÿMp£ÿÿÿt f îÿÿÿK cùÿÿÿD KûÿÿÿKKûÿÿÿup¯ÿÿÿ7jÞÿÿÿAjÉÿÿÿZjÞÿÿÿYj¸ÿÿÿaKïÿÿÿ^j¸ÿÿÿejÞÿÿÿXjÞÿÿÿdjÞÿÿÿljÞÿÿÿkj¸ÿÿÿgjÞÿÿÿijÞÿÿÿZpüÿÿÿnjÞÿÿÿljÞÿÿÿjpfÿÿÿp¯ÿÿÿspµÿÿÿGjÌÿÿÿBjÌÿÿÿ&À=c\¶�§h¾‡ _N¿Ç{AmÁ‰ŠTnÆ�K }ƳtN LÇš¶hZЉŠxhК¶PwЉŠkEщŠeUщ?\eщÜeuщ^GEÒ�ªhUÒ„KDdÒ‰¶\hÖ�txÖ‰ŠYF׉ŠoU×�§me×­L s×�{C؉`GQ؉PaØ­¶NqØš{hAÙ�¶`OÙ�¶a]Ùš{PkÙ‰{\yÙ‰oIÚ�]mYÚ�D hÚ�§UwÚ�cVFÛ�7VUÛ�ImdÛ�hVsÛ­k^BÜ­)oRÜ�ŠNc܉Šrq܉Yq@ݨ§~P݉Üp^Ý©ucmÝ�]QPá�Št^áš{mmá�hm{áš{[Jâ�ß{Xâ�Ygâ‰juâÑM Eã‰WwSã�Štbã�Šsp㉊Z~ã­]pNä‰IN_ä�qmnä�±R}ä�/eLå‰IG[å�]Rjå�§uxå�`]Gæ�ŠiVæ‰J eæ‰gEuæ�ŠjDç‰SRç�¼maç�kmoç�r[~ç�ŠhMè‰_\\è‰`Nmè‰i|è�hxLé‰:E[é�\jéÑ`\xé�_mGê•vbVê�]gxï‰?FFð�ÜhWð�]xfð‰œEuð�±QDñ�ÜiRñ�h]añ¨Woñ‰rG~ñ�VNò‰k\]ò�YYnò­v^}ò­hpMó‰XH^ó‰èKmó�¢m}ó�ªUKô¨ŠuZô�`Diô­^^xô¨ŠnIõ�`mWõ‹ÎTeõ‰èfy÷­è^Iø�a Zø�hWhø‰èfwø‰ècGù‰è]Wù‰èLgù‰èMwù�ªGú�ZVú�§|dú­] sú�]yCû¨ª~Rû‰è_`û�qWpû�hyû‰òZNü‰±\^ü�E nü�hg|ü�hRKýÄY}ZýÇb'jý�]]L¥�/d[¥¡kmj¥‰[\W§¨Šmh§�7gv§�rmD¨�kB S¨�ZWb¨�JJq¨�cg@©�ZRN©�/s]©�_]k©�¼Wy©¨ìdHª¨ŠUVª‰kdª�™OuªÃwSD«�ZQW¯¨hze¯�ZXt¯�hXC°Ä_oR°‰Umb°‰�Sq°š?[@±š?mO±­Jv^±‰Omo±�ÜN~±‰gKL²�h[\²‰:Kk²Äko{²RiBK³‰KmMµ‰èq\µ�hPlµ�ß&{µ‰VmI¶�cB Y¶�k]g¶�¼Xu¶­`^D·‰XmV·­V^f·�hQv·‹Õ1zD¸�q[~¹�qXMºÄ–o\º�±Qkº‰–\zº¨d K»�±RY»¨c h»¨§}v»áG]D¼‰‘ba½�p½¬Es½­^ rÂ�]RBÃ�]QQÃÄ[o`Ã�Š\oÉI ~ÉœKOÄëD`_Ä�]PŨœFNÆ�Š]]Æ�PlÆæyizÆ�ªucÉ�]\rÉå~|AÊ�¤B }˨]zLÌzK[̱xZfß±}Z@á|G Zâ�Š:aìš?hpìÚoz~ì�ŠlxîämTGï�C^[ñi ‰X]iñ«<zxñi ÄLr��jB‚ÑBBQ‚æs[S‘‰LPn“õCH“�ègG–š?PV–ªrG e–‰>vlŸêp^|Ÿ�]SZ¤�Š^i¤�èex¤�iG¥�§yV¥ÜjJd¥çFYn§�è`Gª¨EFVª�èadª�òOsªš5PA«ånaP«Ë@^q¬�ªyO®š5h]®ãlak®�òbL°¨T[°�òcj°�òdy°�Š[H±­YV±­Vf±�wv±šZmD²‰MS²�Ob²‰Sp²�±S@³‰NO³‰P_³‰To³‰T³‰UO´‰V_´‰Wo´­¤@ ´­LOµ‰Y_µ‰Uoµ­WµšZ[O¶‰Z\^¶‰Xn¶�Ü:~¶�*M·�vH [·¨gFj·‰‘\y·‰uI¸¨:FX¸‹þô_Kg¸‹ÞÝ(r½�qVZ¾�qgi¾‹Þ|-w¾‹×âpd¿‹i¯MXTÁš¼[lÄ‹ûÉd{Ä‹ÞÞ(_Æ‹îúwGÇ‹âÙP~È‹üíZ-NË‹ÖÖV{Ë‹qßyQ΋úÆL)JÓ‹ØìshsÓ‹ßq[Ù‰¼\LÛš¼m\Û‹øämkÛ‹ÈÉIdXÞ‹ÖìXa|á‹í/b]é‹íXTë‹÷í0Sí‹ÀXMCî�JlPï‹ýÖY^ï�JIwð­JHFñ­JTWñ‹þìBlhñ‹ùXYTõ‹ÆèHYmû‹ÛèpCF€‹è+aI�‹è;yj„‹Éè2\c‡�hwŒ‹ÅèUN�‹òèmc��ècP’¨hg_’‹òòHan’‹çò2nO”‹ÏÉ}V}›‹èž2wSž‹ö0X J¥‹|Ü1wb¯‹çŠ)xY²‹øûmQ¶‹ÎŠ\~¸‹Æì7`Z׋çß)Qzß‹ÅìKKçš±[Ví‹é@eí‹Ü'qeð‹äX MVõ­²@ cö›i4Msö‹Üq@û‹qÜDqüÜgSuŒi ‹çÜ)HH�i ›¯4CP˜›ú4G S¦›�4^Z²›4Jx¸›ä4F B¾‹Þ0#yHÊ›4_AÏ›â4| `Ô›ô4~\Þ‹03\Zó‹ìòNvô�vmD÷‰vGS÷›|4Uc÷‹Ý0.cxþ±qZ[…š{uu†š{tD‡›4g'R‡›ò4q-y®›í4n jÜ›4yUXè›04X-Q¾›X4Z*ië�ZC–›è4uNR–›ž4_Gå›4Pfü›Ý4Qv’ ›Ö4tG™ ›Ü4mŽ{§ ›ß4b5h¶ ›Þ4DJì ›Ù4m Nó ‹Î\{ü ‹ÒIdW‚ ‹Â.X{… �¤mS‡ š‘[b‡ š‘mq‡ ›Š4pÄ@ˆ ‹Ò)jpÌ ›4FZÏ ›š4``× ‹AA@Ü óAaAá ‰™cbâ ‹kqâ ›ì4NY\ä ›ï4Dj½›Ñ4QnÁ‹ñB&Å�]weÆ‹Š9Utƨ]gIÊ‹Š'J XÊ‹Š@MbÓ‹Š?QoÔ‹Š(v@Ö�§xvðš±mDñ‹Š,l Sñ�ªxûš¶tNü‹ÙG$\ü¨­L@ýš¶uNý�^]ý‹ÕŠ1Xký‹ÔŠnFC…›É4tI‡›û4i } �Zmf¬‹û.ru¬›Æ4Ig®‹ø�0,p´›4HH\µ›¼4Mdý�b q€JU€›4i TƒÏSj}£š hg¿š Pu¿‰ DÀ‰ \TÀ� `dÀ� asÀšY BÁ�b QÁ�s `Á‰ðR oÁ�ée@§A POÂ�j _ŨE nÅ�X }Å�sLÆ�ð^ [ƉJ iÆšYF zÆÝq UHljYU ]ÊšT mÊ�és{ʉÊf IˉõO YË�édhË�o w˨l F̉[ T̉Ê_ d̨M t̉ïn CÍ�ïZSÍ�ïd bÍÄïh qÍÄïW BÎÄïQ SΨïa dΉqrΉõPAÏÄõRÏš¸F cÏ‹ÀÒMqϨL pÒš[Ò‰YN NÓ‰ò\_Ó‹÷Ê!oÓ‹Êl MPÔ‹j F]Õ�ðmcØ‹îÊ.rØšmQÙšm_Ù‹ÛÊpTmÙš[AÝšmPÝ‹ôÊz  ^Ý�øp ~Ý‹âÊx  LÞÄúB lÞ‰ú\}Þšú[Mßšúm\ß�úg kß‹ìÊv yß‹n DXà¨L\ã‹ÓÊr  jã‹Ë{ aJä‹ÁÒt ckçšò[Nëšòm]ë‹ýÊu  kë‹ú�w +Kìš[vì‹k k Eí‹ÃÊIpú›Ê4`Oû›4oo—¼ s^­›Ò4UQµ‹ßÊ1fÑ‹ào MEÒ‹á@ DRÔ‰\VÜ