Decompiled source of Seraphic Ascent v1.6.0

plugins/SeraphicAscent/SeraphicAscent.dll

Decompiled 3 days ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using BepInEx;
using BepInEx.Logging;
using EntityStates;
using HG;
using Newtonsoft.Json;
using R2API;
using RoR2;
using RoR2.CharacterAI;
using RoR2.ContentManagement;
using RoR2.Navigation;
using RoR2.Skills;
using RoR2.WwiseUtils;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.AddressableAssets.ResourceLocators;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.Rendering;
using UnityEngine.Rendering.PostProcessing;
using UnityEngine.ResourceManagement.ResourceLocations;
using UnityEngine.SceneManagement;

[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: CompilationRelaxations(8)]
[assembly: AssemblyVersion("0.0.0.0")]
namespace SeraphicAscent;

public sealed class StageWorld : MonoBehaviour
{
	private SeraphRadiancePulse celestialRadiance;

	internal bool Ready;

	internal Layout layout;

	private Material[] materials;

	private readonly List<Object> owned = new List<Object>();

	private readonly Dictionary<Camera, float> previousFarPlanes = new Dictionary<Camera, float>();

	private bool qualityConfigured;

	private float previousShadowDistance;

	private int previousCascades;

	private ShadowResolution previousShadowResolution;

	private readonly Dictionary<Camera, DepthTextureMode> previousDepthModes = new Dictionary<Camera, DepthTextureMode>();

	private readonly Dictionary<PostProcessLayer, Antialiasing> previousAntialiasing = new Dictionary<PostProcessLayer, Antialiasing>();

	private readonly Dictionary<PostProcessLayer, Quality> previousSmaaQuality = new Dictionary<PostProcessLayer, Quality>();

	private MeshCollider authoredFloor;

	private NodeGraph ground;

	private NodeGraph air;

	internal List<Vector3> groundPositions;

	internal int links;

	internal int components;

	private readonly HashSet<int> preparedCameras = new HashSet<int>();

	private SeraphStormFront stormFront;

	private void Atmosphere()
	{
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0052: Expected O, but got Unknown
		//IL_008d: 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_00c1: 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)
		//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0111: Unknown result type (might be due to invalid IL or missing references)
		//IL_0121: Unknown result type (might be due to invalid IL or missing references)
		//IL_015b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0194: Unknown result type (might be due to invalid IL or missing references)
		//IL_01af: Unknown result type (might be due to invalid IL or missing references)
		//IL_022f: Unknown result type (might be due to invalid IL or missing references)
		//IL_024a: Unknown result type (might be due to invalid IL or missing references)
		//IL_029a: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0327: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ea: Unknown result type (might be due to invalid IL or missing references)
		//IL_045d: Unknown result type (might be due to invalid IL or missing references)
		//IL_054e: Unknown result type (might be due to invalid IL or missing references)
		//IL_057d: Unknown result type (might be due to invalid IL or missing references)
		//IL_05d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_05f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_061b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0622: Expected O, but got Unknown
		//IL_067c: Unknown result type (might be due to invalid IL or missing references)
		//IL_06d4: Unknown result type (might be due to invalid IL or missing references)
		//IL_06f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0737: Unknown result type (might be due to invalid IL or missing references)
		//IL_073c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0740: Unknown result type (might be due to invalid IL or missing references)
		//IL_03a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_038f: Unknown result type (might be due to invalid IL or missing references)
		previousShadowDistance = QualitySettings.shadowDistance;
		previousCascades = QualitySettings.shadowCascades;
		previousShadowResolution = QualitySettings.shadowResolution;
		qualityConfigured = true;
		QualitySettings.shadowDistance = 300f;
		QualitySettings.shadowCascades = 4;
		QualitySettings.shadowResolution = (ShadowResolution)2;
		Material val = new Material(StageArt.ArtShader("Assets/SeraphSky.shader"));
		val.SetTexture("_Panorama", (Texture)(object)StageArt.CloudPanorama());
		owned.Add((Object)(object)val);
		RenderSettings.skybox = val;
		RenderSettings.ambientMode = (AmbientMode)1;
		RenderSettings.ambientSkyColor = new Color(0.5f, 0.53f, 0.65f);
		RenderSettings.ambientEquatorColor = new Color(0.4f, 0.41f, 0.47f);
		RenderSettings.ambientGroundColor = new Color(0.3f, 0.28f, 0.34f);
		RenderSettings.ambientIntensity = 1f;
		SphericalHarmonicsL2 ambientProbe = default(SphericalHarmonicsL2);
		((SphericalHarmonicsL2)(ref ambientProbe)).AddAmbientLight(new Color(0.4f, 0.41f, 0.48f));
		((SphericalHarmonicsL2)(ref ambientProbe)).AddDirectionalLight(Vector3.up, new Color(0.47f, 0.49f, 0.63f), 0.4f);
		RenderSettings.ambientProbe = ambientProbe;
		RenderSettings.fog = true;
		RenderSettings.fogMode = (FogMode)1;
		RenderSettings.fogStartDistance = 135f;
		RenderSettings.fogEndDistance = 500f;
		RenderSettings.fogColor = new Color(0.2f, 0.24f, 0.34f);
		Light val2 = Child("Heaven breached | warm sculpting key").AddComponent<Light>();
		val2.type = (LightType)1;
		((Component)val2).transform.rotation = Quaternion.Euler(42f, -36f, 0f);
		val2.color = new Color(1f, 0.87f, 0.73f);
		val2.intensity = 1.2f;
		val2.renderMode = (LightRenderMode)1;
		val2.shadows = (LightShadows)2;
		val2.shadowStrength = 0.7f;
		val2.shadowBias = 0.08f;
		val2.shadowNormalBias = 0.45f;
		RenderSettings.sun = val2;
		Light val3 = Child("Storm | cool upper feather rim").AddComponent<Light>();
		val3.type = (LightType)1;
		((Component)val3).transform.rotation = Quaternion.Euler(16f, 145f, 0f);
		val3.color = new Color(0.62f, 0.73f, 1f);
		val3.intensity = 0.4f;
		val3.renderMode = (LightRenderMode)1;
		Light val4 = Child("Choir | soft frontal bounce").AddComponent<Light>();
		val4.type = (LightType)1;
		((Component)val4).transform.rotation = Quaternion.Euler(22f, 12f, 0f);
		val4.color = new Color(0.86f, 0.87f, 1f);
		val4.intensity = 0.32f;
		val4.renderMode = (LightRenderMode)1;
		val4.shadows = (LightShadows)0;
		DistrictLight[] districtLights = layout.districtLights;
		foreach (DistrictLight districtLight in districtLights)
		{
			Light val5 = Child("Choir | local living light").AddComponent<Light>();
			val5.type = (LightType)2;
			((Component)val5).transform.position = V(districtLight.p);
			val5.range = ((districtLight.colour == 8) ? districtLight.range : 26f);
			val5.intensity = ((districtLight.colour == 8) ? districtLight.intensity : 1.8f);
			val5.color = ((districtLight.colour == 8) ? new Color(0.2f, 0.85f, 0.8f) : new Color(1f, 0.8f, 0.59f));
			val5.renderMode = (LightRenderMode)1;
		}
		GameObject val6 = Child("Choir | selective luminous photographic response");
		val6.SetActive(false);
		val6.layer = LayerIndex.postProcess.intVal;
		PostProcessVolume val7 = val6.AddComponent<PostProcessVolume>();
		val7.isGlobal = true;
		val7.priority = 20f;
		PostProcessProfile val8 = ScriptableObject.CreateInstance<PostProcessProfile>();
		owned.Add((Object)(object)val8);
		val7.sharedProfile = val8;
		ColorGrading val9 = val8.AddSettings<ColorGrading>();
		((PostProcessEffectSettings)val9).SetAllOverridesTo(true, true);
		((ParameterOverride<bool>)(object)((PostProcessEffectSettings)val9).enabled).value = true;
		((ParameterOverride<Tonemapper>)(object)val9.tonemapper).value = (Tonemapper)2;
		((ParameterOverride<float>)(object)val9.postExposure).value = 0.05f;
		((ParameterOverride<float>)(object)val9.contrast).value = 6f;
		((ParameterOverride<float>)(object)val9.saturation).value = -3f;
		owned.Add((Object)(object)val9);
		Bloom val10 = val8.AddSettings<Bloom>();
		((PostProcessEffectSettings)val10).SetAllOverridesTo(true, true);
		((ParameterOverride<bool>)(object)((PostProcessEffectSettings)val10).enabled).value = true;
		((ParameterOverride<float>)(object)val10.intensity).value = 0.8f;
		((ParameterOverride<float>)(object)val10.threshold).value = 1.15f;
		((ParameterOverride<float>)(object)val10.softKnee).value = 0.65f;
		((ParameterOverride<float>)(object)val10.diffusion).value = 6.5f;
		((ParameterOverride<float>)(object)val10.clamp).value = 10f;
		owned.Add((Object)(object)val10);
		AmbientOcclusion val11 = val8.AddSettings<AmbientOcclusion>();
		((PostProcessEffectSettings)val11).SetAllOverridesTo(true, true);
		((ParameterOverride<bool>)(object)((PostProcessEffectSettings)val11).enabled).value = true;
		((ParameterOverride<AmbientOcclusionMode>)(object)val11.mode).value = (AmbientOcclusionMode)0;
		((ParameterOverride<float>)(object)val11.intensity).value = 0.85f;
		((ParameterOverride<float>)(object)val11.radius).value = 0.85f;
		((ParameterOverride<AmbientOcclusionQuality>)(object)val11.quality).value = (AmbientOcclusionQuality)3;
		owned.Add((Object)(object)val11);
		val6.SetActive(true);
		GameObject val12 = GameObject.CreatePrimitive((PrimitiveType)3);
		((Object)val12).name = "Cloud ocean | bounded raymarched volume";
		val12.transform.SetParent(((Component)this).transform, false);
		val12.transform.position = new Vector3(0f, -120f, 0f);
		val12.transform.localScale = new Vector3(5000f, 440f, 5000f);
		Object.Destroy((Object)(object)val12.GetComponent<Collider>());
		Material val13 = new Material(StageArt.ArtShader("Assets/SeraphClouds.shader"));
		owned.Add((Object)(object)val13);
		val13.SetFloat("_Top", 100f);
		val13.SetFloat("_Bottom", -340f);
		val13.SetFloat("_Density", 0.065f);
		val13.SetColor("_MistColor", new Color(0.16f, 0.2f, 0.29f));
		MeshRenderer component = val12.GetComponent<MeshRenderer>();
		((Renderer)component).sharedMaterial = val13;
		((Renderer)component).shadowCastingMode = (ShadowCastingMode)0;
		((Renderer)component).receiveShadows = false;
		ReflectionProbe val14 = Child("Choir | single local environment reflection").AddComponent<ReflectionProbe>();
		((Component)val14).transform.position = new Vector3(0f, 157f, -5f);
		val14.size = new Vector3(360f, 330f, 360f);
		val14.mode = (ReflectionProbeMode)2;
		val14.resolution = 128;
		val14.hdr = true;
		val14.intensity = 0.8f;
		val14.farClipPlane = 650f;
		LayerIndex world = LayerIndex.world;
		val14.cullingMask = 1 | LayerMask.op_Implicit(((LayerIndex)(ref world)).mask);
		((MonoBehaviour)this).StartCoroutine(CaptureReflection(val14));
		StormWeather();
		CelestialRadiance();
	}

