*E@ f1iMNone 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\_<!_'GF2GL/U$@IQ$IC?0%F.]AeUGTDfcRL/#<TPYBK@I*ZmirtIC\XN,jMa=PH`E{NG7!FD4=$:e ɞ{#U ɞ{#U!_'g{#U{#U!_'g!_'!_'!_'g!_'ggg ɠ ɠ !_'!_'x=$:e!_'!_'!_'!_'!_'P$>5$`ASnKaqq! X-Q98$&:_Q[^q! Z6[@UUUUUUUUUUUUUsssgggWWWKKK;;;///###sg[O@__@@ \@ xl`TL|\@ plXT@@\@ t`|`\@@ sg[O@|\@ ppXX@@\@ |l\_`@@ %sg[O@ڟ_@ u`PEp5Z*@_@ opZZ@@տϰťp`_ZߊUЀPOzJpEj@e?`:_5Z0P/uO*oJ%_@ U?J:@0:/* ++O+w+ǟ+++w+O++3+_+Nj+Ƿ+++S/+[++++++W++>A3L_Jfq! ~B'vjq! 2FlHdq! 5p]pnMhWabq!  tmq! ;^aq! ^ND}iq!  (yE17`Id]Jk)^cq! Q4[ UKB;Ym5I5I5I=$:eBRJLWFV`_`Jwe|ZGsHb"@"@"@"@*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 *dL>M?, &Gk?;EM! - a/!a ?=?,  x" a"R4r'w. *W". "4r . "R4W  OaD1Z'w.*~.1Z.D1~ g.] #$ o ?$ d [$ e w$ f  o Um$2vy $pA rR#2w>5b $pA { &F,6r a 0*P*w  w *dL>Y?, &F_0;EY! - a/!a 0*?,  L&U,&6ra .@P@w w*dL>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 $tH,&6r a %/P/w  w *dL>I?, &Hn%;EI! - a/!a %/?,  dV"2~`2ԝXԝXԝX $pA l++=PM*w**w*xl,TD?M>8%8T- @ua@+a+  u8*Nw*++ H: @z=$:eggX'X'ѸBX'X'X'gg=$:e4"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!2Em[52XԝXԝXԝX $pA - a/! ',a/!&'Ba/!%'Xa/!('na/!$'a/!!'a/!''a/!"'a/!#'a/!)'w* -( JR1A= r* CV`%&%#%/a0 #-'10/a0 r*1:C:V&P&#a --a#/a0 -'--a107 67?E  CE CG >?o   ? ? gea 7.C10 bU)2H^0_ $pA FO'-a/!0na/!Ja/!  DE.VBioAmmo(a/!Na/!& DE.VBladeHopper(a/!?a/!% DE.VBulletBox(Da/!Ka/!( DE.VEClip(a/!Ma/!$ DE.VFlakAmmo(a/!@a/!! DE.VMiniAmmo(a/!Ra/!' DE.VPAmmo(_a/!=a/!" DE.VRifleShell(a/!>a/!# DE.VRocketPack(a/!Aa/!) DE.VShockCore(\$' u@,(B>@<w* ,@ rj 2KCwYtsl $pA Oae3i'w.*S.3i.e3S rs;.f5t5?'snqpt5nqpsp yV;fAHA?'V`JdHA`JdV[ &2Oʘe $pA PSYU-'ja  %CzC!THaL=a  "<%<j'a@'BB?a  'a  'aB=<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@'fa 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 Sa #=9H   [gHj Gcq_Dl BxmA  n}@prm\vJ-'a pBzC!GL$%$La@'L>a #??, >U9a U333?a #??,AB!G#??,a ף<$H  OHHw WNy D.OcC$ l{|Sg//============================================================================= // 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(); } hxBJl-'a pBzC!GT(%(Ta@'L>a #??, >A9a A333?a #??,AB!G#??,aL=(H  OuH` DEFwGfF// 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; } MhO hP QRSTNVN-'a   a  A D?%CzC!CHa=I6%6I_a@'a  _aL=6w  hIB bYZ]Ec6[ncՃC,RM] DEOuC; ^_bzewg  wh ijk~qfnK-'N,a  "a  "%CzC!HHaL>:%:NKWa@'a  WaK=:  wo? pMsv//============================================================================= // 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(); } `CjLz|QivABCDY//============================================================================= // 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'); } } \dXKLoN oO PQRSMUB-'ma  "a  "a  A D?BzC!EPGaL=2%2mla@'a  la<2  oV6 WXYZg]Tadabzd  ze fghickH-'Ba  "a  "a=,%,B;a@'yy333?a  ;a  ;a)\=,b  zl< mnopg//============================================================================= // 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(); } tw}y }z  {|}~x@T-'{a  "pBC!9Ga)\=E%E{Da@'^^?a  Da  DaL=Ea  }AH BCDEG(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^uPB //============================================================================= // 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; } qZ//============================================================================= // 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`gwuu@`xyY`=`laqaNZO`h`K`]P,sBP-aIwAP+`YPO`^`dvd`evcrC`UvXP1PDu^u]vz`a`^`WP3/m`atC0<$}Q0k N2t[2Wi2m w2m C3F| O3J \3t h3t u3t B4t O4t \4t i4V v4t C5~P5t ^5t k5kx5m F6r R6X_6\m6X{6k I7k V7kc7K q7\~7kL8\Z8\h8H v8{ C9\ P9G ]9k 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@XHFK VF|bFm pFm |Fj HGm TGj `G&mG|SHo aH\nH| |HL II| UIF bIk nIj {I|GJ`UJ&cJ|IKt WKm dKk pKt }K`JLyCXLo [\oh\o v\XC]p Q]'^]`E^j S^&`^k F_j S_t `_'m_o T`\a``o`|}`@KaeYa|ga'ua&\bm Bc&Ncj tc\Ad'Odp vdI Ce\ Oe| \ej iev veo CfJ PfK ]fK if@ufj Cg\Pg@^g|lg|zgo Hh&Uh@{ht Iio Vip cij piK |i|Hjp Vj~cj;$@qj~ql~lxMmY [m[~hm~vmE Dnz~Qnw~_n~mno~{nF5 Ioh~UoFP co~po}~~ok~Lp~Zp4 hpx~tp~BqORAPq~bO~ps~qqqbF.@S$eS#exs]vP'eFqk(Q\sm"Q`+xq:$AiYj3_C%RbYt!RM-R_F1@q)nqO] _F,F| eBqgYX\q&eMi rZ~^L +jkU8ArcsxVi skz4k\\GZU{cH q~~\L +Z[EZbz4g'pwW[NH k\xZFH T +axLH i~vH Dxi Qi ]xZix\wxH E]ROo\L +ZOE~bi pZ|\J{Xz4rf~X]fOC~`\nZ|i J~VH dm qhH }z4QJhZ[hi i +uh`H }~J\XZfi tB@hBZ_~m\{ZI6aW +xOci @ZL\ZwH hi uH AwZNwi \ +hw&S'H p'~}'\K'ZY\gSuw-H.H e.~rZ@z4ANi O~[H ikH vh\Ci QkZ]ki k~w\E}H S'i `}\lH z~G\UZci qz4d}m a~moH {H Ho\UoZcoi q +}oMhNH EN~RN\`NZnNi |]HoTeUH BU~OU\]UZkUi y{E\SZazH ow\|z\JzZXzi f +rzc]dH zd~Gd\UdZcdi qN}zjKkH hk~uk\CkZQki _[i kz4rw.i iz4~,uH s}Z@}i N +Z}xEyH by~oy\}yZKyi YVe}{H X~e\sZAi O{[B iz4]v{ SD `.Zl{ z.\FFz4Y7TH mOZz{HC Vz4n1bi Pz4|\[ZX[\fz4W1tOi Kk\W[H eMri @O\Lz4M Zz4L+gOH sz4e@D/eNKATPRA_QRAqMCCF