Áƒ*žEÒ@¨ f‡ü1²ûiõ‹M¿Æ®÷¢¨ÒNone TakeDamage TakingDamageEngineCoredeSystem TraceShot RespawnTimeBotpack bProjTarget ReplaceWith Sleeping SetRespawnBegin TraceFireshotProcessTraceHit ParentAmmo InternalTimeColorVClampVSizeCarcassbMaskedMipZeroPaletteVBitsUClampUSizeAdjustHitLocationUBits VBioAmmo VMiniAmmo VRifleShell VRocketPack VFlakAmmo VBulletBox VBladeHopperVPAmmoVEClip VShockCore MaxColor ScoreKill PostRender AlwaysKeep SetSymbolTextureAmmoTick RemoteRoleSpawnNotificationmMaxDischarges mMaxScale TeamBeacon TBMutator VolatileAmmoslicedVolatileWeapon TBNotifyIdentitySymbol RifleShell RocketPack BulletBox Miniammo ShockCore ActorClassjoltedPostBeginPlayzappedbHidden DrawType shredded AmbientGlowBioAmmoEClipStyle FlakAmmo BladeHopperCheckReplacement mMinScaleMassPAmmo AddMutator exploded ScaleGlow PlayerPawnPlayer DrawScaleTeamSoundPawnCanvasActor Viewport HurtRadiusClassPackage Location FovAngle DesiredFOVRotPlayerReplicationInfoCollisionHeightLevel DamageTypeNumSEffectsRand Inventory HitNormalrealHitbIsPawnPRI InstigatorOther bStartupdist NextMutatorbSuperRelevant Palette1Zi PlayerOwner HUDMutator instigatedBy PlayerID AmmoType bInstantHitProjectileClass ViewRotationbTemp AmmoAmountObject SpawnNotifyDamIconsDir hitdamage TextBuffer Palette7General SpecialExpl FunctionHUDState PlasmaSphereUT_SpriteSmokePuff ShockProjWPV UT_BioGel MomentumKiller HitLocation Razor2AltRazor2 UT_WallHit StartTrace WarExplosionUT_SpriteBallChildBioGlob UT_Grenade UT_ComboRingLocUT_SpriteBallExplosion RocketMk2MTracer flakslugR UT_ShellCaseI_TeamRRotatorVectorStruct UnrealShareStructPropertyClassProperty NamePropertyObjectPropertyFloatProperty BoolProperty IntProperty ByteProperty ScriptText ReturnValue DirectionWeaponA LevelInfo EndTraceMutator TempActorDeltateam_id num_used player_id team_count symbol_count draw_scaleinterp ammo_count num_shotsvecTSignBTSignRTSignGTSignY\€ƒÅ_<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœ!_'ÅÜGÉ„FÓ2GL/åU$@IŸQ$I€ƒC‡ ƒ?€ƒ0€ƒ%€ƒƒƒ�ƒF€ƒ.€ƒ€‡]€žA†e€†U†––G–TD€†f–c€†R€†L/€†#<–TP†Y€†€‡BK†@€†I€†*€†Z€†mi€†r€†t†IC†\XN,–jM€†a€†=€†P€†H†`E–{�NG7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!FDý4�=$:e üë Éž{#U¿ üë Éž{#U¿œ!_'‡©Æg’ž{#U¿ž{#U¿œ!_'‡©Æg’œ!_'œ!_'œ!_'‡©Æg’œ!_'‡©Æg’‡©Æg’‡©Æg’ üë É üë É üë Éœ!_'œ!_'¯x�â�=$:eœ!_'œ!_'œ!_'œ!_'œ!_'„P$š™™>5$`AS†n€†K—aÃ�qq! X€†-†Q†9†8$†&:–_€†Q€†—[¶�^q! Z€†ƒ6–ƒ[€†@ÿÿÿÿÿÿÿÿÿÿÿãÿªUÿªªªÿUUUÿUUÿÿUÿUÿUÿÿÿÿUUÿÿUÿÿÿÿUÿÿÿÿÿïïïÿßßßÿÓÓÓÿÃÃÃÿ···ÿ«««ÿ›››ÿ���ÿÿsssÿgggÿWWWÿKKKÿ;;;ÿ///ÿ###ÿÿÿïÿãÿ×ÿËÿ¿ÿ³ÿ§ÿ›ÿ‹ÿÿsÿgÿ[ÿOÿ@ÿÿÚÚÿÿººÿÿŸŸÿÿÿÿ__ÿÿ@@ÿÿ ÿÿÿü¨\ÿü˜@ÿüˆ ÿüxÿälÿÌ`ÿ´TÿœLÿüüØÿüü¸ÿüüœÿüü|ÿüø\ÿüô@ÿüô ÿüôÿäØÿÌÄÿ´¬ÿœœÿ„„ÿplÿXTÿ@@ÿÐü\ÿÄü@ÿ´ü ÿ üÿ�äÿ€Ìÿt´ÿ`œÿØüØÿ¼ü¸ÿœüœÿ€ü|ÿ`ü\ÿ@ü@ÿ ü ÿüÿÿÿïÿãÿ×ÿËÿ¿ÿ³ÿ§ÿ›ÿ‹ÿÿsÿgÿ[ÿOÿ@ÿÚÿÿÿ¸üüÿœüüÿ|üøÿ\üüÿ@üüÿ üüÿüüÿääÿÌÌÿ´´ÿœœÿ„„ÿppÿXXÿ@@ÿ\¼üÿ@°üÿ ¨üÿœüÿŒäÿ|Ìÿl´ÿ\œÿÚÚÿÿº¿ÿÿŸŸÿÿ€ÿÿ_`ÿÿ@@ÿÿ %ÿÿÿÿÿÿïÿãÿ×ÿËÿ¿ÿ³ÿ§ÿ›ÿ‹ÿÿsÿgÿ[ÿOÿ@ÿðÚÿÿåºÿÿÚŸÿÿÐÿÿÊ_ÿÿ¿@ÿÿµ ÿÿªÿÿšåÿ€Ïÿuµÿ`ŸÿP…ÿEpÿ5Zÿ*@ÿÿÚÿÿÿºÿÿÿŸÿÿÿÿÿÿ_ÿÿÿ@ÿÿÿ ÿÿÿÿÿàåÿÊÏÿµµÿŸŸÿ……ÿopÿZZÿ@@ÿÿêßÿÿàÐÿÿÚÅÿÿÕ¿ÿÿϰÿÿÅ¥ÿÿ¿Ÿÿÿº�ÿÿ°€ÿÿ¥pÿÿŸ`ÿð•_ÿê�ZÿߊUÿЀPÿÊOÿ¿zJÿµpEÿªj@ÿ e?ÿŸ`:ÿ�_5ÿŠZ0ÿ€P/ÿuO*ÿoJ%ÿ_@ ÿU?ÿJ:ÿ@0ÿ:/ÿ* ÿÿÿÿÿÿÿÿÿÇ++ÿÇO+ÿÇw+ÿÇŸ+ÿÇÇ+ÿŸÇ+ÿwÇ+ÿOÇ+ÿ+Ç3ÿ+Ç_ÿ+Ç‹ÿ+Ç·ÿ+«Çÿ+Çÿ+SÇÿ/+Çÿ[+Çÿ‡+Çÿ³+ÇÿÇ+¯ÿÇ+ƒÿÇ+WÿÇ++ÿÿÿÿÿ>€†A†3€†L††—_Jœ�fq! ~€†B—'vŸ�jq! 2–Fƒ—lH��dq! 5†p†]€†p€†n†M–h€†—Wa™�bq! — t«�mq! —;^–�aq! ^N†—D}¢�iq! † €¯(†yE1€†7†`†Id†]†J†k€†)†—^Â�cq! Q†ƒ4€††[€† †U€‡·KB;ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿYׯ­·Œ”mó™5Iœ´™5Iœ´™5Iœ´�=$:e„B™R€‡J€‡L€€W€‡F€‡V`€‡_€‡`€‡J€‡w€‡e|€‡€‡Z€‡G€‡s€‡H€‡Ób"@"@"@"@*4%**ÿÿØÿ"�Þc€¢÷¼˜,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@J@J@JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ@JJJ@JJJ@JJJJJJJ@@@@@J&&&&&&&&&&&&&&&@J@J&&@J@J&&@J@J&&@J@J&&@J@J&&@J@J&&@J@J&&@J@J&&@JJJ&&@JJJ&&@JJJ&&@JJJ&&@JJJ&&&&&&&&&&&&&&&@JJJ@JJJ@JJJ@JJJ@JJJ@JJJ@JJJ@JJJ@JJJ@JJJ@JJJ@JJJ@JJJ@JJJ@JJJ@JJJ@JJJ@JJJJJJJJJJJJJJJ@@q€‡^€‡t &ŒÜG,6r ¢a ¦ ×?=P=ÚÚ‚w  w *d°ÃÍÌL>ÝM?, &Gk?Õ€;EM!Ú‚� -¤� a/!a © ×?Ô=?,  x"’™ a"R4r'‘w.‡ *W"‘�.‡ "Ø4r .‡ "R4W  Oª™aD1Z'‘w.‡*~‘�.‡Ø1Z.‡D1~ g.ë�] #$£ oŽ ?$£ dŽ [$£ eŽ w$£ fŽ ÿÿ£ o ¸Um$ÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿ2vÿy㸉¸í „¸$pA Ó¼rR#ÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿ2w>þøî¼ž5Æb „¼$pA Ó{ &ÜF,6r ¢a ¦ ×0*P*ÚÚ‚w  w *d°ÃÍÌL>ÝY?, &F_0Õ€;EY!Ú‚� -¤� a/!a © ×0Ô*?,  L&‹ÜU,&6r¢a ¦ ×.@P@ÚÚ‚w w*d°ÃÍÌL>ÝP?,&UX.Õ€;EP!Ú‚�-¤�a/!a © ×.Ô@?,  ®ZT'ÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿ2z» Òþ®Â"W „®$pA Ó[!�™a!c>a'‘w.‡*g!‘�.‡!Ø>a.‡!c>g Ête(ÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿ2|J\Ê2 ăœÔ�XƒœÔ�XƒœÔ�X‡àÀñ‡àÀñ „$pA Ós $tÜH,&6r ¢a ¦ ×%/P/ÚÚ‚w  w *d°ÃÍÌL>ÝI?, &Hn%Õ€;EI!Ú‚� -¤� a/!a © ×%Ô/?,  ÄdV"ÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿ2~þ`‡·Ä´2ã샜Ô�XƒœÔ�XƒœÔ�X‡àÀñ‡àÀñ „$pA ÓÑl++=PMÃ*w±*±*wÀ*À˜x—l,TD«?®Mš™™>8%–8TÒ-Ð @ua@�+aÍ+  ‹u¥8š±*Nw¡*¡++ �H:ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ @á¶z¼�=$:e‡©Æg’‡©Æg’�X©'�X©'•Ѹ™B�X©'�X©'�X©'‡©Æg’‡©Æg’�=$:e„4"x\;!f-‹K×-Õ?'\]RQK-]RQ\Z ä3o=r.™º*.™ºa Fg.™ºSa F  »XA%ÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿ2Cpé лš¦óxƒœÔ�XƒœÔ�XƒœÔ�X‡àÀñ‡àÀñ „»$pA Ó}v9f)‹P×)Õ?'vQ|NP)Q|Nvh µSu!ÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿ2EõÞm[µ52¨XƒœÔ�XƒœÔ�XƒœÔ�X‡àÀñ‡àÀñ „µ$pA ÓÎ- a/! ',a/!&'Ba/!%'Xa/!('na/!$'„a/!!'ša/!''°a/!"'Æa/!#'Üa/!)'üw¡*¡ -( ÜJR1A=Ù r* C²ÃV²Â`%&%#%/a0 …¥#-“'10/a0 ‡Ö²¹r*1ÖÕ‚š:C:ÛVÂ¥&P—&#a -“-“a¥#ª/a0 ©¨ò-“'-“-“a©107 ‹¸6à7«Ÿà?EØ ‹ ‹CáE ¬CG¹ «š™™>¯€?¬ØÖo°  ‰± €? €?÷ gea 7Û.C10 ­bU)ÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿ2H^ñ0™­_è‡àÀñ „­$pA ÓÓFO'åüð‚¢-¿a/!0n‚a/!J�a/!  DE.VBioAmmo(¸‚a/!N�a/!& DE.VBladeHopper(‚a/!?�a/!% DE.VBulletBox(D‚a/!K�a/!( DE.VEClip(‹‚a/!M�a/!$ DE.VFlakAmmo(Ò‚a/!@�a/!! DE.VMiniAmmo(‚a/!R�a/!' DE.VPAmmo(_‚a/!=�a/!" DE.VRifleShell(¨‚a/!>�a/!# DE.VRocketPack(ð‚a/!A�a/!) DE.VShockCore(\$' Ìu@,(B>@Þß<w¡*¡ ,@ °rj ÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿ2KC¥w°Ytsl „°$pA ÓO©™ae3i'‘w.‡*S‘�.‡Ø3i.‡e3S rs;.f5‹t×5Õ?'snqpt5nqpsp yV;fA‹H×AÕ?'V`JdHA`JdV[ ´&ÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿ2Oʘ©´ƒýe° „´$pA Ó€P€†SYU-“'j˜a æ ‹›%CzC!T¸H‹aÍÌL=a É� ‹"À<%ì–<j'a@'Bû±B?a Õ� ‹'Óa É� ‹'a«BÍÌÌ=¥<p  ÿÿÿßÿÿÿÿÿÿôškT ÿßÿÿÿÿÿÿÿÿkO  �`I8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ#Ud½_'�ÕƒC,¥’ÔûRƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�XƒœÔ�X�ÕƒC,„kWHU¸-“'a ¹ ‹Jà a@'füa ª ׋ÔÔÔ×f#€?Ÿ?, J L9 a § ‹ L�  ÿÿÿßÿÿÿÿÿÿ¨xjFI €k@E `//============================================================================= // VPAmmo. //============================================================================= class VPAmmo expands PAmmo; var Rotator r; var int i; var int num; var float rand; function TakeDamage( int Dam, Pawn instigatedBy, Vector hitlocation, Vector momentum, name damageType) { Instigator = instigatedBy; GotoState('TakingDamage'); } State Sleeping { ignores TakeDamage, Touch; } State TakingDamage { ignores TakeDamage, Touch; Begin: bHidden = true; num = AmmoAmount; Spawn( class'PlasmaSphere', Instigator,, Location, rot(49152,0,0) ); Spawn( class'PlasmaSphere', Instigator,, Location, rot(49152,0,0) ); PlaySound( Sound'UnrealShare.General.SpecialExpl',,20.0,,2000,0.6); HurtRadius(100, 250, 'zapped', 100000, Location ); sleep(0.05); for (i=0; ia ª ׋ÔÔÔ×G#€?Ÿ?, ü±ÍÌÌ>S9a § ‹S�a« ×#=¥9H  ÿÿÿßÿÿÿÿÿÿ [gHj G€c€†q€†_€šDl BÿßÿÿÿÿÿÿÿÿxmA  n€}€‡@€€€p€†r€†m€\vJƒ¼-“'a ¾ ‹›pBzC!¸ˆG‹L˜$%¤–$LÃa@'ü‹±ÍÌL>a ª ׋ÔÔÔ×#€?Ÿ?, ‹±ÍÌÌ>U9a § ‹U�‹±333?a ¹ ׋ÔÔÔ×#€?Ÿ?,›ðAÈB!¸G׋ÔÔÔ×#€?Ÿ?,a« ×£<¥$H  ÿÿÿßÿÿÿÿÿÿ¬OHHw W€†šNy D.ÿßÿÿÿÿÿÿÿÿOcC$ l€‡€{€†|€†S€ƒg//============================================================================= // VBladeHopper. //============================================================================= class VBladeHopper expands BladeHopper; var Rotator r; var int i; var int num; var float rand; function TakeDamage( int Dam, Pawn instigatedBy, Vector hitlocation, Vector momentum, name damageType) { Instigator = instigatedBy; GotoState('TakingDamage'); } State Sleeping { ignores TakeDamage, Touch; } State TakingDamage { ignores TakeDamage, Touch; Begin: bHidden = true; num = AmmoAmount; Spawn( class'Razor2Alt', Instigator,, Location, rot(49152,0,0) ); HurtRadius(60, 150, 'sliced', 70000, Location ); sleep(0.07); for (i=0; i 0.6 ) Spawn( class'Razor2Alt', Instigator,, Location, r ); else Spawn( class'Razor2', Instigator,, Location, r ); sleep(0.05); } SetRespawn(); } h€‡xBJl¼-“'a ¾ ‹›pBzC!¸ˆG‹T˜(%¤–(TÃa@'ü‹±ÍÌL>a ª ׋ÔÔÔ×#€?Ÿ?, ‹±ÍÌÌ>A9a § ‹A�‹±333?a ¹ ׋ÔÔÔ×#€?Ÿ?,›ðAÈB!¸G׋ÔÔÔ×#€?Ÿ?,a«ÍÌL=¥(H  ÿÿÿßÿÿÿÿÿÿ¬OuH` D€‡E€†F€†€w€‡G€f€ÆF// TBNotify. // Steve Sinclair, Digital Extremes, Jan 4, 2000 (Sept 5,2000) class TBNotify expands SpawnNotify; //Called automatically anytime the class you specified in default properites // is spawned (also called if a subclass of that class is spawned). //Great way to catch things to modify or replace them - just make sure to use // if statements to avoid infinite recursion if you replace something by // spawning a new subclass. simulated event Actor SpawnNotification( Actor A ) { local Mutator tempActor; if ( HUD(A).HUDMutator == none ) { //If there aren't any HUDMutators attached to the HUD, attach // your mutator. HUD(A).HUDMutator = spawn(class'TBMutator',A); } else { //If there is a HUDMutator attached to the HUD already, call // AddMutator on that hud, passing it a newly spawned mutator // of your own. Note that the AddMutator function will // automatically seek the end of the mutator chain. (If the // one you try to add yourself to has a NextMutator, the // function call is passed to that mutator.) HUD(A).HUDMutator.AddMutator(spawn(class'TBMutator',A)); } //Have to return the original actor (the HUD). If we had // completely replaced it we would return the replacement. return A; } M€†€šhO ÿßÿÿÿÿÿÿÿÿhP Q€R€‡S€†T€†€NVNÔ-“'a × ‹� Ùa È  A úDš™?›%CzC!C¸H‹aÍÌÌ=I˜6%º–6I_a@'a Ú� ‹_aÍÌL=¥6w  ÿÿÿßÿÿÿÿÿÿÄhIB b€†Y€‡Z€†]€†�Ec6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ[nc�ÕƒC,¥’ÔûR„šM] DEÿßÿÿÿÿÿÿÿÿOuC; €^€†_€†b€€z€e€†€šwg  ÿßÿÿÿÿÿÿÿÿwh i€j€‡k€†~€†q€†fnKð-“'N‘˜,a ½� ‹"Àa ½� ‹"À›%CzC!H¸H‹aÍÌL>:%×–:NKÃWa@'a ½� ‹Wa«KÍÌÌ=¥:…  ÿÿÿßÿÿÿÿÿÿàwo? p€M€‡s€†v//============================================================================= // VRocketPack. //============================================================================= class VRocketPack expands RocketPack; var Rotator r; var int i; var int num; var float rand; function TakeDamage( int Dam, Pawn instigatedBy, Vector hitlocation, Vector momentum, name damageType) { Instigator = instigatedBy; GotoState('TakingDamage'); } State Sleeping { ignores TakeDamage, Touch; } State TakingDamage { ignores TakeDamage, Touch; Begin: bHidden = true; num = AmmoAmount; Spawn( class'WarExplosion',,,Location ); HurtRadius(165, 250, 'exploded', 140000, Location ); sleep(0.05); Spawn( class'RocketMk2', Instigator,, Location, rot(49152,0,0) ); for (i=0; i 0.5 ) Spawn( class'UT_Grenade', Instigator,, Location, r ); else Spawn( class'RocketMk2', Instigator,, Location, r ); sleep(rand*0.1); } SetRespawn(); } €`€‡C€j€L€†€z€†€|€‡Q€†i€€v€†A€B€‡C€†D€†€Y//============================================================================= // TeamBeacon. - spawns the notify actor to hook in the HUDMutator // Steve Sinclair, Digital Extremes, Jan 4, 2000 //============================================================================= class TeamBeacon expands Mutator; function PostBeginPlay() { if (Level.bStartup) { spawn(class'TBNotify'); } } \€‡d€X€K€†L€†€šoN ÿßÿÿÿÿÿÿÿÿoOú P€Q€‡R€†S€†€MUBø-“'m˜a ³� ‹"Àa ³� ‹"Àa È  A úDš™?›ÈBzC!EPÃG‹aÍÌL=2%Ý–2mla@'a ³� ‹la�Âõ<¥2š  ÿÿÿßÿÿÿÿÿÿèoV6 W€X€‡Y€†Z€†€g€ƒ]€†T€†a€d€†a€†b€†€šzd  ÿßÿÿÿÿÿÿÿÿze f€g€‡h€†i€†€ckHð-“'B˜a ¶� ‹"Àa ¶� ‹"ÀaÍÌÌ=,%×–,B;a@'yí±y333?a ¶� ‹;Åa Ò� ‹;a)\�=¥,b  ÿÿÿßÿÿÿÿÿÿàzl< m€n€‡o€†p€†€€g//============================================================================= // VBioAmmo. //============================================================================= class VBioAmmo expands bioammo; var Rotator r; var int i; var int num; var float rand; function TakeDamage( int Dam, Pawn instigatedBy, Vector hitlocation, Vector momentum, name damageType) { Instigator = instigatedBy; GotoState('TakingDamage'); } State Sleeping { ignores TakeDamage, Touch; } State TakingDamage { ignores TakeDamage, Touch; Begin: bHidden = true; num = AmmoAmount; Spawn( class'BioGlob', Instigator,, Location, rot(49152,0,0) ); Spawn( class'BioGlob', Instigator,, Location, rot(49152,0,0) ); sleep(0.1); for (i=0; i 0.7) Spawn( class'BioGlob', Instigator,, Location, r ); else Spawn( class'UT_BioGel', Instigator,, Location, r ); sleep(0.07); } SetRespawn(); } €s,//============================================================================= // VEClip. //============================================================================= class VEClip expands EClip; var Rotator r; var Vector v; var Vector Direction; var int i; var int num; var float rand; function TakeDamage( int Dam, Pawn instigatedBy, Vector hitlocation, Vector momentum, name damageType) { Instigator = instigatedBy; GotoState('TakingDamage'); } function actor TraceShot(out vector HitLocation, out vector HitNormal, vector EndTrace, vector StartTrace) { local vector realHit; local actor Other; Other = Trace(HitLocation,HitNormal,EndTrace,StartTrace,True); if ( Pawn(Other) != None ) { realHit = HitLocation; if ( !Pawn(Other).AdjustHitLocation(HitLocation, EndTrace - StartTrace) ) Other = Pawn(Other).TraceShot(HitLocation,HitNormal,EndTrace,realHit); } return Other; } function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector Direction, Pawn instigatedBy) { local int HitDamage; HitDamage = 17; //same as the enforcer if (Other == Level) { Spawn(class'UT_WallHit',,, HitLocation+HitNormal, Rotator(HitNormal)); } else if ((Other != self) && (Other != None) ) { if ( FRand() < 0.2 ) Direction *= 5; Other.TakeDamage(HitDamage, instigatedBy, HitLocation, 3000.0*Direction, 'shot'); if ( !Other.bIsPawn && !Other.IsA('Carcass') ) spawn(class'UT_SpriteSmokePuff',,,HitLocation+HitNormal*9); } } function TraceFire( Vector Direction, Pawn instigatedBy ) { local Vector HitLocation, HitNormal, StartTrace, EndTrace; local Actor Other; StartTrace = Location; EndTrace = StartTrace + (10000 * Direction); Other = TraceShot(HitLocation, HitNormal, EndTrace, StartTrace); ProcessTraceHit(Other, HitLocation, HitNormal, Direction, instigatedBy); } State Sleeping { ignores TakeDamage, Touch; } State TakingDamage { ignores TakeDamage, Touch; Begin: bHidden = true; spawn( class'UT_SpriteBallExplosion',,,Location ); HurtRadius(25, 80, 'shot', 20000, Location ); num = AmmoAmount; for (i=0; i 0.2) { Spawn( class'UT_ShellCase',,, Location + (v+vect(0,0,1))*CollisionHeight*10*rand, r); if (rand > 0.4) { Direction = vector(r); Spawn( class'MTracer',,, Location, r ); TraceFire( Direction, Instigator ); } } sleep(rand*0.04); } SetRespawn(); } t€w€†€š}y ÿßÿÿÿÿÿÿÿÿ}z  {€|€‡}€†~€†€x@Tð-“'{˜a Ë� ‹"À›pBC!9¸ˆG‹a)\�=E%Ö–E{Da@'^ì±^š™?a Ë� ‹DÄa Ô� ‹DaÍÌL=¥Ea  ÿÿÿßÿÿÿÿÿÿà}AH B€C€‡D€†E€†€G€ƒ�(R//============================================================================= // VolatileWeapon. - Your active weapon discharges when you are killed. // Steve Sinclair, Digital Extremes, Jan 4, 2000 (Updated Sept 5,2000) //============================================================================= class VolatileWeapon expands Mutator; var int mMaxDischarges; function ScoreKill(Pawn Killer, Pawn Other) { local Weapon w; local int ammo_count; local int num_shots; local int i; local Vector vec; local Rotator rot; local float rand; rand = FRand(); // get a random number 0.0 - 1.0 if (Other.Weapon != None) // if victim has a weapon { // we will be 'activating' the weapon through a base class reference // this is good because we don't require any specific knowledge of the actual object w = Other.Weapon; if ( w.AmmoType != None ) // has ammo? { ammo_count = w.AmmoType.AmmoAmount; if (ammo_count > mMaxDischarges) // cap the number of discharges ammo_count = 15; num_shots = ammo_count * ( rand + 0.3); for (i=0; i symbol_count)// spawn if need more { s = Spawn(class 'IdentitySymbol', P); s.bHidden = P.bHidden; s.SetOwner(P); symbol_count++; } else // otherwise, assign a free IdentitySymbol to someone { foreach AllActors (class 'IdentitySymbol', s) { if (s.bHidden == True) { s.bHidden = P.bHidden; s.SetOwner(P); break; } } } // set sprite location above their head loc = P.Location; loc.z += P.CollisionHeight * 1.75; // interp from min/max view distance, to scale the sprite based on distance dir = P.Location - PlayerOwner.Location; dist = VSize(Dir); interp = Dist/32768.0; // adjust sprite scale if zooming :kludged values: interp -= 0.3 * (1.0-(PlayerOwner.FOVAngle / PlayerOwner.DesiredFOV)); // clamp if (interp < 0.0) interp = 0.0; if (interp > 1.0) interp = 1.0; draw_scale = Lerp( interp, mMinScale, mMaxScale); s.SetLocation(loc); s.DrawScale = draw_scale; SetSymbol(s, team_id); // update the texture } } } {€Y€†~€ƒ€c1//============================================================================= // VMiniAmmo. //============================================================================= class VMiniAmmo expands Miniammo; var Rotator r; var Vector v; var Vector Direction; var int i; var int num; var float rand; function TakeDamage( int Dam, Pawn instigatedBy, Vector hitlocation, Vector momentum, name damageType) { Instigator = instigatedBy; GotoState('TakingDamage'); } function actor TraceShot(out vector HitLocation, out vector HitNormal, vector EndTrace, vector StartTrace) { local vector realHit; local actor Other; Other = Trace(HitLocation,HitNormal,EndTrace,StartTrace,True); if ( Pawn(Other) != None ) { realHit = HitLocation; if ( !Pawn(Other).AdjustHitLocation(HitLocation, EndTrace - StartTrace) ) Other = Pawn(Other).TraceShot(HitLocation,HitNormal,EndTrace,realHit); } return Other; } function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector Direction, Pawn instigatedBy) { local int HitDamage; HitDamage = 17; //same as the enforcer if (Other == Level) { Spawn(class'UT_WallHit',,, HitLocation+HitNormal, Rotator(HitNormal)); } else if ((Other != self) && (Other != None) ) { if ( FRand() < 0.2 ) Direction *= 5; Other.TakeDamage(HitDamage, instigatedBy, HitLocation, 3000.0*Direction, 'shot'); if ( !Other.bIsPawn && !Other.IsA('Carcass') ) spawn(class'UT_SpriteSmokePuff',,,HitLocation+HitNormal*9); } } function TraceFire( Vector Direction, Pawn instigatedBy ) { local Vector HitLocation, HitNormal, StartTrace, EndTrace; local Actor Other; StartTrace = Location; EndTrace = StartTrace + (10000 * Direction); Other = TraceShot(HitLocation, HitNormal, EndTrace, StartTrace); ProcessTraceHit(Other, HitLocation, HitNormal, Direction, instigatedBy); } State Sleeping { ignores TakeDamage, Touch; } State TakingDamage { ignores TakeDamage, Touch; Begin: bHidden = true; spawn( class'UT_SpriteBallExplosion',,,Location ); HurtRadius(60, 250, 'shot', 70000, Location ); num = AmmoAmount; for (i=0; i 0.2) { Spawn( class'UT_ShellCase',,, Location + (v+vect(0,0,1))*CollisionHeight*10*rand, r); if (rand > 0.4) { Direction = vector(r); Spawn( class'MTracer',,, Location, r ); TraceFire( Direction, Instigator ); if (rand > 0.7) { Spawn( class'UT_SpriteBallChild',,, Location + (v+vect(0,0,1))*CollisionHeight*5*rand); HurtRadius(30, 100, 'shot', 35000, Location + (v+vect(0,0,1))*CollisionHeight*5*rand); } } } sleep(rand*0.02); } SetRespawn(); } €q//============================================================================= // VFlakAmmo. //============================================================================= class VFlakAmmo extends flakammo; var Rotator r; var int i; var int num; var float rand; function TakeDamage( int Dam, Pawn instigatedBy, Vector hitlocation, Vector momentum, name damageType) { Instigator = instigatedBy; GotoState('TakingDamage'); } State Sleeping { ignores TakeDamage, Touch; } State TakingDamage { ignores TakeDamage, Touch; Begin: bHidden = true; num = AmmoAmount/2; Spawn( class'FlakSlug', Instigator,, Location, rot(49152,0,0) ); Spawn( class'FlakSlug', Instigator,, Location, rot(49152,0,0) ); HurtRadius(165, 250, 'shredded', 140000, Location ); sleep(0.2); for (i=0; i 0.2) { Spawn( class'UT_ShellCase',,, Location + (v+vect(0,0,1))*CollisionHeight*10*rand, r); if (rand > 0.4) { Direction = vector(r); Spawn( class'MTracer',,, Location, r ); TraceFire( Direction, Instigator ); if (rand > 0.7) { Spawn( class'UT_SpriteBallChild',,, Location + (v+vect(0,0,1))*CollisionHeight*5*rand); HurtRadius(30, 100, 'shot', 35000, Location + (v+vect(0,0,1))*CollisionHeight*5*rand); } } } sleep(rand*0.05); } SetRespawn(); } €y€†^€u†€P€†¶B //============================================================================= // IdentitySymbol. - just a sprite displayed above team mates // instanced by the TBMutator // Steve Sinclair, Digital Extremes, Jan 4, 2000 //============================================================================= class IdentitySymbol expands Effects; #exec TEXTURE IMPORT NAME=TSignB FILE=Textures\Tsignb.pcx GROUP=DE Mips=Off Flags=2 #exec TEXTURE IMPORT NAME=TSignR FILE=Textures\Tsignr.pcx GROUP=DE Mips=Off Flags=2 #exec TEXTURE IMPORT NAME=TSignG FILE=Textures\Tsigng.pcx GROUP=DE Mips=Off Flags=2 #exec TEXTURE IMPORT NAME=TSignY FILE=Textures\Tsigny.pcx GROUP=DE Mips=Off Flags=2 A+//============================================================================= // VolatileAmmo //============================================================================= class VolatileAmmo extends Mutator; function bool AlwaysKeep(Actor Other) { local bool bTemp; if ( Other.IsA('VBioAmmo') ) return true; if ( Other.IsA('VBladeHopper') ) return true; if ( Other.IsA('VBulletBox') ) return true; if ( Other.IsA('VEClip') ) return true; if ( Other.IsA('VFlakAmmo') ) return true; if ( Other.IsA('VMiniAmmo') ) return true; if ( Other.IsA('VPAmmo') ) return true; if ( Other.IsA('VRifleShell') ) return true; if ( Other.IsA('VRocketPack') ) return true; if ( Other.IsA('VShockCore') ) return true; if ( NextMutator != None ) return ( NextMutator.AlwaysKeep(Other) ); return false; } function bool CheckReplacement(Actor Other, out byte bSuperRelevant) { // Other.Owner == None as well for initial level ammo if ( Level.bStartup && Other.IsA('Ammo') ) { if ( Other.IsA('BioAmmo') && !Other.IsA('VBioAmmo') ) { ReplaceWith(Other, "DE.VBioAmmo"); return false; } if ( Other.IsA('BladeHopper') && !Other.IsA('VBladeHopper') ) { ReplaceWith(Other, "DE.VBladeHopper"); return false; } if ( Other.IsA('BulletBox') && !Other.IsA('VBulletBox') ) { ReplaceWith(Other, "DE.VBulletBox"); return false; } if ( Other.IsA('EClip') && !Other.IsA('VEClip') ) { ReplaceWith(Other, "DE.VEClip"); return false; } if ( Other.IsA('FlakAmmo') && !Other.IsA('VFlakAmmo') ) { ReplaceWith(Other, "DE.VFlakAmmo"); return false; } if ( Other.IsA('MiniAmmo') && !Other.IsA('VMiniAmmo') ) { ReplaceWith(Other, "DE.VMiniAmmo"); return false; } if ( Other.IsA('PAmmo') && !Other.IsA('VPAmmo') ) { ReplaceWith(Other, "DE.VPAmmo"); return false; } if ( Other.IsA('RifleShell') && !Other.IsA('VRifleShell') ) { ReplaceWith(Other, "DE.VRifleShell"); return false; } if ( Other.IsA('RocketPack') && !Other.IsA('VRocketPack') ) { ReplaceWith(Other, "DE.VRocketPack"); return false; } if ( Other.IsA('ShockCore') && !Other.IsA('VShockCore') ) { ReplaceWith(Other, "DE.VShockCore"); return false; } } bSuperRelevant = 0; return true; } q€Z//============================================================================= // VShockCore. //============================================================================= class VShockCore extends ShockCore; var Rotator r; var int i; var int num; var float rand; function TakeDamage( int Dam, Pawn instigatedBy, Vector hitlocation, Vector momentum, name damageType) { Instigator = instigatedBy; GotoState('TakingDamage'); } State Sleeping { ignores TakeDamage, Touch; } State TakingDamage { ignores TakeDamage, Touch; Begin: bHidden = true; Spawn( class'UT_ComboRing',,, Location, Instigator.ViewRotation ); PlaySound( Sound'UnrealShare.General.SpecialExpl',,20.0,,2000,0.6); HurtRadius(165, 250, 'Jolted', 140000, Location ); sleep(0.1); num = AmmoAmount; for (i=0; i`øÿÿÿj`øÿÿÿgwÛÿÿÿuuãÿÿÿ@`þÿÿÿxâÿÿÿyâÿÿÿY`øÿÿÿ=`þÿÿÿlaqaºÿÿÿNZ¹ÿÿÿO`øÿÿÿh`øÿÿÿK`øÿÿÿ]Pñÿÿÿ,sãÿÿÿBPñÿÿÿ-aøÿÿÿIwãÿÿÿAPñÿÿÿ+`øÿÿÿYPñÿÿÿO`øÿÿÿ^`øÿÿÿdvàÿÿÿd`øÿÿÿevùÿÿÿcrùÿÿÿC`øÿÿÿUvýÿÿÿXPýÿÿÿ1PýÿÿÿDuÑÿÿÿ^u�ÿÿÿ]vúÿÿÿz`ÿÿÿÿa`þÿÿÿ^`þÿÿÿWPÉÿÿÿ3/±ÿÿÿm`øÿÿÿa‰ÉtC0Å<$}Q0‰Çk N2‰Æt[2‰ÇWi2‘Ãm w2‘Åm C3‰F| O3‘ÇJ \3‰³t h3‰²t u3‰¸t B4‰½t O4‰»t \4‰Ìt i4‰¿V v4‰´t C5‰Â~P5‰¹t ^5‰¿t k5‰µkx5‘¼m F6‰Çr R6…ÃX_6…Ì\m6…ÅX{6…Åk I7…Ãk V7…¼kc7Š¿K q7…´\~7…¾kL8…»\Z8…³\h8ŠÇH v8ŠÅ{ C9…½\ P9ŠÇG ]9…·k i9ŠÃ{ v9…Ä`C:…¸oQ:‰¿[ _:ŠË{ l:…Á`y:…¹\G;…½oU;…¸\ c;…´@p;Šº{ ~;…Ì@K<…³@Y<…Í`g<ŠÈ{ u<…ÇfB=Š¿{ P=м{ ]=ж{ j=…Ëk w=Š·{ D>…²oQ>…»@_>…²\ m>…¹oz>…Î`H?‘·m V?«ÇDb?…Ïkp?ŠÏ{ ~?�7$}K@…¼XHFнK VF…½|bF‘¾m pF‘¶m |FŠÅj HG‘¿m TGжj `GŒ—Å&mG…¹|SH…Áo aH…Á\nH…¼| |HŠ¿L II…Å| UIŠÇF bI…¶k nIмj {I…¸|GJ…´`UJŒ—¼&cJ…Á|IK‰Át WK‘Ïm dK…Èk pK‰Ît }K…»`JLÁ¨yCXL…»o [\…Îoh\…Ìo v\…¾XC]…»p Q]Œ—È'^]…Ì`E^Š·j S^Œ—·&`^…ºk F_Šºj S_‰Ít `_Œ—º'm_…Ío T`…Í\a`…³`o`…Í|}`…Í@Ka…¿eYa…Ä|gaŒ—¶'uaŒ—¾&\b‘Ëm BcŒ—Ë&NcŠÏj tc…Ä\AdŒ—Ï'Od…´p vd‘ÇI Ce‰Ê\ Oe…Ã| \eŠËj ie‘Çv ve…´o Cf…ÇJ PfЏK ]fвK if…Î@ufŠÈj Cg…Î\Pg…Á@^g…¾|lg…²|zg…Äo HhŒ—Ã&Uh…Ä@{h‰Ät Ii…³o Vi…Ìp ciŠÃj piйK |i…Î|Hj…³p Vj‰¹~cj·;$@qj‰Á~ql‰Î~l«ÉxMm«µY [m‰[~hm‰¸~vmŠÇE Dn‰z~Qn‰w~_n‰�~mn‰o~{n‘F5 Io‰h~Uo‘FP co‰Ä~po‰}~~o‰k~Lp‰²~ZpŠÀ4 hp‰x~tp‰½~Bq¨¨ORAPq‰Í~b²‰O~p²ŒÅs~²Œ¾qqµŒÅqb·ŒF.@S¹¸$eS»¼#ex¼Œ¼s]¾ŒÃvPÁ®'eFÄŒ¼qkÅÊ(Q\ÇŒ¾smÉÄ"Q`ÌŒÑÀ+xqÎ�:$AiÒŒ¼YjÕŒä™3_C×»%RbØŒ¾YtÚµ!RMÜŒÎÕ-R_ÞŒÜF1@qá­)nqéŒÓÕO] _ëŒÌF,F|ô° eBöŒÃqg÷ŒÅYXùŒÃ\qú´&eMüŽÔi rý…ÔZ~ý�·^Lþ�š· +j�ŒkÓU‚�8Ar‚�¾csˆŒxÖV‹Ž×i s‹ŒkÒ‹”ºz4k\Œ…×\Gž…×ZUž‰³{cžŠ�H qž‰×~~ž…�\LŸ�š¼ +ZŸŒ[áE …âZb ”¾z4g'p �¼wWÈŒ[åNÌŠæH kÌ…â\xÌ…�ZFÍŠ×H TÍ�š¾ +aÍŒxëLΊìH iΉì~vΊâH DÏŽxi QÏŽ�i ]Ï…xZiÏ…x\wÏŠxH EÐ�Å]RÐŒOõoÕ…ö\LÖ�šÃ +ZÖŒOøE׉ù~b׎ìi p×…ìZ|×…ì\J؉Ì{XØ”Ïz4rf؉â~Xê�Ã]fêŒOCð‰~`ð…\nð…Z|ðŽi Jñ‰ö~VñŠöH dñ‘Èm qñŠhH }ñ”™z4QJò…hZ[†Žhi i†�šÈ +u†Œh`‡ŠH }‡‰~Jˆ…\Xˆ…ZfˆŽi tˆ�ÈB@‰ŒhBŒ…öZ_Œ‰~mŒ…\{Œ…ZI��6aW��šÅ +xŽŒOc�Ži @�…ZL�…\Z�ŠwH h�Žöi u�ŠùH A‘…wZN‘Žwi \‘�š¶ +h‘Œw&S’Š'H p’‰'~}’…'\K“…'ZY“…ù\g“�¶Su“Œw-H—Š.H e—‰.~r—…ùZ@˜”·z4AN˜Žùi O«‰~[«ŠH i«ŠkH v«…h\C¬Žâi Q¬…kZ]¬Žki k¬‰Ô~w¬…Ô\E­Š}H S­Ž'i `­…}\l­ŠÙH z­‰Ù~G®…Ù\U®…ÙZc®ŽÙi q®”z4d}®‘ºm aµ‰æ~mµŠoH {µŠH H¶…o\U¶…oZc¶Žoi q¶�šº +}¶ŒoMh·ŠNH E¸‰N~R¸…N\`¸…NZn¸ŽNi |¸�º]H¹ŒoTe¼ŠUH B½‰U~O½…U\]½…UZk½ŽUi y½‰»{E¾…æ\S¾…æZa¾ŠzH o¾…w\|¾…z\J¿…zZX¿Žzi f¿�šË +r¿Œzc]ÀŠdH zÀ‰d~GÁ…d\UÁ…dZcÁŽdi qÁ�ËN}ÁŒzjKÅŠkH hʼnk~uÅ…k\CÆ…kZQÆŽki _ÆŽ[i kÆ”Ëz4rwÆŽ.i iØ”¼z4~,uØŠH s……}Z@†Ž}i N†�šÏ +Z†Œ}xE‡ŠyH b‡‰y~o‡…y\}‡…yZKˆŽyi Yˆ�ÏVeˆŒ}{‹Š€H XŒ‰€~eŒ…€\sŒ…€ZA�Ž€i O�‰Â{[�‰ÂB i�”Àz4]v�¬Æ{ S§¬ÆD `§….Zl§¬É{ z§….\F¨”Fz4Y7T¨ŠÔH mß…OZz߉´{Hà‘ÇC Và”Åz4n1bàŽæi P’”¶z4|\’…[ZX£…[\f£”Ãz4W1t£ŽOi KÕ…k\WÕŠ[H eÕ…¿MrÕŽi @Ö…O\LÖ”z4M ZÖ”Õz4L+gáŠOH sŒ”Èz4e@�ŒÝD/e�¨¨NKATž¨¨PRA_ߨ¨QRAq Á¨MCCâáFò