	private void CelestialRadiance()
	{
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_0067: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0085: Expected O, but got Unknown
		//IL_00eb: 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_0152: Unknown result type (might be due to invalid IL or missing references)
		//IL_0181: Unknown result type (might be due to invalid IL or missing references)
		//IL_0186: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ac: 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_01d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0219: Unknown result type (might be due to invalid IL or missing references)
		//IL_021e: Unknown result type (might be due to invalid IL or missing references)
		//IL_023f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0244: Unknown result type (might be due to invalid IL or missing references)
		//IL_0261: Unknown result type (might be due to invalid IL or missing references)
		//IL_028a: Unknown result type (might be due to invalid IL or missing references)
		//IL_028f: 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_02c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_02cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_02db: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0308: Unknown result type (might be due to invalid IL or missing references)
		//IL_030d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0360: 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_03fd: Unknown result type (might be due to invalid IL or missing references)
		//IL_041f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0426: Expected O, but got Unknown
		//IL_0488: Unknown result type (might be due to invalid IL or missing references)
		//IL_04a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_04ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_04f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_0507: Unknown result type (might be due to invalid IL or missing references)
		//IL_051e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0535: Unknown result type (might be due to invalid IL or missing references)
		//IL_0556: Unknown result type (might be due to invalid IL or missing references)
		//IL_055b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0575: Unknown result type (might be due to invalid IL or missing references)
		//IL_057a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0583: Unknown result type (might be due to invalid IL or missing references)
		//IL_0590: Unknown result type (might be due to invalid IL or missing references)
		//IL_0595: Unknown result type (might be due to invalid IL or missing references)
		//IL_05b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_05be: Unknown result type (might be due to invalid IL or missing references)
		//IL_05c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_05e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_05fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_0611: Unknown result type (might be due to invalid IL or missing references)
		//IL_061e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0623: Unknown result type (might be due to invalid IL or missing references)
		//IL_062e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0635: Expected O, but got Unknown
		//IL_0647: Unknown result type (might be due to invalid IL or missing references)
		//IL_0651: Unknown result type (might be due to invalid IL or missing references)
		//IL_0656: Unknown result type (might be due to invalid IL or missing references)
		//IL_0663: Unknown result type (might be due to invalid IL or missing references)
		//IL_066d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0672: Unknown result type (might be due to invalid IL or missing references)
		//IL_0693: Unknown result type (might be due to invalid IL or missing references)
		//IL_0698: Unknown result type (might be due to invalid IL or missing references)
		//IL_06af: Unknown result type (might be due to invalid IL or missing references)
		//IL_06b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_06cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_06d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_06e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_06ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_06fd: Unknown result type (might be due to invalid IL or missing references)
		Shader val = StageArt.ArtShader("Assets/SeraphRadiance.shader");
		GameObject val2 = GameObject.CreatePrimitive((PrimitiveType)3);
		((Object)val2).name = "Heaven breached | pearl-gold light in the storm";
		val2.transform.SetParent(((Component)this).transform, false);
		val2.transform.position = new Vector3(0f, 219f, 30f);
		val2.transform.localScale = new Vector3(250f, 222f, 230f);
		Object.Destroy((Object)(object)val2.GetComponent<Collider>());
		Material val3 = new Material(val);
		((Object)val3).name = "Heaven breached | bounded depth-stopped light";
		owned.Add((Object)(object)val3);
		val3.SetFloat("_Mode", 0f);
		val3.SetFloat("_Cull", 1f);
		val3.SetFloat("_RadiancePhase", -1f);
		val3.SetVector("_VolumeMin", new Vector4(-125f, 108f, -85f, 0f));
		val3.SetVector("_VolumeMax", new Vector4(125f, 330f, 145f, 0f));
		Vector3 val4 = default(Vector3);
		((Vector3)(ref val4))..ctor(0f, 278f, 72f);
		val3.SetVector("_Source", new Vector4(val4.x, val4.y, val4.z, 1f));
		Vector4[] array = (Vector4[])(object)new Vector4[6]
		{
			new Vector4(-61f, 119f, -26f, 8f),
			new Vector4(44f, 146f, -6f, 7f),
			new Vector4(8f, 167f, 63f, 6f),
			new Vector4(-17f, 132f, 5f, 7.5f),
			new Vector4(63f, 149f, 44f, 6f),
			new Vector4(-41f, 151f, 63f, 6.5f)
		};
		Vector4[] array2 = (Vector4[])(object)new Vector4[array.Length];
		for (int i = 0; i < array.Length; i++)
		{
			Vector3 val5 = val4 + new Vector3(((float)i - 2.5f) * 1.8f, 0f, Mathf.Sin((float)i * 2.1f) * 3f);
			Vector3 val6 = new Vector3(array[i].x, array[i].y, array[i].z) - val5;
			float magnitude = ((Vector3)(ref val6)).magnitude;
			val6 /= magnitude;
			ref Vector4 reference = ref array2[i];
			reference = new Vector4(val6.x, val6.y, val6.z, 1f / magnitude);
		}
		val3.SetVectorArray("_ShaftEnd", array);
		val3.SetVectorArray("_ShaftAxis", array2);
		val3.SetColor("_Tint", new Color(1f, 0.83f, 0.54f, 1f));
		val3.SetFloat("_Strength", 0.6f);
		MeshRenderer component = val2.GetComponent<MeshRenderer>();
		((Renderer)component).sharedMaterial = val3;
		((Renderer)component).shadowCastingMode = (ShadowCastingMode)0;
		((Renderer)component).receiveShadows = false;
		GameObject val7 = Child("Heaven breached | living pearl light");
		val7.transform.position = new Vector3(0f, 225f, 45f);
		Light val8 = val7.AddComponent<Light>();
		val8.type = (LightType)2;
		val8.range = 96f;
		val8.color = new Color(1f, 0.82f, 0.62f);
		val8.intensity = 2.15f;
		val8.shadows = (LightShadows)0;
		Material val9 = new Material(val);
		((Object)val9).name = "Heaven breached | ascending feather-light";
		val9.SetFloat("_Mode", 1f);
		val9.SetFloat("_Cull", 0f);
		owned.Add((Object)(object)val9);
		GameObject val10 = Child("Heaven breached | sparse ascending light fragments");
		val10.transform.position = new Vector3(0f, 147f, 18f);
		ParticleSystem val11 = val10.AddComponent<ParticleSystem>();
		val11.Stop(true, (ParticleSystemStopBehavior)0);
		MainModule main = val11.main;
		((MainModule)(ref main)).duration = 14f;
		((MainModule)(ref main)).loop = true;
		((MainModule)(ref main)).prewarm = true;
		((MainModule)(ref main)).playOnAwake = false;
		((MainModule)(ref main)).simulationSpace = (ParticleSystemSimulationSpace)1;
		((MainModule)(ref main)).cullingMode = (ParticleSystemCullingMode)3;
		((MainModule)(ref main)).startLifetime = new MinMaxCurve(10f, 14f);
		((MainModule)(ref main)).startSpeed = MinMaxCurve.op_Implicit(0f);
		((MainModule)(ref main)).startSize = new MinMaxCurve(0.55f, 1.35f);
		((MainModule)(ref main)).startRotation = new MinMaxCurve(-0.45f, 0.45f);
		((MainModule)(ref main)).startColor = MinMaxGradient.op_Implicit(new Color(1f, 0.86f, 0.58f, 0.32f));
		((MainModule)(ref main)).maxParticles = 160;
		EmissionModule emission = val11.emission;
		((EmissionModule)(ref emission)).rateOverTime = MinMaxCurve.op_Implicit(10f);
		ShapeModule shape = val11.shape;
		((ShapeModule)(ref shape)).shapeType = (ParticleSystemShapeType)5;
		((ShapeModule)(ref shape)).scale = new Vector3(190f, 65f, 165f);
		VelocityOverLifetimeModule velocityOverLifetime = val11.velocityOverLifetime;
		((VelocityOverLifetimeModule)(ref velocityOverLifetime)).enabled = true;
		((VelocityOverLifetimeModule)(ref velocityOverLifetime)).space = (ParticleSystemSimulationSpace)1;
		((VelocityOverLifetimeModule)(ref velocityOverLifetime)).x = new MinMaxCurve(-0.5f, 0.1f);
		((VelocityOverLifetimeModule)(ref velocityOverLifetime)).y = new MinMaxCurve(0.7f, 1.6f);
		((VelocityOverLifetimeModule)(ref velocityOverLifetime)).z = new MinMaxCurve(-0.2f, 0.3f);
		ColorOverLifetimeModule colorOverLifetime = val11.colorOverLifetime;
		((ColorOverLifetimeModule)(ref colorOverLifetime)).enabled = true;
		Gradient val12 = new Gradient();
		val12.SetKeys((GradientColorKey[])(object)new GradientColorKey[2]
		{
			new GradientColorKey(Color.white, 0f),
			new GradientColorKey(Color.white, 1f)
		}, (GradientAlphaKey[])(object)new GradientAlphaKey[4]
		{
			new GradientAlphaKey(0f, 0f),
			new GradientAlphaKey(1f, 0.16f),
			new GradientAlphaKey(0.7f, 0.68f),
			new GradientAlphaKey(0f, 1f)
		});
		((ColorOverLifetimeModule)(ref colorOverLifetime)).color = MinMaxGradient.op_Implicit(val12);
		ParticleSystemRenderer component2 = ((Component)val11).GetComponent<ParticleSystemRenderer>();
		((Renderer)component2).sharedMaterial = val9;
		((Renderer)component2).shadowCastingMode = (ShadowCastingMode)0;
		((Renderer)component2).receiveShadows = false;
		component2.maxParticleSize = 0.02f;
		val11.useAutoRandomSeed = false;
		val11.randomSeed = 161803u;
		val11.Play();
		val11.Simulate(12f, true, false, true);
		val11.Play();
		celestialRadiance = val2.AddComponent<SeraphRadiancePulse>();
		celestialRadiance.Initialize(val3, val8, val11);
		Plugin.Log.LogInfo((object)"SERAPH RADIANCE ready: six depth-stopped soft shafts, pearl-gold corona, one slow-pulsing physical light and 160 ascending light fragments max");
	}

