Decompiled source of UltraTweaker v1.1.2
plugins/UltraTweaker/UltraTweaker.dll
Decompiled 7 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using HarmonyLib; using Microsoft.CodeAnalysis; using TMPro; using UltraTweaker.Handlers; using UltraTweaker.SettingUI; using UltraTweaker.SettingUI.UIElements; using UltraTweaker.SettingUI.UIElements.Impl; using UltraTweaker.Subsettings; using UltraTweaker.Subsettings.Impl; using UltraTweaker.Tweaks; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.Rendering; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: AssemblyCompany("UltraTweaker")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Tweaks your Ultra.")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+0bf1468427ab9448bed0f0fef4007e7629d7a1cf")] [assembly: AssemblyProduct("UltraTweaker")] [assembly: AssemblyTitle("UltraTweaker")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace UltraTweaker { [BepInPlugin("waffle.ultrakill.ultratweaker", "UltraTweaker", "1.1.2")] public class UltraTweaker : BaseUnityPlugin { public const string GUID = "waffle.ultrakill.ultratweaker"; public const string Name = "UltraTweaker"; public const string Version = "1.1.2"; public static Dictionary<Type, Tweak> AllTweaks = new Dictionary<Type, Tweak>(); internal static List<Assembly> AssembliesToCheck = new List<Assembly> { Assembly.GetExecutingAssembly() }; public static void AddAssembly(Assembly asm) { AssembliesToCheck.Add(asm); Tweak.RefreshTweakHolder(); SaveHandler.LoadData(); } public void Start() { Debug.Log((object)"UltraTweaker v1.1.2 has started."); AssetHandler.LoadBundle(); Tweak.CreateTweakHolder(); SaveHandler.LoadData(); SettingUIHandler.Patch(); MutatorHandler.Patch(); } public void OnDestroy() { SaveHandler.SaveData(); } } public static class PathUtils { public static string GameDirectory() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Invalid comparison between Unknown and I4 //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Invalid comparison between Unknown and I4 string text = Application.dataPath; if ((int)Application.platform == 1) { text = Utility.ParentDirectory(text, 2); } else if ((int)Application.platform == 2) { text = Utility.ParentDirectory(text, 1); } return text; } public static string ModPath(Assembly asm = null) { if (asm == null) { asm = Assembly.GetExecutingAssembly(); } return asm.Location.Substring(0, asm.Location.LastIndexOf(Path.DirectorySeparatorChar)); } } public static class GameObjectUtils { public static GameObject ChildByName(this GameObject from, string name) { List<GameObject> list = new List<GameObject>(); int i; for (i = 0; i < from.transform.childCount; i++) { list.Add(((Component)from.transform.GetChild(i)).gameObject); } if (i == 0) { return null; } for (int j = 0; j < list.Count; j++) { if (((Object)list[j]).name == name) { return list[j]; } } return null; } public static List<GameObject> FindSceneObjects(string sceneName) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) List<GameObject> list = new List<GameObject>(); GameObject[] array = Object.FindObjectsOfType<GameObject>(); foreach (GameObject val in array) { Scene scene = val.scene; if (((Scene)(ref scene)).name == sceneName) { list.Add(val); } } return list; } public static List<GameObject> ChildrenList(this GameObject from) { List<GameObject> list = new List<GameObject>(); for (int i = 0; i < from.transform.childCount; i++) { list.Add(((Component)from.transform.GetChild(i)).gameObject); } return list; } } public class UltrakillUtils { public static GameObject NearestEnemy(Vector3 point, float maxDistance) { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) float num = maxDistance; GameObject result = null; GameObject[] array = GameObject.FindGameObjectsWithTag("Enemy"); GameObject[] array2 = array; foreach (GameObject val in array2) { if ((Object)(object)val.GetComponent<EnemyIdentifier>() != (Object)null && !val.GetComponent<EnemyIdentifier>().dead && Vector3.Distance(point, val.transform.position) < num) { num = Vector3.Distance(point, val.transform.position); result = val; } } return result; } } public class DisableDoubleRender : MonoBehaviour { private EnemyIdentifier eid; private DoubleRender[] dr; public void Start() { eid = null; dr = null; } public void Update() { if (dr == null && dr == null) { dr = ((Component)this).GetComponentsInChildren<DoubleRender>(true); } if (dr != null && dr.Length != 0) { DoubleRender[] array = dr; foreach (DoubleRender val in array) { val.currentCam.RemoveCommandBuffer((CameraEvent)16, val.cb); } } } } } namespace UltraTweaker.Tweaks { public class Metadata : Attribute { public string Name { get; private set; } public string ID { get; private set; } public string Description { get; private set; } public Metadata(string Name, string ID, string Description = "") { this.Name = Name; this.ID = ID; this.Description = Description; } } public class TweakMetadata : Metadata { public string PageId { get; private set; } public int InsertAt { get; private set; } public Sprite Icon { get; private set; } public bool AllowCG { get; private set; } public bool IsMutator { get; private set; } public TweakMetadata(string Name, string ID, string Description = "", string PageId = "waffle.ultrakill.ultratweaker.misc", int InsertAt = 0, string IconName = null, bool AllowCG = true, bool IsMutator = false) : base(Name, ID, Description) { if (IconName != null) { Icon = AssetHandler.GetCachedAsset<Sprite>(IconName); } this.PageId = PageId; this.InsertAt = InsertAt; this.AllowCG = AllowCG; this.IsMutator = IsMutator; } } public class Tweak : MonoBehaviour { private static GameObject _tweakHolder; public Dictionary<string, Subsetting> Subsettings = new Dictionary<string, Subsetting>(); public static Dictionary<Type, Tweak> TypeToTweak = new Dictionary<Type, Tweak>(); private bool _isEnabled = false; private TweakUIElement _element; public bool IsEnabled { get { return _isEnabled; } set { if (_isEnabled != value) { _isEnabled = value; if (!value) { Debug.Log((object)("Disabling tweak " + ((object)this).GetType().Name + ".")); OnTweakDisabled(); } else { Debug.Log((object)("Enabling tweak " + ((object)this).GetType().Name + ".")); OnTweakEnabled(); } } } } public TweakUIElement Element { get { if (_element == null) { _element = new TweakUIElement(this); } return _element; } } public static void CreateTweakHolder() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown _tweakHolder = new GameObject("UT Tweak Holder - don't destroy!"); Object.DontDestroyOnLoad((Object)(object)_tweakHolder); foreach (Assembly item in UltraTweaker.AssembliesToCheck) { Debug.Log((object)("Searching " + item.GetName().Name + " for tweaks.")); foreach (TypeInfo item2 in item.DefinedTypes.Where((TypeInfo type) => type.IsDefined(typeof(Metadata), inherit: false))) { Debug.Log((object)("Found tweak; " + item2.Name + ".")); Tweak tweak = (Tweak)(object)_tweakHolder.AddComponent((Type)item2); ((Behaviour)tweak).enabled = false; UltraTweaker.AllTweaks.Add(item2, tweak); } } } public static void RefreshTweakHolder() { foreach (Assembly item in UltraTweaker.AssembliesToCheck) { Debug.Log((object)("Searching " + item.GetName().Name + " for tweaks.")); foreach (TypeInfo item2 in item.DefinedTypes.Where((TypeInfo type) => type.IsDefined(typeof(Metadata), inherit: false))) { if (!UltraTweaker.AllTweaks.ContainsKey(item2)) { Debug.Log((object)("Found tweak; " + item2.Name + ".")); Tweak tweak = (Tweak)(object)_tweakHolder.AddComponent((Type)item2); ((Behaviour)tweak).enabled = false; UltraTweaker.AllTweaks.Add(item2, tweak); } } } } public static T GetInstance<T>() where T : Tweak { return TypeToTweak[typeof(T)] as T; } public virtual void OnTweakEnabled() { SceneManager.sceneLoaded += OnSceneLoad; if (!TypeToTweak.ContainsKey(((object)this).GetType())) { TypeToTweak.Add(((object)this).GetType(), this); } ((Behaviour)this).enabled = true; } public virtual void OnTweakDisabled() { SceneManager.sceneLoaded -= OnSceneLoad; ((Behaviour)this).enabled = false; } public virtual void OnSubsettingUpdate() { } public virtual void OnSceneLoad(Scene scene, LoadSceneMode mode) { } public static bool IsGameplayScene() { string[] source = new string[6] { "Intro", "Bootstrap", "Main Menu", "Level 2-S", "Intermission1", "Intermission2" }; return !source.Contains(SceneHelper.CurrentScene); } public void SetControls(bool active) { _element.SetControlsActive(active); foreach (Subsetting value in Subsettings.Values) { value.Element.SetControlsActive(active); } } } } namespace UltraTweaker.Tweaks.Impl { public class CGUtils : Tweak { private GameObject _originalPanel; private GameObject _panel; private Text _waves; private Text _enemies; private Text _time; private Text _kills; private Text _style; private StatsManager _sm; private LevelStatsEnabler _lse; private float _minutes; private float _seconds; public override void OnTweakEnabled() { base.OnTweakEnabled(); if (SceneHelper.CurrentScene == "Endless") { Create(); } } public override void OnTweakDisabled() { base.OnTweakDisabled(); if ((Object)(object)_panel != (Object)null) { Object.Destroy((Object)(object)_panel); } } public void Create() { _lse = ((Component)MonoSingleton<CanvasController>.Instance).gameObject.GetComponentInChildren<LevelStatsEnabler>(true); _sm = MonoSingleton<StatsManager>.Instance; if ((Object)(object)_originalPanel == (Object)null) { _originalPanel = AssetHandler.Bundle.LoadAsset<GameObject>("Cybergrind Stats.prefab"); } _panel = Object.Instantiate<GameObject>(_originalPanel, ((Component)_lse).transform); _waves = _panel.ChildByName("Waves Title").ChildByName("Waves").GetComponent<Text>(); _enemies = _panel.ChildByName("Enemies Title").ChildByName("Enemies").GetComponent<Text>(); _time = _panel.ChildByName("Time Title").ChildByName("Time").GetComponent<Text>(); _kills = _panel.ChildByName("Kills Title").ChildByName("Kills").GetComponent<Text>(); _style = _panel.ChildByName("Style Title").ChildByName("Style").GetComponent<Text>(); _waves.text = "0"; _enemies.text = "0"; _time.text = "00:00.000"; _kills.text = "0"; _style.text = "0"; _panel.SetActive(false); } public void Update() { if (SceneHelper.CurrentScene == "Endless" && (Object)(object)_lse != (Object)null) { if (!((Component)_lse).gameObject.activeSelf) { ((Component)_lse).gameObject.SetActive(true); } if ((Object)(object)_lse.levelStats != (Object)(object)_panel) { _lse.levelStats = _panel; } EndlessGrid instance = MonoSingleton<EndlessGrid>.Instance; _waves.text = instance.currentWave.ToString(); _enemies.text = (instance.tempEnemyAmount - instance.anw.deadEnemies).ToString(); _kills.text = _sm.kills.ToString(); _style.text = _sm.stylePoints.ToString(); _seconds = _sm.seconds; _minutes = 0f; while (_seconds >= 60f) { _seconds -= 60f; _minutes += 1f; } _time.text = _minutes + ":" + _seconds.ToString("00.000"); } } public override void OnSceneLoad(Scene scene, LoadSceneMode mode) { if (SceneHelper.CurrentScene == "Endless") { Create(); } } } [TweakMetadata("Close Quarters", "waffle.ultrakill.ultratweaker.mutator_close_quarters", "Blesses enemies when far.", "waffle.ultrakill.ultratweaker.mutators", 0, "Cross", true, true)] public class CloseQuarters : Tweak { public static class DistancePatches { [HarmonyPatch(typeof(EnemyIdentifier), "Awake")] [HarmonyPostfix] public static void AddComp(EnemyIdentifier __instance) { ((Component)__instance).gameObject.AddComponent<BlessWhenFar>(); } } public class BlessWhenFar : MonoBehaviour { private EnemyIdentifier eid; public void Start() { eid = ((Component)this).GetComponent<EnemyIdentifier>(); } public void Update() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) if (Vector3.Distance(((Component)this).transform.position, ((Component)MonoSingleton<NewMovement>.Instance).transform.position) > (float)Tweak.GetInstance<CloseQuarters>().Subsettings["enemy_distance"].GetValue<int>()) { if (!eid.blessed) { eid.Bless(false); } } else if (eid.blessed) { eid.Unbless(false); } } } private Harmony _harmony = new Harmony("waffle.ultrakill.ultratweaker.mutator_close_quarters"); public CloseQuarters() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown Subsettings = new Dictionary<string, Subsetting> { { "enemy_distance", new IntSubsetting(this, new Metadata("Distance", "enemy_distance", "Distance to bless at."), new SliderIntSubsettingElement("{0}m"), 15, 30, 5) } }; } public override void OnTweakEnabled() { base.OnTweakEnabled(); _harmony.PatchAll(typeof(DistancePatches)); } public override void OnTweakDisabled() { base.OnTweakDisabled(); _harmony.UnpatchSelf(); } } [TweakMetadata("Explode On Death", "waffle.ultrakill.ultratweaker.explode_self", "Explode and destroy everything when you die.", "waffle.ultrakill.ultratweaker.fun", 1, null, true, false)] public class ExplodeOnDeath : Tweak { public static class ExplosionPatches { [HarmonyPatch(typeof(NewMovement), "GetHurt")] [HarmonyPostfix] private static void ExplodeOnDeath() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) if (MonoSingleton<NewMovement>.Instance.dead) { GameObject explosion = MonoSingleton<GunSetter>.Instance.shotgunPump[0].LoadAssetAsync<GameObject>().WaitForCompletion().GetComponent<Shotgun>() .explosion; GameObject val = Object.Instantiate<GameObject>(explosion, ((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)MonoSingleton<NewMovement>.Instance).transform.rotation); Explosion[] componentsInChildren = val.GetComponentsInChildren<Explosion>(); foreach (Explosion val2 in componentsInChildren) { val2.enemyDamageMultiplier = 15f; val2.maxSize *= 15f; val2.damage = 0; } } } } private Harmony _harmony = new Harmony("waffle.ultrakill.ultratweaker.explode_self"); public override void OnTweakEnabled() { base.OnTweakEnabled(); _harmony.PatchAll(typeof(ExplosionPatches)); } public override void OnTweakDisabled() { base.OnTweakDisabled(); _harmony.UnpatchSelf(); } } [TweakMetadata("Fall Damage", "waffle.ultrakill.ultratweaker.mutator_fall_damage", "Take damage when you hit the floor too hard.", "waffle.ultrakill.ultratweaker.mutators", 1, "Bone", true, true)] public class FallDamage : Tweak { public class CheckVelocityOnHit : MonoBehaviour { private float Stored; private static GameObject LastCrunch; public void Start() { Immunity = true; ((MonoBehaviour)this).Invoke("RemoveImmunity", 2f); } public void OnCollisionEnter(Collision col) { //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) if (!Immunity && (col.gameObject.layer == 8 || col.gameObject.layer == 24) && (col.gameObject.CompareTag("Floor") || col.gameObject.CompareTag("Moving")) && Stored <= -40f && (!MonoSingleton<NewMovement>.Instance.stillHolding || MonoSingleton<NewMovement>.Instance.boostCharge <= 100f)) { float num = -(int)Stored; LastCrunch = Object.Instantiate<GameObject>(CrunchSound, ((Component)MonoSingleton<NewMovement>.Instance).transform.position, Quaternion.identity, ((Component)this).transform); LastCrunch.GetComponent<AudioSource>().volume = 0.2f - Stored / 100f; if (MonoSingleton<NewMovement>.Instance.hp != 1 && num >= 100f) { num = 99f; } MonoSingleton<NewMovement>.Instance.GetHurt((int)num, false, 0f, false, true, 0.35f, false); ((MonoBehaviour)this).Invoke("DestroyCrunch", 2f); MonoSingleton<CameraController>.Instance.CameraShake(num / 30f); } } public void LateUpdate() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) Stored = ((Component)this).GetComponent<Rigidbody>().velocity.y; } private void DestroyCrunch() { Object.Destroy((Object)(object)LastCrunch); } public void RemoveImmunity() { Immunity = false; } } public static GameObject CrunchSound; public static bool Immunity; public override void OnTweakEnabled() { base.OnTweakEnabled(); if ((Object)(object)CrunchSound == (Object)null) { CrunchSound = AssetHandler.Bundle.LoadAsset<GameObject>("CrunchSound.prefab"); } } public override void OnTweakDisabled() { base.OnTweakDisabled(); } private void Update() { if ((Object)(object)MonoSingleton<NewMovement>.Instance != (Object)null && (Object)(object)((Component)MonoSingleton<NewMovement>.Instance).gameObject.GetComponent<CheckVelocityOnHit>() == (Object)null) { ((Component)MonoSingleton<NewMovement>.Instance).gameObject.AddComponent<CheckVelocityOnHit>(); } } } [TweakMetadata("Floor Is Lava", "waffle.ultrakill.ultratweaker.mutator_floor_is_lava", "Take damage when on the floor.", "waffle.ultrakill.ultratweaker.mutators", 2, "Lava", true, true)] public class FloorIsLava : Tweak { private float _toRemove = 0f; private float _onFloorFor; public FloorIsLava() { Subsettings = new Dictionary<string, Subsetting> { { "damage_after", new FloatSubsetting(this, new Metadata("Damage After", "damage_after", "Time before damage starts."), new SliderFloatSubsettingElement("{0}s"), 0.1f, 5f, 0f) }, { "damage_per_second", new IntSubsetting(this, new Metadata("Damage Per Second", "damage_per_second", "Damage per second."), new SliderIntSubsettingElement(), 25, 100, 0) } }; } public override void OnTweakEnabled() { base.OnTweakEnabled(); } public override void OnTweakDisabled() { base.OnTweakDisabled(); } private void Update() { if (!((Object)(object)MonoSingleton<NewMovement>.Instance != (Object)null)) { return; } if (MonoSingleton<NewMovement>.Instance.gc.touchingGround) { _onFloorFor += Time.deltaTime; } else { _onFloorFor = 0f; } if (MonoSingleton<StatsManager>.Instance.timer && _onFloorFor > Subsettings["damage_after"].GetValue<float>()) { _toRemove += Time.deltaTime * (float)Subsettings["damage_per_second"].GetValue<int>(); if ((int)_toRemove >= 1) { NewMovement instance = MonoSingleton<NewMovement>.Instance; instance.hp -= (int)_toRemove; _toRemove -= (int)_toRemove; } if (MonoSingleton<NewMovement>.Instance.hp <= 0 && !MonoSingleton<NewMovement>.Instance.dead) { MonoSingleton<NewMovement>.Instance.GetHurt(int.MaxValue, false, 1f, true, true, 0.35f, false); } } } } [TweakMetadata("Skull Florpification", "waffle.ultrakill.ultratweaker.florpify_:3", "Replace skulls with Florp.", "waffle.ultrakill.ultratweaker.fun", 0, null, true, false)] public class Florpify : Tweak { public static class FlorpyPatches { [HarmonyPatch(typeof(Skull), "Start")] [HarmonyPostfix] private static void CreateFlorpy(Skull __instance) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) Renderer component = ((Component)__instance).gameObject.GetComponent<Renderer>(); if ((Object)(object)component != (Object)null) { component.enabled = false; GameObject val = Object.Instantiate<GameObject>(_florps[((Component)__instance).GetComponent<ItemIdentifier>().itemType], ((Component)component).transform); val.GetComponentInChildren<Renderer>().material.shader = component.material.shader; } } } private Harmony _harmony = new Harmony("waffle.ultrakill.ultratweaker.florpify_:3"); private static Dictionary<ItemType, GameObject> _florps; public override void OnTweakEnabled() { base.OnTweakEnabled(); if (_florps == null) { _florps = new Dictionary<ItemType, GameObject> { { (ItemType)1, AssetHandler.Bundle.LoadAsset<GameObject>("Blue Florp") }, { (ItemType)2, AssetHandler.Bundle.LoadAsset<GameObject>("Red Florp") } }; } _harmony.PatchAll(typeof(FlorpyPatches)); } public override void OnTweakDisabled() { base.OnTweakDisabled(); _harmony.UnpatchSelf(); } } [TweakMetadata("Force Gun Panel", "waffle.ultrakill.ultratweaker.force_gun", "Makes the gun panel always appear. So that you can use the other Rail charge indicator.", "waffle.ultrakill.ultratweaker.hud", 3, null, true, false)] public class ForceGunPanel : Tweak { public static class ForceGunPatches { [HarmonyPatch(typeof(GunControl), "Start")] [HarmonyPostfix] private static void PatchGunPanel(GunControl __instance) { if (Tweak.IsGameplayScene()) { __instance.gunPanel[0].SetActive(true); } } [HarmonyPatch(typeof(GunSetter), "ResetWeapons")] [HarmonyPostfix] private static void PatchGunPanelSetter(GunSetter __instance) { if (Tweak.IsGameplayScene()) { MonoSingleton<GunControl>.Instance.gunPanel[0].SetActive(true); } } } private Harmony _harmony = new Harmony("waffle.ultrakill.ultratweaker.force_gun"); public override void OnTweakEnabled() { base.OnTweakEnabled(); _harmony.PatchAll(typeof(ForceGunPatches)); if (Tweak.IsGameplayScene()) { MonoSingleton<GunControl>.Instance.gunPanel[0].SetActive(true); } } public override void OnTweakDisabled() { base.OnTweakDisabled(); _harmony.UnpatchSelf(); MonoSingleton<GunControl>.Instance.gunPanel[0].SetActive(false); } } [TweakMetadata("FPS Counter", "waffle.ultrakill.ultratweaker.fps_meter", "Shows a counter with your frames per second.", "waffle.ultrakill.ultratweaker.hud", 2, null, true, false)] public class FPSCount : Tweak { private GameObject _originalCounter; private GameObject _counter; private Text _text; public override void OnTweakEnabled() { base.OnTweakEnabled(); if ((Object)(object)_originalCounter == (Object)null) { _originalCounter = AssetHandler.Bundle.LoadAsset<GameObject>("FPS"); } CreateCounter(); } public override void OnTweakDisabled() { base.OnTweakDisabled(); Object.Destroy((Object)(object)_counter); } public void CreateCounter() { if ((Object)(object)MonoSingleton<CanvasController>.Instance != (Object)null) { _counter = Object.Instantiate<GameObject>(_originalCounter, ((Component)MonoSingleton<CanvasController>.Instance).transform); _text = _counter.ChildByName("Count").GetComponent<Text>(); } } public override void OnSceneLoad(Scene scene, LoadSceneMode mode) { CreateCounter(); } public void Update() { if ((Object)(object)_text != (Object)null) { float num = 1f / Time.unscaledDeltaTime; _text.text = $"FPS: {(int)num}"; } } } [TweakMetadata("Fragility", "waffle.ultrakill.ultratweaker.mutator_fragility", "Change your max health.", "waffle.ultrakill.ultratweaker.mutators", 3, "Fragility", true, true)] public class Fragility : Tweak { public static class FragilityPatches { [HarmonyPatch(typeof(NewMovement), "Update")] [HarmonyPostfix] private static void LimitHp(NewMovement __instance) { int value = Tweak.GetInstance<Fragility>().Subsettings["max_health"].GetValue<int>(); if (__instance.antiHp < (float)(100 - value)) { __instance.antiHp = 100 - value; } if (__instance.hp > value) { __instance.hp = value; } } } private Harmony _harmony = new Harmony("waffle.ultrakill.ultratweaker.mutator_fragility"); public Fragility() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown Subsettings = new Dictionary<string, Subsetting> { { "max_health", new IntSubsetting(this, new Metadata("Max Health", "max_health", "Maximum player health."), new SliderIntSubsettingElement(), 25, 100, 1) } }; } public override void OnTweakEnabled() { base.OnTweakEnabled(); _harmony.PatchAll(typeof(FragilityPatches)); } public override void OnTweakDisabled() { base.OnTweakDisabled(); _harmony.UnpatchSelf(); } } [TweakMetadata("Fresh", "waffle.ultrakill.ultratweaker.mutator_fresh", "Hurts you if you're not stylish.", "waffle.ultrakill.ultratweaker.mutators", 4, "Fresh", true, true)] public class Fresh : Tweak { private float _toRemove = 0f; public Fresh() { Subsettings = new Dictionary<string, Subsetting> { { "fresh", new IntSubsetting(this, new Metadata("FRESH", "fresh", "HP drained per second on Fresh."), new SliderIntSubsettingElement(), 0, 100, 0) }, { "used", new IntSubsetting(this, new Metadata("USED", "used", "HP drained per second on Used."), new SliderIntSubsettingElement(), 0, 100, 4) }, { "stale", new IntSubsetting(this, new Metadata("STALE", "stale", "HP drained per second on Stale."), new SliderIntSubsettingElement(), 0, 100, 8) }, { "dull", new IntSubsetting(this, new Metadata("DULL", "dull", "HP drained per second on Dull."), new SliderIntSubsettingElement(), 0, 100, 12) } }; } public override void OnTweakEnabled() { base.OnTweakEnabled(); } public override void OnTweakDisabled() { base.OnTweakDisabled(); } public void Update() { //IL_00c4: Unknown result type (might be due to invalid IL or missing references) Dictionary<StyleFreshnessState, float> dictionary = new Dictionary<StyleFreshnessState, float> { { (StyleFreshnessState)0, Subsettings["fresh"].GetValue<int>() }, { (StyleFreshnessState)1, Subsettings["used"].GetValue<int>() }, { (StyleFreshnessState)2, Subsettings["stale"].GetValue<int>() }, { (StyleFreshnessState)3, Subsettings["dull"].GetValue<int>() } }; if ((Object)(object)MonoSingleton<NewMovement>.Instance != (Object)null && MonoSingleton<StatsManager>.Instance.timer && MonoSingleton<GunControl>.Instance.activated) { _toRemove += dictionary[MonoSingleton<StyleHUD>.Instance.GetFreshnessState(MonoSingleton<GunControl>.Instance.currentWeapon)] * Time.deltaTime; if ((int)_toRemove >= 1) { NewMovement instance = MonoSingleton<NewMovement>.Instance; instance.hp -= (int)_toRemove; _toRemove -= (int)_toRemove; } if (MonoSingleton<NewMovement>.Instance.hp <= 0 && !MonoSingleton<NewMovement>.Instance.dead) { MonoSingleton<NewMovement>.Instance.GetHurt(int.MaxValue, false, 1f, true, true, 0.35f, false); } } } } [TweakMetadata("Fuel Leak", "waffle.ultrakill.ultratweaker.mutator_fuel_leak", "Lose health over time.", "waffle.ultrakill.ultratweaker.mutators", 5, "Leak", true, true)] public class FuelLeak : Tweak { private float _toRemove = 0f; public FuelLeak() { Subsettings = new Dictionary<string, Subsetting> { { "drain", new IntSubsetting(this, new Metadata("Damage Per Second", "drain", "HP drained per second."), new SliderIntSubsettingElement(), 0, 25, 1) } }; } public void Update() { if ((Object)(object)MonoSingleton<NewMovement>.Instance != (Object)null && MonoSingleton<StatsManager>.Instance.timer && MonoSingleton<GunControl>.Instance.activated) { _toRemove += Time.deltaTime * (float)Subsettings["drain"].GetValue<int>(); if ((int)_toRemove >= 1) { NewMovement instance = MonoSingleton<NewMovement>.Instance; instance.hp -= (int)_toRemove; _toRemove -= (int)_toRemove; } if (MonoSingleton<NewMovement>.Instance.hp <= 0 && !MonoSingleton<NewMovement>.Instance.dead) { MonoSingleton<NewMovement>.Instance.GetHurt(int.MaxValue, false, 1f, true, true, 0.35f, false); } } } } [TweakMetadata("Hitstop", "waffle.ultrakill.ultratweaker.hitstop", "Change hitstop duration, change the parry flash.", "waffle.ultrakill.ultratweaker.misc", 0, null, true, false)] public class Hitstop : Tweak { public static class HitstopPatches { [HarmonyPatch(typeof(TimeController), "HitStop")] [HarmonyPrefix] private static void PatchHitstop(ref float length) { length *= (float)Tweak.GetInstance<Hitstop>().Subsettings["hitstop_length"].GetValue<int>() / 100f; } [HarmonyPatch(typeof(TimeController), "TrueStop")] [HarmonyPrefix] private static void PatchTruestop(ref float length) { length *= (float)Tweak.GetInstance<Hitstop>().Subsettings["truestop_length"].GetValue<int>() / 100f; } [HarmonyPatch(typeof(TimeController), "SlowDown")] [HarmonyPrefix] private static void PatchSlowdown(ref float amount) { amount *= (float)Tweak.GetInstance<Hitstop>().Subsettings["slowdown_length"].GetValue<int>() / 100f; } } private Harmony _harmony = new Harmony("waffle.ultrakill.ultratweaker.hitstop"); public Hitstop() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown Subsettings = new Dictionary<string, Subsetting> { { "hitstop_length", new IntSubsetting(this, new Metadata("Hitstop Length", "hitstop_length", "How long hitstop lasts."), new SliderIntSubsettingElement("{0}%"), 100, 200, 0) }, { "truestop_length", new IntSubsetting(this, new Metadata("Truestop Length", "truestop_length", "How long truestop lasts."), new SliderIntSubsettingElement("{0}%"), 100, 200, 0) }, { "slowdown_length", new IntSubsetting(this, new Metadata("Slowdown Length", "slowdown_length", "How long slowdown lasts."), new SliderIntSubsettingElement("{0}%"), 100, 200, 0) } }; } public override void OnTweakEnabled() { base.OnTweakEnabled(); _harmony.PatchAll(typeof(HitstopPatches)); OnSubsettingUpdate(); } public override void OnTweakDisabled() { base.OnTweakDisabled(); _harmony.UnpatchSelf(); } } [TweakMetadata("Ice", "waffle.ultrakill.ultratweaker.mutator_ice", "Become slippery.", "waffle.ultrakill.ultratweaker.mutators", 6, "Ice", false, true)] public class Ice : Tweak { public static class IcePatches { [HarmonyPatch(typeof(NewMovement), "Start")] [HarmonyPostfix] public static void IcePlayer(NewMovement __instance) { __instance.modForcedFrictionMultip = Tweak.GetInstance<Ice>().Subsettings["slippyness"].GetValue<float>(); } } private Harmony _harmony = new Harmony("waffle.ultrakill.ultratweaker.mutator_ice"); public Ice() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown Subsettings = new Dictionary<string, Subsetting> { { "slippyness", new FloatSubsetting(this, new Metadata("Friction", "slippyness", "How grippy you are."), new SliderFloatSubsettingElement("{0}", 2), 0.1f, 0.5f, 0f) } }; } public override void OnTweakEnabled() { base.OnTweakEnabled(); _harmony.PatchAll(typeof(IcePatches)); } public override void OnTweakDisabled() { base.OnTweakDisabled(); _harmony.UnpatchSelf(); MonoSingleton<NewMovement>.Instance.modForcedFrictionMultip = 1f; } public override void OnSubsettingUpdate() { MonoSingleton<NewMovement>.Instance.modForcedFrictionMultip = Tweak.GetInstance<Ice>().Subsettings["slippyness"].GetValue<float>(); } } [TweakMetadata("Mitosis", "waffle.ultrakill.ultratweaker.mutator_mitosis", "Duplicates enemies.", "waffle.ultrakill.ultratweaker.mutators", 7, "Mitosis", false, true)] public class Mitosis : Tweak { public static class MitosisPatches { [HarmonyPatch(typeof(EnemyIdentifier), "Start")] [HarmonyPrefix] public static void HmmTodayIWillUndergoMitosis(EnemyIdentifier __instance) { //IL_0065: Unknown result type (might be due to invalid IL or missing references) if (!((Object)((Component)__instance).gameObject).name.Contains("(MITOSISED)")) { for (int i = 0; i < Tweak.GetInstance<Mitosis>().Subsettings["enemy_amount"].GetValue<int>() - 1; i++) { GameObject val = Object.Instantiate<GameObject>(((Component)__instance).gameObject, ((Component)__instance).transform.parent); ((Object)val).name = ((Object)((Component)__instance).gameObject).name + "(MITOSISED)"; val.transform.position = ((Component)__instance).transform.position; val.GetComponent<EnemyIdentifier>().blessed = false; } } } [HarmonyPatch(typeof(ActivateNextWave), "Awake")] [HarmonyPostfix] public static void IncreaseAnw(ActivateNextWave __instance) { GoreZone componentInParent = ((Component)__instance).gameObject.GetComponentInParent<GoreZone>(); if ((Object)(object)componentInParent == (Object)null) { Debug.Log((object)("No GoreZone found in hierarchy of " + ((Object)((Component)__instance).gameObject).name)); return; } Debug.Log((object)string.Format("{0} | {1} / {2} / {3}", __instance.enemyCount, ((Object)(object)((Component)componentInParent).transform.parent == (Object)null) ? "orphan" : ((Object)((Component)componentInParent).transform.parent).name, ((Object)((Component)componentInParent).transform).name, ((Object)((Component)__instance).gameObject).name)); if (((Object)((Component)componentInParent).gameObject).name.Contains("(Clone)")) { __instance.enemyCount *= Tweak.GetInstance<Mitosis>().Subsettings["enemy_amount"].GetValue<int>(); DeathMarker[] componentsInChildren = ((Component)__instance).gameObject.GetComponentsInChildren<DeathMarker>(true); foreach (DeathMarker val in componentsInChildren) { __instance.enemyCount--; } Debug.Log((object)$"{__instance.enemyCount} | Whar?"); } } } private Harmony _harmony = new Harmony("waffle.ultrakill.ultratweaker.mutator_mitosis"); public static List<ActivateNextWave> AlreadyMultiplied = new List<ActivateNextWave>(); public Mitosis() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown Subsettings = new Dictionary<string, Subsetting> { { "enemy_amount", new IntSubsetting(this, new Metadata("Amount", "enemy_amount", "The amount of enemies to clone"), new SliderIntSubsettingElement(), 2, 10, 2) } }; } public override void OnTweakEnabled() { base.OnTweakEnabled(); AlreadyMultiplied.Clear(); _harmony.PatchAll(typeof(MitosisPatches)); } public override void OnTweakDisabled() { base.OnTweakDisabled(); _harmony.UnpatchSelf(); } public override void OnSceneLoad(Scene scene, LoadSceneMode mode) { AlreadyMultiplied.Clear(); } } [TweakMetadata("Sandify", "waffle.ultrakill.ultratweaker.mutator_sandify", "Cover enemies in sand.", "waffle.ultrakill.ultratweaker.mutators", 8, "Sandify", true, true)] public class Sandify : Tweak { public static class SandifyPatches { [HarmonyPatch(typeof(EnemyIdentifier), "Awake")] [HarmonyPostfix] public static void MakeSandy(EnemyIdentifier __instance) { __instance.sandified = true; } } private Harmony _harmony = new Harmony("waffle.ultrakill.ultratweaker.mutator_sandify"); public override void OnTweakEnabled() { base.OnTweakEnabled(); _harmony.PatchAll(typeof(SandifyPatches)); } public override void OnTweakDisabled() { base.OnTweakDisabled(); _harmony.UnpatchSelf(); } } [TweakMetadata("Speed", "waffle.ultrakill.ultratweaker.mutator_speed", "Speed up yourself, and enemies", "waffle.ultrakill.ultratweaker.mutators", 9, "Speed", false, true)] public class Speed : Tweak { public static class SpeedPatches { [HarmonyPatch(typeof(NewMovement), "Start")] [HarmonyPostfix] public static void SpeedPlayer(NewMovement __instance) { _startSpeed = __instance.walkSpeed; __instance.walkSpeed = _startSpeed * Tweak.GetInstance<Speed>().Subsettings["player_speed_mult"].GetValue<float>(); } [HarmonyPatch(typeof(EnemyIdentifier), "Start")] [HarmonyPostfix] public static void SpeedEnemy(EnemyIdentifier __instance) { float value = Tweak.GetInstance<Speed>().Subsettings["enemy_speed_mult"].GetValue<float>(); if (!__instance.speedBuff) { ((Component)__instance).gameObject.AddComponent<DisableDoubleRender>(); __instance.SpeedBuff(value); } else { __instance.speedBuffModifier *= value; } } } private Harmony _harmony = new Harmony("waffle.ultrakill.ultratweaker.mutator_speed"); private static float _startSpeed; public Speed() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown Subsettings = new Dictionary<string, Subsetting> { { "player_speed_mult", new FloatSubsetting(this, new Metadata("Player Speed", "player_speed_mult", "Speed multiplier for the player."), new SliderFloatSubsettingElement("{0}x"), 2f, 10f, 0f) }, { "enemy_speed_mult", new FloatSubsetting(this, new Metadata("Enemy Speed", "enemy_speed_mult", "Speed multiplier for the enemies."), new SliderFloatSubsettingElement("{0}x"), 2f, 10f, 0f) } }; } public override void OnSubsettingUpdate() { MonoSingleton<NewMovement>.Instance.walkSpeed = _startSpeed * Subsettings["player_speed_mult"].GetValue<float>(); } public override void OnTweakEnabled() { base.OnTweakEnabled(); if ((Object)(object)MonoSingleton<NewMovement>.Instance != (Object)null) { _startSpeed = MonoSingleton<NewMovement>.Instance.walkSpeed; MonoSingleton<NewMovement>.Instance.walkSpeed = _startSpeed * Tweak.GetInstance<Speed>().Subsettings["player_speed_mult"].GetValue<float>(); } _harmony.PatchAll(typeof(SpeedPatches)); } public override void OnTweakDisabled() { base.OnTweakDisabled(); if ((Object)(object)MonoSingleton<NewMovement>.Instance != (Object)null) { MonoSingleton<NewMovement>.Instance.walkSpeed = _startSpeed; } _harmony.UnpatchSelf(); } } [TweakMetadata("Stat Panels", "waffle.ultrakill.ultratweaker.stat_panels", "Various info panels.", "waffle.ultrakill.ultratweaker.hud", 1, null, true, false)] public class StatPanels : Tweak { public class Hit { public DateTime time; public float dmg; public Hit(float dmg) { this.dmg = dmg; time = DateTime.Now; } } public class PanelPatches { [HarmonyPatch(typeof(EnemyIdentifier), "DeliverDamage")] [HarmonyPrefix] private static void SetHealthBefore(EnemyIdentifier __instance, out float __state) { __state = __instance.health; } [HarmonyPatch(typeof(EnemyIdentifier), "DeliverDamage")] [HarmonyPostfix] private static void DoHealthAfter(EnemyIdentifier __instance, float __state) { float num = __instance.health; if (num < 0f) { num = 0f; } float num2 = __state - num; if (num2 != 0f) { HitsSecond.Add(new Hit(num2)); } } } private Harmony harmony = new Harmony("waffle.ultrakill.ultratweaker.stat_panels"); private GameObject _originalPanels; private GameObject _currentPanels; private GameObject _dps; private Text _dpsText; private GameObject _speed; private Text _speedText; private GameObject _info; private Text _hpText; private Text _staminaText; private GameObject _weapons; private Image _gunImage; private Image _punchImage; private Slider _railSlider; public static List<Hit> HitsSecond = new List<Hit>(); public StatPanels() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown Subsettings = new Dictionary<string, Subsetting> { { "info", new BoolSubsetting(this, new Metadata("Info Panel", "info", "Shows your health and stamina."), new BoolSubsettingElement(), defaultValue: false) }, { "weapons", new BoolSubsetting(this, new Metadata("Weapon Panel", "weapons", "Shows your weapon, fist, and rail charge."), new BoolSubsettingElement(), defaultValue: false) }, { "dps", new BoolSubsetting(this, new Metadata("DPS Panel", "dps", "Shows your damage per second."), new BoolSubsettingElement(), defaultValue: false) }, { "speed", new BoolSubsetting(this, new Metadata("Speed Panel", "speed", "Shows your speed."), new BoolSubsettingElement(), defaultValue: false) }, { "speed_mode", new IntSubsetting(this, new Metadata("Speed: Mode", "speed_mode", "Should it show total speed, or speed in each direction?"), new DropdownIntSubsettingElement(new List<string> { "(x) m/s", "(x, y, z) m/s" }), 0, 1, 0) }, { "size", new IntSubsetting(this, new Metadata("Size", "size", "How big the panels are."), new SliderIntSubsettingElement("{0}%"), 100, 200, 0) } }; } public override void OnTweakEnabled() { base.OnTweakEnabled(); harmony.PatchAll(typeof(PanelPatches)); Create(); } public override void OnTweakDisabled() { base.OnTweakDisabled(); Object.Destroy((Object)(object)_currentPanels); harmony.UnpatchSelf(); } public override void OnSubsettingUpdate() { //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)MonoSingleton<CanvasController>.Instance != (Object)null) || !Tweak.IsGameplayScene() || !((Object)(object)_currentPanels != (Object)null)) { return; } _dps.SetActive(Subsettings["dps"].GetValue<bool>()); _speed.SetActive(Subsettings["speed"].GetValue<bool>()); _info.SetActive(Subsettings["info"].GetValue<bool>()); _weapons.SetActive(Subsettings["weapons"].GetValue<bool>()); foreach (GameObject item in _currentPanels.ChildrenList()) { int num = 0; foreach (GameObject item2 in item.ChildrenList()) { if (item2.activeSelf) { num++; } } if (num == 0) { item.SetActive(false); } else { item.SetActive(true); } } _currentPanels.transform.SetAsFirstSibling(); _currentPanels.transform.localScale = Vector3.one * (float)Subsettings["size"].GetValue<int>() / 100f; } public override void OnSceneLoad(Scene scene, LoadSceneMode mode) { Create(); } private void Create() { if ((Object)(object)MonoSingleton<CanvasController>.Instance != (Object)null && Tweak.IsGameplayScene()) { if ((Object)(object)_originalPanels == (Object)null) { _originalPanels = AssetHandler.Bundle.LoadAsset<GameObject>("All Panels.prefab"); } _currentPanels = Object.Instantiate<GameObject>(_originalPanels, ((Component)MonoSingleton<CanvasController>.Instance).transform); _dps = _currentPanels.ChildByName("Top Row").ChildByName("DPS"); _speed = _currentPanels.ChildByName("Top Row").ChildByName("Speed"); _info = _currentPanels.ChildByName("Bottom Row").ChildByName("Info"); _weapons = _currentPanels.ChildByName("Bottom Row").ChildByName("Weapons"); _dpsText = _dps.ChildByName("DPS").GetComponent<Text>(); _speedText = _speed.ChildByName("SPEED").GetComponent<Text>(); _hpText = _info.ChildByName("HP").GetComponent<Text>(); _staminaText = _info.ChildByName("Stamina").GetComponent<Text>(); _gunImage = _weapons.ChildByName("Gun").GetComponent<Image>(); _punchImage = _weapons.ChildByName("Fist").GetComponent<Image>(); _railSlider = _weapons.ChildByName("Slider").GetComponent<Slider>(); OnSubsettingUpdate(); } } private float CalculateDps() { float num = 0f; for (int i = 0; i < HitsSecond.Count; i++) { Hit hit = HitsSecond[i]; if ((DateTime.Now - hit.time).TotalSeconds > 1.0) { HitsSecond.RemoveAt(i); i--; continue; } float dmg = hit.dmg; if (dmg < 1000000f && dmg > 0f) { num += dmg; } } return num; } public void Update() { //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_029f: Unknown result type (might be due to invalid IL or missing references) //IL_02a4: Unknown result type (might be due to invalid IL or missing references) //IL_02a6: Unknown result type (might be due to invalid IL or missing references) //IL_02ad: Unknown result type (might be due to invalid IL or missing references) //IL_02b4: Unknown result type (might be due to invalid IL or missing references) //IL_02bb: Unknown result type (might be due to invalid IL or missing references) //IL_02c0: Unknown result type (might be due to invalid IL or missing references) //IL_025c: Unknown result type (might be due to invalid IL or missing references) //IL_0261: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)_currentPanels != (Object)null)) { return; } if (_info.activeSelf && (Object)(object)MonoSingleton<NewMovement>.Instance != (Object)null) { string text = ""; string text2 = ""; if (MonoSingleton<NewMovement>.Instance.antiHp != 0f) { text += "<color=#7C7A7B>"; text2 += "</color>"; } _hpText.text = $"{MonoSingleton<NewMovement>.Instance.hp}{text} / {100.0 - Math.Round(MonoSingleton<NewMovement>.Instance.antiHp, 0)}{text2}"; _staminaText.text = (MonoSingleton<NewMovement>.Instance.boostCharge / 100f).ToString("0.00") + " / 3.00"; } if (_weapons.activeSelf && (Object)(object)MonoSingleton<NewMovement>.Instance != (Object)null && (Object)(object)MonoSingleton<WeaponHUD>.Instance != (Object)null && (Object)(object)MonoSingleton<WeaponCharges>.Instance != (Object)null && (Object)(object)MonoSingleton<FistControl>.Instance != (Object)null) { _gunImage.sprite = MonoSingleton<WeaponHUD>.Instance.img.sprite; ((Graphic)_gunImage).color = ((Graphic)MonoSingleton<WeaponHUD>.Instance.img).color; _punchImage.sprite = MonoSingleton<FistControl>.Instance.fistIcon.sprite; ((Graphic)_punchImage).color = ((Graphic)MonoSingleton<FistControl>.Instance.fistIcon).color; _railSlider.value = MonoSingleton<WeaponCharges>.Instance.raicharge; } if (_dps.activeSelf) { _dpsText.text = Math.Round(CalculateDps(), 2).ToString(); } if (_speed.activeSelf) { Vector3 val; if (Subsettings["speed_mode"].GetValue<int>() == 0) { _speedText.fontSize = 72; Text speedText = _speedText; val = MonoSingleton<NewMovement>.Instance.rb.velocity; speedText.text = Math.Round(((Vector3)(ref val)).magnitude, 2).ToString(); } else { _speedText.fontSize = 42; Vector3 velocity = MonoSingleton<NewMovement>.Instance.rb.velocity; val = new Vector3(velocity.x, velocity.y, velocity.z); string text3 = ((object)(Vector3)(ref val)).ToString(); text3 = text3.Replace("(", "").Replace(")", "").Replace(", ", "\n"); _speedText.text = text3; } } } } [TweakMetadata("Submerged", "waffle.ultrakill.ultratweaker.mutator_submerged", "Everything is underwater.", "waffle.ultrakill.ultratweaker.mutators", 10, "Submerged", false, true)] public class Submerged : Tweak { public static class SubmergedPatches { [HarmonyPatch(typeof(NewMovement), "Start")] [HarmonyPostfix] public static void SpawnWater() { MakeWater(); } [HarmonyPatch(typeof(Water), "Start")] [HarmonyPrefix] public static void DisableOtherWaters(Water __instance) { if (((Object)((Component)__instance).gameObject).name != "UT WATER!!!") { ((Behaviour)__instance).enabled = false; } } [HarmonyPatch(typeof(BloodsplatterManager), "GetGore", new Type[] { typeof(GoreType), typeof(bool), typeof(bool), typeof(bool), typeof(EnemyIdentifier) })] [HarmonyPrefix] public static void MakeUnderwater(ref bool isUnderwater) { isUnderwater = true; } } private Harmony _harmony = new Harmony("waffle.ultrakill.ultratweaker.mutator_submerged"); private static GameObject _water; public override void OnTweakEnabled() { base.OnTweakEnabled(); _harmony.PatchAll(typeof(SubmergedPatches)); MakeWater(); } public override void OnTweakDisabled() { base.OnTweakDisabled(); _harmony.UnpatchSelf(); if ((Object)(object)_water != (Object)null) { Object.Destroy((Object)(object)_water); } } public static void MakeWater() { //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Expected O, but got Unknown //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) if (Tweak.IsGameplayScene()) { _water = GameObject.CreatePrimitive((PrimitiveType)3); ((Object)_water).name = "UT WATER!!!"; _water.AddComponent<Rigidbody>(); _water.GetComponent<Rigidbody>().isKinematic = true; _water.GetComponent<Collider>().isTrigger = true; _water.AddComponent<Water>(); _water.GetComponent<Water>().bubblesParticle = new GameObject(); _water.GetComponent<Water>().clr = new Color(0f, 0.5f, 1f); ((Renderer)_water.GetComponent<MeshRenderer>()).enabled = false; _water.transform.localScale = Vector3.one * 1E+10f; } } } [TweakMetadata("Tankify", "waffle.ultrakill.ultratweaker.mutator_tankify", "Change enemy health.", "waffle.ultrakill.ultratweaker.mutators", 11, "Tankify", false, true)] public class Tankify : Tweak { public static class TankifyPatches { [HarmonyPatch(typeof(EnemyIdentifier), "Start")] [HarmonyPostfix] public static void IncreaseHealth(EnemyIdentifier __instance) { float value = Tweak.GetInstance<Tankify>().Subsettings["multiplier"].GetValue<float>(); if (!__instance.healthBuff) { ((Component)__instance).gameObject.AddComponent<DisableDoubleRender>(); __instance.HealthBuff(value); } else { __instance.healthBuffModifier *= value; } } } private Harmony _harmony = new Harmony("waffle.ultrakill.ultratweaker.mutator_tankify"); public Tankify() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown Subsettings = new Dictionary<string, Subsetting> { { "multiplier", new FloatSubsetting(this, new Metadata("Health Multplier", "multiplier", "Enemy health multiplier."), new SliderFloatSubsettingElement(), 2f, 10f, 0f) } }; } public override void OnTweakEnabled() { base.OnTweakEnabled(); _harmony.PatchAll(typeof(TankifyPatches)); } public override void OnTweakDisabled() { base.OnTweakDisabled(); _harmony.UnpatchSelf(); } } [TweakMetadata("UI Scale", "waffle.ultrakill.ultratweaker.ui_scale", "Change the size of your HUD and UI.", "waffle.ultrakill.ultratweaker.hud", 0, null, true, false)] public class UIScale : Tweak { public static class UIScalePatches { [HarmonyPatch(typeof(CanvasController), "Awake")] [HarmonyPostfix] private static void PatchCanvasScale(CanvasController __instance) { UpdateCanvas(); } [HarmonyPatch(typeof(HudController), "Start")] [HarmonyPostfix] private static void PatchHUDScale(HudController __instance) { //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) if (((Object)((Component)__instance).gameObject).name == "HUD") { _info = ((Component)__instance).gameObject.ChildByName("GunCanvas"); _style = ((Component)__instance).gameObject.ChildByName("StyleCanvas"); _results = ((Component)__instance).gameObject.ChildByName("FinishCanvas"); if (DoesntKnowOriginal) { OriginalInfoScale = _info.transform.localScale; OriginalStyleScale = _style.transform.localScale; OriginalResultsScale = _results.transform.localScale; DoesntKnowOriginal = false; } UpdateHUD(); } } [HarmonyPatch(typeof(BossBarManager), "RecalculateStretch")] [HarmonyPostfix] private static void SetBossBarSize(BossBarManager __instance) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) ((Component)__instance).transform.localScale = Vector3.one * ((float)Tweak.GetInstance<UIScale>().Subsettings["bossbar_hud_scale"].GetValue<int>() / 100f); } } private Harmony _harmony = new Harmony("waffle.ultrakill.ultratweaker.ui_scale"); public static bool DoesntKnowOriginal = true; public static Vector3 OriginalInfoScale; public static Vector3 OriginalStyleScale; public static Vector3 OriginalResultsScale; private static GameObject _info; private static GameObject _style; private static GameObject _results; public UIScale() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown Subsettings = new Dictionary<string, Subsetting> { { "info_hud_scale", new IntSubsetting(this, new Metadata("Info HUD Scale", "info_hud_scale", "The size of the info, e.g. health and stamina."), new SliderIntSubsettingElement("{0}%"), 100, 110, 0) }, { "style_hud_scale", new IntSubsetting(this, new Metadata("Style HUD Scale", "style_hud_scale", "The size of the style panel."), new SliderIntSubsettingElement("{0}%"), 100, 110, 0) }, { "finalrank_hud_scale", new IntSubsetting(this, new Metadata("End HUD Scale", "finalrank_hud_scale", "The size of the panel that shows your final rank."), new SliderIntSubsettingElement("{0}%"), 100, 110, 0) }, { "bossbar_hud_scale", new IntSubsetting(this, new Metadata("Boss Bar Scale", "bossbar_hud_scale", "The size of the boss bar."), new SliderIntSubsettingElement("{0}%"), 100, 100, 0) }, { "canvas_scale", new IntSubsetting(this, new Metadata("Canvas Scale", "canvas_scale", "The size of the info, e.g. health and stamina."), new SliderIntSubsettingElement("{0}%"), 100, 100, 25) } }; } public override void OnTweakEnabled() { base.OnTweakEnabled(); DoesntKnowOriginal = true; _harmony.PatchAll(typeof(UIScalePatches)); UpdateHUD(); UpdateCanvas(); } public override void OnTweakDisabled() { base.OnTweakDisabled(); UpdateHUD(toDefault: true); UpdateCanvas(toDefault: true); _harmony.UnpatchSelf(); } public override void OnSubsettingUpdate() { UpdateHUD(); UpdateCanvas(); } public static void UpdateHUD(bool toDefault = false) { //IL_0213: Unknown result type (might be due to invalid IL or missing references) //IL_0228: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_01fa: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) if (((Object)(object)_info == (Object)null || (Object)(object)_style == (Object)null || (Object)(object)_results == (Object)null) && Object.FindObjectsOfType<HudController>() != null) { HudController[] array = Object.FindObjectsOfType<HudController>(); foreach (HudController val in array) { if (((Object)((Component)val).gameObject).name == "HUD") { _info = ((Component)val).gameObject.ChildByName("GunCanvas"); _style = ((Component)val).gameObject.ChildByName("StyleCanvas"); _results = ((Component)val).gameObject.ChildByName("FinishCanvas"); if (DoesntKnowOriginal) { OriginalInfoScale = _info.transform.localScale; OriginalStyleScale = _style.transform.localScale; OriginalResultsScale = _results.transform.localScale; DoesntKnowOriginal = false; } } } } if (!((Object)(object)_info == (Object)null) && !((Object)(object)_style == (Object)null) && !((Object)(object)_results == (Object)null)) { float num = Tweak.GetInstance<UIScale>().Subsettings["info_hud_scale"].GetValue<int>(); float num2 = Tweak.GetInstance<UIScale>().Subsettings["style_hud_scale"].GetValue<int>(); float num3 = Tweak.GetInstance<UIScale>().Subsettings["finalrank_hud_scale"].GetValue<int>(); if (!toDefault) { _info.transform.localScale = OriginalInfoScale * (num / 100f); _style.transform.localScale = OriginalStyleScale * (num2 / 100f); _results.transform.localScale = OriginalResultsScale * (num3 / 100f); } else { _info.transform.localScale = OriginalInfoScale; _style.transform.localScale = OriginalStyleScale; _results.transform.localScale = OriginalResultsScale; } } } public static void UpdateCanvas(bool toDefault = false) { float num = Tweak.GetInstance<UIScale>().Subsettings["canvas_scale"].GetValue<int>(); if (num != 100f) { GameObject gameObject = ((Component)MonoSingleton<CanvasController>.Instance).gameObject; gameObject.GetComponent<CanvasScaler>().uiScaleMode = (ScaleMode)0; gameObject.GetComponent<CanvasScaler>().scaleFactor = (float)(1920 / Screen.width) * 1.5f; if (!toDefault) { CanvasScaler component = gameObject.GetComponent<CanvasScaler>(); component.scaleFactor *= num / 100f; } } } public override void OnSceneLoad(Scene scene, LoadSceneMode mode) { DoesntKnowOriginal = true; } } [TweakMetadata("Ultrahot", "waffle.ultrakill.ultratweaker.mutator_ultrahot", "Time moves when you move.", "waffle.ultrakill.ultratweaker.mutators", 12, "Ultrahot", false, true)] public class Ultrahot : Tweak { public override void OnTweakEnabled() { base.OnTweakEnabled(); } public override void OnTweakDisabled() { base.OnTweakDisabled(); } public void Update() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) if (Tweak.IsGameplayScene()) { float num = 20f; float num2 = 0.01f; float num3 = 1.25f; float num4 = 15f; Vector3 velocity = MonoSingleton<NewMovement>.Instance.rb.velocity; float num5 = ((Vector3)(ref velocity)).magnitude / num; num5 = Mathf.Clamp(num5, num2, num3); Time.timeScale = Mathf.Lerp(Time.timeScale, num5, Time.deltaTime * num4); } } } [TweakMetadata("Unobtrusive Blood", "waffle.ultrakill.ultratweaker.unobtrusive_blood", "Make the screen blood more transparent, or gone.", "waffle.ultrakill.ultratweaker.hud", 3, null, true, false)] public class UnobtrusiveBlood : Tweak { public static class UnobtrusiveBloodPatches { [HarmonyPatch(typeof(ScreenBlood), "Start")] [HarmonyPostfix] private static void ChangeOpacity(ScreenBlood __instance) { __instance.clr.a = (float)Tweak.GetInstance<UnobtrusiveBlood>().Subsettings["transparency"].GetValue<int>() / 100f; } } private Harmony _harmony = new Harmony("waffle.ultrakill.ultratweaker.unobtrusive_blood"); public UnobtrusiveBlood() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown Subsettings = new Dictionary<string, Subsetting> { { "transparency", new IntSubsetting(this, new Metadata("Blood Opacity", "transparency", "How transparent the blood is."), new SliderIntSubsettingElement("{0}%"), 44, 100, 0) } }; } public override void OnTweakEnabled() { base.OnTweakEnabled(); _harmony.PatchAll(typeof(UnobtrusiveBloodPatches)); OnSubsettingUpdate(); } public override void OnTweakDisabled() { base.OnTweakDisabled(); _harmony.UnpatchSelf(); } } [TweakMetadata("Viewmodel Transform", "waffle.ultrakill.ultratweaker.viewmodel_transform", "Resize, change the FOV of, and otherwise tweak the viewmodel.", "waffle.ultrakill.ultratweaker.misc", 1, null, true, false)] public class ViewmodelTransform : Tweak { public static class ViewmodelPatches { [HarmonyPatch(typeof(FistControl), "Update")] [HarmonyPostfix] private static void FistSize(FistControl __instance) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) if (((Component)__instance).transform.localScale == Vector3.one) { float num = Tweak.GetInstance<ViewmodelTransform>().Subsettings["viewmodel_size_multiplier"].GetValue<int>(); } } [HarmonyPatch(typeof(WeaponPos), "CheckPosition")] [HarmonyPostfix] private static void PatchWeaponScale_Check(WeaponPos __instance) { //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) if (((Component)__instance).GetComponent<WeaponIdentifier>().duplicate) { return; } if (((Object)((Component)__instance).gameObject).name.Contains("Revolver")) { if (!_originalScale.ContainsKey(((Component)__instance).gameObject)) { _originalScale.Add(((Component)__instance).gameObject, ((Component)__instance).gameObject.transform.localScale); } ((Component)__instance).gameObject.transform.localScale = _originalScale[((Component)__instance).gameObject] * (float)Tweak.GetInstance<ViewmodelTransform>().Subsettings["viewmodel_size_multiplier"].GetValue<int>() / 100f; return; } foreach (GameObject item in ((Component)__instance).gameObject.ChildrenList()) { if (!_originalScale.ContainsKey(item)) { _originalScale.Add(item, item.transform.localScale); } item.transform.localScale = _originalScale[item] * (float)Tweak.GetInstance<ViewmodelTransform>().Subsettings["viewmodel_size_multiplier"].GetValue<int>() / 100f; } } [HarmonyPatch(typeof(GunControl), "Start")] [HarmonyPostfix] private static void BobAndTilt() { UpdateBobAndTilt(); } } private Harmony _harmony = new Harmony("waffle.ultrakill.ultratweaker.viewmodel_transform"); private static Dictionary<GameObject, Vector3> _originalScale = new Dictionary<GameObject, Vector3>(); public ViewmodelTransform() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown Subsettings = new Dictionary<string, Subsetting> { { "viewmodel_fov", new IntSubsetting(this, new Metadata("FOV", "viewmodel_fov", "What is the FOV of the viewmodel?"), new SliderIntSubsettingElement(), 90, 150, 50) }, { "viewmodel_size_multiplier", new IntSubsetting(this, new Metadata("Size", "viewmodel_size_multiplier", "How big is the viewmodel?"), new SliderIntSubsettingElement("{0}%"), 100, 125, 0) }, { "viewmodel_bob", new BoolSubsetting(this, new Metadata("Bobbing", "viewmodel_bob", "Does the viewmodel bob when you walk?"), new BoolSubsettingElement(), defaultValue: true) }, { "viewmodel_tilt", new BoolSubsetting(this, new Metadata("Aim-assist Tilt", "viewmodel_tilt", "Does the viewmodel tilt with aim-assist?"), new BoolSubsettingElement(), defaultValue: true) } }; } public override void OnTweakEnabled() { base.OnTweakEnabled(); _harmony.PatchAll(typeof(ViewmodelPatches)); if ((Object)(object)MonoSingleton<GunControl>.Instance != (Object)null && (Object)(object)MonoSingleton<FistControl>.Instance != (Object)null) { UpdateBobAndTilt(); } } public override void OnTweakDisabled() { //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) base.OnTweakDisabled(); _harmony.UnpatchSelf(); if ((Object)(object)MonoSingleton<GunControl>.Instance != (Object)null && (Object)(object)MonoSingleton<FistControl>.Instance != (Object)null) { ((Component)MonoSingleton<NewMovement>.Instance).gameObject.ChildByName("Main Camera").ChildByName("HUD Camera").GetComponent<Camera>() .fieldOfView = 90f; ((Component)MonoSingleton<FistControl>.Instance).transform.localScale = Vector3.one; ((Behaviour)((Component)MonoSingleton<GunControl>.Instance).GetComponent<WalkingBob>()).enabled = true; ((Behaviour)((Component)MonoSingleton<GunControl>.Instance).GetComponent<RotateToFaceFrustumTarget>()).enabled = true; } foreach (GameObject key in _originalScale.Keys) { key.transform.localScale = _originalScale[key]; } _originalScale.Clear(); } public override void OnSceneLoad(Scene scene, LoadSceneMode mode) { _originalScale.Clear(); } public void LateUpdate() { if ((Object)(object)MonoSingleton<NewMovement>.Instance != (Object)null) { ((Component)MonoSingleton<NewMovement>.Instance).gameObject.ChildByName("Main Camera").ChildByName("HUD Camera").GetComponent<Camera>() .fieldOfView = Subsettings["viewmodel_fov"].GetValue<int>(); } } public override void OnSubsettingUpdate() { //IL_007c: Unknown result type (might be due to invalid IL or missing references) UpdateBobAndTilt(); if ((Object)(object)MonoSingleton<GunControl>.Instance != (Object)null && (Object)(object)MonoSingleton<FistControl>.Instance != (Object)null) { if ((Object)(object)MonoSingleton<GunControl>.Instance.currentWeapon != (Object)null && (Object)(object)MonoSingleton<GunControl>.Instance.currentWeapon.GetComponent<WeaponPos>() != (Object)null) { MonoSingleton<GunControl>.Instance.currentWeapon.GetComponent<WeaponPos>().CheckPosition(); } UpdateBobAndTilt(); ((Component)MonoSingleton<FistControl>.Instance).transform.localScale = Vector3.one; } } public static void UpdateBobAndTilt() { if ((Object)(object)MonoSingleton<GunControl>.Instance != (Object)null) { ((Behaviour)((Component)MonoSingleton<GunControl>.Instance).GetComponent<WalkingBob>()).enabled = Tweak.GetInstance<ViewmodelTransform>().Subsettings["viewmodel_bob"].GetValue<bool>(); ((Behaviour)((Component)MonoSingleton<GunControl>.Instance).GetComponent<RotateToFaceFrustumTarget>()).enabled = Tweak.GetInstance<ViewmodelTransform>().Subsettings["viewmodel_tilt"].GetValue<bool>(); } } } } namespace UltraTweaker.Subsettings { public abstract class Subsetting { public Tweak Parent; public Metadata Metadata; public SubsettingUIElement Element; public Subsetting(Tweak parent, Metadata metadata, SubsettingUIElement element) { Parent = parent; Metadata = metadata; Element = element; Element.Subsetting = this; } public T GetValue<T>() { return ((TypedSubsetting<T>)this).Value; } public virtual string Serialize() { return ""; } public abstract void Deserialize(string str); public abstract void ResetValue(); } public class TypedSubsetting<T> : Subsetting { public T Value; public T DefaultValue; public override void Deserialize(string str) { } public TypedSubsetting(Tweak parent, Metadata metadata, SubsettingUIElement element) : base(parent, metadata, element) { } public override void ResetValue() { Value = DefaultValue; } } } namespace UltraTweaker.Subsettings.Impl { public class BoolSubsetting : TypedSubsetting<bool> { public BoolSubsetting(Tweak parent, Metadata metadata, SubsettingUIElement element, bool defaultValue) : base(parent, metadata, element) { DefaultValue = defaultValue; Value = defaultValue; } public override void Deserialize(string str) { Value = Convert.ToBoolean(str); } public override string Serialize() { return Value.ToString(); } } public class CommentSubsetting : TypedSubsetting<string> { public Action Action; public string ButtonText; public CommentSubsetting(Tweak parent, Metadata metadata, SubsettingUIElement element, Action action = null, string buttonText = "") : base(parent, metadata, element) { Action = action; ButtonText = buttonText; } public override string Serialize() { return ""; } } public class FloatSubsetting : TypedSubsetting<float> { public float MaxValue; public float MinValue; public FloatSubsetting(Tweak parent, Metadata metadata, SubsettingUIElement element, float defaultValue, float maxValue, float minValue) : base(parent, metadata, element) { DefaultValue = defaultValue; MaxValue = maxValue; MinValue = minValue; Value = defaultValue; } public override void Deserialize(string str) { Value = float.Parse(str, CultureInfo.GetCultureInfo("en-GB")); } public override string Serialize() { return Value.ToString(); } } public class IntSubsetting : TypedSubsetting<int> { public int MaxValue; public int MinValue; public IntSubsetting(Tweak parent, Metadata metadata, SubsettingUIElement element, int defaultValue, int maxValue, int minValue) : base(parent, metadata, element) { DefaultValue = defaultValue; MaxValue = maxValue; MinValue = minValue; Value = defaultValue; } public override void Deserialize(string str) { Value = int.Parse(str, CultureInfo.GetCultureInfo("en-GB")); } public override string Serialize() { return Value.ToString(); } } public class StringSubsetting : TypedSubsetting<string> { public StringSubsetting(Tweak parent, Metadata metadata, SubsettingUIElement element, string defaultValue) : base(parent, metadata, element) { DefaultValue = defaultValue; Value = defaultValue; } public override void Deserialize(string str) { Value = str; } public override string Serialize() { return Value; } } } namespace UltraTweaker.SettingUI { public class Page { public readonly string PageName; public readonly string OriginMod; public GameObject PageObject; public Page(string pageName, string originMod) { PageName = pageName; OriginMod = originMod; } } public static class SettingUIHandler { [DefaultExecutionOrder(-10000000)] private class SettingUIDoer : MonoBehaviour { private void Start() { CreateUI(((Component)this).gameObject); } } public class SettingUIPatches { [HarmonyPatch(typeof(OptionsMenuToManager), "Start")] [HarmonyPostfix] public static void AddMenu(OptionsMenuToManager __instance) { CreateUI(((Component)__instance).gameObject.ChildByName("OptionsMenu")); } [HarmonyPatch(typeof(ButtonHighlightParent), "Start")] [HarmonyPrefix] private static bool ReplaceStart(ButtonHighlightParent __instance) { __instance.buttons = CollectionExtensions.AddRangeToArray<Image>(__instance.buttons, ((Component)__instance).GetComponentsInChildren<Image>()); __instance.buttonTexts = __instance.buttons.Select((Image button) => ((Component)button).GetComponentInChildren<TMP_Text>()).ToArray(); return false; } } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static UnityAction <>9__7_1; public static UnityAction <>9__7_2; internal void <CreateUI>b__7_1() { ResetAllSettings(); } internal void <CreateUI>b__7_2() { foreach (Page value in Pages.Values) { value.PageObject.SetActive(false); } } } public static Harmony Harmony = new Harmony("waffle.ultrakill.ultratweaker.setting_ui_handler"); public static GameObject OriginalSettingPage; public static GameObject OriginalResetButton; public static GameObject CurrentResetButton; public static Dictionary<string, Page> Pages = new Dictionary<string, Page> { { "waffle.ultrakill.ultratweaker.misc", new Page("GENERAL", "ULTRATWEAKER") }, { "waffle.ultrakill.ultratweaker.hud", new Page("HUD", "ULTRATWEAKER") }, { "waffle.ultrakill.ultratweaker.fun", new Page("FUN", "ULTRATWEAKER") }, { "waffle.ultrakill.ultratweaker.mutators", new Page("MUTATORS", "ULTRATWEAKER") } }; public static Dictionary<string, int> PageModNameToChildIndex = new Dictionary<string, int>(); public static void Patch() { Harmony.PatchAll(typeof(SettingUIPatches)); } private static void CreateUI(GameObject optionsMenu) { //IL_02ed: Unknown result type (might be due to invalid IL or missing references) //IL_02f7: Expected O, but got Unknown //IL_0273: Unknown result type (might be due to invalid IL or missing references) //IL_028a: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) //IL_039d: Unknown result type (might be due to invalid IL or missing references) //IL_03a2: Unknown result type (might be due to invalid IL or missing references) //IL_03a8: Expected O, but got Unknown //IL_0511: Unknown result type (might be due to invalid IL or missing references) //IL_0516: Unknown result type (might be due to invalid IL or missing references) //IL_051c: Expected O, but got Unknown if ((Object)(object)OriginalSettingPage == (Object)null) { OriginalSettingPage = AssetHandler.Bundle.LoadAsset<GameObject>("Settings Page.prefab"); } if ((Object)(object)OriginalResetButton == (Object)null) { OriginalResetButton = AssetHandler.Bundle.LoadAsset<GameObject>("Reset Button.prefab"); } CreateSecondSettingColumn(optionsMenu, out var rightSettingMenu, out var titleText); rightSettingMenu.transform.SetAsFirstSibling(); GameObject gameObject = ((Component)optionsMenu.transform.Find("Panel/Text (7)")).gameObject; GameObject gameObject2 = ((Component)optionsMenu.transform.Find("Panel/Controls")).gameObject; ((UnityEventBase)gameObject2.GetComponent<Button>().onClick).RemoveAllListeners(); Object.Destroy((Object)(object)rightSettingMenu.GetComponent<ButtonHighlightParent>()); foreach (GameObject item in rightSettingMenu.ChildrenList()) { Object.Destroy((Object)(object)item); } titleText.text = "--MOD OPTIONS--"; titleText.fontSize = 26f; int num = 0; ButtonHighlightParent component = ((Component)optionsMenu.transform.Find("Panel")).GetComponent<ButtonHighlightParent>(); ButtonHighlightParent val = component; if (val.buttons == null) { val.buttons = (Image[])(object)new Image[0]; } List<string> list = new List<string>(); foreach (Page page in Pages.Values) { page.PageObject = Object.Instantiate<GameObject>(OriginalSettingPage, optionsMenu.transform); ((Object)page.PageObject).name = page.PageName; page.PageObject.AddComponent<HudOpenEffect>(); if (!list.Contains(page.OriginMod)) { list.Add(page.OriginMod); GameObject val2 = Object.Instantiate<GameObject>(gameObject, rightSettingMenu.transform); TMP_Text component2 = val2.GetComponent<TMP_Text>(); component2.text = "-- " + page.OriginMod + " --"; ((Graphic)component2).raycastTarget = false; component2.rectTransform.sizeDelta = new Vector2(component2.rectTransform.sizeDelta.x * 2f, component2.rectTransform.sizeDelta.y); } GameObject val3 = Object.Instantiate<GameObject>(gameObject2, rightSettingMenu.transform); ((Object)val3).name = page.OriginMod + ": " + page.PageName; ((UnityEvent)val3.GetComponent<Button>().onClick).AddListener((UnityAction)delegate { foreach (GameObject item2 in AllPages(optionsMenu)) { item2.SetActive(false); } page.PageObject.SetActive(true); }); ((TMP_Text)val3.ChildByName("Text").GetComponent<TextMeshProUGUI>()).text = page.PageName; component.buttons = CollectionExtensions.AddToArray<Image>(component.buttons, val3.GetComponent<Image>()); page.PageObject.SetActive(false); if (num == 0) { CurrentResetButton = Object.Instantiate<GameObject>(OriginalResetButton, ((Component)page.PageObject.GetComponentInChildren<LayoutGroup>(true)).transform); ButtonClickedEvent onClick = CurrentResetButton.GetComponent<Button>().onClick; object obj = <>c.<>9__7_1; if (obj == null) { UnityAction val4 = delegate { ResetAllSettings(); }; <>c.<>9__7_1 = val4; obj = (object)val4; } ((UnityEvent)onClick).AddListener((UnityAction)obj); } num++; } foreach (Tweak value in UltraTweaker.AllTweaks.Values) { TweakMetadata tweakMetadata = Attribute.GetCustomAttribute(((object)value).GetType(), typeof(TweakMetadata)) as TweakMetadata; value.Element.Create(((Component)Pages[tweakMetadata.PageId].PageObject.GetComponentInChildren<VerticalLayoutGroup>()).transform).transform.SetSiblingIndex(tweakMetadata.InsertAt); foreach (Subsetting value2 in value.Subsettings.Values) { value2.Element.Create(((Component)value.Element.CurrentSetting.GetComponentInChildren<LayoutGroup>(true)).transform); } } Button[] componentsInChildren = ((Component)optionsMenu.transform.Find("Panel")).GetComponentsInChildren<Button>(); foreach (Button val5 in componentsInChildren) { ButtonClickedEvent onClick2 = val5.onClick; object obj2 = <>c.<>9__7_2; if (obj2 == null) { UnityAction val6 = delegate { foreach (Page value3 in Pages.Values) { value3.PageObject.SetActive(false); } }; <>c.<>9__7_2 = val6; obj2 = (object)val6; } ((UnityEvent)onClick2).AddListener((UnityAction)obj2); } CurrentResetButton.transform.SetAsFirstSibling(); } private static void CreateSecondSettingColumn(GameObject optionMenu, out GameObject rightSettingMenu, out TMP_Text titleText) { //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) GameObject gameObject = ((Component)optionMenu.GetComponentInChildren<ButtonHighlightParent>(true)).gameObject; rightSettingMenu = CopyToOtherSide(gameObject); titleText = CopyToOtherSide(optionMenu.ChildByName("Text")).GetComponent<TMP_Text>(); foreach (GameObject item in AllPages(optionMenu)) { if (!((Object)(object)item.GetComponent<TextMeshProUGUI>() != (Object)null) && !((Object)(object)item.GetComponent<ButtonHighlightParent>() != (Object)null) && !((Object)(object)item.GetComponent<TooltipManager>() != (Object)null)) { Debug.Log((object)$"Offsetting {((Object)item).name} by {-(int)((float)Screen.width * 0.017578125f)}"); Transform transform = item.transform; transform.position -= new Vector3((float)(int)((float)Screen.width * 0.017578125f), 0f); } } } private static IEnumerable<GameObject> AllPages(GameObject optionMenu) { foreach (GameObject optionPage in optionMenu.ChildrenList()) { if (!((Object)(object)optionPage.GetComponent<TextMeshProUGUI>() != (Object)null) && !((Object)optionPage).name.Contains("Panel") && !((Object)(object)optionPage.GetComponent<TooltipManager>() != (Object)null)) { yield return optionPage; } } } private static GameObject CopyToOtherSide(GameObject original) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) Transform transform = original.transform; RectTransform val = (RectTransform)(object)((transform is RectTransform) ? transform : null); GameObject val2 = Object.Instantiate<GameObject>(original, original.transform.parent); Transform transform2 = val2.transform; RectTransform val3 = (RectTransform)(object)((transform2 is RectTransform) ? transform2 : null); val3.pivot = new Vector2(1f - val.pivot.x, val.pivot.y); ((Component)val3).transform.position = new Vector3((float)Screen.width - ((Transform)val).position.x, ((Transform)val).position.y, ((Transform)val).position.z); return val2; } public static void ResetAllSettings() { foreach (Tweak value in UltraTweaker.AllTweaks.Values) { value.IsEnabled = false; value.Element.ResetValue(); foreach (Subsetting value2 in value.Subsettings.Values) { value2.ResetValue(); value2.Element.ResetValue(); } } } } } namespace UltraTweaker.SettingUI.UIElements { public class ShowBoxOnHover : MonoBehaviour, IPointerEnterHandler, IEventSystemHandler, IPointerExitHandler { public GameObject Box; public void Start() { if ((Object)(object)Box == (Object)null) { Box = ((Component)((Component)this).transform.parent).gameObject.ChildByName("Box"); } } public void OnPointerEnter(PointerEventData eventData) { Box.SetActive(true); } public void OnPointerExit(PointerEventData eventData) { Box.SetActive(false); } } public abstract class SubsettingUIElement { public Subsetting Subsetting; public abstract GameObject Create(Transform t); public abstract void SetControlsActive(bool active); public abstract void ResetValue(); } public class TweakUIElement { public static GameObject BaseSetting; public GameObject CurrentSetting; public Tweak Tweak; public Toggle Toggle; public virtual string Name => "Tweak Setting.prefab"; public TweakUIElement(Tweak tweak) { Tweak = tweak; } public GameObject Create(Transform t) { //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)BaseSetting == (Object)null) { BaseSetting = AssetHandler.Bundle.LoadAsset<GameObject>(Name); } Metadata metadata = Attribute.GetCustomAttribute(((object)Tweak).GetType(), typeof(Metadata)) as Metadata; CurrentSetting = Object.Instantiate<GameObject>(BaseSetting, t); Toggle = CurrentSetting.ChildByName("Toggle").GetComponent<Toggle>(); ((UnityEvent<bool>)(object)Toggle.onValueChanged).AddListener((UnityAction<bool>)delegate(bool state) { Tweak.IsEnabled = state; }); ResetValue(); float num = Tweak.Subsettings.Count * 30; num += (float)(Tweak.Subsettings.Count - 1) * ((HorizontalOrVerticalLayoutGroup)CurrentSetting.ChildByName("Subsetting Holder").GetComponent<VerticalLayoutGroup>()).spacing; RectTransform component = CurrentSetting.GetComponent<RectTransform>(); Rect rect = CurrentSetting.ChildByName("Background").GetComponent<RectTransform>().rect; component.SetSizeWithCurrentAnchors((Axis)1, ((Rect)(ref rect)).height + num); CurrentSetting.ChildByName("Text").GetComponent<TMP_Text>().text = metadata.Name.ToUpper(); CurrentSetting.ChildByName("Box").ChildByName("Description").GetComponent<Text>() .text = metadata.Description; CurrentSetting.ChildByName("Text").AddComponent<ShowBoxOnHover>(); if ((Object)(object)((TweakMetadata)metadata).Icon != (Object)null) { CurrentSetting.ChildByName("Icon").GetComponent<Image>().sprite = ((TweakMetadata)metadata).Icon; } else { CurrentSetting.ChildByName("Icon").SetActive(false); } if (!((TweakMetadata)metadata).AllowCG) { CurrentSetting.ChildByName("Disabled CG").SetActive(true); CurrentSetting.ChildByName("Disabled CG").AddComponent<ShowBoxOnHover>().Box = CurrentSetting.ChildByName("Disabled CG").ChildByName("Box"); } return CurrentSetting; } public void SetControlsActive(bool active) { ((Selectable)Toggle).interactable = active; } public void ResetValue() { Toggle.isOn = Tweak.IsEnabled; } } } namespace UltraTweaker.SettingUI.UIElements.Impl { public class BoolSubsettingElement : SubsettingUIElement { public static GameObject BaseSetting; public GameObject CurrentSetting; public Toggle Toggle; public override GameObject Create(Transform t) { if ((Object)(object)BaseSetting == (Object)null) { BaseSetting = AssetHandler.Bundle.LoadAsset<GameObject>("Toggle Subsetting.prefab"); } CurrentSetting = Object.Instantiate<GameObject>(BaseSetting, t); CurrentSetting.ChildByName("Text").GetComponent<Text>().text = Subsetting.Metadata.Name.ToUpper(); Toggle = CurrentSetting.ChildByName("Toggle").GetComponent<Toggle>(); CurrentSetting.ChildByName("Box").ChildByName("Description").GetComponent<Text>() .text = Subsetting.Metadata.Description; CurrentSetting.ChildByName("Text").AddComponent<ShowBoxOnHover>(); ResetValue(); ((UnityEvent<bool>)(object)Toggle.onValueChanged).AddListener((UnityAction<bool>)delegate(bool state) { ((BoolSubsetting)Subsetting).Value = state; if (Subsetting.Parent.IsEnabled) { Subsetting.Parent.OnSubsettingUpdate(); } }); return CurrentSetting; } public override void SetControlsActive(bool active) { ((Selectable)Toggle).interactable = active; } public override void ResetValue() { Toggle.isOn = ((BoolSubsetting)Subsetting).Value; } } public class CommentSubsettingElement : SubsettingUIElement { public static GameObject BaseSetting; public GameObject CurrentSetting; public override GameObject Create(Transform t) { //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Expected O, but got Unknown if ((Object)(object)BaseSetting == (Object)null) { BaseSetting = AssetHandler.Bundle.LoadAsset<GameObject>("Comment Subsetting.prefab"); } CurrentSetting = Object.Instantiate<GameObject>(BaseSetting, t); CurrentSetting.ChildByName("Text").GetComponent<Text>().text = Subsetting.Metadata.Name.ToUpper(); CurrentSetting.ChildByName("Comment").GetComponent<Text>().text = Subsetting.Metadata.Description; GameObject val = CurrentSetting.ChildByName("Button"); val.SetActive(false); CommentSubsetting cs = Subsetting as CommentSubsetting; if (cs != null && cs.Action != null) { val.SetActive(true); ((UnityEvent)val.GetComponent<Button>().onClick).AddListener((UnityAction)delegate { cs.Action(); }); val.ChildByName("Text").GetComponent<Text>().text = cs.ButtonText; } return CurrentSetting; } public override void SetControlsActive(bool active) { } public override void ResetValue() { } } public class DropdownIntSubsettingElement : SubsettingUIElement { public static GameObject BaseSetting; public GameObject CurrentSetting; public List<string> Options; public Dropdown Dropdown; public DropdownIntSubsettingElement(List<string> options) { Options = options; } public override GameObject Create(Transform t) { if ((Object)(object)BaseSetting == (Object)null) { BaseSetting = AssetHandler.Bundle.LoadAsset<GameObject>("Dropdown Subsetting.prefab"); } CurrentSetting = Object.Instantiate<GameObject>(BaseSetting, t); CurrentSetting.ChildByName("Text").GetComponent<Text>().text = Subsetting.Metadata.Name.ToUpper(); CurrentSetting.ChildByName("Box").ChildByName("Description").GetComponent<Text>() .text = Subsetting.Metadata.Description; CurrentSetting.ChildByName("Text").AddComponent<ShowBoxOnHover>(); Dropdown = CurrentSetting.ChildByName("Dropdown").GetComponent<Dropdown>(); Dropdown.ClearOptions(); Dropdown.AddOptions(Options); ResetValue(); ((UnityEvent<int>)(object)Dropdown.onValueChanged).AddListener((UnityAction<int>)delegate(int num) { ((IntSubsetting)Subsetting).Value = num; if (Subsetting.Parent.IsEnabled) { Subsetting.Parent.OnSubsettingUpdate(); } }); return CurrentSetting; } public override void SetControlsActive(bool active) { ((Selectable)Dropdown).interactable = active; } public override void ResetValue() { Dropdown.value = ((IntSubsetting)Subsetting).Value; } } public class DropdownStringSubsettingElement : SubsettingUIElement { public static GameObject BaseSetting; public GameObject CurrentSetting; public List<string> Options; public Dropdown Dropdown; public DropdownStringSubsettingElement(List<string> options) { Options = options; } public override GameObject Create(Transform t) { if ((Object)(object)BaseSetting == (Object)null) { BaseSetting = AssetHandler.Bundle.LoadAsset<GameObject>("Dropdown Subsetting.prefab"); } CurrentSetting = Object.Instantiate<GameObject>(BaseSetting, t); CurrentSetting.ChildByName("Text").GetComponent<Text>().text = Subsetting.Metadata.Name.ToUpper(); CurrentSetting.ChildByName("Box").ChildByName("Description").GetComponent<Text>() .text = Subsetting.Metadata.Description; CurrentSetting.ChildByName("Text").AddComponent<ShowBoxOnHover>(); Dropdown = CurrentSetting.ChildByName("Dropdown").GetComponent<Dropdown>(); Dropdown.ClearOptions(); Dropdown.AddOptions(Options); Dropdown.value = 0; ResetValue(); ((UnityEvent<int>)(object)Dropdown.onValueChanged).AddListener((UnityAction<int>)delegate(int num) { ((StringSubsetting)Subsetting).Value = Options[num]; if (Subsetting.Parent.IsEnabled) { Subsetting.Parent.OnSubsettingUpdate(); } }); return CurrentSetting; } public override void SetControlsActive(bool active) { ((Selectable)Dropdown).interactable = active; } public override void ResetValue() { if (Options.Contains(((StringSubsetting)Subsetting).Value)) { Dropdown.value = Options.IndexOf(((StringSubsetting)Subsetting).Value); } } } public class SliderFloatSubsettingElement : SubsettingUIElement { public static GameObject BaseSetting; public GameObject CurrentSetting; public string DisplayAs = "{0}"; public InputField InputField; public Slider Slider; public int RoundDigits; public SliderFloatSubsettingElement(string displayAs = "{0}", int roundDigits = 1) { DisplayAs = displayAs; RoundDigits = roundDigits; } public override GameObject Create(Transform t) { if ((Object)(object)BaseSetting == (Object)null) { BaseSetting = AssetHandler.Bundle.LoadAsset<GameObject>("Slider Subsetting.prefab"); } CurrentSetting = Object.Instantiate<GameObject>(BaseSetting, t); CurrentSetting.ChildByName("Text").GetComponent<Text>().text = Subsetting.Metadata.Name.ToUpper(); CurrentSetting.ChildByName("Box").ChildByName("Description").GetComponent<Text>() .text = Subsetting.Metadata.Description; CurrentSetting.ChildByName("Text").AddComponent<ShowBoxOnHover>(); InputField = CurrentSetting.ChildByName("InputField").GetComponent<InputField>(); Slider = CurrentSetting.ChildByName("Slider").GetComponent<Slider>(); Slider.maxValue = ((FloatSubsetting)Subsetting).MaxValue; Slider.minValue = ((FloatSubsetting)Subsetting).MinValue; Slider.wholeNumbers = false; ((UnityEvent<string>)(object)InputField.onEndEdit).AddListener((UnityAction<string>)delegate(string str) { str = RemoveNonNumeric(str); ((FloatSubsetting)Subsetting).Value = float.Parse(str); Slider.value = (float)Math.Round(float.Parse(str), RoundDigits); InputField.text = string.Format(DisplayAs, (float)Math.Round(float.Parse(str), RoundDigits)); }); ResetValue(); ((UnityEvent<float>)(object)Slider.onValueChanged).AddListener((UnityAction<float>)delegate(float num) { if (((FloatSubsetting)Subsetting).Value <= Slider.maxValue || ((Selectable)Slider).isPointerDown) { ((FloatSubsetting)Subsetting).Value = (float)Math.Round(num, RoundDigits); InputField.text = string.Format(DisplayAs, (float)Math.Round(num, RoundDigits)); if (Subsetting.Parent.IsEnabled) { Subsetting.Parent.OnSubsettingUpdate(); } } }); return CurrentSetting; static string RemoveNonNumeric(string s) { string text = ""; if (s.StartsWith("-")) { text += "-"; } return string.Concat(text, string.Concat(s?.Where((char c) => char.IsNumber(c) || c == '.') ?? "")); } } public override void SetControlsActive(bool active) { ((Selectable)Slider).interactable = active; ((Selectable)InputField).interactable = active; } public override void ResetValue() { Slider.value = ((FloatSubsetting)Subsetting).Value; InputField.text = string.Format(DisplayAs, ((FloatSubsetting)Subsetting).Value); } } public class SliderIntSubsettingElement : SubsettingUIElement { public static GameObject BaseSetting; public GameObject CurrentSetting; public string DisplayAs = "{0}"; public InputField InputField; public Slider Slider; public SliderIntSubsettingElement(string displayAs = "{0}") { DisplayAs = displayAs; } public override GameObject Create(Transform t) { if ((Object)(object)BaseSetting == (Object)null) { BaseSetting = AssetHandler.Bundle.LoadAsset<GameObject>("Slider Subsetting.prefab"); } CurrentSetting = Object.Instantiate<GameObject>(BaseSetting, t); CurrentSetting.ChildByName("Text").GetComponent<Text>().text = Subsetting.Metadata.Name.ToUpper(); CurrentSetting.ChildByName("Box").ChildByName("Description").GetComponent<Text>() .text = Subsetting.Metadata.Description; CurrentSetting.ChildByName("Text").AddComponent<ShowBoxOnHover>(); InputField = CurrentSetting.ChildByName("InputField").GetComponent<InputField>(); Slider = CurrentSetting.ChildByName("Slider").GetComponent<Slider>(); Slider.maxValue = ((IntSubsetting)Subsetting).MaxValue; Slider.minValue = ((IntSubsetting)Subsetting).MinValue; ((UnityEvent<string>)(object)InputField.onEndEdit).AddListener((UnityAction<string>)delegate(string str) { str = RemoveNonNumeric(str); ((IntSubsetting)Subsetting).Value = int.Parse(str); Slider.value = int.Parse(str); InputField.text = string.Format(DisplayAs, int.Parse(str)); if (Subsetting.Parent.IsEnabled) { Subsetting.Parent.OnSubsettingUpdate(); } }); ResetValue(); ((UnityEvent<float>)(object)Slider.onValueChanged).AddListener((UnityAction<float>)delegate(float num) { if ((float)((IntSubsetting)Subsetting).Value <= Slider.maxValue || ((Selectable)Slider).isPointerDown) { ((IntSubsetting)Subsetting).Value = (int)num; InputField.text = string.Format(DisplayAs, (int)num); if (Subsetting.Parent.IsEnabled) { Subsetting.Parent.OnSubsettingUpdate(); } } }); return CurrentSetting; static string RemoveNonNumeric(string s) { string text = ""; if (s.StartsWith("-")) { text += "-"; } return string.Concat(text, string.Concat(s?.Where((char c) => char.IsNumber(c)) ?? "")); } } public override void SetControlsActive(bool active) { ((Selectable)Slider).interactable = active; ((Selectable)InputField).interactable = active; } public override void ResetValue() { Slider.value = ((IntSubsetting)Subsetting).Value; InputField.text = string.Format(DisplayAs, ((IntSubsetting)Subsetting).Value); } } } namespace UltraTweaker.Handlers { public static class AssetHandler { public static readonly string AssetsPath = Path.Combine(PathUtils.ModPath(), "Assets"); public static readonly string BundlePath = Path.Combine(AssetsPath, "ultratweaker_assets.bundle"); private static Dictionary<string, Object> _cachedAssets = new Dictionary<string, Object>(); public static AssetBundle Bundle { get; private set; } internal static void LoadBundle() { Bundle = AssetBundle.LoadFromFile(BundlePath); } public static T GetCachedAsset<T>(string Name) where T : Object { if (!_cachedAssets.ContainsKey(Name)) { CacheAsset<T>(Name, Bundle); } Object obj = _cachedAssets[Name]; return (T)(object)((obj is T) ? obj : null); } public static void CacheAsset<T>(string Name, AssetBundle bundle = null) where T : Object { if ((Object)(object)bundle == (Object)null) { bundle = Bundle; } _cachedAssets.Add(Name, (Object)(object)bundle.LoadAsset<T>(Name)); } } internal static class MutatorHandler { public class MutatorPatches { [HarmonyPatch(typeof(LeaderboardController), "SubmitCyberGrindScore")] [HarmonyPatch(typeof(LeaderboardController), "SubmitLevelScore")] [HarmonyPrefix] public static bool DisableCG() { foreach (Tweak value in UltraTweaker.AllTweaks.Values)