using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Nyxpiri.ULTRAKILL.NyxLib; using Nyxpiri.Unity.Collections; using ULTRAKILL.Portal; using ULTRAKILL.Portal.Geometry; using UnityEngine; using UnityEngine.SceneManagement; [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: AssemblyVersion("0.0.0.0")] namespace Nyxpiri.ULTRAKILL.Cyberloop; public static class ArenaInfo { public static Vector3 Center { get; private set; } = new Vector3(0f, 0f, 62.5f); public static float Width => 40f; public static float InvDeathHeight => 110f; public static float DeathHeight => -110f; } public static class Assets { public static GameObject InfPortalPrefab; internal static void Initialize() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown ScenesEvents.OnSceneWasLoaded += new OnSceneWasLoadedEventHandler(OnSceneLoaded); } private static void OnSceneLoaded(Scene scene, string levelName, string sceneName) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) InfPortalPrefab = new GameObject(); Portal val = InfPortalPrefab.AddComponent(); InfPortalPrefab.SetActive(false); Object.DontDestroyOnLoad((Object)(object)InfPortalPrefab); GameObject val2 = new GameObject(); val2.transform.parent = InfPortalPrefab.gameObject.transform; GameObject val3 = new GameObject(); val3.transform.parent = InfPortalPrefab.gameObject.transform; val.exit = val3.transform; val.entry = val2.transform; val.shape = (IPortalShape)(object)default(PlaneShape); } } public static class Cheats { public const string Cyberloop = "nyxpiri.cyber-loop"; } [BepInPlugin("nyxpiri.ultrakill.cyber-loop", "Cyberloop", "0.0.3")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInProcess("ULTRAKILL.exe")] public class Cyberloop : BaseUnityPlugin { internal static float SmallGapSize = 0.001f; private LoopLayout PrevLayout = null; private LoopLayout CurrentLayout = null; private List Layouts = new List(); private int _currentLoop = -1; public bool Looping { get; private set; } = false; public bool IsCheatActive => Cheats.IsCheatEnabled("nyxpiri.cyber-loop"); protected void Awake() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Expected O, but got Unknown Log.Initialize(((BaseUnityPlugin)this).Logger); Options.Initialize((BaseUnityPlugin)(object)this); ScenesEvents.OnSceneWasLoaded += new OnSceneWasLoadedEventHandler(OnSceneLoaded); Cheats.ReadyForCheatRegistration += new ReadyForCheatRegistrationEventHandler(RegisterCheats); Cybergrind.PostCybergrindNextWave += (CybergrindPostNextWaveEventHandler)delegate(EventMethodCancelInfo cancelInfo, EndlessGrid endlessGrid) { if (!((EventMethodCancelInfo)(ref cancelInfo)).Cancelled && Looping) { NextLoop(); } }; Assets.Initialize(); Harmony.CreateAndPatchAll(((object)this).GetType().Assembly, (string)null); } private void NextLoop() { //IL_00c1: Unknown result type (might be due to invalid IL or missing references) if (!IsCheatActive) { DestroyLoop(); return; } if (Layouts.Count == 0) { DestroyLoop(); return; } _currentLoop++; _currentLoop %= Layouts.Count; DestroyLoop(); if (_currentLoop == 0) { for (int i = 0; i < 10; i++) { CollectionSorting.Shuffle((IList)Layouts); if (Layouts[0] != PrevLayout) { break; } } } if (((Component)MonoSingleton.Instance).transform.position.y < 0f) { _currentLoop = Layouts.FindIndex(_currentLoop, (LoopLayout layout) => layout.IsBelowArenaSafe); if (_currentLoop == -1) { CollectionSorting.Shuffle((IList)Layouts); _currentLoop = Layouts.FindIndex(0, (LoopLayout layout) => layout.IsBelowArenaSafe); } } if (_currentLoop != -1) { CurrentLayout = Layouts[_currentLoop]; CurrentLayout.Generate(); } } private void RegisterCheats(CheatsManager cheatsManager) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown cheatsManager.RegisterCheat((ICheat)new ToggleCheat("Cyberloop", "nyxpiri.cyber-loop", (Action)delegate { if (Cybergrind.IsInCybergrindLevel) { DeactivateLooping(); } }, (Action)delegate { if (Cybergrind.IsInCybergrindLevel) { ActivateLooping(); } }), "CYBERGRIND"); } private void DeactivateLooping() { if (Looping) { Looping = false; DestroyLoop(); } } private void DestroyLoop() { CurrentLayout?.Disable(); PrevLayout = CurrentLayout; CurrentLayout = null; } private void ActivateLooping() { if (!Looping && !((Object)(object)Assets.InfPortalPrefab == (Object)null)) { Looping = true; LoadLayouts(); } } private void LoadLayouts() { Layouts.Clear(); if (Options.UseVerticalLoop.Value) { Layouts.Add(new VerticalLoop()); } if (Options.UseVerticalPongLoop.Value) { Layouts.Add(new VerticalPongLoop()); } if (Options.UseHorizontalLoop.Value) { Layouts.Add(new HorizontalLoop()); } if (Options.UseHorizontalPongLoop.Value) { Layouts.Add(new HorizontalPongLoop()); } if (Options.UseHorizontalRotationLoop.Value) { Layouts.Add(new HorizontalRotationLoop()); } if (Options.UseFromEverywhereLoop.Value) { Layouts.Add(new FromEverywhereLoop()); } if (Options.UseCrossingThoseManyIslandsLoop.Value) { Layouts.Add(new CrossingThoseManyIslandsLoop()); } if (Options.UseCrossingThoseIslandsLoop.Value) { Layouts.Add(new CrossingThoseIslandsLoop()); } CollectionSorting.Shuffle((IList)Layouts); } private void OnSceneLoaded(Scene scene, string levelName, string sceneName) { CurrentLayout?.Clear(); CurrentLayout = null; Looping = false; } protected void Start() { } protected void Update() { } protected void LateUpdate() { } protected void FixedUpdate() { if (Cheats.IsCheatEnabled("nyxpiri.cyber-loop") && Cybergrind.IsInCybergrindLevel) { ActivateLooping(); } else { DeactivateLooping(); } } } internal static class Log { private static ManualLogSource _logger; public static void Initialize(ManualLogSource logger) { Assert.IsNull((object)_logger, "Log.Initialize called when _logger wasn't null?"); _logger = logger; } public static void Fatal(object data) { _logger.LogFatal(data); } public static void Error(object data) { _logger.LogError(data); } public static void Warning(object data) { _logger.LogWarning(data); } public static void Message(object data) { _logger.LogMessage(data); } public static void Info(object data) { _logger.LogInfo(data); } public static void Debug(object data) { _logger.LogDebug(data); } } public abstract class LoopLayout { public abstract bool IsBelowArenaSafe { get; } public List Portals { get; private set; } = new List(); public List PongPortals { get; private set; } = new List(); public abstract void Generate(); public abstract void FixedUpdate(); protected abstract void OnDisable(); protected abstract void OnClear(); public void Disable() { OnDisable(); foreach (Portal portal in Portals) { if (!((Object)(object)portal == (Object)null) && !((Object)(object)((Component)portal).gameObject == (Object)null)) { Object.Destroy((Object)(object)((Component)portal).gameObject); } } Clear(); } protected Portal CreatePortalAcrossAxis(Vector3 center, float dist, Vector3 axis, float width, float height, int maxRecursions, bool canSeeItself) { //IL_000c: 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_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) //IL_0019: 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) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: 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_0022: 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) //IL_002a: 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_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: 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_005c: Unknown result type (might be due to invalid IL or missing references) //IL_005d: 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) GameObject portalGo = Object.Instantiate(Assets.InfPortalPrefab); Vector3 entryPosition = center + axis * dist; Quaternion entryRotation = Quaternion.LookRotation(axis); Vector3 exitPosition = center + axis * (0f - dist); Quaternion exitRotation = Quaternion.LookRotation(-axis); bool canSeePortalLayer = true; bool supportInfiniteRecursion = false; float enterOffset = 1.5f; float exitOffset = 1.5f; return CreatePortal(width, height, maxRecursions, canSeeItself, portalGo, entryPosition, entryRotation, exitPosition, exitRotation, canSeePortalLayer, supportInfiniteRecursion, enterOffset, exitOffset, (PortalSideFlags)6); } protected Portal CreatePortal(float width, float height, int maxRecursions, bool canSeeItself, GameObject portalGo, Vector3 entryPosition, Quaternion entryRotation, Vector3 exitPosition, Quaternion exitRotation, bool canSeePortalLayer, bool supportInfiniteRecursion, float enterOffset, float exitOffset, PortalSideFlags renderSettings) { //IL_000f: 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_002b: 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_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_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) Portal component = portalGo.GetComponent(); component.entry.position = entryPosition; component.entry.rotation = entryRotation; component.exit.position = exitPosition; component.exit.rotation = exitRotation; PlaneShape val = (PlaneShape)(object)component.shape; val.width = width; val.height = height; component.shape = (IPortalShape)(object)val; component.enterOffset = enterOffset; component.exitOffset = exitOffset; component.supportInfiniteRecursion = supportInfiniteRecursion; component.maxRecursions = maxRecursions; component.canSeeItself = canSeeItself; component.canSeePortalLayer = canSeePortalLayer; component.renderSettings = renderSettings; Portals.Add(component); portalGo.SetActive(true); return component; } protected void CreateFallDeathSafetyPortals(float spacing, bool render = true) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: 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_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0030: 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) Portal val = CreatePortalAcrossAxis(ArenaInfo.Center + Vector3.up * (ArenaInfo.DeathHeight + 0.5f + spacing * 0.5f), spacing * 0.5f, Vector3.up, 500f, 500f, 1, canSeeItself: false); if (!render) { val.renderSettings = (PortalSideFlags)0; } } protected Portal CreatePongPortal(Vector3 position, Quaternion rotation, float width, float height, int maxRecursions = 1) { //IL_0026: 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_0040: 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_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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) GameObject val = Object.Instantiate(Assets.InfPortalPrefab); Portal component = val.GetComponent(); Portals.Add(component); component.entry.position = position; component.entry.rotation = rotation; component.exit.position = position; component.exit.rotation = rotation; PlaneShape val2 = (PlaneShape)(object)component.shape; val2.width = width; val2.height = height; component.shape = (IPortalShape)(object)val2; component.enterOffset = 1.5f; component.exitOffset = 1.5f; component.maxRecursions = maxRecursions; component.supportInfiniteRecursion = false; component.canSeeItself = false; component.renderSettings = (PortalSideFlags)4; component.canSeePortalLayer = false; val.SetActive(true); PongPortals.Add(component); return component; } public void Clear() { Portals.Clear(); PongPortals.Clear(); OnClear(); } } public class CrossingThoseIslandsLoop : LoopLayout { public override bool IsBelowArenaSafe => false; protected override void OnDisable() { } public override void FixedUpdate() { } public override void Generate() { //IL_0008: 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) //IL_003a: 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_0091: 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_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: 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_00c4: 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_00e0: 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) float num = 120f; Portal val = CreatePortalAcrossAxis(ArenaInfo.Center, num * 0.5f, Vector3.forward, num, num * 10f, (int)(1f * Options.PortalMaxRecursionScalar.Value), canSeeItself: true); Portal val2 = CreatePortalAcrossAxis(ArenaInfo.Center, num * 0.5f, Vector3.right, num, num * 10f, (int)(1f * Options.PortalMaxRecursionScalar.Value), canSeeItself: true); val.supportInfiniteRecursion = Options.PortalPreferSupportInfiniteRecursion.Value; val2.supportInfiniteRecursion = Options.PortalPreferSupportInfiniteRecursion.Value; Quaternion rotation = val.exit.rotation; Vector3 position = val.exit.position; Quaternion rotation2 = val2.exit.rotation; Vector3 position2 = val2.exit.position; val.exit.position = position2; val.exit.rotation = rotation2; val2.exit.position = position; val2.exit.rotation = rotation; } protected override void OnClear() { } } public class CrossingThoseManyIslandsLoop : LoopLayout { public override bool IsBelowArenaSafe => true; protected override void OnDisable() { } public override void FixedUpdate() { } public override void Generate() { //IL_0008: 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) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_009e: 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_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: 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) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: 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_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: 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_00fc: Unknown result type (might be due to invalid IL or missing references) float num = 140f; Portal val = CreatePortalAcrossAxis(ArenaInfo.Center, num * 0.5f, Vector3.forward, num, num, (int)(3f * Options.PortalMaxRecursionScalar.Value), canSeeItself: true); Portal val2 = CreatePortalAcrossAxis(ArenaInfo.Center, num * 0.5f, Vector3.right, num, num, (int)(3f * Options.PortalMaxRecursionScalar.Value), canSeeItself: true); Portal val3 = CreatePortalAcrossAxis(ArenaInfo.Center, num * 0.5f, Vector3.up, num, num, (int)(3f * Options.PortalMaxRecursionScalar.Value), canSeeItself: false); CreateFallDeathSafetyPortals(500f, render: false); Quaternion rotation = val.exit.rotation; Vector3 position = val.exit.position; Quaternion rotation2 = val2.exit.rotation; Vector3 position2 = val2.exit.position; val.exit.position = position2; val.exit.rotation = rotation2; val2.exit.position = position; val2.exit.rotation = rotation; } protected override void OnClear() { } } public class CybergrindPlanetLoop : LoopLayout { public override bool IsBelowArenaSafe => false; protected override void OnDisable() { } public override void FixedUpdate() { } public override void Generate() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) Portal val = CreatePortalAcrossAxis(ArenaInfo.Center + Vector3.up * 200f, ArenaInfo.Width + Cyberloop.SmallGapSize, Vector3.forward, 80f, 500f, 1, canSeeItself: false); } protected override void OnClear() { } } public class FromEverywhereLoop : LoopLayout { public override bool IsBelowArenaSafe => true; protected override void OnDisable() { } public override void FixedUpdate() { } public override void Generate() { //IL_0008: 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) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) float num = 150f; Portal val = CreatePortalAcrossAxis(ArenaInfo.Center, num * 0.5f, Vector3.forward, num, num, (int)(1f * Options.PortalMaxRecursionScalar.Value), canSeeItself: true); Portal val2 = CreatePortalAcrossAxis(ArenaInfo.Center, num * 0.5f, Vector3.right, num, num, (int)(1f * Options.PortalMaxRecursionScalar.Value), canSeeItself: true); Portal val3 = CreatePortalAcrossAxis(ArenaInfo.Center, num * 0.5f, Vector3.up, num, num, (int)(1f * Options.PortalMaxRecursionScalar.Value), canSeeItself: true); val.supportInfiniteRecursion = Options.PortalPreferSupportInfiniteRecursion.Value; val2.supportInfiniteRecursion = Options.PortalPreferSupportInfiniteRecursion.Value; val3.supportInfiniteRecursion = Options.PortalPreferSupportInfiniteRecursion.Value; CreateFallDeathSafetyPortals(500f, render: false); Quaternion rotation = val.exit.rotation; Vector3 position = val.exit.position; Quaternion rotation2 = val2.exit.rotation; Vector3 position2 = val2.exit.position; Quaternion rotation3 = val3.exit.rotation; Vector3 position3 = val3.exit.position; val.exit.position = position3; val.exit.rotation = rotation3; val2.exit.position = position; val2.exit.rotation = rotation; val3.exit.position = position2; val3.exit.rotation = rotation2; } protected override void OnClear() { } } public class HorizontalLoop : LoopLayout { public override bool IsBelowArenaSafe => false; protected override void OnDisable() { } public override void FixedUpdate() { } public override void Generate() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: 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) Portal val = CreatePortalAcrossAxis(ArenaInfo.Center + Vector3.up * 200f, ArenaInfo.Width + Cyberloop.SmallGapSize, Vector3.forward, 80f, 500f, (int)(1f * Options.PortalMaxRecursionScalar.Value), canSeeItself: false); Portal val2 = CreatePortalAcrossAxis(ArenaInfo.Center + Vector3.up * 200f, ArenaInfo.Width + Cyberloop.SmallGapSize, Vector3.right, 80f, 500f, (int)(1f * Options.PortalMaxRecursionScalar.Value), canSeeItself: false); val.supportInfiniteRecursion = Options.PortalPreferSupportInfiniteRecursion.Value; val2.supportInfiniteRecursion = Options.PortalPreferSupportInfiniteRecursion.Value; } protected override void OnClear() { } } public class HorizontalPongLoop : LoopLayout { public override bool IsBelowArenaSafe => false; protected override void OnDisable() { } public override void FixedUpdate() { } public override void Generate() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: 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_0030: 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_0067: 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_0076: 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_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: 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) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: 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_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0104: 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_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0164: 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) CreatePongPortal(ArenaInfo.Center + Vector3.up * 200f + Vector3.forward * (ArenaInfo.Width + Cyberloop.SmallGapSize), Quaternion.LookRotation(Vector3.forward), ArenaInfo.Width * 2f, 500f, (int)(1f * Options.PortalMaxRecursionScalar.Value)); CreatePongPortal(ArenaInfo.Center + Vector3.up * 200f + Vector3.back * (ArenaInfo.Width + Cyberloop.SmallGapSize), Quaternion.LookRotation(Vector3.back), ArenaInfo.Width * 2f, 500f, (int)(1f * Options.PortalMaxRecursionScalar.Value)); CreatePongPortal(ArenaInfo.Center + Vector3.up * 200f + Vector3.left * (ArenaInfo.Width + Cyberloop.SmallGapSize), Quaternion.LookRotation(Vector3.left), ArenaInfo.Width * 2f, 500f, (int)(1f * Options.PortalMaxRecursionScalar.Value)); CreatePongPortal(ArenaInfo.Center + Vector3.up * 200f + Vector3.right * (ArenaInfo.Width + Cyberloop.SmallGapSize), Quaternion.LookRotation(Vector3.right), ArenaInfo.Width * 2f, 500f, (int)(1f * Options.PortalMaxRecursionScalar.Value)); } protected override void OnClear() { } } public class HorizontalRotationLoop : LoopLayout { public override bool IsBelowArenaSafe => false; protected override void OnDisable() { } public override void FixedUpdate() { } public override void Generate() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: 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_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: 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_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: 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) //IL_00e9: 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_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) Portal val = CreatePortalAcrossAxis(ArenaInfo.Center + Vector3.up * 200f, ArenaInfo.Width + Cyberloop.SmallGapSize, Vector3.forward, 80f, 500f, (int)(1f * Options.PortalMaxRecursionScalar.Value), canSeeItself: true); Portal val2 = CreatePortalAcrossAxis(ArenaInfo.Center + Vector3.up * 200f, ArenaInfo.Width + Cyberloop.SmallGapSize, Vector3.right, 80f, 500f, (int)(1f * Options.PortalMaxRecursionScalar.Value), canSeeItself: true); val.supportInfiniteRecursion = Options.PortalPreferSupportInfiniteRecursion.Value; val2.supportInfiniteRecursion = Options.PortalPreferSupportInfiniteRecursion.Value; Quaternion rotation = val.exit.rotation; Vector3 position = val.exit.position; Quaternion rotation2 = val2.exit.rotation; Vector3 position2 = val2.exit.position; val2.exit.rotation = rotation; val.exit.rotation = rotation2; val2.exit.position = position; val.exit.position = position2; } protected override void OnClear() { } } public class VerticalLoop : LoopLayout { public override bool IsBelowArenaSafe => true; protected override void OnDisable() { } public override void FixedUpdate() { } public override void Generate() { //IL_0008: 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_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) float num = 150f; CreatePortalAcrossAxis(ArenaInfo.Center + Vector3.up * (ArenaInfo.DeathHeight * 0.4f + 0.5f + num * 0.5f), num * 0.5f, Vector3.up, 500f, 500f, 1, canSeeItself: false); CreateFallDeathSafetyPortals(260f, render: false); } protected override void OnClear() { } } public class VerticalPongLoop : LoopLayout { public override bool IsBelowArenaSafe => true; protected override void OnDisable() { } public override void FixedUpdate() { } public override void Generate() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: 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_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: 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_0053: 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) //IL_0062: 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_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) Portal val = CreatePongPortal(ArenaInfo.Center + Vector3.down * (ArenaInfo.InvDeathHeight * 0.5f - 0.5f), Quaternion.LookRotation(Vector3.down), 500f, 500f, (int)(1f * Options.PortalMaxRecursionScalar.Value)); Portal val2 = CreatePongPortal(ArenaInfo.Center + Vector3.up * ArenaInfo.Width * 2.5f, Quaternion.LookRotation(Vector3.up), 500f, 500f, (int)(1f * Options.PortalMaxRecursionScalar.Value)); CreateFallDeathSafetyPortals(400f, render: false); } protected override void OnClear() { } } public static class Options { private static ConfigFile _config; private static ConfigFileManager _configFileManager; public static ConfigEntry PortalMaxRecursionScalar { get; private set; } public static ConfigEntry PortalPreferSupportInfiniteRecursion { get; private set; } public static ConfigEntry UseCrossingThoseIslandsLoop { get; private set; } public static ConfigEntry UseCrossingThoseManyIslandsLoop { get; private set; } public static ConfigEntry UseFromEverywhereLoop { get; private set; } public static ConfigEntry UseHorizontalLoop { get; private set; } public static ConfigEntry UseHorizontalPongLoop { get; private set; } public static ConfigEntry UseHorizontalRotationLoop { get; private set; } public static ConfigEntry UseVerticalLoop { get; private set; } public static ConfigEntry UseVerticalPongLoop { get; private set; } internal static void Initialize(BaseUnityPlugin plugin) { Assert.IsNotNull((Object)(object)plugin, ""); _config = plugin.Config; _configFileManager = ((Component)plugin).gameObject.AddComponent(); _configFileManager.Initialize(_config); ConfigFileManager configFileManager = _configFileManager; configFileManager.OnReload = (Action)Delegate.Combine(configFileManager.OnReload, new Action(Reload)); PortalMaxRecursionScalar = _config.Bind("Performance", "PortalMaxRecursionScalar", 1f, (ConfigDescription)null); PortalPreferSupportInfiniteRecursion = _config.Bind("Performance", "PortalPreferSupportInfiniteRecursion", false, (ConfigDescription)null); UseCrossingThoseIslandsLoop = _config.Bind("Loops", "UseCrossingThoseIslandsLoop", true, "Toggles the 'Crossing Those Islands' loop. This loop is slow."); UseCrossingThoseManyIslandsLoop = _config.Bind("Loops", "UseCrossingThoseManyIslandsLoop", false, "Toggles the 'Crossing Those Many Islands' loop. This loop is CATACLYSMICALLY slow."); UseFromEverywhereLoop = _config.Bind("Loops", "UseFromEverywhereLoop", false, "Toggles the 'From Everywhere' loop. This loop is very slow."); UseHorizontalLoop = _config.Bind("Loops", "UseHorizontalLoop", true, "Toggles the 'Horizontal' Loop. This loop is slow."); UseHorizontalPongLoop = _config.Bind("Loops", "UseHorizontalPongLoop", true, "Toggles the 'Horizontal Pong' Loop. This loop is slow, slower than 'Horizontal' Loop."); UseHorizontalRotationLoop = _config.Bind("Loops", "UseHorizontalRotationLoop", true, "Toggles the 'Horizontal Rotation' Loop. This loop is slow."); UseVerticalLoop = _config.Bind("Loops", "UseVerticalLoop", true, "Toggles the 'Vertical' Loop. This loop has a moderately high cost to performance."); UseVerticalPongLoop = _config.Bind("Loops", "UseVerticalPongLoop", true, "Toggles the 'Vertical Pong' Loop. This loop has a moderately high-er cost to performance."); } private static void Reload() { } }