	internal void SetRadianceCapturePhase(float? seconds)
	{
		if (Object.op_Implicit((Object)(object)celestialRadiance))
		{
			celestialRadiance.SetCapturePhase(seconds);
		}
	}

	internal void LightingSnapshot(string phase)
	{
		//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_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a4: 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_00e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0101: Unknown result type (might be due to invalid IL or missing references)
		//IL_011a: 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_0137: Unknown result type (might be due to invalid IL or missing references)
		//IL_01da: Unknown result type (might be due to invalid IL or missing references)
		//IL_0251: Unknown result type (might be due to invalid IL or missing references)
		//IL_0256: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c1: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_032d: Unknown result type (might be due to invalid IL or missing references)
		//IL_039f: 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_03d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_0406: 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)
		//IL_04bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_05b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_07e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_07e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_07ff: Unknown result type (might be due to invalid IL or missing references)
		//IL_0695: Unknown result type (might be due to invalid IL or missing references)
		if (!Plugin.Testing)
		{
			return;
		}
		StringBuilder stringBuilder = new StringBuilder();
		object[] array = new object[8] { "phase=", phase, " rootScene=", null, null, null, null, null };
		object[] array2 = array;
		Scene val = ((Component)this).gameObject.scene;
		array2[3] = ((Scene)(ref val)).name;
		array[4] = " active=";
		object[] array3 = array;
		val = SceneManager.GetActiveScene();
		array3[5] = ((Scene)(ref val)).name;
		array[6] = " frame=";
		array[7] = Time.frameCount;
		stringBuilder.AppendLine(string.Concat(array));
		stringBuilder.AppendLine(string.Concat("ambientMode=", RenderSettings.ambientMode, " intensity=", RenderSettings.ambientIntensity, " sky=", RenderSettings.ambientSkyColor, " equator=", RenderSettings.ambientEquatorColor, " ground=", RenderSettings.ambientGroundColor, " flat=", RenderSettings.ambientLight));
		SphericalHarmonicsL2 ambientProbe = RenderSettings.ambientProbe;
		for (int i = 0; i < 3; i++)
		{
			stringBuilder.Append("SH" + i + ":");
			for (int j = 0; j < 9; j++)
			{
				stringBuilder.Append(" " + ((SphericalHarmonicsL2)(ref ambientProbe))[i, j]);
			}
			stringBuilder.AppendLine();
		}
		stringBuilder.AppendLine(string.Concat("skybox=", RenderSettings.skybox, " sun=", RenderSettings.sun, " shadows=", QualitySettings.shadows, " pixelLights=", QualitySettings.pixelLightCount));
		Light[] array4 = Object.FindObjectsOfType<Light>();
		foreach (Light val2 in array4)
		{
			array = new object[20]
			{
				"light=",
				((Object)val2).name,
				" scene=",
				null,
				null,
				null,
				null,
				null,
				null,
				null,
				null,
				null,
				null,
				null,
				null,
				null,
				null,
				null,
				null,
				null
			};
			object[] array5 = array;
			val = ((Component)val2).gameObject.scene;
			array5[3] = ((Scene)(ref val)).name;
			array[4] = " enabled=";
			array[5] = ((Behaviour)val2).enabled;
			array[6] = " active=";
			array[7] = ((Component)val2).gameObject.activeInHierarchy;
			array[8] = " type=";
			array[9] = val2.type;
			array[10] = " color=";
			array[11] = val2.color;
			array[12] = " intensity=";
			array[13] = val2.intensity;
			array[14] = " mode=";
			array[15] = val2.renderMode;
			array[16] = " mask=";
			array[17] = val2.cullingMask;
			array[18] = " shadows=";
			array[19] = val2.shadows;
			stringBuilder.AppendLine(string.Concat(array));
		}
		Camera[] allCameras = Camera.allCameras;
		foreach (Camera val3 in allCameras)
		{
			stringBuilder.AppendLine(string.Concat("camera=", ((Object)val3).name, " type=", val3.cameraType, " path=", val3.renderingPath, " actual=", val3.actualRenderingPath, " mask=", val3.cullingMask, " depth=", val3.depthTextureMode, " active=", ((Behaviour)val3).isActiveAndEnabled));
		}
		MonoBehaviour[] array6 = Object.FindObjectsOfType<MonoBehaviour>();
		foreach (MonoBehaviour val4 in array6)
		{
			if (((object)val4).GetType().Name.Contains("RenderSettings"))
			{
				array = new object[8]
				{
					"renderController=",
					((object)val4).GetType(),
					" scene=",
					null,
					null,
					null,
					null,
					null
				};
				object[] array7 = array;
				val = ((Component)val4).gameObject.scene;
				array7[3] = ((Scene)(ref val)).name;
				array[4] = " enabled=";
				array[5] = ((Behaviour)val4).enabled;
				array[6] = " data=";
				array[7] = JsonUtility.ToJson((object)val4);
				stringBuilder.AppendLine(string.Concat(array));
			}
		}
		string[] array8 = new string[8] { "_GlobalWarpRamp", "_GlobalEliteRamp", "_LightRamp", "_LightRamps", "_RampTexture", "_GlobalLightRamp", "_DecalAtlas", "_AmbientColor" };
		foreach (string text in array8)
		{
			stringBuilder.AppendLine(string.Concat("global ", text, " tex=", Shader.GetGlobalTexture(text), " vector=", Shader.GetGlobalVector(text)));
		}
		HashSet<int> hashSet = new HashSet<int>();
		Renderer[] array9 = Object.FindObjectsOfType<Renderer>();
		foreach (Renderer val5 in array9)
		{
			if (((Object)val5).name.IndexOf("Commando", StringComparison.OrdinalIgnoreCase) < 0 && ((Object)val5).name.IndexOf("Chest", StringComparison.OrdinalIgnoreCase) < 0)
			{
				continue;
			}
			stringBuilder.AppendLine("renderer=" + ((Object)val5).name + " layer=" + ((Component)val5).gameObject.layer + " enabled=" + val5.enabled + " probes=" + val5.lightProbeUsage);
			Material[] sharedMaterials = val5.sharedMaterials;
			foreach (Material val6 in sharedMaterials)
			{
				if (Object.op_Implicit((Object)(object)val6) && hashSet.Add(((Object)val6).GetInstanceID()))
				{
					stringBuilder.AppendLine(" material=" + ((Object)val6).name + " shader=" + ((Object)val6.shader).name + " supported=" + val6.shader.isSupported + " passCount=" + val6.passCount);
				}
			}
		}
		string contents = stringBuilder.ToString();
		File.WriteAllText(Path.Combine(Plugin.Folder, "lighting-" + phase + ".txt"), contents);
		ManualLogSource log = Plugin.Log;
		array = new object[8] { "SERAPH LIGHTING ", phase, " active=", null, null, null, null, null };
		object[] array10 = array;
		val = SceneManager.GetActiveScene();
		array10[3] = ((Scene)(ref val)).name;
		array[4] = " ambient=";
		array[5] = RenderSettings.ambientSkyColor;
		array[6] = " SH0=";
		array[7] = ((SphericalHarmonicsL2)(ref ambientProbe))[0, 0];
		log.LogInfo((object)string.Concat(array));
	}

