Decompiled source of CoolerStages v1.8.3

CoolerStages.dll

Decompiled 6 days ago
using System;
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 Microsoft.CodeAnalysis;
using On.RoR2;
using RoR2;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Rendering;
using UnityEngine.Rendering.PostProcessing;
using UnityEngine.SceneManagement;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("CoolerStages")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+eecc732a7537e7729f0f77e122210c318ef5068c")]
[assembly: AssemblyProduct("CoolerStages")]
[assembly: AssemblyTitle("CoolerStages")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace CoolerStages
{
	[BepInPlugin("com.Nuxlar.CoolerStages", "CoolerStages", "1.8.3")]
	public class CoolerStages : BaseUnityPlugin
	{
		private static readonly PostProcessProfile droughtProfile = Addressables.LoadAssetAsync<PostProcessProfile>((object)"RoR2/Base/title/ppSceneWispGraveyard.asset").WaitForCompletion();

		private static readonly PostProcessProfile voidProfile = Addressables.LoadAssetAsync<PostProcessProfile>((object)"RoR2/DLC1/Common/Void/ppSceneVoidStage.asset").WaitForCompletion();

		private static readonly Material nightTerrainMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/wispgraveyard/matWPTerrain.mat").WaitForCompletion();

		private static readonly Material nightTerrainMat2 = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/wispgraveyard/matWPTerrainRocky.mat").WaitForCompletion();

		private static readonly Material nightDetailMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/wispgraveyard/matTempleObelisk.mat").WaitForCompletion();

		private static readonly Material nightDetailMat2 = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Common/TrimSheets/matTrimsheetGraveyardTempleWhiteGrassy.mat").WaitForCompletion();

		private static readonly Material nightDetailMat3 = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/foggyswamp/matFSTreeTrunkLightMoss.mat").WaitForCompletion();

		private static readonly Material danTerrain = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/arena/matArenaTerrainVerySnowy.mat").WaitForCompletion();

		private static readonly Material danDetail = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/voidstage/matVoidFoam.mat").WaitForCompletion();

		private static readonly Material danDetail2 = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Common/TrimSheets/matTrimSheetAlien1BossEmission.mat").WaitForCompletion();

		private static readonly Material danDetail3 = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/voidstage/matVoidTrim.mat").WaitForCompletion();

		private static readonly Material ruinTerrain = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/itancientloft/matAncientLoft_TerrainInfiniteTower.mat").WaitForCompletion();

		private static readonly Material ruinDetail = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/itancientloft/matAncientLoft_BoulderInfiniteTower.mat").WaitForCompletion();

		private static readonly Material ruinDetail2 = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/itancientloft/matAncientLoft_TempleProjectedInfiniteTower.mat").WaitForCompletion();

		private static readonly Material ruinDetail3 = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/rootjungle/matRJTree.mat").WaitForCompletion();

		private static readonly Material smSimTerrainMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/itskymeadow/matSMTerrainInfiniteTower.mat").WaitForCompletion();

		private static readonly Material smSimDetailMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/itskymeadow/matSMRockInfiniteTower.mat").WaitForCompletion();

		private static readonly Material smSimDetailMat2 = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/itskymeadow/matTrimSheetMeadowRuinsProjectedInfiniteTower.mat").WaitForCompletion();

		private static readonly Material smSimtDetailMat3 = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/itskymeadow/matSMSpikeBridgeInfinitetower.mat").WaitForCompletion();

		private static readonly Material smTerrainMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/skymeadow/matSMTerrain.mat").WaitForCompletion();

		private static readonly Material smDetailMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/skymeadow/matSMRock.mat").WaitForCompletion();

		private static readonly Material smDetailMat2 = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Common/TrimSheets/matTrimSheetMeadowRuinsProjected.mat").WaitForCompletion();

		private static readonly Material smDetailMat3 = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/skymeadow/matSMSpikeBridge.mat").WaitForCompletion();

		private static readonly Material dcSimTerrainMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/itdampcave/matDCTerrainFloorInfiniteTower.mat").WaitForCompletion();

		private static readonly Material dcSimDetailMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/itdampcave/matDCBoulderInfiniteTower.mat").WaitForCompletion();

		private static readonly Material dcSimDetailMat2 = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/itdampcave/matTrimSheetLemurianRuinsLightInfiniteTower.mat").WaitForCompletion();

		private static readonly Material dcSimDetailMat3 = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/itdampcave/matDCStalagmiteInfiniteTower.mat").WaitForCompletion();

		private static readonly Material gpSimTerrainMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/itgolemplains/matGPTerrainInfiniteTower.mat").WaitForCompletion();

		private static readonly Material gpSimDetailMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/itgolemplains/matGPBoulderMossyProjectedInfiniteTower.mat").WaitForCompletion();

		private static readonly Material gpSimDetailMat2 = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/itgolemplains/matTrimSheetMossyProjectedHugeInfiniteTower.mat").WaitForCompletion();

		private static readonly Material gpSimDetailMat3 = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/foggyswamp/matFSTreeTrunkLightMoss.mat").WaitForCompletion();

		private static readonly Material gooSimTerrainMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/itgoolake/matGoolakeTerrainInfiniteTower.mat").WaitForCompletion();

		private static readonly Material gooSimDetailMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/itgoolake/matGoolakeRocksInfiniteTower.mat").WaitForCompletion();

		private static readonly Material gooSimDetailMat2 = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/itgoolake/matGoolakeStoneTrimLightSandInfiniteTower.mat").WaitForCompletion();

		private static readonly Material gooSimDetailMat3 = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/itgoolake/matEelSkeleton2InfiniteTower.mat").WaitForCompletion();

		private static readonly Material moonTerrainMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/moon/matMoonTerrain.mat").WaitForCompletion();

		private static readonly Material moonDetailMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/moon/matMoonBoulder.mat").WaitForCompletion();

		private static readonly Material moonDetailMat2 = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/moon/matMoonBridge.mat").WaitForCompletion();

		private static readonly Material moonDetailMat3 = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/moon/matMoonBaseStandTriplanar.mat").WaitForCompletion();

		private static readonly Material voidTerrainMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/voidstage/matVoidTerrain.mat").WaitForCompletion();

		private static readonly Material voidDetailMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/voidstage/matVoidCoralPlatformRed.mat").WaitForCompletion();

		private static readonly Material voidDetailMat2 = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/voidstage/matVoidMetalTrimGrassyVertexColorsOnly.mat").WaitForCompletion();

		private static readonly Material voidDetailMat3 = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/voidstage/matVoidCoral.mat").WaitForCompletion();

		private static readonly Material bazaarTerrainMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/bazaar/matBazaarTerrainTriplanar.mat").WaitForCompletion();

		private static readonly Material bazaarDetailMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/bazaar/matBazaarWoodSandy.mat").WaitForCompletion();

		private static readonly Material bazaarDetailMat2 = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/intro/matColonyShipStandard.mat").WaitForCompletion();

		private static readonly Material bazaarDetailMat3 = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/mysteryspace/matMSObeliskHeart.mat").WaitForCompletion();

		private static readonly Material poolsTerrainMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/sulfurpools/matSPGround.mat").WaitForCompletion();

		private static readonly Material rpdTerrainMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/frozenwall/matFwTerrainFloor.mat").WaitForCompletion();

		private static readonly Material forestTerrainMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/snowyforest/matSFGround.mat").WaitForCompletion();

		private static readonly List<Material> terrainMaterials = new List<Material>
		{
			nightTerrainMat, danTerrain, ruinTerrain, smSimTerrainMat, dcSimTerrainMat, gpSimTerrainMat, gooSimTerrainMat, moonTerrainMat, bazaarTerrainMat, poolsTerrainMat,
			rpdTerrainMat, forestTerrainMat
		};

		private static readonly List<Material[]> themeMaterials1 = new List<Material[]>
		{
			(Material[])(object)new Material[4] { nightTerrainMat, nightDetailMat, nightDetailMat2, nightDetailMat3 },
			(Material[])(object)new Material[4] { danTerrain, danDetail, danDetail2, danDetail3 },
			(Material[])(object)new Material[4] { ruinTerrain, ruinDetail, ruinDetail2, ruinDetail3 },
			(Material[])(object)new Material[4] { smSimTerrainMat, smSimDetailMat, smSimDetailMat2, smSimtDetailMat3 },
			(Material[])(object)new Material[4] { smTerrainMat, smDetailMat, smDetailMat2, smDetailMat3 },
			(Material[])(object)new Material[4] { dcSimTerrainMat, dcSimDetailMat, dcSimDetailMat2, dcSimDetailMat3 },
			(Material[])(object)new Material[4] { gpSimTerrainMat, gpSimDetailMat, gpSimDetailMat2, gpSimDetailMat3 },
			(Material[])(object)new Material[4] { gooSimTerrainMat, gooSimDetailMat, gooSimDetailMat2, gooSimDetailMat3 },
			(Material[])(object)new Material[4] { moonTerrainMat, moonDetailMat, moonDetailMat2, moonDetailMat3 },
			(Material[])(object)new Material[4] { bazaarTerrainMat, bazaarDetailMat, bazaarDetailMat2, bazaarDetailMat3 }
		};

		private static readonly List<Material[]> themeMaterials2 = new List<Material[]>
		{
			(Material[])(object)new Material[4] { nightTerrainMat2, nightDetailMat, nightDetailMat2, nightDetailMat3 },
			(Material[])(object)new Material[4] { danTerrain, danDetail, danDetail2, danDetail3 },
			(Material[])(object)new Material[4] { ruinTerrain, ruinDetail, ruinDetail2, ruinDetail3 },
			(Material[])(object)new Material[4] { dcSimTerrainMat, dcSimDetailMat, dcSimDetailMat2, dcSimDetailMat3 }
		};

		private static readonly List<PostProcessProfile> themeProfiles = new List<PostProcessProfile>
		{
			droughtProfile,
			voidProfile,
			Addressables.LoadAssetAsync<PostProcessProfile>((object)"RoR2/Base/title/ppSceneBlackbeach.asset").WaitForCompletion(),
			Addressables.LoadAssetAsync<PostProcessProfile>((object)"RoR2/Base/title/ppSceneFoggyswamp.asset").WaitForCompletion(),
			Addressables.LoadAssetAsync<PostProcessProfile>((object)"RoR2/Base/title/ppSceneGolemplainsFoggy.asset").WaitForCompletion(),
			Addressables.LoadAssetAsync<PostProcessProfile>((object)"RoR2/Base/title/ppSceneMoon.asset").WaitForCompletion()
		};

		private static readonly List<Texture2D> normals = new List<Texture2D>
		{
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/blackbeach/texBBMudNormal.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/Common/texNormalBumpyRock.jpg").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/skymeadow/texSMRockBridgeNormal.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/Common/texRockyNormalsFlattened.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/mysteryspace/texMSSandNormal.png").WaitForCompletion()
		};

		private static readonly List<Texture2D> blues = new List<Texture2D>
		{
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/wispgraveyard/texWIPAshDiffuse.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/blackbeach/texBlackbeachDirt.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/DLC1/itancientloft/texAncientLoft_LichenGreenOvergrownGroundStone.tga").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/skymeadow/texSMLichenTerrain.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/DLC1/itancientloft/texDCGravelDiffuseInfiniteTower.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/golemplains/texGPLichenTerrain.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/goolake/texGLMudDiffuse.png").WaitForCompletion()
		};

		private static readonly List<Texture2D> greens = new List<Texture2D>
		{
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/golemplains/texGPGrassTerrain.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/arena/texArenaSandDiffuse.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/DLC1/itancientloft/texAncientLoft_Lichen.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/skymeadow/texSMGrassTerrain.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/DLC1/itdampcave/texDCGrassInfiniteTower.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/DLC1/itgolemplains/texGPGrassInfiniteTower.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/DLC1/itgoolake/texSand1SimpleInfiniteTower.png").WaitForCompletion()
		};

		private static readonly List<Texture2D> reds = new List<Texture2D>
		{
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/blackbeach/texBlackbeachBasicRockSide.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/golemplains/texGPRockSide.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/bazaar/texBazaarRockSide.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/DLC1/ancientloft/texDCGravelDiffuseInfiniteTower.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/skymeadow/texSMRockSide.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/DLC1/itdampcave/texDCRockSideInfiniteTower.png").WaitForCompletion(),
			Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/DLC1/itgoolake/texStage2RockSideInfiniteTower.png").WaitForCompletion()
		};

		private Random rng = new Random();

		private static readonly string[] whitelistedMaps = new string[16]
		{
			"snowyforest", "blackbeach", "blackbeach2", "golemplains", "golemplains2", "goolake", "foggyswamp", "ancientloft", "frozenwall", "wispgraveyard",
			"sulfurpools", "shipgraveyard", "rootjungle", "dampcavesimple", "skymeadow", "moon2"
		};

		public void Awake()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			SceneDirector.Start += new hook_Start(SceneDirector_Start);
		}

		private void SceneDirector_Start(orig_Start orig, SceneDirector self)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0304: Unknown result type (might be due to invalid IL or missing references)
			//IL_0322: Unknown result type (might be due to invalid IL or missing references)
			//IL_0334: Unknown result type (might be due to invalid IL or missing references)
			//IL_039b: Unknown result type (might be due to invalid IL or missing references)
			//IL_03aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d0: 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_03e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0404: Unknown result type (might be due to invalid IL or missing references)
			//IL_040e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0429: Unknown result type (might be due to invalid IL or missing references)
			//IL_0461: Unknown result type (might be due to invalid IL or missing references)
			//IL_0466: Unknown result type (might be due to invalid IL or missing references)
			//IL_0474: Unknown result type (might be due to invalid IL or missing references)
			//IL_0479: Unknown result type (might be due to invalid IL or missing references)
			//IL_0669: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c14: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c19: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c2b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c30: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c42: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c47: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d01: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d06: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d1f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d24: Unknown result type (might be due to invalid IL or missing references)
			//IL_0afc: Unknown result type (might be due to invalid IL or missing references)
			Scene activeScene = SceneManager.GetActiveScene();
			string name = ((Scene)(ref activeScene)).name;
			SceneInfo instance = SceneInfo.instance;
			PostProcessVolume val;
			GameObject val2;
			if (Object.op_Implicit((Object)(object)instance) && whitelistedMaps.Contains(name))
			{
				val = ((Component)instance).GetComponent<PostProcessVolume>();
				if (!Object.op_Implicit((Object)(object)val) || !((Behaviour)val).isActiveAndEnabled)
				{
					val2 = GameObject.Find("PP + Amb");
					if (Object.op_Implicit((Object)(object)val2))
					{
						bool? obj;
						if (val2 == null)
						{
							obj = null;
						}
						else
						{
							PostProcessVolume component = val2.GetComponent<PostProcessVolume>();
							obj = ((component != null) ? new bool?(!((Behaviour)component).isActiveAndEnabled) : null);
						}
						bool? flag = obj;
						if (!flag.GetValueOrDefault(true))
						{
							goto IL_00aa;
						}
					}
					val2 = GameObject.Find("PP, Global");
					goto IL_00aa;
				}
				goto IL_0232;
			}
			goto IL_0d58;
			IL_0154:
			if (Object.op_Implicit((Object)(object)val2))
			{
				bool? obj2;
				if (val2 == null)
				{
					obj2 = null;
				}
				else
				{
					PostProcessVolume component2 = val2.GetComponent<PostProcessVolume>();
					obj2 = ((component2 != null) ? new bool?(!((Behaviour)component2).isActiveAndEnabled) : null);
				}
				bool? flag = obj2;
				if (!flag.GetValueOrDefault(true))
				{
					goto IL_01e3;
				}
			}
			GameObject obj3 = GameObject.Find("MapZones");
			object obj4;
			if (obj3 == null)
			{
				obj4 = null;
			}
			else
			{
				Transform transform = obj3.transform;
				if (transform == null)
				{
					obj4 = null;
				}
				else
				{
					Transform obj5 = transform.Find("PostProcess Zones");
					if (obj5 == null)
					{
						obj4 = null;
					}
					else
					{
						Transform obj6 = obj5.Find("SandOvercast");
						obj4 = ((obj6 != null) ? ((Component)obj6).gameObject : null);
					}
				}
			}
			val2 = (GameObject)obj4;
			goto IL_01e3;
			IL_0232:
			if (Object.op_Implicit((Object)(object)val))
			{
				int index = rng.Next(themeMaterials1.Count);
				Material[] array = themeMaterials1[index];
				int index2 = rng.Next(themeMaterials2.Count);
				Material[] array2 = themeMaterials2[index2];
				Material val3 = array[0];
				Material val4 = array[1];
				Material val5 = array[2];
				Material val6 = array[3];
				Material val7 = array2[0];
				Material val8 = array2[1];
				Material val9 = array2[2];
				Material val10 = array2[3];
				int index3 = rng.Next(themeProfiles.Count);
				PostProcessProfile val11 = themeProfiles[index3];
				if (name != "moon2")
				{
					val.profile = val11;
				}
				RampFog setting = val11.GetSetting<RampFog>();
				GameObject val12 = GameObject.Find("Directional Light (SUN)");
				Color gray = Color.gray;
				if (Object.op_Implicit((Object)(object)val12))
				{
					Light component3 = val12.GetComponent<Light>();
					float num = default(float);
					float num2 = default(float);
					float num3 = default(float);
					Color.RGBToHSV(ParameterOverride<Color>.op_Implicit((ParameterOverride<Color>)(object)setting.fogColorEnd), ref num, ref num2, ref num3);
					float num4 = default(float);
					float num5 = default(float);
					float num6 = default(float);
					Color.RGBToHSV(component3.color, ref num4, ref num5, ref num6);
					if (name == "wispgraveyard" || name == "ancientloft")
					{
						component3.color = new Color(((ParameterOverride<Color>)(object)setting.fogColorEnd).value.a, ((ParameterOverride<Color>)(object)setting.fogColorEnd).value.g, ((ParameterOverride<Color>)(object)setting.fogColorEnd).value.b, 1f);
						component3.color = BrightenColor(component3.color, 0.05f);
						SetAmbientLight component4 = ((Component)val).GetComponent<SetAmbientLight>();
						component4.ambientIntensity = 1f;
						component4.ambientSkyColor = Color.gray;
						component4.ApplyLighting();
						gray = component3.color;
					}
					else
					{
						component3.color = Color.HSVToRGB(num, num5, num6);
						component3.color = BrightenColor(component3.color, 0.1f);
						SetAmbientLight val13 = ((Component)component3).gameObject.AddComponent<SetAmbientLight>();
						val13.ambientMode = (AmbientMode)3;
						val13.setAmbientLightColor = true;
						if (name == "dampcavesimple")
						{
							val13.ambientIntensity = 0.75f;
						}
						else
						{
							val13.ambientIntensity = 0.5f;
						}
						val13.ambientSkyColor = component3.color;
						val13.ApplyLighting();
						gray = component3.color;
					}
					component3.shadowStrength = 0.75f;
					bool flag2;
					bool flag3;
					switch (name)
					{
					case "foggyswamp":
					case "sulfurpools":
					case "shipgraveyard":
					case "dampcavesimple":
						flag2 = IsBright(val7);
						flag3 = ((Object)val7).name.Contains("matDC");
						break;
					default:
						flag2 = IsBright(val3);
						flag3 = ((Object)val3).name.Contains("matDC");
						break;
					}
					if (flag2)
					{
						if (name == "snowyforest" || name == "skymeadow" || name.Contains("blackbeach") || name == "shipgraveyard")
						{
							component3.intensity = 1f;
						}
						else if (flag3 && ((Object)val11).name.Contains("void"))
						{
							component3.intensity = 1.5f;
						}
						else if (name == "dampcavesimple" || flag3)
						{
							component3.intensity = (((Object)val7).name.Contains("snowy") ? 0.5f : 1f);
							component3.shadowStrength = 0.5f;
						}
						else
						{
							component3.intensity = 0.5f;
						}
					}
					else if (name == "snowyforest" || name == "skymeadow" || name.Contains("blackbeach") || name == "shipgraveyard")
					{
						component3.intensity = 2f;
					}
					else if (name == "dampcavesimple" || flag3)
					{
						component3.intensity = 2f;
						component3.shadowStrength = 0.5f;
					}
					else
					{
						component3.intensity = 1.25f;
					}
					if (name == "goolake" || name == "frozenwall")
					{
						Light component5 = Object.Instantiate<GameObject>(GameObject.Find("Directional Light (SUN)")).GetComponent<Light>();
						component5.color = component3.color;
						component5.intensity = component3.intensity;
						val12.SetActive(false);
						((Object)val12).name = "Fake Sun";
					}
					switch (name)
					{
					case "foggyswamp":
					case "sulfurpools":
					case "shipgraveyard":
					case "dampcavesimple":
						Debug.LogWarning((object)("Terrain Alt Material: " + ((Object)val7).name));
						Debug.LogWarning((object)("Detail Alt (Rocks) Material: " + ((Object)val8).name));
						Debug.LogWarning((object)("Detail2 Alt (Ruins) Material: " + ((Object)val9).name));
						Debug.LogWarning((object)("Detail3 Alt (Trees) Material: " + ((Object)val10).name));
						Debug.LogWarning((object)("Post Process Profile : " + ((Object)val11).name));
						break;
					default:
						Debug.LogWarning((object)("Terrain Material: " + ((Object)val3).name));
						Debug.LogWarning((object)("Detail (Rocks) Material: " + ((Object)val4).name));
						Debug.LogWarning((object)("Detail2 (Ruins) Material: " + ((Object)val5).name));
						Debug.LogWarning((object)("Detail3 (Trees) Material: " + ((Object)val6).name));
						Debug.LogWarning((object)("Post Process Profile: " + ((Object)val11).name));
						break;
					}
					switch (name)
					{
					case "blackbeach":
						Stage1.Roost1(val3, val4, val5);
						break;
					case "blackbeach2":
						Stage1.Roost2(val3, val4, val5);
						break;
					case "golemplains":
						Stage1.Plains(val3, val4, val5);
						break;
					case "golemplains2":
						Stage1.Plains(val3, val4, val5);
						break;
					case "snowyforest":
						Stage1.Forest(val3, val4, val5, val6);
						break;
					case "goolake":
						Stage2.Aqueduct(val3, val4, val5, val6);
						break;
					case "ancientloft":
						Stage2.Aphelian(val3, val4, val5, val6);
						break;
					case "foggyswamp":
						Stage2.Wetland(val7, val8, val9, val10);
						break;
					case "frozenwall":
						Stage3.RPD(val3, val4, val5);
						break;
					case "wispgraveyard":
						Stage3.Acres(val3, val4, val5);
						break;
					case "sulfurpools":
						((Component)GameObject.Find("CameraRelative").transform.GetChild(1)).gameObject.SetActive(false);
						Stage3.Pools(val7, val8, val9);
						break;
					case "rootjungle":
						Stage4.Grove(val3, val4, val5, val6);
						break;
					case "shipgraveyard":
						Stage4.Sirens(val7, val8, val9);
						break;
					case "dampcavesimple":
						if (((Object)val7).name.Contains("Snowy"))
						{
							Stage4.Abyssal(val7, val10, val8, val9);
						}
						else
						{
							Stage4.Abyssal(val7, val8, val10, val9);
						}
						AbyssalLighting(gray);
						if (Object.op_Implicit((Object)(object)GameObject.Find("DCPPInTunnels")))
						{
							GameObject.Find("DCPPInTunnels").SetActive(false);
						}
						break;
					case "skymeadow":
						Stage5.SkyMeadow(val3, val4, val6, val5);
						break;
					case "moon2":
					{
						Transform child = GameObject.Find("EscapeSequenceController").transform.GetChild(0);
						((Component)child.GetChild(0)).GetComponent<PostProcessVolume>().priority = 10001f;
						((Component)child.GetChild(6)).GetComponent<PostProcessVolume>().weight = 0.47f;
						((Component)child.GetChild(6)).GetComponent<PostProcessVolume>().sharedProfile.settings[0].active = false;
						RampFog setting2 = val.profile.GetSetting<RampFog>();
						((ParameterOverride<float>)(object)setting2.fogIntensity).value = ((ParameterOverride<float>)(object)setting.fogIntensity).value;
						((ParameterOverride<float>)(object)setting2.fogPower).value = ((ParameterOverride<float>)(object)setting.fogPower).value;
						((ParameterOverride<float>)(object)setting2.fogZero).value = ((ParameterOverride<float>)(object)setting.fogZero).value;
						((ParameterOverride<float>)(object)setting2.fogOne).value = ((ParameterOverride<float>)(object)setting.fogOne).value;
						((ParameterOverride<Color>)(object)setting2.fogColorStart).value = ((ParameterOverride<Color>)(object)setting.fogColorStart).value;
						((ParameterOverride<Color>)(object)setting2.fogColorMid).value = ((ParameterOverride<Color>)(object)setting.fogColorMid).value;
						((ParameterOverride<Color>)(object)setting2.fogColorEnd).value = ((ParameterOverride<Color>)(object)setting.fogColorEnd).value;
						((ParameterOverride<float>)(object)setting2.skyboxStrength).value = ((ParameterOverride<float>)(object)setting.skyboxStrength).value;
						((Component)GameObject.Find("HOLDER: Gameplay Space").transform.GetChild(0).Find("Quadrant 4: Starting Temple").GetChild(0)
							.GetChild(0)
							.Find("FX")
							.GetChild(0)).GetComponent<PostProcessVolume>().weight = 0.28f;
						HookLightingIntoPostProcessVolume component6 = ((Component)GameObject.Find("HOLDER: Gameplay Space").transform.GetChild(0).Find("Quadrant 4: Starting Temple").GetChild(0)
							.GetChild(0)
							.Find("FX")
							.GetChild(0)).GetComponent<HookLightingIntoPostProcessVolume>();
						component6.overrideAmbientColor = new Color(0.4138f, 0.4086f, 0.45f, 1f);
						component6.overrideDirectionalColor = new Color(0.4012f, 0.4091f, 0.4226f, 1f);
						if (((Object)val3).name.Contains("Snowy"))
						{
							Stage6.Moon(val3, val6, val5, val4);
						}
						else
						{
							Stage6.Moon(val3, val4, val5, val6);
						}
						break;
					}
					}
				}
			}
			goto IL_0d58;
			IL_00ff:
			if (Object.op_Implicit((Object)(object)val2))
			{
				bool? obj7;
				if (val2 == null)
				{
					obj7 = null;
				}
				else
				{
					PostProcessVolume component7 = val2.GetComponent<PostProcessVolume>();
					obj7 = ((component7 != null) ? new bool?(!((Behaviour)component7).isActiveAndEnabled) : null);
				}
				bool? flag = obj7;
				if (!flag.GetValueOrDefault(true))
				{
					goto IL_0154;
				}
			}
			val2 = GameObject.Find("PP+Amb");
			goto IL_0154;
			IL_01e3:
			if (Object.op_Implicit((Object)(object)val2))
			{
				val = val2.GetComponent<PostProcessVolume>();
			}
			if (name == "moon2")
			{
				val = ((Component)instance).gameObject.AddComponent<PostProcessVolume>();
				val.profile.AddSettings<RampFog>();
				((Behaviour)val).enabled = true;
				val.isGlobal = true;
				val.priority = 9999f;
			}
			goto IL_0232;
			IL_00aa:
			if (Object.op_Implicit((Object)(object)val2))
			{
				bool? obj8;
				if (val2 == null)
				{
					obj8 = null;
				}
				else
				{
					PostProcessVolume component8 = val2.GetComponent<PostProcessVolume>();
					obj8 = ((component8 != null) ? new bool?(!((Behaviour)component8).isActiveAndEnabled) : null);
				}
				bool? flag = obj8;
				if (!flag.GetValueOrDefault(true))
				{
					goto IL_00ff;
				}
			}
			val2 = GameObject.Find("GlobalPostProcessVolume, Base");
			goto IL_00ff;
			IL_0d58:
			orig.Invoke(self);
		}

		public static void AbyssalLighting(Color color)
		{
			//IL_0117: 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_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: 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)
			Light[] array = Object.FindObjectsOfType(typeof(Light)) as Light[];
			foreach (Light val in array)
			{
				GameObject gameObject = ((Component)val).gameObject;
				if (!((Object)(object)gameObject != (Object)null))
				{
					continue;
				}
				if ((Object)(object)gameObject.transform.parent != (Object)null)
				{
					if (((Object)((Component)((Component)val).gameObject.transform.parent).gameObject).name.Equals("DCCoralPropMediumActive"))
					{
						val.color = color;
						Vector3 localPosition = ((Component)val).transform.localPosition;
						localPosition.z = 4f;
					}
					else if (((Object)((Component)((Component)val).gameObject.transform.parent).gameObject).name.Contains("DCCrystalCluster Variant"))
					{
						val.color = color;
						val.intensity *= 1.5f;
					}
					else if (((Object)((Component)((Component)val).gameObject.transform.parent).gameObject).name.Contains("DCCrystalLarge"))
					{
						val.color = color;
					}
				}
				if (((Object)((Component)val).gameObject).name.Equals("CrystalLight"))
				{
					val.color = color;
				}
			}
		}

		public float CalculateLuminance(Color color)
		{
			//IL_0005: 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_001e: Unknown result type (might be due to invalid IL or missing references)
			return 0.2126f * color.r + 0.7152f * color.g + 0.0722f * color.b;
		}

		public Color BrightenColor(Color color, float brightenAmount)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			float num = CalculateLuminance(color);
			Debug.LogWarning((object)$"Luminance: {num}");
			if (num < 0.7f)
			{
				if (num < 0.6f)
				{
					brightenAmount *= 2f;
				}
				Debug.LogWarning((object)"Too dark, brightening light color");
				color.r = Mathf.Clamp01(color.r + brightenAmount);
				color.g = Mathf.Clamp01(color.g + brightenAmount);
				color.b = Mathf.Clamp01(color.b + brightenAmount);
			}
			return color;
		}

		private bool IsBright(Material material)
		{
			//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_000c: 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_0025: Unknown result type (might be due to invalid IL or missing references)
			Color color = material.color;
			if (0.2126f * color.r + 0.7152f * color.g + 0.0722f * color.b < 0.7f)
			{
				return false;
			}
			return true;
		}
	}
	public class Stage1
	{
		public static void Roost1(Material terrainMat, Material detailMat, Material detailMat2)
		{
			if (!Object.op_Implicit((Object)(object)terrainMat) || !Object.op_Implicit((Object)(object)detailMat) || !Object.op_Implicit((Object)(object)detailMat2))
			{
				return;
			}
			((Renderer)((Component)GameObject.Find("GAMEPLAY SPACE").transform.GetChild(7).GetChild(0)).GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			((Renderer)((Component)GameObject.Find("GAMEPLAY SPACE").transform.GetChild(7).GetChild(1)).GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			MeshRenderer[] array = Object.FindObjectsOfType(typeof(MeshRenderer)) as MeshRenderer[];
			foreach (MeshRenderer val in array)
			{
				GameObject gameObject = ((Component)val).gameObject;
				if ((Object)(object)gameObject != (Object)null)
				{
					if ((((Object)gameObject).name.Contains("Boulder") || ((Object)gameObject).name.Contains("Rock") || ((Object)gameObject).name.Contains("Step") || ((Object)gameObject).name.Contains("Tile") || ((Object)gameObject).name.Contains("mdlGeyser") || ((Object)gameObject).name.Contains("Pebble") || ((Object)gameObject).name.Contains("Detail")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat;
					}
					if ((((Object)gameObject).name.Contains("Bowl") || ((Object)gameObject).name.Contains("Marker") || ((Object)gameObject).name.Contains("RuinPillar") || ((Object)gameObject).name.Contains("RuinArch") || ((Object)gameObject).name.Contains("RuinGate")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat2;
					}
					if ((((Object)gameObject).name.Contains("DistantPillar") || ((Object)gameObject).name.Contains("Cliff") || ((Object)gameObject).name.Contains("ClosePillar")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = terrainMat;
					}
				}
			}
		}

		public static void Roost2(Material terrainMat, Material detailMat, Material detailMat2)
		{
			if (!Object.op_Implicit((Object)(object)terrainMat) || !Object.op_Implicit((Object)(object)detailMat) || !Object.op_Implicit((Object)(object)detailMat2))
			{
				return;
			}
			Transform child = GameObject.Find("HOLDER: Terrain").transform.GetChild(0);
			((Renderer)((Component)child.GetChild(0)).GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			((Renderer)((Component)child.GetChild(1)).GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			((Renderer)((Component)child.GetChild(2)).GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			MeshRenderer[] array = Object.FindObjectsOfType(typeof(MeshRenderer)) as MeshRenderer[];
			foreach (MeshRenderer val in array)
			{
				GameObject gameObject = ((Component)val).gameObject;
				if ((Object)(object)gameObject != (Object)null)
				{
					if ((((Object)gameObject).name.Contains("Boulder") || ((Object)gameObject).name.Contains("boulder") || ((Object)gameObject).name.Contains("Rock") || ((Object)gameObject).name.Contains("Step") || ((Object)gameObject).name.Contains("Tile") || ((Object)gameObject).name.Contains("mdlGeyser") || ((Object)gameObject).name.Contains("Bowl") || ((Object)gameObject).name.Contains("Marker") || ((Object)gameObject).name.Contains("RuinPillar") || ((Object)gameObject).name.Contains("DistantBridge")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat;
					}
					if ((((Object)gameObject).name.Contains("Bowl") || ((Object)gameObject).name.Contains("Marker") || ((Object)gameObject).name.Contains("RuinPillar") || ((Object)gameObject).name.Contains("RuinArch") || ((Object)gameObject).name.Contains("RuinGate")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat2;
					}
					if ((((Object)gameObject).name.Contains("DistantPillar") || ((Object)gameObject).name.Contains("Cliff") || ((Object)gameObject).name.Contains("ClosePillar")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = terrainMat;
					}
				}
			}
		}

		public static void Plains(Material terrainMat, Material detailMat, Material detailMat2)
		{
			if (!Object.op_Implicit((Object)(object)terrainMat) || !Object.op_Implicit((Object)(object)detailMat) || !Object.op_Implicit((Object)(object)detailMat2))
			{
				return;
			}
			MeshRenderer[] array = Object.FindObjectsOfType(typeof(MeshRenderer)) as MeshRenderer[];
			foreach (MeshRenderer val in array)
			{
				GameObject gameObject = ((Component)val).gameObject;
				if ((Object)(object)gameObject != (Object)null)
				{
					if ((((Object)gameObject).name.Contains("Terrain") || ((Object)gameObject).name == "Wall North") && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = terrainMat;
					}
					if ((((Object)gameObject).name.Contains("Rock") || ((Object)gameObject).name.Contains("Boulder") || ((Object)gameObject).name.Contains("mdlGeyser")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat;
					}
					if (((Object)gameObject).name.Contains("Ring") && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat2;
					}
					if ((((Object)gameObject).name.Contains("Block") || ((Object)gameObject).name.Contains("MiniBridge") || ((Object)gameObject).name.Contains("Circle")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat2;
					}
				}
			}
		}

		public static void Forest(Material terrainMat, Material detailMat, Material detailMat2, Material detailMat3)
		{
			if (!Object.op_Implicit((Object)(object)terrainMat) || !Object.op_Implicit((Object)(object)detailMat) || !Object.op_Implicit((Object)(object)detailMat2) || !Object.op_Implicit((Object)(object)detailMat3))
			{
				return;
			}
			MeshRenderer[] array = Object.FindObjectsOfType(typeof(MeshRenderer)) as MeshRenderer[];
			foreach (MeshRenderer val in array)
			{
				GameObject gameObject = ((Component)val).gameObject;
				if ((Object)(object)gameObject != (Object)null)
				{
					if (((Object)gameObject).name == "meshSnowyForestGiantTreesTops")
					{
						gameObject.gameObject.SetActive(false);
					}
					if ((((Object)gameObject).name.Contains("Terrain") || ((Object)gameObject).name.Contains("SnowPile")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = terrainMat;
					}
					if ((((Object)gameObject).name.Contains("Pebble") || ((Object)gameObject).name.Contains("Rock") || ((Object)gameObject).name.Contains("mdlSFCeilingSpikes")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat;
					}
					if ((((Object)gameObject).name.Contains("RuinGate") || ((Object)gameObject).name.Contains("meshSnowyForestAqueduct") || ((Object)gameObject).name == "meshSnowyForestFirepitFloor" || ((Object)gameObject).name.Contains("meshSnowyForestFirepitRing") || ((Object)gameObject).name.Contains("meshSnowyForestFirepitJar") || (((Object)gameObject).name.Contains("meshSnowyForestPot") && ((Object)gameObject).name != "meshSnowyForestPotSap") || ((Object)gameObject).name.Contains("mdlSFHangingLantern") || ((Object)gameObject).name.Contains("mdlSFBrokenLantern") || ((Object)gameObject).name.Contains("meshSnowyForestCrate")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat2;
					}
					if ((((Object)gameObject).name.Contains("meshSnowyForestTreeLog") || ((Object)gameObject).name.Contains("meshSnowyForestTreeTrunk") || ((Object)gameObject).name.Contains("meshSnowyForestGiantTrees") || ((Object)gameObject).name.Contains("meshSnowyForestSurroundingTrees")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat3;
					}
					if (((Object)gameObject).name.Contains("mdlSnowyForestTreeStump") && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat3;
						((Renderer)val).sharedMaterials = (Material[])(object)new Material[2] { detailMat3, detailMat3 };
					}
				}
			}
		}
	}
	public class Stage2
	{
		public static void Wetland(Material terrainMat, Material detailMat, Material detailMat2, Material detailMat3)
		{
			Transform transform = GameObject.Find("HOLDER: Hero Assets").transform;
			if (!Object.op_Implicit((Object)(object)terrainMat) || !Object.op_Implicit((Object)(object)detailMat) || !Object.op_Implicit((Object)(object)detailMat2) || !Object.op_Implicit((Object)(object)detailMat3))
			{
				return;
			}
			((Renderer)((Component)transform.GetChild(0)).GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			((Renderer)((Component)transform.GetChild(1)).GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			((Renderer)((Component)transform.GetChild(2)).GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			((Renderer)((Component)transform.GetChild(3).GetChild(2)).GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			((Renderer)((Component)transform.GetChild(6)).GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			((Renderer)((Component)GameObject.Find("HOLDER: Ruin Pieces").transform.GetChild(6)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = detailMat;
			MeshRenderer[] array = Object.FindObjectsOfType(typeof(MeshRenderer)) as MeshRenderer[];
			foreach (MeshRenderer val in array)
			{
				GameObject gameObject = ((Component)val).gameObject;
				if (!((Object)(object)gameObject != (Object)null))
				{
					continue;
				}
				if ((((Object)gameObject).name.Contains("Boulder") || ((Object)gameObject).name.Contains("Pebble") || ((Object)gameObject).name.Contains("Blender") || ((Object)gameObject).name.Contains("Trunk")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = detailMat;
					if (Object.op_Implicit((Object)(object)((Component)gameObject.transform).GetComponentInChildren<MeshRenderer>()))
					{
						((Renderer)((Component)gameObject.transform).GetComponentInChildren<MeshRenderer>()).sharedMaterial = detailMat;
					}
				}
				Transform parent = gameObject.transform.parent;
				if ((Object)(object)parent != (Object)null)
				{
					if (((Object)gameObject).name.Contains("Mesh") && (((Object)parent).name.Contains("FSTree") || ((Object)parent).name.Contains("FSRootBundle")))
					{
						((Renderer)val).sharedMaterial = detailMat3;
					}
					if (((Object)gameObject).name.Contains("Mesh") && ((Object)parent).name.Contains("FSRuinPillar"))
					{
						((Renderer)val).sharedMaterial = detailMat2;
					}
					if ((((Object)gameObject).name.Contains("RootBundleLargeCards") || ((Object)gameObject).name.Contains("RootBundleSmallCards")) && (((Object)parent).name.Contains("FSRootBundleLarge") || ((Object)parent).name.Contains("FSRootBundleSmall")))
					{
						gameObject.gameObject.SetActive(false);
					}
					if ((((Object)gameObject).name.Contains("RootBundleLarge_LOD0") || ((Object)gameObject).name.Contains("RootBundleLarge_LOD1") || ((Object)gameObject).name.Contains("RootBundleLarge_LOD2") || ((Object)gameObject).name.Contains("RootBundleSmall_LOD0") || ((Object)gameObject).name.Contains("RootBundleSmall_LOD1") || ((Object)gameObject).name.Contains("RootBundleSmall_LOD2")) && (((Object)parent).name.Contains("FSRootBundleLarge") || ((Object)parent).name.Contains("FSRootBundleSmall")))
					{
						((Renderer)val).sharedMaterial = detailMat3;
					}
				}
				if ((((Object)gameObject).name.Contains("Door") || ((Object)gameObject).name.Contains("Frame")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = detailMat2;
				}
				if (((Object)gameObject).name.Contains("Ruin") && ((Object)gameObject).name != "FSGiantRuinDoorCollision" && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = detailMat2;
				}
			}
		}

		public static void Aqueduct(Material terrainMat, Material detailMat, Material detailMat2, Material detailMat3)
		{
			if (!Object.op_Implicit((Object)(object)terrainMat) || !Object.op_Implicit((Object)(object)detailMat) || !Object.op_Implicit((Object)(object)detailMat2) || !Object.op_Implicit((Object)(object)detailMat3))
			{
				return;
			}
			MeshRenderer[] array = Object.FindObjectsOfType(typeof(MeshRenderer)) as MeshRenderer[];
			foreach (MeshRenderer val in array)
			{
				GameObject gameObject = ((Component)val).gameObject;
				if (!((Object)(object)gameObject != (Object)null))
				{
					continue;
				}
				if (((Object)gameObject).name.Contains("Terrain") && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = terrainMat;
				}
				if (((Object)gameObject).name.Contains("SandDune") && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = terrainMat;
				}
				if ((((Object)gameObject).name.Contains("SandstonePillar") || ((Object)gameObject).name.Contains("Dam") || ((Object)gameObject).name.Contains("AqueductFullLong") || ((Object)gameObject).name.Contains("AqueductPartial") || ((Object)gameObject).name.Contains("RuinGate")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = detailMat2;
				}
				if (((((Object)gameObject).name.Contains("Bridge") && !((Object)gameObject).name.Contains("Decal")) || ((Object)gameObject).name.Contains("RuinedRing") || ((Object)gameObject).name.Contains("Boulder") || ((Object)gameObject).name.Contains("Eel")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = detailMat;
				}
				if ((((Object)gameObject).name.Contains("FlagPoleMesh") || ((Object)gameObject).name.Contains("RuinTile")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = detailMat3;
				}
				if (!((Object)gameObject).name.Contains("AqueductCap"))
				{
					continue;
				}
				try
				{
					Material[] sharedMaterials = ((Renderer)val).sharedMaterials;
					for (int j = 0; j < sharedMaterials.Length; j++)
					{
						sharedMaterials[j] = detailMat2;
					}
					((Renderer)val).sharedMaterials = sharedMaterials;
				}
				catch (Exception ex)
				{
					Debug.LogWarning((object)(ex.Message + "\n" + ex.StackTrace));
				}
			}
		}

		public static void Aphelian(Material terrainMat, Material detailMat, Material detailMat2, Material detailMat3)
		{
			MeshRenderer[] array = Object.FindObjectsOfType(typeof(MeshRenderer)) as MeshRenderer[];
			SkinnedMeshRenderer[] array2 = Object.FindObjectsOfType(typeof(SkinnedMeshRenderer)) as SkinnedMeshRenderer[];
			if (!Object.op_Implicit((Object)(object)terrainMat) || !Object.op_Implicit((Object)(object)detailMat) || !Object.op_Implicit((Object)(object)detailMat2) || !Object.op_Implicit((Object)(object)detailMat3))
			{
				return;
			}
			MeshRenderer[] array3 = array;
			foreach (MeshRenderer val in array3)
			{
				GameObject gameObject = ((Component)val).gameObject;
				Transform parent = gameObject.transform.parent;
				if (!((Object)(object)gameObject != (Object)null))
				{
					continue;
				}
				if ((Object)(object)parent != (Object)null && ((((Object)parent).name.Contains("TempleTop") && ((Object)gameObject).name.Contains("RuinBlock")) || ((Object)gameObject).name.Contains("GPRuinBlockQuarter")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = detailMat2;
				}
				if (((Object)gameObject).name.Contains("CirclePot"))
				{
					((Renderer)val).sharedMaterials = (Material[])(object)new Material[3] { terrainMat, detailMat3, terrainMat };
				}
				if (((Object)gameObject).name.Equals("Terrain") && ((Renderer)val).sharedMaterials.Length != 0)
				{
					((Renderer)val).sharedMaterials = (Material[])(object)new Material[3] { terrainMat, terrainMat, terrainMat };
				}
				if (((((Object)gameObject).name.Contains("Terrain") && !((Object)gameObject).name.Equals("Terrain")) || ((Object)gameObject).name.Contains("Dirt") || ((Object)gameObject).name.Contains("TerrainPlatform")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = terrainMat;
				}
				if ((((Object)gameObject).name.Contains("Platform") || ((Object)gameObject).name.Contains("Temple") || ((Object)gameObject).name.Contains("Bridge")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterials = (Material[])(object)new Material[2] { terrainMat, terrainMat };
				}
				if ((((Object)gameObject).name.Contains("BrokenPot") || ((Object)gameObject).name.Contains("Planter") || ((Object)gameObject).name.Contains("AW_Cube") || ((Object)gameObject).name.Contains("Mesh, Cube") || ((Object)gameObject).name.Contains("AncientLoft_WaterFenceType") || ((Object)gameObject).name.Contains("Pillar") || ((Object)gameObject).name.Equals("LightStatue") || ((Object)gameObject).name.Equals("FountainLG") || ((Object)gameObject).name.Equals("Shrine") || ((Object)gameObject).name.Equals("Sculpture") || ((Object)gameObject).name.Contains("AncientLoft_SculptureSM") || ((Object)gameObject).name.Contains("FountainSM")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = detailMat3;
				}
				if ((((Object)gameObject).name.Contains("Tile") || ((Object)gameObject).name.Contains("Step") || ((Object)gameObject).name.Contains("Rock") || ((Object)gameObject).name.Contains("Pebble") || ((Object)gameObject).name.Contains("Rubble") || ((Object)gameObject).name.Contains("Boulder") || ((Object)gameObject).name.Equals("LightStatue_Stone")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = detailMat;
				}
				if (!((Object)gameObject).name.Contains("CircleArchwayAnimatedMesh"))
				{
					continue;
				}
				Material[] sharedMaterials = ((Renderer)val).sharedMaterials;
				for (int j = 0; j < ((Renderer)val).sharedMaterials.Length; j++)
				{
					sharedMaterials[j] = detailMat2;
					if (j == 1)
					{
						sharedMaterials[j] = detailMat3;
					}
				}
				((Renderer)val).sharedMaterials = sharedMaterials;
			}
			SkinnedMeshRenderer[] array4 = array2;
			foreach (SkinnedMeshRenderer val2 in array4)
			{
				GameObject gameObject2 = ((Component)val2).gameObject;
				if ((Object)(object)gameObject2 != (Object)null)
				{
					if (((Object)gameObject2).name.Contains("CirclePot") || ((Object)gameObject2).name.Contains("Planter") || ((Object)gameObject2).name.Contains("AW_Cube") || ((Object)gameObject2).name.Contains("Mesh, Cube") || ((Object)gameObject2).name.Contains("AncientLoft_WaterFenceType") || ((Object)gameObject2).name.Contains("Pillar") || ((Object)gameObject2).name.Equals("LightStatue") || ((Object)gameObject2).name.Equals("LightStatue_Stone") || ((Object)gameObject2).name.Equals("FountainLG") || ((Object)gameObject2).name.Equals("Shrine") || ((Object)gameObject2).name.Equals("Sculpture"))
					{
						((Renderer)val2).sharedMaterial = detailMat3;
					}
					if ((((Object)gameObject2).name.Contains("Rock") || ((Object)gameObject2).name.Contains("Tile") || ((Object)gameObject2).name.Contains("Boulder") || ((Object)gameObject2).name.Contains("Step") || ((Object)gameObject2).name.Contains("Pebble") || ((Object)gameObject2).name.Contains("Rubble")) && Object.op_Implicit((Object)(object)((Renderer)val2).sharedMaterial))
					{
						((Renderer)val2).sharedMaterial = detailMat;
					}
				}
			}
		}
	}
	public class Stage3
	{
		public static void RPD(Material terrainMat, Material detailMat, Material detailMat2)
		{
			if (!Object.op_Implicit((Object)(object)terrainMat) || !Object.op_Implicit((Object)(object)detailMat) || !Object.op_Implicit((Object)(object)detailMat2))
			{
				return;
			}
			MeshRenderer[] array = Object.FindObjectsOfType(typeof(MeshRenderer)) as MeshRenderer[];
			foreach (MeshRenderer val in array)
			{
				GameObject gameObject = ((Component)val).gameObject;
				if ((Object)(object)gameObject != (Object)null)
				{
					if ((((Object)gameObject).name.Contains("Terrain") || ((Object)gameObject).name.Contains("Snow")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = terrainMat;
					}
					if ((((Object)gameObject).name.Contains("Glacier") || ((Object)gameObject).name.Contains("Stalagmite") || ((Object)gameObject).name.Contains("Boulder") || ((Object)gameObject).name.Contains("CavePillar")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat;
					}
					if ((((Object)gameObject).name.Contains("GroundMesh") || ((Object)gameObject).name.Contains("GroundStairs") || ((Object)gameObject).name.Contains("VerticalPillar") || ((Object)gameObject).name.Contains("Barrier") || (((Object)gameObject).name.Contains("Human") && !((Object)gameObject).name.Contains("ChainLink"))) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat2;
					}
				}
			}
		}

		public static void Acres(Material terrainMat, Material detailMat, Material detailMat2)
		{
			if (!Object.op_Implicit((Object)(object)terrainMat) || !Object.op_Implicit((Object)(object)detailMat) || !Object.op_Implicit((Object)(object)detailMat2))
			{
				return;
			}
			MeshRenderer[] array = Object.FindObjectsOfType(typeof(MeshRenderer)) as MeshRenderer[];
			foreach (MeshRenderer val in array)
			{
				GameObject gameObject = ((Component)val).gameObject;
				if ((Object)(object)gameObject != (Object)null)
				{
					if ((((Object)gameObject).name.Contains("Terrain") || ((Object)gameObject).name.Contains("Dirt")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = terrainMat;
					}
					if ((((Object)gameObject).name.Contains("Rock") || ((Object)gameObject).name.Contains("Boulder") || ((Object)gameObject).name.Contains("Crystal")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat;
					}
					if ((((Object)gameObject).name.Contains("Ring") || ((Object)gameObject).name.Contains("Bridge") || ((Object)gameObject).name.Contains("Platform") || ((Object)gameObject).name.Contains("Planter")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat2;
					}
				}
			}
		}

		public static void Pools(Material terrainMat, Material detailMat, Material detailMat2)
		{
			if (!Object.op_Implicit((Object)(object)terrainMat) || !Object.op_Implicit((Object)(object)detailMat) || !Object.op_Implicit((Object)(object)detailMat2))
			{
				return;
			}
			MeshRenderer[] array = Object.FindObjectsOfType(typeof(MeshRenderer)) as MeshRenderer[];
			foreach (MeshRenderer val in array)
			{
				GameObject gameObject = ((Component)val).gameObject;
				if ((Object)(object)gameObject != (Object)null)
				{
					if (((((Object)gameObject).name.Contains("Terrain") && !((Object)gameObject).name.Contains("Fog")) || ((Object)gameObject).name.Contains("Mountain")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = terrainMat;
					}
					if ((((Object)gameObject).name.Contains("meshSPSphere") || ((Object)gameObject).name.Contains("SPHeatVent") || ((Object)gameObject).name.Contains("Crystal") || ((Object)gameObject).name.Contains("Boulder") || ((Object)gameObject).name.Contains("mdlGeyser") || ((Object)gameObject).name.Contains("Pebble") || ((Object)gameObject).name.Contains("Eel")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat;
					}
					if ((((Object)gameObject).name.Contains("Dome") || ((Object)gameObject).name.Contains("Spikes") || ((Object)gameObject).name.Contains("Cave")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat2;
					}
				}
			}
		}
	}
	public class Stage4
	{
		public static void Grove(Material terrainMat, Material detailMat, Material detailMat2, Material detailMat3)
		{
			if (!Object.op_Implicit((Object)(object)terrainMat) || !Object.op_Implicit((Object)(object)detailMat) || !Object.op_Implicit((Object)(object)detailMat2) || !Object.op_Implicit((Object)(object)detailMat3))
			{
				return;
			}
			MeshRenderer[] array = Object.FindObjectsOfType(typeof(MeshRenderer)) as MeshRenderer[];
			foreach (MeshRenderer val in array)
			{
				GameObject gameObject = ((Component)val).gameObject;
				if ((Object)(object)gameObject != (Object)null)
				{
					if ((((Object)gameObject).name.Contains("Terrain") || ((Object)gameObject).name.Contains("Rock Holder") || ((Object)gameObject).name.Contains("Vine Tree") || ((Object)gameObject).name.Contains("Gianticus") || ((Object)gameObject).name.Contains("Tree Big Bottom") || ((Object)gameObject).name.Contains("Root Bridge") || ((Object)gameObject).name.Contains("Tree D") || ((Object)gameObject).name.Contains("Wall") || ((Object)gameObject).name.Contains("RJRoot") || ((Object)gameObject).name.Contains("RJShroomShelf")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = terrainMat;
					}
					if ((((Object)gameObject).name.Contains("RJTriangle") || ((Object)gameObject).name.Contains("BbRuinArch")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat2;
					}
					if (((((Object)gameObject).name.Contains("Rock") && !((Object)gameObject).name.Contains("Holder")) || ((Object)gameObject).name.Contains("Boulder") || ((Object)gameObject).name.Contains("Pebble")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat;
					}
					if ((((Object)gameObject).name.Contains("Moss Cover") || ((Object)gameObject).name.Contains("RJShroomShelf") || ((Object)gameObject).name.Contains("RJShroomBig") || ((Object)gameObject).name.Contains("RJShroomSmall") || ((Object)gameObject).name.Contains("RJMossPatch")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat3;
					}
				}
			}
		}

		public static void Sirens(Material terrainMat, Material detailMat, Material detailMat2)
		{
			if (!Object.op_Implicit((Object)(object)terrainMat) || !Object.op_Implicit((Object)(object)detailMat) || !Object.op_Implicit((Object)(object)detailMat2))
			{
				return;
			}
			MeshRenderer[] array = Object.FindObjectsOfType(typeof(MeshRenderer)) as MeshRenderer[];
			foreach (MeshRenderer val in array)
			{
				GameObject gameObject = ((Component)val).gameObject;
				Transform parent = gameObject.transform.parent;
				if (!((Object)(object)gameObject != (Object)null))
				{
					continue;
				}
				if ((Object)(object)parent != (Object)null)
				{
					if ((((Object)parent).name.Contains("Terrain") || ((Object)gameObject).name.Contains("Mesh") || ((Object)gameObject).name.Contains("Spikes")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = terrainMat;
					}
					if ((((Object)gameObject).name.Contains("Stalactite") || ((Object)gameObject).name.Contains("Stalagmite")) && (((Object)parent).name.Contains("Cave") || ((Object)parent).name.Contains("Stalagmite")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat;
					}
				}
				if ((((Object)gameObject).name.Contains("Terrain") || ((Object)gameObject).name.Contains("Stalactite") || ((Object)gameObject).name.Contains("Level Wall") || ((Object)gameObject).name.Contains("Cave") || ((Object)gameObject).name.Contains("Floor") || ((Object)gameObject).name.Contains("Spikes")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = terrainMat;
				}
				if ((((Object)gameObject).name.Contains("Ship") || ((Object)gameObject).name.Contains("Stalagmite") || ((Object)gameObject).name.Contains("mdlGeyser")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = detailMat2;
				}
				if ((((Object)gameObject).name.Contains("Rock") || ((Object)gameObject).name.Contains("Boulder")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = detailMat;
				}
			}
		}

		public static void Abyssal(Material terrainMat, Material detailMat, Material detailMat2, Material detailMat3)
		{
			if (!Object.op_Implicit((Object)(object)terrainMat) || !Object.op_Implicit((Object)(object)detailMat) || !Object.op_Implicit((Object)(object)detailMat2) || !Object.op_Implicit((Object)(object)detailMat3))
			{
				return;
			}
			MeshRenderer[] array = Object.FindObjectsOfType(typeof(MeshRenderer)) as MeshRenderer[];
			foreach (MeshRenderer val in array)
			{
				GameObject gameObject = ((Component)val).gameObject;
				Transform parent = gameObject.transform.parent;
				if (!((Object)(object)gameObject != (Object)null))
				{
					continue;
				}
				if ((Object)(object)parent != (Object)null)
				{
					if (((Object)gameObject).name.Contains("Mesh") && ((Object)parent).name.Contains("Ruin") && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat3;
					}
					if (((Object)gameObject).name.Contains("RuinBowl") && ((Object)parent).name.Contains("RuinMarker") && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat3;
					}
				}
				if ((((Object)gameObject).name.Contains("Hero") || ((Object)gameObject).name.Contains("Ceiling") || ((Object)gameObject).name.Contains("Column")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = terrainMat;
				}
				if ((((Object)gameObject).name.Contains("Boulder") || ((Object)gameObject).name.Contains("mdlGeyser") || ((Object)gameObject).name.Contains("Pebble") || (((Object)gameObject).name.Contains("GiantRock") && !((Object)gameObject).name.Contains("Slab"))) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = detailMat;
				}
				if (((Object)gameObject).name.Contains("Ruin") && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = detailMat3;
				}
				if (((Object)gameObject).name.Contains("LightMesh") && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial) && gameObject.transform.childCount >= 1 && ((Object)gameObject.transform.GetChild(0)).name.Contains("Crystal"))
				{
					((Renderer)((Component)gameObject.transform.GetChild(0)).GetComponent<MeshRenderer>()).sharedMaterial = detailMat2;
				}
				if ((((Object)gameObject).name.Contains("Spike") || ((Object)gameObject).name.Contains("Stalagmite") || ((Object)gameObject).name.Contains("Coral") || ((Object)gameObject).name.Contains("Crystal") || ((Object)gameObject).name.Contains("Heatvent")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = detailMat2;
				}
				if ((((Object)gameObject).name.Contains("DCGiantRockSlab") || ((Object)gameObject).name.Contains("GiantStoneSlab") || ((Object)gameObject).name.Contains("TerrainBackwall") || ((Object)gameObject).name.Contains("Chain") || ((Object)gameObject).name.Contains("Wall")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = terrainMat;
				}
			}
		}
	}
	public class Stage5
	{
		public static void SkyMeadow(Material terrainMat, Material detailMat, Material detailMat2, Material detailMat3)
		{
			Transform transform = GameObject.Find("HOLDER: Randomization").transform;
			Transform child = GameObject.Find("PortalDialerEvent").transform.GetChild(0);
			if (!Object.op_Implicit((Object)(object)terrainMat) || !Object.op_Implicit((Object)(object)detailMat) || !Object.op_Implicit((Object)(object)detailMat2) || !Object.op_Implicit((Object)(object)detailMat3))
			{
				return;
			}
			MeshRenderer[] array = Object.FindObjectsOfType(typeof(MeshRenderer)) as MeshRenderer[];
			foreach (MeshRenderer val in array)
			{
				GameObject gameObject = ((Component)val).gameObject;
				Transform parent = gameObject.transform.parent;
				if (!((Object)(object)gameObject != (Object)null))
				{
					continue;
				}
				if ((Object)(object)parent != (Object)null)
				{
					if (((((Object)gameObject).name.Contains("Plateau") && ((Object)parent).name.Contains("skymeadow_terrain")) || (((Object)gameObject).name.Contains("SMRock") && ((Object)parent).name.Contains("FORMATION"))) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = terrainMat;
					}
					if (((((Object)gameObject).name.Contains("SMRock") && ((Object)parent).name.Contains("HOLDER: Spinning Rocks")) || (((Object)gameObject).name.Contains("SMRock") && ((Object)parent).name.Contains("P13")) || (((Object)gameObject).name.Contains("SMPebble") && ((Object)parent).name.Contains("Underground")) || (((Object)gameObject).name.Contains("Boulder") && ((Object)parent).name.Contains("PortalDialerEvent"))) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat;
					}
					if (((((Object)gameObject).name.Contains("SMRock") && ((Object)parent).name.Contains("GROUP: Rocks")) || (((Object)gameObject).name.Contains("SMSpikeBridge") && ((Object)parent).name.Contains("Underground"))) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat2;
					}
					if (((((Object)gameObject).name.Contains("Terrain") && ((Object)parent).name.Contains("skymeadow_terrain")) || (((Object)gameObject).name.Contains("Plateau Under") && ((Object)parent).name.Contains("Underground"))) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = terrainMat;
					}
				}
				if ((((Object)gameObject).name.Contains("SMPebble") || ((Object)gameObject).name.Contains("Rock") || ((Object)gameObject).name.Contains("mdlGeyser")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = detailMat;
				}
				if (((Object)gameObject).name.Contains("SMSpikeBridge") && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = detailMat2;
				}
				if (((Object)gameObject).name.Contains("Ruin") && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
				{
					((Renderer)val).sharedMaterial = detailMat3;
				}
			}
			((Renderer)((Component)GameObject.Find("HOLDER: Terrain").transform.GetChild(1)).GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			((Renderer)((Component)child.GetChild(0)).GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			((Renderer)GameObject.Find("ArtifactFormulaHolderMesh").GetComponent<MeshRenderer>()).sharedMaterial = detailMat2;
			((Renderer)GameObject.Find("Stairway").GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			try
			{
				((Renderer)GameObject.Find("Plateau 13 (1)").GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			}
			catch
			{
			}
			((Renderer)((Component)transform.GetChild(0).GetChild(0).GetChild(0)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			((Renderer)((Component)transform.GetChild(0).GetChild(0).GetChild(1)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = detailMat2;
			((Renderer)((Component)transform.GetChild(0).GetChild(1).GetChild(0)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			((Renderer)((Component)transform.GetChild(0).GetChild(1).GetChild(1)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = detailMat2;
			((Renderer)((Component)transform.GetChild(1).GetChild(0).GetChild(0)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			((Renderer)((Component)transform.GetChild(1).GetChild(0).GetChild(1)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = detailMat2;
			((Renderer)((Component)transform.GetChild(1).GetChild(0).GetChild(2)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = detailMat2;
			((Renderer)((Component)transform.GetChild(1).GetChild(1).GetChild(0)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			((Renderer)((Component)transform.GetChild(1).GetChild(1).GetChild(1)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = detailMat2;
			((Renderer)((Component)transform.GetChild(1).GetChild(1).GetChild(2)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = detailMat2;
			((Renderer)((Component)transform.GetChild(2).GetChild(0).GetChild(0)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			((Renderer)((Component)transform.GetChild(2).GetChild(0).GetChild(1)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = detailMat2;
			((Renderer)((Component)transform.GetChild(2).GetChild(0).GetChild(2)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = detailMat2;
			((Renderer)((Component)transform.GetChild(2).GetChild(1).GetChild(0)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = detailMat2;
			((Renderer)((Component)transform.GetChild(3).GetChild(0).GetChild(0)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			((Renderer)((Component)transform.GetChild(4).GetChild(1).GetChild(3)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			((Renderer)((Component)transform.GetChild(5).GetChild(0).GetChild(0)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			((Renderer)((Component)transform.GetChild(5).GetChild(0).GetChild(1)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = detailMat2;
			((Renderer)((Component)transform.GetChild(5).GetChild(0).GetChild(2)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = detailMat2;
			((Renderer)((Component)transform.GetChild(5).GetChild(1).GetChild(0)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = terrainMat;
			((Renderer)((Component)transform.GetChild(5).GetChild(1).GetChild(1)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = detailMat2;
			((Renderer)((Component)transform.GetChild(5).GetChild(1).GetChild(2)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = detailMat2;
			((Renderer)((Component)transform.GetChild(5).GetChild(2).GetChild(0)).gameObject.GetComponent<MeshRenderer>()).sharedMaterial = detailMat2;
		}
	}
	public class Stage6
	{
		public static void Moon(Material terrainMat, Material detailMat, Material detailMat2, Material detailMat3)
		{
			if (!Object.op_Implicit((Object)(object)terrainMat) || !Object.op_Implicit((Object)(object)detailMat) || !Object.op_Implicit((Object)(object)detailMat2) || !Object.op_Implicit((Object)(object)detailMat3))
			{
				return;
			}
			MeshRenderer[] array = Object.FindObjectsOfType(typeof(MeshRenderer)) as MeshRenderer[];
			foreach (MeshRenderer val in array)
			{
				GameObject gameObject = ((Component)val).gameObject;
				if ((Object)(object)gameObject != (Object)null)
				{
					if ((((Object)gameObject).name.Contains("Terrain") || ((Object)gameObject).name.Contains("terrain") || ((Object)gameObject).name.Contains("OuterRing_Cave")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = terrainMat;
					}
					if (((Object)gameObject).name.Contains("Rock") && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat;
					}
					if ((((Object)gameObject).name.Contains("Bridge") || ((Object)gameObject).name.Contains("MoonPillar") || ((Object)gameObject).name.Contains("Roof") || ((Object)gameObject).name.Contains("Chain") || ((Object)gameObject).name.Contains("Arena") || ((Object)gameObject).name.Contains("otherside") || ((Object)gameObject).name.Contains("MoonPlatform") || ((Object)gameObject).name.Equals("ramp up") || ((Object)gameObject).name.Equals("railing") || (((Object)gameObject).name.Contains("Quarry") && !((Object)gameObject).name.Contains("Fog") && !((Object)gameObject).name.Contains("Rock")) || ((Object)gameObject).name.Contains("Connector") || ((Object)gameObject).name.Contains("Octagon") || ((Object)gameObject).name.Contains("Temple") || ((Object)gameObject).name.Contains("Column") || ((Object)gameObject).name.Contains("CoolingBowlLarge") || (((Object)gameObject).name.Contains("Wall") && !((Object)gameObject).name.Contains("CylinderWall")) || ((Object)gameObject).name.Contains("Floor") || ((Object)gameObject).name.Contains("Barrier") || ((Object)gameObject).name.Contains("WaterTrough") || ((Object)gameObject).name.Contains("Busted") || ((Object)gameObject).name.Contains("disc") || ((Object)gameObject).name == "Base") && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat2;
					}
					if ((((Object)gameObject).name.Contains("mdlroot") || ((Object)gameObject).name.Contains("Stib")) && Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial))
					{
						((Renderer)val).sharedMaterial = detailMat3;
					}
				}
			}
		}
	}
}