*EH|E&7"Cu.zq*iNoneolrootCoreuwindowSystemUMenuSetTextCreated 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 NumVoicesstrTipy`=6/XD~.'l.'l.'l t t.'lo  t.'lo /T2> Y.'lo ԌԌ.'l`````7XÓ7XÓ7XÓ7XÓ7XÓ7X×```````7XÆ+X7XÆВ7XZ]Startt] Vortex2K ]oldskool.origunreali i E@i P  txWO]oldskool.singleplayer2^]oldskool.coopgame2LYWVVQYoi H|{6,ps֥s֥sD ]Custom] January  FebruaryMarchAprilMayJuneJulyAugust  September October November December*]*)Press to activate this slot. (Save/Load)i i +i i U@@i BAt/im/T2> YYQZYQZYQZYQZ/T2> YYQZYQZ/T2> Y/T2> Y> Y5I> Y5I> Y> Y> Y> Y> Y> Y> Y/T2M /T2/T2?#,M {Oj]olroot.utbackroundi]utmenu23.utmenu23Ts ]umenu.UMenuRootWindowi i i i i i i i Ti i ci i Zi i bi i ni i W@i }KK?#,.'lxxi i oi 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{u20|wͩ%Z!Z!xxxxo  t t tv?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 ci i i i Hi i C@i i i i i i Fi i Xi DAv6XvݕP{O{O{OEf$Ef$Ef$Ef$Ef$Ef$ܡ$Ef$^p>;;aG{Oy ]UMenu.UMenuGameMenui i >i i fi i _2@i i @i i i i i i ji i (i i G@i i i i a@i i ni 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 ai i @Di i gi i {i i li U[6hJ Dp.'lo XD t.'lo _4XDXD.'lo /T2> YXD t_4_4XDXDXDXD_4_4XD_4XD0|wXD7XXD7XÓ7XÓ7XXD7XXD0|wXD_4_4XDXD t7XÓ7XXD t7XÓ7XXD t7XÓ7X᱘-9y_4XD_4XD_4XD0|wXD_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È_4XD_4XD0|wXD_4XD0|wXD_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> YXD_4 t t t_4XD_4_4_4XDXDXDXDXD tXD_4_4_@_4_@_4_4_4XDXD_4_4-9y_4-9y_4_4_4-9y_4XDXD_4᱘-9y᱘-9y᱘7XÓ7XÓ7XÈ_47XÓ7XÓ7XÓ7XÓ7XÓ7XÓ7XÓ7XÓ7XÈ_4XD t7XÓ7XÈ_4XD t7XÓ7XÓ7Xl] 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.mi i Xi i Bi oIkM ԝXNi i Mi 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 GXw2^p>;?;aG;aGPP;aG{O{OP> Y> Yo > Yo /T2i i i i Ti i ui i li i Wi i i i i i gi i qi i Gi i i i i i Ii i Hi i Ti i Mi Rmoi2o#6RׯI> Y_4> Y_4i i i i i i `i i @i i zi i %i i )i i Li i mi i hi i i i i i q{1'YD?,<wD?Y,L%L,L!?Y?L!?wL0 i @i i }i i i i Ci i i i @i i Ri i B i .i wxG2Fi i i i c @i sWE2IAF9Ƥ9Ƥ9Ƥ9Ƥ9Ƥ9Ƥ9Ƥ9Ƥ9Ƥ9Ƥ9Ƥ9Ƥ9Ƥ9Ƥ9Ƥ9Ƥ9Ƥ9Ƥ9Ƥ9Ƥ9Ƥ9Ƥ9Ƥ9i i L i ui i Ki i i i o@i i Ei Ji ]i _D2QDo1koi i Ki i Pi i N@i i @@i JEy2 V`#m,{.'lo /T2o /T2o o o ]i i {@i i Yi Nt~2Y)_<o o o ^i i Ri i ci Kkz6p\`|,ђo > Y_4,ц,ц t t t> Ysֈ_4_4XDXDXDXD t t t> Y.'l.'l.'lo /T2_4_4,ц,ц,ц,цXD,ѥsֆ,ѥs֥s֥sֈ_4_4_4_4_4_4_4_4> Y> Y t> YXD_4 t_4_4XD,ц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_`,ѐ> Ys֒s֒,ѥsֆ,ъo > Y.'l.'l.'lo /T2XD,цXD,ц,ц,цXD,ц,ѥsֆ,ѥs{"&]Easy&Medium&Hard&Unreal*]#"Press to Save a game to this sloti i O@i i i tno2b|5t.'lo i i `@i q}mdeu```````i i @i i i FK<2OhW4նmP\MP\MP\MPPR#zPR#zPR#zP\Mo XDXDXDXDo  to XDXDXDXDo  to > Y> Yo o \Mo /T2;aG;aG> Y\M\M\M\M\Ma]&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 ]yB6`l/XSW DŽ.'lx 9ƌsO+x 9ƌsO+sO+x 9x 9x 9Ƅ.'lzZzZ!9K4螌sO+> YsO+sO+> Y> Y> Y> Y> YsO+sO+sO+sO+sO+sO+sO+sO+sO+sO+sO+sO+X'sO+sO+sO+X'sO+X'!9&̻sO+xxxxxxsO+xxxsO+xxxsO+xxxxxxxo sO+> Y> YK4螌sO+sO+> YK4螌sO+sO+> YsO+sO+sO+sO+sO+> YkBi Aus2m+BT0o o o o o x] New Gamei i ji ^CokXJUVh]'&olroot.oldskoolWeaponPriorityListAreai i S@i i ai @Ur2$r~*tuX*XvXv݆XDXDXDXDo  to o ;aG;aGo /T2o /T2o /T2o /T2o /T2o > Y;aGo /T2d]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 uip6t+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 nsjz ӄ.'lXDXD ti t\F{cl<rE``````Hzi i w@i i i i |@i i @i i Di sn2A:di Wm@B%^!9i i @i i i pl2EP]իti i @i i c@i i F@i i H@i i ,@i i 9 i K i |@ i Si 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 Ni i _i i Yi i [@i i !@i i x@i i ki i Si i D i mi 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 /  ABBHCHC i iLM #TournamentPlayer%BW{B L,@|Boldskool.sktrooper|B,u4etc. WB%L'TournamentPlayerLBW-4 i |i i *ZD|VUnrealI.sktrooper)\=X= i  j _ i :ga/!=B|.custom od.Kr R* i  -(-(B? CHCRCD?,?,?,?, i @@Z/@D i  (-(-(B? CHCRCD?,?,?,?,-' i q6& q6%C D| custom&&&,2|& # z& #6&6%&Gz6 #6 #  &,6&,6,t{& 7P!& 7P!..Empty..P& i L - { i Isn0r*.   ..?|.olweapons.olsmmag-Z& .olweapons.thirdskin <& .olweapons.newmagskin Z& *r*.   5\. i wh-R}THwT*mTT'Tm   -h i pi i Yi i  ;. . IBB$BB-'pC i qsI-(sw*a!  a! ?a!8 a!8333?a!Ca!Ca!Da!Da!6 i ` X<X.Z-6 $6 $6 $ fgqa?& 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-}Ta/!<-( i T@i i Fi i hi i ^'BJ6'%?C.wC* wC'?C'C.C,','?!i ''%',2 '?!i '?!i '?R?b i gHIN-'   h w*TThT  h g  r      o .  `   ^.^--<-<w.*<w.*.-',  i LpHj{p 4w.  ax.  y. n A. | v. n i. n =z. n kr. n p i Mnpd0.rnq :j:$z i N+[ V{ Custom{ s  w*a/!{ Custom*s^BBHCHC'! VBBHCHC' i O;S V{ Custom{ s  { Custom*s[BBHCHC'! YBBHCHC' i Qi2.;i Qw5!UT-Logo-Map.unr?Game=Botpack.LadderNewGame$'~ x6!UT-Logo-Map.unr?Game=Botpack.LadderLoadGame$'~ y! EBBHCHC'~ A! mBBHCHC'~ v+~ (i;~ XzqE S$$$~ {r~ i i S@i i R'r-w*a/!ei-r*a/!% i vxw *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 nr^ a/!{ Custom*zLBBHCHC'!BBHCHC'^ sDKoldskool.OldskoolConfigWindow BBHCHC'^ ------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  & BBBB!UTCredits.unr$( y i DQ0Rp IQEEQ?wP*j P/ a1 SS!p j S10E?,E2-LTQ0T?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:-czeolroot.null n Mc-(J.e =cI$G-$J.e $I$-L' i |h`1}|`_NSD?,<aD?S,VD?,,_D?V,/?S?/?a?V??_C i bN)N0NMM \$N 4 'Y E ?Y V@Y . +$N y 9(  E6~BB( %, 3$ FBB( .  i #. . IBB$BB-'pC i [">8 Map Client OpenedCBLD @KD?,?L,uD?,?KDD?,,1D?D,. +r*Error: MapsClientWindow without newgamesclient window. Stop hacking these scripts you idiot!!! . ?1A?D? $' c  ` % "(\MapPack%o{\>\ 6{bW%>9%"\"R+"\MapPackR"%",2{"Y%GO"-[|GO-['KG>GO   >|~Y>9!i XJWY>9XY.G"v  Custom Maps|custom + K}  +KO W%9Custom . ?14B?D? $'      % "(w  +c-O(w,=. ?1B?D?. ?1B?D?$'   %"("%y", " "@:,a/!>:U:.U&&:,a/!>=.: =& =$ . ?1B@BA 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@BA v%  J,. ?1*C@BA,Player Setup,%,% Select Digital RepresentationU   +F zt  U     + r~*    -[' i 7f sS|olweapons.olflakcannonUnreal I Flak Cannon|olweapons.olrifleUnreal I Sniper Rifle|olweapons.olgesbiorifleUnreal I GES Bio RifleD|olweapons.olminigunUnreal I Minigun|olweapons.olsmmag-ZSMP 8920SMP 7243n|olweapons.olsmmag-Z -nn.n i zP)=YPcc T$3% , .Pppppon:sS:0S &HS.Pppon:sS:S&HSpQ= S6W%W,rPW!X6,WWX 7.P pSaveGame SXW  i ZV$ Qp%p,2VpQmV!i  V!i . [Vp(unk) WVp$m&FQ %{F m,2.w*|WQ KFF-'GxF 7x-(.FQmm i ii i ke9r\*\a M\e. HBA . XHBCA.UWindowFonts.UTFont40 IM, i Zu'%u |custom map saves%&%,2z% #u[z% #%%%Kz # # %,%,,f{% 7U!% 7U!..Empty..U% i C JNFw.*Fw.*.  i i i A// ============================================================ // olroot.coopserverwindow: the magical co-op game browser :D // ============================================================ class coopserverwindow expands UTBrowserServerListWindow; i ce^}IHwI*kII'Ik   -e i q/4qCDHD?,,{D?H,. ?{ A?H?$'Map Pack:  b%"(SMapPack%{SgS Z{bW%g9%4CS4rj4SMapPackr4%_4,2N{4C_[4C-`|_[ -`'`_&g_[  g|_4 Custom Map Saves`%`j` `| custom(&K(,23|( # z( #(A%K(z # # (,'(,,{( 7G!( 7G!..Empty..G(uD?,<bD?u,l,,,/. ?b?l?u?/ Restart/+ Press to restart the current level.r*a/!/QuickSave/% Press to load your quicksave.z F/  fg6iavd]CO-OPb]ecUBrowser.UBrowserSubsetFact,SupersetTag=UBrowserAll,GameType=coopgame2,bCompatibleServersOnly=Truei i gd)dnn %$' $0rd/sa/!Q%R | FCustom) F w)*)-D)-B')!?load=1000$( X|.d..Empty.. M%M,rdM!v,MM_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# \Wreading from a mapQ~N.UNRLQNNQ.pN.Screenshot b.pN.LevelSummary wb*An Unreal Tournament MapbbUAn Unreal 1 MapOldSkool cannot read levelinformation 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%Cafd fgf|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?D5?,3?,6 =,6 =,6 =, 53 %( 5?,3?, 53#{ 5?,3?, 53{ 5?,3?, 53 zmq|g9$i i ~i i 5i 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. CC-'8.0 0O.J JO8K. ?,8?,@BAR. ?,j?,@BAH. ?,?,@BAR K H Co-op i OI1yA?-(UB?,K?,4K?,H?,H?,R?,fR?, i Pf.H WGSf?6?6G i Zi i Ti i Gi 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 BB   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(JBB !]$( XA2Z1Q:_li i i i YSyp]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 dj9DL-oRefreshing lists... deleting all variables...2;j%xjj<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&|}2Critical 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,M7%{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 li i [@ i rE1y?@D @CD?,?@,RD?,?CAD?,,^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|Ú?#,UYXWVUTTPSNMi 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 Bi i Ci i Di i @i i Mi i Z@i i j@@i i qi i U@i M@A 2JMo /T2o /T2o /T2o /T2Si i N@i i Ti i \i i F@i i @i i Ei i -i PEq 2RׯI?Ĉ_4xx> Y_4> Y_4> Y!_4> Y_4i 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 bi i ci i di i i i i i gi i Wi i i i XM n#TournamentPlayer%IU{I|IBotpack.TBoss - UI%X'TournamentPlayerXIU-4 i ]@i i si i ei i Fi i \ P  i n^l H\^VE_`abcV--d i YHj ~OHPackageList~Oolroot?oldskool?H,PackageListpolroot?oldskool?OH3PackageCntSJHPackageCnt,PH i Oi i Qm.&" i i i i i ofpJ:g:$f VW..G |rW*.Gumenu.UMenuRootWindow.G.Gbm   i wi i i i Cyz * i @i i x{x + i |i i }i i ~i i i i i i zv , i pBn YPc%?M%2|Vx(zxutemple.utemplezxunreal4.unreal4zxnali.nalizxskytwn.skytwn'( i i i Lvr ) i ve{ >e0K::$E=-]*aoldskool.oldhudNotify -j,aoldskool.oldboardNotify r\*\a M\e i iYt -Z--(5--Z]a FFBotpack.ChallengeVoicePackF F%KN{K NK%YFYKN4 i Gi i i i rJu 'J i xw |e\* i ti i ]Ak $@A?,@eA?,A?,@CDA?,@?&,DDA?,?&,B-(AFB?C?,@?&?D?,?&@]AFB?C?,@?&?D?,?&@\AEB?C?&@?&?D?,?&@aAEB?C?%@?&?D?,?&@YAEB?C?,@?&?D?&?&@XAEB?C?,@?&?D?&?&@WADB?C?&@?&?D?&?&@VADB?C?%@?&?D?&?&@UAEB?C?,@?&?D?%?&@TAEB?C?,@?&?D?%?&@QADB?C?&@?&?D?%?&@SADB?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#OFUєϘ;aGնmo ;aGնmo J;aGնmo /T2;aGնmo /T2;aGնmo /T2;aGնmo /T2;aGնmo /T20S~ ]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.oldskoolrootwindowDisable &OldSkool Amp'dWhy on earth would you do this? :P i R[@ G#a/!t[.J JBBBB[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.oldskoolrootwindowolroot.oldskoolrootwindowbm  i ki XXXKEXNKKKkKCK{KAKpKrKG {SKjKvXKrKMA yKAKqKdKIKNKA KhpnK^pN pmA xKBK`{TKuKUprKDKF KS KZKBKWKQKMCt{~KYET KVKyKz{uKwA ep{{H{PKV XzppKQKGKe j]K~Kf XOKI K|K}KsKpK[KtjMpKNp|K\KL{C f \KCF nKOKTf gKJ{Mf C Kep{e KJf g K@{hpQ KpQp){WjUQ{_A |j` pR Kqjz{uKX{BKFKS{up{L{BcJKL{LF g{ujvKWKVKT{l{lA spyKzmjp2QD{n{hA iF IKi {}pV F CA \KP{LF }jiKS KRKc{gKX{a{{F U{`{J{{~c\K@KdKnK^jZK_KvF kA ]F A{k A IpBpG wG YO Eylp0F b{BA fpLpfpZp{HF PpH K[G 7hjrF kppHG yF P C|QKK_{A{GjDKJK] Kcp)pU{op1Qbpm G xKHG zppK#iXajR{KKc K{QHKbKWKaKxKV{Z{_{FKh {X{a{P{d{e{cpHKqQ\ K]jQKW p{b{Op{fpu pBmP QkmZ p.pIKY ppG ?w{Hf cjlOp{ NMgNMjQp}jGF HpIpr KsK\pX{D{KKfF HA @F kp.p#p1{s{rpx {GK` F @{UVp2p2jwF Ojppv pp.F Rjaj_jqjZ pz p jU[pjUYp{Np.p?jTj~jvpj~ j} jMjkjF{IjmpIjnj`jcjoj[ j\ j_ G tjU {b{`{E{~pZNM{NM|NMNM@NMANMBNMCNMDNMEpo p@ p[pRp NM}NM~NMFNMGpjmjZpppdjNf }f @G 1vG 1KNCSF hG jqb jgQp0j`pw F Ij|EcX pV_Q|pMpt f K cD KKKup7jAjZjYjaK^jejXjdjljkjgjijZpnjljjpfpspGjBj&=c\h _N{AmTnK }tN LhZxhPwkEeU?\eeu^GEhUKDd\htxYFoUmeL s{C`GQPaNq{hA`Oa]{Pk{\yoI]mYD hUwcVF7VUImdhVsk^B)oRNcrqYq@~Pp^ucm]QPt^{mmhm{{[J{XYgjuM EWwStbspZ~]pNIN_qmnR}/eLIG[]Rjux`]GiVJ egEujDSRmakmor[~hM_\\`Nmi|hxL:E[\j`\x_mGvbV]gx?FFhW]xfEuQDiRh]aWorG~VNk\]YYnv^}hpMXH^Kmm}UKuZ`Di^^xnI`mWTefy^Ia ZhWhfwcG]WLgMwGZV|d] s]yC~R_`qWphyZN\^E nhg|hRKY}Zb'j]]L/d[kmj[\Wmh7gvrmDkB SZWbJJqcg@ZRN/s]_]kWydHUVkdOuwSDZQWhzeZXthXC_oRUmbSq?[@?mOJv^OmoN~gKLh[\:Kkko{RiBKKmMq\hPl&{VmIcB Yk]gXu`^DXmVV^fhQv1zDq[~qXMo\Qk\zd KRYc h}vG]DbapEs^ r]RB]QQ[o`\oI ~KOD`_]PFN]]Plyizuc]\r~|AB }]zLzK[xZf}Z@|G Z:a?hpoz~lxmTGC^[i X]i<zxi LrjBBBQs[SLPnCHgG?PVrG e>vlp^|]SZ^iexiGyVjJdFYn`GEFVadOs5PAnaP@^qyO5h]lakbLT[cjdy[HYVVfwvZmDMSObSpS@NOP_ToTUOV_Wo@ LOY_UoWZ[OZ\^Xn:~*MvH [gFj\yuI:FX_Kg(rqVZqgi|-wpdiMXT[ld{(_wGP~Z-NV{qyQL)Jshsq[\Lm\mkIdXXa|/b]XT0SXMCJlPY^JIwJHFJTWBlhXYTHYmpCF+aI;yj2\chwUNmccPhg_Han2nO}V}2wS0X J|1wb)xYmQ\~7`Z)QzKK[V@e'qeX MV@ ci4Msq@qDqgSui )HHi 4CP4G S4^Z4Jx4F B0#yH4_A4| `4~\03\ZNvvmDvGS|4Uc0.cxqZ[{uu{tD4g'R4q-y4n j4yUX04X-QX4Z*iZC4uNR4_G4Pf4Qv 4tG 4m{ 4b5h 4DJ 4m N \{ IdW .X{ mS [b mq 4p@ )jp 4FZ 4`` AA@ AaA cb kq 4NY\ 4Dj4QnB&]we9Ut]gI'J X@Mb?Qo(v@xvmD,l SxtNG$\L@uN^]1XknFC4tI4i }Zmf.ru4Ig0,p4HH\4Mdb qJU4i TSj} hg Pu D \T `d asY Bb Qs `R oe@A POj _E nX }sL^ [J iYF zq UHYU ]T ms{f IO Ydho wl F[ T_ dM tn CZSd bh qW BQ Sa dqrPARF cMqL p[YN N\_!ol MPj F]mc.rmQm_pTm[AmPz  ^p ~x  LB l\}[Mm\g kv yn DXL\r  j{ aJt ck[Nm]u  kw +K[vk k EIp4`O4oo s^4UQ1fo ME@ DR\V