	internal void CaptureLightingComparison(CharacterBody player)
	{
		//IL_05c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_05d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_05e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Invalid comparison between Unknown and I4
		//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)
		//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_0124: 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)
		//IL_015c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0163: Expected O, but got Unknown
		//IL_0191: Unknown result type (might be due to invalid IL or missing references)
		//IL_0198: Expected O, but got Unknown
		//IL_01ae: 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_02c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ea: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f1: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f8: Expected O, but got Unknown
		//IL_03c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_03cc: Expected O, but got Unknown
		//IL_0413: 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_0491: Unknown result type (might be due to invalid IL or missing references)
		//IL_04a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_04b5: Unknown result type (might be due to invalid IL or missing references)
		//IL_0524: Unknown result type (might be due to invalid IL or missing references)
		//IL_052b: Expected O, but got Unknown
		//IL_0541: Unknown result type (might be due to invalid IL or missing references)
		if (!Plugin.Testing || (int)SystemInfo.graphicsDeviceType == 4)
		{
			return;
		}
		GameObject val = Child("Validation only | native chest material comparison");
		GameObject val2 = Object.Instantiate<GameObject>(Assets.Load<GameObject>("RoR2/Base/Chest1/Chest1.prefab"), new Vector3(0f, 110f, -76f), Quaternion.Euler(0f, 180f, 0f));
		val2.transform.SetParent(val.transform, true);
		RenderingPath[] array = (RenderingPath[])(object)new RenderingPath[2]
		{
			(RenderingPath)1,
			(RenderingPath)3
		};
		foreach (RenderingPath val3 in array)
		{
			GameObject val4 = Child("Validation | native materials " + val3);
			Camera val5 = val4.AddComponent<Camera>();
			val5.renderingPath = val3;
			val5.allowHDR = true;
			val5.nearClipPlane = 0.1f;
			val5.farClipPlane = 1800f;
			val5.fieldOfView = 60f;
			val5.depthTextureMode = (DepthTextureMode)1;
			val4.transform.position = new Vector3(5f, 113f, -84f);
			val4.transform.LookAt(new Vector3(1.5f, 111f, -75f));
			RenderTexture val6 = new RenderTexture(1200, 800, 24, (RenderTextureFormat)0);
			val6.Create();
			val5.targetTexture = val6;
			val5.Render();
			RenderTexture.active = val6;
			Texture2D val7 = new Texture2D(1200, 800, (TextureFormat)3, false);
			val7.ReadPixels(new Rect(0f, 0f, 1200f, 800f), 0, 0);
			val7.Apply();
			File.WriteAllBytes(Path.Combine(Plugin.Folder, string.Concat("native-materials-", val3, ".png")), ImageConversion.EncodeToPNG(val7));
			RenderTexture.active = null;
			val5.targetTexture = null;
			val6.Release();
			Object.Destroy((Object)(object)val6);
			Object.Destroy((Object)(object)val7);
			Object.Destroy((Object)(object)val4);
		}
		if (Object.op_Implicit((Object)(object)player))
		{
			SceneCamera[] array2 = Object.FindObjectsOfType<SceneCamera>();
			foreach (SceneCamera val8 in array2)
			{
				if (!Object.op_Implicit((Object)(object)val8.cameraRigController) || !Object.op_Implicit((Object)(object)val8.camera))
				{
					continue;
				}
				Camera camera = val8.camera;
				CameraRigController rig = val8.cameraRigController;
				Vector3 position = ((Component)rig).transform.position;
				Quaternion rotation = ((Component)rig).transform.rotation;
				Vector3 footPosition = player.footPosition;
				GameObject val9 = new GameObject("Validation only | native-rig material witness");
				val9.transform.SetParent(((Component)rig).transform, false);
				Camera cam = val9.AddComponent<Camera>();
				((Behaviour)cam).enabled = false;
				cam.renderingPath = (RenderingPath)3;
				cam.allowHDR = true;
				cam.nearClipPlane = 0.1f;
				cam.farClipPlane = 1800f;
				cam.fieldOfView = 60f;
				cam.cullingMask = camera.cullingMask;
				cam.depthTextureMode = (DepthTextureMode)1;
				cam.clearFlags = (CameraClearFlags)1;
				val9.AddComponent<SceneCamera>();
				RenderTexture val6 = new RenderTexture(1500, 950, 24, (RenderTextureFormat)0);
				val6.Create();
				StringBuilder evidence = new StringBuilder();
				Action<string> action = delegate(string phase)
				{
					//IL_007f: Unknown result type (might be due to invalid IL or missing references)
					//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
					//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
					//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
					//IL_0162: Unknown result type (might be due to invalid IL or missing references)
					//IL_016f: Unknown result type (might be due to invalid IL or missing references)
					//IL_0197: Unknown result type (might be due to invalid IL or missing references)
					//IL_029b: Unknown result type (might be due to invalid IL or missing references)
					//IL_02a0: Unknown result type (might be due to invalid IL or missing references)
					//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
					//IL_02c4: Unknown result type (might be due to invalid IL or missing references)
					//IL_0366: Unknown result type (might be due to invalid IL or missing references)
					//IL_0384: Unknown result type (might be due to invalid IL or missing references)
					//IL_0389: Unknown result type (might be due to invalid IL or missing references)
					ModelLocator modelLocator = player.modelLocator;
					CharacterModel val10 = ((Object.op_Implicit((Object)(object)modelLocator) && Object.op_Implicit((Object)(object)modelLocator.modelTransform)) ? ((Component)modelLocator.modelTransform).GetComponent<CharacterModel>() : null);
					evidence.AppendLine(string.Concat(phase, " body=", ((Object)player).name, " foot=", player.footPosition, " core=", player.corePosition, " camera=", ((Component)cam).transform.position, " actualPath=", cam.actualRenderingPath, " firstPersonTarget=", rig.firstPersonTarget));
					evidence.AppendLine(string.Concat(" model=", Object.op_Implicit((Object)(object)modelLocator) ? modelLocator.modelTransform : null, " position=", (Object.op_Implicit((Object)(object)modelLocator) && Object.op_Implicit((Object)(object)modelLocator.modelTransform)) ? modelLocator.modelTransform.position : Vector3.zero, " visibility=", Object.op_Implicit((Object)(object)val10) ? ((object)val10.visibility).ToString() : "missing", " invisibilityCount=", Object.op_Implicit((Object)(object)val10) ? val10.invisibilityCount : (-1)));
					if (Object.op_Implicit((Object)(object)val10))
					{
						string[] array3 = new string[3] { "fade", "distanceFade", "firstPersonFade" };
						foreach (string text in array3)
						{
							evidence.AppendLine(" " + text + "=" + typeof(CharacterModel).GetField(text, BindingFlags.Instance | BindingFlags.NonPublic).GetValue(val10));
						}
						RendererInfo[] baseRendererInfos = val10.baseRendererInfos;
						for (int j = 0; j < baseRendererInfos.Length; j++)
						{
							RendererInfo val11 = baseRendererInfos[j];
							Renderer renderer = val11.renderer;
							if (Object.op_Implicit((Object)(object)renderer))
							{
								Bounds bounds = renderer.bounds;
								evidence.AppendLine(string.Concat(" renderer=", ((Object)renderer).name, " enabled=", renderer.enabled, " active=", ((Component)renderer).gameObject.activeInHierarchy, " visible=", renderer.isVisible, " layer=", ((Component)renderer).gameObject.layer, " bounds=", bounds, " viewportCenter=", cam.WorldToViewportPoint(((Bounds)(ref bounds)).center)));
								Material[] sharedMaterials = renderer.sharedMaterials;
								foreach (Material val12 in sharedMaterials)
								{
									if (Object.op_Implicit((Object)(object)val12))
									{
										evidence.AppendLine("  material=" + ((Object)val12).name + " shader=" + ((Object)val12.shader).name);
									}
								}
							}
						}
					}
				};
				try
				{
					action("before teleport");
					TeleportHelper.TeleportBody(player, new Vector3(3f, 111f, -76f));
					if (Object.op_Implicit((Object)(object)player.modelLocator))
					{
						player.modelLocator.LateUpdate();
					}
					Physics.SyncTransforms();
					((Component)rig).transform.position = new Vector3(-6f, 113f, -85f);
					((Component)rig).transform.LookAt(new Vector3(1f, 111f, -75f));
					val9.transform.localPosition = Vector3.zero;
					val9.transform.localRotation = Quaternion.identity;
					cam.targetTexture = val6;
					action("before warmup");
					cam.Render();
					action("after warmup");
					cam.Render();
					action("after saved render");
					RenderTexture.active = val6;
					Texture2D val7 = new Texture2D(1500, 950, (TextureFormat)3, false);
					val7.ReadPixels(new Rect(0f, 0f, 1500f, 950f), 0, 0);
					val7.Apply();
					File.WriteAllBytes(Path.Combine(Plugin.Folder, "native-character-and-chest.png"), ImageConversion.EncodeToPNG(val7));
					Object.Destroy((Object)(object)val7);
				}
				finally
				{
					File.WriteAllText(Path.Combine(Plugin.Folder, "native-character-and-chest.txt"), evidence.ToString());
					RenderTexture.active = null;
					cam.targetTexture = null;
					((Component)rig).transform.position = position;
					((Component)rig).transform.rotation = rotation;
					TeleportHelper.TeleportBody(player, footPosition);
					if (Object.op_Implicit((Object)(object)player.modelLocator))
					{
						player.modelLocator.LateUpdate();
					}
					Physics.SyncTransforms();
					val6.Release();
					Object.Destroy((Object)(object)val6);
					Object.Destroy((Object)(object)val9);
					SceneCamera._camera = camera;
				}
				break;
			}
		}
		Object.Destroy((Object)(object)val);
	}

