using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using HG;
using HG.Reflection;
using Microsoft.CodeAnalysis;
using On.RoR2;
using RoR2;
using RoR2.Navigation;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.SceneManagement;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: OptIn]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("StagePermutations")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+0302f7c5aebc79c28969574a684563fff96970f0")]
[assembly: AssemblyProduct("StagePermutations")]
[assembly: AssemblyTitle("StagePermutations")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: RefSafetyRules(11)]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace StagePermutations
{
public class DisableOcclusionNearby : MonoBehaviour
{
public List<CameraRigController> cameraRigControllers = new List<CameraRigController>();
public HashSet<CameraRigController> affectedCameraRigControllers = new HashSet<CameraRigController>();
public float radius;
public void OnEnable()
{
foreach (CameraRigController readOnlyInstances in CameraRigController.readOnlyInstancesList)
{
OnCameraEnableGlobal(readOnlyInstances);
}
CameraRigController.onCameraEnableGlobal += OnCameraEnableGlobal;
CameraRigController.onCameraDisableGlobal += OnCameraDisableGlobal;
}
public void OnDisable()
{
CameraRigController.onCameraEnableGlobal -= OnCameraEnableGlobal;
CameraRigController.onCameraDisableGlobal -= OnCameraDisableGlobal;
cameraRigControllers.Clear();
affectedCameraRigControllers.Clear();
}
public void Update()
{
//IL_001f: 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_0034: Unknown result type (might be due to invalid IL or missing references)
foreach (CameraRigController cameraRigController in cameraRigControllers)
{
Vector3 val = ((Component)cameraRigController).transform.position - ((Component)this).transform.position;
if (((Vector3)(ref val)).sqrMagnitude <= radius * radius)
{
if (affectedCameraRigControllers.Add(cameraRigController) && Object.op_Implicit((Object)(object)cameraRigController.sceneCam))
{
cameraRigController.sceneCam.useOcclusionCulling = false;
}
}
else if (affectedCameraRigControllers.Remove(cameraRigController) && Object.op_Implicit((Object)(object)cameraRigController.sceneCam))
{
cameraRigController.sceneCam.useOcclusionCulling = true;
}
}
}
private void OnCameraEnableGlobal(CameraRigController cameraRigController)
{
if (Object.op_Implicit((Object)(object)cameraRigController.sceneCam) && cameraRigController.sceneCam.useOcclusionCulling)
{
cameraRigControllers.Add(cameraRigController);
}
}
private void OnCameraDisableGlobal(CameraRigController cameraRigController)
{
cameraRigControllers.Remove(cameraRigController);
}
}
public abstract class PermutationBehaviour
{
public virtual SceneObjectToggleGroup FindToggleGroupController(Scene scene, IDictionary<string, GameObject> rootObjects)
{
if (rootObjects.TryGetValue("SceneInfo", out var value))
{
Transform val = value.transform.Find("ToggleGroupController");
if (Object.op_Implicit((Object)(object)val))
{
return ((Component)val).GetComponent<SceneObjectToggleGroup>();
}
}
return null;
}
public abstract void Apply(Scene scene, IDictionary<string, GameObject> rootObjects, SceneObjectToggleGroup toggleGroupController);
protected static void Addressable<TObject>(object key, out TObject asset)
{
//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)
asset = Addressables.LoadAssetAsync<TObject>(key).WaitForCompletion();
}
protected static TObject Addressable<TObject>(object key)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
return Addressables.LoadAssetAsync<TObject>(key).WaitForCompletion();
}
protected static void AssignNodesToGate(NodeGraph nodeGraph, List<NodeIndex> nodes, string gateName)
{
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: 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_0031: 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_0045: 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)
byte gateIndex = nodeGraph.RegisterGateName(gateName);
foreach (NodeIndex node in nodes)
{
nodeGraph.nodes[node.nodeIndex].gateIndex = gateIndex;
LinkIndex[] activeNodeLinks = nodeGraph.GetActiveNodeLinks(node);
foreach (LinkIndex val in activeNodeLinks)
{
nodeGraph.links[val.linkIndex].gateIndex = gateIndex;
}
}
}
protected static void EnsureNodesInBounds(NodeGraph nodeGraph, List<NodeIndex> nodes, Bounds bounds)
{
//IL_000e: 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)
Vector3 val = default(Vector3);
for (int num = nodes.Count - 1; num >= 0; num--)
{
if (!nodeGraph.GetNodePosition(nodes[num], ref val) || !((Bounds)(ref bounds)).Contains(val))
{
nodes.RemoveAt(num);
}
}
}
}
internal static class Prefab
{
private static readonly Transform _prefabParent;
static Prefab()
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Expected O, but got Unknown
_prefabParent = new GameObject("groovesalad.StageVariety_Prefabs").transform;
((Component)_prefabParent).gameObject.SetActive(false);
Object.DontDestroyOnLoad((Object)(object)((Component)_prefabParent).gameObject);
Util.IsPrefab += (hook_IsPrefab)((orig_IsPrefab orig, GameObject gameObject) => orig.Invoke(gameObject) || (Object)(object)gameObject.transform.parent == (Object)(object)_prefabParent);
}
public static GameObject Create(string name)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Expected O, but got Unknown
GameObject val = new GameObject(name);
val.transform.SetParent(_prefabParent);
return val;
}
public static GameObject Create(string name, params Type[] components)
{
//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_0018: Expected O, but got Unknown
GameObject val = new GameObject(name, components);
val.transform.SetParent(_prefabParent);
return val;
}
public static GameObject Clone(GameObject original, string name)
{
GameObject obj = Object.Instantiate<GameObject>(original, _prefabParent);
((Object)obj).name = name;
NetworkIdentity val = default(NetworkIdentity);
if (obj.TryGetComponent<NetworkIdentity>(ref val))
{
((NetworkHash128)(ref val.m_AssetId)).Reset();
}
return obj;
}
}
public class RegisterPermutationAttribute : SearchableAttribute
{
public string targetSceneName;
public string configSection;
public string name;
public string description;
public RegisterPermutationAttribute(string targetSceneName, string configSection, string name)
{
this.targetSceneName = targetSceneName;
this.configSection = configSection;
this.name = name;
}
}
public class SetSceneObjectsActive : MonoBehaviour
{
public List<GameObject> objectsToActivate = new List<GameObject>();
public List<GameObject> objectsToDeactivate = new List<GameObject>();
public void OnEnable()
{
foreach (GameObject item in objectsToActivate)
{
if (Object.op_Implicit((Object)(object)item))
{
item.SetActive(true);
}
}
foreach (GameObject item2 in objectsToDeactivate)
{
if (Object.op_Implicit((Object)(object)item2))
{
item2.SetActive(false);
}
}
}
}
public static class SharedExtensions
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool TryFind(this Transform transform, string n, out Transform child)
{
return Object.op_Implicit((Object)(object)(child = transform.Find(n)));
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static GameObject FindGameObject(this Transform transform, string n)
{
Transform val = transform.Find(n);
if (!Object.op_Implicit((Object)(object)val))
{
return null;
}
return ((Component)val).gameObject;
}
public static IEnumerable<Transform> AllChildren(this Transform transform)
{
for (int i = 0; i < transform.childCount; i++)
{
yield return transform.GetChild(i);
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void AddComponent<T>(this GameObject gameObject, out T component) where T : Component
{
component = gameObject.AddComponent<T>();
}
}
[BepInPlugin("groovesalad.StageVariety", "StageVariety", "1.1.0")]
public class StagePermutationsPlugin : BaseUnityPlugin
{
public interface IAsyncInit
{
IEnumerator Init();
}
public const string GUID = "groovesalad.StageVariety";
public const string NAME = "StageVariety";
public const string VERSION = "1.1.0";
public ILookup<string, PermutationBehaviour> permutationsLookup;
public static Dictionary<PermutationBehaviour, RegisterPermutationAttribute> Permutations { get; private set; }
public void Awake()
{
List<RegisterPermutationAttribute> list = new List<RegisterPermutationAttribute>();
SearchableAttribute.GetInstances<RegisterPermutationAttribute>(list);
Permutations = list.Where(delegate(RegisterPermutationAttribute x)
{
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Expected I4, but got O
//IL_003e: Expected O, but got I4
//IL_0039->IL0039: Incompatible stack types: I4 vs O
//IL_0039->IL0039: Incompatible stack types: O vs I4
//IL_0028->IL0039: Incompatible stack types: I4 vs O
//IL_0028->IL0039: Incompatible stack types: O vs I4
object obj = ((BaseUnityPlugin)this).Config;
object obj2 = x.configSection;
string text = "Enable " + x.name;
int num = 1;
if (x.description != null)
{
obj = (object)new ConfigDescription(x.description, (AcceptableValueBase)null, Array.Empty<object>());
obj2 = num;
num = (int)obj2;
}
else
{
obj = null;
obj2 = num;
num = (int)obj2;
}
return ((ConfigFile)obj).Bind<bool>((string)num, text, (byte)(int)obj2 != 0, (ConfigDescription)obj).Value;
}).ToDictionary((RegisterPermutationAttribute x) => (PermutationBehaviour)Activator.CreateInstance((Type)((SearchableAttribute)x).target));
permutationsLookup = Permutations.ToLookup((KeyValuePair<PermutationBehaviour, RegisterPermutationAttribute> x) => x.Value.targetSceneName, (KeyValuePair<PermutationBehaviour, RegisterPermutationAttribute> x) => x.Key);
SceneManager.sceneLoaded += OnSceneLoaded;
}
private void OnSceneLoaded(Scene newScene, LoadSceneMode loadSceneMode)
{
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
if (!permutationsLookup.Contains(((Scene)(ref newScene)).name))
{
return;
}
Dictionary<string, GameObject> dictionary = new Dictionary<string, GameObject>();
GameObject[] rootGameObjects = ((Scene)(ref newScene)).GetRootGameObjects();
foreach (GameObject val in rootGameObjects)
{
dictionary[((Object)val).name] = val;
}
foreach (PermutationBehaviour item in permutationsLookup[((Scene)(ref newScene)).name])
{
item.Apply(toggleGroupController: item.FindToggleGroupController(newScene, dictionary), scene: newScene, rootObjects: dictionary);
}
}
[SystemInitializer(new Type[] { })]
private static IEnumerator Init()
{
List<IEnumerator> initAsyncCoroutines = (from x in Permutations.Keys.OfType<IAsyncInit>()
select SafeCoroutineWrapper(x.Init())).ToList();
while (initAsyncCoroutines.Count > 0)
{
for (int i = initAsyncCoroutines.Count - 1; i >= 0; i--)
{
IEnumerator enumerator = initAsyncCoroutines[i];
if (enumerator.MoveNext())
{
yield return enumerator.Current;
}
else
{
initAsyncCoroutines.RemoveAt(i);
}
}
}
static IEnumerator SafeCoroutineWrapper(IEnumerator coroutine)
{
while (coroutine.MoveNext())
{
object current = coroutine.Current;
if (!(current is IEnumerator inner))
{
AsyncOperation asyncOperation = (AsyncOperation)((current is AsyncOperation) ? current : null);
if (asyncOperation != null)
{
while (!asyncOperation.isDone)
{
yield return null;
}
}
else
{
yield return coroutine.Current;
}
}
else
{
while (inner.MoveNext())
{
yield return inner.Current;
}
}
}
}
}
}
}
namespace StagePermutations.wispgraveyard
{
[RegisterPermutation("wispgraveyard", "Scorched Acres", "Lower Staircase Variation", description = "A lower staircase walkway on the top Scorched Acres platform will sometimes not appear")]
public class LowerStaircase : PermutationBehaviour, StagePermutationsPlugin.IAsyncInit
{
private const string GATE_NAME = "LowerSpiralStaircase";
public IEnumerator Init()
{
AsyncOperationHandle<NodeGraph> wispgraveyardGroundNodesNodegraph = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/wispgraveyard/wispgraveyardGroundNodesNodegraph.asset");
AsyncOperationHandle<NodeGraph> wispgraveyardAirNodesNodegraph = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/wispgraveyard/wispgraveyardAirNodesNodegraph.asset");
List<NodeIndex> dest = new List<NodeIndex>();
Bounds[] array = new Bounds[2];
Bounds val = default(Bounds);
((Bounds)(ref val)).min = new Vector3(-91f, 42f, 186f);
((Bounds)(ref val)).max = new Vector3(-63f, 75f, 261f);
array[0] = val;
val = default(Bounds);
((Bounds)(ref val)).min = new Vector3(126f, 31f, 190f);
((Bounds)(ref val)).max = new Vector3(158f, 75f, 291f);
array[1] = val;
Bounds[] array2 = (Bounds[])(object)array;
Bounds val2 = default(Bounds);
((Bounds)(ref val2)).min = new Vector3(-128f, 10f, 208f);
((Bounds)(ref val2)).max = new Vector3(158f, 46f, 340f);
val = val2;
Bounds[] array3 = array2;
int num = 0;
Bounds[] array4 = (Bounds[])(object)new Bounds[1 + array3.Length];
array4[num] = val;
num++;
ReadOnlySpan<Bounds> readOnlySpan = new ReadOnlySpan<Bounds>(array3);
readOnlySpan.CopyTo(new Span<Bounds>(array4).Slice(num, readOnlySpan.Length));
_ = num + readOnlySpan.Length;
Bounds[] groundBounds = array4;
val2 = default(Bounds);
((Bounds)(ref val2)).min = new Vector3(-128f, 20f, 208f);
((Bounds)(ref val2)).max = new Vector3(158f, 56f, 340f);
val = val2;
array4 = array2;
num = 0;
array3 = (Bounds[])(object)new Bounds[1 + array4.Length];
array3[num] = val;
num++;
readOnlySpan = new ReadOnlySpan<Bounds>(array4);
readOnlySpan.CopyTo(new Span<Bounds>(array3).Slice(num, readOnlySpan.Length));
_ = num + readOnlySpan.Length;
Bounds[] airBounds = array3;
yield return wispgraveyardGroundNodesNodegraph;
NodeGraph result = wispgraveyardGroundNodesNodegraph.Result;
array3 = groundBounds;
for (num = 0; num < array3.Length; num++)
{
Bounds bounds = array3[num];
result.blockMap.GetItemsInBounds(ref bounds, dest);
PermutationBehaviour.EnsureNodesInBounds(result, dest, bounds);
PermutationBehaviour.AssignNodesToGate(result, dest, "LowerSpiralStaircase");
dest.Clear();
}
yield return wispgraveyardAirNodesNodegraph;
NodeGraph result2 = wispgraveyardAirNodesNodegraph.Result;
array3 = airBounds;
for (num = 0; num < array3.Length; num++)
{
Bounds bounds2 = array3[num];
result2.blockMap.GetItemsInBounds(ref bounds2, dest);
PermutationBehaviour.EnsureNodesInBounds(result2, dest, bounds2);
PermutationBehaviour.AssignNodesToGate(result2, dest, "LowerSpiralStaircase");
dest.Clear();
}
}
public override void Apply(Scene scene, IDictionary<string, GameObject> rootObjects, SceneObjectToggleGroup toggleGroupController)
{
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Expected O, but got Unknown
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
//IL_0208: Unknown result type (might be due to invalid IL or missing references)
//IL_0234: Unknown result type (might be due to invalid IL or missing references)
//IL_0252: Unknown result type (might be due to invalid IL or missing references)
//IL_0286: 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_02d8: Unknown result type (might be due to invalid IL or missing references)
//IL_02f6: Unknown result type (might be due to invalid IL or missing references)
//IL_0305: Unknown result type (might be due to invalid IL or missing references)
//IL_030a: Unknown result type (might be due to invalid IL or missing references)
//IL_031b: Unknown result type (might be due to invalid IL or missing references)
//IL_0330: Unknown result type (might be due to invalid IL or missing references)
//IL_0351: Unknown result type (might be due to invalid IL or missing references)
if (!rootObjects.TryGetValue("ENTIRE SCENE HOLDER", out var value) || !value.transform.TryFind("HOLDER: Temple Pieces", out var child))
{
return;
}
Transform child2 = child.GetChild(3);
if (Object.op_Implicit((Object)(object)child2))
{
GameObject val = new GameObject("FSGiantRuinFrameCollisionDisabled");
val.transform.position = new Vector3(12f, 61f, 230f);
val.AddComponent<GateStateSetter>().gateToDisableWhenEnabled = "LowerSpiralStaircase";
val.SetActive(false);
val.AddComponent<SetSceneObjectsActive>(out SetSceneObjectsActive component);
component.objectsToDeactivate.Add(child2.FindGameObject("WPPlatform2SpiralStairsCW"));
component.objectsToDeactivate.Add(child2.FindGameObject("WPPlatform2SpiralStairsCCW"));
component.objectsToDeactivate.Add(child2.FindGameObject("WPPlanter1Long (4)"));
component.objectsToDeactivate.Add(child2.FindGameObject("WPPlanter1Long (3)"));
component.objectsToDeactivate.Add(child2.FindGameObject("WPPlanter1KnockedOver"));
component.objectsToDeactivate.Add(child2.FindGameObject("WPPlanter1LongKnockedOver"));
component.objectsToDeactivate.Add(child2.FindGameObject("WPPlanter1WithBonsaiTree (9)"));
Transform val2 = (from Transform x in (IEnumerable)child2
where ((Object)x).name == "WPPlatform2BarrierHigh"
select x).ElementAtOrDefault(2);
if (Object.op_Implicit((Object)(object)val2))
{
component.objectsToDeactivate.Add(((Component)val2).gameObject);
}
Transform val3 = (from Transform x in (IEnumerable)child2
where ((Object)x).name == "WPPlatform2BarrierHigh (1)"
select x).ElementAtOrDefault(2);
if (Object.op_Implicit((Object)(object)val3))
{
component.objectsToDeactivate.Add(((Component)val3).gameObject);
}
PermutationBehaviour.Addressable<GameObject>("RoR2/Base/wispgraveyard/WPPlatform2BarrierHigh.prefab", out var asset);
GameObject obj = Object.Instantiate<GameObject>(asset, val.transform);
obj.transform.localPosition = new Vector3(-8.7f, -36.5f, -11f);
obj.transform.localEulerAngles = new Vector3(270f, 267f, 0f);
GameObject obj2 = Object.Instantiate<GameObject>(asset, val.transform);
obj2.transform.localPosition = new Vector3(-8f, -36.5f, -5f);
obj2.transform.localEulerAngles = new Vector3(270f, 280f, 0f);
GameObject obj3 = Object.Instantiate<GameObject>(PermutationBehaviour.Addressable<GameObject>("RoR2/Base/wispgraveyard/WPPlanter1WithBonsaiTree.prefab"), val.transform);
obj3.transform.localPosition = new Vector3(-75f, -14.4f, -26f);
obj3.transform.localEulerAngles = new Vector3(0f, 200f, 0f);
GameObject obj4 = Object.Instantiate<GameObject>(PermutationBehaviour.Addressable<GameObject>("RoR2/Base/wispgraveyard/WPPlanter1LongKnockedOver.prefab"), val.transform);
obj4.transform.localPosition = new Vector3(-76f, -14.9f, -32f);
obj4.transform.localEulerAngles = new Vector3(0f, 25f, 0f);
GameObject val4 = new GameObject("DisableOcclusionCulling");
val4.transform.SetParent(val.transform);
val4.transform.localPosition = new Vector3(0f, 0f, 0f);
val4.AddComponent<DisableOcclusionNearby>().radius = 120f;
ref GameObjectToggleGroup[] toggleGroups = ref toggleGroupController.toggleGroups;
GameObjectToggleGroup val5 = new GameObjectToggleGroup
{
objects = (GameObject[])(object)new GameObject[1] { val },
minEnabled = 0,
maxEnabled = 1
};
ArrayUtils.ArrayAppend<GameObjectToggleGroup>(ref toggleGroups, ref val5);
}
}
}
}
namespace StagePermutations.village
{
[RegisterPermutation("village", "Shattered Abodes", "Arch Paths Variation", description = "A set of smaller temple arches will sometimes appear")]
public class ArchPaths : PermutationBehaviour
{
public override void Apply(Scene scene, IDictionary<string, GameObject> rootObjects, SceneObjectToggleGroup toggleGroupController)
{
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
if (rootObjects.TryGetValue("TOGGLE: ArchPaths", out var value))
{
Transform val = value.transform.Find("LVArc_ArchToggle");
if (Object.op_Implicit((Object)(object)val))
{
ref GameObjectToggleGroup[] toggleGroups = ref toggleGroupController.toggleGroups;
GameObjectToggleGroup val2 = new GameObjectToggleGroup
{
objects = (GameObject[])(object)new GameObject[1] { ((Component)val).gameObject },
minEnabled = 0,
maxEnabled = 1
};
ArrayUtils.ArrayAppend<GameObjectToggleGroup>(ref toggleGroups, ref val2);
}
}
}
}
}
namespace StagePermutations.villagenight
{
[RegisterPermutation("villagenight", "Disturbed Impact", "Arch Paths Variation", description = "A set of smaller temple arches will sometimes appear")]
public class ArchPaths : PermutationBehaviour
{
public override void Apply(Scene scene, IDictionary<string, GameObject> rootObjects, SceneObjectToggleGroup toggleGroupController)
{
//IL_0055: 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_0085: 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_00ae: Unknown result type (might be due to invalid IL or missing references)
Transform LVArc_ArchToggle;
GameObject LVNBrazierNoChain;
if (rootObjects.TryGetValue("TOGGLE: ArchPaths", out var value))
{
LVArc_ArchToggle = value.transform.Find("LVArc_ArchToggle");
if (Object.op_Implicit((Object)(object)LVArc_ArchToggle))
{
PermutationBehaviour.Addressable<GameObject>("RoR2/DLC2/villagenight/Assets/LVNBrazierNoChain.prefab", out LVNBrazierNoChain);
InstantiateBrazier(new Vector3(148.8f, 23.4f, -51.5f), Quaternion.Euler(0f, 5f, 6f));
InstantiateBrazier(new Vector3(118.3f, 11.2f, -64.7f), Quaternion.Euler(0f, 0f, 6f));
ref GameObjectToggleGroup[] toggleGroups = ref toggleGroupController.toggleGroups;
GameObjectToggleGroup val = new GameObjectToggleGroup
{
objects = (GameObject[])(object)new GameObject[1] { ((Component)LVArc_ArchToggle).gameObject },
minEnabled = 0,
maxEnabled = 1
};
ArrayUtils.ArrayAppend<GameObjectToggleGroup>(ref toggleGroups, ref val);
}
}
GameObject InstantiateBrazier(Vector3 position, Quaternion rotation)
{
//IL_0006: 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_0038: Unknown result type (might be due to invalid IL or missing references)
GameObject obj = Object.Instantiate<GameObject>(LVNBrazierNoChain, position, rotation, LVArc_ArchToggle);
obj.layer = LayerIndex.world.intVal;
obj.transform.localScale = new Vector3(1.5f, 2f, 1.5f);
return obj;
}
}
}
}
namespace StagePermutations.skymeadow
{
[RegisterPermutation("skymeadow", "Sky Meadow", "Mauling Rocks Direction Variation", description = "The mauling rocks on Sky Meadow will sometimes fly the opposite direction")]
public class MaulingRocks : PermutationBehaviour
{
public override void Apply(Scene scene, IDictionary<string, GameObject> rootObjects, SceneObjectToggleGroup toggleGroupController)
{
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
if (rootObjects.TryGetValue("HOLDER: Mauling Rocks", out var value))
{
GameObject val = Object.Instantiate<GameObject>(value);
val.SetActive(false);
MaulingRockZoneManager[] componentsInChildren = val.GetComponentsInChildren<MaulingRockZoneManager>();
for (int i = 0; i < componentsInChildren.Length; i++)
{
MaulingRockZoneManager val3;
MaulingRockZoneManager val2;
MaulingRockZoneManager obj = (val3 = (val2 = componentsInChildren[i]));
Transform endZonePoint = obj.endZonePoint1;
Transform startZonePoint = obj.startZonePoint1;
val2.startZonePoint1 = endZonePoint;
val3.endZonePoint1 = startZonePoint;
val3 = obj;
val2 = obj;
startZonePoint = obj.endZonePoint2;
endZonePoint = obj.startZonePoint2;
val3.startZonePoint2 = startZonePoint;
val2.endZonePoint2 = endZonePoint;
}
ref GameObjectToggleGroup[] toggleGroups = ref toggleGroupController.toggleGroups;
GameObjectToggleGroup val4 = new GameObjectToggleGroup
{
objects = (GameObject[])(object)new GameObject[2] { value, val },
minEnabled = 1,
maxEnabled = 1
};
ArrayUtils.ArrayAppend<GameObjectToggleGroup>(ref toggleGroups, ref val4);
}
}
}
}
namespace StagePermutations.shipgraveyard
{
[RegisterPermutation("shipgraveyard", "Siren`s Call", "New Donut Ship", description = "A new crashed ship will sometimes appear in the middle of Siren`s Call")]
public class NewTorusShip : PermutationBehaviour, StagePermutationsPlugin.IAsyncInit
{
private const string GATE_NAME = "BlockedByTorusShip";
public IEnumerator Init()
{
AsyncOperationHandle<NodeGraph> shipgraveyardGroundNodeNodegraph = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/shipgraveyard/shipgraveyardGroundNodeNodegraph.asset");
AsyncOperationHandle<NodeGraph> shipgraveyardAirNodeNodegraph = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/shipgraveyard/shipgraveyardAirNodeNodegraph.asset");
List<NodeIndex> dest = new List<NodeIndex>();
yield return shipgraveyardGroundNodeNodegraph;
NodeGraph result = shipgraveyardGroundNodeNodegraph.Result;
result.blockMap.GetItemsInSphere(new Vector3(-15f, 3f, 14f), 10f, dest);
PermutationBehaviour.AssignNodesToGate(result, dest, "BlockedByTorusShip");
dest.Clear();
yield return shipgraveyardAirNodeNodegraph;
NodeGraph result2 = shipgraveyardAirNodeNodegraph.Result;
result2.blockMap.GetItemsInSphere(new Vector3(-15f, 15f, 11f), 15f, dest);
result2.blockMap.GetItemsInSphere(new Vector3(18f, 15f, 59f), 15f, dest);
PermutationBehaviour.AssignNodesToGate(result2, dest, "BlockedByTorusShip");
}
public override void Apply(Scene scene, IDictionary<string, GameObject> rootObjects, SceneObjectToggleGroup toggleGroupController)
{
//IL_003c: 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_00b0: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Object.Instantiate<GameObject>(PermutationBehaviour.Addressable<GameObject>("RoR2/Base/shipgraveyard/TorusShip Round.prefab"));
val.AddComponent<GateStateSetter>().gateToDisableWhenEnabled = "BlockedByTorusShip";
val.SetActive(false);
val.transform.localPosition = new Vector3(2f, 5f, 41f);
val.transform.localEulerAngles = new Vector3(340f, 300f, 230f);
if (rootObjects.TryGetValue("HOLDER: Environment", out var value) && value.transform.TryFind("HOLDER: Main Rocks", out var child))
{
val.AddComponent<SetSceneObjectsActive>(out SetSceneObjectsActive component);
component.objectsToDeactivate.Add(((Component)child.GetChild(27)).gameObject);
}
ref GameObjectToggleGroup[] toggleGroups = ref toggleGroupController.toggleGroups;
GameObjectToggleGroup val2 = new GameObjectToggleGroup
{
objects = (GameObject[])(object)new GameObject[1] { val },
minEnabled = 0,
maxEnabled = 1
};
ArrayUtils.ArrayAppend<GameObjectToggleGroup>(ref toggleGroups, ref val2);
}
}
[RegisterPermutation("shipgraveyard", "Siren`s Call", "Crashed Ship Middle Section Variation", description = "The middle section of the long rectangular crashed ship on Siren`s Call will sometimes appear in a different orientation")]
public class RectShipMid : PermutationBehaviour, StagePermutationsPlugin.IAsyncInit
{
private const string GATE_NAME = "RectShipMid";
public IEnumerator Init()
{
AsyncOperationHandle<NodeGraph> shipgraveyardGroundNodeNodegraph = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/shipgraveyard/shipgraveyardGroundNodeNodegraph.asset");
AsyncOperationHandle<NodeGraph> shipgraveyardAirNodeNodegraph = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/shipgraveyard/shipgraveyardAirNodeNodegraph.asset");
List<NodeIndex> dest = new List<NodeIndex>();
Bounds bounds = new Bounds(new Vector3(-3.5f, 39f, 71f), new Vector3(25f, 30f, 41f));
yield return shipgraveyardGroundNodeNodegraph;
NodeGraph result = shipgraveyardGroundNodeNodegraph.Result;
result.blockMap.GetItemsInBounds(ref bounds, dest);
PermutationBehaviour.AssignNodesToGate(result, dest, "RectShipMid");
dest.Clear();
yield return shipgraveyardAirNodeNodegraph;
NodeGraph result2 = shipgraveyardAirNodeNodegraph.Result;
result2.blockMap.GetItemsInBounds(ref bounds, dest);
PermutationBehaviour.EnsureNodesInBounds(result2, dest, bounds);
PermutationBehaviour.AssignNodesToGate(result2, dest, "RectShipMid");
}
public override void Apply(Scene scene, IDictionary<string, GameObject> rootObjects, SceneObjectToggleGroup toggleGroupController)
{
//IL_0071: 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_0163: 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_013c: Unknown result type (might be due to invalid IL or missing references)
if (!rootObjects.TryGetValue("HOLDER: Environment", out var value) || !value.transform.TryFind("HOLDER: Ship Chunks/RectShipMid", out var child))
{
return;
}
GameObject val = Object.Instantiate<GameObject>(PermutationBehaviour.Addressable<GameObject>("RoR2/Base/shipgraveyard/RectShipMid.prefab"));
val.AddComponent<GateStateSetter>().gateToDisableWhenEnabled = "RectShipMid";
val.SetActive(false);
val.AddComponent<DisableOcclusionNearby>().radius = 200f;
val.transform.localPosition = new Vector3(0f, 47f, 110f);
val.transform.localEulerAngles = new Vector3(10f, 40f, 0f);
val.AddComponent<SetSceneObjectsActive>(out SetSceneObjectsActive component);
if (value.transform.TryFind("HOLDER: Main Spikes", out var child2))
{
Transform child3 = child2.GetChild(6);
if (Object.op_Implicit((Object)(object)child3))
{
component.objectsToDeactivate.Add(((Component)child3).gameObject);
}
Transform child4 = child2.GetChild(2);
if (Object.op_Implicit((Object)(object)child4))
{
GameObject val2 = Object.Instantiate<GameObject>(((Component)child4).gameObject, child4.parent);
val2.transform.localPosition = new Vector3(-40f, 10f, 94f);
val2.transform.localScale = new Vector3(903.583f, 903.586f, 3921.5f);
val2.SetActive(false);
component.objectsToActivate.Add(val2);
}
}
ref GameObjectToggleGroup[] toggleGroups = ref toggleGroupController.toggleGroups;
GameObjectToggleGroup val3 = new GameObjectToggleGroup
{
objects = (GameObject[])(object)new GameObject[2]
{
((Component)child).gameObject,
val
},
minEnabled = 1,
maxEnabled = 1
};
ArrayUtils.ArrayAppend<GameObjectToggleGroup>(ref toggleGroups, ref val3);
}
}
}
namespace StagePermutations.rootjungle
{
[RegisterPermutation("rootjungle", "Sundered Grove", "Mushroom Platform Variation", description = "A mushroom platform on Sundered Grove will sometimes disappear")]
public class ShroomShelf : PermutationBehaviour, StagePermutationsPlugin.IAsyncInit
{
private const string GATE_NAME = "OnShroomShelf";
public IEnumerator Init()
{
AsyncOperationHandle<NodeGraph> rootjungleGroundNodesNodegraph = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/rootjungle/rootjungleGroundNodesNodegraph.asset");
AsyncOperationHandle<NodeGraph> rootjungleGroundNodesNodegraph2 = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/rootjungleGroundNodesNodegraph.asset");
AsyncOperationHandle<NodeGraph> rootjungleAirNodesNodegraph = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/rootjungle/rootjungleAirNodesNodegraph.asset");
List<NodeIndex> dest = new List<NodeIndex>();
yield return rootjungleGroundNodesNodegraph;
ModifyRootjungleGroundNodesNodegraph(rootjungleGroundNodesNodegraph.Result);
yield return rootjungleGroundNodesNodegraph2;
ModifyRootjungleGroundNodesNodegraph(rootjungleGroundNodesNodegraph2.Result);
yield return rootjungleAirNodesNodegraph;
NodeGraph result = rootjungleAirNodesNodegraph.Result;
result.blockMap.GetItemsInSphere(new Vector3(63f, 30f, 90f), 30f, dest);
PermutationBehaviour.AssignNodesToGate(result, dest, "OnShroomShelf");
void ModifyRootjungleGroundNodesNodegraph(NodeGraph groundNodegraph)
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
groundNodegraph.blockMap.GetItemsInSphere(new Vector3(63f, 30f, 90f), 30f, dest);
PermutationBehaviour.AssignNodesToGate(groundNodegraph, dest, "OnShroomShelf");
dest.Clear();
}
}
public override SceneObjectToggleGroup FindToggleGroupController(Scene scene, IDictionary<string, GameObject> rootObjects)
{
if (rootObjects.TryGetValue("SceneInfo", out var value))
{
Transform val = value.transform.Find("SceneObjectToggleGroup");
if (Object.op_Implicit((Object)(object)val))
{
return ((Component)val).GetComponent<SceneObjectToggleGroup>();
}
}
return null;
}
public override void Apply(Scene scene, IDictionary<string, GameObject> rootObjects, SceneObjectToggleGroup toggleGroupController)
{
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Expected O, but got Unknown
//IL_0137: 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_00cc: Expected O, but got Unknown
//IL_00ce: 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_00e7: 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)
if (!rootObjects.TryGetValue("HOLDER: Props", out var value) || !value.transform.TryFind("GROUP: Mushrooms", out var child))
{
return;
}
Transform val = (from Transform x in (IEnumerable)child
where ((Object)x).name == "RJ_ShroomBig"
select x).ElementAtOrDefault(1);
if (!Object.op_Implicit((Object)(object)val))
{
return;
}
GameObject val2 = new GameObject("RJShroomBigDisabled");
val2.AddComponent<GateStateSetter>().gateToDisableWhenEnabled = "OnShroomShelf";
val2.SetActive(false);
if (rootObjects.TryGetValue("HOLDER: Foliage", out var value2) && value2.transform.TryFind("GROUP: ShroomFoliage", out var child2))
{
val2.AddComponent<SetSceneObjectsActive>(out SetSceneObjectsActive component);
foreach (Transform item in child2)
{
Transform val3 = item;
Vector3 val4 = val3.position - new Vector3(63f, 30f, 90f);
if (((Vector3)(ref val4)).sqrMagnitude <= 1600f)
{
component.objectsToDeactivate.Add(((Component)val3).gameObject);
}
}
}
ref GameObjectToggleGroup[] toggleGroups = ref toggleGroupController.toggleGroups;
GameObjectToggleGroup val5 = new GameObjectToggleGroup
{
objects = (GameObject[])(object)new GameObject[2]
{
((Component)val).gameObject,
val2
},
minEnabled = 1,
maxEnabled = 1
};
ArrayUtils.ArrayAppend<GameObjectToggleGroup>(ref toggleGroups, ref val5);
}
}
}
namespace StagePermutations.goolake
{
[RegisterPermutation("goolake", "Abandoned Aqueduct", "Receded Aqueduct", description = "The main aqueduct on Abandoned Aqueduct will sometimes move towards the wall to make room for a new eel skeleton")]
public class RecededAqueduct : PermutationBehaviour, StagePermutationsPlugin.IAsyncInit
{
private const string GATE_NAME = "BlockedByEel";
public GameObject goolakeBoulderPrefab;
public IEnumerator Init()
{
AsyncOperationHandle<NodeGraph> goolakeAirNodegraph = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/goolake/goolakeAirNodegraph.asset");
yield return goolakeAirNodegraph;
NodeGraph result = goolakeAirNodegraph.Result;
List<NodeIndex> list = new List<NodeIndex>();
result.blockMap.GetItemsInSphere(new Vector3(151f, -102f, 98f), 10f, list);
PermutationBehaviour.AssignNodesToGate(result, list, "BlockedByEel");
result.SetGateState("BlockedByEel", true);
}
public override void Apply(Scene scene, IDictionary<string, GameObject> rootObjects, SceneObjectToggleGroup toggleGroupController)
{
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: 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_025e: Unknown result type (might be due to invalid IL or missing references)
//IL_0272: Unknown result type (might be due to invalid IL or missing references)
//IL_0294: Unknown result type (might be due to invalid IL or missing references)
//IL_02a8: Unknown result type (might be due to invalid IL or missing references)
//IL_02c6: Unknown result type (might be due to invalid IL or missing references)
//IL_02da: Unknown result type (might be due to invalid IL or missing references)
//IL_02f8: Unknown result type (might be due to invalid IL or missing references)
//IL_030c: Unknown result type (might be due to invalid IL or missing references)
//IL_032a: Unknown result type (might be due to invalid IL or missing references)
//IL_033e: 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_0370: Unknown result type (might be due to invalid IL or missing references)
//IL_038e: Unknown result type (might be due to invalid IL or missing references)
//IL_03a2: Unknown result type (might be due to invalid IL or missing references)
//IL_03b8: Unknown result type (might be due to invalid IL or missing references)
//IL_03c2: Unknown result type (might be due to invalid IL or missing references)
//IL_03d5: Unknown result type (might be due to invalid IL or missing references)
//IL_03df: Unknown result type (might be due to invalid IL or missing references)
//IL_03f2: Unknown result type (might be due to invalid IL or missing references)
//IL_03fc: Unknown result type (might be due to invalid IL or missing references)
//IL_040f: Unknown result type (might be due to invalid IL or missing references)
//IL_0419: Unknown result type (might be due to invalid IL or missing references)
//IL_043b: Unknown result type (might be due to invalid IL or missing references)
//IL_044e: Unknown result type (might be due to invalid IL or missing references)
//IL_0458: Unknown result type (might be due to invalid IL or missing references)
//IL_046b: Unknown result type (might be due to invalid IL or missing references)
//IL_0475: Unknown result type (might be due to invalid IL or missing references)
//IL_0148: 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_016f: Unknown result type (might be due to invalid IL or missing references)
//IL_0179: Unknown result type (might be due to invalid IL or missing references)
//IL_01c3: Unknown result type (might be due to invalid IL or missing references)
//IL_01de: Unknown result type (might be due to invalid IL or missing references)
//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
//IL_04b6: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)goolakeBoulderPrefab))
{
goolakeBoulderPrefab = PermutationBehaviour.Addressable<GameObject>("RoR2/Base/goolake/GL_BBBoulder.prefab");
}
if (rootObjects.TryGetValue("HOLDER: GameplaySpace", out var value) && value.transform.TryFind("mdlGlDam/GL_AqueductPartial", out var child))
{
Transform transform = Object.Instantiate<GameObject>(((Component)child).gameObject, child.parent).transform;
transform.localPosition = new Vector3(-0.89f, 1.2f, -0.53f);
transform.localEulerAngles = new Vector3(0f, 2f, 0f);
transform.localScale = new Vector3(1.225f, 1.263564f, 0.9f);
((Component)transform).gameObject.AddComponent<GateStateSetter>().gateToDisableWhenEnabled = "BlockedByEel";
((Component)transform).gameObject.SetActive(false);
((Component)transform).gameObject.AddComponent<SetSceneObjectsActive>(out SetSceneObjectsActive component);
if (transform.TryFind("GL_Waterfall", out var child2))
{
((Component)child2).gameObject.SetActive(false);
}
if (rootObjects.TryGetValue("HOLDER: Misc Props", out var value2) && value2.transform.TryFind("Props", out var child3))
{
PermutationBehaviour.Addressable<GameObject>("RoR2/Base/goolake/GL_EelSkeleton.prefab", out var asset);
Transform transform2 = Object.Instantiate<GameObject>(asset, child3).transform;
transform2.localPosition = new Vector3(19.4f, -27.32f, -78f);
transform2.localEulerAngles = new Vector3(53f, 78f, 339f);
transform2.localScale = Vector3.one * 14.4f;
((Component)transform2).gameObject.SetActive(false);
component.objectsToActivate.Add(((Component)transform2).gameObject);
Transform transform3 = Object.Instantiate<GameObject>(asset, child3).transform;
transform3.localPosition = new Vector3(-79f, -87f, -128f);
transform3.localEulerAngles = new Vector3(25f, 226f, 173f);
transform3.localScale = Vector3.one * 9f;
((Component)transform3).gameObject.SetActive(false);
component.objectsToActivate.Add(((Component)transform3).gameObject);
}
PermutationBehaviour.Addressable<GameObject>("RoR2/Base/goolake/spmGlBamboo1Large.spm", out var asset2);
PermutationBehaviour.Addressable<GameObject>("RoR2/Base/goolake/spmGlBamboo1.spm", out var asset3);
PermutationBehaviour.Addressable<GameObject>("RoR2/Base/goolake/spmGlCactusBush1.spm", out var asset4);
GameObject[] array = (GameObject[])(object)new GameObject[7]
{
Object.Instantiate<GameObject>(goolakeBoulderPrefab, new Vector3(171f, -115f, 96f), Quaternion.Euler(340f, 0f, 0f)),
Object.Instantiate<GameObject>(goolakeBoulderPrefab, new Vector3(155f, -112f, 117f), Quaternion.Euler(340f, 40f, 0f)),
Object.Instantiate<GameObject>(asset2, new Vector3(163f, -114f, 127f), Quaternion.Euler(5f, 20f, 0f)),
Object.Instantiate<GameObject>(asset3, new Vector3(169f, -114f, 124f), Quaternion.Euler(0f, 0f, 350f)),
Object.Instantiate<GameObject>(asset3, new Vector3(180f, -117f, 107f), Quaternion.Euler(5f, 30f, 340f)),
Object.Instantiate<GameObject>(asset4, new Vector3(177f, -114f, 116f), Quaternion.Euler(0f, 0f, 330f)),
Object.Instantiate<GameObject>(asset4, new Vector3(180.5f, -116f, 112f), Quaternion.Euler(30f, 80f, 5f))
};
array[0].transform.localScale = Vector3.one * 5.5f;
array[1].transform.localScale = Vector3.one * 2.5f;
array[2].transform.localScale = Vector3.one * 1.5f;
array[3].transform.localScale = Vector3.one * 1.5f;
array[4].transform.localScale = new Vector3(1.2f, 1.6f, 1.2f);
array[5].transform.localScale = Vector3.one * 1.5f;
array[6].transform.localScale = Vector3.one * 0.8f;
GameObject[] array2 = array;
for (int i = 0; i < array2.Length; i++)
{
array2[i].SetActive(false);
}
component.objectsToActivate.AddRange(array);
ref GameObjectToggleGroup[] toggleGroups = ref toggleGroupController.toggleGroups;
GameObjectToggleGroup val = new GameObjectToggleGroup
{
objects = (GameObject[])(object)new GameObject[2]
{
((Component)child).gameObject,
((Component)transform).gameObject
},
minEnabled = 1,
maxEnabled = 1
};
ArrayUtils.ArrayAppend<GameObjectToggleGroup>(ref toggleGroups, ref val);
}
}
}
[RegisterPermutation("goolake", "Abandoned Aqueduct", "Second Aqueduct", description = "A second aqueduct structure will sometimes appear on Abandoned Aqueduct")]
public class SecondAqueduct : PermutationBehaviour, StagePermutationsPlugin.IAsyncInit
{
private const string GATE_NAME = "SecondaryAqueduct";
public IEnumerator Init()
{
AsyncOperationHandle<NodeGraph> goolakeGroundNodegraph = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/goolake/goolakeGroundNodegraph.asset");
AsyncOperationHandle<NodeGraph> goolakeAirNodegraph = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/goolake/goolakeAirNodegraph.asset");
yield return goolakeGroundNodegraph;
NodeGraph result = goolakeGroundNodegraph.Result;
List<NodeIndex> dest = new List<NodeIndex>();
Bounds val = default(Bounds);
((Bounds)(ref val)).min = new Vector3(210f, -95f, -260f);
((Bounds)(ref val)).max = new Vector3(230f, -30f, -224f);
Bounds bounds = val;
result.blockMap.GetItemsInBounds(ref bounds, dest);
PermutationBehaviour.AssignNodesToGate(result, dest, "SecondaryAqueduct");
yield return goolakeAirNodegraph;
NodeGraph result2 = goolakeAirNodegraph.Result;
dest.Clear();
result2.blockMap.GetItemsInBounds(ref bounds, dest);
PermutationBehaviour.AssignNodesToGate(result2, dest, "SecondaryAqueduct");
}
public override void Apply(Scene scene, IDictionary<string, GameObject> rootObjects, SceneObjectToggleGroup toggleGroupController)
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Expected O, but got Unknown
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: 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_00f9: 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)
if (rootObjects.TryGetValue("HOLDER: GameplaySpace", out var value) && value.transform.TryFind("mdlGlDam/GL_AqueductPartial", out var child))
{
GameObject val = new GameObject("SecondaryAqueductToggle");
val.AddComponent<GateStateSetter>().gateToDisableWhenEnabled = "SecondaryAqueduct";
val.SetActive(false);
val.AddComponent<SetSceneObjectsActive>(out SetSceneObjectsActive component);
val.transform.localEulerAngles = new Vector3(0f, 18.7f, 180f);
Transform transform = Object.Instantiate<GameObject>(((Component)child).gameObject, val.transform).transform;
transform.localPosition = new Vector3(-264.7861f, 94.7f, -158.4718f);
transform.localScale = new Vector3(10f, 14.29f, 8f);
if (transform.TryFind("GL_Waterfall/FoamOverParticles", out var child2))
{
child2.localScale = new Vector3(0.8f, 1f, 0.5f);
}
if (transform.TryFind("GL_Waterfall/SplashZone, Directional", out var child3))
{
Transform obj = child3;
Vector3 localPosition = child3.localPosition;
localPosition.y = 2.5f;
obj.localPosition = localPosition;
}
if (rootObjects.TryGetValue("HOLDER: Warning Flags", out var value2))
{
component.objectsToDeactivate.Add(value2.transform.FindGameObject("GLWarningFlag"));
component.objectsToDeactivate.Add(value2.transform.FindGameObject("GLWarningFlag (2)"));
}
if (value.transform.TryFind("Gates/BridgeOverGooOff", out var child4))
{
component.objectsToActivate.Add(((Component)child4).gameObject);
}
ArrayUtils.ArrayAppend<GameObject>(ref toggleGroupController.toggleGroups[0].objects, ref val);
}
}
}
}
namespace StagePermutations.golemplains
{
[RegisterPermutation("golemplains2", "Titanic Plains", "Colossus Heads", description = "Two Colossus heads will sometimes appear on the alternate Titanic Plains variant")]
public class ColossusHead : PermutationBehaviour, StagePermutationsPlugin.IAsyncInit
{
private const string GATE_NAME_RUINED = "BlockedByRuinedColossusHead";
private const string GATE_NAME_FULL = "BlockedByFullColossusHead";
public Material matColossusHeadMossy;
public IEnumerator Init()
{
AsyncOperationHandle<NodeGraph> golemplains2GroundNodesNodegraph = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/golemplains2/golemplains2GroundNodesNodegraph.asset");
AsyncOperationHandle<NodeGraph> golemplains2GroundNodesNodegraph2 = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/golemplains2GroundNodesNodegraph.asset");
AsyncOperationHandle<NodeGraph> golemplains2AirNodesNodegraph = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/golemplains2/golemplains2AirNodesNodegraph.asset");
List<NodeIndex> dest = new List<NodeIndex>();
yield return golemplains2GroundNodesNodegraph;
ModifyGolemplains2GroundNodesNodegraph(golemplains2GroundNodesNodegraph.Result);
yield return golemplains2GroundNodesNodegraph2;
ModifyGolemplains2GroundNodesNodegraph(golemplains2GroundNodesNodegraph2.Result);
yield return golemplains2AirNodesNodegraph;
NodeGraph result = golemplains2AirNodesNodegraph.Result;
result.blockMap.GetItemsInSphere(new Vector3(235f, 60f, 33f), 20f, dest);
PermutationBehaviour.AssignNodesToGate(result, dest, "BlockedByRuinedColossusHead");
dest.Clear();
result.blockMap.GetItemsInSphere(new Vector3(-23f, 70f, -155f), 30f, dest);
PermutationBehaviour.AssignNodesToGate(result, dest, "BlockedByFullColossusHead");
void ModifyGolemplains2GroundNodesNodegraph(NodeGraph groundNodegraph)
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: 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_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
groundNodegraph.blockMap.GetItemsInSphere(new Vector3(236.6f, 43.9f, 45.2f), 5f, dest);
groundNodegraph.blockMap.GetItemsInSphere(new Vector3(245.7f, 45f, 45f), 5f, dest);
groundNodegraph.blockMap.GetItemsInSphere(new Vector3(251f, 45f, 35f), 5f, dest);
groundNodegraph.blockMap.GetItemsInSphere(new Vector3(250f, 43f, 25.6f), 5f, dest);
PermutationBehaviour.AssignNodesToGate(groundNodegraph, dest, "BlockedByRuinedColossusHead");
dest.Clear();
groundNodegraph.blockMap.GetItemsInSphere(new Vector3(-28.8f, 47.6f, -154f), 30f, dest);
PermutationBehaviour.AssignNodesToGate(groundNodegraph, dest, "BlockedByFullColossusHead");
dest.Clear();
}
}
public override void Apply(Scene scene, IDictionary<string, GameObject> rootObjects, SceneObjectToggleGroup toggleGroupController)
{
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Expected O, but got Unknown
//IL_0057: 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_0095: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)matColossusHeadMossy))
{
PermutationBehaviour.Addressable<Material>("RoR2/Base/golemplains/matGPBoulderHeavyMoss.mat", out var asset);
matColossusHeadMossy = new Material(asset);
matColossusHeadMossy.SetTexture("_NormalTex", PermutationBehaviour.Addressable<Texture>("RoR2/Junk/slice2/texColossusHead1Normal.png"));
matColossusHeadMossy.SetTextureScale("_NormalTex", new Vector2(1f, 1f));
matColossusHeadMossy.SetTextureScale("_MainTex", new Vector2(3f, 8f));
matColossusHeadMossy.SetTextureScale("_SnowTex", new Vector2(10f, 10f));
matColossusHeadMossy.SetFloat("_SnowBias", 0.14f);
matColossusHeadMossy.SetFloat("_Depth", 0.3f);
matColossusHeadMossy.SetInt("_RampInfo", 3);
}
ApplyRuinedHead(rootObjects, toggleGroupController);
ApplyFullHead(rootObjects, toggleGroupController);
}
public void ApplyRuinedHead(IDictionary<string, GameObject> rootObjects, SceneObjectToggleGroup toggleGroupController)
{
//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_0086: 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_00fa: 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)
//IL_0142: Unknown result type (might be due to invalid IL or missing references)
if (rootObjects.TryGetValue("HOLDER: Ruins", out var value))
{
Transform val = (from Transform x in (IEnumerable)value.transform
where ((Object)((Component)x).gameObject).name == "GPRuinedRing1"
select x).ElementAtOrDefault(1);
if (Object.op_Implicit((Object)(object)val))
{
GameObject val2 = Object.Instantiate<GameObject>(PermutationBehaviour.Addressable<GameObject>("RoR2/DLC1/voidraid/mdlRaidColossusHeadDestroyed.fbx"));
Transform obj = val2.transform.Find("mdlRaidColossusHeadDestroyed");
obj.localPosition = Vector3.zero;
obj.localEulerAngles = Vector3.zero;
obj.localScale = Vector3.one * 5f;
((Renderer)((Component)obj).GetComponent<MeshRenderer>()).sharedMaterial = matColossusHeadMossy;
((Component)obj).gameObject.layer = LayerIndex.world.intVal;
((Component)obj).gameObject.AddComponent<MeshCollider>();
((Component)obj).gameObject.AddComponent<SurfaceDefProvider>().surfaceDef = PermutationBehaviour.Addressable<SurfaceDef>("RoR2/Base/Common/sdStone.asset");
val2.transform.localPosition = new Vector3(235f, 65.1f, 30f);
val2.transform.localEulerAngles = new Vector3(270f, 300f, 0f);
val2.AddComponent<GateStateSetter>().gateToDisableWhenEnabled = "BlockedByRuinedColossusHead";
val2.SetActive(false);
ref GameObjectToggleGroup[] toggleGroups = ref toggleGroupController.toggleGroups;
GameObjectToggleGroup val3 = new GameObjectToggleGroup
{
objects = (GameObject[])(object)new GameObject[2]
{
((Component)val).gameObject,
val2
},
minEnabled = 1,
maxEnabled = 1
};
ArrayUtils.ArrayAppend<GameObjectToggleGroup>(ref toggleGroups, ref val3);
}
}
}
public void ApplyFullHead(IDictionary<string, GameObject> rootObjects, SceneObjectToggleGroup toggleGroupController)
{
//IL_006d: 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_0080: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_00fb: 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)
//IL_0133: Unknown result type (might be due to invalid IL or missing references)
//IL_014d: Unknown result type (might be due to invalid IL or missing references)
if (rootObjects.TryGetValue("HOLDER: Columns", out var value))
{
Transform val = (from x in value.transform.AllChildren()
where ((Object)x).name == "GP_TerrainColumn"
select x).ElementAtOrDefault(2);
if (Object.op_Implicit((Object)(object)val))
{
GameObject val2 = Object.Instantiate<GameObject>(((Component)val).gameObject, val.parent);
Transform transform = val2.transform;
Vector3 localPosition = ((Component)val).transform.localPosition;
localPosition.y = 0f;
transform.localPosition = localPosition;
val2.SetActive(false);
Transform transform2 = new GameObject("colossusHead1Parent").transform;
GameObject obj = Object.Instantiate<GameObject>(PermutationBehaviour.Addressable<GameObject>("RoR2/Base/Common/Props/mdlColossusHead1.fbx"), transform2);
((Renderer)obj.GetComponent<MeshRenderer>()).sharedMaterial = matColossusHeadMossy;
obj.layer = LayerIndex.world.intVal;
obj.AddComponent<MeshCollider>();
obj.AddComponent<SurfaceDefProvider>().surfaceDef = PermutationBehaviour.Addressable<SurfaceDef>("RoR2/Base/Common/sdStone.asset");
obj.transform.localScale = Vector3.one * 5f;
obj.transform.localEulerAngles = new Vector3(270f, 0f, 0f);
transform2.localPosition = new Vector3(-35f, 38f, -152f);
transform2.localEulerAngles = new Vector3(355f, 75f, 350f);
((Component)transform2).gameObject.AddComponent<GateStateSetter>().gateToDisableWhenEnabled = "BlockedByFullColossusHead";
((Component)transform2).gameObject.SetActive(false);
SetSceneObjectsActive setSceneObjectsActive = ((Component)transform2).gameObject.AddComponent<SetSceneObjectsActive>();
setSceneObjectsActive.objectsToDeactivate = new List<GameObject>(1) { ((Component)val).gameObject };
setSceneObjectsActive.objectsToActivate = new List<GameObject>(1) { val2 };
ref GameObject[] objects = ref toggleGroupController.toggleGroups[3].objects;
GameObject gameObject = ((Component)transform2).gameObject;
ArrayUtils.ArrayAppend<GameObject>(ref objects, ref gameObject);
}
}
}
}
[RegisterPermutation("golemplains", "Titanic Plains", "Longer Backwall", description = "The backwall on the original Titanic Plains variant will sometimes extend to the edge of the stage")]
public class MoreBackwall : PermutationBehaviour, StagePermutationsPlugin.IAsyncInit
{
private const string GATE_NAME = "BlockedByLongerBackwall";
public IEnumerator Init()
{
AsyncOperationHandle<NodeGraph> golemplainsGroundNodesNodegraph = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/golemplains/golemplainsGroundNodesNodegraph.asset");
AsyncOperationHandle<NodeGraph> golemplainsAirNodesNodegraph = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/golemplains/golemplainsAirNodesNodegraph.asset");
List<NodeIndex> dest = new List<NodeIndex>();
yield return golemplainsGroundNodesNodegraph;
NodeGraph result = golemplainsGroundNodesNodegraph.Result;
BlockMap<NodeIndex, NodePositionGetter> blockMap = result.blockMap;
Bounds val = new Bounds(new Vector3(-70f, -140f, -362f), new Vector3(100f, 40f, 55f));
blockMap.GetItemsInBounds(ref val, dest);
result.blockMap.GetItemsInSphere(new Vector3(50f, -120f, -380f), 100f, dest);
result.blockMap.GetItemsInSphere(new Vector3(-33.5f, -152.7f, -332.2f), 3f, dest);
PermutationBehaviour.AssignNodesToGate(result, dest, "BlockedByLongerBackwall");
dest.Clear();
yield return golemplainsAirNodesNodegraph;
NodeGraph result2 = golemplainsAirNodesNodegraph.Result;
BlockMap<NodeIndex, NodePositionGetter> blockMap2 = result2.blockMap;
val = new Bounds(new Vector3(-70f, -140f, -362f), new Vector3(100f, 40f, 60f));
blockMap2.GetItemsInBounds(ref val, dest);
result2.blockMap.GetItemsInSphere(new Vector3(50f, -120f, -380f), 100f, dest);
result2.blockMap.GetItemsInSphere(new Vector3(-96f, -122f, -397f), 20f, dest);
PermutationBehaviour.AssignNodesToGate(result2, dest, "BlockedByLongerBackwall");
}
public override void Apply(Scene scene, IDictionary<string, GameObject> rootObjects, SceneObjectToggleGroup toggleGroupController)
{
//IL_0025: 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_00c2: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Object.Instantiate<GameObject>(PermutationBehaviour.Addressable<GameObject>("RoR2/Base/dampcave/DCTerrainBackwall.prefab"));
val.transform.localPosition = new Vector3(253f, -42f, -310f);
val.transform.localEulerAngles = new Vector3(270f, 112f, 0f);
((Renderer)val.GetComponent<MeshRenderer>()).sharedMaterial = PermutationBehaviour.Addressable<Material>("RoR2/Base/golemplains/matGPTerrain.mat");
val.AddComponent<GateStateSetter>().gateToDisableWhenEnabled = "BlockedByLongerBackwall";
val.SetActive(false);
if (rootObjects.TryGetValue("HOLDER: Ruined Pieces", out var value) && value.transform.TryFind("GPRuinedRing1 (3)", out var child))
{
val.AddComponent<SetSceneObjectsActive>().objectsToDeactivate = new List<GameObject>(1) { ((Component)child).gameObject };
}
ref GameObjectToggleGroup[] toggleGroups = ref toggleGroupController.toggleGroups;
GameObjectToggleGroup val2 = new GameObjectToggleGroup
{
objects = (GameObject[])(object)new GameObject[1] { val },
minEnabled = 0,
maxEnabled = 1
};
ArrayUtils.ArrayAppend<GameObjectToggleGroup>(ref toggleGroups, ref val2);
}
}
}
namespace StagePermutations.foggyswamp
{
[RegisterPermutation("foggyswamp", "Wetland Aspect", "Ruin Platform Variation", description = "Sometimes the ruin platform near the edge of Wetland Aspect will disappear")]
public class FramePlatform : PermutationBehaviour, StagePermutationsPlugin.IAsyncInit
{
private const string GATE_NAME = "RuinFramePlatform";
public IEnumerator Init()
{
AsyncOperationHandle<NodeGraph> foggyswampGroundNodesNodegraph = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/foggyswamp/foggyswampGroundNodesNodegraph.asset");
AsyncOperationHandle<NodeGraph> foggyswampAirNodesNodegraph = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/foggyswamp/foggyswampAirNodesNodegraph.asset");
List<NodeIndex> dest = new List<NodeIndex>();
Bounds[] array = new Bounds[2];
Bounds val = default(Bounds);
((Bounds)(ref val)).min = new Vector3(84f, -155f, -341f);
((Bounds)(ref val)).max = new Vector3(149f, -111f, -301f);
array[0] = val;
val = default(Bounds);
((Bounds)(ref val)).min = new Vector3(128f, -142f, -340f);
((Bounds)(ref val)).max = new Vector3(209f, -89f, -284f);
array[1] = val;
Bounds[] bounds = (Bounds[])(object)array;
yield return foggyswampGroundNodesNodegraph;
NodeGraph result = foggyswampGroundNodesNodegraph.Result;
Bounds[] array2 = bounds;
for (int i = 0; i < array2.Length; i++)
{
Bounds bounds2 = array2[i];
result.blockMap.GetItemsInBounds(ref bounds2, dest);
PermutationBehaviour.EnsureNodesInBounds(result, dest, bounds2);
PermutationBehaviour.AssignNodesToGate(result, dest, "RuinFramePlatform");
dest.Clear();
}
yield return foggyswampAirNodesNodegraph;
NodeGraph result2 = foggyswampAirNodesNodegraph.Result;
array2 = bounds;
for (int i = 0; i < array2.Length; i++)
{
Bounds bounds3 = array2[i];
result2.blockMap.GetItemsInBounds(ref bounds3, dest);
PermutationBehaviour.EnsureNodesInBounds(result2, dest, bounds3);
PermutationBehaviour.AssignNodesToGate(result2, dest, "RuinFramePlatform");
dest.Clear();
}
}
public override void Apply(Scene scene, IDictionary<string, GameObject> rootObjects, SceneObjectToggleGroup toggleGroupController)
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Expected O, but got Unknown
//IL_01be: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: 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_00a7: 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_00b2: Unknown result type (might be due to invalid IL or missing references)
//IL_00c9: 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_00ee: Unknown result type (might be due to invalid IL or missing references)
//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
//IL_0110: 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_012c: Expected O, but got Unknown
//IL_0139: 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)
//IL_0144: Unknown result type (might be due to invalid IL or missing references)
if (!rootObjects.TryGetValue("HOLDER: Ruin Pieces", out var value) || !value.transform.TryFind("FSGiantRuinFrameCollision", out var child))
{
return;
}
GameObject val = new GameObject("FSGiantRuinFrameCollisionDisabled");
val.AddComponent<GateStateSetter>().gateToDisableWhenEnabled = "RuinFramePlatform";
val.SetActive(false);
if (rootObjects.TryGetValue("HOLDER: Foliage", out var value2))
{
val.AddComponent<SetSceneObjectsActive>(out SetSceneObjectsActive component);
Bounds[] array = new Bounds[2];
Bounds val2 = default(Bounds);
((Bounds)(ref val2)).min = new Vector3(84f, -160f, -341f);
((Bounds)(ref val2)).max = new Vector3(149f, -111f, -301f);
array[0] = val2;
val2 = default(Bounds);
((Bounds)(ref val2)).min = new Vector3(128f, -160f, -340f);
((Bounds)(ref val2)).max = new Vector3(209f, -89f, -284f);
array[1] = val2;
Bounds[] array2 = (Bounds[])(object)array;
foreach (Transform item in value2.transform)
{
foreach (Transform item2 in item)
{
Transform val3 = item2;
Bounds[] array3 = array2;
for (int i = 0; i < array3.Length; i++)
{
Bounds val4 = array3[i];
if (((Bounds)(ref val4)).Contains(val3.position))
{
component.objectsToDeactivate.Add(((Component)val3).gameObject);
break;
}
}
}
}
}
ref GameObjectToggleGroup[] toggleGroups = ref toggleGroupController.toggleGroups;
GameObjectToggleGroup val5 = new GameObjectToggleGroup
{
objects = (GameObject[])(object)new GameObject[2]
{
((Component)child).gameObject,
val
},
minEnabled = 1,
maxEnabled = 1
};
ArrayUtils.ArrayAppend<GameObjectToggleGroup>(ref toggleGroups, ref val5);
}
}
[RegisterPermutation("foggyswamp", "Wetland Aspect", "More Ruin Rings", description = "Two more floating ruin rings will sometimes appear on Wetland Aspect")]
public class MoreRings : PermutationBehaviour
{
public override void Apply(Scene scene, IDictionary<string, GameObject> rootObjects, SceneObjectToggleGroup toggleGroupController)
{
//IL_003a: 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_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: 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_00bb: 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_00d7: Unknown result type (might be due to invalid IL or missing references)
if (rootObjects.TryGetValue("HOLDER: Tree Trunks w Collision", out var value) && value.transform.TryFind("FSTreeTrunkLongCollision (1)/FSRuinRingCollision", out var child))
{
GameObject val = Object.Instantiate<GameObject>(((Component)child).gameObject, new Vector3(-5f, 0f, 26f), Quaternion.Euler(5f, 0f, 90f));
val.SetActive(false);
val.transform.localScale = Vector3.one * 22f;
GameObject val2 = Object.Instantiate<GameObject>(((Component)child).gameObject, new Vector3(-39f, 65f, -82f), Quaternion.Euler(0f, 0f, 90f));
val2.SetActive(false);
val2.transform.localScale = Vector3.one * 22f;
ref GameObjectToggleGroup[] toggleGroups = ref toggleGroupController.toggleGroups;
GameObjectToggleGroup val3 = new GameObjectToggleGroup
{
objects = (GameObject[])(object)new GameObject[2] { val, val2 },
minEnabled = 0,
maxEnabled = 2
};
ArrayUtils.ArrayAppend<GameObjectToggleGroup>(ref toggleGroups, ref val3);
}
}
}
[RegisterPermutation("foggyswamp", "Wetland Aspect", "Stump to Tree", description = "Sometimes the large tree stump on Wetland Aspect will be replaced by a full tree")]
public class StumpToTree : PermutationBehaviour
{
public override void Apply(Scene scene, IDictionary<string, GameObject> rootObjects, SceneObjectToggleGroup toggleGroupController)
{
//IL_0067: 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_00d2: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: 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_0117: 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_0161: Unknown result type (might be due to invalid IL or missing references)
//IL_017c: Unknown result type (might be due to invalid IL or missing references)
//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
if (rootObjects.TryGetValue("HOLDER: Tree Trunks w Collision", out var value) && value.transform.TryFind("CompositeTreeTrunk", out var child) && value.transform.TryFind("FSTreeTrunkStumpLarge", out var child2))
{
GameObject val = Object.Instantiate<GameObject>(((Component)child).gameObject, child.parent);
val.SetActive(false);
val.transform.localPosition = new Vector3(-117f, -151f, -241f);
if (val.transform.TryFind("FSTreeTrunkEnormousCollision (2)", out var child3))
{
((Component)child3).gameObject.SetActive(false);
}
if (val.transform.TryFind("FSTreeTrunkEnormousCollision", out var child4))
{
child4.localPosition = new Vector3(0f, -5f, 0f);
child4.localEulerAngles = new Vector3(5f, 340f, 7f);
child4.localScale = Vector3.one * 4.3f;
}
if (val.transform.TryFind("FSRootBundleLargeCollision (1)", out var child5))
{
child5.localPosition = new Vector3(-3f, -8f, 6f);
child5.localEulerAngles = new Vector3(80f, 69f, 3f);
}
if (val.transform.TryFind("FSTreeTrunkEnormousNoCollisionSkybox", out var child6))
{
child6.localPosition = new Vector3(-15f, 0f, 0f);
child6.localEulerAngles = new Vector3(0f, 10f, 357f);
}
if (val.transform.TryFind("FSRootBundleSmallNoCollision", out var child7))
{
child7.localPosition = new Vector3(2f, 2f, -17f);
}
val.AddComponent<DisableOcclusionNearby>().radius = 50f;
ref GameObjectToggleGroup[] toggleGroups = ref toggleGroupController.toggleGroups;
GameObjectToggleGroup val2 = new GameObjectToggleGroup
{
objects = (GameObject[])(object)new GameObject[2]
{
((Component)child2).gameObject,
val
},
minEnabled = 1,
maxEnabled = 1
};
ArrayUtils.ArrayAppend<GameObjectToggleGroup>(ref toggleGroups, ref val2);
}
}
}
}
namespace StagePermutations.blackbeach
{
[RegisterPermutation("blackbeach", "Distant Roost", "New Ruin Gate", description = "Sometimes a new ruin gate will appear on the upper walkway of the original Distant Roost variant")]
public class MoreRuins : PermutationBehaviour, StagePermutationsPlugin.IAsyncInit
{
private const string GATE_NAME = "BlockedByRuinsPath";
public IEnumerator Init()
{
AsyncOperationHandle<NodeGraph> blackbeachGroundNodes = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/blackbeach/blackbeachGroundNodes.asset");
AsyncOperationHandle<NodeGraph> blackbeachAirNodes = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/blackbeach/blackbeachAirNodes.asset");
List<NodeIndex> dest = new List<NodeIndex>();
yield return blackbeachGroundNodes;
NodeGraph result = blackbeachGroundNodes.Result;
result.blockMap.GetItemsInSphere(new Vector3(103f, -159f, -78f), 5f, dest);
PermutationBehaviour.AssignNodesToGate(result, dest, "BlockedByRuinsPath");
dest.Clear();
yield return blackbeachAirNodes;
NodeGraph result2 = blackbeachAirNodes.Result;
result2.blockMap.GetItemsInSphere(new Vector3(123f, -135f, -75f), 10f, dest);
PermutationBehaviour.AssignNodesToGate(result2, dest, "BlockedByRuinsPath");
}
public override void Apply(Scene scene, IDictionary<string, GameObject> rootObjects, SceneObjectToggleGroup toggleGroupController)
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Expected O, but got Unknown
//IL_007e: 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_00de: 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)
//IL_0139: 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)
if (rootObjects.TryGetValue("GAMEPLAY SPACE", out var value) && value.transform.TryFind("Ruins/BbRuinArch_LOD0 (2)", out var child))
{
GameObject val = new GameObject("ToggleableRuins");
val.AddComponent<GateStateSetter>().gateToDisableWhenEnabled = "BlockedByRuinsPath";
val.SetActive(false);
val.transform.SetParent(value.transform, false);
Object.Instantiate<GameObject>(((Component)child).gameObject, val.transform).transform.localPosition = new Vector3(120f, -143f, -74.5f);
PermutationBehaviour.Addressable<Mesh>("RoR2/Base/blackbeach/BbRuinStep1_LOD0.fbx", out var asset);
if (value.transform.TryFind("Ruins/BbRuinStep1_LOD0 (1)", out var child2))
{
GameObject obj = Object.Instantiate<GameObject>(((Component)child2).gameObject, val.transform);
obj.GetComponent<MeshFilter>().sharedMesh = asset;
obj.transform.localPosition = new Vector3(96f, -155.5f, -64f);
obj.transform.localEulerAngles = new Vector3(270f, 240f, 0f);
GameObject obj2 = Object.Instantiate<GameObject>(((Component)child2).gameObject, val.transform);
obj2.GetComponent<MeshFilter>().sharedMesh = asset;
obj2.transform.localPosition = new Vector3(108f, -151.5f, -63f);
obj2.transform.localEulerAngles = new Vector3(270f, 255f, 0f);
}
ref GameObjectToggleGroup[] toggleGroups = ref toggleGroupController.toggleGroups;
GameObjectToggleGroup val2 = new GameObjectToggleGroup
{
objects = (GameObject[])(object)new GameObject[1] { val },
minEnabled = 0,
maxEnabled = 1
};
ArrayUtils.ArrayAppend<GameObjectToggleGroup>(ref toggleGroups, ref val2);
}
}
}
[RegisterPermutation("blackbeach2", "Distant Roost", "Ruin Gate Door", description = "Sometimes the door of the large ruin gate on the alternate Distant Roost variant will be closed")]
public class RuinGateDoor : PermutationBehaviour, StagePermutationsPlugin.IAsyncInit
{
private const string GATE_NAME = "BlockedByRuinGateDoor";
public IEnumerator Init()
{
AsyncOperationHandle<NodeGraph> blackbeach2GroundNodesNodegraph = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/blackbeach2/blackbeach2GroundNodesNodegraph.asset");
AsyncOperationHandle<NodeGraph> blackbeach2AirNodesNodegraph = Addressables.LoadAssetAsync<NodeGraph>((object)"RoR2/Base/blackbeach2/blackbeach2AirNodesNodegraph.asset");
List<NodeIndex> dest = new List<NodeIndex>();
yield return blackbeach2GroundNodesNodegraph;
NodeGraph result = blackbeach2GroundNodesNodegraph.Result;
result.blockMap.GetItemsInSphere(new Vector3(-8f, 33f, -156f), 10f, dest);
PermutationBehaviour.AssignNodesToGate(result, dest, "BlockedByRuinGateDoor");
dest.Clear();
yield return blackbeach2AirNodesNodegraph;
NodeGraph result2 = blackbeach2AirNodesNodegraph.Result;
result2.blockMap.GetItemsInSphere(new Vector3(-5f, 44f, -163f), 15f, dest);
PermutationBehaviour.AssignNodesToGate(result2, dest, "BlockedByRuinGateDoor");
}
public override void Apply(Scene scene, IDictionary<string, GameObject> rootObjects, SceneObjectToggleGroup toggleGroupController)
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Expected O, but got Unknown
//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_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: 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_00f8: 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_0112: Unknown result type (might be due to invalid IL or missing references)
//IL_014c: 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_0175: Unknown result type (might be due to invalid IL or missing references)
//IL_017a: Unknown result type (might be due to invalid IL or missing references)
//IL_0185: Unknown result type (might be due to invalid IL or missing references)
//IL_0195: Unknown result type (might be due to invalid IL or missing references)
//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
if (rootObjects.TryGetValue("HOLDER: Ruins", out var value) && value.transform.TryFind("GROUP: Gates", out var child))
{
GameObject val = new GameObject("RuinGateDoor");
val.AddComponent<GateStateSetter>().gateToDisableWhenEnabled = "BlockedByRuinGateDoor";
val.SetActive(false);
val.transform.parent = child.Find("BbRuinArch_LOD0");
val.transform.localPosition = Vector3.zero;
val.transform.localEulerAngles = Vector3.zero;
val.transform.localScale = new Vector3(0.09f, 0.17f, 0.17f);
GameObject val2 = Object.Instantiate<GameObject>(((Component)child.Find("DownstairsGate, Open/BbRuinGateDoor1_LOD0")).gameObject, val.transform);
val2.transform.localPosition = new Vector3(0f, 0.75f, 0f);
val2.transform.localEulerAngles = Vector3.zero;
Transform transform = val2.transform;
Vector3 localScale = val2.transform.localScale;
localScale.z = 0f - val2.transform.localScale.z;
transform.localScale = localScale;
GameObject val3 = Object.Instantiate<GameObject>(((Component)child.Find("DownstairsGate, Open/BbRuinGateDoor2_LOD0")).gameObject, val.transform);
val3.transform.localPosition = new Vector3(0f, -0.75f, 0f);
val3.transform.localEulerAngles = Vector3.zero;
Transform transform2 = val3.transform;
localScale = val3.transform.localScale;
localScale.z = 0f - val3.transform.localScale.z;
transform2.localScale = localScale;
ref GameObjectToggleGroup[] toggleGroups = ref toggleGroupController.toggleGroups;
GameObjectToggleGroup val4 = new GameObjectToggleGroup
{
objects = (GameObject[])(object)new GameObject[1] { val },
minEnabled = 0,
maxEnabled = 1
};
ArrayUtils.ArrayAppend<GameObjectToggleGroup>(ref toggleGroups, ref val4);
}
}
}
}