//============================================================================ // NIUTConfigDialog. //============================================================================= class NIUTConfigDialog expands UWindowDialogClientWindow; var UWindowSmallCloseButton CloseButton; var UWindowSmallButton DefaultsButton; const AmmoTableHOffset = 120; const AmmoTableSize = 48; const EditControlVerticalSpacing = 18; const PowerUpsTableOffset = 120; const PowerUpsTableSize = 80; const TablesVOffset = 8; // NIUT main options var UWindowCheckBox CycleWeaponsCheckBox, RandomWeaponsCheckBox, UseAllWeaponsCheckBox; var UWindowLabelControl TimeBetweenWeaponSwitchesMinLC, TimeBetweenWeaponSwitchesMaxLC, TimeBetweenAmmoIncrementsLC, TimeBetweenHealthIncrementsLC, HealthIncrementAmountLC, StartHealthLC, MaxHealthLC; var UWindowEditControl TimeBetweenAmmoIncrementsEC, TimeBetweenWeaponSwitchesMinEC, TimeBetweenWeaponSwitchesMaxEC, TimeBetweenHealthIncrementsEC, HealthIncrementAmountEC, StartHealthEC, MaxHealthEC; // weapons var UWindowCheckBox UseBioRifleCheckBox, UseChainSawCheckBox, UseEnforcerCheckBox, UseFlakCannonCheckBox, UseImpactHammerCheckBox, UseMiniGunCheckBox, UsePulseGunCheckBox, UseRipperCheckBox, UseRocketLauncherCheckBox, UseRedeemerCheckBox, UseShockRifleCheckBox, UseSniperRifleCheckBox, UseSuperShockRifleCheckBox, UseUnrealIASMDCheckBox, UseUnrealIAutoMagCheckBox, UseUnrealIDispersionPistolCheckBox, UseUnrealIFlakCannonCheckBox, UseUnrealIEightballCheckBox, UseUnrealIGESBioRifleCheckBox, UseUnrealIMinigunCheckBox, UseUnrealIRazorjackCheckBox, UseUnrealIRifleCheckBox, UseUnrealIStingerCheckBox; // ammo labels var UWindowLabelControl InitialAmmoLC, MaxAmmoLC, RateAmmoLC, BioAmmoLC, GunAmmoLC, FlakAmmoLC, PulseAmmoLC, RedeemerAmmoLC, RifleAmmoLC, RipperAmmoLC, RocketAmmoLC, ShockAmmoLC, StingerAmmoLC; // ammo edits - disabled if cycling weapons and not incrementing ammo var UWindowEditControl InitialBioAmmoEC, RateBioAmmoPerSecEC, MaxBioAmmoEC, InitialGunAmmoEC, RateGunAmmoPerSecEC, MaxGunAmmoEC, InitialFlakAmmoEC, RateFlakAmmoPerSecEC, MaxFlakAmmoEC, InitialPulseAmmoEC, RatePulseAmmoPerSecEC, MaxPulseAmmoEC, InitialRedeemerAmmoEC, RateRedeemerAmmoPerSecEC, MaxRedeemerAmmoEC, InitialRifleAmmoEC, RateRifleAmmoPerSecEC, MaxRifleAmmoEC, InitialRipperAmmoEC, RateRipperAmmoPerSecEC, MaxRipperAmmoEC, InitialRocketAmmoEC, RateRocketAmmoPerSecEC, MaxRocketAmmoEC, InitialShockAmmoEC, RateShockAmmoPerSecEC, MaxShockAmmoEC, InitialStingerAmmoEC, RateStingerAmmoPerSecEC, MaxStingerAmmoEC; // power ups var UWindowLabelControl PowerUpDelayMinLC, PowerUpDelayMaxLC, PowerUpDurationMinLC, PowerUpDurationMaxLC, DamageAmplifierLC, JumpbootsLC, InvisibilityLC; var UWindowEditControl InvisibilityDelayMinEC, InvisibilityDelayMaxEC, InvisibilityDurationMinEC, InvisibilityDurationMaxEC, DamageAmplifierDelayMinEC, DamageAmplifierDelayMaxEC, DamageAmplifierDurationMinEC, DamageAmplifierDurationMaxEC, JumpBootsDelayMinEC, JumpBootsDelayMaxEC, JumpBootsDurationMinEC, JumpBootsDurationMaxEC; var class UMutator; // used to vertically position the components var int SpacingOffset; var int HOffset, VOffset; //----------------------------------------------------------------------------- function AddCheckBox( out int HorzOffset, int HorzInc, out int VertOffset, int VertInc, out UWindowCheckBox CB, string LabelText, string HelpText, bool bChecked ) { CB = UWindowCheckBox( CreateControl(class'UWindowCheckBox', HorzOffset, VertOffset, (WinWidth/4)-16, 16) ); CB.SetText( LabelText ); CB.SetHelpText( HelpText ); CB.SetFont(F_Normal); CB.bChecked = bChecked; CB.Align = TA_Left; CB.Register(self); HorzOffset += HorzInc; VertOffset += VertInc; } //----------------------------------------------------------------------------- function AddLabelControl( out int HorzOffset, int HorzInc, out int VertOffset, int VertInc, int Width, out UWindowLabelControl LC, string LabelText, string HelpText ) { LC = UWindowLabelControl( CreateControl(class'UWindowLabelControl', HorzOffset, VertOffset, Width, 16) ); LC.SetText( LabelText ); LC.SetHelpText( HelpText ); LC.SetFont(F_Normal); LC.Align = TA_Left; LC.Register(self); HorzOffset += HorzInc; VertOffset += VertInc; } //----------------------------------------------------------------------------- function AddIntEditControl( out int HorzOffset, int HorzInc, out int VertOffset, int VertInc, int Width, out UWindowEditControl EC, string LabelText, string HelpText, int Val, optional int MaxLen ) { EC = UWindowEditControl(CreateControl(class'UWindowEditControl', HorzOffset, VertOffset, Width, 16)); EC.SetText( LabelText ); EC.SetHelpText( HelpText ); EC.SetFont(F_Normal); EC.SetNumericOnly(True); if( MaxLen != 0 ) EC.SetMaxLength( MaxLen ); else EC.SetMaxLength(3); EC.Align = TA_Right; EC.EditBox.Offset = 0; EC.EditBoxWidth = WinWidth/22; EC.SetValue(string(Val)); EC.Register(self); HorzOffset += HorzInc; VertOffset += VertInc; } //----------------------------------------------------------------------------- function AddFltEditControl( out int HorzOffset, int HorzInc, out int VertOffset, int VertInc, int Width, out UWindowEditControl EC, string LabelText, string HelpText, float Val ) { EC = UWindowEditControl(CreateControl(class'UWindowEditControl', HorzOffset, VertOffset, Width, 16)); EC.SetText( LabelText ); EC.SetHelpText( HelpText ); EC.SetFont(F_Normal); EC.SetNumericOnly(True); EC.SetNumericFloat(True); EC.SetMaxLength(8); EC.Align = TA_Right; EC.EditBox.Offset = 0; EC.EditBoxWidth = WinWidth/11; EC.SetValue(string(Val)); EC.Register(self); HorzOffset += HorzInc; VertOffset += VertInc; } //----------------------------------------------------------------------------- function Created() { Super.Created(); // close button CloseButton = UWindowSmallCloseButton(CreateWindow(class'UWindowSmallCloseButton', WinWidth-48, WinHeight-19, 48, 16)); // defaults button DefaultsButton = UWindowSmallButton(CreateControl(class'UWindowSmallButton', WinWidth-96-8, WinHeight-19, 48, 16)); DefaultsButton.SetText( "Defaults" ); DefaultsButton.SetHelpText( "Restore default settings." ); // main options HOffset = 8; VOffset = 8; AddCheckBox( HOffset, 0, VOffset, SpacingOffset, CycleWeaponsCheckBox, "Cycle Weapons:", "If checked, specified weapons are cycled, otherwise everyone has all specified weapons at all times (and ammo is given out automatically).", UMutator.default.bCycleWeapons ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, RandomWeaponsCheckBox, "Random Weapons:", "If checked and cycling weapons, weapons are selected randomly, otherwise weapons are selected in order.", UMutator.default.bRandomWeapons ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseAllWeaponsCheckBox, "Use All Weapons:", "If checked and cycling weapons randomly, each weapon will be used once each time through the list.", UMutator.default.bUseAllWeapons ); HOffset = 168; VOffset = 8; AddLabelControl( HOffset, 0, VOffset, EditControlVerticalSpacing, WinWidth/3, TimeBetweenWeaponSwitchesMinLC, "Min Time Between Weapon Switches:", "Minimum time (seconds) server waits between weapon switches (when cycling weapons)." ); AddLabelControl( HOffset, 0, VOffset, EditControlVerticalSpacing, WinWidth/3, TimeBetweenWeaponSwitchesMaxLC, "Max Time Between Weapon Switches:", "Maximum time (seconds) server waits between weapon switches (when cycling weapons)." ); AddLabelControl( HOffset, 0, VOffset, EditControlVerticalSpacing, WinWidth/3, TimeBetweenAmmoIncrementsLC, "Time Between Ammo Increments:", "Time (seconds) between ammo increments. Use 0.0 to disable (pickups become ammo). If set to 0.0 and weapons not cycled will default to 1.0." ); AddLabelControl( HOffset, 0, VOffset, EditControlVerticalSpacing, WinWidth/3, TimeBetweenHealthIncrementsLC, "Time Between Health Increments:", "Time (seconds) server waits between health increments." ); AddLabelControl( HOffset, 0, VOffset, EditControlVerticalSpacing, WinWidth/3, HealthIncrementAmountLC, "Health Increment Amount:", "Amount of health server will give to everyone when it is time to give out health." ); AddLabelControl( HOffset, 0, VOffset, EditControlVerticalSpacing, WinWidth/3, StartHealthLC, "Initial Health:", "Health that everyone starts out with (if 0, uses default for pawns)." ); AddLabelControl( HOffset, 0, VOffset, EditControlVerticalSpacing, WinWidth/3, MaxHealthLC, "Maximum Incremented Health:", "Maximum that health can be incremented to by server (if 0, uses default for pawns). Health vials still increment to 199." ); HOffset = 360; VOffset = 8; AddFltEditControl( HOffset, 0, VOffset, EditControlVerticalSpacing, WinWidth/11, TimeBetweenWeaponSwitchesMinEC, "", "Minimum time (seconds) server waits between weapon switches (when cycling weapons).", UMutator.default.TimeBetweenWeaponSwitchesMin ); AddFltEditControl( HOffset, 0, VOffset, EditControlVerticalSpacing, WinWidth/11, TimeBetweenWeaponSwitchesMaxEC, "", "Maximum time (seconds) server waits between weapon switches (when cycling weapons).", UMutator.default.TimeBetweenWeaponSwitchesMax ); AddFltEditControl( HOffset, 0, VOffset, EditControlVerticalSpacing, WinWidth/11, TimeBetweenAmmoIncrementsEC, "", "Time (seconds) server waits between giving out ammo to everyone (if 0.0, pickups become ammo for the current weapon).", UMutator.default.TimeBetweenAmmoIncrements ); AddFltEditControl( HOffset, 0, VOffset, EditControlVerticalSpacing, WinWidth/11, TimeBetweenHealthIncrementsEC, "", "Time (seconds) server waits between giving out health to everyone.", UMutator.default.TimeBetweenHealthIncrements ); AddIntEditControl( HOffset, 0, VOffset, EditControlVerticalSpacing, WinWidth/22, HealthIncrementAmountEC, "", "Amount of health server will give to everyone when it is time to give out health.", UMutator.default.HealthIncrementAmount ); AddIntEditControl( HOffset, 0, VOffset, EditControlVerticalSpacing, WinWidth/22, StartHealthEC, "", "Health that everyone starts out with (if 0, uses default for pawns).", UMutator.default.StartHealth, 4 ); AddIntEditControl( HOffset, 0, VOffset, EditControlVerticalSpacing, WinWidth/22, MaxHealthEC, "", "Maximum that health can be incremented to by server (if 0, uses default for pawns). Health vials still increment to 199.", UMutator.default.MaxHealth, 4 ); // ammo HOffset = 8 + AmmoTableHOffset; VOffset += TablesVOffset; AddLabelControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/20, InitialAmmoLC, "Initial", "Amount of ammo that the weapon starts out with." ); AddLabelControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/20, MaxAmmoLC, "Max", "Maximum amount of ammo for the weapon (0 = default)." ); AddLabelControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/20, RateAmmoLC, "Rate", "Rate (amount per second) at which the weapon's ammo increments (if not cycling weapons or if AmmoIncrementRate is set)." ); HOffset = 8; VOffset += EditControlVerticalSpacing; AddLabelControl( HOffset, AmmoTableHOffset, VOffset, 0, WinWidth/5, BioAmmoLC, "Bio Rifle Ammo:", "" ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, InitialBioAmmoEC, "", "", UMutator.default.InitialBioAmmo ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, MaxBioAmmoEC, "", "", UMutator.default.MaxBioAmmo ); AddFltEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/11, RateBioAmmoPerSecEC, "", "", UMutator.default.RateBioAmmoPerSec ); HOffset = 8; VOffset += EditControlVerticalSpacing; AddLabelControl( HOffset, AmmoTableHOffset, VOffset, 0, WinWidth/5, GunAmmoLC, "Gun Ammo:", "" ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, InitialGunAmmoEC, "", "", UMutator.default.InitialGunAmmo ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, MaxGunAmmoEC, "", "", UMutator.default.MaxGunAmmo ); AddFltEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/11, RateGunAmmoPerSecEC, "", "", UMutator.default.RateGunAmmoPerSec ); HOffset = 8; VOffset += EditControlVerticalSpacing; AddLabelControl( HOffset, AmmoTableHOffset, VOffset, 0, WinWidth/5, FlakAmmoLC, "Flak Cannon Ammo:", "" ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, InitialFlakAmmoEC, "", "", UMutator.default.InitialFlakAmmo ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, MaxFlakAmmoEC, "", "", UMutator.default.MaxFlakAmmo ); AddFltEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/11, RateFlakAmmoPerSecEC, "", "", UMutator.default.RateFlakAmmoPerSec ); HOffset = 8; VOffset += EditControlVerticalSpacing; AddLabelControl( HOffset, AmmoTableHOffset, VOffset, 0, WinWidth/5, PulseAmmoLC, "Pulse Gun Ammo:", "" ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, InitialPulseAmmoEC, "", "", UMutator.default.InitialPulseAmmo ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, MaxPulseAmmoEC, "", "", UMutator.default.MaxPulseAmmo ); AddFltEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/11, RatePulseAmmoPerSecEC, "", "", UMutator.default.RatePulseAmmoPerSec ); HOffset = 8; VOffset += EditControlVerticalSpacing; AddLabelControl( HOffset, AmmoTableHOffset, VOffset, 0, WinWidth/5, RedeemerAmmoLC, "Redeemer Ammo:", "" ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, InitialRedeemerAmmoEC, "", "", UMutator.default.InitialRedeemerAmmo ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, MaxRedeemerAmmoEC, "", "", UMutator.default.MaxRedeemerAmmo ); AddFltEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/11, RateRedeemerAmmoPerSecEC, "", "", UMutator.default.RateRedeemerAmmoPerSec ); HOffset = 8; VOffset += EditControlVerticalSpacing; AddLabelControl( HOffset, AmmoTableHOffset, VOffset, 0, WinWidth/5, RifleAmmoLC, "Rifle Ammo:", "" ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, InitialRifleAmmoEC, "", "", UMutator.default.InitialRifleAmmo ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, MaxRifleAmmoEC, "", "", UMutator.default.MaxRifleAmmo ); AddFltEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/11, RateRifleAmmoPerSecEC, "", "", UMutator.default.RateRifleAmmoPerSec ); HOffset = 8; VOffset += EditControlVerticalSpacing; AddLabelControl( HOffset, AmmoTableHOffset, VOffset, 0, WinWidth/5, RipperAmmoLC, "Ripper Ammo:", "" ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, InitialRipperAmmoEC, "", "", UMutator.default.InitialRipperAmmo ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, MaxRipperAmmoEC, "", "", UMutator.default.MaxRipperAmmo ); AddFltEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/11, RateRipperAmmoPerSecEC, "", "", UMutator.default.RateRipperAmmoPerSec ); HOffset = 8; VOffset += EditControlVerticalSpacing; AddLabelControl( HOffset, AmmoTableHOffset, VOffset, 0, WinWidth/5, RocketAmmoLC, "Rocket Launcher Ammo:", "" ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, InitialRocketAmmoEC, "", "", UMutator.default.InitialRocketAmmo ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, MaxRocketAmmoEC, "", "", UMutator.default.MaxRocketAmmo ); AddFltEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/11, RateRocketAmmoPerSecEC, "", "", UMutator.default.RateRocketAmmoPerSec ); HOffset = 8; VOffset += EditControlVerticalSpacing; AddLabelControl( HOffset, AmmoTableHOffset, VOffset, 0, WinWidth/5, ShockAmmoLC, "Shock Rifle Ammo:", "" ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, InitialShockAmmoEC, "", "", UMutator.default.InitialShockAmmo ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, MaxShockAmmoEC, "", "", UMutator.default.MaxShockAmmo ); AddFltEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/11, RateShockAmmoPerSecEC, "", "", UMutator.default.RateShockAmmoPerSec ); HOffset = 8; VOffset += EditControlVerticalSpacing; AddLabelControl( HOffset, AmmoTableHOffset, VOffset, 0, WinWidth/5, StingerAmmoLC, "Stinger Ammo:", "" ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, InitialStingerAmmoEC, "", "", UMutator.default.InitialStingerAmmo ); AddIntEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/22, MaxStingerAmmoEC, "", "", UMutator.default.MaxStingerAmmo ); AddFltEditControl( HOffset, AmmoTableSize, VOffset, 0, WinWidth/11, RateStingerAmmoPerSecEC, "", "", UMutator.default.RateStingerAmmoPerSec ); // power-ups HOffset = 8 + PowerUpsTableOffset; VOffset += TablesVOffset; VOffset += EditControlVerticalSpacing; AddLabelControl( HOffset, PowerUpsTableSize, VOffset, 0, WinWidth/10, PowerUpDelayMinLC, "Min Delay", "Min time (seconds) before power up is given to everyone (0.0 disables power up)." ); AddLabelControl( HOffset, PowerUpsTableSize, VOffset, 0, WinWidth/10, PowerUpDelayMaxLC, "Max Delay", "Max time (seconds) before power up is given to everyone (if enabled)." ); AddLabelControl( HOffset, PowerUpsTableSize, VOffset, 0, WinWidth/10, PowerUpDurationMinLC, "Min Duration", "Min duration (seconds) of power up (if enabled)." ); AddLabelControl( HOffset, PowerUpsTableSize, VOffset, 0, WinWidth/10, PowerUpDurationMaxLC, "Max Duration", "Max duration (seconds) of power up (if enabled)." ); HOffset = 8; VOffset += EditControlVerticalSpacing; AddLabelControl( HOffset, PowerUpsTableOffset, VOffset, 0, WinWidth/5, DamageAmplifierLC, "Damage Amplifier:", "" ); AddFltEditControl( HOffset, PowerUpsTableSize, VOffset, 0, WinWidth/11, DamageAmplifierDelayMinEC, "", "", UMutator.default.DamageAmplifierDelayMin ); AddFltEditControl( HOffset, PowerUpsTableSize, VOffset, 0, WinWidth/11, DamageAmplifierDelayMaxEC, "", "", UMutator.default.DamageAmplifierDelayMax ); AddFltEditControl( HOffset, PowerUpsTableSize, VOffset, 0, WinWidth/11, DamageAmplifierDurationMinEC, "", "", UMutator.default.DamageAmplifierDurationMin ); AddFltEditControl( HOffset, PowerUpsTableSize, VOffset, 0, WinWidth/11, DamageAmplifierDurationMaxEC, "", "", UMutator.default.DamageAmplifierDurationMax ); HOffset = 8; VOffset += EditControlVerticalSpacing; AddLabelControl( HOffset, PowerUpsTableOffset, VOffset, 0, WinWidth/5, JumpBootsLC, "JumpBoots:", "" ); AddFltEditControl( HOffset, PowerUpsTableSize, VOffset, 0, WinWidth/11, JumpBootsDelayMinEC, "", "", UMutator.default.JumpBootsDelayMin ); AddFltEditControl( HOffset, PowerUpsTableSize, VOffset, 0, WinWidth/11, JumpBootsDelayMaxEC, "", "", UMutator.default.JumpBootsDelayMax ); AddFltEditControl( HOffset, PowerUpsTableSize, VOffset, 0, WinWidth/11, JumpBootsDurationMinEC, "", "", UMutator.default.JumpBootsDurationMin ); AddFltEditControl( HOffset, PowerUpsTableSize, VOffset, 0, WinWidth/11, JumpBootsDurationMaxEC, "", "", UMutator.default.JumpBootsDurationMax ); HOffset = 8; VOffset += EditControlVerticalSpacing; AddLabelControl( HOffset, PowerUpsTableOffset, VOffset, 0, WinWidth/5, InvisibilityLC, "Invisibility:", "" ); AddFltEditControl( HOffset, PowerUpsTableSize, VOffset, 0, WinWidth/11, InvisibilityDelayMinEC, "", "", UMutator.default.InvisibilityDelayMin ); AddFltEditControl( HOffset, PowerUpsTableSize, VOffset, 0, WinWidth/11, InvisibilityDelayMaxEC, "", "", UMutator.default.InvisibilityDelayMax ); AddFltEditControl( HOffset, PowerUpsTableSize, VOffset, 0, WinWidth/11, InvisibilityDurationMinEC, "", "", UMutator.default.InvisibilityDurationMin ); AddFltEditControl( HOffset, PowerUpsTableSize, VOffset, 0, WinWidth/11, InvisibilityDurationMaxEC, "", "", UMutator.default.InvisibilityDurationMax ); // weapons HOffset = (3*WinWidth/4) + 8; VOffset = 8; AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseBioRifleCheckBox, "Bio Rifle", "If checked Bio Rifle will be used.", UMutator.default.bUseBioRifle ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseChainSawCheckBox, "Chainsaw", "If checked Chainsaw will be used.", UMutator.default.bUseChainSaw ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseEnforcerCheckBox, "Enforcer", "If checked Enforcer will be used.", UMutator.default.bUseEnforcer ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseFlakCannonCheckBox, "Flak Cannon", "If checked Flak Cannon will be used.", UMutator.default.bUseFlakCannon ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseImpactHammerCheckBox, "Impact Hammer", "If checked Impact Hammer will be used.", UMutator.default.bUseImpactHammer ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseMiniGunCheckBox, "Minigun", "If checked Minigun will be used.", UMutator.default.bUseMiniGun ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UsePulseGunCheckBox, "Pulse Gun", "If checked Pulse Gun will be used.", UMutator.default.bUsePulseGun ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseRedeemerCheckBox, "Redeemer", "If checked Redeemer will be used.", UMutator.default.bUseRedeemer ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseRipperCheckBox, "Ripper", "If checked Ripper will be used.", UMutator.default.bUseRipper ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseRocketLauncherCheckBox, "Rocket Launcher", "If checked Rocket Launcher will be used.", UMutator.default.bUseRocketLauncher ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseShockRifleCheckBox, "Shock Rifle", "If checked Shock Rifle will be used.", UMutator.default.bUseShockRifle ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseSniperRifleCheckBox, "Sniper Rifle", "If checked Sniper Rifle will be used.", UMutator.default.bUseSniperRifle ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseSuperShockRifleCheckBox, "Super Shock Rifle", "If checked Super Shock Rifle will be used.", UMutator.default.bUseSuperShockRifle ); VOffset += SpacingOffset; AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseUnrealIASMDCheckBox, "UnrealI ASMD*", "If checked UnrealI ASMD will be used (*only works in singleplayer games).", UMutator.default.bUseUnrealIASMD ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseUnrealIAutoMagCheckBox, "UnrealI Auto Mag*", "If checked UnrealI Auto Mag will be used (*only works in singleplayer games).", UMutator.default.bUseUnrealIAutoMag ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseUnrealIDispersionPistolCheckBox,"UnrealI Dispersion Pistol*", "If checked UnrealI Dispersion Pistol will be used (*only works in singleplayer games).",UMutator.default.bUseUnrealIDispersionPistol ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseUnrealIEightballCheckBox, "UnrealI Eightball*", "If checked UnrealI Eightball will be used (*only works in singleplayer games).", UMutator.default.bUseUnrealIEightball ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseUnrealIFlakCannonCheckBox, "UnrealI Flak Cannon*", "If checked UnrealI Flak Cannon will be used (*only works in singleplayer games).", UMutator.default.bUseUnrealIFlakCannon ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseUnrealIGESBioRifleCheckBox, "UnrealI GES Bio Rifle*", "If checked UnrealI GES Bio Rifle will be used (*only works in singleplayer games).", UMutator.default.bUseUnrealIGESBioRifle ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseUnrealIMinigunCheckBox, "UnrealI Minigun*", "If checked UnrealI Minigun will be used (*only works in singleplayer games).", UMutator.default.bUseUnrealIMinigun ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseUnrealIRazorjackCheckBox, "UnrealI Razorjack*", "If checked UnrealI Razorjack be used (*only works in singleplayer games).", UMutator.default.bUseUnrealIRazorjack ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseUnrealIRifleCheckBox, "UnrealI Rifle*", "If checked UnrealI Rifle will be used (*only works in singleplayer games).", UMutator.default.bUseUnrealIRifle ); AddCheckBox( HOffset, 0, VOffset, SpacingOffset, UseUnrealIStingerCheckBox, "UnrealI Stinger*", "If checked UnrealI Stinger will be used (*only works in singleplayer games).", UMutator.default.bUseUnrealIStinger ); } //----------------------------------------------------------------------------- function Paint(Canvas C, float X, float Y) { local Texture T; Super.Paint(C, X, Y); T = GetLookAndFeelTexture(); } //----------------------------------------------------------------------------- function Close(optional bool bByParent) { // save NIUTMutator config UMutator.default.bCycleWeapons = CycleWeaponsCheckBox.bChecked; UMutator.default.bRandomWeapons = RandomWeaponsCheckBox.bChecked; UMutator.default.bUseAllWeapons = UseAllWeaponsCheckBox.bChecked; UMutator.default.TimeBetweenWeaponSwitchesMin = RangeFloat( float(TimeBetweenWeaponSwitchesMinEC.EditBox.Value), 0.0, 999.0 ); UMutator.default.TimeBetweenWeaponSwitchesMax = RangeFloat( float(TimeBetweenWeaponSwitchesMaxEC.EditBox.Value), 0.0, 999.0 ); UMutator.default.TimeBetweenAmmoIncrements = RangeFloat( float(TimeBetweenAmmoIncrementsEC.EditBox.Value), 0.0, 999.0 ); UMutator.default.TimeBetweenHealthIncrements = RangeFloat( float(TimeBetweenHealthIncrementsEC.EditBox.Value), 0.0, 999.0 ); UMutator.default.HealthIncrementAmount = RoundRangeInt( float(HealthIncrementAmountEC.EditBox.Value), 0, 999 ); UMutator.default.StartHealth = RoundRangeInt( float(StartHealthEC.EditBox.Value), 0, 9999 ); UMutator.default.MaxHealth = RoundRangeInt( float(MaxHealthEC.EditBox.Value), 0, 9999 ); UMutator.default.InitialBioAmmo = RoundRangeInt( float(InitialBioAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.MaxBioAmmo = RoundRangeInt( float(MaxBioAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.RateBioAmmoPerSec = RangeFloat( float(RateBioAmmoPerSecEC.EditBox.Value), 0.0, 100.0 ); UMutator.default.InitialGunAmmo = RoundRangeInt( float(InitialGunAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.MaxGunAmmo = RoundRangeInt( float(MaxGunAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.RateGunAmmoPerSec = RangeFloat( float(RateGunAmmoPerSecEC.EditBox.Value), 0.0, 100.0 ); UMutator.default.InitialFlakAmmo = RoundRangeInt( float(InitialFlakAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.MaxFlakAmmo = RoundRangeInt( float(MaxFlakAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.RateFlakAmmoPerSec = RangeFloat( float(RateFlakAmmoPerSecEC.EditBox.Value), 0.0, 100.0 ); UMutator.default.InitialPulseAmmo = RoundRangeInt( float(InitialPulseAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.MaxPulseAmmo = RoundRangeInt( float(MaxPulseAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.RatePulseAmmoPerSec = RangeFloat( float(RatePulseAmmoPerSecEC.EditBox.Value), 0.0, 100.0 ); UMutator.default.InitialRedeemerAmmo = RoundRangeInt( float(InitialRedeemerAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.MaxRedeemerAmmo = RoundRangeInt( float(MaxRedeemerAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.RateRedeemerAmmoPerSec = RangeFloat( float(RateRedeemerAmmoPerSecEC.EditBox.Value), 0.0, 100.0 ); UMutator.default.InitialRifleAmmo = RoundRangeInt( float(InitialRifleAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.MaxRifleAmmo = RoundRangeInt( float(MaxRifleAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.RateRifleAmmoPerSec = RangeFloat( float(RateRifleAmmoPerSecEC.EditBox.Value), 0.0, 100.0 ); UMutator.default.InitialRipperAmmo = RoundRangeInt( float(InitialRipperAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.MaxRipperAmmo = RoundRangeInt( float(MaxRipperAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.RateRipperAmmoPerSec = RangeFloat( float(RateRipperAmmoPerSecEC.EditBox.Value), 0.0, 100.0 ); UMutator.default.InitialRocketAmmo = RoundRangeInt( float(InitialRocketAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.MaxRocketAmmo = RoundRangeInt( float(MaxRocketAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.RateRocketAmmoPerSec = RangeFloat( float(RateRocketAmmoPerSecEC.EditBox.Value), 0.0, 100.0 ); UMutator.default.InitialShockAmmo = RoundRangeInt( float(InitialShockAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.MaxShockAmmo = RoundRangeInt( float(MaxShockAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.RateShockAmmoPerSec = RangeFloat( float(RateShockAmmoPerSecEC.EditBox.Value), 0.0, 100.0 ); UMutator.default.InitialStingerAmmo = RoundRangeInt( float(InitialStingerAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.MaxStingerAmmo = RoundRangeInt( float(MaxStingerAmmoEC.EditBox.Value), 0, 999 ); UMutator.default.RateStingerAmmoPerSec = RangeFloat( float(RateStingerAmmoPerSecEC.EditBox.Value), 0.0, 100.0 ); UMutator.default.bUseBioRifle = UseBioRifleCheckBox.bChecked; UMutator.default.bUseChainSaw = UseChainSawCheckBox.bChecked; UMutator.default.bUseEnforcer = UseEnforcerCheckBox.bChecked; UMutator.default.bUseFlakCannon = UseFlakCannonCheckBox.bChecked; UMutator.default.bUseImpactHammer = UseImpactHammerCheckBox.bChecked; UMutator.default.bUseMiniGun = UseMiniGunCheckBox.bChecked; UMutator.default.bUsePulseGun = UsePulseGunCheckBox.bChecked; UMutator.default.bUseRedeemer = UseRedeemerCheckBox.bChecked; UMutator.default.bUseRipper = UseRipperCheckBox.bChecked; UMutator.default.bUseRocketLauncher = UseRocketLauncherCheckBox.bChecked; UMutator.default.bUseShockRifle = UseShockRifleCheckBox.bChecked; UMutator.default.bUseSniperRifle = UseSniperRifleCheckBox.bChecked; UMutator.default.bUseSuperShockRifle = UseSuperShockRifleCheckBox.bChecked; UMutator.default.bUseUnrealIASMD = UseUnrealIASMDCheckBox.bChecked; UMutator.default.bUseUnrealIAutoMag = UseUnrealIAutoMagCheckBox.bChecked; UMutator.default.bUseUnrealIDispersionPistol = UseUnrealIDispersionPistolCheckBox.bChecked; UMutator.default.bUseUnrealIEightball = UseUnrealIEightballCheckBox.bChecked; UMutator.default.bUseUnrealIFlakCannon = UseUnrealIFlakCannonCheckBox.bChecked; UMutator.default.bUseUnrealIGESBioRifle = UseUnrealIGESBioRifleCheckBox.bChecked; UMutator.default.bUseUnrealIMinigun = UseUnrealIMinigunCheckBox.bChecked; UMutator.default.bUseUnrealIRazorjack = UseUnrealIRazorjackCheckBox.bChecked; UMutator.default.bUseUnrealIRifle = UseUnrealIRifleCheckBox.bChecked; UMutator.default.bUseUnrealIStinger = UseUnrealIStingerCheckBox.bChecked; UMutator.default.DamageAmplifierDelayMin = RangeFloat(float(DamageAmplifierDelayMinEC.EditBox.Value), 0.0, 999.0 ); UMutator.default.DamageAmplifierDelayMax = RangeFloat(float(DamageAmplifierDelayMaxEC.EditBox.Value), 0.0, 999.0 ); UMutator.default.DamageAmplifierDurationMin = RangeFloat(float(DamageAmplifierDurationMinEC.EditBox.Value), 0.0, 999.0 ); UMutator.default.DamageAmplifierDurationMax = RangeFloat(float(DamageAmplifierDurationMaxEC.EditBox.Value), 0.0, 999.0 ); UMutator.default.JumpBootsDelayMin = RangeFloat(float(JumpBootsDelayMinEC.EditBox.Value), 0.0, 999.0 ); UMutator.default.JumpBootsDelayMax = RangeFloat(float(JumpBootsDelayMaxEC.EditBox.Value), 0.0, 999.0 ); UMutator.default.JumpBootsDurationMin = RangeFloat(float(JumpBootsDurationMinEC.EditBox.Value), 0.0, 999.0 ); UMutator.default.JumpBootsDurationMax = RangeFloat(float(JumpBootsDurationMaxEC.EditBox.Value), 0.0, 999.0 ); UMutator.default.InvisibilityDelayMin = RangeFloat(float(InvisibilityDelayMinEC.EditBox.Value), 0.0, 999.0 ); UMutator.default.InvisibilityDelayMax = RangeFloat(float(InvisibilityDelayMaxEC.EditBox.Value), 0.0, 999.0 ); UMutator.default.InvisibilityDurationMin = RangeFloat(float(InvisibilityDurationMinEC.EditBox.Value), 0.0, 999.0 ); UMutator.default.InvisibilityDurationMax = RangeFloat(float(InvisibilityDurationMaxEC.EditBox.Value), 0.0, 999.0 ); UMutator.static.StaticSaveConfig(); Super.Close(bByParent); } //----------------------------------------------------------------------------- function RestoreDefaults() { // restore default NIUTMutator config -- can't figure out a way to get at class defaults // so far before these are overridden by values in the config file (no can do?). CycleWeaponsCheckBox.bChecked = true; RandomWeaponsCheckBox.bChecked = true; UseAllWeaponsCheckBox.bChecked = true; TimeBetweenWeaponSwitchesMinEC.SetValue( "75.000000" ); TimeBetweenWeaponSwitchesMaxEC.SetValue( "75.000000" ); TimeBetweenAmmoIncrementsEC.SetValue( "0.000000" ); TimeBetweenHealthIncrementsEC.SetValue( "1.000000" ); HealthIncrementAmountEC.SetValue( "5" ); StartHealthEC.SetValue( "0" ); MaxHealthEC.SetValue( "0" ); InitialBioAmmoEC.SetValue( "50" ); MaxBioAmmoEC.SetValue( "100" ); RateBioAmmoPerSecEC.SetValue( "0.250000" ); InitialGunAmmoEC.SetValue( "100" ); MaxGunAmmoEC.SetValue( "199" ); RateGunAmmoPerSecEC.SetValue( "5.000000" ); InitialFlakAmmoEC.SetValue( "12" ); MaxFlakAmmoEC.SetValue( "50" ); RateFlakAmmoPerSecEC.SetValue( "0.200000" ); InitialPulseAmmoEC.SetValue( "50" ); MaxPulseAmmoEC.SetValue( "199" ); RatePulseAmmoPerSecEC.SetValue( "2.000000" ); InitialRedeemerAmmoEC.SetValue( "0" ); MaxRedeemerAmmoEC.SetValue( "1" ); RateRedeemerAmmoPerSecEC.SetValue( "0.050000" ); InitialRifleAmmoEC.SetValue( "12" ); MaxRifleAmmoEC.SetValue( "50" ); RateRifleAmmoPerSecEC.SetValue( "0.500000" ); InitialRipperAmmoEC.SetValue( "25" ); MaxRipperAmmoEC.SetValue( "75" ); RateRipperAmmoPerSecEC.SetValue( "1.500000" ); InitialRocketAmmoEC.SetValue( "12" ); MaxRocketAmmoEC.SetValue( "48" ); RateRocketAmmoPerSecEC.SetValue( "0.250000" ); InitialShockAmmoEC.SetValue( "12" ); MaxShockAmmoEC.SetValue( "50" ); RateShockAmmoPerSecEC.SetValue( "0.670000" ); InitialStingerAmmoEC.SetValue( "50" ); MaxStingerAmmoEC.SetValue( "200" ); RateStingerAmmoPerSecEC.SetValue( "5.000000" ); UseBioRifleCheckBox.bChecked = false; UseChainSawCheckBox.bChecked = false; UseEnforcerCheckBox.bChecked = false; UseFlakCannonCheckBox.bChecked = false; UseImpactHammerCheckBox.bChecked = false; UseMiniGunCheckBox.bChecked = true; UsePulseGunCheckBox.bChecked = false; UseRedeemerCheckBox.bChecked = false; UseRipperCheckBox.bChecked = true; UseRocketLauncherCheckBox.bChecked = true; UseShockRifleCheckBox.bChecked = false; UseSniperRifleCheckBox.bChecked = true; UseSuperShockRifleCheckBox.bChecked = false; UseUnrealIASMDCheckBox.bChecked = false; UseUnrealIAutoMagCheckBox.bChecked = false; UseUnrealIDispersionPistolCheckBox.bChecked = false; UseUnrealIEightballCheckBox.bChecked = false; UseUnrealIFlakCannonCheckBox.bChecked = false; UseUnrealIGESBioRifleCheckBox.bChecked = false; UseUnrealIMinigunCheckBox.bChecked = false; UseUnrealIRazorjackCheckBox.bChecked = false; UseUnrealIRifleCheckBox.bChecked = false; UseUnrealIStingerCheckBox.bChecked = false; DamageAmplifierDelayMinEC.SetValue( "240.000000" ); DamageAmplifierDelayMaxEC.SetValue( "240.000000" ); DamageAmplifierDurationMinEC.SetValue( "30.000000" ); DamageAmplifierDurationMaxEC.SetValue( "30.000000" ); JumpBootsDelayMinEC.SetValue( "0.000000" ); JumpBootsDelayMaxEC.SetValue( "0.000000" ); JumpBootsDurationMinEC.SetValue( "15.000000" ); JumpBootsDurationMaxEC.SetValue( "15.000000" ); InvisibilityDelayMinEC.SetValue( "0.000000" ); InvisibilityDelayMaxEC.SetValue( "0.000000" ); InvisibilityDurationMinEC.SetValue( "30.000000" ); InvisibilityDurationMaxEC.SetValue( "30.000000" ); } //----------------------------------------------------------------------------- function int RangeInt(int Num, int Min, int Max) { if (Num > Max) return Max; else if (Num < Min) return Min; else return Num; } //----------------------------------------------------------------------------- function float RangeFloat( float Num, float Min, float Max) { if (Num > Max) return Max; else if (Num < Min) return Min; else return Num; } //----------------------------------------------------------------------------- function int RoundRangeInt(float Num, int Min, int Max) { return RangeInt( int(Num + 0.5), Min, Max ); } //----------------------------------------------------------------------------- function Notify(UWindowDialogControl C, byte E) { Super.Notify(C, E); if(E == DE_MouseMove) { if(UMenuRootWindow(Root) != None) if(UMenuRootWindow(Root).StatusBar != None) UMenuRootWindow(Root).StatusBar.SetHelp(C.HelpText); } if(E == DE_MouseLeave) { if(UMenuRootWindow(Root) != None) if(UMenuRootWindow(Root).StatusBar != None) UMenuRootWindow(Root).StatusBar.SetHelp(""); } if( E == DE_Click ) { switch( C ) { case DefaultsButton: RestoreDefaults(); break; } } } defaultproperties { CloseButton=None DefaultsButton=None CycleWeaponsCheckBox=None RandomWeaponsCheckBox=None UseAllWeaponsCheckBox=None TimeBetweenWeaponSwitchesMinLC=None TimeBetweenWeaponSwitchesMaxLC=None TimeBetweenAmmoIncrementsLC=None TimeBetweenHealthIncrementsLC=None HealthIncrementAmountLC=None StartHealthLC=None MaxHealthLC=None TimeBetweenAmmoIncrementsEC=None TimeBetweenWeaponSwitchesMinEC=None TimeBetweenWeaponSwitchesMaxEC=None TimeBetweenHealthIncrementsEC=None HealthIncrementAmountEC=None StartHealthEC=None MaxHealthEC=None UseBioRifleCheckBox=None UseChainSawCheckBox=None UseEnforcerCheckBox=None UseFlakCannonCheckBox=None UseImpactHammerCheckBox=None UseMiniGunCheckBox=None UsePulseGunCheckBox=None UseRipperCheckBox=None UseRocketLauncherCheckBox=None UseRedeemerCheckBox=None UseShockRifleCheckBox=None UseSniperRifleCheckBox=None UseSuperShockRifleCheckBox=None UseUnrealIASMDCheckBox=None UseUnrealIAutoMagCheckBox=None UseUnrealIDispersionPistolCheckBox=None UseUnrealIFlakCannonCheckBox=None UseUnrealIEightballCheckBox=None UseUnrealIGESBioRifleCheckBox=None UseUnrealIMinigunCheckBox=None UseUnrealIRazorjackCheckBox=None UseUnrealIRifleCheckBox=None UseUnrealIStingerCheckBox=None InitialAmmoLC=None MaxAmmoLC=None RateAmmoLC=None BioAmmoLC=None GunAmmoLC=None FlakAmmoLC=None PulseAmmoLC=None RedeemerAmmoLC=None RifleAmmoLC=None RipperAmmoLC=None RocketAmmoLC=None ShockAmmoLC=None StingerAmmoLC=None InitialBioAmmoEC=None RateBioAmmoPerSecEC=None MaxBioAmmoEC=None InitialGunAmmoEC=None RateGunAmmoPerSecEC=None MaxGunAmmoEC=None InitialFlakAmmoEC=None RateFlakAmmoPerSecEC=None MaxFlakAmmoEC=None InitialPulseAmmoEC=None RatePulseAmmoPerSecEC=None MaxPulseAmmoEC=None InitialRedeemerAmmoEC=None RateRedeemerAmmoPerSecEC=None MaxRedeemerAmmoEC=None InitialRifleAmmoEC=None RateRifleAmmoPerSecEC=None MaxRifleAmmoEC=None InitialRipperAmmoEC=None RateRipperAmmoPerSecEC=None MaxRipperAmmoEC=None InitialRocketAmmoEC=None RateRocketAmmoPerSecEC=None MaxRocketAmmoEC=None InitialShockAmmoEC=None RateShockAmmoPerSecEC=None MaxShockAmmoEC=None InitialStingerAmmoEC=None RateStingerAmmoPerSecEC=None MaxStingerAmmoEC=None PowerUpDelayMinLC=None PowerUpDelayMaxLC=None PowerUpDurationMinLC=None PowerUpDurationMaxLC=None DamageAmplifierLC=None JumpbootsLC=None InvisibilityLC=None InvisibilityDelayMinEC=None InvisibilityDelayMaxEC=None InvisibilityDurationMinEC=None InvisibilityDurationMaxEC=None DamageAmplifierDelayMinEC=None DamageAmplifierDelayMaxEC=None DamageAmplifierDurationMinEC=None DamageAmplifierDurationMaxEC=None JumpBootsDelayMinEC=None JumpBootsDelayMaxEC=None JumpBootsDurationMinEC=None JumpBootsDurationMaxEC=None UMutator=None SpacingOffset=16 HOffset=0 VOffset=0 }