using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using EnemiesReturns.Configuration; using EnemiesReturns.Enemies.Colossus; using EnemiesReturns.Enemies.Swift; using FRCSharp; using FSCStage; using HG; using HG.Reflection; using Promenade.Content; using R2API; using RoR2; using RoR2.ContentManagement; using RoR2.Navigation; using Sandswept; using ShaderSwapper; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: OptIn] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] namespace FSCStage { public class IsStarstorm2 { private static bool? _enabled; public static bool enabled { get { if (!_enabled.HasValue) { _enabled = Chainloader.PluginInfos.ContainsKey("com.TeamMoonstorm.MSU") && Chainloader.PluginInfos.ContainsKey("com.TeamMoonstorm"); } return _enabled.Value; } } } public class IsEnemiesReturns { private static bool? _enabled; public static bool enabled { get { if (!_enabled.HasValue) { _enabled = Chainloader.PluginInfos.ContainsKey("com.Viliger.EnemiesReturns"); } return _enabled.Value; } } } public class IsSandswept { private static bool? _enabled; public static bool enabled { get { if (!_enabled.HasValue) { _enabled = Chainloader.PluginInfos.ContainsKey("com.TeamSandswept.Sandswept"); } return _enabled.Value; } } } public class IsForgottenRelics { private static bool? _enabled; public static bool enabled { get { if (!_enabled.HasValue) { _enabled = Chainloader.PluginInfos.ContainsKey("PlasmaCore.ForgottenRelics"); } return _enabled.Value; } } } } namespace Promenade { internal static class Log { private static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } public class EnemiesReturnsCompat { public static void AddEnemies() { //IL_001e: 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) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: 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) //IL_005b: Expected O, but got Unknown //IL_005b: 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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Expected O, but got Unknown //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Expected O, but got Unknown //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Expected O, but got Unknown //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Expected O, but got Unknown if (Promenade.toggleColossus.Value && General.EnableColossus.Value) { DirectorCard card = new DirectorCard { spawnCard = (SpawnCard)SpawnCards.cscColossusGrassy, spawnDistance = (MonsterSpawnDistance)0, selectionWeight = Colossus.SelectionWeight.Value, minimumStageCompletions = Colossus.MinimumStageCompletion.Value }; DirectorCardHolder val = new DirectorCardHolder { Card = card, MonsterCategory = (MonsterCategory)4 }; if (!Colossus.DefaultStageList.Value.Contains("observatory_wormsworms")) { Helpers.AddNewMonsterToStage(val, false, (Stage)1, "observatory_wormsworms"); Log.Info("Colossus added to ancient observatory's spawn pool."); } if (!Colossus.DefaultStageList.Value.Contains("itobservatory_wormsworms")) { Helpers.AddNewMonsterToStage(val, false, (Stage)1, "itobservatory_wormsworms"); Log.Info("Colossus added to ancient observatory's simulacrum spawn pool."); } } if (Promenade.toggleSwift.Value && General.EnableSwift.Value) { DirectorCard card2 = new DirectorCard { spawnCard = (SpawnCard)SpawnCards.cscSwiftDefault, spawnDistance = (MonsterSpawnDistance)2, selectionWeight = Swift.SelectionWeight.Value, minimumStageCompletions = Swift.MinimumStageCompletion.Value }; DirectorCardHolder val2 = new DirectorCardHolder { Card = card2, MonsterCategory = (MonsterCategory)2 }; if (!Swift.DefaultStageList.Value.Contains("observatory_wormsworms")) { Helpers.AddNewMonsterToStage(val2, false, (Stage)1, "observatory_wormsworms"); Log.Info("Swift added to ancient observatory's spawn pool."); } Swift.DefaultStageList.Value.Contains("itobservatory_wormsworms"); } } } public class ForgottenRelicsCompat { public static CharacterSpawnCard CannonballJellyfishCard; public static void AddEnemies() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Expected O, but got Unknown //IL_003f: 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_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_0061: Expected O, but got Unknown if (Promenade.toggleBrassMonolith.Value && !VF2ConfigManager.disableBrassMonolith.Value) { DirectorCardHolder val = new DirectorCardHolder { Card = new DirectorCard { spawnCard = (SpawnCard)VF2ContentPackProvider.cscBrassMonolith, selectionWeight = 1 }, MonsterCategory = (MonsterCategory)4 }; Helpers.AddNewMonsterToStage(val, false, (Stage)1, "observatory_wormsworms"); Helpers.AddNewMonsterToStage(val, false, (Stage)1, "itobservatory_wormsworms"); Log.Debug("Brass Monolith added to ancient observatory spawn pool."); } } } public class SandsweptCompat { public static CharacterSpawnCard CannonballJellyfishCard; public static bool FindEnabledConfig(string configName) { ConfigEntryBase[] configEntries = Main.config.GetConfigEntries(); foreach (ConfigEntryBase val in configEntries) { if (((object)val.Definition).ToString() == configName) { return (bool)val.BoxedValue; } } return false; } public static int FindCreditConfig(string configName) { ConfigEntryBase[] configEntries = Main.config.GetConfigEntries(); foreach (ConfigEntryBase val in configEntries) { if (((object)val.Definition).ToString() == configName) { return (int)val.DefaultValue; } } return 115; } public static void AddEnemies() { //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_006a: 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_0080: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Expected O, but got Unknown //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Expected O, but got Unknown //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Expected O, but got Unknown //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Expected O, but got Unknown //IL_0112: Expected O, but got Unknown bool flag = FindEnabledConfig("Enemies :: Cannonball Jellyfish.Enabled"); if (Promenade.toggleCannonballJellyfish.Value && flag) { CannonballJellyfishCard = ScriptableObject.CreateInstance(); ((Object)CannonballJellyfishCard).name = "cscAOCannonballJellyfish"; ((SpawnCard)CannonballJellyfishCard).prefab = Main.assets.LoadAsset("CannonJellyMaster.prefab"); ((SpawnCard)CannonballJellyfishCard).sendOverNetwork = true; ((SpawnCard)CannonballJellyfishCard).hullSize = (HullClassification)0; ((SpawnCard)CannonballJellyfishCard).nodeGraphType = (GraphType)1; ((SpawnCard)CannonballJellyfishCard).requiredFlags = (NodeFlags)0; ((SpawnCard)CannonballJellyfishCard).forbiddenFlags = (NodeFlags)2; ((SpawnCard)CannonballJellyfishCard).directorCreditCost = FindCreditConfig("Enemies :: Cannonball Jellyfish.Director Credit Cost"); ((SpawnCard)CannonballJellyfishCard).occupyPosition = false; CannonballJellyfishCard.loadout = new SerializableLoadout(); CannonballJellyfishCard.noElites = false; CannonballJellyfishCard.forbiddenAsBoss = false; DirectorCardHolder val = new DirectorCardHolder { Card = new DirectorCard { spawnCard = (SpawnCard)CannonballJellyfishCard, selectionWeight = 1 }, MonsterCategory = (MonsterCategory)2 }; Helpers.AddNewMonsterToStage(val, false, (Stage)1, "observatory_wormsworms"); Helpers.AddNewMonsterToStage(val, false, (Stage)1, "itobservatory_wormsworms"); Log.Debug("Cannonball Jellyfish added to ancient observatory spawn pool."); } } } [BepInPlugin("wormsworms.Ancient_Observatory", "Ancient_Observatory", "1.1.1")] public class Promenade : BaseUnityPlugin { public const string Author = "wormsworms"; public const string Name = "Ancient_Observatory"; public const string Version = "1.1.1"; public const string GUID = "wormsworms.Ancient_Observatory"; public static Promenade instance; public static ConfigEntry enableRegular; public static ConfigEntry enableSimulacrum; public static ConfigEntry stage1Simulacrum; public static ConfigEntry toggleSwift; public static ConfigEntry toggleColossus; public static ConfigEntry toggleCannonballJellyfish; public static ConfigEntry toggleBrassMonolith; private void Awake() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown instance = this; Log.Init(((BaseUnityPlugin)this).Logger); ConfigSetup(); ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(GiveToRoR2OurContentPackProviders); Language.collectLanguageRootFolders += CollectLanguageRootFolders; SceneManager.sceneLoaded += SceneSetup; RoR2Application.onLoadFinished = (Action)Delegate.Combine(RoR2Application.onLoadFinished, new Action(AddModdedEnemies)); } public static void AddModdedEnemies() { if (IsEnemiesReturns.enabled) { EnemiesReturnsCompat.AddEnemies(); } if (IsSandswept.enabled) { SandsweptCompat.AddEnemies(); } if (IsForgottenRelics.enabled) { ForgottenRelicsCompat.AddEnemies(); } } public void SceneSetup(Scene newScene, LoadSceneMode loadSceneMode) { if (((Scene)(ref newScene)).name == "itobservatory_wormsworms") { GameObject.Find("Directional Light").GetComponent().shadowStrength = 0.3f; } if (!(((Scene)(ref newScene)).name == "observatory_wormsworms")) { return; } GameObject.Find("ShatteredMoonMesh").layer = 9; string[] array = new string[26] { "MS_FloatingIsland1", "Final Zone/Grass", "ChainlinkSet", "ChainlinkSet (1)", "ChainlinkSet (2)", "ChainlinkSet (3)", "TP Area Holder/MiscProps", "LShapeScaffolding", "StaircaseScaffolding", "Formula/spmSMGrassSmallCluster", "Formula/spmSMGrassSmallCluster (1)", "Formula/spmSMGrassSmallCluster (2)", "Formula/spmSMFruitPlant", "PortalDialer/spmSMGrassSmallCluster (3)", "PortalDialer/spmSMGrassSmallCluster (4)", "PortalDialerButton 1", "PortalDialerButton 2", "PortalDialerButton 3", "PortalDialerButton 4", "PortalDialerButton 5", "PortalDialerButton 6", "PortalDialerButton 7", "PortalDialerButton 8", "PortalDialerButton 9", "PortalDialer", "Final Zone/MiscProps" }; foreach (string text in array) { if ((Object)(object)GameObject.Find(text) != (Object)null) { Object.Destroy((Object)(object)GameObject.Find(text)); } } Material metalMaterial = PromenadeContent.MetalMaterial; GameObject val = GameObject.Find("Final Zone/PowerLines"); string[] array2 = new string[6] { "LOP_ArtifactLaptop(Clone)/FW_Crate", "mega teleporter/PowerLine, Huge", "Powerline/SM_PowerLine(Clone)", "FW_CellTowerSnowy(Clone)/HumanLargeCellTowerMesh", "LOP_ArtifactLaptop(Clone)/FW_Crate", "PowerCoil, 1/PowerLine1 (1)" }; MeshRenderer val2 = default(MeshRenderer); for (int j = 0; j < val.transform.childCount; j++) { if (((Object)val.transform.GetChild(j)).name.Contains("PowerLine")) { ((Component)val.transform.GetChild(j)).TryGetComponent(ref val2); ((Renderer)val2).material = metalMaterial; } } array = array2; MeshRenderer val3 = default(MeshRenderer); foreach (string text2 in array) { if ((Object)(object)GameObject.Find(text2) != (Object)null) { GameObject.Find(text2).TryGetComponent(ref val3); ((Renderer)val3).material = metalMaterial; } } } private void Destroy() { Language.collectLanguageRootFolders -= CollectLanguageRootFolders; } private static void GiveToRoR2OurContentPackProviders(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)new ContentProvider()); } public void CollectLanguageRootFolders(List folders) { folders.Add(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "Language")); folders.Add(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "Plugins/Language")); } private void ConfigSetup() { enableRegular = ((BaseUnityPlugin)this).Config.Bind("00 - Stages", "Enable Ancient Observatory", true, "If set to false, Ancient Observatory will never appear in regular runs."); enableSimulacrum = ((BaseUnityPlugin)this).Config.Bind("00 - Stages", "Enable Simulacrum Variant", true, "If set to false, Ancient Observatory will never appear in the Simulacrum."); stage1Simulacrum = ((BaseUnityPlugin)this).Config.Bind("00 - Stages", "Enable Simulacrum Variant on Stage 1", true, "If set to false, Ancient Observatory will only appear after clearing at least one stage in the Simulacrum."); toggleSwift = ((BaseUnityPlugin)this).Config.Bind("01 - Monsters: EnemiesReturns", "Enable Swift", true, "If set to false, Swifts will not appear in Ancient Observatory."); toggleColossus = ((BaseUnityPlugin)this).Config.Bind("01 - Monsters: EnemiesReturns", "Enable Colossus", true, "If set to false, Colossi will not appear in Ancient Observatory."); toggleCannonballJellyfish = ((BaseUnityPlugin)this).Config.Bind("03 - Monsters: Sandswept", "Enable Cannonball Jellyfish", true, "If set to false, Cannonball Jellyfish will not appear in Ancient Observatory."); toggleBrassMonolith = ((BaseUnityPlugin)this).Config.Bind("02 - Monsters: Forgotten Relics", "Enable Brass Monolith", true, "If set to false, Brass Monoliths will not appear in Ancient Observatory."); } } } namespace Promenade.Content { public class ContentProvider : IContentPackProvider { private readonly ContentPack _contentPack = new ContentPack(); public static string assetDirectory; public string identifier => "wormsworms.Ancient_Observatory.ContentProvider"; public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { _contentPack.identifier = identifier; string assetsFolderFullPath = (assetDirectory = Path.GetDirectoryName(typeof(ContentProvider).Assembly.Location)); AssetBundle scenesAssetBundle = null; yield return LoadAssetBundle(Path.Combine(assetsFolderFullPath, "ObservatoryScene"), args.progressReceiver, delegate(AssetBundle assetBundle) { scenesAssetBundle = assetBundle; }); AssetBundle assetsAssetBundle = null; yield return LoadAssetBundle(Path.Combine(assetsFolderFullPath, "ObservatoryAssets"), args.progressReceiver, delegate(AssetBundle assetBundle) { assetsAssetBundle = assetBundle; }); yield return PromenadeContent.LoadAssetBundlesAsync(scenesAssetBundle, assetsAssetBundle, args.progressReceiver, _contentPack); } private IEnumerator LoadAssetBundle(string assetBundleFullPath, IProgress progress, Action onAssetBundleLoaded) { AssetBundleCreateRequest assetBundleCreateRequest = AssetBundle.LoadFromFileAsync(assetBundleFullPath); while (!((AsyncOperation)assetBundleCreateRequest).isDone) { progress.Report(((AsyncOperation)assetBundleCreateRequest).progress); yield return null; } onAssetBundleLoaded(assetBundleCreateRequest.assetBundle); } public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { ContentPack.Copy(_contentPack, args.output); args.ReportProgress(1f); yield break; } public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { args.ReportProgress(1f); yield break; } } public static class PromenadeContent { internal const string ScenesAssetBundleFileName = "ObservatoryScene"; internal const string AssetsAssetBundleFileName = "ObservatoryAssets"; private static AssetBundle _scenesAssetBundle; private static AssetBundle _assetsAssetBundle; internal static UnlockableDef[] UnlockableDefs; internal static SceneDef[] SceneDefs; internal static SceneDef PromenadeSceneDef; internal static Sprite PromenadeSceneDefPreviewSprite; internal static Material PromenadeBazaarSeer; internal static SceneDef SimuSceneDef; internal static Sprite SimuSceneDefPreviewSprite; internal static Material SimuBazaarSeer; internal static Material MetalMaterial; public static List SwappedMaterials = new List(); internal static IEnumerator LoadAssetBundlesAsync(AssetBundle scenesAssetBundle, AssetBundle assetsAssetBundle, IProgress progress, ContentPack contentPack) { _scenesAssetBundle = scenesAssetBundle; _assetsAssetBundle = assetsAssetBundle; IEnumerator upgradeStubbedShaders = ShaderSwapper.UpgradeStubbedShadersAsync(_assetsAssetBundle); while (upgradeStubbedShaders.MoveNext()) { yield return upgradeStubbedShaders.Current; } yield return LoadAllAssetsAsync(assetsAssetBundle, progress, (Action)delegate(UnlockableDef[] assets) { contentPack.unlockableDefs.Add(assets); }); yield return LoadAllAssetsAsync(_assetsAssetBundle, progress, (Action)delegate(Material[] assets) { MetalMaterial = assets.First((Material a) => ((Object)a).name == "matPRMMetal"); }); yield return LoadAllAssetsAsync(_assetsAssetBundle, progress, (Action)delegate(Sprite[] assets) { PromenadeSceneDefPreviewSprite = assets.First((Sprite a) => ((Object)a).name == "texAOScenePreview"); SimuSceneDefPreviewSprite = assets.First((Sprite a) => ((Object)a).name == "texAOScenePreview"); }); yield return LoadAllAssetsAsync(_assetsAssetBundle, progress, (Action)delegate(SceneDef[] assets) { SceneDefs = assets; PromenadeSceneDef = SceneDefs.First((SceneDef sd) => sd.baseSceneNameOverride == "observatory_wormsworms"); SimuSceneDef = SceneDefs.First((SceneDef sd) => sd.baseSceneNameOverride == "itobservatory_wormsworms"); Log.Debug(PromenadeSceneDef.nameToken); Log.Debug(SimuSceneDef.nameToken); contentPack.sceneDefs.Add(assets); }); PromenadeSceneDef.portalMaterial = StageRegistration.MakeBazaarSeerMaterial((Texture2D)PromenadeSceneDef.previewTexture); AsyncOperationHandle mainTrackDefRequest = Addressables.LoadAssetAsync((object)"RoR2/Base/Common/MusicTrackDefs/muSong14.asset"); while (!mainTrackDefRequest.IsDone) { yield return null; } AsyncOperationHandle simuTrackDefRequest = Addressables.LoadAssetAsync((object)"RoR2/Base/Common/MusicTrackDefs/muSong08.asset"); while (!mainTrackDefRequest.IsDone) { yield return null; } AsyncOperationHandle bossTrackDefRequest = Addressables.LoadAssetAsync((object)"RoR2/Base/Common/MusicTrackDefs/muSong23.asset"); while (!bossTrackDefRequest.IsDone) { yield return null; } PromenadeSceneDef.mainTrack = mainTrackDefRequest.Result; PromenadeSceneDef.bossTrack = bossTrackDefRequest.Result; SimuSceneDef.mainTrack = simuTrackDefRequest.Result; SimuSceneDef.bossTrack = bossTrackDefRequest.Result; if (Promenade.enableRegular.Value) { StageRegistration.RegisterSceneDefToNormalProgression(PromenadeSceneDef, 1f, true, true); } if (Promenade.enableSimulacrum.Value && Promenade.stage1Simulacrum.Value) { Simulacrum.RegisterSceneToSimulacrum(SimuSceneDef); } else if (Promenade.enableSimulacrum.Value && !Promenade.stage1Simulacrum.Value) { Simulacrum.RegisterSceneToSimulacrum(SimuSceneDef, canBeStage1: false); } } internal static void Unload() { _assetsAssetBundle.Unload(true); _scenesAssetBundle.Unload(true); } private static IEnumerator LoadAllAssetsAsync(AssetBundle assetBundle, IProgress progress, Action onAssetsLoaded) where T : Object { AssetBundleRequest sceneDefsRequest = assetBundle.LoadAllAssetsAsync(); while (!((AsyncOperation)sceneDefsRequest).isDone) { progress.Report(((AsyncOperation)sceneDefsRequest).progress); yield return null; } onAssetsLoaded(sceneDefsRequest.allAssets.Cast().ToArray()); } } public static class Simulacrum { public static void RegisterSceneToSimulacrum(SceneDef sceneDef, bool canBeStage1 = true, float weight = 1f) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_002f: 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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0043: 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_004a: 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) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) SceneCollection val = Addressables.LoadAssetAsync((object)"RoR2/DLC1/GameModes/InfiniteTowerRun/SceneGroups/sgInfiniteTowerStageX.asset").WaitForCompletion(); SceneCollection val2 = Addressables.LoadAssetAsync((object)"RoR2/DLC1/GameModes/InfiniteTowerRun/SceneGroups/sgInfiniteTowerStage1.asset").WaitForCompletion(); List list = new List(); Enumerator enumerator = val.sceneEntries.GetEnumerator(); try { while (enumerator.MoveNext()) { SceneEntry current = enumerator.Current; if ((Object)(object)current.sceneDef == (Object)(object)sceneDef) { Log.Error("SceneDef " + sceneDef.cachedName + " is already registered into the Simulacrum"); return; } if (current.sceneDef.hasAnyDestinations) { list.Add(current.sceneDef.destinationsGroup); } } } finally { ((IDisposable)enumerator).Dispose(); } SceneCollection val3 = ScriptableObject.CreateInstance(); ((Object)val3).name = "sgInfiniteTowerStageX" + sceneDef.cachedName; val3._sceneEntries = val._sceneEntries; sceneDef.destinationsGroup = val3; SceneEntry val4 = default(SceneEntry); val4.sceneDef = sceneDef; val4.weightMinusOne = weight - 1f; SceneEntry val5 = val4; ArrayUtils.ArrayAppend(ref val._sceneEntries, ref val5); if (canBeStage1) { ArrayUtils.ArrayAppend(ref val2._sceneEntries, ref val5); } foreach (SceneCollection item in list) { ArrayUtils.ArrayAppend(ref item._sceneEntries, ref val5); } } } }