Áƒ*žE_H/Ă&'™%ô‹7%yď„E†nŹNÄ@!‡'R/_NoneEnhancedItems WhoPushedMeCoreEngineDirectHitString Corroded PreventDeathMutatorTakeDamage SuicidedFellAddHitBurnedDiedbUseMeInsteadBotTickRegisterDamageMutator BurnedDamageSpecialDamagePushedCorrodedDamage FellDamage FrozenDamage PushedDamage PreBeginPlayDrownedDyingFrozeni ScriptText ReturnValue DamageTypeKilledPhysicsMutator LevelInfo GameInfo bIsPlayer LocationLevelActorPawnClassPackage DeltaTimePKiller actualDamage Momentum HitLocationGame nextPawn PawnList NextMutatorNextDamageMutatorVictim instigatedBy TextBufferObject FunctionVectorEnhancedProjectileEnhancedMutator SetKillTypeRestoreKillTypeStructEIDeathMessageMutator DamageActorStructPropertyClassProperty NamePropertyObjectPropertyFloatProperty BoolProperty IntProperty LastVictimLastInstigator KilledHealth KilledDamage BytePropertyHealthNoneAddDamageActorSendToListStartPlayerSuicideRemoveDamageActor PlayerPawn bFirstTickbPrevPushKill BaseMutatorEIDMMM bPushKill PrevMutatorRRR RƒRRRRR,RƒR€RR RR RƒR €RƒR€RƒR €RƒR€RƒR€RƒR€RƒR) RR€R–R€R†"˙˙˙˙˙˙˙˙"˙˙˙˙˙˙˙˙˙˙7Éý†Ú ipˆ]+*%k pushed %o into an uncomfortable place.R†˙˙˙˙˙˙˙˙"˙˙˙˙˙˙˙˙˙˙7ţňK†Ú ipˆ]%$%o was pushed into the slime by %k.RR €R†˙˙˙˙˙˙˙˙"˙˙˙˙˙˙˙˙˙˙7iž*†Ú ipˆ]! %k pushed %o into a cold place.RR€R–R€R–†˙˙˙˙˙˙˙˙"˙˙˙˙˙˙˙˙˙˙7.̝ƒ†Ú ipˆ]21%o left a small crater after being pushed by %k.R†&˙˙˙˙˙˙˙˙"˙˙˙˙˙˙˙˙˙˙7w|/†Ú ipˆ] %k pushed %o into a hot place.RR˘2Şžd‚‚‚‚ -š w * -š w  ąá?% œw*$  R:class FellDamage extends EnhancedProjectile abstract; R>class CorrodedDamage extends EnhancedProjectile abstract; R€RR 0 ) AddHit(Victim, InstigatedBy); if ( NextDamageMutator != None ) NextDamageMutator.MutatorTakeDamage(ActualDamage, Victim, InstigatedBy, HitLocation, Momentum, DamageType); } // adds or updates an entry in the victim cache function AddHit(Pawn Victim, Pawn InstigatedBy) { local int i; for (i = 0; i < ArrayCount(LastVictim); i++) if ( LastVictim[i] == Victim ) { LastInstigator[i] = InstigatedBy; KilledHealth[i] = 1; return; } for (i = 0; i < ArrayCount(LastVictim); i++) if ( LastVictim[i] == None ) { LastVictim[i] = Victim; LastInstigator[i] = InstigatedBy; KilledHealth[i] = 1; return; } } // moves WhoPushedMe to the start of the mutator list (behind BaseMutator) function SendToListStart() { local Mutator M, PrevMutator; For (M = Level.Game.BaseMutator; M != None; M = M.NextMutator) { if ( M == Self && PrevMutator == None ) break; // already first regular mutator else if ( M == Self ) { // insert self after BaseMutator PrevMutator.NextMutator = NextMutator; NextMutator = Level.Game.BaseMutator.NextMutator; Level.Game.BaseMutator.NextMutator = Self; break; } } } function Tick(float DeltaTime) { local int i; local Pawn P; local bool bPrevPushKill; // move to start of mutator list to prevent problems with other mutator's PreventDeath() if ( !bFirstTick ) { SendToListStart(); bFirstTick = True; } // check victim cache for push kills for (i = 0; i < ArrayCount(LastVictim); i++) if ( LastVictim[i] != None && KilledHealth[i] <= 0 && LastInstigator[i] != None ) { bPrevPushKill = bPushKill; bPushKill = True; LastVictim[i].Health = Min(KilledHealth[i], 0); switch (KilledDamage[i]) { case 'Fell': AddDamageActor(class'FellDamage', False, False); break; case 'Burned': AddDamageActor(class'BurnedDamage', False, False); break; case 'Frozen': AddDamageActor(class'FrozenDamage', False, False); break; case 'Corroded': AddDamageActor(class'CorrodedDamage', False, False); break; case 'Suicided': AddDamageActor(class'PlayerSuicide', False, False); break; default: AddDamageActor(class'PushedDamage', False, False); break; } LastVictim[i].Died(LastInstigator[i], 'Pushed', LastVictim[i].Location); LastVictim[i] = None; RemoveDamageActor(); bPushKill = bPrevPushKill; } // remove players from the cache who already landed for (i = 0; i < ArrayCount(LastVictim); i++) if ( LastVictim[i] != None && (LastVictim[i].Physics == PHYS_Walking || LastVictim[i].Health <= 0 || LastInstigator[i] == None) ) { LastVictim[i] = None; LastInstigator[i] = None; } // kill bots with negative health who aren't already dead for (P = Level.PawnList; P != None; P = P.NextPawn) if ( P.IsA('Bot') && P.Health <= 0 && !P.IsInState('Dying') ) P.Died(P, 'Suicided', P.Location); } R+R„R*RRRRR„RR†/U˙˙˙˙˙˙˙˙"˙˙˙˙˙˙˙˙˙˙7-×@†Ú ipˆ]0/%o hands out free points. This one goes to %k.RR (TTS É(‘”™Çw(*F‚r( r+*Ç°°r(+‹‹‹‘”™‹‘”™‹Ç((‹ R=class PlayerSuicide extends EnhancedProjectile abstract; ,,+˙˙˙˙*+˙˙˙˙#,+ű˙˙˙>+ţ˙˙˙H+ţ˙˙˙;+˙˙˙˙$+˙˙˙˙)Hü˙˙˙6+ţ˙˙˙:+˙˙˙˙%+ţ˙˙˙++ţ˙˙˙<+ţ˙˙˙KHö˙˙˙(+ű˙˙˙C+ţ˙˙˙JH÷˙˙˙3Ký˙˙˙QBř˙˙˙=+ţ˙˙˙G+ţ˙˙˙EHó˙˙˙ZJý˙˙˙&Eö˙˙˙'+ű˙˙˙?Hü˙˙˙7<î˙˙˙Hý˙˙˙4<ü˙˙˙H÷˙˙˙5<ü˙˙˙+ţ˙˙˙IHä˙˙˙[Fî˙˙˙D<ä˙˙˙Pö˙˙˙"$N‡#L\ ky‡$.G— V#Nd‡#Mr‡!A‡9P‡8_‡/n‡ 8}‡ 9L—#O[˜1i— x†EF†K0J †{X ˜2S"˜2b"†Lq"†z}$˘#|w&Œ4Es(Œ4Ix)“A+Œ4GO+ #zV,# EP1ž#3U3Œ4GH4’zO5Ś#dI;Ł$-mBŒ4G{BŒ#4]KBD‡.\_“#]n“#X|‡.^J“$YY†UKg#T_r’Œ-4HQ•