[Setup] Product=BatThwap 1.2 Version=120 Archive=BatThwap12.umod SrcPath=. MasterPath=.. Requires=UnrealTournamentRequirement Group=SetupGroup Group=umodINIGroup Group=BatThwap12Group Group=umodIncludeFilesGroup [UnrealTournamentRequirement] Product=UnrealTournament Version= [SetupGroup] Copy=(Src=System\Manifest.ini,Master=System\Manifest.ini,Size=628,Flags=3) Copy=(Src=System\Manifest.int,Master=System\Manifest.int,Size=576,Flags=3) [umodINIGroup] AddIni=UnrealTournament.ini,Engine.GameEngine.ServerPackages=BatThwap [BatThwap12Group] File=(Src=System\BatThwap.int,Size=149) File=(Src=System\BatThwap.u,Size=83000) [umodIncludeFilesGroup] File=(Src=System\BatThwap_Readme.txt,Size=3489) File=(Src=System\batthwaplogo.bmp,Size=28960) [Setup] LocalProduct=BatThwap 1.2 ReadMe=System\BatThwap_Readme.txt SetupWindowTitle=BatThwap Mutator 1.2 Setup AutoplayWindowTitle=BatThwap 1.2 Options ProductURL=http://www.planetunreal.com/muad VersionURL=http://www.planetunreal.com/muad Developer=Adam W. Stiles (Muad'dib) DeveloperURL=mailto:muad@planetunreal.com Logo=System\batthwaplogo.bmp [UnrealTournamentRequirement] LocalProduct=UnrealTournament ProductURL=http://www.unrealtournament.com/ VersionURL=http://unreal.epicgames.com/ Developer=Epic Games, Inc. DeveloperURL=http://www.epicgames.com/ [Public] Object=(Name=BatThwap.BatThwap,Class=Class,MetaClass=Engine.Mutator,Description="BatThwap,Attack your foes in classic campy Batman style.")*Et@-iA*@?{`f-tNone ChooseSymbol InternalTimeColor RandomOffsetVBitsVClampUBitsbMasked MaxColorMipZeroPaletteVSizeUSizeUClamp BatThwap PulseGunDoubleEnforcerEngineUT_FlakCannonripperTournamentWeapon Minigun2 UT_EightballCore PlayerPawn ShockRifle Enforcer ImpactHammerBot TeamGamePlusMutatorTakeDamageSuperShockRifle UT_BioRiflePostBeginPlay SniperRifleSystem RemoteRoleTimerTextureStyleMassBatThwapSymbol DrawTypeRegisterDamageMutator ScaleGlow AmbientGlowMutatorWeaponCollisionRadiusCollisionHeight ReturnValueVBEffectsZYTeam GameInfo ScriptText DamageType Location LevelInfo actualDamage Momentum HitLocationGame Palette3 Palette1NextDamageMutatorVictim instigatedByPlayerReplicationInfo bAltFire Palette9LevelActorPawnXPackage TextBufferObject FunctionVectorStructStructPropertyTS Palette13 Palette11 Palette7 Palette5Splat Initialized NamePropertyObjectPropertyFloatPropertyRange BoolPropertyClass IntProperty TypeChance BytePropertynegpos theoffsetOwnerTeamNumberVictimTeamNumber chancehit totaloffset axisnegpos BIFFSOCKOzlopzlonkwhapwhackthwappow*G$%+('-$@.)$   " "@""@ *+ *"h ӡA0(@ػ?Oghhk?ij ήP د@MJ?ppBv)HRjguvmbKukد"H@RgܾڳM@$JaaJsjPT7Ckد@!7Rl4aӽݳbzAs$"`s-гezQ>ݳM=mػ?!9~yzRM`zQN=l +"ohseO1_Atθos|YUpnOuuqn;aUBA>I>+ @=SyT.nخTI~~UM`/zӿbί19.,֜HH.PKfb~{pngkjnBe`=)gۯ1'2SmT7^pp5;aTxgq@-.,w>˳b`yA j9.,q!7p,h@a`{o򷺮,^{.,SsR*>wMR$#3tq"1.>RNaypPmsvKW+.v>@MTt?"9xq1wЮyM=|vǥyՙ. bup$\YgػM B-Ubaa~uӳuoтJc.?1!$|3r˿bXRsGz˳wSͿz*گSmTMcO$7a~yf{y/q{w~QSlگt@0E?"7`HXFZDJuѳʤ†U=tٚ=^C'JJaJTaGL‡A͝˵xz-K'v5$7GGK_J~xvq{3EojnnK`xxmktxw' q!$!7WYM[}w]0YCi{'Gxrָĺ,@;,q&"74UC,,=D7%50A߸R@%1xѤ/ձB+˳W. V"7  .%J`d/o)u7xѤс;U=_->ܻ4$5R Eg׸1:Q}ǖwSU8T$$1Q> !&SgiT!"xuѣ_vdۻ2$7R $8E gkq!!a-=uu㚛P✇0 tjq2$!r) =?/,0%JGwյulrsY, ػ@2%Hy*n&2n.!H.ݝ˟T,l- o'"1../,.@5e`~Q•Yճr,.1.q ήq2^:{=[HџTQ- O1/ iR.ghq1:zvܵc;u)l /?"Rnq&M0,ҾM.ʡVC w'!'ҸruLNaazվMH|yPiw"!"N94Kd'`aH`aG`J|Pu:7JPɲ>зu"!J`Jb`a`JaJ`GaJAr"!4.V(lՃC,.;.;R!ۂ.;.;X'X'X'X'X'X'X'X'X'X'X'X'X'R!ۂX'X'X'X'X'X'X'X'X'X'X'X'X'ՃC,R!$O"   a/!  a/!a/!a/!: :  ?,K%6ww&6?,%6&6?6~a/!a/!a  a/!a  ya/!*:&'ff>a  vv:%v?a  a/!?a  a/!a  oa/!a/! a  a/!#a  a/!!a  /a/!a  a/!:&a  :%>a  a  d d a/!d a/!a/!a/! ?,%6&6?,2%6^^&6?6a/!a/!a  d /a/!a  d a/!:&ff>a  :%?a  d A a/!> ?a  d  a/!a  d  a/!a/! a  d  a/!#a  d ` a/!!a  d  a/!a  d D a/! :&a  A A :%A >a  d a   w*$   W, ,%   G&  " c,  $ ,  & ,  ( ,  * ,      ">. -  - ', H//============================================================================= // BatThwapSymbol. // The "biff", "sock", "pow" symbol to be displayed around the player //============================================================================= class BatThwapSymbol expands Effects; #exec TEXTURE IMPORT NAME=zlop FILE=Textures\zlop.pcx GROUP=BIFFSOCKO Mips=Off FLAGS=2 #exec TEXTURE IMPORT NAME=zlonk FILE=Textures\zlonk.pcx GROUP=BIFFSOCKO Mips=Off FLAGS=2 #exec TEXTURE IMPORT NAME=whap FILE=Textures\whap.pcx GROUP=BIFFSOCKO Mips=Off FLAGS=2 #exec TEXTURE IMPORT NAME=whack FILE=Textures\whack.pcx GROUP=BIFFSOCKO Mips=Off FLAGS=2 #exec TEXTURE IMPORT NAME=thwap FILE=Textures\thwap.pcx GROUP=BIFFSOCKO Mips=Off FLAGS=2 #exec TEXTURE IMPORT NAME=splat FILE=Textures\splat.pcx GROUP=BIFFSOCKO Mips=Off FLAGS=2 #exec TEXTURE IMPORT NAME=pow FILE=Textures\pow.pcx GROUP=BIFFSOCKO Mips=Off FLAGS=2 simulated function Timer() { Destroy(); } simulated function PostBeginPlay() { SetTimer(1,True); } -O & 1%  M J&  M  @ * J7   R> 4/wh fY]S&L3%$  SN80- ź&!ɼ }.#|!pl  3ED +% 33)::'GG#>>56&-&[[$ <78jl( CE$% 7qu#GJ '(qv1 ~2F?2*af! 86- ,$ "LQ0XOY+Yb2%j~+2ksR UiRvD.< D\ '(%  (  ,3' DRE(495   -1307= &a " a?'  ! " "@""@ *& *"A]@ߍ1Qb"zVHstb4;GXŒM;Gssd& 8CZbJJ`!,WCB&ֶc9F[S"J6_S nvLԽG@s[0Jk6F6uZgʽˤ""ٓ@m1$!K_5Yt~ʣ˻țf۪8B<$ ِoCYLp| ΑHUJꭝCt~k˸MӸka2AF6՜E[)岞Csb+tt(#؝GɸyϷt.!8D@j1P(#$6Z[yC[Q n_N.Wŧ$Qv dEE[POJ<>-!aHsL  1@F6bvSnF~fԣ'f!dG@ZTj0&ڕ>>-FEQ%6^8ahs_e& v'M>vK<@mNsXe+SGvQi4;^K&֠vJƽ fq. KVD{ǪMattIA@u# /8F6JZkMҠ⬮tX%MJ4HFm~{JcۑAt`En .8F6hϜ\v{h쫜_nc#dF@@j|[>-M߫DMf%8C> ƧчE<[ 16tǜӗ~|h>>a+ЇRfJlFtd.ԇ( tZe ϝvJ0VJ ֥NcBW-MJRcg7;|ֽ9iEtNvm2Gv)cw(J !y8[/E_R#&P@AntS lGsƸ)Իw18W)OÁWN2>0+D<(P;R#ov9 fLoEZk##Н^$1)O;8(4>KF<- i7s'cg<` Csc㖾@$c#׭dv' cPW0D[3McgJӝ dD@ʖOvsc6B3 P60;oNMJlsRcݝ[< ҘDA..zG~hΪ6<,PFP;>1f %oZs'lBW'iEZic zFt' `e>9JO2<8_5hjH@B' ܓ*M<@[r'UDsj&9?m/6S |F_'E@D(  RY9y6B3&J8D,=,c.24i[F9)۪>C_3%Jp8窆t( R>B<,26lBF'՘@R$lB<oZ{MMV&<8ُy6;J$5=s[n*ck2>6Ay fdXR -;Uz4)g3=a`;HZjuO׬QBS䪈%2;]ٓ?% zH5iғeIIRBuL B9&դS$lw:&I(ap*eѽoJ k)g1,yBUѸ| 6j `3g־~-jj! Iskҗ:֤OJlqkyqtǙȂL˱ 䏻[*u_Tj'!>L9n +ap,m[T¯~Q|iouy+N8R+K ^$QFUƥm~jjmY:'# N/m,}}~j,MQ]~~~Lm#ϱT)i&}L˖{L {t={˛ɟ쭘kO M~jm}}Ѱy5{˹ym #`Iܖ\}jΛ:XɚhMf#xgO./?}ɱhhfz}%kM2M .Ηur$qM#.c@@ )   =,_FD5  UH"˥3g[3)" J@3+ }=fX޹&qtf! F! &*{&ѽ*;7ƶ,0OI.-)($'#""˺ xs))4˿+;8 +.&Ƹ""-93.,DA YV$$ (-&& ~|//&++FB80/$%#" >-gi"-+df >?%H959% GW]'))ow%;, %ksC%+W^:HSrUh  8J(6/>CP/&      %  # " "@""@ * *5"O#A@ $Y@KJZe=&?}SC8sCnr9t)[N,2t 3?Lv`6`_v@=Wx[CAv&`vW׬}~8,QnKNY 3$  &iקoP˺1v|PU= ZZdYY FaRguZF þ+ ̼A j+1s9Ou f'*@}ljC'Jv4Ǩ_ѹ輼ӱ3n.Pz]u(HO(ưFKPTu JkÿNt˿aDO99Fsoݦ":p92T/7mU"IVw9M{R7`n&d*WWŭC+++lll.z-G[KZ:݊j(5Zŭ+IٷI~u=F6k.+zBfu@?Ǵ)~q6L~ahyCl78_(;YD( JW+(>%azL-zRPRT]}{A Hc+>Opd}~j7OD.DE9r~(Y=j>V>cP f,:)6.zpHrIq;Nwߙ Į_4W%K+p-k77esE( sqLJ݈J6WggL/`zʺ.z-M~|`rC6ɥs IY~t/ͼ+9iR-PEN_`R4NK)M4!D)?+j?\_0`-C{zPD{0caDV6ptBȩN_}pF.RS9`DTsb-,zGz{quShӸVI [BF FaB(XobjjNbG,/Bm/PjFiz>Igs xcNY_[Tj?FkTY W/(I<T;q6] s]aJJ~{õ뿲\ٷވm^X_~S+7:Zj>ۯJ}reFe c$[~u]>#eB}$s3KK}~/w0~q(<m | r2ȩrJ11t@@ jM`"| @# #(#n O w Os!"$| p)"GJ, *!$m$&U r + 3 "~M t#""B ;5(, |*i!X y%< -Z 4 M1p'Odz%(#g x $H; t$C % +   /,&z" K  (o! G 8 /3Z$    ?%  ' /(n.F t!7& ";~-1T$"3%*'f zutk  ]*+B`-0(*th!E  % " "@""@ * *L"Z<Ac@>Y.XWѶ9VVѾE]VԾqFV?1ԏqqC*%?_1Zqqmv:'=Ȳ_eGZ[~qov%U=WכtMEGDYlqqD&滁lΙ/0@+w+qN,]hVnd[>Թ~b<@@2*V_LN)6f0YNH~h{GdqqÄɿqqqĮjpcPpP=&Y0)9) &X,p>kjiPgQR=~OG X+#02/ ++8CD#q?$b9p~pVku^[& 22JCCMh?Q:ܐoeZ:3d̚Pkëe{䞓GV*)) %HcfC\Q:sD>aKkvegu[ϧȩ̂$ƣvRYR@/ gggh\[:rp~eQw1epһD.2elhggg6!:hgpϞpO>ٛgqΔQ˓)223>16$ag,O:mm8(ͤ^p`3cqET?V)-. YƵ8M_C6O:mNU]?THNj2>bY --/+*1Cfh64n8( kEL@Խ43>+/0:]H+ C1O3g_,ƣK_9bٷH` {82H2A=ܞ~K{`:av3ZBp3ꊉMy+8~~c6Z纞PT4p#"!VV޸mʵZ%?y8cg@ZȱSO>%jQݣY+J6*>d|u3!U*Ag0vRv۳=?gHU %\CAD>U*\@D '*%@@<Wb* I@! 2)5,l$V ?%">2>1F5y'N@-<)9&;'9%:&[&&#$6 Q >  U0*O$_%C2, 8);*@->*<),6$9&F =(8#>&:#;$7 v9.G 3!<#5<#:!y":!=!57;;<<.5;<;g <<;:Z r d,@,:@.?>8<<?=?;=?9=<6=>??;<>>*% b#0D>*A0>>4;B?C*:By$ 0>?A@A@A@ @ Z E6D;3=E1@DFBFBC: $ t*K G;E Q 6=ACk' II9 & 4{2+:L4  G! ],r3> V( 4j3  G  $ &!  + ' " "@""@ *( *" A@ utⳲ gMXK!v2ᶏPPx{#8rxuoi|[c R50<ȍNQAuc186}yTsD鯋.K5b$(14xܚI8-c9A7XoQi|iB3^DW;ڢ{I cݟkQIvœ7g~ꍖDߨ9cxG )|fñd10?ױP"d5jב<|s4hY)SP%^mUt:~-dPN|D\(ۂ8XNce_F@R5}Ƴ>=î-(ՌNK(9b 4Dzb}ucYcwe`~cs_fv4-}1Sڨ5BH2t\.|,)`+w{Wߢd~>P-@wIKfpniժ|IJ֯&=@Y屐 ,1'$R7#zEȠ^afno~@$țN)řd>Ӫ|A<,)ߧA^<|QQsnEύ4aGnnm}y˝oOH&;Ƞ,}1jY0޲R(bA7#7M]n[BCuANaGknnnCyﶝTE@=&4<@e V15nnnpcѶ~ZgWw>vٱkm{Ǎ4šI,yü4K7}ƢY7nnmnX) }ov=!u[`/w|B^!bݩKc殌^B?e#1UfF tPfgnonާUxHBMR!Y0%|I,5IGZJ.t[]UpphEHRJzgJRd*z-c|4)ö1W 4JĚBcd[nrqGƢB@9Ě16~h~֍Z0*}\W+44+ț~t?Trlf]l›e+֙>7Q|Ț˜X*x0Cǚe.JVKԫg-y\MģgǣnJyeDz\6 bçnnRv˚+3Yǚ|D.vd[ҠFeĝ9%|G{PY(խmXߠB@!.ԚeDj80ΣpqnCȾnk虉Q}HĚ46ʠKXzeF.x8NUɀrGͧ~W֩MB"80 ۍF cBjSߨ7~UĨkJ i@ {.zZ(Uߚ|עZ" }iihCy{fرFm= ֭dʍF+DI34.+%&$%!-1<4*+, (4,6-5CC,)&,^m 5;+#xTdGu-LO TgDSMZ0GYr$ Hd2@BZ%,#/ 6JUye|=Ul.x8)< [|*l,Ed.)7)    c(   ' PmE4  0d):R8 0>0 2-  ) " "@""@ * *"A @ӧW#!n|d>QDZZӾSSggs0ϊ\o{Ukggsw۽^Bnۙ(NnYTíUUhgȶYvVb]MXQekuiiggl5w ʏUXRjΥSVhehsΰKC༽/yuUXSk4{u$`k=^xvs|sV|馁#`vXRksvQƛS_Nġsoq#>~ >>Qgssq6ʴLuipjc~gl: ZC.6Ȥa#4)Ode鞏fO% ߒO%{H,ĞO2ӥ~u6Ȕq8iCLK3zbbxᤁ2 n3xdF^oij[j3/B /͓ٛ1b;xK&F}3Cshauvi_/0Cþb1b>xD#BnK8lgM՟l;Tldt㲌.1yCıb|bHcuHxێdE#w?XSgtv?XMs.c mC4"bc^FԎRM|ⲗ?*bos>Ruv%!Z}c[\Dc#Ӟ"F街SU5tؔMYfsV$ŽL ,2]_"Ύ"C֞IHt׎lP2bA4x؆Q7Ž:w m,Ⱦ_p|~_tNj^㤡Gt׎jb2[̍%#44mČ4w y%o_E򍁢t袗KHH#o٨_-^2\w z26|2GdD\kOiԎdIQ$썃K4[+yE!mO^G,bH7?jugch^բJ.>~gUQgg2]ƶPICnۗ+G|amZ6qGpb-;uPMbvտj?SkggggkkkD4D{451 z@.$c~^,}*-?>U?Aktf-;kggkgkkkg[l#f&{@*Jù~ش.*>UUXQSSbf?;jMlhhMkkg[ƞj3[ġq'xВ**.6HĴ7>>VX;P=LE>>TiNwQSksCb>4ˡ%`]]Ͼ$***Gwtˍ,дJ-+wxlQQ>Uu+?h9*Ugֽ*:CŷdN@@m%PO$,Ȥ}H^C`I%7iQX;SձL?SO=?dqוQ4">>3 Ϟ C}^ô%uZuG'-*Փ9-fT.*EǿJ9#`&'&)w6}$b*IwrO7OFܷiN=I՟8-O*>Cq&N|ZNL!n`iroI%crIcΕNO?IՅ';$tﰾL6nc]ޚ"w9CFA*Mh>Ltݥ֮ČtG C%Ŷ**%ڶ+mݭGxܺp@7*6EF΢Ɛ}]݈C*9|ܜ6-o"EńCŚG nww)`cF}Ϊ$Fx:,iToƧop)r<+)i,'t6+tấ@@   "#EMTb$q e *|#w p yf&s }  d  "Uv Gk3Ms} 3Hme Wf \ $)U *A tz9] >f N&5 {# $!";!Fi*t'$~'(%&#i#3!f-.(~%y)!t5oJV/ D|  93X/'u+(z*\By  .U 0Px5x&g)o-}%kM4b;p  * :s1m=k-p/v,u"D&/=0B]ẏuAӄ?t !5o\9~s۷ld,GiK9_lY ʬ9)]4 q4." lGf;gd0MiI(Z}~fGC)㵬`??Ϟ^"#7fI(::FfA`~d/|k[E؝f-&輂ι_t˫ GfaI1(Evó(Z&+5Yu  ^7azx$Ofs ZĀɟ^)ӝϗD?Ԍo0&/D^W571A_::ae- 2!G, ZyJb~‰u1Zӝe'xMd2 A E-!ZAc zL$EWFnX!#n漂͒ѾЍ1&⽬vABx|4 /7:tҜX"#+3.@:nٞk~zhhh1&䯂1ӜHf/ҲU * qEs'!#Aڹl](OOnŪλAn~,罤ʬ&UtO`72M7 qX!70?G!E'y@a/ڞG~(٭x0y|{D'赈X-.5[5*\ "13! ?yKJ1OGPW(fYxmu+eLO*9WvFu[5WvvPDHM9;Qf\Z}~Ξߝ–wnϖϚ&֛H]r0,v7~ly^`·T嵉o4ڦ~9tBZʺ־Ѿֿ /`R-w77yf^zW,n~GC齫}_tȪn9W_Ϝ-2]RyzI.۷G&) 'Œ~n'ڿΣ4得WEM(/-2 9v@W_۷f[ڴm9Aλ$ۿѼ&\&ҝ2.AV0ۋfuײss^ޱĩ~\Џn־]'u,;*<7**T22,n(OsX<7z~oop'֦koz^^Í1Eᇑo1(W /*.(-K6I2.o0$<,J2P7o#2NRDCL,,N,/I(K(N+F$I&I&I%I%I%+I"7i ' J0Z @#F&N+x*6I%N':K$O&J#M$@K"$ J!O#L!KZ @$3K KKOLMKGLP@KK3KO&T%V&Q"P!R!,MF8=-4MLNOQMLKLOMLOw& NKT/! H QPQUONQOCOQONP1  4 d% QSPLPTQSPRQQLRQRR= V(PU=BSUVXUVT> TRSTT H S P S KmF2COLTVV\VOVQE VU X S V X U V Y S U U V QU V U U VV Q PM |8 ; L K*!y?\/ g5H$ EU) *n7 b6 *   6$  9/  H9 G//============================================================================= // BatThwap. //============================================================================= class BatThwap expands Mutator; var bool Initialized; //const DrawingSize = 1; simulated function ChooseSymbol( BatThwapSymbol b ) { local int TypeChance; TypeChance = Rand(7); switch (TypeChance) { case 0: b.Texture = Texture'zlop'; break; case 1: b.Texture = Texture'zlonk'; break; case 2: b.Texture = Texture'whap'; break; case 3: b.Texture = Texture'whack'; break; case 4: b.Texture = Texture'thwap'; break; case 5: b.Texture = Texture'splat'; break; case 6: b.Texture = Texture'pow'; break; default: b.Texture = Texture'pow'; } } simulated function float RandomOffset(float range) { local int negpos; local float theoffset; theoffset = FRand(); negpos = Rand(1); switch (negpos) { case 0: theoffset += range; return theoffset; break; case 1: theoffset -= range; return theoffset; break; } } function PostBeginPlay() { if (Initialized) return; Initialized = True; Level.Game.RegisterDamageMutator( Self ); } function MutatorTakeDamage( out int ActualDamage, Pawn Victim, Pawn InstigatedBy, out Vector HitLocation, out Vector Momentum, name DamageType) { local byte OwnerTeamNumber, VictimTeamNumber; local BatThwapSymbol ts; local Vector v; local float chancehit, totaloffset; local int axisnegpos; OwnerTeamNumber = InstigatedBy.PlayerReplicationInfo.Team; VictimTeamNumber = Victim.PlayerReplicationInfo.Team; if ( Level.Game.IsA('TeamGamePlus') ) { OwnerTeamNumber = InstigatedBy.PlayerReplicationInfo.Team; VictimTeamNumber = Victim.PlayerReplicationInfo.Team; if ( ((InstigatedBy.IsA('Bot') || InstigatedBy.IsA('PlayerPawn')) && InstigatedBy.Weapon.IsA('TournamentWeapon')) && (OwnerTeamNumber != VictimTeamNumber) ) { v = Victim.Location; // Generate a 'randomized' x position in relation to the victim totaloffset = RandomOffset(1.75); axisnegpos = Rand(2); if (axisnegpos == 0) v.x += (Victim.CollisionRadius * totaloffset); else if (axisnegpos == 1) v.x -= (Victim.CollisionRadius * totaloffset); // Generate a 'randomized' y position in relation to the victim totaloffset = RandomOffset(1.75); axisnegpos = Rand(2); if ( axisnegpos == 0) v.y += (Victim.CollisionRadius * totaloffset); else if (axisnegpos == 1) v.y -= (Victim.CollisionRadius * totaloffset); // Generate a 'randomized' z position in relation to the victim, but make sure the value is above the victims head totaloffset = RandomOffset(1.5); v.z += (Victim.CollisionHeight * totaloffset); // Handle which weapon is being used and generate the symbol accordingly // Attacking with enforcer or double enforcer if ( InstigatedBy.Weapon.IsA('Enforcer') || InstigatedBy.Weapon.IsA('DoubleEnforcer') ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } // Attacking with impact hammer else if ( InstigatedBy.Weapon.IsA('ImpactHammer') ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } // Attacking with minigun else if ( InstigatedBy.Weapon.IsA('Minigun2') ) { if ( InstigatedBy.bAltFire == 1 ) { chancehit = FRand(); if ( chancehit <= 0.45 ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } } else if ( InstigatedBy.bAltFire == 0 ) { chancehit = FRand(); if ( chancehit <= 0.5 ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } } } // Attacking with pulse gun else if ( InstigatedBy.Weapon.IsA('PulseGun') ) { chancehit = FRand(); if (chancehit <= 0.6) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } } // Attacking with ripper else if ( InstigatedBy.Weapon.IsA('ripper') ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } // Attacking with shock rifle or enhanced shock rifle else if ( InstigatedBy.Weapon.IsA('ShockRifle') || InstigatedBy.Weapon.IsA('SuperShockRifle') ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } // Attacking with sniper rifle else if ( InstigatedBy.Weapon.IsA('SniperRifle') ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } // Attacking with bio rifle else if ( InstigatedBy.Weapon.IsA('UT_BioRifle') ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } // Attacking with rocket launcher else if ( InstigatedBy.Weapon.IsA('UT_Eightball') ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } // Attacking with flak cannon else if ( InstigatedBy.Weapon.IsA('UT_FlakCannon') ) { if ( InstigatedBy.bAltFire == 1 ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } else if ( InstigatedBy.bAltFire == 0 ) { chancehit = FRand(); if ( chancehit <= 0.4 ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } } } // Attacking with 3rd party mod weapon else { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } } } else if ( !Level.Game.IsA('TeamGamePlus') ) { if ( (InstigatedBy.IsA('Bot') || InstigatedBy.IsA('PlayerPawn')) && InstigatedBy.Weapon.IsA('TournamentWeapon') ) { v = Victim.Location; // Generate a 'randomized' x position in relation to the victim totaloffset = RandomOffset(1.75); axisnegpos = Rand(2); if (axisnegpos == 0) v.x += (Victim.CollisionRadius * totaloffset); else if (axisnegpos == 1) v.x -= (Victim.CollisionRadius * totaloffset); // Generate a 'randomized' y position in relation to the victim totaloffset = RandomOffset(1.75); axisnegpos = Rand(2); if ( axisnegpos == 0) v.y += (Victim.CollisionRadius * totaloffset); else if (axisnegpos == 1) v.y -= (Victim.CollisionRadius * totaloffset); // Generate a 'randomized' z position in relation to the victim, but make sure the value is above the victims head totaloffset = RandomOffset(1.5); v.z += (Victim.CollisionHeight * totaloffset); // Handle which weapon is being used and generate the symbol accordingly // Attacking with enforcer or double enforcer if ( InstigatedBy.Weapon.IsA('Enforcer') || InstigatedBy.Weapon.IsA('DoubleEnforcer') ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } // Attacking with impact hammer else if ( InstigatedBy.Weapon.IsA('ImpactHammer') ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } // Attacking with minigun else if ( InstigatedBy.Weapon.IsA('Minigun2') ) { if ( InstigatedBy.bAltFire == 1 ) { chancehit = FRand(); if ( chancehit <= 0.45 ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } } else if ( InstigatedBy.bAltFire == 0 ) { chancehit = FRand(); if ( chancehit <= 0.5 ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } } } // Attacking with pulse gun else if ( InstigatedBy.Weapon.IsA('PulseGun') ) { chancehit = FRand(); if (chancehit <= 0.6) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } } // Attacking with ripper else if ( InstigatedBy.Weapon.IsA('ripper') ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } // Attacking with shock rifle or enhanced shock rifle else if ( InstigatedBy.Weapon.IsA('ShockRifle') || InstigatedBy.Weapon.IsA('SuperShockRifle') ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } // Attacking with sniper rifle else if ( InstigatedBy.Weapon.IsA('SniperRifle') ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } // Attacking with bio rifle else if ( InstigatedBy.Weapon.IsA('UT_BioRifle') ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } // Attacking with rocket launcher else if ( InstigatedBy.Weapon.IsA('UT_Eightball') ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } // Attacking with flak cannon else if ( InstigatedBy.Weapon.IsA('UT_FlakCannon') ) { if ( InstigatedBy.bAltFire == 1 ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } else if ( InstigatedBy.bAltFire == 0 ) { chancehit = FRand(); if ( chancehit <= 0.4 ) { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } } } // Attacking with 3rd party mod weapon else { ts = Spawn(class 'BatThwapSymbol',,,v); //ts.DrawScale = DrawingSize; ChooseSymbol(ts); } } } if ( NextDamageMutator != None ) NextDamageMutator.MutatorTakeDamage( ActualDamage, Victim, InstigatedBy, HitLocation, Momentum, DamageType ); } ObMOb0^0bLbQTS^'_1bHeIb b'bRb>b/b_bc_8_Ne9b^^HbU^Kb:^BU=bebbbP_7_2R"^Eb6bOb]R&RbaV UG b4 o*p|j lk xF Dl Q5 ]g ji vh C\ Pd \-sRh` zf FA R? _@ k< xQD|UwQ"8H;4S@3 SM_-WCl&o"$M-nRq-DCC-oRF-CCX-pR[-ZCm-qRp-YCB-rRE-JCW-[RZ-XCl;4SomB ======================================= BatThwap Mutator v 1.2 ======================================= - by Adam Stiles (Muad'dib) - muad@planetunreal.com - http://www.planetunreal.com/muad INTRODUCTION ------------ BatThwap is a small mutator that I coded out of fun and out of wanting to learn UnrealScript. What BatThwap basically does is randomly (depending on your current weapon) pops up little "Pow!", "Thwap!", etc signs around a player that you happen to hit with your weapon. This is done in classic 60's Batman (tm) televsion series style thus the name of the mutator. It also has the side effect of often giving you a visual cue as to if you've hit your target or not! REQUIREMENTS ------------ Unreal Tournament (duh). BatThwap has been tested using UT v4.00, v4.13, as well as the demo version running under Linux and works on all of those configs. I'm *assuming* that it will work correctly under any version of UT currently available. INSTALLATION ------------ If you downloaded the UMOD version and are reading this, then odds are that you've already double clicked the UMOD and have it ready to go. If you downloaded the manual install version of BatThwap, then all you need to do is unzip the contents of the zip package to your UnrealTournament\System directory. You'll also need to add the line: ServerPackages=BatThwap to the [Engine.GameEngine] section of your UnrealTournament.ini file. HOW TO USE ---------- After installing, use as you would a typical mutator. Load up UT, start a game, and select BatThwap from the mutator listings. Note that BatThwap generates the popup signs in-game based on what weapon you're using. Each weapon has it's own likelyhood of generating a sign with each successful victim hit. VERSION HISTORY --------------- v1.2 - Added network support! - Added team support - hitting a team member generates no captions. - Added minimal support for the latest versions of AgentX, U4E Tournament, and Infiltration. v1.1 - Texture directory structure problem fixed (me hopes) that was causing the mutator to not spawn captions. v1.0 - First release CREDITS TO ---------- - Epic Megagames for Unreal and Unreal Tournament! - Tim Sweeny for providing a game engine that's so darned logical and well set up. - Chimeric (http://www.planetunreal.com/chimeric) for some great coding examples. - Digital Extremes and their mutator package - being able to look at their "Team Beacon" code helped to clear up a lot of trouble I had. - Ob1-Kenobi for the umod Wizard. - My bud Sarlock for the idea for this mutator :) DISCLAIMER / LEGAL ------------------ This mutator is provided "as is" so in using it you're using it at your own risk. I take no responsibility for any problems you may have with it (although I've personally had none with it). This archive may be freely distributed as long as it remains completely intact as it appears on my page at: http://www.planetunreal.com/muad Do NOT copy code from this mutator. Looking at the code to learn or get past a hurdle in your own programming experiences is cool though. If my code helps you somehow, please gimme a tag line in your readme somewhere eh? :) This archive may not be sold or mass distributed on any form of media without my consent. If you wish to redistribute this for profit, contact me first.BM q6(TR\'\'  `__yG5E* M/$^:+2VA`I:$b>/^;-\FpG6mS2&!X7)>'tWvK8J/#{N;Z:+S>x[hON2&}_rJ8fB2ЈgʄdbJWBeM_HZ;-B+!!cM*F/%R5'A*.6#F."tWjF4^>.S7)Âb|^VAvO;V9+Ӎk]Fޕqx[sWnSnJ8bB2fMbJ[EJ2&aV;-2"&*"E93`PHbA/eKfE3N5'B-!:'{S>Z>.=*֒nʊhņe`HYCbjPrN;jI7{ʼng|^vYmReL}VAfF5^A1̎ke`rV?,![EuR>F1%ޜvϑn[@16&B/$oO=- eJ;8)!jN?XG>mb\I1#6%^FbE3nN:R:+N7)jK8֗rz\vXhNcJŌj]FzhckQeM~ZDfI7bF5S;-J5(fO9+qVy\ w]MB5-O@7Y=+xV@V>.kN:^D3ϖqpQ=aꬂƑnbJԝwnWH k]8/)gYPV=+3%R=-k  ֢"5P;< eg  ux ^a nr WYBD-.##-:EBjlxxxjjjXXXSSSMMMFFF===555///)))### qq00ER04i3QpO3Qo@UC;\\p_p2 DegU7P"lm8[eC7;eD#BeeC $B^lmee$e77D2%l[ee;^eU)mmf"jr7]?l_?>PCfg?V99'R3-AVE,2hUeg32eeVf\k@#"f[=VU%?&,2U2B97`&;Up, @O =U8 Al-C`,#@3c`3A,C`_g90`2lV3`__guR,`i9,U`4,Q3&V9,_-3ph3n9i44{//0EE0VGR9O2p\@2f@DDC[e8`,ppPD@2228 =g2UfCfd^B^[;f;;U 8#P?;g\;m%eUg^m;B[CeC?jsCcse#cl]^8S;k#eUfp9R/. EWTG- D_Af\"fttl#;>mU^;lO, 8"mpp@8"]Q8@3Og 4#lVRAQi4g9QD[g4_mceA739mO\fU@_iE@@d^A@7UUgQp038goGRAAi4R00343p/VGE43+94&nRERRGG`Q`Q``QOp_pDDo8m8Umcfg2U27[g7p2Q3V>\g^e$?B^de78g`32[U2QQ8C23A28[ee\g[[P?FZD7$kBBe?em^`2D?7#%^[pO @8pxqw|IHT0wEw 48_`D2]d^e""\2D^?[gU\;m\`9@$g8ggU92U33Q3AAp``u-Qmi&9Q^8`8^@%g9C_hAUAggp_ph,2mhUp3QQODg0q g`92'342puSi0R0R4EWW-+R9Vi3& 433 hp A@gU[;[gAp[[^U 2&@_Q2P)g@8o8;lm[[D#U>BeBD8ofegpi_g_43U8@ %d?[`_; e\88B>k^\fQ\4,VQGEA{*EH-W-&`V4`U_2f2C`2U7U\ `R_g[g #D Q`Oh0RG9,99VpVp47eCop\[@U7g8#[U;e9#C\_`pf`ppgoh0gB;g2A 8xRiUVE4@VA7GQi3h&ppE3iSE+EV90H/09,4iiG9Vh8@D\Ug_D\ DDg@h@88i2p2?B\;[UU7f#?d^Cm^f8 V2`9,Vp_h`p\\#BD_\o42\78g@ h0,_\pSW'EV0W.TEyTv'TTqVEWh;9meg\Ue;`QG0E,Gi0SE34hh`-A_U8UiQ7g2U??9Upg22op2Pp3gBGO p`_VQxx9`pR V049,44Op4 -EG-S0qEV99u x@U8\Cf8gg8\8_AV 2OA`3ogp4Qh 2_U28\_@Q8$^Qg7U8[[_33,&h0_@2RR4gog`A32UgUp_`_7f[\DpApGqEQ{R9_v..T|JWnWqSTE4hiE2_i;[7DU8);m[U7_uQUCuupu9iiv3GTTEVi0ipA@[,2@QpD_8o&,2C22A@hOp8D3 73`C[uA9;_g@8p`` gQOhVRG4``V92nW4A9-Sv'G'0,Vu&@p _x2Q`@gpQ3AhiR03AiO99hg_R&2UDU\gp&2UggU@_2UU,&pS' 'RqS0V3&i4&u3_8goA goU`U[e2A22_gATVqyHnJTSTT9R9G'w,3 &Qho&R ^ ph2gggi3p[_pG-S0T*WST.*-nWEOV+E3;h@3@8;;_49Q_ Qh3V,EUu@pV_7e-2#U`3`QQ`D3pxip`932U`hW-3uEu4 -9GRSquGR,,iA`&9O@A,E4AO`2``p24iu9iV'0G,A3ph8;;p\hh _8gp3Qggp94p-SKTSSSvvTvW0V`V3 QR2p2hVRO&E3hh33iGq. E4{*I/4E-RGR003i@i2@9AEi`Q2iQ-Snqq*.vTwLJqWT-pW+A\oA32QO_o`Ah3h`@-3_9RR032U)/\D`,43_V @@C`@_3&9,0g4h9nA,& RuE0&3G,pOi9_@\i\``22p g3u'EVV&A_,Ei2` \o\oho_A ,uG+zWwwW/nE4&AV4W 0qR93Ouqxu3VVE0+0EWII**J-qH* uu4ui',A4hpinAi3E&WSSWTEqSvIII(WT/4_q,AiO_@9E9`_pp_`@3S_4xii3C-R 2u&AE4RVu,U9&Ou4GW03R3AGWTGuw04EE 0G4,4V9, goDU8@43&2RRnWWW''q'R9GRETT/ Ri,E,Q8g`3@2hRn0'nEwywv/'4u-E-E&h_A&2REqT/TSGuwL** qS044q..'4V,iGn/4uiVG+WI/qHWWTHWwHT+K|qI &+,hAuAQh93 4iRQ_VGp Ropp3_QhE394Ah&@p R04RRw/&uqRW4R.W0A3OARER& `3h_Q@V4'-'E-R|J*vTT./'VuE'uViq3,009w/TT*HyITTTWTqESE-'w--'9' -WTWHnTTyJz/*WnH*yIWSv.WE'RwS++qTvH*JnII-T &iVV432gg9VR'SRVVVW'@hW;`@eh@Q`2GQ`@h,0Ruq`GiW,A9RW + EVA34VV4&_p&uq-iV&hh&44G'HHSSIHHI(.-9uuR'9i3HWS'q+vvTyIHTnS++-HyH.*IH wy*HHyy(*'qnvIHTTwwH.Hnw'*HH-w*z((*.H4GEEG4E0R40T '0R9+00W,q//092C'@pA+4@2@90933AV9uVS-3R4@n-,GRE0H*9uihiui,4 p2Gi,90'q-SWnvH/yz*/TvHvn/+EwTSTTW/'SWJII((III*Iy(*WWqw/v.HnwWyyIJI**IIWv*WW' vHTS-TH/WTwWITGwv'`AR-R EW4QQ@ARSV4QVE009VV300WE0T 9uq/9GRR/TA3AhhA4EA3A3`,,E-ES-q'WnwWJ*yHyv/-qwWTHvyJIwH*.vIIH.HWn|.HnTTWH*IHwqH*/0+. 44EE'Aiq,A&3x0RR,u4EEERSV9++W./0RnEWWSV -SR9i3&&,,iiRS-R4R0wSnSnTT/.WTvJyHwWy.**wwII*Hv/*(II.T|yIyTn*( Gq'uG-&4\E,u4iAVVnW-EVRRhnT000Anhi+-EVS99hGii9S4VG+qwW/nqWHy*HKWwIIIy+w*II.yH|y(zTv*(HqH+RE3+H0E 03R4V,,OpR4u0W//S4h/+qRGGn VRRwuVR4``34G''00'EnWwL(L|vIInq|IWSW90n+R+4nRTTSS'n...nv 0'/9,+/T333A9i0,i&ET***.TwvH*(**TW/TnRqH+G/-W-Tqwn/HH*Tw*W +W.00STH-4'S'n0 S99Ai09nwnwn|yIJz/WHH***Tw.WEREqSSH*EqEw/qvTy*S-W..Tnny.TTJI9EERT/Wu,AGi49I*H.II|wv*I.HvHH+W.T-+(//SI*.HI*vvS*KK(/RV4-4xuS-`9&2V,V*TyI*v**.**.*..Wv(I*(/y(I.yIyIKTW000WO9003iA, `3&iN(((I*I****((((((HT**Iz.y((IIJL+S'SET S0+3ihV,o_p@i(II((I(zzzzz(H*y*JIzK'q/ERqEEwWq43h,g``2AɼɼInq-TTR4G,Wqq3`h,43`` &`ynEGVWR-0E@_A`g` 3H''0uhS-0n-E_2`_8p2\2O@`VŻżżżI0qSWAVRES -02AQ`32UpQ@_hh~˿˿yn/W0W--09R+''W./8UD3@p2@_h~ѻԿ*'S +-+nTE04RwT@##e\gU_7g_⿿ڿԿڿyE9uwS-VVw-+W-REE0T-22`2[fDggp8h½ܽٻ½ҽٻI. 3S4EAVRuR4--SQ__p2_UCf#\@ AhAҽҽҽvTHTuq99hhuRR9V'-'3O28p88gg_p ýҿƿҽټҿƿwuR0iR9R/V WEEEE'ppU@U8gf[@_2{ÿҽԿÿҽԿÿҽҿv4G,G4i949VTW&G0WnT0E-7DfD[^fC;;??[_p_}ҿƿ½ҽҽ¿ƿҿ½ҽҽҽIT-TW04GE4u/-4G3in* 00CB)eBCU\\pg7f\@3QA{ҽҽԿýѼ½ػ¿ҽԿý½ҽҿHWT4Si4R',n0S4ApT-8\Dgp^\[g8`N½ҽҽҿҽҽ½ܿҿҽqR0,3u-/,iVEAp4n//q0OO8Ugf??d=ef%Dpp2ҽԿÿԿý½¿ҿ+E400q/AR @&V9VuH03G'-'0AOU;ef[;D#%mC7e>)DghNҿ¿ҿܿ.n09VRR9900,Q0W-RRR0TTpp#dB8@8;$d\U[C[@pNýÿҽ¿ѻÿɼJWSwH0,2h+09R0&E-9004R-T^[p^)e;[8dC^?mm^mýҽҿܿսмIEV+n-iAR-SG0EnW u+2gUQ8?B$m?>>? ;;ҿƿ¿ƿҿƿҿ¿ٻ¿ҿIRAuEAp+03&uR0G4RSv9GSoBoeP"c5jl$?l>ee$;#782@22½ÿսԿÿܿÿ½ҿ*'E,98\-4h_R0&qE99H,$?d;[?l?^[U;DCU`3@ҿм¿տ½ҿҽտ½ҿҽмտʿѼ¿ҿ-VRE `VR`uR-339+0EvH077;%mUD">?^e$=mmdgUU¿ԽϼػϼWS,u9ERiiE9304i+4wQp\e?ldfC$kke"1l6bDgȻnGR,AiQ_2Qi4RV40S09QVSE+0T/\;^;;\D^=j?;$smC?d[o '9&44,3`h&h9Q`n T--SWS@@28;^B%$>P]jtdm"Cco@2_LWST3hVA'4h4OG23gV4VhWSR+EEq0n/BBe^fm]c;#>jd%BemF^[gyVq hu@933Aq-3 ,hi9i44qH?PP??e)""eU^lkm^cZ:6e;D22Nͼݼ*Ri@` RE93G3EinRA9E3V0000RET $#[e"?mm^B[m]]ed>$dcl>""=l^[CͼW0&g93hp`O8gGihERh9SV0S-E'-+Sqq0n p_\%$ddkYt]lccdm#B^6scf~;LGVR`0 2DVpQO49A@g300 GERREEUmD$Fjc>=F6$]kjZacm Z6$eo@}˼(@R,O`S,@ihA99+-@g90R`094R004G4RS-ofFs^# k[;;[=6jl 5Xa]c"?^^dktg@ڼ* hVAhp3VAA3Qhu4V042hEW-E'w -RWTm^^">=Bg#?l5skf\; r??kt5]F@˻LTW4hG&2_78A&O@QhpEGi0 -,AGuEW-- T E0ldPedP7?]%?ce^d>YXm\;μIgUD^Up43O9Q_`goG3E97[VEEER0En-40W//'S[md"em\Pss>% ZbtklYc>1jkeUH& ,UUgDU`h44V 3 \p4` /UA3V40,E'0n+qT/0E%jcdlcc>j!55XZccaY=sa::<F rYk!5Zt F61]dm^$% $$Ce$=ll]6=cZc1j1lcfy_`pVp__@@93_392_Ai8pupRQ43AuGAphuTVV9'+WTWmed$m%ck?>cdcFsrt=d>1jF> cd >6Zj]=m^WOAgA ghQUp`@@pQpGgA3V3GG&99Q39Qiq'E0RRqT.GYY56]jFjkd>FjjckjF55s>kaYkl?5c>cc=6tj=kd ?򰰰M|`V9Q33p4@g@A@8p``\h__`i8ig0VV90 3qRW0E9S// >??=ckjd$s5jsr5j5ssk6:aaaaYk] jXXke^$;{{\;C^_@9NnihUA9,2eo`Uxo@pU@`QQ@A33_O3h,8EGhWn0E49nT SqvC#>>$?]]]?l>=l!XaaFasstt!atbtj<:5j=]56Y!bld={[^BU;P^)mkcf;%G2pp`Q, p_`Au{{~M|n4QQD2D[D_d8U@`28p``Q9QGRphE3x4VG`0'ER'099++WT/0RWH"P$^?]1d$ccd> !j$;$=X!::asaY6:rrc?$??m">56k>6{gU\;Pm]m;^>f%mm[;^UV_oUmmoD\2DD[eo2_C ;~K_A&ODi`2^%fQ@gA8p_ipu`V p94GE&VR+Rw 0W04un/TEwvTYc[C$bbktFt1Z>?d?jck1trsYFl 1srr?>?c^^^m>FdeNKkd11jB[D%B8BUzG`"e\;m$>Pee;e=jp22;;@9~O92D\UV;"F[_`4 Bg_[2oiODgf`o8_A, 2Qu,`hhi9`Aiu9VR+qT9W00TDm^]j!XasYsXtZk>kXarYZbj$$cY!:jj]=6!srrZXe%Xd^Pd^BF\p^D7]\Fcp44{~K[)fCA\_QR7DV,2 [`7O&Q;p32_@Q+,h&GE93uqES--'9uWWH/>15tjFP^?Xc["jP<1F!XY X< rc=cZ5Z6 sZ5YXj>d"$B??>["mljs=U>j ZZ5m7$ss65c#7U{8fgUC?)%mmNJ_"t$=c=bkC:tU[8@$B@$d__3wpeoi8pfeBf32pQOpgh9O_`,gph3A\pgq0R9E4WGnW/0EEETTqf^>bjbb1cd%=Xjm"e r]F6ts6Fb?c??trra:aaskbde%1Zd[?;#F]c!]?FtcC=mm6k==lelFcB[e^[8U^kBo_VD\wReGV97C@,#teB^d_;D[;=@g&\B38hADp4,UpGV04VR0RuS-4TWS''/ 'T//k>>=1c>ks?^e6abar$rr tZ5ZZs]F!srlmame[;1s ar]mD$YY?>XdB\71Xl%fNv gmp88`9 $eU>d2U[\, ^Dfh2U#\^CpE02Up4@x4'0,u0i-'R'v/0T..]]FbFZjj?s<rX!asaa5YY561Yarst55bra jYcdm6X:Xaj$rde^lZX!:rs:ak15 lDU1j]cZg6Xsle^ddckk; !e?lcfCcsa^sb6g2#6e$C7?>dCD;_MVhp7?%D#[h8`@2;^^\Q_)mQg_"^pU@A2G02Q098u0___V,p-4iR3GE0W-q-WTWTH =5]FZj6lFtrsjst>%mjX ssmstfrbd]js;$"1]#1jlYU8^"BC##$c7@`G~2g`QDB U8;)2o\@_UU^gQUF3_&m`3@8_ih-AVi8oRE33iV3`E0E,huR '/-wWqq[C>6j>Zjs:]XrZ1j1>6m^;o8u~4 U`27mA28eUD7C;fm \7^D` 8oV ;g8CQphQ,3[ g@i9``V93,ER+0RAQi000G/WnH/T/W/l1bsjj:a:Y>l=>Z:rrrr:]]sce]XssFr?==t 5tsabYkr5:>Z:aXas1=]$m;s>5rj  :j$D6$?sZ!X?165sj$>:ZFFXssbtkbc"]k?:!XrY^^ aB?=F^?=6kks@;$$ktYs? Yjbk?B?df%=df^>![;f;C%?^oph>fD?c7]`l7[;?d;g;72?e2pQ% #dfUouO^VUEeW- 8`RqRVhGE0'*VG4EqW04SWnwWrrs]=5j> rr:k=>1:s:6Y5arr5Z=tX>=<tYkZsB1rseCB?f;g8[m42%\ ?dF8"^ge>f_27o[dpep`?`3Q7#c[&A@[pG0,\_w/ iVR49VRRqH 'ES00v/0qvWTTv5561Fkm!X!bb5 tb>$j!a: rts:tsXX:r:]kY aX:XX asrsacl:s<:!Y#;1rellb5k?f"F!1<^C"1tc]mXjj=k]XkC%Yc^kmfm;;1tg2fppCd2#^g[e_\^6Qfm@[mf)p,`?be_p_C02\C\`A3@GVpuT4@&9,VV4G4iu0S//WWST/'ST/Tv[^"cd$sts$$bFaYa>l\?j5F$B[$!dD7f8;?mP6^B>UU>>gC][ek;fCU?eo21D9Qg2A_Q`g4QuQAVG99G9'E4uSSESvW-W-0T./.mdecX:aY:sF: a=1:!Zt a!arjcrr^mm>] r>=a1:11a6]?mm?Ztm?>XtPa:b=em?acYf;;=Xbdg$^D6s[;=l\l$U?m7$k^dd\U^F@2<32_`Vm)`\ U`gg3`g`ih@@`8oi&`G`i9uGVV000`qRW/-S/Rw./WHSystem\Manifest.ini System\Manifest.int @System\BatThwap.intISystem\BatThwap.u8DSystem\BatThwap_Readme.txtJ System\batthwaplogo.bmpW q@T