[Setup] Product=Weapon Arena Version=200 Archive=WeaponArena.umod SrcPath=. MasterPath=.. Requires=Unreal Tournament Demo348Requirement Group=SetupGroup Group=WeaponArenaGroup [Unreal Tournament Demo348Requirement] Product=Unreal Tournament Demo Version=348 [SetupGroup] Copy=(Src=System\Manifest.ini,Master=System\Manifest.ini,Size=487,Flags=3) Copy=(Src=System\Manifest.int,Master=System\Manifest.int,Size=518,Flags=3) [WeaponArenaGroup] File=(Src=System\WeaponArena.int,Size=244) File=(Src=System\WeaponArena.u,Size=17052) File=(Src=Help\wa_dbox.jpg,Size=22206) File=(Src=Help\WeaponArena.html,Size=5204) [Setup] LocalProduct=Weapon Arena ReadMe=Help\WeaponArena.html SetupWindowTitle=Weapon Arena AutoplayWindowTitle=Weapon Arena Options ProductURL=http://www.planetunreal.com/mutation VersionURL=http://www.planetunreal.com/mutation Developer=JbP DeveloperURL=mailto:jbp@planetunreal.com [Unreal Tournament Demo348Requirement] LocalProduct=Unreal Tournament Demo ProductURL=http://www.unrealtournament.com VersionURL=http://unreal.epicgames.com Developer=Epic Games DeveloperURL=http://www.epicgames.com [Public] Object=(Name=WeaponArena.WeapArenaMenuItem,Class=Class,MetaClass=UMenu.UMenuModMenuItem) Object=(Name=WeaponArena.WeaponArena,Class=Class,MetaClass=Engine.Mutator,Description="Weapon Arena, Play Arena with your favourite weapon") *Du@.?B=!nckj .uNoneAddItemSetText WeaponArenaCoreChangeArenaWeaponUWindowSystemSetFontAddWeaponStringItemsAddToHistory GetValueCreatedEngine RemoveItemFindItemIndex ClientClassWAConfigClientWWAConfigWindow SetEditableBotpackWeapArenaMenuItem MenuCaption MenuHelpExecutePostBeginPlayNotify ClearValueNoWeaponText MutatorsWeaponHistoryCloseHandlePickupQueryModifyPlayerCreateControl WindowTitleUMenuAmmoCEOtherDefaultWeapon ItemNameIndexInv enforcerStructName NewWeaponiStructProperty WeaponNameClassProperty AmmoNameDynamicLoadObject Inventory Function AmmoTypeOwnerUWindowSmallButtonUWindowRootWindow ScriptTextUWindowPulldownMenuUWindowFramedWindowObjectUWindowComboControlUWindowDialogControlUWindowWindowSetSizeCreateWindow StrPropertyMutatorNotifyWindowAlignParentWindow WinHeight WinWidthWinTopWinLeftCancelButtonRoot CloseButtonWeaponPawnNamePropertyActorUMenuModMenuItemUMenuLabelControl MenuItemClassWeaponString AmmoStringArenaBoolPropertyPackage TextBufferObjectPropertybInitialisedbDoubleEnforcersFloatPropertyWeaponStringBox ArenaLabelUWindowPulldownMenuItemWADefaultWeaponWAWeaponStringWAWeaponNameWAAmmoString WAAmmoNameUWindowDialogClientWindow WItemNameWStringWeaponClassHistory IntPropertyBytePropertyUWindowSmallCloseButtonNewWeaponStringNewWeaponName@@@')2Q~_4_4_4_4_4_4᱘22_T᱘᱘22_4.'l_4_4_4_4_4_4_4_4_4_4_4_4_4_4_4_4_4᱘᱘᱘2᱘᱘7XÑ7XÖВ]No such weapon found.@ @@@@@@@@@@ @ @*$2GMo o #]Weapon Arena Config + -      - - |BotPack.EnforcerpWEAPONARENA: DefaultWeapon is VpWEAPONARENA: WeaponString is pWEAPONARENA: WeaponName is WpWEAPONARENA: AmmoString is pWEAPONARENA: AmmoName is WpWEAPONARENA: bDoubleEnforcers is T--' -k 7$ 47 $ |g{ b   !$a- a Sw.*  a ,"#0ԱoQQQQQQ X\CB?,?, !   OIMPACT HAMMERBotPack.ImpactHammer& ROCKET LAUNCHERBotPack.UT_EightBall& SHOCK RIFLEBotPack.ShockRifle& MINIGUNBotPack.Minigun2& PULSE GUNBotPack.PulseGun& #RIPPERBotPack.Ripper& OBIO RIFLEBotPack.UT_BioRifle& ~SNIPER RIFLEBotPack.SniperRifle& FLAK CANNONBotPack.UT_FlakCannon& REDEEMERBotPack.Redeemer&  %& ,|6 6   ~DOUBLE~ENFORCER- 'BotPack.Enforcer- (~.pBotpack. r*  VV - Double Enforcers Arenap Arena~VBotpack. V Z//============================================================================= // WeapArenaMenuItem. //============================================================================= class WeapArenaMenuItem expands UMenuModMenuItem; function Execute() { MenuItem.Owner.Root.CreateWindow(class'WAConfigWindow', 10, 10, 150, 100); } iw//============================================================================= // WAConfigClientW. //============================================================================= class WAConfigClientW expands UWindowDialogClientWindow config(Mutators); //----- controls ------------- var UWindowComboControl WeaponStringBox; var UWindowSmallButton CloseButton; var UWindowSmallCloseButton CancelButton; var UMenuLabelControl ArenaLabel; var string NoWeaponText; //----- config vars used by the mutator ------ var config class WADefaultWeapon; var config string WAWeaponString; var config name WAWeaponName; var config string WAAmmoString; var config name WAAmmoName; var config bool bDoubleEnforcers; // ----- History stuff -------- struct WeaponHistory { var string WItemName; var string WString; }; var config WeaponHistory WeaponClassHistory[3]; //--------------------------- function Created() { Super.Created(); // Combo box -- how do you change the edit box size. WeaponStringBox = UWindowComboControl( CreateControl( class'UWindowComboControl', 10, 10, 200, 1 ) ); WeaponStringBox.SetText( " Weapon Class: " ); WeaponStringBox.SetFont(F_Normal); WeaponStringBox.SetEditable( TRUE ); AddWeaponStringItems(); // ArenaLabel ArenaLabel = UMenuLabelControl(CreateWindow(class'UMenuLabelControl', 10, 45, 200, WinHeight-30)); ArenaLabel.Align = TA_Center; ArenaLabel.SetFont(F_Bold); // for some reason, class config vars are not automatically loaded.. WADefaultWeapon = class(DynamicLoadObject( WAWeaponString, class'Class')); if ( WADefaultWeapon != None) { if (!bDoubleEnforcers) ArenaLabel.SetText( WADefaultWeapon.Default.ItemName$" Arena" ); else ArenaLabel.SetText( "Double Enforcers Arena" ); } else ArenaLabel.SetText( NoWeaponText ); // Update button -- not a close button because we need to do some special stuff when // closing via this button (ie, save configuration settings..). CloseButton = UWindowSmallButton(CreateWindow(class'UWindowSmallButton', 94 , 80, 48, 16)); CloseButton.SetText( "Update" ); CloseButton.NotifyWindow = Self; // doesn't seem to work otherwise. // Cancel button CancelButton = UWindowSmallCloseButton(CreateWindow(class'UWindowSmallCloseButton', 152, 80, 48, 16)); CancelButton.SetText( "Cancel" ); } // includes functionality for the full version. Note that I am not 100% sure // of some of the class names.. Also, trying to load the ripper fails in the // demo and shows up in the log as a warning. It's harmless tho. function AddWeaponStringItems() { local int i; WeaponStringBox.AddItem( "Translocator" ); WeaponStringBox.AddItem( "Impact Hammer" ); WeaponStringBox.AddItem( "Enforcer" ); WeaponStringBox.AddItem( "Double Enforcers" ); WeaponStringBox.AddItem( "Shock Rifle" ); WeaponStringBox.AddItem( "Pulse Gun" ); WeaponStringBox.AddItem( "Minigun" ); WeaponStringBox.AddItem( "Rocket Launcher" ); if ( DynamicLoadObject( "Botpack.Ripper", class'Class') != None ) //ie: is not demo. { WeaponStringBox.AddItem( "Ripper" ); WeaponStringBox.AddItem( "Bio Rifle" ); WeaponStringBox.AddItem( "Sniper Rifle " ); WeaponStringBox.AddItem( "Flak Cannon" ); WeaponStringBox.AddItem( "Redeemer" ); } for ( i = 0; i < 3; i++ ) { if ( WeaponClassHistory[i].WItemName != "" ) WeaponStringBox.AddItem(WeaponClassHistory[i].WItemName); } } function Notify( UWindowDialogControl C, byte E ) { Super.Notify( C, E ); // an if/else system would be neater, but at least this allows for expansion.. switch(E) { case DE_EnterPressed: switch(C) { case WeaponStringBox: ChangeArenaWeapon(); break; } case DE_Click: switch(C) { case CloseButton: if ( WeaponStringBox.GetValue() != "" ) ChangeArenaWeapon(); SaveConfig(); ParentWindow.Close(); break; } } } function ChangeArenaWeapon() { local string NewWeapon; local class ammotype; local int i; NewWeapon = WeaponStringBox.GetValue(); // Shorthands for common weapons. switch(Caps(NewWeapon)) { case("IMPACT HAMMER"): NewWeapon = "BotPack.ImpactHammer"; break; case("ROCKET LAUNCHER"): NewWeapon = "BotPack.UT_EightBall"; break; case("SHOCK RIFLE"): NewWeapon = "BotPack.ShockRifle"; break; case("MINIGUN"): NewWeapon = "BotPack.Minigun2"; break; case("PULSE GUN"): NewWeapon = "BotPack.PulseGun"; break; case("RIPPER"): NewWeapon = "BotPack.Ripper"; break; case("BIO RIFLE"): NewWeapon = "BotPack.UT_BioRifle"; break; case("SNIPER RIFLE"): NewWeapon = "BotPack.SniperRifle"; break; case("FLAK CANNON"): NewWeapon = "BotPack.UT_FlakCannon"; break; case("REDEEMER"): NewWeapon = "BotPack.Redeemer"; //Not sure... break; default: for ( i = 0; i < 3; i++ ) if ( NewWeapon ~= WeaponClassHistory[i].WItemName ) NewWeapon = WeaponClassHistory[i].WString; } // if double enforcers is the request, we need to set our special case // bool and set the weapon string to a single enforcer. The mutator // will take care of the rest. if ( (inStr( Caps( NewWeapon ), "DOUBLE") > -1) && (inStr( Caps( NewWeapon ), "ENFORCER" ) > -1) ) { bDoubleEnforcers = TRUE; NewWeapon = "BotPack.Enforcer"; } else bDoubleEnforcers = FALSE; if( instr( NewWeapon,".")==-1 ) NewWeapon = "Botpack." $ NewWeapon; // Let's find this bugger, then.. WADefaultWeapon = class( DynamicLoadObject( NewWeapon, class'Class' ) ); // not there? reset and return. if ( WADefaultWeapon == None ) { WeaponStringBox.ClearValue(); ArenaLabel.SetText( NoWeaponText ); return; } // We've found it, so change the default weapon and ammo for the arena WAWeaponString = string( WADefaultWeapon ); WAWeaponName = WADefaultWeapon.Name; WAAmmoString = string(WADefaultWeapon.Default.AmmoName); ammoType = class( DynamicLoadObject( WAAmmoString, class'Class' ) ); WAAmmoName = ammoType.Name; // special case for double enforcers. if (bDoubleEnforcers) ArenaLabel.SetText( "Double Enforcers Arena" ); else ArenaLabel.SetText( WADefaultWeapon.Default.ItemName$" Arena" ); // if it's a third party weapon, add it to list. if ( inStr( string(WADefaultWeapon), "Botpack." ) == -1 ) AddToHistory( string(WADefaultWeapon), WADefaultWeapon.Default.ItemName ); } function AddToHistory( string NewWeaponString, string NewWeaponName ) { local int i, index; // if there is a free history slot, add new weapon there. for ( i = 0; i < 3; i++ ) { if ( WeaponClassHistory[i].WItemName == NewWeaponName ) return; else if (WeaponClassHistory[i].WString == "") { WeaponClassHistory[i].WItemName = NewWeaponName; WeaponClassHistory[i].WString = NewWeaponString; WeaponStringBox.AddItem( WeaponClassHistory[i].WItemName ); return; } } // Otherwise, remove the least recent history item from the list // and from history, and move the other history items further down. index = WeaponStringBox.FindItemIndex( WeaponClassHistory[2].WItemName, TRUE ); WeaponStringBox.RemoveItem( index ); for (i = 2; i > 0; i--) WeaponClassHistory[i] = WeaponClassHistory[i-1]; // insert new weapon at top of history array. WeaponClassHistory[0].WItemName = NewWeaponName; WeaponClassHistory[0].WString = NewWeaponString; // add weapon to list WeaponStringBox.AddItem( WeaponClassHistory[0].WItemName ); } &.2(*ͷ;aGV撞o $]&Weapon Arena Config]B@Choose the weapon you want to use for the Weapon Arena mutator.% BO%,2z6 z6 66 6 6,' ,%&6%6 %6% K//============================================================================= // WAConfigWindow. //============================================================================= class WAConfigWindow expands UWindowFramedWindow; function Created() { Super.Created(); SetSize(220, 120); WinLeft = (Root.WinWidth - WinWidth) / 2; WinTop = (Root.WinHeight - WinHeight) / 2; }  $."  A AHC? Weapon Class: %' .  A4BHC?,$& Nw*$- p ArenaKDouble Enforcers Arenab . BB@BAUpdate. CB@BACancel x//============================================================================= // WeaponArena. //============================================================================= class WeaponArena expands Arena; var bool bInitialised; var bool bDoubleEnforcers; function PostBeginPlay() { if ( bInitialised ) return; DefaultWeapon = class'WAConfigClientW'.Default.WADefaultWeapon; WeaponString = class'WAConfigClientW'.Default.WAWeaponString; WeaponName = class'WAConfigClientW'.Default.WAWeaponName; AmmoString = class'WAConfigClientW'.Default.WAAmmoString; AmmoName = class'WAConfigClientW'.Default.WAAmmoName; bDoubleEnforcers = (class'WAConfigClientW'.Default.bDoubleEnforcers) && (WeaponString ~= "BotPack.Enforcer"); log ("WEAPONARENA: DefaultWeapon is " $ DefaultWeapon); log ("WEAPONARENA: WeaponString is " $ WeaponString); log ("WEAPONARENA: WeaponName is " $ WeaponName); log ("WEAPONARENA: AmmoString is " $ AmmoString ); log ("WEAPONARENA: AmmoName is " $ AmmoName ); log ("WEAPONARENA: bDoubleEnforcers is " $ bDoubleEnforcers ); bInitialised = TRUE; } function ModifyPlayer(Pawn Other) { local Inventory Inv; Super.ModifyPlayer( Other ); if ( !bDoubleEnforcers ) return; Inv = Spawn( class'Enforcer' ); if ( Enforcer(Inv) != None ) { Other.Inventory.HandlePickupQuery( Inv ); } Inv.Destroy(); } + Qq TranslocatorImpact HammerEnforcerDouble EnforcersShock RiflePulse GunMinigunRocket LauncherwBotpack.Ripper *RipperBio RifleSniper Rifle Flak CannonRedeemer % ,{6 6   <  A ACB ^^YA^YYYC^$^YWY\Y@Y8YRYFY`Y7Y;YpY_868EYrYGYVY?YlY%Y]F*Y<FZcK`PYB4)YfcL8 8Y-F[8!T3Y4T/YU8 T5YTYSY>`78DcNY.YqcM`X88qIY2`J45`H`:dF%0 So__lgK()1 Y(m e(eq(-1 ~(b J)%1 V)n b)",n)Q{)#b H*j T*h `*!&l*)t y* E+"(Q+i ^+Oj+#a w+k C,)+ O,!'[,%9h,)s v,B-BT-#gV/s}4#!Vp6]F8 Sc;y v<(=4eoI=4twTOOH XW=4Vo wE#=4C| A(G@JFIFC     C " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?}Ɖq*D7 3#i;/Rk(6ziHr* <<ҴMB=ҲYjEݺ1j[]U,(;?)qƋ\|C F?)BC<2\i[ί- ʛOykK^馓M۞Ӣ^ǰLqxz&8ڸ:Qs=x%obhvS.I<|>GF/6 ֵ40y- o$km+#vk]NNK3K]<^x{K%j{am%:s%g\|ٕw 5|] DTM;H[&Јg8*R'zNڐxoNok_-tVndP ;Ö'&τto7u:H-(k[qȗ[p8+e{ğ|Ȓ>'m&7$BM2d 4qɉ+G!T`y>o>%iZ"Үc(UKx%1շ3m5b1ЍE',_/5oEMo+ޔeFzm^#xXoG=XSzc>Q#\g㮧g-/lʊ;ʊڇ}ijv;>{-~xe93ʗ6?Gm=-uwoD%t⯈7xFW]E^Zu i/o^/ՈSڝȎB^q56;oOJ𮳪kz ;}6;8ͳG$KM ~d+HaG+>r|;% nU)Iz# O-)97;m/#ǼeOM|BKYk[[hVGL Ĝy_b'Z@84+%E|;M y/G+?俕|J\҃oiS\0Ҿ|#ũ|\ $+Ħ$܎r‹˛yGjg͟_ʏW6*^+ \;2Gv)'<UR2LuE ?bc+y4KSOc?_?\%sg<9w''o?||/[mj9!OXңY'cI6#w~; ~26{Pn5i|åŧC:[M:+gc#?kiw Su}fMi+P3LF>޾ZфßLxc)ւWfpq+ ?XO~ nc+Э'W<<+ψn+Y'VRiץ}~緯^cY/>-OZu_v?7|]zG߷_;qz=?$}wdW㞿]N~'xa?_[˃?b?;ѨHy޸?nKW]k}V쬴.PcyYRݱr9!p}aYoNS*{:⤺F.JNǎ'I?U[D~?_0?^7xO&#{jpJpgEO&3W'??W"dz8|[`k?vuyJpUqbLgq_5o@{$?nn8i?]_ciQ ր׫ϧtTy+s5K [nn-Ţ'h`6IJ42']՟UJ$LB1" +v9O9~WSo=@r]B}yCrZ.6\Iiy!F@!VY$912Ji~)ֵN?J ]?<ٰѪ0\:hOL:]"2<{Hc[j(FIh?zꣅdNjƿ6]SjwI 9"Ay@Tg|7skFAxkS:E1K;p*XT2D}~緯^eŮ[m_[M,Yu/ Nh!o0qn eȀID|l|_&4V~zҴ è~KxO⾅xoZoY/+{5ݜs9#i= ց+ܹ# rFAomblt{1_Y7:`]dFJI+n]nLc^ٿ/?&6W?MvŒc=;lQ_ckwK?Nl?k}nBkEo/oOI[qZP~Ʒv"AjC[s!{z}ϧ(m;|c[ҹdro{S\?%Y{S?kZÿ~&pi}}5FUu6s`dz}+8#Qt1xǚ:]f1=-9l<[aa MHAs''k_擖ig࿲fyuCF]5odvrĖEJNG7񴝿$KSQ_y/_f/Ŀ%+-5O\7m7WYGjA:۫Iv_ڿ<|E#rV+ʶa 4tn뺞No!.S͕;?kU3쿱CNIZ1{wўFz3_޻ Kܷ9?O'޿z9?O'޿z쀺>یױ~޿y\ G)Ꮇl;xYYb3>IowNgM5۫gE/1/ohXLagm'*Cݑ?xk-RRm|p v #HP$K&ҭ I[ D.d+pHАu [[k+ {X")¿=տiӾڱoDP]1Qw$ tU,Sd }1^ힼkbdW{we4ff#&|FC!lo|?4όv{Xͧt!>OΈFWQMt:Gt{(`Fq"js)037}+yrf,Qg9ŰrySi%姮Nc<8./Eڪy>Pt[#|#HEq`vad|տoŝ\h὇ɛf2w&ÅpCG|X>;44칬mmmlMLW6%pDǯNJq Y+:-OuVZ<'HLSQ\)a% Qnז??ſ|7.s.UB[td}_ eR VZ4|@G-#$RxI2?w4+$^}7yǠS]?*|sEmpW/uOGyǃS}lkv$C(Jo)]?͟đi #h YFJQ_IV-ާ>N$ h@UwZԓrI<}O_5K+Ħ HG7]VFx=?΁?n [~/"nggBOaW ?wN_zswӿ?xK֌'O9O9~܆^<ýUnqO\ʺngL2PGny?z%WKous:2KdSRqA4m>h--屳x4K8+l4c1W'YG[7`y͗Uns52 :Ɯ{ ލ-}VwʪStm\w@}k:GnmCPl6QI0kFq+8n}VZ=Aiݤ-Z"ȲʠK `3Vg4Y6֗VVᴿ x;roP0Ipz{}O1uV{+knx../>z׋584˷iZ9 J+?T<F~cƋoXta:\bEibYd w3u`sߔYYb3? SYsh}'c/54M2ML$*i%\~9#/^Y]Oa޽D̰(FLE0ˢZW]q8+4(-lc|o*t{DmPb㠪J;ekַ}ImX<%-SOؼauIwh%董s|R5Bv7EB uk2\_K į̎d+1rTP$i4a|`}}7qyYڿwtzVu턖7S\9[Y-⑋;G'O5ap$gՠCmYnKOTXI[NM9u _M.Xۙ G˿n7,8ky.4MY-1ܣ)IGv0c_~"2;FqON{=lO+\Չ_}-kZc̿oz:qmbׂR붧tRv><5=TzZΡ&$Ф(JnXg'h뻏?n%_~j?G+'ھi=p_jPg'/:Y~qȱlO(Jp8Xh´<)n=፯+K+\hKZy":O&tsnai{U@ S'׫ϧt=9;<~s{z}kF_y֌'OiC/[OޯFys;?z/rG<{zG<{z^n3^ǿ֪D}zc]p%Ɠ:M?g*g'? ua<U:?4>kn͝䵻(.-kQ}>KK$joh x$+>{/4U[h{hoa+>;MwjF{%͵ƌ]tm@/Gt-Z ?Vku&$Y ຣ g x3ۧo%Vz.]7w-y3"p[X\<2:Ʈ-.\B+a剑١e g-YsV|CrVH#Yng '{KRmk{teζH+47 ٻ2ٻjW7з>HD.[tQU W;?E+Feޣ&׭[AlljW滖ٳ+3; X{؞V?&<_ՏZV_C6h=H%Bz?'uv?9mQ16z}ԨnCr?<[W_O/uOGyHX׿Fy> ]p6=G%=kѻQ&ѓ̑Hg#W#ۑ׿_}4ۤ,Ujc_~$:O t?á2xN{zwNӞÿ^@~>3^?(緯ִa?0{n~Qo_oh~a?Ϧ2gQ<ý^-}~緯^D}~緯^ .菿o_v<{}jG߷_;qz=Qiᖵo5yMw*2|*K 2wt<U:?4>ś%)+kScs~+?T<F~1q:9E/$ [=:4wiv+`6f|66goEbz3kְ֚iMJ3on"xb (1r0Zvcտpo3ǜd~Yb~_zPu\۩{#|JC1V]< ӥ2$[Oݏ<,Mr&(m}2mf/6ji'O}ՉT{J+7]Ncmyc'oynB+C)d 3k嗴z]~#x_P&6;g_$%Ra$h7'RI^^O?2NJ/Nx2h:<@V:<@V~O<?; #ھ=ϿPj _= 8G61C&I;p{tZWA$zQHu&Kk+f,QlX{Q6?o]?P>Y7zWῈ?R63mx۝sLדg:IITk}-bpr;ՇŚ u+{:ޒ:~\Z ͩѹ%:Ӗ FyG#k<_O)C;b}d+$  p2{ĸ_={ 3:8G_ 30?ςG/mcw3/'&p^{m^9^1 7˝?Wҿ_6'##Qĺ O st?]x[v wW1Xs3q-/// Mi}[ď)O Cj?~o^~!xWOG5y*'ɯ][$E)*A?`,&ggͲQ/X< yl5ynaw[yȂ@PXg\s8{pJS~}8szGOcӢ-M4ڈhbx"Iˢ&W D2wnjNԥdKUėoݼJ"f-!*İrX+{[>f"wFpA}~aNO8nٞ^NoKo_MMq6WPG\\X$9bɐ#F%3lAf4|_kFzz}mtKw},I$qa|Fk7G6gݑ YlmݮvU_c=9?ϥ&ጌ;=<=5<;Q>i&}88Ǩl2$r3+P:\U/?k6k"QKWr5T';pz׾:k,4mm$хǧ|TByp%ihs_yvlB?A4Q]FxoKGKxf!ma?/#6 g-/_Lxݡo)j d(=?Okyt~@zq ^Y$z:-ưjBWW)Nv_ʵw}B4Z+y"6._ji7C̙ٸDN,N9 {#0h&tv0G`:vQ5Ě֥p\ P+r71>^_PK \*@Csu+Yoq9J#mKWM ^iM6;kxm"eX'PYpq#zGt ~ 2MckB6Vt{RW`yqԌ=ZPmVK)9mOq{zMu'=~'MQִK+>f5U`en~aؾ xZC.KA]KB7eRYGhZr]Lbz&~e;שӏ~'h5o/Pcc(n<`U}5FO sm3éDw>[y"`V9J/C^Ws-:<@V:<@VO?'~:Ś~څ3XZY0= W7OͿğ |IwZ>i\?6cxO!utU~u`о h衇7fSqebx+°YA2>0>X;zNxj#T7M/?3H e^޷WRȰrN+O83jn8]d~X_|3~w'=觏qCS>|k> ,~u}=t&vGoaEϙO%Ư8a׭_[fvvP !W+a(CcKeޚ\' ^lwcxs$oMG!Ӯ *}>^RuԖw?`FU8=I9'<n~~cmS߹ӧ=5/ |Olu H ucv@'8a_~7㈿̎󆸰`Z)s<QKׇl26Pvێ1קUkwh]j>!_>iLʹpĞ}˪Մe sا>jFyUII w 8'~(HVRlJ玄} ڬ&ۣs>ko֑ͤ]D3 $8}Ы}Wʅ*BJnѓ7<-,]-DU FOuYڋ-;ZMky70 ;'{Y|RskibF*˹se{Ƌ|Q_1X[ { xʬWBVgM2#u9CI&P}5I&E7Wg63oa~%j&&(76Vmmgp$ltqׯ[ I7ݷ<]gn^/\7;۝H#<8;~>NgM~Iq Ad#N'99kVy?u%Xqv`f\,氍 /:Jr)նBַwvm1BFL1JỐE99mV(D*l]FbK1 ͌BA5K1|aDHq`>(:ߑyXHhzf%֑0[x Kyd[,7Jʤ p2|>PtJS73ZnD2[B"4ArK:eZ*xd[@"41KıPɒQ2hxc[75x'(b@/XeYBEtXetu2q\jl!C17zU8K%Z_N^v@_}3\)2MwcpiL]آTAfkOMjV_imwpMmeQ'`J1 Z_įOsZ 飾d+[)f3hY -۴?oDiF7ǖp_6?h3vA-y[ն?u5 \[_i۬,*Yr3 >iuZ}6[[nt^ң[).Ek[bNOs~"u|5B5&߲HKu9zm2ih^0RT Uagնq=~i}On- \)#>{9]IE$eq/f[m@d=]F,ͼ䃎t~<-'n i#=72+a\1 99G gpCWPGK3/B#tl^\oBWӾ !C|q3q{i&w~9Wd_hx4w+x"wx]qy6>l9?W}^u _oHK$lK}` NNpAvyѲO:UO2@7?{תj-KH$pXͶ$'jR4HZ=zPg=Z_:a=#sϫS1CKiO/ bASA^+?T<F~?͗LM@4w0[#R! D/n>7RYj<ڍ$^eKUV`#u> %OG#")AՂŽ>T3k5Okq'u-1ɸƒ9P\ڇw WЩn]-?3ƶI}KS5.0XJad hX8 CK{k>k~exJ|`J 3ڕWMMrɦz|{<02!;<z 67zJޫvYZ<ۘi.?c$1>acphҶ_܉sj\]cL7(y#@yF#S .`v% ]`:w}n[KǪ̏4qG1H`^8`SJY36%C?Sa(lJqGOc,aajC1M>L')gxv˻{6i^KdY[!ع)m JH,xlg`Iq^عK3U=/h,"fHC1e%7!g $<6'=~>ZP$U%MNcD鶺N!Ҵ鴻>6x n fxZ@l필O 1oG_m/'­aq!wl<LQ?vS4/Nx3^vΚӧ?k_Jӧ?k_$?aσ9]?O[-4duy>9xne,TV7<^_9c՘qjz?<W8Z9I$ϙt|g˅?@gtञ3_S׾$xF7x{]ZTIISU繯%M+]h-#b,A,y1OGJSguZOd72FABN"\/&'&rS+W"zXӒP[y:䐤klrӧZѻz`KHdP2jcĉy!-g*@XFFF^,ri4!ܥx1l+iE&xSiɴf)7JN~`. ?O[ hY|7}MӏxNtP{6zc,? ¾.Ur^H3<\~o2Oe{8|V>Wm[XO!ģH/)G{jI-ĭi.2᰽єu篒))Dq]||^_׿nǎ_; Yfe\|1;~<U:?4>VSXXΐKnM 0*_9޼}g*gԴ$jNuK{[{Db[M])vbi%vބ8Ún4et{&*ݼ-9?/^Nz#Q𮁨kQY.-˩;O+۽8w@ ۂvW!/eDDƭ.X-" ϲ !d@THPM5e:rv'=~>M;=kIڕb&ᄲݣ `6+yNa̱_u%5kN=>hHQa*yƖ̒RgEe[2kmRǾ_ÿ=z8\~2Z[>ݴHn"s4qWUrYA UIvq⸫#o/Fӧ?O <[qǞ:hio6\ʋ[F͂hN mƼ9ɩNM$OCו[]%gCr-`,<׵՚>-^.<>dsI}e/uS(;A|PWvF,gWh\i-0oחSd8j1i&WD ʶ2ڶߒ;c0[Ɗdyvgyj2-v*d3[V#u:?j-ҹHuwF2?25ĄO.K2g;s/ ]~_P1oR೯x}:k7|=g&Www|Ԑx:$Oٚ$bǠb{d_.go\&- \=$:TtTMF#!A;} zԞ$>y;p ks^*WKl/ro$vZ]:h%[=,|P aWӵ=OP]#̒HO_={k?zLƽ nGC⮈V$_Xt%W#T7rCuM_RGI"IE(iB As^X/y_ZzW܌ |W)x/SD(AIt~ny9/.֤w31." NYH 6NoX7?sV}_i}B:H :g2_ä䴡F<>o1㞟\s> xìGG%6D Ru_J}I??Z9*5%k.9])IXdҚt_ڿicjDf EWo&<7s-9ȫ_kK툞7>¼Q2x1^icIwƏZ>B\*g$YM.FO/&Ő5DŽ>@?ifCc}n 4?ևSF??__;?O>2̝G܇K*(]Lku;>nPOo׌mIm:{.R[k h|.%k{fi?tҋd$H6B׊x Weapon Arena Mutator

