Decompiled source of ULTRAROGUE v0.3.3
Ultrarogue.dll
Decompiled 4 days ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Threading; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Logging; using GameConsole; using GameConsole.CommandTree; using HarmonyLib; using Microsoft.CodeAnalysis; using Newtonsoft.Json; using SettingsMenu.Components.Pages; using Steamworks; using TMPro; using ULTRAKILL.Cheats; using ULTRAKILL.Enemy; using ULTRAKILL.Portal; using ULTRAKILL.Portal.Geometry; using Ultrarogue; using Ultrarogue.Behaviours; using Ultrarogue.Characters; using Ultrarogue.Curses; using Ultrarogue.Items; using Ultrarogue.SceneStuff; using Unity.AI.Navigation; using UnityEngine; using UnityEngine.AI; using UnityEngine.AddressableAssets; using UnityEngine.AddressableAssets.ResourceLocators; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.InputSystem; using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine.ResourceManagement.ResourceLocations; using UnityEngine.ResourceManagement.ResourceProviders; using UnityEngine.SceneManagement; using UnityEngine.UI; using plog; using plog.Models; [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.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: AssemblyCompany("Ultrarogue")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("0.2.3.0")] [assembly: AssemblyInformationalVersion("0.2.3+b26be74b9e6f6e69425063d1b7e0cacae229b347")] [assembly: AssemblyProduct("ULTRAROGUE")] [assembly: AssemblyTitle("Ultrarogue")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.2.3.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [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; } } } public class AssetsManager { public static List<WeaponDescriptor> descriptors = new List<WeaponDescriptor>(); public static Material weaponMat; public static GameObject Agony; public static GameObject Tundra; public static GameObject MirrorReaper; public static GameObject VirtueBeam; public static GameObject BreakParticle; public static GameObject CoinGet; public static GameObject CoinFlash; public static GameObject BlueFlash; public static GameObject RevolverBeam; public static GameObject Rocket; public static Sprite KeySprite; public static Sprite CoinSprite; public static Dictionary<EnemyType, List<SpawnableObject>> enemiesByType = new Dictionary<EnemyType, List<SpawnableObject>>(); public static Dictionary<string, List<SpawnableObject>> enemiesByClass = new Dictionary<string, List<SpawnableObject>>(); private static int _loadsDone = 0; private const int TotalLoads = 2; public static GameObject napalmProj; public static GameObject mindflayerBeam; public static GameObject funnyPowerIntroSpawn; public static GameObject zapThingy; public static GameObject spawnEffect; public static GameObject healingEffect; public static GameObject nail; public static GameObject BSHead; public static AudioClip StalkerWarning; public static AudioClip FilthAttack; public static Sprite ArmFeedbacker; public static Sprite ArmKnuckleBlaster; public static Sprite ArmWhiplash; public static GameObject KeyPrefab; public static GameObject CoinPrefab; public static InputActionAsset RogueInputs; public static InputAction UseActiveKey; private static bool _initStarted = false; private static Dictionary<string, GameObject> CustomBosses = new Dictionary<string, GameObject>(); private static Material _alchemyMat; public const string RoguePath = "Assets/Modding/RogueMode/"; public static bool IsReady { get; private set; } = false; public static void Init() { //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: 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_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_024e: Unknown result type (might be due to invalid IL or missing references) //IL_0253: Unknown result type (might be due to invalid IL or missing references) //IL_027c: Unknown result type (might be due to invalid IL or missing references) //IL_0281: 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_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_02cc: Unknown result type (might be due to invalid IL or missing references) //IL_02d1: Unknown result type (might be due to invalid IL or missing references) //IL_02f4: Unknown result type (might be due to invalid IL or missing references) //IL_02f9: Unknown result type (might be due to invalid IL or missing references) //IL_031c: Unknown result type (might be due to invalid IL or missing references) //IL_0321: Unknown result type (might be due to invalid IL or missing references) //IL_0345: Unknown result type (might be due to invalid IL or missing references) //IL_034a: Unknown result type (might be due to invalid IL or missing references) //IL_036e: Unknown result type (might be due to invalid IL or missing references) //IL_0373: Unknown result type (might be due to invalid IL or missing references) //IL_0397: Unknown result type (might be due to invalid IL or missing references) //IL_039c: Unknown result type (might be due to invalid IL or missing references) //IL_03c0: Unknown result type (might be due to invalid IL or missing references) //IL_03c5: Unknown result type (might be due to invalid IL or missing references) if (!_initStarted) { _initStarted = true; descriptors.Clear(); enemiesByType.Clear(); enemiesByClass.Clear(); _loadsDone = 0; ((MonoBehaviour)Plugin.Instance).StartCoroutine(GetAllSpawnables()); ((MonoBehaviour)Plugin.Instance).StartCoroutine(GetAllEnemies()); if ((Object)(object)napalmProj == (Object)null) { napalmProj = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Prefabs/Attacks and Projectiles/GasolineProjectile.prefab").WaitForCompletion(); } if ((Object)(object)VirtueBeam == (Object)null) { VirtueBeam = Addressables.LoadAssetAsync<GameObject>((object)"Virtue Insignia").WaitForCompletion(); } if ((Object)(object)BreakParticle == (Object)null) { BreakParticle = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Particles/Breaks/BreakParticle.prefab").WaitForCompletion(); } if ((Object)(object)BlueFlash == (Object)null) { BlueFlash = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Particles/Flashes/V2FlashUnparriable.prefab").WaitForCompletion(); } if ((Object)(object)Agony == (Object)null) { Agony = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Prefabs/Enemies/SwordsMachine Agony.prefab").WaitForCompletion(); } if ((Object)(object)BSHead == (Object)null) { BSHead = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Particles/Blood/BS Head.prefab").WaitForCompletion(); } if ((Object)(object)healingEffect == (Object)null) { healingEffect = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Particles/HealingEffect.prefab").WaitForCompletion(); } if ((Object)(object)Rocket == (Object)null) { Rocket = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Prefabs/Attacks and Projectiles/Rocket.prefab").WaitForCompletion(); } if ((Object)(object)nail == (Object)null) { nail = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Prefabs/Attacks and Projectiles/Nails/Nail.prefab").WaitForCompletion(); } if ((Object)(object)CoinGet == (Object)null) { CoinGet = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Particles/CoinGet.prefab").WaitForCompletion(); } if ((Object)(object)RevolverBeam == (Object)null) { RevolverBeam = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Prefabs/Attacks and Projectiles/Hitscan Beams/Revolver Beam.prefab").WaitForCompletion(); } if ((Object)(object)CoinFlash == (Object)null) { CoinFlash = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Particles/Flashes/CoinFlash.prefab").WaitForCompletion(); } if ((Object)(object)funnyPowerIntroSpawn == (Object)null) { funnyPowerIntroSpawn = Addressables.LoadAssetAsync<EndlessEnemy>((object)"Assets/Data/Cyber Grind Patterns/Data/PowerEndlessData.asset").WaitForCompletion().prefab; } if ((Object)(object)Tundra == (Object)null) { Tundra = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Prefabs/Enemies/SwordsMachine Tundra.prefab").WaitForCompletion(); } if ((Object)(object)zapThingy == (Object)null) { zapThingy = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Particles/HitSparkElectricity.prefab").WaitForCompletion(); } if ((Object)(object)spawnEffect == (Object)null) { spawnEffect = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Particles/Spawn Effects/SpawnEffect Melee Hard.prefab").WaitForCompletion(); } if ((Object)(object)mindflayerBeam == (Object)null) { mindflayerBeam = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Prefabs/Attacks and Projectiles/Hitscan Beams/Mindflayer Beam.prefab").WaitForCompletion(); } if ((Object)(object)StalkerWarning == (Object)null) { StalkerWarning = Addressables.LoadAssetAsync<AudioClip>((object)"Assets/Sounds/Enemies/StalkerWarning.wav").WaitForCompletion(); } if ((Object)(object)FilthAttack == (Object)null) { FilthAttack = Addressables.LoadAssetAsync<AudioClip>((object)"Assets/Sounds/Enemies/Zombie Weak Death Reverse.wav").WaitForCompletion(); } if ((Object)(object)ArmFeedbacker == (Object)null) { ArmFeedbacker = Addressables.LoadAssetAsync<Sprite>((object)"Assets/Textures/UI/ArmFeedbacker.png").WaitForCompletion(); } if ((Object)(object)ArmKnuckleBlaster == (Object)null) { ArmKnuckleBlaster = Addressables.LoadAssetAsync<Sprite>((object)"Assets/Textures/UI/ArmKnuckleblaster.png").WaitForCompletion(); } if ((Object)(object)ArmWhiplash == (Object)null) { ArmWhiplash = Addressables.LoadAssetAsync<Sprite>((object)"Assets/Textures/UI/ArmWhiplash.png").WaitForCompletion(); } } } public static GameObject GetCustomBoss(string name) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) if (CustomBosses.TryGetValue(name, out GameObject value)) { return value; } value = Addressables.LoadAssetAsync<GameObject>((object)("Assets/Modding/RogueMode/Custom Bosses/" + name)).WaitForCompletion(); CustomBosses.Add(name, value); return value; } private static void OnLoadComplete() { _loadsDone++; if (_loadsDone >= 2) { IsReady = true; Plugin.Logger.LogInfo((object)($"AssetsManager ready — {descriptors.Count} weapon descriptors, " + $"{enemiesByType.Values.Sum((List<SpawnableObject> l) => l.Count)} enemies across " + $"{enemiesByType.Count} type(s) loaded.")); } } private static IEnumerator GetAllSpawnables() { AsyncOperationHandle<IResourceLocator> initHandle = Addressables.InitializeAsync(); yield return initHandle; List<IResourceLocation> allLocations = new List<IResourceLocation>(); foreach (IResourceLocator locator in Addressables.ResourceLocators) { List<object> keys = locator.Keys.ToList(); if (keys.Count != 0) { AsyncOperationHandle<IList<IResourceLocation>> locHandle = Addressables.LoadResourceLocationsAsync((IList<object>)keys, (MergeMode)1, typeof(WeaponDescriptor)); yield return locHandle; if ((int)locHandle.Status == 1) { allLocations.AddRange(locHandle.Result); } Addressables.Release<IList<IResourceLocation>>(locHandle); } } allLocations = (from l in allLocations group l by l.InternalId into g select g.First()).ToList(); Plugin.Logger.LogInfo((object)$"Found {allLocations.Count} WeaponDescriptor locations"); foreach (IResourceLocation location in allLocations) { AsyncOperationHandle<WeaponDescriptor> loadHandle = Addressables.LoadAssetAsync<WeaponDescriptor>(location); yield return loadHandle; if ((int)loadHandle.Status == 1) { descriptors.Add(loadHandle.Result); } } OnLoadComplete(); } private static IEnumerator GetAllEnemies() { AsyncOperationHandle<IResourceLocator> initHandle = Addressables.InitializeAsync(); yield return initHandle; List<IResourceLocation> allLocations = new List<IResourceLocation>(); foreach (IResourceLocator locator in Addressables.ResourceLocators) { List<object> keys = locator.Keys.ToList(); if (keys.Count != 0) { AsyncOperationHandle<IList<IResourceLocation>> locHandle = Addressables.LoadResourceLocationsAsync((IList<object>)keys, (MergeMode)1, typeof(SpawnableObject)); yield return locHandle; if ((int)locHandle.Status == 1) { allLocations.AddRange(locHandle.Result); } Addressables.Release<IList<IResourceLocation>>(locHandle); } } allLocations = (from l in allLocations group l by l.InternalId into g select g.First()).ToList(); Plugin.Logger.LogInfo((object)$"Found {allLocations.Count} SpawnableObject locations"); int enemyCount = 0; foreach (IResourceLocation location in allLocations) { AsyncOperationHandle<SpawnableObject> loadHandle = Addressables.LoadAssetAsync<SpawnableObject>(location); yield return loadHandle; if ((int)loadHandle.Status != 1) { continue; } SpawnableObject obj = loadHandle.Result; if ((int)obj.spawnableObjectType == 1) { if (!enemiesByType.ContainsKey(obj.enemyType)) { enemiesByType[obj.enemyType] = new List<SpawnableObject>(); } if (!enemiesByClass.ContainsKey(GetClassName(obj.type))) { enemiesByClass[GetClassName(obj.type)] = new List<SpawnableObject>(); } enemiesByType[obj.enemyType].Add(obj); enemiesByClass[GetClassName(obj.type)].Add(obj); enemyCount++; } } Plugin.Logger.LogInfo((object)$"Loaded {enemyCount} enemy SpawnableObjects across {enemiesByType.Count} type(s)."); foreach (KeyValuePair<EnemyType, List<SpawnableObject>> kvp in enemiesByType) { Plugin.Logger.LogInfo((object)$" {kvp.Key}: {kvp.Value.Count} variant(s)"); } OnLoadComplete(); } public static string GetClassName(string type) { type = type.Replace("Supreme ", ""); type = type.Replace("Lesser ", ""); type = type.Replace("Greater ", ""); return type; } public static Sprite prefToSprite(string pref, bool alternate) { if (!IsReady) { Plugin.Logger.LogWarning((object)("prefToDescriptor called before assets finished loading! pref=" + pref)); return null; } char c = pref.Last(); if (pref.Contains("rev")) { IEnumerable<WeaponDescriptor> source = descriptors.Where((WeaponDescriptor x) => x.weaponName.StartsWith((!alternate) ? "Revolver" : "Alternative Revolver")); switch (c) { case '0': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Pierce"))).icon; case '1': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Twirl"))).icon; case '2': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Ricochet"))).icon; } } else if (pref.Contains("sho")) { IEnumerable<WeaponDescriptor> source = descriptors.Where((WeaponDescriptor x) => x.weaponName.StartsWith((!alternate) ? "Shotgun" : "Hammer")); switch (c) { case '0': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Grenade"))).icon; case '1': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Pump"))).icon; case '2': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Saw"))).icon; } } else if (pref.Contains("nai")) { IEnumerable<WeaponDescriptor> source = descriptors.Where((WeaponDescriptor x) => x.weaponName.StartsWith((!alternate) ? "Nailgun" : "Sawblade Launcher")); switch (c) { case '0': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Magnet"))).icon; case '1': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Overheat"))).icon; case '2': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Jumpstart"))).icon; } } else if (pref.Contains("rai")) { IEnumerable<WeaponDescriptor> source = descriptors.Where((WeaponDescriptor x) => x.weaponName.StartsWith("Railcannon")); switch (c) { case '0': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Electric"))).icon; case '1': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Harpoon"))).icon; case '2': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Malicious"))).icon; } } else if (pref.Contains("rock")) { IEnumerable<WeaponDescriptor> source = descriptors.Where((WeaponDescriptor x) => x.weaponName.StartsWith("Rocket Launcher")); switch (c) { case '0': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Freeze"))).icon; case '1': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Cannonball"))).icon; case '2': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Napalm"))).icon; } } else if (pref.Contains("arm")) { switch (c) { case '0': return ArmFeedbacker; case '1': return ArmKnuckleBlaster; case '2': return ArmWhiplash; } } Plugin.Logger.LogWarning((object)("prefToDescriptor: no match for pref='" + pref + "'")); return descriptors.Find((WeaponDescriptor x) => x.weaponName == "UNKNOWN").icon; } public static WeaponDescriptor prefToDescriptor(string pref, bool alternate) { if (!IsReady) { Plugin.Logger.LogWarning((object)("prefToDescriptor called before assets finished loading! pref=" + pref)); return null; } char c = pref.Last(); if (pref.Contains("rev")) { IEnumerable<WeaponDescriptor> source = descriptors.Where((WeaponDescriptor x) => x.weaponName.StartsWith((!alternate) ? "Revolver" : "Alternative Revolver")); switch (c) { case '0': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Pierce"))); case '1': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Twirl"))); case '2': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Ricochet"))); } } else if (pref.Contains("sho")) { IEnumerable<WeaponDescriptor> source = descriptors.Where((WeaponDescriptor x) => x.weaponName.StartsWith((!alternate) ? "Shotgun" : "Hammer")); switch (c) { case '0': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Grenade"))); case '1': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Pump"))); case '2': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Saw"))); } } else if (pref.Contains("nai")) { IEnumerable<WeaponDescriptor> source = descriptors.Where((WeaponDescriptor x) => x.weaponName.StartsWith((!alternate) ? "Nailgun" : "Sawblade Launcher")); switch (c) { case '0': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Magnet"))); case '1': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Overheat"))); case '2': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Jumpstart"))); } } else if (pref.Contains("rai")) { IEnumerable<WeaponDescriptor> source = descriptors.Where((WeaponDescriptor x) => x.weaponName.StartsWith("Railcannon")); switch (c) { case '0': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Electric"))); case '1': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Harpoon"))); case '2': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Malicious"))); } } else if (pref.Contains("rock")) { IEnumerable<WeaponDescriptor> source = descriptors.Where((WeaponDescriptor x) => x.weaponName.StartsWith("Rocket Launcher")); switch (c) { case '0': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Freeze"))); case '1': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Cannonball"))); case '2': return source.FirstOrDefault((Func<WeaponDescriptor, bool>)((WeaponDescriptor x) => x.weaponName.EndsWith("Napalm"))); } } Plugin.Logger.LogWarning((object)("prefToDescriptor: no match for pref='" + pref + "'")); return descriptors.Find((WeaponDescriptor x) => x.weaponName == "UNKNOWN"); } public static Material getAlchemy() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_alchemyMat == (Object)null) { _alchemyMat = Addressables.LoadAssetAsync<Material>((object)"Assets/Modding/RogueMode/balala.mat").WaitForCompletion(); } return _alchemyMat; } public static List<SpawnableObject> GetEnemiesOfType(EnemyType type) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) if (!IsReady) { Plugin.Logger.LogWarning((object)"GetEnemiesOfType called before assets finished loading!"); return null; } List<SpawnableObject> value; return enemiesByType.TryGetValue(type, out value) ? value : new List<SpawnableObject>(); } } public class FilthBallBehaviour : MonoBehaviour { private enum State { Roaming, Pausing, Dashing } private float speed = 15f; private Vector3 velocity; private EnemyIdentifier eid; private GameObject filthPrefab; private float nextFilthSpawn = 98f; private SphereCollider sphereCollider; private LayerMask environmentMask; private State state = State.Roaming; private float detectionRange = 9f; private float damageRange = 4f; private float pauseDuration = 0.4f; private float dashDuration = 5f; private float dashSpeedMultiplier = 3f; private float stateTimer; private Transform player; private float deadTimer = 0.25f; private bool HitPlayer = false; private void Start() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: 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_004d: Unknown result type (might be due to invalid IL or missing references) velocity = Random.onUnitSphere * speed; eid = ((Component)this).GetComponent<EnemyIdentifier>(); nextFilthSpawn = eid.Health - 2f; sphereCollider = ((Component)this).GetComponent<SphereCollider>(); environmentMask = LayerMaskDefaults.Get((LMD)1); filthPrefab = AssetsManager.GetEnemiesOfType((EnemyType)3)[0].gameObject; if ((Object)(object)MonoSingleton<NewMovement>.Instance != (Object)null) { player = ((Component)MonoSingleton<NewMovement>.Instance).transform; } ((Component)this).GetComponent<HitEffectTriggerer>().OnHit.AddListener((UnityAction<float>)delegate(float dmg) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) float health = eid.Health; float num = health - dmg; while (num <= nextFilthSpawn) { Object.Instantiate<GameObject>(filthPrefab, ((Component)this).transform.position, Quaternion.identity); nextFilthSpawn /= 1.28f; if (nextFilthSpawn <= 0.1f) { break; } } if (num <= 0f) { Object.Destroy((Object)(object)((Component)this).gameObject); } }); } private void Update() { if (eid.dead) { deadTimer -= Time.deltaTime; if (deadTimer <= 0f) { Object.Destroy((Object)(object)((Component)this).gameObject); } } switch (state) { case State.Roaming: UpdateRoaming(); break; case State.Pausing: UpdatePausing(); break; case State.Dashing: UpdateDashing(); break; } } private void UpdateRoaming() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_005e: 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) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) Move(speed); if ((Object)(object)player != (Object)null && Vector3.Distance(((Component)this).transform.position, player.position) <= detectionRange) { state = State.Pausing; stateTimer = pauseDuration; velocity = Vector3.zero; Object.Instantiate<GameObject>(AssetsManager.BlueFlash, ((Component)this).transform.position, Quaternion.identity); } } private void UpdatePausing() { //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: 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_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: 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_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) stateTimer -= Time.deltaTime; if (stateTimer <= 0f) { if ((Object)(object)player != (Object)null) { Vector3 val = player.position - ((Component)this).transform.position; Vector3 normalized = ((Vector3)(ref val)).normalized; velocity = normalized * speed * dashSpeedMultiplier; } else { velocity = Random.onUnitSphere * speed * dashSpeedMultiplier; } state = State.Dashing; stateTimer = dashDuration; } } private void UpdateDashing() { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: 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_00b8: Unknown result type (might be due to invalid IL or missing references) Move(speed * dashSpeedMultiplier); stateTimer -= Time.deltaTime; if ((Object)(object)player != (Object)null && Vector3.Distance(((Component)this).transform.position, player.position) <= damageRange && !HitPlayer) { HitPlayer = true; MonoSingleton<NewMovement>.Instance.GetHurt(20, false, 1f, false, false, 0.35f, false); } if (stateTimer <= 0f) { velocity = ((Vector3)(ref velocity)).normalized * speed; state = State.Roaming; HitPlayer = false; } } private void Move(float currentSpeed) { //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) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0054: 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_0072: 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_00e5: 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_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: 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) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) Vector3 normalized = ((Vector3)(ref velocity)).normalized; float num = currentSpeed * Time.deltaTime; float num2 = sphereCollider.radius * Mathf.Max(new float[3] { ((Component)this).transform.lossyScale.x, ((Component)this).transform.lossyScale.y, ((Component)this).transform.lossyScale.z }); RaycastHit val = default(RaycastHit); if (Physics.SphereCast(((Component)this).transform.position, num2, normalized, ref val, num, LayerMask.op_Implicit(environmentMask), (QueryTriggerInteraction)1)) { ((Component)this).transform.position = ((RaycastHit)(ref val)).point + ((RaycastHit)(ref val)).normal * num2; Vector3 val2 = Vector3.Reflect(velocity, ((RaycastHit)(ref val)).normal); velocity = ((Vector3)(ref val2)).normalized * currentSpeed; } else { Transform transform = ((Component)this).transform; transform.position += normalized * num; } } } public class FakeSoap : MonoBehaviour { private bool exploding = false; public GameObject explosion; private ItemIdentifier itid; private Rigidbody rb; private Vector3 velocityBeforeCollision; private void Start() { itid = ((Component)this).GetComponent<ItemIdentifier>(); rb = ((Component)this).GetComponent<Rigidbody>(); } private void FixedUpdate() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0039: 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) itid.itemType = (ItemType)0; Soap val = default(Soap); if (((Component)this).TryGetComponent<Soap>(ref val)) { Object.Destroy((Object)(object)val); } if (Object.op_Implicit((Object)(object)rb)) { velocityBeforeCollision = rb.velocity; } } private void OnDestroy() { if ((Object)(object)((Component)this).gameObject != (Object)null && !exploding) { FuckingExplode(); } } public void FuckingExplode() { //IL_0014: 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) exploding = true; Object.Instantiate<GameObject>(explosion, ((Component)this).transform.position, explosion.transform.rotation); Object.Destroy((Object)(object)((Component)this).gameObject); } private void OnCollisionEnter(Collision collision) { //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) if (itid.pickedUp || !(((Vector3)(ref velocityBeforeCollision)).magnitude > 15f)) { return; } EnemyIdentifierIdentifier val = default(EnemyIdentifierIdentifier); Breakable val2 = default(Breakable); Bleeder val3 = default(Bleeder); if ((collision.gameObject.layer == 11 || collision.gameObject.layer == 10) && collision.gameObject.TryGetComponent<EnemyIdentifierIdentifier>(ref val)) { if (Object.op_Implicit((Object)(object)val.eid)) { FuckingExplode(); } rb.velocity = Vector3.zero; } else if (collision.gameObject.TryGetComponent<Breakable>(ref val2) && !val2.specialCaseOnly) { val2.Break(); rb.velocity = Vector3.zero; } else if (collision.gameObject.TryGetComponent<Bleeder>(ref val3)) { val3.GetHit(((Component)this).transform.position, (GoreType)0, false); } } public void HitWith(GameObject target) { EnemyIdentifierIdentifier val = default(EnemyIdentifierIdentifier); if (target.TryGetComponent<EnemyIdentifierIdentifier>(ref val)) { FuckingExplode(); } } } public class HitEffectTriggerer : MonoBehaviour { public UnityEvent<float> OnHit; public void OnGottenHit(float dmg) { OnHit?.Invoke(dmg); } } public class Missle : MonoBehaviour { public EnemyIdentifier enemyThatGotHit; private EnemyIdentifier target; public float speed = 25f; public float upwardForce = 15f; public float homingDelay = 0.5f; public float turnSpeed = 5f; public float damage = 10f; public float explosionRadius = 0.1f; private float AliveTime = 0f; public GameObject freezeEffect; public GameObject levelEffect; private bool homingActive = false; private Rigidbody rb; private bool kaboomed = false; private bool super = false; public bool isRocket = false; private float frozenT = 0f; public bool frozen => Object.op_Implicit((Object)(object)MonoSingleton<WeaponCharges>.Instance) && MonoSingleton<WeaponCharges>.Instance.rocketFrozen; private void Start() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) Plugin.InvokeProjectileStart(((Component)this).gameObject, ProjectileType.Rocket); rb = ((Component)this).GetComponent<Rigidbody>(); rb.velocity = Vector3.up * upwardForce; target = enemyThatGotHit; ((MonoBehaviour)this).StartCoroutine(ActivateHoming()); } private IEnumerator ActivateHoming() { yield return (object)new WaitForSeconds(homingDelay); homingActive = true; } private void FixedUpdate() { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0184: 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_0190: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: 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) if ((Object)(object)freezeEffect != (Object)null) { freezeEffect.SetActive(frozen); } if (frozen && isRocket) { rb.velocity = Vector3.zero; frozenT += Time.deltaTime; if (frozenT >= 0.5f && !super) { levelEffect.SetActive(true); super = true; speed *= 3f; } } else { if (!homingActive) { return; } AliveTime += Time.deltaTime; if ((Object)(object)target == (Object)null || target.dead) { List<EnemyIdentifier> currentEnemies = MonoSingleton<EnemyTracker>.Instance.GetCurrentEnemies(); if (currentEnemies.Count <= 0) { return; } target = currentEnemies[Random.Range(0, currentEnemies.Count)]; } Vector3 val = (((Object)(object)target.weakPoint == (Object)null) ? ((Component)target).transform.position : target.weakPoint.transform.position); Vector3 val2 = val - ((Component)this).transform.position; Vector3 normalized = ((Vector3)(ref val2)).normalized; ((Component)this).transform.up = -normalized; Vector3 velocity = Vector3.Lerp(rb.velocity, normalized * speed, turnSpeed * Time.fixedDeltaTime); rb.velocity = velocity; if (AliveTime >= 20f) { Explode(); } } } private void OnTriggerEnter(Collider col) { //IL_00cb: 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) if (!Object.op_Implicit((Object)(object)((Component)col).gameObject.GetComponent<NewMovement>()) && LayerMaskDefaults.IsMatchingLayer(((Component)col).gameObject.layer, (LMD)0) && !kaboomed) { Plugin.InvokeProjectileCollide(((Component)this).gameObject, ProjectileType.Rocket, ((Component)col).gameObject); kaboomed = true; Plugin.Logger.LogInfo((object)("I hit " + ((Object)((Component)col).gameObject).name)); EnemyIdentifierIdentifier component = ((Component)col).gameObject.GetComponent<EnemyIdentifierIdentifier>(); EnemyIdentifier val = (((Object)(object)component == (Object)null) ? ((Component)col).gameObject.GetComponent<EnemyIdentifier>() : component.eid); if ((Object)(object)val != (Object)null) { val.hitter = "missle"; val.DeliverDamage(((Component)col).gameObject, Vector3.zero, ((Component)component).transform.position, super ? (damage * 2f) : damage, false, 0f, (GameObject)null, false, false); } Explode(); } } private void Explode() { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) Plugin.Logger.LogInfo((object)$"super={super}, frozenT={frozenT}"); GameObject val = (super ? MonoSingleton<DefaultReferenceManager>.Instance.superExplosion : MonoSingleton<DefaultReferenceManager>.Instance.explosion); GameObject val2 = Object.Instantiate<GameObject>(val, ((Component)this).transform.position, Quaternion.identity); Explosion[] componentsInChildren = val2.GetComponentsInChildren<Explosion>(); foreach (Explosion val3 in componentsInChildren) { val3.maxSize = (super ? (explosionRadius * 3f) : explosionRadius); val3.canHit = (AffectedSubjects)2; val3.damage = (super ? (Mathf.RoundToInt(damage) * 4) : (Mathf.RoundToInt(damage) * 2)); } Object.Destroy((Object)(object)((Component)this).gameObject); } } public class BloodMachine : MonoBehaviour { public GameObject BloodObject; public int MinFullThreshold = 3; public int MaxFullThreshold = 10; public int FullThreshold = 10; public Vector3 localPositionPartial; public Vector3 localPositionFull; public UnityEvent onUse; public UnityEvent onFill; private int bloodDonated; public static bool BloodMachined; private void Awake() { FullThreshold = RogueDifficultyManager.BloodRNG.Next(MinFullThreshold, MaxFullThreshold); } public void BLOOD() { //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) if (Plugin.SelectedChar.HasPassive(Passive.Greedy)) { MonoSingleton<HudMessageReceiver>.Instance.SendHudMessage("<color=red>INCOMPATIBLE BLOOD</color>", "", "", 0, false, false, true); return; } Debug.Log((object)$"bloodDonated: {bloodDonated}, FullThreshold: {FullThreshold}"); if (bloodDonated == FullThreshold) { return; } int num = 50; if (Plugin.SelectedChar.GetType() == typeof(Filth)) { num = 5; } if (MonoSingleton<NewMovement>.Instance.hp - num <= 0) { MonoSingleton<HudMessageReceiver>.Instance.SendHudMessage("<color=red>NOT ENOUGH BLOOD</color>", "", "", 0, false, false, true); return; } bloodDonated++; onUse.Invoke(); if (bloodDonated == 1) { BloodObject.transform.localPosition = localPositionPartial; } else if (bloodDonated == FullThreshold) { BloodObject.transform.localPosition = localPositionFull; onFill.Invoke(); if (Plugin.SelectedChar.HasPassive(Passive.HealFromBlood)) { ItemPickup.CreatePickup(Plugin.GiveRandomItem(RogueDifficultyManager.BloodRNG, DroptableType.CommonOnly), ((Component)this).transform, 5f); } else { ItemPickup.CreatePickup(Plugin.GiveRandomItem(RogueDifficultyManager.BloodRNG, DroptableType.BloodMachine), ((Component)this).transform, 5f); } } if (Plugin.SelectedChar.GetType() != typeof(Filth)) { BloodMachined = true; MonoSingleton<NewMovement>.Instance.GetHurt(num, false, 1f, false, false, 0.35f, true); } else { for (int i = 0; i < num; i++) { BloodMachined = true; MonoSingleton<NewMovement>.Instance.GetHurt(1, false, 1f, false, false, 0.35f, true); } } int num2 = RogueDifficultyManager.BloodRNG.Next(0, 2); RogueDifficultyManager.Instance.Gold += num2; } } public class Chest : MonoBehaviour { private WallCheck check; private List<ChestLootpool> pools; private bool pickedUp = false; private Animator anim; public float openDelay = 0f; private float openTimer = 0f; public static GameObject prefab; private void Awake() { anim = ((Component)this).GetComponent<Animator>(); pools = new List<ChestLootpool> { new ChestLootpool(1, 4), new ChestLootpool(0, 3, 0, 2), new ChestLootpool(0, 0, 1, 3), new ChestLootpool(0, 0, 0, 0, delegate { SpawnAtChest(delegate(Transform anchor) { ItemPickup.CreatePickup(Plugin.GiveRandomItem(), anchor, 4f, 1f); }); }, 0.3f), new ChestLootpool(0, 0, 0, 0, delegate { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) SpawnableObject val = AssetsManager.GetEnemiesOfType((EnemyType)3)[0]; Object.Instantiate<GameObject>(val.gameObject, ((Component)this).transform.position, Quaternion.identity).transform.parent = ((Component)this).transform.parent; Object.Instantiate<GameObject>(val.gameObject, ((Component)this).transform.position, Quaternion.identity).transform.parent = ((Component)this).transform.parent; }) }; check = ((Component)this).GetComponentInChildren<WallCheck>(); } private void OnEnable() { if (pickedUp) { anim.Play("Open", 0, 1f); anim.Update(0f); if (SettingsManager.DestroyChestsOnOpen) { Object.Destroy((Object)(object)((Component)this).gameObject); } } } private void Update() { //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) if (openTimer < openDelay) { openTimer += Time.deltaTime; } else if ((Object)(object)check != (Object)null && check.onWall) { ((Component)this).GetComponent<Rigidbody>().AddForce(((Component)this).transform.right, (ForceMode)2); } else if (Vector3.Distance(((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)this).transform.position) <= 2.5f && !pickedUp) { pickedUp = true; anim.SetTrigger("Open"); if (SettingsManager.DestroyChestsOnOpen) { Object.Destroy((Object)(object)((Component)this).gameObject, 15f); } OpenChest(); } } private void OpenChest() { ChestLootpool chestLootpool = PickPool(); chestLootpool.open?.Invoke(); int num = Random.Range(chestLootpool.MinGold, chestLootpool.MaxGold + 1); int num2 = Random.Range(chestLootpool.MinKeys, chestLootpool.MaxKeys + 1); for (int i = 0; i < num; i++) { SpawnAt(delegate(Transform anchor) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) GameObject val = GoldPickup.CreatePickup(anchor, 1f); val.GetComponent<Rigidbody>().AddForce(((Component)this).transform.right * 3f, (ForceMode)2); }); } for (int num3 = 0; num3 < num2; num3++) { SpawnAt(delegate(Transform anchor) { KeyPickup.CreatePickup(anchor); }); } } private ChestLootpool PickPool() { float num = 0f; foreach (ChestLootpool pool in pools) { num += pool.weight; } float num2 = Random.Range(0f, num); float num3 = 0f; foreach (ChestLootpool pool2 in pools) { num3 += pool2.weight; if (num2 <= num3) { return pool2; } } return pools[pools.Count - 1]; } private void SpawnAt(Action<Transform> createPickup) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: 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) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: 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_0066: Expected O, but got Unknown //IL_006c: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((Component)this).transform.position + -((Component)this).transform.right * 4f; val += new Vector3(Random.Range(-1f, 1f), 0f, Random.Range(-1f, 1f)); GameObject val2 = new GameObject("ItemDropAnchor"); val2.transform.position = val; val2.transform.parent = ((Component)this).transform; createPickup(val2.transform); } private void SpawnAtChest(Action<Transform> createPickup) { //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) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown //IL_001e: Unknown result type (might be due to invalid IL or missing references) Vector3 position = ((Component)this).transform.position; GameObject val = new GameObject("ItemDropAnchor"); val.transform.position = position; val.transform.parent = ((Component)this).transform; createPickup(val.transform); } public static GameObject CreateChest(Transform position, float openDelay = 0f) { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0056: 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_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)prefab == (Object)null) { prefab = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Modding/RogueMode/Chest.prefab").WaitForCompletion(); } GameObject val = Object.Instantiate<GameObject>(prefab); Chest chest = val.AddComponent<Chest>(); chest.openDelay = openDelay; val.transform.position = position.position + Vector3.up / 2f; val.transform.parent = position; return val; } } public class ChestLootpool { public int MinGold; public int MaxGold; public int MinKeys; public int MaxKeys; public float weight; public Action open; public ChestLootpool(int MinGold = 0, int MaxGold = 0, int MinKeys = 0, int MaxKeys = 0, Action open = null, float weight = 1f) { this.MinGold = MinGold; this.MaxGold = MaxGold; this.MinKeys = MinKeys; this.MaxKeys = MaxKeys; this.open = open; this.weight = weight; } } public class ExecuteOnSceneLoadRogue : MonoBehaviour { [Tooltip("Lower value ExecuteOnSceneLoad are executed first")] public int relativeExecutionOrder = 0; public UnityEvent onSceneLoad; public void Execute() { if (onSceneLoad != null) { onSceneLoad.Invoke(); } } } [Serializable] public class LayerInfoRogue { public string layerName = ""; public string[] layerLevels = new string[0]; } public class FirstRoomSpawnerRogue : MonoBehaviour, ISerializationCallbackReceiver { [HideInInspector] internal class PlayerForcedMovement : MonoBehaviour { public NewMovement player; private Rigidbody rb; public static float defaultMoveForce = 67f; public float force = defaultMoveForce; public void Awake() { if ((Object)(object)player == (Object)null) { player = MonoSingleton<NewMovement>.Instance; } rb = ((Component)player).GetComponent<Rigidbody>(); rb.useGravity = false; } public void LateUpdate() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) rb.velocity = new Vector3(0f, force, 0f); } public void DestroyComp() { rb.useGravity = true; Object.Destroy((Object)(object)this); } } [HideInInspector] private class LocalMoveTowards : MonoBehaviour { public Vector3 targetLocalPosition; public bool active = false; public float speed = 10f; public void Update() { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0022: 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) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) if (active) { ((Component)this).transform.localPosition = Vector3.MoveTowards(((Component)this).transform.localPosition, targetLocalPosition, Time.deltaTime * speed); if (((Component)this).transform.localPosition == targetLocalPosition) { Object.Destroy((Object)(object)this); } } } public void Activate() { active = true; } } [HideInInspector] private class CustomHellmapCursor : MonoBehaviour { public Vector2 targetPosition; public Image targetImage; public AudioSource aud; private bool white = true; private RectTransform rect; private void Start() { rect = ((Component)this).GetComponent<RectTransform>(); ((MonoBehaviour)this).Invoke("FlashImage", 0.075f); } private void Update() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: 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) rect.anchoredPosition = Vector2.MoveTowards(rect.anchoredPosition, targetPosition, Time.deltaTime * 4f * Vector3.Distance(Vector2.op_Implicit(rect.anchoredPosition), Vector2.op_Implicit(targetPosition))); } private void FlashImage() { //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) if (white) { white = false; ((Graphic)targetImage).color = new Color(0f, 0f, 0f, 0f); if (!((Component)this).gameObject.activeSelf) { return; } aud.Play(); } else { white = true; ((Graphic)targetImage).color = Color.white; } if (((Component)this).gameObject.activeInHierarchy) { ((MonoBehaviour)this).Invoke("FlashImage", 0.075f); } } } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static UnityAction <>9__36_5; public static Func<GameObject, Transform> <>9__37_1; public static Func<GameObject, OnLevelStart> <>9__37_2; public static Func<GameObject, bool> <>9__37_4; internal void <ConvertToAscendingFirstRoom>b__36_5() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) MonoSingleton<StatsManager>.Instance.spawnPos = ((Component)MonoSingleton<NewMovement>.Instance).transform.position; } internal Transform <Spawn>b__37_1(GameObject go) { return go.transform; } internal OnLevelStart <Spawn>b__37_2(GameObject go) { return go.GetComponent<OnLevelStart>(); } internal bool <Spawn>b__37_4(GameObject o) { return ((Object)o).name == "Canvas"; } } [Tooltip("Player will be moved to this position if the room is not ascending variant. If null, default position is used")] public Transform playerSpawnPos; [Tooltip("If set to true, room will not be deleted. Else, it will be replaced in game")] public bool doNotReplace = false; [Header("Replace Settings")] [Tooltip("Enabling this field causes room to be spawned as the secret variant")] public bool secretRoom = false; [Tooltip("Enabling this field causes room to be spawned as the prime variant")] public bool primeRoom = false; [Tooltip("Enabling this field causes room to be spawned as the encore variant")] public bool encoreRoom = false; [HideInInspector] [Tooltip("Enabling this field causes the whole room to be converted into the ascending variant where the player is spawned at the bottom and ascends upwards instead of falling")] public bool convertToUpwardRoom = false; [HideInInspector] [Tooltip("This clip will be played when the trap door closes beneath the player for ascending rooms")] public AudioClip upwardRoomDoorCloseClip; [HideInInspector] [Tooltip("If bottom part of the ascending room collides with out of bounds triggers, this list can temporarely disable them while the player is ascending")] public List<GameObject> upwardRoomOutOfBoundsToDisable; [Header("Player Fields")] [Space(10f)] public CameraClearFlags cameraFillMode = (CameraClearFlags)2; public Color backgroundColor = Color.black; [Header("Level Fields")] [Space(10f)] [Tooltip("If set to true, level title will be displayed when the door is opened")] public bool displayLevelTitle = true; [Tooltip("If set to true, music will start when the door is opened")] public bool startMusic = true; [Header("Hellmap")] [Tooltip("Enable the layer and level map when the player spawn")] [Space(10f)] public bool enableHellMap = false; [Tooltip("Sound clip which is played for each beep while falling")] public AudioClip hellmapBeepClip; [Tooltip("Each layer has a layer name and number of levels. For limbo the header is LIMBO and levels are [1-1, 1-2, 1-3, 1-4]")] public List<LayerInfoRogue> layersAndLevels = new List<LayerInfoRogue>(); [HideInInspector] public List<int> levelSizes = new List<int>(); [HideInInspector] public List<string> layerNames = new List<string>(); [HideInInspector] public List<string> levelNames = new List<string>(); [Tooltip("Which layer the cursor starts from. First layer is 0 and at the top")] public int layerIndexToStartFrom; [Tooltip("Which level in the layer the cursor starts from. The first level is 0 and is just below the layer title (the uppermost level)")] public int levelIndexToStartFrom; [Tooltip("Which layer the cursor ends at. First layer is 0 and at the top")] public int layerIndexToEndAt; [Tooltip("Which level in the layer the cursor ends at. The first level is 0 and is just below the layer title (the uppermost level)")] public int levelIndexToEndAt; private bool spawned = false; public static float upDisablePos = 60f; public static float doorClosePos = 10f; public static float doorCloseSpeed = 10f; public static float actDelay = 0.5f; public static float ascendingPlayerSpawnPos = -55f; public void OnBeforeSerialize() { levelSizes.Clear(); layerNames.Clear(); levelNames.Clear(); for (int i = 0; i < layersAndLevels.Count; i++) { layerNames.Add(layersAndLevels[i].layerName); levelSizes.Add(layersAndLevels[i].layerLevels.Length); levelNames.AddRange(layersAndLevels[i].layerLevels); } } public void Deserialize() { layersAndLevels.Clear(); int num = 0; for (int i = 0; i < levelSizes.Count; i++) { LayerInfoRogue layerInfoRogue = new LayerInfoRogue(); layerInfoRogue.layerName = layerNames[i]; int num2 = levelSizes[i]; layerInfoRogue.layerLevels = new string[num2]; for (int j = 0; j < num2; j++) { layerInfoRogue.layerLevels[j] = levelNames[num++]; } layersAndLevels.Add(layerInfoRogue); } } public void OnAfterDeserialize() { } private static Text MakeText(Transform parent) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_001c: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject(); RectTransform val2 = val.AddComponent<RectTransform>(); ((Transform)val2).SetParent(parent); val.transform.localScale = Vector3.one; return val.AddComponent<Text>(); } private static RectTransform MakeRect(Transform parent) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown GameObject val = new GameObject(); RectTransform val2 = val.AddComponent<RectTransform>(); ((Transform)val2).SetParent(parent); return val2; } public static void ConvertToAscendingFirstRoom(GameObject firstRoom, AudioClip doorCloseAud, List<GameObject> toEnable, List<GameObject> toDisable, bool doNotReplace) { //IL_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02ef: Unknown result type (might be due to invalid IL or missing references) //IL_02f4: Unknown result type (might be due to invalid IL or missing references) //IL_0379: Unknown result type (might be due to invalid IL or missing references) //IL_038f: Unknown result type (might be due to invalid IL or missing references) //IL_0399: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_03bd: Expected O, but got Unknown //IL_03f0: Unknown result type (might be due to invalid IL or missing references) //IL_0402: Unknown result type (might be due to invalid IL or missing references) //IL_0423: Unknown result type (might be due to invalid IL or missing references) //IL_0473: Unknown result type (might be due to invalid IL or missing references) //IL_047d: Expected O, but got Unknown //IL_0484: Unknown result type (might be due to invalid IL or missing references) //IL_048e: Expected O, but got Unknown //IL_04a1: Unknown result type (might be due to invalid IL or missing references) //IL_04ab: Expected O, but got Unknown //IL_04ac: Unknown result type (might be due to invalid IL or missing references) //IL_04b3: Expected O, but got Unknown //IL_04e6: Unknown result type (might be due to invalid IL or missing references) //IL_04f8: Unknown result type (might be due to invalid IL or missing references) //IL_0519: Unknown result type (might be due to invalid IL or missing references) //IL_0569: Unknown result type (might be due to invalid IL or missing references) //IL_0573: Expected O, but got Unknown //IL_057a: Unknown result type (might be due to invalid IL or missing references) //IL_0584: Expected O, but got Unknown //IL_0597: Unknown result type (might be due to invalid IL or missing references) //IL_05a1: Expected O, but got Unknown //IL_05b5: Unknown result type (might be due to invalid IL or missing references) //IL_05bf: Expected O, but got Unknown //IL_05d3: Unknown result type (might be due to invalid IL or missing references) //IL_05dd: Expected O, but got Unknown //IL_05f9: Unknown result type (might be due to invalid IL or missing references) //IL_0603: Expected O, but got Unknown //IL_060a: Unknown result type (might be due to invalid IL or missing references) //IL_0614: Expected O, but got Unknown //IL_0627: Unknown result type (might be due to invalid IL or missing references) //IL_0631: Expected O, but got Unknown //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_028d: Unknown result type (might be due to invalid IL or missing references) //IL_0652: Unknown result type (might be due to invalid IL or missing references) //IL_0657: Unknown result type (might be due to invalid IL or missing references) //IL_065d: Expected O, but got Unknown Transform val = firstRoom.transform.Find("Room"); if (!doNotReplace) { Transform val2 = val.Find("Pit (3)"); ((Component)val2).transform.localPosition = new Vector3(0f, 2f, 41.72f); ((Component)val2).transform.localRotation = Quaternion.Euler(0f, 0f, 180f); Object.Destroy((Object)(object)((Component)((Component)val).transform.Find("Room/Ceiling")).gameObject); Transform val3 = ((Component)val).transform.Find("Room/Floor"); GameObject gameObject = ((Component)val3.GetChild(0)).gameObject; GameObject val4 = Object.Instantiate<GameObject>(gameObject, val3); val4.transform.localPosition = new Vector3(-15f, 9.7f, 20.28f); val4.transform.localRotation = Quaternion.identity; GameObject val5 = Object.Instantiate<GameObject>(gameObject, val3); val5.transform.localPosition = new Vector3(5f, 9.7f, 20.28f); val5.transform.localRotation = Quaternion.identity; GameObject val6 = Object.Instantiate<GameObject>(gameObject, val3); val6.transform.localPosition = new Vector3(-5f, 9.7f, 0.2f); val6.transform.localRotation = Quaternion.Euler(0f, -90f, 0f); GameObject val7 = Object.Instantiate<GameObject>(gameObject, val3); val7.transform.localPosition = new Vector3(5f, 9.7f, 10.28f); val7.transform.localRotation = Quaternion.identity; ((Renderer)val7.GetComponent<MeshRenderer>()).materials = (Material[])(object)new Material[2] { UtilsRogue.metalDec20, UtilsRogue.metalDec20 }; GameObject val8 = Object.Instantiate<GameObject>(gameObject, val3); val8.transform.localPosition = new Vector3(-15f, 9.7f, 10.28f); val8.transform.localRotation = Quaternion.identity; ((Renderer)val8.GetComponent<MeshRenderer>()).materials = (Material[])(object)new Material[2] { UtilsRogue.metalDec20, UtilsRogue.metalDec20 }; GameObject val9 = Object.Instantiate<GameObject>(gameObject, val3); val9.transform.localPosition = new Vector3(-5f, -0.3f, 20.28f); val9.transform.localRotation = Quaternion.Euler(0f, -90f, -180f); } Transform val10 = val.Find("Decorations"); Transform child = val10.GetChild(12); child.localPosition = new Vector3(-5f, 2f, 52f); LocalMoveTowards floorMover = ((Component)child).gameObject.AddComponent<LocalMoveTowards>(); floorMover.targetLocalPosition = new Vector3(-5f, 2f, 42f); floorMover.speed = doorCloseSpeed; AudioSource floorTileAud = ((Component)child).gameObject.AddComponent<AudioSource>(); floorTileAud.playOnAwake = false; floorTileAud.loop = false; floorTileAud.clip = doorCloseAud; PlayerActivator act = firstRoom.GetComponentsInChildren<PlayerActivator>().First(); ((Component)act).gameObject.SetActive(false); NewMovement instance = MonoSingleton<NewMovement>.Instance; ((Component)instance).transform.localPosition = new Vector3(((Component)instance).transform.localPosition.x, ascendingPlayerSpawnPos, ((Component)instance).transform.localPosition.z); PlayerForcedMovement focedMov = ((Component)instance).gameObject.AddComponent<PlayerForcedMovement>(); GameObject val11 = new GameObject(); val11.transform.SetParent(((Component)act).transform.parent); val11.transform.localPosition = new Vector3(0f, upDisablePos, 0f); val11.transform.localRotation = Quaternion.identity; val11.transform.localScale = new Vector3(80f, 0.2f, 80f); val11.layer = ((Component)act).gameObject.layer; BoxCollider val12 = val11.AddComponent<BoxCollider>(); ((Collider)val12).isTrigger = true; ObjectActivator val13 = val11.AddComponent<ObjectActivator>(); val13.dontActivateOnEnable = true; val13.oneTime = true; val13.events = new UltrakillEvent(); val13.events.onActivate = new UnityEvent(); val13.events.onActivate.AddListener((UnityAction)delegate { focedMov.DestroyComp(); }); GameObject val14 = new GameObject(); val14.transform.SetParent(((Component)act).transform.parent); val14.transform.localPosition = new Vector3(0f, doorClosePos, 0f); val14.transform.localRotation = Quaternion.identity; val14.transform.localScale = new Vector3(80f, 0.2f, 80f); val14.layer = ((Component)act).gameObject.layer; BoxCollider val15 = val14.AddComponent<BoxCollider>(); ((Collider)val15).isTrigger = true; ObjectActivator val16 = val14.AddComponent<ObjectActivator>(); val16.dontActivateOnEnable = true; val16.oneTime = true; val16.events = new UltrakillEvent(); val16.events.onActivate = new UnityEvent(); val16.events.onActivate.AddListener((UnityAction)delegate { floorMover.Activate(); }); val16.events.onActivate.AddListener((UnityAction)delegate { floorTileAud.Play(); }); val16.events.onActivate.AddListener((UnityAction)delegate { foreach (GameObject item in toEnable) { item.SetActive(true); } foreach (GameObject item2 in toDisable) { item2.SetActive(false); } }); ObjectActivator val17 = val14.AddComponent<ObjectActivator>(); val17.dontActivateOnEnable = true; val17.oneTime = true; val17.events = new UltrakillEvent(); val17.events.onActivate = new UnityEvent(); val17.events.onActivate.AddListener((UnityAction)delegate { ((Component)act).gameObject.SetActive(true); }); UnityEvent onActivate = val17.events.onActivate; object obj = <>c.<>9__36_5; if (obj == null) { UnityAction val18 = delegate { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) MonoSingleton<StatsManager>.Instance.spawnPos = ((Component)MonoSingleton<NewMovement>.Instance).transform.position; }; <>c.<>9__36_5 = val18; obj = (object)val18; } onActivate.AddListener((UnityAction)obj); val17.delay = actDelay; } public void Spawn() { //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_023b: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_0318: Unknown result type (might be due to invalid IL or missing references) //IL_032f: Unknown result type (might be due to invalid IL or missing references) //IL_0353: Unknown result type (might be due to invalid IL or missing references) //IL_0358: Unknown result type (might be due to invalid IL or missing references) //IL_035c: Unknown result type (might be due to invalid IL or missing references) //IL_036b: Unknown result type (might be due to invalid IL or missing references) //IL_03ea: Unknown result type (might be due to invalid IL or missing references) //IL_03ef: Unknown result type (might be due to invalid IL or missing references) //IL_03b3: Unknown result type (might be due to invalid IL or missing references) //IL_03c4: Unknown result type (might be due to invalid IL or missing references) //IL_041a: Unknown result type (might be due to invalid IL or missing references) //IL_0428: Unknown result type (might be due to invalid IL or missing references) //IL_0486: Unknown result type (might be due to invalid IL or missing references) //IL_048b: Unknown result type (might be due to invalid IL or missing references) //IL_050b: Unknown result type (might be due to invalid IL or missing references) //IL_0510: Unknown result type (might be due to invalid IL or missing references) //IL_0511: Unknown result type (might be due to invalid IL or missing references) //IL_0519: Unknown result type (might be due to invalid IL or missing references) //IL_052d: Unknown result type (might be due to invalid IL or missing references) //IL_0544: Unknown result type (might be due to invalid IL or missing references) //IL_0551: Unknown result type (might be due to invalid IL or missing references) //IL_055e: Unknown result type (might be due to invalid IL or missing references) //IL_0568: Unknown result type (might be due to invalid IL or missing references) //IL_0598: Unknown result type (might be due to invalid IL or missing references) //IL_05a5: Unknown result type (might be due to invalid IL or missing references) //IL_05bc: Unknown result type (might be due to invalid IL or missing references) //IL_05c9: Unknown result type (might be due to invalid IL or missing references) //IL_05d6: Unknown result type (might be due to invalid IL or missing references) //IL_05e3: Unknown result type (might be due to invalid IL or missing references) //IL_0630: Unknown result type (might be due to invalid IL or missing references) //IL_0635: Unknown result type (might be due to invalid IL or missing references) //IL_0636: Unknown result type (might be due to invalid IL or missing references) //IL_063e: Unknown result type (might be due to invalid IL or missing references) //IL_0652: Unknown result type (might be due to invalid IL or missing references) //IL_0669: Unknown result type (might be due to invalid IL or missing references) //IL_0676: Unknown result type (might be due to invalid IL or missing references) //IL_069a: Unknown result type (might be due to invalid IL or missing references) //IL_06e9: Unknown result type (might be due to invalid IL or missing references) //IL_06ff: Unknown result type (might be due to invalid IL or missing references) //IL_070c: Unknown result type (might be due to invalid IL or missing references) //IL_0719: Unknown result type (might be due to invalid IL or missing references) //IL_0730: Unknown result type (might be due to invalid IL or missing references) //IL_073d: Unknown result type (might be due to invalid IL or missing references) //IL_074a: Unknown result type (might be due to invalid IL or missing references) //IL_0df9: Unknown result type (might be due to invalid IL or missing references) //IL_0dfe: Unknown result type (might be due to invalid IL or missing references) //IL_0e15: Unknown result type (might be due to invalid IL or missing references) //IL_0b37: Unknown result type (might be due to invalid IL or missing references) //IL_0b3c: Unknown result type (might be due to invalid IL or missing references) //IL_0b45: Unknown result type (might be due to invalid IL or missing references) //IL_0b75: Unknown result type (might be due to invalid IL or missing references) //IL_0b7a: Unknown result type (might be due to invalid IL or missing references) //IL_0b83: Unknown result type (might be due to invalid IL or missing references) //IL_0bac: Unknown result type (might be due to invalid IL or missing references) //IL_0bb1: Unknown result type (might be due to invalid IL or missing references) //IL_0bb2: Unknown result type (might be due to invalid IL or missing references) //IL_0bba: Unknown result type (might be due to invalid IL or missing references) //IL_0bce: Unknown result type (might be due to invalid IL or missing references) //IL_0be5: Unknown result type (might be due to invalid IL or missing references) //IL_0c01: Unknown result type (might be due to invalid IL or missing references) //IL_0c0e: Unknown result type (might be due to invalid IL or missing references) //IL_0c1b: Unknown result type (might be due to invalid IL or missing references) //IL_0c89: Unknown result type (might be due to invalid IL or missing references) //IL_0c8b: Unknown result type (might be due to invalid IL or missing references) //IL_0ccb: Unknown result type (might be due to invalid IL or missing references) //IL_0cd5: Expected O, but got Unknown //IL_0786: Unknown result type (might be due to invalid IL or missing references) //IL_078b: Unknown result type (might be due to invalid IL or missing references) //IL_078c: Unknown result type (might be due to invalid IL or missing references) //IL_0794: Unknown result type (might be due to invalid IL or missing references) //IL_07a8: Unknown result type (might be due to invalid IL or missing references) //IL_07b5: Unknown result type (might be due to invalid IL or missing references) //IL_07c9: Unknown result type (might be due to invalid IL or missing references) //IL_07e0: Unknown result type (might be due to invalid IL or missing references) //IL_0811: Unknown result type (might be due to invalid IL or missing references) //IL_0816: Unknown result type (might be due to invalid IL or missing references) //IL_0817: Unknown result type (might be due to invalid IL or missing references) //IL_081f: Unknown result type (might be due to invalid IL or missing references) //IL_0833: Unknown result type (might be due to invalid IL or missing references) //IL_0840: Unknown result type (might be due to invalid IL or missing references) //IL_085c: Unknown result type (might be due to invalid IL or missing references) //IL_08d2: Unknown result type (might be due to invalid IL or missing references) //IL_08ed: Unknown result type (might be due to invalid IL or missing references) //IL_08fa: Unknown result type (might be due to invalid IL or missing references) //IL_0911: Unknown result type (might be due to invalid IL or missing references) //IL_091e: Unknown result type (might be due to invalid IL or missing references) //IL_0935: Unknown result type (might be due to invalid IL or missing references) //IL_0942: Unknown result type (might be due to invalid IL or missing references) //IL_098c: Unknown result type (might be due to invalid IL or missing references) //IL_0991: Unknown result type (might be due to invalid IL or missing references) //IL_0992: Unknown result type (might be due to invalid IL or missing references) //IL_099a: Unknown result type (might be due to invalid IL or missing references) //IL_09ae: Unknown result type (might be due to invalid IL or missing references) //IL_09c8: Unknown result type (might be due to invalid IL or missing references) //IL_09f0: Unknown result type (might be due to invalid IL or missing references) //IL_09fd: Unknown result type (might be due to invalid IL or missing references) //IL_0a35: Unknown result type (might be due to invalid IL or missing references) //IL_0a3a: Unknown result type (might be due to invalid IL or missing references) //IL_0a3b: Unknown result type (might be due to invalid IL or missing references) //IL_0a43: Unknown result type (might be due to invalid IL or missing references) //IL_0a57: Unknown result type (might be due to invalid IL or missing references) //IL_0a6e: Unknown result type (might be due to invalid IL or missing references) //IL_0a89: Unknown result type (might be due to invalid IL or missing references) //IL_0a96: Unknown result type (might be due to invalid IL or missing references) //IL_1025: Unknown result type (might be due to invalid IL or missing references) //IL_112a: Unknown result type (might be due to invalid IL or missing references) if (spawned) { return; } GameObject onLevelStartObj = null; bool flag = (Object)(object)MonoSingleton<OnLevelStart>.Instance != (Object)null; if (!flag) { Transform val = ((Component)this).gameObject.transform.Find("OnLevelStart"); if ((Object)(object)val != (Object)null) { flag = (Object)(object)((Component)val).GetComponent<OnLevelStart>() != (Object)null; onLevelStartObj = ((Component)val).gameObject; } } else { onLevelStartObj = ((Component)MonoSingleton<OnLevelStart>.Instance).gameObject; } GameObject val2 = ((Component)this).gameObject; GameObject val3 = Addressables.LoadAssetAsync<GameObject>((object)(secretRoom ? "FirstRoom Secret" : (primeRoom ? "FirstRoom Prime" : (encoreRoom ? "Assets/Prefabs/Levels/Special Rooms/FirstRoom Encore.prefab" : "FirstRoom")))).WaitForCompletion(); Scene activeScene; if (!doNotReplace) { val2 = Object.Instantiate<GameObject>(val3, ((Component)this).transform.parent); if (flag) { Transform? obj = val2.transform.Find("OnLevelStart"); if (obj == null) { activeScene = SceneManager.GetActiveScene(); obj = (from go in ((Scene)(ref activeScene)).GetRootGameObjects() where ((Object)go).name == "OnLevelStart" && (Object)(object)go.transform != (Object)(object)onLevelStartObj select go.transform).FirstOrDefault(); } Transform val4 = obj; if ((Object)(object)val4 != (Object)null) { Object.Destroy((Object)(object)((Component)val4).gameObject); } if ((Object)(object)onLevelStartObj != (Object)null) { onLevelStartObj.transform.SetParent(val2.transform); } } } else { GameObject val5 = Object.Instantiate<GameObject>(val3, ((Component)this).transform.position, ((Component)this).transform.rotation, ((Component)this).transform.parent); Object.Destroy((Object)(object)((Component)val5.transform.Find("Room")).gameObject); if (flag) { Transform val6 = val5.transform.Find("OnLevelStart"); if ((Object)(object)val6 != (Object)null) { Object.Destroy((Object)(object)((Component)val6).gameObject); } else { activeScene = SceneManager.GetActiveScene(); OnLevelStart val7 = (from go in ((Scene)(ref activeScene)).GetRootGameObjects() select go.GetComponent<OnLevelStart>() into ls where (Object)(object)ls != (Object)null && (Object)(object)((Component)ls).gameObject != (Object)(object)onLevelStartObj select ls).FirstOrDefault(); if ((Object)(object)val7 != (Object)null) { Object.Destroy((Object)(object)((Component)val7).gameObject); } } } } MeshCollider[] componentsInChildren = val2.GetComponentsInChildren<MeshCollider>(); MeshFilter val9 = default(MeshFilter); foreach (MeshCollider val8 in componentsInChildren) { if (((Component)val8).gameObject.TryGetComponent<MeshFilter>(ref val9)) { val9.mesh = val8.sharedMesh; } } Transform transform = ((Component)MonoSingleton<NewMovement>.Instance).transform; ((Component)transform).transform.parent = val2.transform; val2.transform.position = ((Component)this).transform.position; val2.transform.rotation = ((Component)this).transform.rotation; ((Component)transform).transform.parent = null; Quaternion rotation = ((Component)this).transform.rotation; UtilsRogue.SetPlayerWorldRotation(Quaternion.Euler(0f, ((Quaternion)(ref rotation)).eulerAngles.y, 0f)); if ((Object)(object)playerSpawnPos != (Object)null) { ((Component)transform).transform.parent = ((Component)playerSpawnPos).transform.parent; ((Component)transform).transform.localPosition = playerSpawnPos.localPosition; UtilsRogue.SetPlayerWorldRotation(playerSpawnPos.rotation); ((Component)transform).transform.SetParent((Transform)null); } MonoSingleton<StatsManager>.Instance.spawnPos = ((Component)transform).transform.position; try { Transform val10 = val2.transform.Find("Room/FinalDoor"); FinalDoor component = ((Component)val10).GetComponent<FinalDoor>(); Camera main = Camera.main; main.backgroundColor = backgroundColor; main.clearFlags = cameraFillMode; FinalDoorOpener component2 = ((Component)val2.transform.Find("Room/FinalDoor/FinalDoorOpener")).GetComponent<FinalDoorOpener>(); component2.startMusic = startMusic; FinalDoor component3 = ((Component)val2.transform.Find("Room/FinalDoor")).GetComponent<FinalDoor>(); Transform obj2 = ((Component)MonoSingleton<NewMovement>.Instance).transform.Find("Canvas"); if (obj2 == null) { activeScene = SceneManager.GetActiveScene(); obj2 = (from o in ((Scene)(ref activeScene)).GetRootGameObjects() where ((Object)o).name == "Canvas" select o).First().transform; } Transform val11 = obj2; GameObject val12 = null; if (enableHellMap) { Deserialize(); RectTransform val13 = MakeRect(val11); ((Object)val13).name = "Hellmap"; val12 = ((Component)val13).gameObject; Vector2 anchorMin = (val13.anchorMax = new Vector2(0.5f, 0.5f)); val13.anchorMin = anchorMin; val13.pivot = new Vector2(0.5f, 0.5f); val13.sizeDelta = new Vector2(250f, 650f); val13.anchoredPosition = Vector2.zero; ((Transform)val13).localScale = Vector3.one * 0.82244f; ((Transform)val13).SetAsFirstSibling(); RectTransform val15 = MakeRect(((Component)val13).transform); ((Object)val15).name = "Hellmap Container"; val15.anchorMin = Vector2.zero; val15.anchorMax = Vector2.one; val15.pivot = new Vector2(0.5f, 0.5f); val15.sizeDelta = Vector2.zero; val15.anchoredPosition = Vector2.zero; ((Transform)val15).localScale = Vector3.one; float num2 = 0f; Stack<RectTransform> stack = new Stack<RectTransform>(); foreach (LayerInfoRogue layersAndLevel in layersAndLevels) { RectTransform val16 = MakeRect((Transform)(object)val15); anchorMin = (val16.anchorMax = new Vector2(0f, 1f)); val16.anchorMin = anchorMin; val16.sizeDelta = new Vector2(250f, 50f); val16.pivot = new Vector2(0f, 1f); ((Transform)val16).localScale = Vector3.one; val16.anchoredPosition = new Vector2(0f, (num2 == 0f) ? (-3.051758E-05f) : num2); num2 -= 50f; Text val18 = MakeText((Transform)(object)val16); val18.text = layersAndLevel.layerName; val18.fontSize = 36; val18.font = UtilsRogue.gameFont; val18.alignment = (TextAnchor)3; ((Graphic)val18).color = Color.white; RectTransform component4 = ((Component)val18).GetComponent<RectTransform>(); component4.anchorMin = Vector2.zero; component4.anchorMax = Vector2.one; component4.sizeDelta = Vector2.zero; component4.pivot = new Vector2(0.5f, 0.5f); ((Transform)component4).localScale = Vector3.one; component4.anchoredPosition = Vector2.zero; string[] layerLevels = layersAndLevel.layerLevels; foreach (string text in layerLevels) { RectTransform val19 = MakeRect((Transform)(object)val15); anchorMin = (val19.anchorMax = new Vector2(0f, 1f)); val19.anchorMin = anchorMin; val19.pivot = new Vector2(0f, 1f); ((Transform)val19).localScale = Vector3.one; val19.anchoredPosition = new Vector2(60f, num2); val19.sizeDelta = new Vector2(125f, 45f); num2 -= 50f; RectTransform val21 = MakeRect(((Component)val19).transform); anchorMin = (val21.anchorMax = new Vector2(0.5f, 0.5f)); val21.anchorMin = anchorMin; val21.sizeDelta = new Vector2(25f, 9f); val21.anchoredPosition = Vector2.zero; ((Transform)val21).localScale = new Vector3(5f, 5f, 5f); Image val23 = ((Component)val21).gameObject.AddComponent<Image>(); val23.type = (Type)1; val23.sprite = UtilsRogue.levelPanel; val23.pixelsPerUnitMultiplier = 1f; Text val24 = MakeText(((Component)val19).transform); val24.text = text; val24.font = UtilsRogue.gameFont; val24.fontSize = 32; val24.alignment = (TextAnchor)4; ((Graphic)val24).color = Color.black; RectTransform component5 = ((Component)val24).gameObject.GetComponent<RectTransform>(); component5.anchorMin = Vector2.zero; component5.anchorMax = Vector2.one; component5.pivot = new Vector2(0.5f, 0.5f); component5.sizeDelta = Vector2.zero; component5.anchoredPosition = new Vector2(0f, 0f); ((Transform)component5).localScale = Vector3.one; } if (layersAndLevel.layerLevels.Length != 0) { RectTransform val25 = MakeRect((Transform)(object)val15); anchorMin = (val25.anchorMax = new Vector2(0.5f, 1f)); val25.anchorMin = anchorMin; val25.pivot = new Vector2(0.5f, 0f); val25.anchoredPosition = new Vector2(-95f, num2 + 25f); val25.sizeDelta = new Vector2(3f, (float)layersAndLevel.layerLevels.Length * 50f - 27.5f); ((Transform)val25).localScale = Vector3.one; ((Component)val25).gameObject.AddComponent<Image>(); for (int num4 = 0; num4 < layersAndLevel.layerLevels.Length; num4++) { RectTransform val27 = MakeRect((Transform)(object)val25); anchorMin = (val27.anchorMax = new Vector2(0.5f, 0f)); val27.anchorMin = anchorMin; val27.pivot = new Vector2(0f, 0.5f); val27.sizeDelta = new Vector2(20f, 3f); val27.anchoredPosition = new Vector2(-1.5f, (float)num4 * 50f); ((Transform)val27).localScale = Vector3.one; ((Component)val27).gameObject.AddComponent<Image>(); } stack.Push(val25); } } while (stack.Count != 0) { RectTransform val29 = stack.Pop(); ((Transform)val29).SetAsLastSibling(); } Vector2 anchoredPosition = ((Component)((Transform)val15).GetChild(GetChildIndexFromLayerAndLevel(layerIndexToStartFrom, levelIndexToStartFrom))).GetComponent<RectTransform>().anchoredPosition; ((Vector2)(ref anchoredPosition))..ctor(210f, anchoredPosition.y - 22.5f); Vector2 anchoredPosition2 = ((Component)((Transform)val15).GetChild(GetChildIndexFromLayerAndLevel(layerIndexToEndAt, levelIndexToEndAt))).GetComponent<RectTransform>().anchoredPosition; ((Vector2)(ref anchoredPosition2))..ctor(210f, anchoredPosition2.y - 22.5f); RectTransform val30 = MakeRect((Transform)(object)val13); anchorMin = (val30.anchorMax = new Vector2(0f, 1f)); val30.anchorMin = anchorMin; val30.pivot = new Vector2(0.5f, 0.5f); val30.sizeDelta = new Vector2(35f, 35f); ((Transform)val30).rotation = Quaternion.Euler(0f, 0f, 90f); ((Transform)val30).localScale = Vector3.one; val30.anchoredPosition = anchoredPosition; AudioSource val32 = ((Component)val30).gameObject.AddComponent<AudioSource>(); val32.playOnAwake = false; val32.loop = false; val32.clip = hellmapBeepClip; val32.volume = 0.1f; Image val33 = ((Component)val30).gameObject.AddComponent<Image>(); val33.sprite = UtilsRogue.hellmapArrow; CustomHellmapCursor customHellmapCursor = ((Component)val30).gameObject.AddComponent<CustomHellmapCursor>(); customHellmapCursor.targetPosition = anchoredPosition2; customHellmapCursor.aud = val32; customHellmapCursor.targetImage = val33; ObjectActivator val34 = ((Component)UnityUtilsRogue.GetComponentInChildrenRecursive<PlayerActivator>(val2.transform)).gameObject.AddComponent<ObjectActivator>(); val34.dontActivateOnEnable = true; val34.oneTime = true; val34.events = new UltrakillEvent(); val34.events.toDisActivateObjects = (GameObject[])(object)new GameObject[1] { ((Component)val13).gameObject }; } if (convertToUpwardRoom) { foreach (GameObject item in upwardRoomOutOfBoundsToDisable) { item.SetActive(false); } List<GameObject> list = new List<GameObject>(); if ((Object)(object)val12 != (Object)null) { list.Add(val12); } List<GameObject> list2 = new List<GameObject>(); list2.AddRange(upwardRoomOutOfBoundsToDisable); ConvertToAscendingFirstRoom(val2, upwardRoomDoorCloseClip, list2, list, doNotReplace); } if (!encoreRoom) { return; } FinalRank instance = MonoSingleton<FinalRank>.Instance; if (!((Object)(object)instance != (Object)null)) { return; } Transform val35 = ((Component)instance).transform.Find("Extra Info"); RectTransform val36 = default(RectTransform); if ((Object)(object)val35 != (Object)null && ((Component)val35).gameObject.TryGetComponent<RectTransform>(ref val36)) { val36.anchoredPosition = Vector2.op_Implicit(new Vector3(0f, 200f, 0f)); val36.sizeDelta = new Vector2(480f, 180f); } Transform val37 = ((Component)instance).transform.Find("Secrets - Title"); Transform val38 = ((Component)instance).transform.Find("Secrets - Info"); Transform val39 = (((Object)(object)val38 == (Object)null) ? null : ((Component)val38).transform.Find("Text (1)")); Transform val40 = ((Component)instance).transform.Find("Challenge - Title"); Transform val41 = ((Component)instance).transform.Find("Challenge"); List<GameObject> list3 = instance.toAppear.ToList(); if ((Object)(object)val37 != (Object)null && !list3.Contains(((Component)val37).gameObject)) { list3.Insert(list3.Count - 1, ((Component)val37).gameObject); } if ((Object)(object)val38 != (Object)null && !list3.Contains(((Component)val38).gameObject)) { list3.Insert(list3.Count - 1, ((Component)val38).gameObject); } if ((Object)(object)val39 != (Object)null && !list3.Contains(((Component)val39).gameObject)) { list3.Insert(list3.Count - 1, ((Component)val39).gameObject); } if ((Object)(object)val40 != (Object)null && !list3.Contains(((Component)val40).gameObject)) { ((Component)val40).gameObject.SetActive(true); list3.Insert(list3.Count - 1, ((Component)val40).gameObject); } if ((Object)(object)val41 != (Object)null && !list3.Contains(((Component)val41).gameObject)) { list3.Insert(list3.Count - 1, ((Component)val41).gameObject); } instance.toAppear = list3.ToArray(); Transform val42 = ((Component)val11).transform.Find("Level Stats Controller"); if (!((Object)(object)val42 != (Object)null)) { return; } LevelStats componentInChildren = ((Component)val42).GetComponentInChildren<LevelStats>(true); ((Component)componentInChildren).GetComponent<RectTransform>().sizeDelta = new Vector2(285f, 315f); Transform obj3 = ((Component)componentInChildren).transform.Find("Challenge Title/Challenge"); componentInChildren.challenge = ((obj3 != null) ? ((Component)obj3).GetComponent<TMP_Text>() : null); Transform obj4 = ((Component)componentInChildren).transform.Find("Challenge Title"); if (obj4 != null) { ((Component)obj4).gameObject.SetActive(true); } Transform obj5 = ((Component)componentInChildren).transform.Find("Secrets Title"); if (obj5 != null) { ((Component)obj5).gameObject.SetActive(true); } List<Image> list4 = new List<Image>(); for (int num5 = 5; num5 >= 1; num5--) { Transform val43 = ((Component)componentInChildren).transform.Find($"Secrets Title/Secret {num5}"); if ((Object)(object)val43 != (Object)null) { list4.Add(((Component)val43).GetComponent<Image>()); } } componentInChildren.secrets = list4.ToArray(); Transform val44 = ((Component)componentInChildren).transform.Find("Assists Title"); ((Component)val44).GetComponent<RectTransform>().anchoredPosition = new Vector2(10f, -275f); } catch (Exception ex) { throw ex; } finally { spawned = true; } int GetChildIndexFromLayerAndLevel(int layer, int level) { int num6 = 0; for (int i = 0; i < layer; i++) { num6 += 1 + levelSizes[i]; } return num6 + 1 + level; } } public void Awake() { Spawn(); } public void Start() { if ((Object)(object)MonoSingleton<OnLevelStart>.Instance != (Object)null) { MonoSingleton<OnLevelStart>.Instance.levelNameOnStart = displayLevelTitle; } else { Debug.LogWarning((object)"Could not find OnLevelStart"); } if (!doNotReplace) { Object.Destroy((Object)(object)((Component)this).gameObject); } } } public class FloorTheme : MonoBehaviour { [Header("Properties")] public int StartFloor; public string Name; public UltrakillEvent OnThemeSwitch; [Header("Room Prefabs")] [Tooltip("Normal combat room prefabs — one is chosen at random per room.")] public List<Room> roomPrefabs = new List<Room>(); [Tooltip("Optional dedicated prefab for each special room type.\nFalls back to a random roomPrefab when left empty.")] public Room treasureRoomPrefab; public Room shopRoomPrefab; public Room gamblingRoomPrefab; public Room bossRoomPrefab; public Room planetariumPrefab; public Room startRoomPrefab; public Room challengeRoomPrefab; [Tooltip("Other special rooms")] public List<Room> specialRoomPrefabs = new List<Room>(); [Tooltip("SECRET ROOOMMMS")] public List<Room> SecretRoomPrefabs = new List<Room>(); public GameObject DefaultCap; [Tooltip("Large room prefabs (RoomSizeWidth > 1 or RoomSizeHeight > 1). These are never instantiated directly — they are used as data sources to spawn sub-room GameObjects that each occupy one grid cell.")] public List<Room> largeRoomPrefabs = new List<Room>(); public List<AudioClip> CalmMusic = new List<AudioClip>(); public List<AudioClip> UnCalmMusic = new List<AudioClip>(); [Header("Room Size")] public float roomWidth = 60f; public float roomHeight = 30f; } public class Gambler : MonoBehaviour { private const float EXPLOSION_BASE_CHANCE = 0.02f; private const float EXPLOSION_CHANCE_RAMP = 0.02f; private const float OFFSET_RAMP = 3f; private float offset = 0f; public GameObject ExplosionWarningThing; public ShopZone zone; private int useCount = 0; private bool exploded = false; private Coroutine activeRoutine = null; private Transform itemPlacementThing; public GameObject Slot1; public GameObject Slot2; public GameObject Slot3; public Texture2D coinText; public Texture2D keyText; private List<GameObject> slots = new List<GameObject>(); private const float ITEM_CHANCE = 0.35f; private const float COIN_CHANCE = 0.2f; private const float KEY_CHANCE = 0.05f; private Texture skullText; private List<Texture2D> texts = new List<Texture2D>(); private float Threshold = 240f; public void Gamble() { if (exploded || activeRoutine != null) { return; } RogueDifficultyManager instance = RogueDifficultyManager.Instance; if ((Object)(obj