*E\@8DOO9}q\None BoomDeathSystemCoreUWindowCreatedBotMutatorTakeDamage PlayerPawnEngineNotifyCreateControl GetValueSetTextBoomDeathConfigWindow MenuHelpExecute MenuCaptionSetNumericOnly SetMaxLength SetHelpTextRegisterDamageMutatorBoomDeathMenuItemBoomDeathConfigClientUMenuPostBeginPlay SetValue ClientClass WindowTitleC DamageTypeFloatProperty LocationHealthEMutator RandRange ScriptText HitLocationGame InstigatorOwnerStaticSaveConfigVictim instigatedByStructPropertyClass LevelInfoObjectProperty GameInfoPawnLevelObjectActor actualDamage MomentumNextDamageMutatorUWindowEditControlUWindowPulldownMenuItemUWindowDialogClientWindowUWindowFramedWindowUWindowRootWindowUWindowDialogControlUWindowWindowUWindowPulldownMenuSetSize CreateWindowStructAlignWinLeft EditBoxWidth WinHeight WinWidthWinTopRoot Explosion BoolProperty IntProperty NamePropertyPackageUMenuModMenuItem Initialized MenuItemBotpack ShockWavechance ByteProperty TextBufferVector Function BoomChance DeathChance gĸl9 }9 }9 }9 }9 }9 }ylTlRù  @2 |sMo o  ]BoomDeath Configuration HR}~gĸtgĸtttttttgĸ Hclass BoomDeath expands Mutator; var bool Initialized; var globalconfig int BoomChance; 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 WarShell bigboom; local Shockwave explosion; local int chance; if (InstigatedBy.IsA('Bot') || InstigatedBy.IsA('PlayerPawn')) { if (Victim.IsA('Bot') || Victim.IsA('PlayerPawn')) { if (Victim.Health <= ActualDamage) { chance = int(RandRange(1, 100)); if (chance <= BoomChance) { explosion = Spawn(class 'Shockwave',,,Victim.Location); explosion.Instigator = Victim; } } } } if ( NextDamageMutator != None ) NextDamageMutator.MutatorTakeDamage( ActualDamage, Victim, InstigatedBy, HitLocation, Momentum, DamageType ); }  a/!a/!a/!a/! D?Ba  w*$   25Edͷ;aGնmo ]BoomDeath Options]Set the options for BoomDeath~. - -' UXCHB?,?, gclass BoomDeathMenuItem expands UMenuModMenuItem; function Execute() { MenuItem.Owner.Root.CreateWindow(class'BoomDeathConfigWindow', 10, 10, 150, 100); } .  A AB? BoomDeath Chance %APercent chance fragged player will explode Redeemer-style',A$S   W R$ = J @  U  Wclass BoomDeathConfigWindow expands UWindowFramedWindow; function Created() { Super.Created(); SetSize(150, 50); WinLeft = (Root.WinWidth - WinWidth) / 2; WinTop = (Root.WinHeight - WinHeight) / 2; } wclass BoomDeathConfigClient expands UWindowDialogClientWindow; var UWindowEditControl DeathChance; function Created() { Super.Created(); DeathChance = UWindowEditControl(CreateControl(class'UWindowEditControl', 10, 10, 120, 1)); DeathChance.SetText("BoomDeath Chance %"); DeathChance.SetHelpText("Percent chance fragged player will explode Redeemer-style"); DeathChance.SetNumericOnly(True); DeathChance.SetMaxLength(2); DeathChance.EditBoxWidth = 20; DeathChance.Align = TA_Left; DeathChance.SetValue(string(class'BoomDeath'.default.BoomChance)); // You could of course add heaps of controls in here. // See the UMenu and UTMenu for a billion examples. } function Notify(UWindowDialogControl C, byte E) { switch(E) { case DE_Change: switch(C) { case DeathChance: class'BoomDeath'.default.BoomChance = int(DeathChance.GetValue()); break; } class'BoomDeath'.static.StaticSaveConfig(); break; } } N<  A ACB OOO .?.9.2.4...#.Y.0.P.5.WO.<OS.M.;.=0J.TCX./H.:08.>.-YGY- 0(0'YM!EI.@YYBY$YA030)Y FVDY*.1.N0RY.V.L [ I+ Voc, RZ _U kK wQ D6 PF\Sb& u!" B" O"7 \" i"%4Su"zH2iB58k7 Sc8%4rv9 ]h< UE@ %4bZA %4B|DF~S