	internal Vector3 ClearStandingPoint(Vector3 target, CharacterBody player)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: 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_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		//IL_0064: 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_0068: 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)
		//IL_0090: Unknown result type (might be due to invalid IL or missing references)
		//IL_0095: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01da: 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_00bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00db: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_0178: 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_0184: Unknown result type (might be due to invalid IL or missing references)
		//IL_0189: Unknown result type (might be due to invalid IL or missing references)
		//IL_018e: Unknown result type (might be due to invalid IL or missing references)
		Vector3 result = target;
		float num = 64f;
		bool flag = false;
		HullDef val = HullDef.Find((HullClassification)0);
		Vector3 val2 = V(layout.windStart);
		foreach (Vector3 groundPosition in groundPositions)
		{
			Vector3 val3 = groundPosition - target;
			float sqrMagnitude = ((Vector3)(ref val3)).sqrMagnitude;
			if (sqrMagnitude >= num)
			{
				continue;
			}
			Vector3 val4 = groundPosition - val2;
			if (Mathf.Abs(val4.y) < 3f)
			{
				Vector2 val5 = new Vector2(val4.x, val4.z);
				if (((Vector2)(ref val5)).sqrMagnitude < 25f)
				{
					continue;
				}
			}
			bool flag2 = true;
			Collider[] array = Physics.OverlapCapsule(groundPosition + Vector3.up * (val.radius + 0.1f), groundPosition + Vector3.up * (val.height - val.radius + 0.1f), val.radius, -1, (QueryTriggerInteraction)1);
			foreach (Collider val6 in array)
			{
				if ((Object)(object)val6 != (Object)(object)authoredFloor && (!Object.op_Implicit((Object)(object)player) || !((Component)val6).transform.IsChildOf(((Component)player).transform)))
				{
					flag2 = false;
					break;
				}
			}
			if (flag2)
			{
				result = groundPosition - Vector3.up * 0.13f;
				num = sqrMagnitude;
				flag = true;
			}
		}
		if (!flag)
		{
			throw new Exception("No clear survivor standing point near " + target);
		}
		return result;
	}

	internal string StandingSurface(CharacterBody player)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		RaycastHit[] array = Physics.RaycastAll(player.footPosition + Vector3.up * 0.3f, Vector3.down, 4f, -1, (QueryTriggerInteraction)1);
		Array.Sort(array, (RaycastHit a, RaycastHit b) => ((RaycastHit)(ref a)).distance.CompareTo(((RaycastHit)(ref b)).distance));
		RaycastHit[] array2 = array;
		for (int num = 0; num < array2.Length; num++)
		{
			RaycastHit val = array2[num];
			if (!((Component)((RaycastHit)(ref val)).collider).transform.IsChildOf(((Component)player).transform))
			{
				return ((Object)((RaycastHit)(ref val)).collider).name + " distance=" + ((RaycastHit)(ref val)).distance;
			}
		}
		return "none";
	}

	internal void CaptureMaterialDiagnostics()
	{
		//IL_008c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0091: Unknown result type (might be due to invalid IL or missing references)
		//IL_0095: 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_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_013a: Unknown result type (might be due to invalid IL or missing references)
		//IL_01be: 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)
		if (!Plugin.Testing)
		{
			return;
		}
		StringBuilder stringBuilder = new StringBuilder();
		Renderer[] array = Object.FindObjectsOfType<Renderer>();
		foreach (Renderer val in array)
		{
			Material[] sharedMaterials = val.sharedMaterials;
			foreach (Material val2 in sharedMaterials)
			{
				if (Object.op_Implicit((Object)(object)val2))
				{
					bool flag = !Object.op_Implicit((Object)(object)val2.shader) || !val2.shader.isSupported || ((Object)val2.shader).name.Contains("InternalError");
					Bounds bounds = val.bounds;
					Vector3 val3 = ((Bounds)(ref bounds)).center - new Vector3(0f, 110f, -76f);
					bool flag2 = ((Vector3)(ref val3)).sqrMagnitude < 1600f;
					if (flag || flag2)
					{
						stringBuilder.AppendLine(string.Concat("object=", ((Object)val).name, " parent=", Object.op_Implicit((Object)(object)((Component)val).transform.parent) ? ((Object)((Component)val).transform.parent).name : "", " bounds=", val.bounds, " material=", ((Object)val2).name, " shader=", Object.op_Implicit((Object)(object)val2.shader) ? ((Object)val2.shader).name : "NULL", " unsupported=", flag, " color=", val2.HasProperty("_Color") ? ((object)val2.color/*cast due to .constrained prefix*/).ToString() : "none"));
					}
				}
			}
		}
		File.WriteAllText(Path.Combine(Plugin.Folder, "capture-material-diagnostics.txt"), stringBuilder.ToString());
	}

	private static Vector3 V(float[] p)
	{
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		return new Vector3(p[0], p[1], p[2]);
	}

	internal Vector3 DesignPoint(Vector3 p)
	{
		//IL_0052: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		return new Vector3(p.x * layout.horizontalExpansion, layout.baseAltitude + (p.y - layout.baseAltitude) * layout.verticalExpansion, p.z * layout.horizontalExpansion);
	}

	public static void Create(Scene scene)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Expected O, but got Unknown
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		GameObject val = new GameObject("Seraphic Ascent | district");
		SceneManager.MoveGameObjectToScene(val, scene);
		StageWorld stageWorld = val.AddComponent<StageWorld>();
		stageWorld.Build();
	}

	private GameObject Child(string name)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Expected O, but got Unknown
		GameObject val = new GameObject(name);
		val.transform.SetParent(((Component)this).transform, false);
		return val;
	}

	private void Build()
	{
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Invalid comparison between Unknown and I4
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006e: Invalid comparison between Unknown and I4
		LightingSnapshot("before-build");
		layout = JsonConvert.DeserializeObject<Layout>(File.ReadAllText(Path.Combine(Plugin.Folder, "layout.json")));
		if ((int)SystemInfo.graphicsDeviceType != 4)
		{
			Materials();
		}
		else
		{
			materials = (Material[])(object)new Material[layout.palette.Length];
		}
		Geometry();
		Collision();
		if ((int)SystemInfo.graphicsDeviceType != 4)
		{
			Atmosphere();
		}
		Physics.SyncTransforms();
		ground = Navigation.BuildGround(layout, out groundPositions, out links, out components);
		owned.Add((Object)(object)ground);
		air = Navigation.BuildAir();
		owned.Add((Object)(object)air);
		if (components != 1)
		{
			Plugin.Log.LogWarning((object)("Ground route graph has " + components + " connected components; inspect validation report."));
		}
		WindShortcut();
		Systems();
		Ready = true;
		Plugin.Log.LogInfo((object)("Built Seraphic Ascent: " + groundPositions.Count + " ground nodes, " + links + " links, " + components + " components."));
		LightingSnapshot("after-build");
	}

	internal void BuildDiorama()
	{
		//IL_0035: 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_005f: Unknown result type (might be due to invalid IL or missing references)
		layout = JsonConvert.DeserializeObject<Layout>(File.ReadAllText(Path.Combine(Plugin.Folder, "layout.json")));
		Materials();
		Geometry(diorama: true);
		((Component)this).transform.localScale = Vector3.one * 0.024f;
		((Component)this).transform.localPosition = new Vector3(0f, -3.3f, -0.9f);
		Light[] componentsInChildren = ((Component)this).GetComponentsInChildren<Light>();
		foreach (Light val in componentsInChildren)
		{
			Object.Destroy((Object)(object)val);
		}
	}

	private void Materials()
	{
		materials = StageArt.CreateMaterials(layout.palette, owned);
	}

	private void Geometry(bool diorama = false)
	{
		//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ee: 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_010d: 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_0176: Unknown result type (might be due to invalid IL or missing references)
		//IL_017d: Expected O, but got Unknown
		//IL_029e: Unknown result type (might be due to invalid IL or missing references)
		using BinaryReader binaryReader = new BinaryReader(File.OpenRead(Path.Combine(Plugin.Folder, "seraph.meshbin")));
		if (Encoding.ASCII.GetString(binaryReader.ReadBytes(4)) != "WRT1")
		{
			throw new Exception("Invalid city geometry");
		}
		int num = binaryReader.ReadInt32();
		for (int i = 0; i < num; i++)
		{
			int num2 = binaryReader.ReadInt32();
			int count = binaryReader.ReadInt32();
			int num3 = binaryReader.ReadInt32();
			string text = Encoding.UTF8.GetString(binaryReader.ReadBytes(count));
			int num4 = binaryReader.ReadInt32();
			Vector3[] array = (Vector3[])(object)new Vector3[num3];
			Vector3[] array2 = (Vector3[])(object)new Vector3[num3];
			Vector2[] array3 = (Vector2[])(object)new Vector2[num3];
			for (int j = 0; j < num3; j++)
			{
				ref Vector3 reference = ref array[j];
				reference = new Vector3(binaryReader.ReadSingle(), binaryReader.ReadSingle(), binaryReader.ReadSingle());
				ref Vector3 reference2 = ref array2[j];
				reference2 = new Vector3(binaryReader.ReadSingle(), binaryReader.ReadSingle(), binaryReader.ReadSingle());
				ref Vector2 reference3 = ref array3[j];
				reference3 = new Vector2(binaryReader.ReadSingle(), binaryReader.ReadSingle());
			}
			int[] array4 = new int[num4];
			for (int j = 0; j < num4; j++)
			{
				array4[j] = binaryReader.ReadInt32();
			}
			if (!diorama || !text.StartsWith("Skyline |"))
			{
				Mesh val = new Mesh();
				((Object)val).name = text;
				if (num3 > 65535)
				{
					val.indexFormat = (IndexFormat)1;
				}
				val.vertices = array;
				val.normals = array2;
				val.uv = array3;
				val.triangles = array4;
				val.RecalculateTangents();
				val.RecalculateBounds();
				owned.Add((Object)(object)val);
				GameObject val2 = Child(text);
				val2.AddComponent<MeshFilter>().sharedMesh = val;
				MeshRenderer val3 = val2.AddComponent<MeshRenderer>();
				((Renderer)val3).sharedMaterial = materials[num2];
				((Renderer)val3).shadowCastingMode = (ShadowCastingMode)(!text.StartsWith("Skyline |"));
				if (!diorama && (text.StartsWith("The Unblinking") || (text.StartsWith("Seraph |") && !text.Contains("quills")) || text.StartsWith("Court details | curled") || text.StartsWith("Cloister |") || text.StartsWith("Western ascent |")))
				{
					val2.layer = LayerIndex.world.intVal;
					val2.AddComponent<MeshCollider>().sharedMesh = val;
				}
			}
		}
	}

	private void FloorCollision(Point[] quads, string name)
	{
		//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00df: Expected O, but got Unknown
		//IL_0124: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Unknown result type (might be due to invalid IL or missing references)
		if (quads == null || quads.Length == 0)
		{
			return;
		}
		Vector3[] array = (Vector3[])(object)new Vector3[quads.Length * 4];
		int[] array2 = new int[quads.Length * 6];
		for (int i = 0; i < quads.Length; i++)
		{
			float[] p = quads[i].p;
			int num = i * 4;
			int num2 = i * 6;
			for (int j = 0; j < 4; j++)
			{
				ref Vector3 reference = ref array[num + j];
				reference = new Vector3(p[j * 3], p[j * 3 + 1], p[j * 3 + 2]);
			}
			array2[num2] = num;
			array2[num2 + 1] = num + 1;
			array2[num2 + 2] = num + 2;
			array2[num2 + 3] = num;
			array2[num2 + 4] = num + 2;
			array2[num2 + 5] = num + 3;
		}
		Mesh val = new Mesh();
		((Object)val).name = name;
		val.indexFormat = (IndexFormat)1;
		val.vertices = array;
		val.triangles = array2;
		val.RecalculateBounds();
		owned.Add((Object)(object)val);
		GameObject val2 = Child(name);
		val2.layer = LayerIndex.world.intVal;
		MeshCollider val3 = val2.AddComponent<MeshCollider>();
		val3.sharedMesh = val;
		if (quads == layout.floorQuads)
		{
			authoredFloor = val3;
		}
	}

	private void Collision()
	{
		//IL_009e: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00db: Unknown result type (might be due to invalid IL or missing references)
		//IL_0181: Unknown result type (might be due to invalid IL or missing references)
		//IL_025f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0285: Unknown result type (might be due to invalid IL or missing references)
		//IL_02aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e6: 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_0331: 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)
		//IL_0359: Unknown result type (might be due to invalid IL or missing references)
		//IL_0121: Unknown result type (might be due to invalid IL or missing references)
		//IL_0134: Unknown result type (might be due to invalid IL or missing references)
		//IL_010a: Unknown result type (might be due to invalid IL or missing references)
		//IL_010f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0114: Unknown result type (might be due to invalid IL or missing references)
		//IL_0115: Unknown result type (might be due to invalid IL or missing references)
		//IL_011a: 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_01c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_019c: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_01db: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_0206: Unknown result type (might be due to invalid IL or missing references)
		FloorCollision(layout.floorQuads, "Solid | connected feather terraces");
		FloorCollision(layout.ceilingQuads, "Solid | constructed gallery roofs");
		FloorCollision(layout.bridgeFloorQuads, "Solid | auxiliary deck surfaces");
		FloorCollision(layout.isletFloorQuads, "Solid | detached tree islands, excluded from directors");
		FloorCollision(layout.steppingFloorQuads, "Solid | optional jumpable rocks, excluded from directors");
		Solid[] colliders = layout.colliders;
		foreach (Solid solid in colliders)
		{
			GameObject val = Child("Solid | structural collision");
			val.layer = LayerIndex.world.intVal;
			val.transform.position = V(solid.p);
			Quaternion val2 = Quaternion.Euler(solid.pitch, solid.yaw, 0f);
			if (solid.tilt != null && solid.tilt.Length == 4)
			{
				val2 = Quaternion.AngleAxis(solid.tilt[3], V(solid.tilt)) * val2;
			}
			val.transform.rotation = val2;
			val.AddComponent<BoxCollider>().size = V(solid.s);
		}
		Point[] trees = layout.trees;
		foreach (Point point in trees)
		{
			GameObject val = Child("Load-bearing tree collision");
			val.layer = LayerIndex.world.intVal;
			Quaternion val2 = ((point.p.Length >= 8) ? Quaternion.AngleAxis(point.p[7], new Vector3(point.p[4], point.p[5], point.p[6])) : Quaternion.identity);
			val.transform.position = V(point.p) + val2 * Vector3.up * 7f;
			val.transform.rotation = val2;
			CapsuleCollider val3 = val.AddComponent<CapsuleCollider>();
			val3.radius = point.p[3] * 0.85f;
			val3.height = 100f;
		}
		GameObject val4 = Child("Choir fall recovery");
		val4.layer = LayerIndex.collideWithCharacterHullOnly.intVal;
		val4.transform.position = new Vector3(0f, 30f, 10f);
		BoxCollider val5 = val4.AddComponent<BoxCollider>();
		val5.size = new Vector3(850f, 100f, 850f);
		((Collider)val5).isTrigger = true;
		MapZone val6 = val4.AddComponent<MapZone>();
		val6.triggerType = (TriggerType)1;
		val6.zoneType = (ZoneType)0;
		GameObject val7 = Child("Choir outer bounds");
		val7.layer = LayerIndex.collideWithCharacterHullOnly.intVal;
		val7.transform.position = new Vector3(0f, 170f, 16.5f);
		val5 = val7.AddComponent<BoxCollider>();
		val5.size = new Vector3(693f, 330f, 627f);
		((Collider)val5).isTrigger = true;
		val6 = val7.AddComponent<MapZone>();
		val6.triggerType = (TriggerType)0;
		val6.zoneType = (ZoneType)0;
	}

	private void WindShortcut()
	{
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		//IL_0079: 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_009e: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c8: 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_00d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00da: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b8: 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_01fc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0201: Unknown result type (might be due to invalid IL or missing references)
		//IL_020a: Unknown result type (might be due to invalid IL or missing references)
		//IL_021c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0233: Unknown result type (might be due to invalid IL or missing references)
		//IL_0254: Unknown result type (might be due to invalid IL or missing references)
		//IL_0259: Unknown result type (might be due to invalid IL or missing references)
		//IL_0270: Unknown result type (might be due to invalid IL or missing references)
		//IL_0275: Unknown result type (might be due to invalid IL or missing references)
		//IL_027e: Unknown result type (might be due to invalid IL or missing references)
		//IL_028b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0290: Unknown result type (might be due to invalid IL or missing references)
		//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
		if (layout.windStart == null)
		{
			return;
		}
		Vector3 val = V(layout.windStart);
		Vector3 val2 = V(layout.windEnd);
		GameObject val3 = Child("Choir updraft | optional express route");
		val3.layer = LayerIndex.world.intVal;
		val3.transform.position = val;
		BoxCollider val4 = val3.AddComponent<BoxCollider>();
		((Collider)val4).isTrigger = true;
		val4.center = Vector3.up * 0.4f;
		val4.size = new Vector3(3f, 0.9f, 3f);
		JumpVolume val5 = val3.AddComponent<JumpVolume>();
		val5.acceptTeam = (TeamIndex)1;
		val5.time = 5.1f;
		val5.jumpVelocity = (val2 - val) / val5.time - Physics.gravity * (val5.time * 0.5f);
		val5.AllowAirControl = false;
		val5.disableFallDamage = true;
		val5.jumpSoundString = "Play_env_geyser_launch";
		val5.onJump = new UnityEvent<CharacterBody>();
		if (Object.op_Implicit((Object)(object)materials[5]))
		{
			LineRenderer val6 = val3.AddComponent<LineRenderer>();
			((Renderer)val6).sharedMaterial = materials[5];
			val6.useWorldSpace = false;
			val6.loop = true;
			val6.positionCount = 32;
			val6.widthMultiplier = 0.09f;
			for (int i = 0; i < 32; i++)
			{
				float num = (float)i * MathF.PI / 16f;
				val6.SetPosition(i, new Vector3(Mathf.Cos(num) * 1.5f, 0.12f, Mathf.Sin(num) * 1.5f));
			}
			GameObject val7 = Child("Choir updraft | visible rising air");
			val7.transform.position = val;
			ParticleSystem val8 = val7.AddComponent<ParticleSystem>();
			MainModule main = val8.main;
			((MainModule)(ref main)).startLifetime = MinMaxCurve.op_Implicit(2.6f);
			((MainModule)(ref main)).startSpeed = MinMaxCurve.op_Implicit(3f);
			((MainModule)(ref main)).startSize = new MinMaxCurve(0.24f, 0.6f);
			((MainModule)(ref main)).startColor = MinMaxGradient.op_Implicit(new Color(0.75f, 0.96f, 0.83f, 0.65f));
			((MainModule)(ref main)).maxParticles = 45;
			EmissionModule emission = val8.emission;
			((EmissionModule)(ref emission)).rateOverTime = MinMaxCurve.op_Implicit(12f);
			ShapeModule shape = val8.shape;
			((ShapeModule)(ref shape)).shapeType = (ParticleSystemShapeType)4;
			((ShapeModule)(ref shape)).radius = 1.2f;
			((ShapeModule)(ref shape)).angle = 4f;
			val7.transform.rotation = Quaternion.Euler(-90f, 0f, 0f);
			((Renderer)((Component)val8).GetComponent<ParticleSystemRenderer>()).sharedMaterial = StageArt.WindMaterial(owned);
		}
	}

	private IEnumerator CaptureReflection(ReflectionProbe probe)
	{
		yield return null;
		yield return null;
		if (Object.op_Implicit((Object)(object)probe))
		{
			GameObject go = Child("Validation-independent | one-time environment capture");
			Camera camera = go.AddComponent<Camera>();
			((Behaviour)camera).enabled = false;
			camera.depthTextureMode = (DepthTextureMode)1;
			((Component)camera).transform.position = ((Component)probe).transform.position;
			camera.clearFlags = (CameraClearFlags)1;
			camera.nearClipPlane = 0.3f;
			camera.farClipPlane = 650f;
			camera.allowHDR = true;
			camera.renderingPath = (RenderingPath)1;
			LayerIndex world = LayerIndex.world;
			camera.cullingMask = 1 | LayerMask.op_Implicit(((LayerIndex)(ref world)).mask);
			RenderTexture cube = new RenderTexture(128, 128, 16, (RenderTextureFormat)2);
			((Object)cube).name = "Choir | captured reflection";
			((Texture)cube).dimension = (TextureDimension)4;
			cube.useMipMap = true;
			cube.autoGenerateMips = true;
			cube.Create();
			owned.Add((Object)(object)cube);
			bool complete = camera.RenderToCubemap(cube, 63);
			if (complete)
			{
				probe.customBakedTexture = (Texture)(object)cube;
			}
			Object.Destroy((Object)(object)go);
			Plugin.Log.LogInfo((object)("SERAPH ART reflection ready=" + complete));
		}
	}

	private void Systems()
	{
		//IL_011b: 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_013e: Unknown result type (might be due to invalid IL or missing references)
		//IL_015f: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d3: Expected O, but got Unknown
		//IL_024b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0269: Unknown result type (might be due to invalid IL or missing references)
		//IL_026b: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0301: Unknown result type (might be due to invalid IL or missing references)
		//IL_0303: Unknown result type (might be due to invalid IL or missing references)
		if (Plugin.Testing && !Plugin.GameplayTest)
		{
			return;
		}
		GameObject val = Child("StageInfo");
		val.SetActive(false);
		SceneInfo target = val.AddComponent<SceneInfo>();
		Assets.Set(target, "groundNodesAsset", ground);
		Assets.Set(target, "airNodesAsset", air);
		ClassicStageInfo val2 = val.AddComponent<ClassicStageInfo>();
		val2.SetMonsterDCCSP(Assets.Load<DccsPool>("RoR2/Base/foggyswamp/dpFoggySwampMonsters.asset"));
		val2.SetInteractableDCCSP(Assets.Load<DccsPool>("RoR2/Base/foggyswamp/dpFoggySwampInteractables.asset"));
		val2.sceneDirectorInteractibleCredits = 230;
		val2.sceneDirectorMonsterCredits = 20;
		val2.bonusInteractibleCreditObjects = (BonusInteractibleCreditObject[])(object)new BonusInteractibleCreditObject[0];
		val.SetActive(true);
		if (!Plugin.Testing || Plugin.GameplayTest)
		{
			if (!Object.op_Implicit((Object)(object)GlobalEventManager.instance))
			{
				Child("Global gameplay events").AddComponent<GlobalEventManager>();
			}
			for (int i = 0; i < 8; i++)
			{
				GameObject val3 = Child("Arrival " + i);
				val3.transform.position = V(layout.spawn) + new Vector3((float)(i % 4) * 2.2f, 0f, (float)(i / 4) * 2.2f);
				val3.transform.rotation = Quaternion.Euler(0f, 35f, 0f);
				val3.AddComponent<SpawnPoint>();
			}
			Child("Spawn director core").AddComponent<DirectorCore>();
			val = Child("Directors");
			val.SetActive(false);
			SceneDirector val4 = val.AddComponent<SceneDirector>();
			val4.usePlacedSpawnPoints = true;
			val4.teleporterSpawnCard = Assets.Load<SpawnCard>("RoR2/Base/Teleporters/iscTeleporter.asset");
			DirectorCard val5 = new DirectorCard();
			val5.spawnCard = (SpawnCard)(object)Assets.Load<InteractableSpawnCard>("RoR2/CU8/LemurianEgg/iscLemurianEgg.asset");
			val5.selectionWeight = 1;
			val4.lumerianEgg = val5;
			val4.expRewardCoefficient = 0.2f;
			val4.eliteBias = 1f;
			val4.spawnDistanceMultiplier = 1f;
			CombatDirector val6 = val.AddComponent<CombatDirector>();
			val6.customName = "Choir slow waves";
			val6.creditMultiplier = 0.75f;
			val6.moneyWaveIntervals = (RangeFloat[])(object)new RangeFloat[1]
			{
				new RangeFloat
				{
					min = 4f,
					max = 6f
				}
			};
			val6.minSeriesSpawnInterval = 0.5f;
			val6.maxSeriesSpawnInterval = 2f;
			val6.minRerollSpawnInterval = 22f;
			val6.maxRerollSpawnInterval = 30f;
			val6.skipSpawnIfTooCheap = true;
			CombatDirector val7 = val.AddComponent<CombatDirector>();
			val7.customName = "Choir fast waves";
			val7.creditMultiplier = 0.75f;
			val7.moneyWaveIntervals = (RangeFloat[])(object)new RangeFloat[1]
			{
				new RangeFloat
				{
					min = 2f,
					max = 4f
				}
			};
			val7.minSeriesSpawnInterval = 0.1f;
			val7.maxSeriesSpawnInterval = 1f;
			val7.minRerollSpawnInterval = 2f;
			val7.maxRerollSpawnInterval = 4f;
			((MonoBehaviour)this).StartCoroutine(EnableDirectors(val));
		}
	}

	private IEnumerator EnableDirectors(GameObject go)
	{
		while (!Object.op_Implicit((Object)(object)Stage.instance) || !Object.op_Implicit((Object)(object)Stage.instance.sceneDef))
		{
			yield return null;
		}
		yield return null;
		go.SetActive(true);
		if (NetworkServer.active)
		{
			GameObject val = Object.Instantiate<GameObject>(Assets.Load<GameObject>("RoR2/Base/NewtStatue/NewtStatue.prefab"), V(layout.shrine), Quaternion.Euler(0f, 125f, 0f));
			UnlockableGranter component = val.GetComponent<UnlockableGranter>();
			component.unlockableDef = Plugin.NewtLog;
			component.unlockableString = Plugin.NewtLog.cachedName;
			NetworkServer.Spawn(val);
		}
	}

	private void PrepareAntialiasing(PostProcessLayer layer)
	{
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Invalid comparison between Unknown and I4
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		if (!previousAntialiasing.ContainsKey(layer))
		{
			previousAntialiasing.Add(layer, layer.antialiasingMode);
			if ((int)layer.antialiasingMode == 0)
			{
				previousSmaaQuality.Add(layer, layer.subpixelMorphologicalAntialiasing.quality);
				layer.antialiasingMode = (Antialiasing)2;
				layer.subpixelMorphologicalAntialiasing.quality = (Quality)2;
			}
		}
	}

	private void LateUpdate()
	{
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_009c: 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_00af: Unknown result type (might be due to invalid IL or missing references)
		if (!Ready)
		{
			return;
		}
		Camera[] allCameras = Camera.allCameras;
		foreach (Camera val in allCameras)
		{
			int cullingMask = val.cullingMask;
			LayerIndex world = LayerIndex.world;
			if ((cullingMask & LayerMask.op_Implicit(((LayerIndex)(ref world)).mask)) != 0)
			{
				if (!previousFarPlanes.ContainsKey(val))
				{
					previousFarPlanes.Add(val, val.farClipPlane);
					val.farClipPlane = Mathf.Max(1800f, val.farClipPlane);
				}
				if (!previousDepthModes.ContainsKey(val))
				{
					previousDepthModes.Add(val, val.depthTextureMode);
					val.depthTextureMode = (DepthTextureMode)(val.depthTextureMode | 1);
				}
			}
			if (!preparedCameras.Contains(((Object)val).GetInstanceID()))
			{
				PostProcessLayer component = ((Component)val).GetComponent<PostProcessLayer>();
				if (Object.op_Implicit((Object)(object)component))
				{
					PrepareAntialiasing(component);
					component.OnGlobalVolumesDirty();
					component.OnVolumeSettingsChanged();
					preparedCameras.Add(((Object)val).GetInstanceID());
				}
			}
		}
	}

	internal void WriteValidation()
	{
		//IL_002c: 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_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		//IL_0271: Unknown result type (might be due to invalid IL or missing references)
		//IL_0277: Invalid comparison between Unknown and I4
		//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0100: Unknown result type (might be due to invalid IL or missing references)
		//IL_0104: Unknown result type (might be due to invalid IL or missing references)
		//IL_010d: Unknown result type (might be due to invalid IL or missing references)
		//IL_01af: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
		List<object> list = new List<object>();
		bool flag = true;
		Point[] nodes = layout.nodes;
		RaycastHit val2 = default(RaycastHit);
		foreach (Point point in nodes)
		{
			Vector3 val = V(point.p);
			bool flag2 = ((Collider)authoredFloor).Raycast(new Ray(val + Vector3.up * 0.6f, Vector3.down), ref val2, 1.6f) && Mathf.Abs(((RaycastHit)(ref val2)).point.y - (val.y - 0.18f)) < 0.05f;
			flag = flag && flag2;
			list.Add(new
			{
				p = point.p,
				supported = flag2
			});
		}
		Landmark[] landmarks = layout.landmarks;
		foreach (Landmark landmark in landmarks)
		{
			float num = float.PositiveInfinity;
			foreach (Vector3 groundPosition in groundPositions)
			{
				num = Mathf.Min(num, Vector3.Distance(groundPosition, V(landmark.p)));
			}
			bool flag3 = num < 7f;
			flag = flag && flag3;
			list.Add(new
			{
				destination = landmark.name,
				nearestGroundNode = num,
				reachable = flag3
			});
		}
		nodes = layout.teleporters;
		foreach (Point point2 in nodes)
		{
			int num2 = 0;
			foreach (Vector3 groundPosition2 in groundPositions)
			{
				if (Vector3.Distance(groundPosition2, V(point2.p)) < 4.5f)
				{
					num2++;
				}
			}
			flag = flag && num2 > 0;
			list.Add(new
			{
				teleporter = point2.p,
				nearbyNodes = num2
			});
		}
		File.WriteAllText(Path.Combine(Plugin.Folder, "physical-validation.json"), JsonConvert.SerializeObject((object)new
		{
			passed = flag,
			teleporterFlagMask = 2,
			checks = list
		}, (Formatting)1));
		Plugin.Log.LogInfo((object)("SERAPH TEST physical surfaces and destinations=" + flag));
		if ((int)SystemInfo.graphicsDeviceType != 4)
		{
			Capture();
			CaptureScale(null);
		}
		File.WriteAllText(Path.Combine(Plugin.Folder, "runtime-validation.txt"), "Scene loaded in Unity\nGround nodes: " + groundPositions.Count + "\nLinks: " + links + "\nConnected components: " + components + "\nRenderers: " + ((Component)this).GetComponentsInChildren<Renderer>().Length + "\nColliders: " + ((Component)this).GetComponentsInChildren<Collider>().Length + "\n");
	}

	internal void Capture()
	{
		//IL_00db: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e2: Expected O, but got Unknown
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_009b: Unknown result type (might be due to invalid IL or missing references)
		//IL_009f: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a4: 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_012f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0223: Unknown result type (might be due to invalid IL or missing references)
		//IL_0241: Unknown result type (might be due to invalid IL or missing references)
		//IL_0278: Unknown result type (might be due to invalid IL or missing references)
		//IL_027f: Expected O, but got Unknown
		//IL_0295: Unknown result type (might be due to invalid IL or missing references)
		//IL_0302: Unknown result type (might be due to invalid IL or missing references)
		//IL_0309: Expected O, but got Unknown
		//IL_031f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0188: Unknown result type (might be due to invalid IL or missing references)
		//IL_018f: Expected O, but got Unknown
		//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
		CaptureMaterialDiagnostics();
		SetStormCaptureFlash(enabled: false);
		SetRadianceCapturePhase(4f);
		GameObject val = Child("Validation camera");
		Camera val2 = val.AddComponent<Camera>();
		val2.depthTextureMode = (DepthTextureMode)1;
		val2.fieldOfView = 65f;
		val2.nearClipPlane = 0.15f;
		val2.farClipPlane = 1800f;
		val2.allowHDR = true;
		val2.renderingPath = (RenderingPath)3;
		val2.clearFlags = (CameraClearFlags)1;
		PostProcessResources[] array = Resources.FindObjectsOfTypeAll<PostProcessResources>();
		if (array.Length > 0)
		{
			PostProcessLayer val3 = val.AddComponent<PostProcessLayer>();
			LayerIndex postProcess = LayerIndex.postProcess;
			val3.volumeLayer = ((LayerIndex)(ref postProcess)).mask;
			val3.volumeTrigger = val.transform;
			val3.Init(array[0]);
			val3.OnGlobalVolumesDirty();
			val3.OnVolumeSettingsChanged();
		}
		RenderTexture val4 = new RenderTexture(1500, 950, 24, (RenderTextureFormat)0);
		val4.Create();
		val2.targetTexture = val4;
		for (int i = 0; i < layout.captureViews.Length; i++)
		{
			val.transform.position = V(layout.captureViews[i]);
			val.transform.LookAt(V(layout.captureTargets[i]));
			PostProcessLayer component = ((Component)val2).GetComponent<PostProcessLayer>();
			if (Object.op_Implicit((Object)(object)component))
			{
				PrepareAntialiasing(component);
				component.OnGlobalVolumesDirty();
				component.OnVolumeSettingsChanged();
			}
			val2.Render();
			RenderTexture.active = val4;
			Texture2D val5 = new Texture2D(1500, 950, (TextureFormat)3, false);
			val5.ReadPixels(new Rect(0f, 0f, 1500f, 950f), 0, 0);
			val5.Apply();
			File.WriteAllBytes(Path.Combine(Plugin.Folder, "unity-view-" + i + ".png"), ImageConversion.EncodeToPNG(val5));
			Object.Destroy((Object)(object)val5);
		}
		val.transform.position = V(layout.captureViews[0]);
		val.transform.LookAt(V(layout.captureTargets[0]));
		SetRadianceCapturePhase(12f);
		val2.Render();
		RenderTexture.active = val4;
		Texture2D val6 = new Texture2D(1500, 950, (TextureFormat)3, false);
		val6.ReadPixels(new Rect(0f, 0f, 1500f, 950f), 0, 0);
		val6.Apply();
		File.WriteAllBytes(Path.Combine(Plugin.Folder, "radiance-trough.png"), ImageConversion.EncodeToPNG(val6));
		Object.Destroy((Object)(object)val6);
		SetRadianceCapturePhase(4f);
		SetStormCaptureFlash(enabled: true);
		val2.Render();
		RenderTexture.active = val4;
		Texture2D val7 = new Texture2D(1500, 950, (TextureFormat)3, false);
		val7.ReadPixels(new Rect(0f, 0f, 1500f, 950f), 0, 0);
		val7.Apply();
		File.WriteAllBytes(Path.Combine(Plugin.Folder, "storm-lightning.png"), ImageConversion.EncodeToPNG(val7));
		Object.Destroy((Object)(object)val7);
		SetStormCaptureFlash(enabled: false);
		SetRadianceCapturePhase(null);
		RenderTexture.active = null;
		val2.targetTexture = null;
		val4.Release();
		Object.Destroy((Object)(object)val4);
		Object.Destroy((Object)(object)val);
	}

	internal void CaptureScale(CharacterBody player)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Invalid comparison between Unknown and I4
		//IL_008c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0091: Unknown result type (might be due to invalid IL or missing references)
		//IL_0095: Unknown result type (might be due to invalid IL or missing references)
		//IL_009a: Unknown result type (might be due to invalid IL or missing references)
		//IL_00df: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_011e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0120: Unknown result type (might be due to invalid IL or missing references)
		//IL_0132: Unknown result type (might be due to invalid IL or missing references)
		//IL_0137: Unknown result type (might be due to invalid IL or missing references)
		//IL_0170: Unknown result type (might be due to invalid IL or missing references)
		//IL_0219: Unknown result type (might be due to invalid IL or missing references)
		//IL_0235: Unknown result type (might be due to invalid IL or missing references)
		//IL_0246: Unknown result type (might be due to invalid IL or missing references)
		//IL_0248: 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_0257: Unknown result type (might be due to invalid IL or missing references)
		//IL_026f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0276: Expected O, but got Unknown
		//IL_02a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a9: Expected O, but got Unknown
		//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_022f: Unknown result type (might be due to invalid IL or missing references)
		if ((int)SystemInfo.graphicsDeviceType != 4)
		{
			GameObject val = Child("Validation camera | actual survivor scale");
			Camera val2 = val.AddComponent<Camera>();
			val2.depthTextureMode = (DepthTextureMode)1;
			val2.fieldOfView = 60f;
			val2.nearClipPlane = 0.1f;
			val2.farClipPlane = 3500f;
			val2.allowHDR = true;
			val2.renderingPath = (RenderingPath)3;
			val2.clearFlags = (CameraClearFlags)1;
			PostProcessResources[] array = Resources.FindObjectsOfTypeAll<PostProcessResources>();
			if (array.Length > 0)
			{
				PostProcessLayer val3 = val.AddComponent<PostProcessLayer>();
				LayerIndex postProcess = LayerIndex.postProcess;
				val3.volumeLayer = ((LayerIndex)(ref postProcess)).mask;
				val3.volumeTrigger = val.transform;
				val3.Init(array[0]);
				val3.OnGlobalVolumesDirty();
				val3.OnVolumeSettingsChanged();
			}
			Vector3 val4 = (Object.op_Implicit((Object)(object)player) ? player.footPosition : V(layout.scaleReference));
			HullDef val5 = HullDef.Find((HullClassification)0);
			GameObject val6 = null;
			if (!Object.op_Implicit((Object)(object)player))
			{
				val6 = GameObject.CreatePrimitive((PrimitiveType)1);
				((Object)val6).name = "Validation only | native human hull";
				val6.transform.position = val4 + Vector3.up * (val5.height * 0.5f);
				val6.transform.localScale = new Vector3(val5.radius * 2f, val5.height * 0.5f, val5.radius * 2f);
				val6.GetComponent<Renderer>().sharedMaterial = materials[13];
				val6.GetComponent<Collider>().enabled = false;
			}
			Plugin.Log.LogInfo((object)("SERAPH TEST native human reference height=" + val5.height + " radius=" + val5.radius));
			val.transform.position = val4 + ((Object.op_Implicit((Object)(object)player) && val4.z > 30f) ? new Vector3(6f, 4f, 9f) : new Vector3(-5f, 3.2f, -8f));
			val.transform.LookAt(val4 + Vector3.up * 4f);
			RenderTexture val7 = new RenderTexture(1500, 950, 24, (RenderTextureFormat)0);
			val7.Create();
			val2.targetTexture = val7;
			val2.Render();
			RenderTexture.active = val7;
			Texture2D val8 = new Texture2D(1500, 950, (TextureFormat)3, false);
			val8.ReadPixels(new Rect(0f, 0f, 1500f, 950f), 0, 0);
			val8.Apply();
			File.WriteAllBytes(Path.Combine(Plugin.Folder, "survivor-scale.png"), ImageConversion.EncodeToPNG(val8));
			RenderTexture.active = null;
			val2.targetTexture = null;
			val7.Release();
			Object.Destroy((Object)(object)val7);
			Object.Destroy((Object)(object)val8);
			Object.Destroy((Object)(object)val);
			if (Object.op_Implicit((Object)(object)val6))
			{
				Object.Destroy((Object)(object)val6);
			}
		}
	}

	private void OnDestroy()
	{
		//IL_009c: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a1: 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_0100: Unknown result type (might be due to invalid IL or missing references)
		//IL_015a: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
		foreach (KeyValuePair<Camera, float> previousFarPlane in previousFarPlanes)
		{
			if (Object.op_Implicit((Object)(object)previousFarPlane.Key))
			{
				previousFarPlane.Key.farClipPlane = previousFarPlane.Value;
			}
		}
		foreach (KeyValuePair<PostProcessLayer, Quality> item in previousSmaaQuality)
		{
			if (Object.op_Implicit((Object)(object)item.Key))
			{
				item.Key.subpixelMorphologicalAntialiasing.quality = item.Value;
			}
		}
		foreach (KeyValuePair<PostProcessLayer, Antialiasing> item2 in previousAntialiasing)
		{
			if (Object.op_Implicit((Object)(object)item2.Key))
			{
				item2.Key.antialiasingMode = item2.Value;
			}
		}
		foreach (KeyValuePair<Camera, DepthTextureMode> previousDepthMode in previousDepthModes)
		{
			if (Object.op_Implicit((Object)(object)previousDepthMode.Key))
			{
				previousDepthMode.Key.depthTextureMode = previousDepthMode.Value;
			}
		}
		if (qualityConfigured)
		{
			QualitySettings.shadowDistance = previousShadowDistance;
			QualitySettings.shadowCascades = previousCascades;
			QualitySettings.shadowResolution = previousShadowResolution;
		}
		foreach (Object item3 in owned)
		{
			if (Object.op_Implicit(item3))
			{
				Object.Destroy(item3);
			}
		}
	}

	private void StormWeather()
	{
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Expected O, but got Unknown
		//IL_005d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Expected O, but got Unknown
		//IL_0097: Unknown result type (might be due to invalid IL or missing references)
		//IL_009d: Expected O, but got Unknown
		//IL_0106: Unknown result type (might be due to invalid IL or missing references)
		//IL_0127: Unknown result type (might be due to invalid IL or missing references)
		//IL_0149: Unknown result type (might be due to invalid IL or missing references)
		//IL_0150: Expected O, but got Unknown
		//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
		GameObject val = Child("Realm in distress | original wind, rain and lightning");
		stormFront = val.AddComponent<SeraphStormFront>();
		Material val2 = new Material(StageArt.ArtShader("Assets/SeraphWeather.shader"));
		((Object)val2).name = "Storm | wind-driven rain";
		val2.SetFloat("_Mode", 0f);
		owned.Add((Object)(object)val2);
		Material val3 = new Material(StageArt.ArtShader("Assets/SeraphWeather.shader"));
		((Object)val3).name = "Storm | fractured celestial lightning";
		val3.SetFloat("_Mode", 1f);
		owned.Add((Object)(object)val3);
		Material val4 = new Material(StageArt.ArtShader("Assets/SeraphWeather.shader"));
		((Object)val4).name = "Storm | torn low cloud wisps";
		val4.SetFloat("_Mode", 2f);
		owned.Add((Object)(object)val4);
		GameObject val5 = GameObject.CreatePrimitive((PrimitiveType)3);
		((Object)val5).name = "Storm | low moving cloud canopy";
		val5.transform.SetParent(val.transform, false);
		val5.transform.position = new Vector3(0f, 295f, 0f);
		val5.transform.localScale = new Vector3(4200f, 150f, 4200f);
		Object.Destroy((Object)(object)val5.GetComponent<Collider>());
		Material val6 = new Material(StageArt.ArtShader("Assets/SeraphClouds.shader"));
		owned.Add((Object)(object)val6);
		val6.SetFloat("_Top", 370f);
		val6.SetFloat("_Bottom", 240f);
		val6.SetFloat("_Upper", 1f);
		val6.SetFloat("_Density", 0.0018f);
		val6.SetColor("_MistColor", new Color(0.115f, 0.155f, 0.235f));
		MeshRenderer component = val5.GetComponent<MeshRenderer>();
		((Renderer)component).sharedMaterial = val6;
		((Renderer)component).shadowCastingMode = (ShadowCastingMode)0;
		((Renderer)component).receiveShadows = false;
		stormFront.Initialize(val2, val3, val4, val6);
		Plugin.Log.LogInfo((object)"SERAPH STORM ready: original rain 6500 max, 130 cloud wisps max, six pooled lightning channels; canopy begins at 240m");
	}

	internal void SetStormCaptureFlash(bool enabled)
	{
		if (Object.op_Implicit((Object)(object)stormFront))
		{
			stormFront.SetCaptureFlash(enabled);
		}
	}
}
internal sealed class SeraphRadiancePulse : MonoBehaviour
{
	private Material material;