WeaponArena Mutator

Date: 28/10/99
Version: 2.0
Compatibility: UT Demo 348


Author: JbP
email: jbp@planetunreal.com
site: http://www.planetunreal.com/mutation

Description:

Weapon Arena is an arena mutator -- it replaces all weapons with weapons of a single type, and all ammo with the ammo which corresponds to the weapon type. The default weapon is of the same type.

However, the Weapon Arena mutator allows you to choose the weapon which will be used in the Arena match. You can choose any of the Unreal Tournament weapons, and any third-party weapons.

Instructions:

Double-click the UMOD and install into your tournamentdemo\ directory.

Then load up UT and choose Practice Session. Click the Mutators button. Double-click "Weapon Arena" in the list on the left -- this will add it to the list of current mutators. Click OK. Note that you can only have one active 'Arena' mutator, so make sure you remove any other such mutators from the 'current' list. This includes InstaGib. Configure the rest of your settings as necessary and start the game.

To select a different weapon as the arena weapon, click the Mods menu on the menu bar. Click "Weapon Arena Config". You should see a dialog box looking something like:

Select the weapon from the list. I believe that Weapon Arena will be compatible with the full version of UT -- if you are using the full version you should see several more available weapons. Once you have selected your weapon, hit enter and you should see the dialog box text change to the name of the new arena. Click Update. Remember to put the Weapon Arena mutator in your game, btw :). These settings are saved, and will be operative until you change them again.

The format for third party weapons is: WeaponPackage.WeaponClass. There is no case sensitivity. Once you have typed it in, hit enter. If you have typed it correctly, it should show up in the text below the listbox. Otherwise you will get the message "No such weapon found." Your third-party weapon will be saved to the list and you'll find it there in the future. There are three history slots.

Example: type u4e4ut.freezer if you have the U4E package installed. you should see Freezer Arena appear.

Obviously you will have to know the name of the weapon class -- the name of the package is always the name of the corresponding .u file for the weapon mod. You should be able to find the information on the weapon class in the associated readme for the mod.

Thanks to mek for the UWindow tutorial. Visit the mutation device and Mod Central for more mutators.

Questions, complaints, bugs, etc: jbp@planetunreal.com

System\Manifest.ini|System\Manifest.int|System\WeaponArena.intSystem\WeaponArena.uvBHelp\wa_dbox.jpgHVHelp\WeaponArena.htmlОT$b؈