[Setup] Product=BatThwap Version=10 Archive=BatThwap.umod SrcPath=. MasterPath=.. Requires=UnrealTournamentRequirement Group=SetupGroup Group=umodINIGroup Group=BatThwapGroup Group=umodIncludeFilesGroup [UnrealTournamentRequirement] Product=UnrealTournament Version= [SetupGroup] Copy=(Src=System\Manifest.ini,Master=System\Manifest.ini,Size=617,Flags=3) Copy=(Src=System\Manifest.int,Master=System\Manifest.int,Size=567,Flags=3) [umodINIGroup] AddIni=UnrealTournament.ini,Engine.GameEngine.ServerPackages=BatThwap [BatThwapGroup] File=(Src=System\BatThwap.int,Size=149) File=(Src=System\BatThwap.u,Size=77480) [umodIncludeFilesGroup] File=(Src=System\BatThwap_Readme.txt,Size=3144) File=(Src=System\batthwaplogo.bmp,Size=28960) [Setup] LocalProduct=BatThwap ReadMe=System\BatThwap_Readme.txt SetupWindowTitle=BatThwap Mutator v 1.0 Setup AutoplayWindowTitle=BatThwap Options ProductURL=http://www.planetunreal.com/muad VersionURL=http://www.planetunreal.com/muad Developer=Adam 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.")*Er@,+2X*Oػ`f,rNoneColor InternalTime ChooseSymbolVSizebMasked MaxColorMipZeroPaletteUSizeUBitsUClampVClampVBits RandomOffset BatThwapCoreEngineMutatorTakeDamagePostBeginPlaySystemMassTextureStyle AmbientGlowTimer PlayerPawn ScaleGlowDoubleEnforcerUT_FlakCannon UT_Eightball Minigun2 PulseGun SniperRifleripper ShockRifle UT_BioRifle Enforcer ImpactHammer DrawTypeRegisterDamageMutatorTournamentWeaponBotBatThwapSymbolSuperShockRifleX FunctionObjectObjectProperty TextBufferVectorStructStructPropertyZEffects NamePropertyCollisionRadiusYPackageConstCollisionHeightActor DamageType actualDamage Momentum HitLocation DrawScale Palette3 Palette1NextDamageMutatorVictim instigatedBy ScriptText bAltFire Palette9VB ReturnValue RemoteRoleMutatorWeapon LevelInfo GameInfoLevelFloatPropertyPawnTS Palette13 Palette11 Palette7 Palette5Splat Initialized LocationClassRange BiffSocko BoolProperty IntProperty DrawingSize TypeChancenegpos theoffset chancehit totaloffset axisnegposzlopzlonkwhapwhackthwappow BytePropertyGame+Z!#(G'$@$   M"a/!*a/!a/!) ? , %6 &6? , %6II &6?6a/!%a/!a  ?$da/!&a  ?$ia/!:&ff>a  ?$ff:%f?a  ?$a/! ?a  ?$Ja/!"a  ?$a/!#a/!,a  ?$3a/!!a  ?$a/!$a  ?$a/!a  ?$a/!w:&a  ?$:%>a  ?$ w*$ -O  & 1%  M J&  M   >. -  - '( a[//============================================================================= // 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 BatThwapSymbol ts; local Vector v; local float chancehit, totaloffset; local int axisnegpos; 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); ts.RemoteRole = ROLE_None; } // Attacking with impact hammer else if ( InstigatedBy.Weapon.IsA('ImpactHammer') ) { ts = Spawn(class 'BatThwapSymbol',,,v); ts.DrawScale = DrawingSize; ChooseSymbol(ts); ts.RemoteRole = ROLE_None; } // 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); ts.RemoteRole = ROLE_None; } } else if ( InstigatedBy.bAltFire == 0 ) { chancehit = FRand(); if ( chancehit <= 0.5 ) { ts = Spawn(class 'BatThwapSymbol',,,v); ts.DrawScale = DrawingSize; ChooseSymbol(ts); ts.RemoteRole = ROLE_None; } } } // 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); ts.RemoteRole = ROLE_None; } } // Attacking with ripper else if ( InstigatedBy.Weapon.IsA('ripper') ) { ts = Spawn(class 'BatThwapSymbol',,,v); ts.DrawScale = DrawingSize; ChooseSymbol(ts); ts.RemoteRole = ROLE_None; } // 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); ts.RemoteRole = ROLE_None; } // Attacking with sniper rifle else if ( InstigatedBy.Weapon.IsA('SniperRifle') ) { ts = Spawn(class 'BatThwapSymbol',,,v); ts.DrawScale = DrawingSize; ChooseSymbol(ts); ts.RemoteRole = ROLE_None; } // Attacking with bio rifle else if ( InstigatedBy.Weapon.IsA('UT_BioRifle') ) { ts = Spawn(class 'BatThwapSymbol',,,v); ts.DrawScale = DrawingSize; ChooseSymbol(ts); ts.RemoteRole = ROLE_None; } // Attacking with rocket launcher else if ( InstigatedBy.Weapon.IsA('UT_Eightball') ) { ts = Spawn(class 'BatThwapSymbol',,,v); ts.DrawScale = DrawingSize; ChooseSymbol(ts); ts.RemoteRole = ROLE_None; } // 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); ts.RemoteRole = ROLE_None; } else if ( InstigatedBy.bAltFire == 0 ) { chancehit = FRand(); if ( chancehit <= 0.4 ) { ts = Spawn(class 'BatThwapSymbol',,,v); ts.DrawScale = DrawingSize; ChooseSymbol(ts); ts.RemoteRole = ROLE_None; } } } } if ( NextDamageMutator != None ) NextDamageMutator.MutatorTakeDamage( ActualDamage, Victim, InstigatedBy, HitLocation, Momentum, DamageType ); }  1 U , ,%  G&  c,  ,  ,  ,  ,    D//============================================================================= // BiffSymbol. // 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); } K#FkՃC,X'X'X'Z!#(Z!#(X'Z!#(Z!#(X'Z!#(Z!#(Z!#(Z!#(X'Z!#(Z!#(X'Z!#(Z!#(X'X'Z!#(Z!#(X'Z!#(Z!#(X'Z!#(Z!#(X'Z!#(Z!#(X'Z!#(Z!#(Z!#(Z!#(ՃC,R!Z!#(Z!#(Z!#(Z!#(Z!#(Z!#(Z!#(Z!#(@<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  a?' @  7- 7 YO_Y!*' xnPLB? #*+|%5da»((@-40-#Q77ji&*11/+)$$R39B=$786,,"%&WY% :4+w{*$%!-/TY5+nt46$& mu%:>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- @ )   =,_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/&      % @ 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 @ * 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= @OB< P>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 @   "#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]%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@   ""@ " "@* *L".k@@>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 '*%@   ""@ " "@*(*"X֊@@ 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+ẏ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 /*.(--!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@"   ""@ " "@*+*"2h@ @ػ?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(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ấ@:^U^=:0P^PpNTB^/:`:`320^^^O^.^TT8^b^0pIo^4^^^Q^1T9T-^6.0E0ST5.^R^;T<.0q4]^:^a^7jklmn[V ^+mkG XK eg rh ~L JF Wi df pd |\ He T_ `A l? y@ E> Rs^MQ2M ^38j3H4l[b4cNwUH4OLg [%ZCBE$c%YCG%DCJ%CCM%WCP%XCS%JCV`Y%kRZ%lRl%mR~%[RP%jRb%oRt%nRF======================================= BatThwap Mutator v 1.0 ======================================= - 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.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\'\'  NMMjii7#M/$=#>%9#^9+tXbKb>/Q>='G/%E+ WAV7)0]F]<-Q4'lQyN;N2&sWfB2dA1z\I/$Ƀd~`pUiPF.#Y;-A+!*P?7%*# 3 :%A*Y:+6##eLӍjaIjF5 ~_xZoJ8K2&̊h\F`A1^?0ȈgiPzS?V;-2"vQ>&2$iOB ĩ踠WE<ӫ WAfE3V:+N5'>*:'sN:Q7)I2%„cZ>.`H֔pvYqUeLfF5a[EiI7aC3R9+N6);)y}_nS6&Z@1.!lĐs"gr[w]N1& ݳkWLǤ_PH~6/+uI1#6%B."z[,̏knN:f}XBܛudrQ=V=.ϓoōjjK9]B2vYjPfI7bF5J5(wVAoP=R;-dMN8+`JܣfK;ϙyya_I<jZB5-αE92Y=+]A/aE3F2%jM:>-"A0%6*"V=+3%R=.ɝٹQ=+  a`_ޫSSRBB"5P;<  vy `b oq gj XZ-.!#,:DBjlwwwXXXGGG>>>666///)))### 22FFF)FQ2F22)DiVDVmVZ&(iWDi1-mghV-V(-VZ;\Wh(h(ZhhZ;;Uoghh;Ug(/1ohhUh;gggZV-Zh&/YgW YgV;ZVYiF))FQFpQFFF1D2h.1hh&U/oZ(Uf1(Z&')&YF1 i1;)/D&ZViF-'WF)Vi.oQ.\F(ogW\DFDWV)2-1ooWWVVpF)))Vgi)FD)D)F)mF2mW)QiDDQQ)p))G777F})F2F2p)F22)D1Vm1&ZWDV&Z!hi))iiC;m1WW.\o(1V;Z;fU;hg; &V&;g&(&TChVhW/U\g&UZhZY.Z\:h(Co\>hD2F.&fZ(YCV.;hi)2F)FQ2F7FFQFQWDF-;(;;b&&Cg&V/U&?);iim-1;>DmVWFF)FFDD)1CV)DV)WToCYhDC)F-T(ZVWWpF).m ChiD.(VVVDiDF2i(Fp)F22F)FiG22)2QF))Q7}DDDWiWiWVWiiW(UYh&V&bgi/&Zh!!o&W1D.&>ZC\'CCf\Z!hV.h&.W.W.Y1m&Y\o;YYT :XbUV/!TCC\?\iWU?o!;'h&1V&m)QFHOQFF)pFQVWVhV!fCT;(i(U&Z..UZiV'g(&(1WmW.Wip)i2W>D.&DWCV'ZV!.YZDYoZim&m.ZgiD-ooW-1WW.UpF)F ipiDFFp1mmF)DF2FpFQQ}hhhgYoYY\C? eBEBE'Te:BB?S\?RR:>6SlBB::XXEeak`dddSdbfg&SbZY0 6b>SB]B?SB]XS6daa:E'0EY'/TosmZU?h;?ef:BR?6??eX6X'&:XE0'?0\&(;&;;Yhf:]XBff6:bXB:E];X`0dXSo6foede:\iC:dE:\TS&g/6ohhZ>bhT:gY\Ub(YgiV(;pF2ogYTTTfSX:d:6dREB:dRdRd? ddB:b:XX066d%a6==aBBR5kl6lA]lAdXa:X: uo'dg'E::SeRRa`ddRf6RX6Be00:b!(i(!&iW+pi(.W;\ZV&TSTC=::`clBRdEd=]C!ZggTeo(Z?dYbbbEh/>BE?RSB:6kT:BESSREb5XaT!! >0EdbdSeeU!?Ce&YghUY Y./0TVF22~~o\TTo0:Ba]Xe:R]a]::ERBX:R]:E:>\6>feT]dfb?6XB:6XR=XeSX3A:SRBX]]X?\'&66Bh;gYd6>\6BBBEX6R5=ad`lEf:BCZf;hTmWiiVWZgbZ/6o=]]RdEX3kl=`]BRdoSB5oodog?mCW.Z\f?&?f>e]6eEdX0d'65bS>:b>Ed\R\65l=o!>T=XB6XdEfee S>b'CfY6ef!\6f(V'h>g/(DQF~~oU\o':E :X6:6:f'0e6BES?TfbU&\fg>0TTbUCbBdBRd'6BB:EX6BlBY'E(.(gh&!\?'YCoCXdf BB:6E]le>b6:dfh.;fopDJWW.TUC(&U?'ffb dCU Ad EbT6BB\E]X::h!V&hi)Vi)V!h(V;>\;\:=db?eX=:=XYgSXSb?\Z Bo:E'XRl/6RBe\eSSe:d\XEEeg?6Ee!;bV?o;oY./TChgF2)~~U0e'>:dYY0f e6ee6Y0?T>o&Cfb]]Edafb6 XEBBE?SRR=gEC(+W(mmWm&\e''? SU66b'U!>'CZ?B6b?>C)Z!g)F1YCZ/UChh&Y?Y:h6:T>;>eS6>;0S!/((&)miHiVfg>Rd?f6S>Xde>b?beeCV?XUU&?6Ba1Rde'X'::aue:X'gY&gbT!(;f'g h&Th)2F~PP>?::df>Ree6S e?o!gYZC\!o'>? 6e Rdddb:ddX>C0 gY?&w7ii1(!'>\YV CUT>ofYo?\!&&ZiFF))JVD)oYfg(>bV>\fg;!'Y(VWZ(hFFFsJVW1f?>:CZTe Ee:e?h?Y5/U 6fZY;'?Y B0'>oYCeCV0\U?>VWCo&)FFoYf0Y00B]ld:=BE::BY'06U!h(iV((UTCUZiW1.hfY;SEe:6SfU(&;(;pm-D(Yo(;g/Z'bvf'6g!U!!W1m(oO)) (&YY;\?( Y'CVF1g-ViW-i-mpW2.e'YY0b>fY?fSbTg gUSXYCE %;UdE\XS]6efZYfbg':EC.UUUh1Z'oUV()F퀀f?e>f'TUh' e?SS:\YV;(h)mmW)1(!g\oZ(h\C?Y&T&hgg1Wi)psWWWiW!Zg;/(&(((T(/Vmi-VWW1)iVD)pF-V(mV!;(ho!WmD)JVsFVW.C'h!\\?6gY!h(Yh\\ee\V:bV]eC:l]:b:Se6C0Se:b&U&eCY>TU!VW-F~~IY!''''o!//C\'bb';YY(DD!FDDF2)/hTooUhYg??hD((!mmi+FpWV((DD)FD)DpsJ)((m2iWDD()D-/;)J7Q2)DYCZZCg;&UY&i !(hU&iVf11&T6ad/:E6:T&?>\g?\/\'U!:(/CUhZ77~P~>o>Y S'CYTg&ViVmDpJ)DWm-Dm(D-!WWWi1((iGFsHHFFF)2HJ)i-!1mVppFF)FFm)-( mDW(VW-1imiFWCC&me>U/U ZhfSS:>U\S\Z&&T''?&&!;-;m.T?1TChYQ~P~?>bbfY;!f>?eYYYZ/Z(V(V(iGJH)ppm1VVm-mHFD)-mF2DDiWD(WWiD)FD&D)1 YY;;ZY>h>'?dhUUYY;Z;;Tggi1&gU(fiiQQQ~~I?''Y?h/UY;U&(((Wi1iW-GJpDi))-hhss)m12F2iipOFWV)Q.YoCV/YR=ZYog>f'\gV/;'UUb(m&&>fh(bU 2FT0bC>CYgY'gCVD(&VDp)DpJV22F)FFpipHO7Wm)QDD-U!?e-&Z-.hY'YY>Uo&Yi-11S1&-UTC(oUF7PPIUee?YfC((ZVVwOJ77sOmmFFVmFi(V!T&Y(U!YC(UW.(YVVgV gm &(1/Tg!FPP~IT?&h?f'gZmF))mms))WV1WVhD&gCh1(V/gWV1DD).)i iT&(WD/Y((((F2~~~&0𤭬FHJ7V-D))W;U;(D)ZZ1Wp)(VVW((.hTWHFTZU;2QPPfC>T7FDFFWm)FDmD-iWV2D1F))DF)mmp,s U\Y/QQPPe\)Ws)m)))FF)VmQF)21pQF2s+GWi&&&V22PP~e?>}JHQ2F)F))))QQQQ2QDW)F22sFHOG;ZW.1F22PP~IdX0>7sFFQQFH777QD)p)HFO,(!1;U!ZZhi22)~PPB:ee6fԿԿFV(WWUYCY222P~PYYeee(ZCohhV;bFF{|Pee?Yp((&?bh(V&(/T)|PPXXE6R=6 :e'ɾɿɿɿFV&i>\h;..2Q2PPPSe?6:BES:bbMp(1V&hV/Tghg(W27|{Ntd]:E6:dbԾ).V(W/;YF7|P{dlRBX:R]XzZo./\\&V&V/FQPPP6=laadRX:EX bݾݾs (YYZ>\hCohYg2QQ~PPESXXB5add:>b>mWDW&g!6bUU&FQQPPPE::::RX0Ǹݿohh?fUU \0!VZ()FQ{|P:B]=]a]`:X6YC;YCY?TYT\i!'CYgVVDF2Q{{{uad]Aa5==```]XEXIFW/YmC!Yo1/YCgVFQ22NyNa]BR=RERRaR: SԿ۾JDiWY>U((>D2)F|||E:a`_Aa]R]ae}JU&Y\V1>oZfEYhh(11VFF)PPPa`_9la_c5dEE6zJ;Yf1>fU:\T\-&\TW2Q2PP|lal]=5%`5Rl_a=R6}JV&g\UUTT&SC&fVV;UF|{|ka6:X=3_:dB]]:E}ԾܿHV(-Y06bT&TU'CZVTYZQyN|d:Aal=]_]5A``A`l]ӿsZ\(/>>U/'fYYC&!C(V.)2P{{SEca3$$$`==ݾFY;UfoZ!>EC&\'?U&CYYg;DQ{yNtddl33k[c3%c$ll3=RR6:S6)T;TRZ/Y6X;&Y'!Y!C!TDpFN`__=R]`k$`A]=l5Be?::ӿӿԿG/g\U;!.0e\;;e?;V??TY&;;FDG{{P=5_`=BXda%$Al=39c``_`dBBҿ۾ӿifTYYZU;;T\fh!YgCYD)FP|{RA`k_lal53[ql59c8d6Xv̾(CU>>SXYZ6SYU'Y(&S\(;fZVFN{{==RA9`]R3$`5%_k]d /T'YYeSg!bTSehg(- Y.FQH||PR=la53$3<_`55kckd:6XvOiW?6\>(6f>C6?\Y\bV(U&;Zi2xy{ua3%A=a`k=:__53l$8jcA]Rvp\f.b?:!f!f!/h 6ThhYg!!YY)77K%aa`l_%a5alBAcc`Ak4 cl=d66}п)U>:gCe! UZT?fC?h!>(UfT?\&&&Up7yyya]l3``A3]l_$3_k8_55cA]azп&'TR6Ee>XCbZUbT('h&(VZ(/&(()2QP|{d53__^<#ckk_`3A$8jkaO'Ue6d\ES>Y:R\& fChg;C2F~{ytl38jk$9c8 [[j^kk`  %3%deοs:U0g>eg(:!SfT;&V:T&Ue;gU&&gYCCZ2Q{NNA$[k==X] c [^j^k3AA_:޿) b!'>bedE?'>f\SfbYh'h&6b!/Z(&.//QLyN`$93%cck_kk$[aR= 4n`[[c #:zξmVYbC'6XRE>'>:SbEZC./>gCoZVVV .-)2KxNal_aRl n^^ ^R ^cc[ 8_c%Aav\'Y;T:Y]0:YXgE>ZV>b'YCZ/!!imFQQNLxtl3[kc9[^" ^k_==jj8 RR_k`RBؾ+?ed:\h; B:XfEgT?]\;(!!Th!(WDQQQPNNa=[%%3%ck34nk[<_%klA_$<^R=vѿF-:BdAaBEeY?>T0SdX6dCZR]\h;;Z!U!(/gVQQ2|Nyt_al`R3j^_j@%jc@^k_$l:BD  XBdBebefYg'  RY6 B>?\YC;(&( !Q2sNk_k^ k$"#"4k jj<9j44jn@%=3c`aAz+&:Z!!!'gBB6X=dddXg?C6T:1'gYU;>!Zi!&gmQ{N{c% $8j8_%_8XEoUSg?>f?CECfbo.''TCh(&V.)yk_k3k%_k_kk89__%c$k_$8[c9``AwV!>>Xf RBbSBee:ESECf?\ CC'TS?S!(;hUUhm)2Fxq8__89c[^[_[ '\T f!Uh;T(LLyk[_ [^4nj8$[^[ j4jjj<[c^4j^^lAA=d=5AtlX=:T}ク>bBBff6ldeBed:EB:eSS:?:X>\0:]bX;CbgVV&C;YT(W gVQ77N{{l_3%k$c$@4j8#jjj\MMク(YSSda'fC!6d]dX_]:e6EEeeSTSCUEbg'Ceg(!U(TT&&VW1277x{`cc3A`9_3kk_$ <"3=%9^"4j4jj^<84^k`3$%`5$[8[$ rrqBR=a`[`]A__a``]=A_=BJ'XdlBR``ddR6dd5l=d6XR5 ]uMpa>'=_`>e6A5aS:ReBEXd?e'?TYC''YU&Uh&.Yo(1.Fx{uA[8j[$%_k $#nj@cc jnn_`kAAA%`$8_%},f$|k_%%_q%^3]5XB7Ce:5lR=`3$3Al]lE66=]:%rTM>T6=dB\=58]Xe aRX]`6d=:aedEXfSSoebbTe>T\;Ug&YWTVFNNytA$8@^^j<^^4[$[4jn<[@3% ^4[^Aa jnjj@ck3A%k_]I]dk <@@89[c%"@aaaERlク:elaaBalc=A5 @5R:]:RAu**ク,ofS6aXT `=ESY]X]aXB\BXAXe6BSYCb?6;SEC\Tf'CY!T'Z/YDD2QQxL%$%%k@"49#j "#jnjk_8"nk%[4^jnjj^"j<@ [a=_9cA]v,od3=38:X9$l4^^^$8lc^cc]`A򦦦mab:]%l__A3_l=a8j_REA=R_dckEYMク,!]aa5dSUR==Y6::]6RR>'S =E?SX:SeC&b;!'CT!!(VV/oiQ7Lxxcc_aA`%$^^k]a#a%j98"4<^##<^^4n 9 [[[ j[[@^__33$_]3c_`cc$9lB:_a""#^`R3 8#[kRBXaR:5`a5``az}Hl]X539k954^lB]:33:3_XX?IクEld>$^lE=al=l`:a\SESEbT>XeEb\dd!0g;TY!hC(V &ZZ2sNyyk_c59^`ajA jcc ^88$nn^[_k`nn4[n@_l5_w]%8 #"[cjk59%9^nj 9k39k]da=a]EXR35]d]35IR$c$` j99%8Acc jka]lA]dA[]d:R*クhAC\TR5:lA__X]=]=9:B'RalEb>dEYXBYCf\h&Y'UU?(/YhW(((1.W2xyt9_9$[^A%8 n3%^n6C6STXX'0VYU?Ch;h&i/ZVV127yxxc8[ 88njj#_5`^<<^4##n @@c_ #""^j"%$8c8^_ 8< ``k3avdA=`3<@8988#\ldU;??\\e!&;bgUgg (1Vi22sNNyq$%jj4^^njj@^_%8[$4^^jnnn_8"nj%@^^j8^8[9S&&C1(-1QQxc@#44@$c$"4nnnn488^[@^4[jn^j 4YXlDXEUUCg;YZ(Y(hhiDQ7xk"[ ##^j[8""Ar\0:Bd;;lV/ XeUZUg\bCZ&()\Cg;ZV&giD22Hr9[`%3#n4[$44 @[ nn^[[^%_9 ^^j [^ jn^@kka^jjj##_a5<<^j8@[^^9"n @4jn@8k@c``@[[^nj^_X:=`A5%^nk#`5#3]3^j[k_$"n4ck884%@<^kc8_5<`k`l5a`a]]`qdg65d l_XcaAB:l_aX6R=d]_EldB=e:lqe bRk]'f:=]E&d1>\gC\UU1.(&;&&W &mm2Qqcruqtkcq^nrnjnrrtkrqtqqqrnrrnnqnnnrrnnnttrtutquqtrrtrqcrqrrtqtqrrtttqrtkrtqttquuqrtqtvututtuutruvutrrutrIttvuuuvvIzz*IvvIIIzzIIIvzM**MMMM**MMG2QǹxyyyKKKLxKxxxKxLKKKxKKKKKKLKKKy|xxLxyNNxxxyxLKxyNLxyLxyNNLxLxyyLLKLL{LKyyNyx{{N|NLLyKyyLx{{LLx{NKxNyxNNNy{NLy{P{xxP||PNxKy|||{Nx~~{Lx{y|PN{~|P|{PP|PP|{PP{y|~PP~PP~~~~~~~~~PP~}2xxLxLKKKKLLKKKKyKNKLKKxKKxLKxKxLKKyKxKLLKKK{xyKx{yKx{KKLxKyNyyyxKyLLLKLLKxxyyyyKyyyyyNLKLLxNyy{{LyKN{{LKyLL|NKNy{x{{Lx||xLNKN|Ny|NKLNyyy||NxL{P~{|PP~PyKy|PP|PN~PNy|N{P||~|P||~P|P~~PPPP|~~PP~~~~P~zMFSystem\Manifest.iniSystem\Manifest.int7System\BatThwap.int5System\BatThwap.u.System\BatThwap_Readme.txtr4H System\batthwaplogo.bmp@ qڱU