	private Light livingLight;

	private ParticleSystem motes;

	private float? capturePhase;

	internal void Initialize(Material volumeMaterial, Light localLight, ParticleSystem fragments)
	{
		material = volumeMaterial;
		livingLight = localLight;
		motes = fragments;
		Apply(Time.time);
	}

	internal void SetCapturePhase(float? seconds)
	{
		capturePhase = seconds;
		material.SetFloat("_RadiancePhase", seconds.HasValue ? seconds.Value : (-1f));
		if (seconds.HasValue)
		{
			motes.Pause();
			motes.Simulate(12f + Mathf.Repeat(seconds.Value, 14f), true, true, true);
			motes.Pause();
		}
		else
		{
			motes.Play();
		}
		Apply(seconds.HasValue ? seconds.Value : Time.time);
	}

	private void Update()
	{
		Apply(capturePhase.HasValue ? capturePhase.Value : Time.time);
	}

	private void Apply(float time)
	{
		float num = Mathf.Sin(time * 0.38f);
		Shader.SetGlobalFloat("_SeraphPulse", 0.5f + 0.5f * num);
		if (Object.op_Implicit((Object)(object)livingLight))
		{
			livingLight.intensity = 2.15f * (0.96f + 0.08f * num);
		}
	}

	private void OnDestroy()
	{
		Shader.SetGlobalFloat("_SeraphPulse", 0.5f);
	}
}
public sealed class DioramaView : MonoBehaviour
{
	private bool built;

	private void OnEnable()
	{
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Expected O, but got Unknown
		if (!built)
		{
			built = true;
			GameObject val = new GameObject("The choir in miniature");
			val.transform.SetParent(((Component)this).transform, false);
			val.AddComponent<StageWorld>().BuildDiorama();
		}
	}
}
internal static class Navigation
{
	private static int World
	{
		get
		{
			//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_0009: Unknown result type (might be due to invalid IL or missing references)
			LayerIndex world = LayerIndex.world;
			return LayerMask.op_Implicit(((LayerIndex)(ref world)).mask);
		}
	}

	private static Vector3 V(float[] p)
	{
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		return new Vector3(p[0], p[1], p[2]);
	}

	private static bool Clear(Vector3 p, int hull)
	{
		//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_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_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)
		HullDef val = HullDef.Find((HullClassification)hull);
		return !Physics.CheckCapsule(p + Vector3.up * (val.radius + 0.3f), p + Vector3.up * (val.height - val.radius + 0.3f), val.radius, World, (QueryTriggerInteraction)1);
	}

	private static bool Floor(Vector3 p)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: 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_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		return Physics.Raycast(p + Vector3.up * 0.8f, Vector3.down, 1.8f, World, (QueryTriggerInteraction)1);
	}

	private static bool Wide(Vector3 p, float radius)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		//IL_003d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		return Floor(p + Vector3.right * radius) && Floor(p - Vector3.right * radius) && Floor(p + Vector3.forward * radius) && Floor(p - Vector3.forward * radius);
	}

	internal unsafe static NodeGraph BuildGround(Layout layout, out List<Vector3> positions, out int linkCount, out int components)
	{
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_0051: Unknown result type (might be due to invalid IL or missing references)
		//IL_014a: Unknown result type (might be due to invalid IL or missing references)
		//IL_014f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0156: Unknown result type (might be due to invalid IL or missing references)
		//IL_0157: Unknown result type (might be due to invalid IL or missing references)
		//IL_0161: Unknown result type (might be due to invalid IL or missing references)
		//IL_0166: Unknown result type (might be due to invalid IL or missing references)
		//IL_016b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0076: Unknown resul