Decompiled source of The Elevator v1.0.0

BepInEx\plugins\Empress_AI-The_Elevator\TheElevator.dll

Decompiled a day ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using ExitGames.Client.Photon;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Photon.Pun;
using Photon.Realtime;
using REPOLib.Modules;
using REPOLib.Objects.Sdk;
using TMPro;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("")]
[assembly: AssemblyCompany("Empress")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("TheElevator")]
[assembly: AssemblyTitle("TheElevator")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace Empress.REPO.TheElevator
{
	internal enum EmpressElevatorEventKind
	{
		ConfettiBloom,
		HealingRain,
		LanternOrbit,
		PrismGarden,
		SpotlightParade,
		HeartPageant,
		GiftPulse,
		CylinderChoir,
		BubbleDrift,
		CalmAurora,
		TreasureDrizzle,
		MoonBounce,
		SoloErrand,
		TeamTrial,
		LaserSweep,
		DirectiveTrial,
		RollingOrbs,
		CeilingPress,
		SpikeLattice,
		ShockRing,
		SeekerOrbs,
		BounceBombs,
		SawSweep,
		MeteorDrop,
		PulseWall,
		FreezeTag,
		MarathonPanic,
		GravityFlip,
		DoNotTurnAround
	}
	internal sealed class EmpressElevatorFloorDefinition
	{
		internal int DefinitionIndex { get; }

		internal string Name { get; }

		internal EmpressElevatorEventKind Kind { get; }

		internal bool Hostile { get; }

		internal float EventDuration { get; }

		internal int Count { get; }

		internal float Speed { get; }

		internal float Size { get; }

		internal int Power { get; }

		internal Color PrimaryColor { get; }

		internal Color SecondaryColor { get; }

		internal EmpressElevatorFloorDefinition(int definitionIndex, string name, EmpressElevatorEventKind kind, bool hostile, float eventDuration, int count, float speed, float size, int power, Color primaryColor, Color secondaryColor)
		{
			//IL_004e: 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_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			DefinitionIndex = definitionIndex;
			Name = name;
			Kind = kind;
			Hostile = hostile;
			EventDuration = eventDuration;
			Count = count;
			Speed = speed;
			Size = size;
			Power = power;
			PrimaryColor = primaryColor;
			SecondaryColor = secondaryColor;
		}
	}
	internal static class EmpressElevatorFloorCatalog
	{
		internal static IReadOnlyList<EmpressElevatorFloorDefinition> Build()
		{
			//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_003b: 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_0056: 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_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_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_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_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_011a: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_016d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_021d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0249: 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_02a0: 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_02f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0324: Unknown result type (might be due to invalid IL or missing references)
			//IL_034f: Unknown result type (might be due to invalid IL or missing references)
			//IL_037b: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0429: Unknown result type (might be due to invalid IL or missing references)
			//IL_0454: Unknown result type (might be due to invalid IL or missing references)
			//IL_047f: Unknown result type (might be due to invalid IL or missing references)
			//IL_04aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0502: Unknown result type (might be due to invalid IL or missing references)
			//IL_052e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0559: Unknown result type (might be due to invalid IL or missing references)
			//IL_0584: Unknown result type (might be due to invalid IL or missing references)
			//IL_05af: Unknown result type (might be due to invalid IL or missing references)
			//IL_05db: Unknown result type (might be due to invalid IL or missing references)
			//IL_0607: Unknown result type (might be due to invalid IL or missing references)
			//IL_0633: Unknown result type (might be due to invalid IL or missing references)
			//IL_065f: Unknown result type (might be due to invalid IL or missing references)
			//IL_068b: Unknown result type (might be due to invalid IL or missing references)
			//IL_06b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_06e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_070f: Unknown result type (might be due to invalid IL or missing references)
			//IL_073b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0767: Unknown result type (might be due to invalid IL or missing references)
			//IL_0793: Unknown result type (might be due to invalid IL or missing references)
			//IL_07bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_07eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0817: Unknown result type (might be due to invalid IL or missing references)
			//IL_0844: Unknown result type (might be due to invalid IL or missing references)
			//IL_0871: Unknown result type (might be due to invalid IL or missing references)
			//IL_089e: Unknown result type (might be due to invalid IL or missing references)
			//IL_08cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_08f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0924: Unknown result type (might be due to invalid IL or missing references)
			//IL_0950: Unknown result type (might be due to invalid IL or missing references)
			//IL_097c: Unknown result type (might be due to invalid IL or missing references)
			//IL_09a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_09d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a01: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a2d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a59: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a86: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ab3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ae0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b0d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b3a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b67: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b94: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bc1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bee: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c1c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c4a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c77: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ca4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cd1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cfe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d2b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d58: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d85: Unknown result type (might be due to invalid IL or missing references)
			//IL_0db2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ddf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e0c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e39: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e66: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e93: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ec0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0eed: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f1a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f47: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f74: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fa2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fd0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ffd: Unknown result type (might be due to invalid IL or missing references)
			//IL_102a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1057: Unknown result type (might be due to invalid IL or missing references)
			//IL_1084: Unknown result type (might be due to invalid IL or missing references)
			//IL_10b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_10e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_110e: Unknown result type (might be due to invalid IL or missing references)
			//IL_113c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1169: Unknown result type (might be due to invalid IL or missing references)
			//IL_1196: Unknown result type (might be due to invalid IL or missing references)
			//IL_11c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_11f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_121e: Unknown result type (might be due to invalid IL or missing references)
			//IL_124b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1278: Unknown result type (might be due to invalid IL or missing references)
			List<EmpressElevatorFloorDefinition> list = new List<EmpressElevatorFloorDefinition>(100);
			Color[] array = (Color[])(object)new Color[5]
			{
				new Color(1f, 0.56f, 0.82f),
				new Color(0.55f, 0.87f, 1f),
				new Color(0.98f, 0.91f, 0.45f),
				new Color(0.66f, 1f, 0.75f),
				new Color(0.84f, 0.72f, 1f)
			};
			Color[] array2 = (Color[])(object)new Color[5]
			{
				new Color(1f, 0.22f, 0.22f),
				new Color(1f, 0.51f, 0.14f),
				new Color(0.88f, 0.09f, 0.42f),
				new Color(0.61f, 0.16f, 1f),
				new Color(1f, 0.83f, 0.21f)
			};
			Add(list, "Carnival Confetti", EmpressElevatorEventKind.ConfettiBloom, hostile: false, 6.4f, 16, 0.7f, 0.16f, 2, array[0], 0.32f);
			Add(list, "Velvet Surprise", EmpressElevatorEventKind.ConfettiBloom, hostile: false, 6.9f, 20, 0.82f, 0.18f, 3, array[4], 0.35f);
			Add(list, "Joy Burst", EmpressElevatorEventKind.ConfettiBloom, hostile: false, 7.3f, 24, 0.95f, 0.2f, 4, array[2], 0.28f);
			Add(list, "Glitter Rescue", EmpressElevatorEventKind.ConfettiBloom, hostile: false, 7.8f, 28, 1.02f, 0.22f, 5, array[1], 0.34f);
			Add(list, "Warm Rain", EmpressElevatorEventKind.HealingRain, hostile: false, 6.8f, 12, 0.8f, 0.18f, 5, array[2], 0.3f);
			Add(list, "Sugar Drip", EmpressElevatorEventKind.HealingRain, hostile: false, 7.1f, 14, 0.86f, 0.2f, 6, array[0], 0.34f);
			Add(list, "Nurse Cloud", EmpressElevatorEventKind.HealingRain, hostile: false, 7.5f, 16, 0.92f, 0.22f, 7, array[3], 0.31f);
			Add(list, "Gentle Wash", EmpressElevatorEventKind.HealingRain, hostile: false, 8f, 18, 0.98f, 0.24f, 8, array[1], 0.29f);
			Add(list, "Lantern Waltz", EmpressElevatorEventKind.LanternOrbit, hostile: false, 6.7f, 8, 0.72f, 0.36f, 2, array[2], 0.25f);
			Add(list, "Amber Orbit", EmpressElevatorEventKind.LanternOrbit, hostile: false, 7f, 10, 0.81f, 0.4f, 3, array[4], 0.22f);
			Add(list, "Candle Ring", EmpressElevatorEventKind.LanternOrbit, hostile: false, 7.4f, 12, 0.9f, 0.44f, 4, array[0], 0.28f);
			Add(list, "Halo Carousel", EmpressElevatorEventKind.LanternOrbit, hostile: false, 7.9f, 14, 1f, 0.48f, 5, array[1], 0.24f);
			Add(list, "Prism Garden", EmpressElevatorEventKind.PrismGarden, hostile: false, 6.9f, 8, 0.82f, 0.34f, 3, array[1], 0.36f);
			Add(list, "Rainbow Terrarium", EmpressElevatorEventKind.PrismGarden, hostile: false, 7.3f, 10, 0.9f, 0.38f, 4, array[0], 0.33f);
			Add(list, "Glass Meadow", EmpressElevatorEventKind.PrismGarden, hostile: false, 7.7f, 12, 0.98f, 0.42f, 5, array[3], 0.3f);
			Add(list, "Soft Refraction", EmpressElevatorEventKind.PrismGarden, hostile: false, 8.2f, 14, 1.08f, 0.46f, 6, array[4], 0.27f);
			Add(list, "Dance Floor", EmpressElevatorEventKind.SpotlightParade, hostile: false, 6.4f, 4, 0.96f, 0.2f, 2, array[0], 0.26f);
			Add(list, "Star Walk", EmpressElevatorEventKind.SpotlightParade, hostile: false, 6.9f, 5, 1.05f, 0.22f, 3, array[1], 0.26f);
			Add(list, "Idol Runway", EmpressElevatorEventKind.SpotlightParade, hostile: false, 7.4f, 6, 1.12f, 0.24f, 4, array[2], 0.26f);
			Add(list, "Fever Show", EmpressElevatorEventKind.SpotlightParade, hostile: false, 7.9f, 7, 1.18f, 0.26f, 5, array[4], 0.24f);
			Add(list, "Heart Parade", EmpressElevatorEventKind.HeartPageant, hostile: false, 6.7f, 8, 0.78f, 0.18f, 4, array[0], 0.31f);
			Add(list, "Sweet Riot", EmpressElevatorEventKind.HeartPageant, hostile: false, 7.1f, 10, 0.86f, 0.2f, 5, array[4], 0.29f);
			Add(list, "Pink Oath", EmpressElevatorEventKind.HeartPageant, hostile: false, 7.6f, 12, 0.92f, 0.22f, 6, array[2], 0.32f);
			Add(list, "Crush Shower", EmpressElevatorEventKind.HeartPageant, hostile: false, 8f, 14, 1.02f, 0.24f, 7, array[1], 0.28f);
			Add(list, "Gift Pulse", EmpressElevatorEventKind.GiftPulse, hostile: false, 6.5f, 4, 0.82f, 0.24f, 6, array[2], 0.3f);
			Add(list, "Prize Storm", EmpressElevatorEventKind.GiftPulse, hostile: false, 7f, 5, 0.9f, 0.26f, 7, array[3], 0.27f);
			Add(list, "Bonus Hug", EmpressElevatorEventKind.GiftPulse, hostile: false, 7.4f, 6, 0.98f, 0.28f, 8, array[0], 0.32f);
			Add(list, "Lucky Package", EmpressElevatorEventKind.GiftPulse, hostile: false, 7.8f, 7, 1.05f, 0.3f, 9, array[1], 0.31f);
			Add(list, "Care Crate", EmpressElevatorEventKind.GiftPulse, hostile: false, 8.2f, 8, 1.12f, 0.32f, 10, array[4], 0.28f);
			Add(list, "Clockwise Service", EmpressElevatorEventKind.SoloErrand, hostile: false, 16.2f, 4, 0.92f, 0.34f, 5, array[3], 0.34f);
			Add(list, "Kneel At The Shrine", EmpressElevatorEventKind.SoloErrand, hostile: false, 16.8f, 1, 0.98f, 0.36f, 6, array[4], 0.3f);
			Add(list, "Touch The Choir", EmpressElevatorEventKind.SoloErrand, hostile: false, 17.1f, 3, 1.04f, 0.38f, 7, array[1], 0.31f);
			Add(list, "Gate Sprint", EmpressElevatorEventKind.SoloErrand, hostile: false, 17.5f, 3, 1.1f, 0.4f, 8, array[2], 0.29f);
			Add(list, "Center Stage", EmpressElevatorEventKind.TeamTrial, hostile: false, 7.2f, 1, 0.72f, 0.22f, 1, array[1], 0.3f);
			Add(list, "Corner Toast", EmpressElevatorEventKind.TeamTrial, hostile: false, 7.6f, 4, 0.82f, 0.24f, 2, array[0], 0.34f);
			Add(list, "Crouch Choir", EmpressElevatorEventKind.TeamTrial, hostile: false, 8.1f, 1, 0.9f, 0.26f, 3, array[3], 0.28f);
			Add(list, "Jump Jubilee", EmpressElevatorEventKind.TeamTrial, hostile: false, 8.6f, 1, 0.98f, 0.28f, 4, array[4], 0.25f);
			Add(list, "Button Darling", EmpressElevatorEventKind.SoloErrand, hostile: false, 15.5f, 1, 0.9f, 0.34f, 1, array[4], 0.36f);
			Add(list, "Order Service", EmpressElevatorEventKind.SoloErrand, hostile: false, 16.5f, 3, 0.96f, 0.38f, 2, array[1], 0.32f);
			Add(list, "Jump Audit", EmpressElevatorEventKind.SoloErrand, hostile: false, 15.8f, 5, 1.02f, 0.42f, 3, array[3], 0.3f);
			Add(list, "Touch And Return", EmpressElevatorEventKind.SoloErrand, hostile: false, 16.8f, 1, 1.06f, 0.46f, 4, array[0], 0.28f);
			Add(list, "Lucky Rain", EmpressElevatorEventKind.TreasureDrizzle, hostile: false, 6.7f, 9, 0.92f, 0.16f, 4, array[2], 0.24f);
			Add(list, "Cash Shower", EmpressElevatorEventKind.TreasureDrizzle, hostile: false, 7.1f, 11, 0.98f, 0.18f, 5, array[4], 0.22f);
			Add(list, "Golden Drizzle", EmpressElevatorEventKind.TreasureDrizzle, hostile: false, 7.6f, 13, 1.05f, 0.2f, 6, array[2], 0.2f);
			Add(list, "Tip Storm", EmpressElevatorEventKind.TreasureDrizzle, hostile: false, 8f, 15, 1.1f, 0.22f, 7, array[1], 0.24f);
			Add(list, "Jackpot Sprinkles", EmpressElevatorEventKind.TreasureDrizzle, hostile: false, 8.4f, 17, 1.18f, 0.24f, 8, array[3], 0.22f);
			Add(list, "Moon Bounce", EmpressElevatorEventKind.MoonBounce, hostile: false, 6.8f, 6, 0.76f, 0.28f, 4, array[1], 0.28f);
			Add(list, "Soft Orbit", EmpressElevatorEventKind.MoonBounce, hostile: false, 7.2f, 7, 0.84f, 0.3f, 5, array[4], 0.26f);
			Add(list, "Bunny Hop", EmpressElevatorEventKind.MoonBounce, hostile: false, 7.7f, 8, 0.92f, 0.32f, 6, array[0], 0.3f);
			Add(list, "Low Gravity Date", EmpressElevatorEventKind.MoonBounce, hostile: false, 8.1f, 9, 1f, 0.34f, 7, array[2], 0.24f);
			Add(list, "Red Light Green Light", EmpressElevatorEventKind.DirectiveTrial, hostile: true, 7.6f, 1, 1.02f, 0.14f, 1, array2[0], 0.18f);
			Add(list, "Crouch Or Cry", EmpressElevatorEventKind.DirectiveTrial, hostile: true, 7.9f, 1, 1.1f, 0.16f, 2, array2[3], 0.2f);
			Add(list, "Jump Tax", EmpressElevatorEventKind.DirectiveTrial, hostile: true, 8.3f, 1, 1.18f, 0.18f, 3, array2[1], 0.22f);
			Add(list, "Center Is Lava", EmpressElevatorEventKind.DirectiveTrial, hostile: true, 8.8f, 1, 1.28f, 0.2f, 4, array2[4], 0.18f);
			Add(list, "Razor Lanes", EmpressElevatorEventKind.RollingOrbs, hostile: true, 7.2f, 4, 1.1f, 0.38f, 13, array2[0], 0.18f);
			Add(list, "Bowling Hate", EmpressElevatorEventKind.RollingOrbs, hostile: true, 7.6f, 5, 1.18f, 0.42f, 14, array2[1], 0.2f);
			Add(list, "Hallway Grinder", EmpressElevatorEventKind.RollingOrbs, hostile: true, 8f, 6, 1.26f, 0.46f, 15, array2[3], 0.22f);
			Add(list, "Pinball Funeral", EmpressElevatorEventKind.RollingOrbs, hostile: true, 8.4f, 7, 1.34f, 0.5f, 16, array2[2], 0.2f);
			Add(list, "Panic Ceiling", EmpressElevatorEventKind.CeilingPress, hostile: true, 7f, 1, 0.86f, 0.92f, 16, array2[4], 0.18f);
			Add(list, "Flatlined Roof", EmpressElevatorEventKind.CeilingPress, hostile: true, 7.6f, 1, 0.94f, 0.98f, 18, array2[0], 0.18f);
			Add(list, "Bad Compression", EmpressElevatorEventKind.CeilingPress, hostile: true, 8.2f, 1, 1.02f, 1.04f, 20, array2[3], 0.2f);
			Add(list, "Needle Carpet", EmpressElevatorEventKind.SpikeLattice, hostile: true, 7.1f, 7, 0.96f, 0.18f, 11, array2[0], 0.2f);
			Add(list, "Mean Porcupine", EmpressElevatorEventKind.SpikeLattice, hostile: true, 7.6f, 8, 1.04f, 0.2f, 12, array2[1], 0.18f);
			Add(list, "Floor Betrayal", EmpressElevatorEventKind.SpikeLattice, hostile: true, 8f, 9, 1.12f, 0.22f, 14, array2[2], 0.2f);
			Add(list, "Puncture Garden", EmpressElevatorEventKind.SpikeLattice, hostile: true, 8.5f, 10, 1.2f, 0.24f, 15, array2[4], 0.18f);
			Add(list, "Do Not Turn Around", EmpressElevatorEventKind.DoNotTurnAround, hostile: true, 9.4f, 4, 0.96f, 0.14f, 12, array2[3], 0.2f);
			Add(list, "Eyes Front", EmpressElevatorEventKind.DoNotTurnAround, hostile: true, 9.9f, 5, 1.04f, 0.16f, 13, array2[1], 0.18f);
			Add(list, "Face The Door", EmpressElevatorEventKind.DoNotTurnAround, hostile: true, 10.3f, 6, 1.12f, 0.18f, 14, array2[0], 0.2f);
			Add(list, "Wrong Way Darling", EmpressElevatorEventKind.DoNotTurnAround, hostile: true, 10.8f, 7, 1.2f, 0.2f, 16, array2[2], 0.2f);
			Add(list, "Eyeball Chase", EmpressElevatorEventKind.SeekerOrbs, hostile: true, 7.2f, 4, 0.94f, 0.22f, 10, array2[2], 0.22f);
			Add(list, "Red Followers", EmpressElevatorEventKind.SeekerOrbs, hostile: true, 7.7f, 5, 1.02f, 0.24f, 12, array2[0], 0.2f);
			Add(list, "Hungry Satellites", EmpressElevatorEventKind.SeekerOrbs, hostile: true, 8.1f, 6, 1.1f, 0.26f, 13, array2[3], 0.18f);
			Add(list, "Personal Space Denied", EmpressElevatorEventKind.SeekerOrbs, hostile: true, 8.6f, 7, 1.18f, 0.28f, 15, array2[4], 0.2f);
			Add(list, "Bounce House From Hell", EmpressElevatorEventKind.BounceBombs, hostile: true, 7.2f, 5, 1.08f, 0.22f, 11, array2[1], 0.2f);
			Add(list, "Bruise Parade", EmpressElevatorEventKind.BounceBombs, hostile: true, 7.7f, 6, 1.16f, 0.24f, 12, array2[0], 0.2f);
			Add(list, "Angry Marbles", EmpressElevatorEventKind.BounceBombs, hostile: true, 8.1f, 7, 1.24f, 0.26f, 14, array2[3], 0.18f);
			Add(list, "Pop Quiz Bombs", EmpressElevatorEventKind.BounceBombs, hostile: true, 8.6f, 8, 1.32f, 0.28f, 15, array2[2], 0.22f);
			Add(list, "Saw Etiquette", EmpressElevatorEventKind.SawSweep, hostile: true, 7.1f, 2, 0.98f, 0.72f, 15, array2[4], 0.18f);
			Add(list, "Blender Waltz", EmpressElevatorEventKind.SawSweep, hostile: true, 7.6f, 3, 1.06f, 0.78f, 16, array2[1], 0.18f);
			Add(list, "Spin Divorce", EmpressElevatorEventKind.SawSweep, hostile: true, 8f, 4, 1.14f, 0.84f, 17, array2[0], 0.18f);
			Add(list, "Razor Partner Dance", EmpressElevatorEventKind.SawSweep, hostile: true, 8.5f, 4, 1.22f, 0.9f, 18, array2[3], 0.2f);
			Add(list, "Meteor Rent", EmpressElevatorEventKind.MeteorDrop, hostile: true, 7.2f, 6, 1f, 0.2f, 13, array2[4], 0.2f);
			Add(list, "Ceiling Refund", EmpressElevatorEventKind.MeteorDrop, hostile: true, 7.7f, 8, 1.08f, 0.22f, 14, array2[1], 0.18f);
			Add(list, "Falling Problems", EmpressElevatorEventKind.MeteorDrop, hostile: true, 8.1f, 10, 1.16f, 0.24f, 15, array2[0], 0.22f);
			Add(list, "Angry Hail", EmpressElevatorEventKind.MeteorDrop, hostile: true, 8.7f, 12, 1.24f, 0.26f, 17, array2[2], 0.18f);
			Add(list, "Wall Tax", EmpressElevatorEventKind.PulseWall, hostile: true, 7f, 3, 0.98f, 0.3f, 12, array2[3], 0.2f);
			Add(list, "Closing Time", EmpressElevatorEventKind.PulseWall, hostile: true, 7.5f, 4, 1.06f, 0.32f, 13, array2[0], 0.2f);
			Add(list, "Hall Pass Denied", EmpressElevatorEventKind.PulseWall, hostile: true, 8f, 5, 1.14f, 0.34f, 14, array2[1], 0.18f);
			Add(list, "Compression Waves", EmpressElevatorEventKind.PulseWall, hostile: true, 8.5f, 6, 1.22f, 0.36f, 16, array2[4], 0.2f);
			Add(list, "Freeze Tag", EmpressElevatorEventKind.FreezeTag, hostile: true, 7f, 10, 0.84f, 0.16f, 9, array2[1], 0.22f);
			Add(list, "Statue Test", EmpressElevatorEventKind.FreezeTag, hostile: true, 7.5f, 12, 0.9f, 0.18f, 10, array2[3], 0.2f);
			Add(list, "Museum Punishment", EmpressElevatorEventKind.FreezeTag, hostile: true, 8f, 14, 0.98f, 0.2f, 12, array2[0], 0.22f);
			Add(list, "Stillness Debt", EmpressElevatorEventKind.FreezeTag, hostile: true, 8.6f, 16, 1.06f, 0.22f, 13, array2[2], 0.18f);
			Add(list, "Marathon Panic", EmpressElevatorEventKind.MarathonPanic, hostile: true, 7.1f, 6, 1.06f, 0.2f, 10, array2[4], 0.18f);
			Add(list, "Cardio Or Die", EmpressElevatorEventKind.MarathonPanic, hostile: true, 7.6f, 7, 1.14f, 0.22f, 11, array2[0], 0.2f);
			Add(list, "Treadmill Lawsuit", EmpressElevatorEventKind.MarathonPanic, hostile: true, 8.1f, 8, 1.22f, 0.24f, 12, array2[1], 0.18f);
			Add(list, "Keep Moving Darling", EmpressElevatorEventKind.MarathonPanic, hostile: true, 8.7f, 9, 1.3f, 0.26f, 14, array2[3], 0.2f);
			Add(list, "Gravity Flip", EmpressElevatorEventKind.GravityFlip, hostile: true, 7.2f, 6, 0.84f, 0.24f, 9, array2[3], 0.22f);
			Add(list, "Ceiling Date", EmpressElevatorEventKind.GravityFlip, hostile: true, 7.9f, 7, 0.92f, 0.26f, 10, array2[0], 0.2f);
			Add(list, "Reverse Elevator Law", EmpressElevatorEventKind.GravityFlip, hostile: true, 8.6f, 8, 1f, 0.28f, 12, array2[2], 0.18f);
			return list;
		}

		private static void Add(List<EmpressElevatorFloorDefinition> definitions, string name, EmpressElevatorEventKind kind, bool hostile, float duration, int count, float speed, float size, int power, Color primary, float secondaryBlend)
		{
			//IL_0001: 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_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: 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)
			Color secondaryColor = Color.Lerp(primary, hostile ? Color.white : Color.black, secondaryBlend);
			definitions.Add(new EmpressElevatorFloorDefinition(definitions.Count, name, kind, hostile, duration, count, speed, size, power, primary, secondaryColor));
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("Empress.REPO.TheElevator", "Empress The Elevator", "1.0.0")]
	public sealed class EmpressTheElevatorPlugin : BaseUnityPlugin
	{
		internal const string PluginGuid = "Empress.REPO.TheElevator";

		internal const string PluginName = "Empress The Elevator";

		internal const string PluginVersion = "1.0.0";

		internal const string ElevatorLevelName = "Level - The Elevator";

		internal const float MoveDurationSeconds = 10f;

		internal const float DoorTransitionSeconds = 1.35f;

		internal const float DoorCueLeadSeconds = 0.56f;

		internal const float RollDurationSeconds = 1.6f;

		internal const float RewardBannerSeconds = 2.6f;

		private static Harmony? _harmony;

		private static ManualLogSource? _log;

		private static EmpressTheElevatorRuntime? _runtime;

		private static Level? _elevatorLevel;

		private static ConfigEntry<bool>? _forceElevatorLevel;

		private static Sprite? _loadingSpriteOrange;

		private static Sprite? _loadingSpritePink;

		private static Sprite? _loadingSpriteDark;

		private const byte SceneSyncEventCode = 180;

		private const byte FloorRevealEventCode = 181;

		private const byte FloorRewardEventCode = 182;

		private const byte FloorSkipEventCode = 183;

		private static bool _photonEventsHooked;

		private static readonly FieldRef<LevelContent, Level> LevelContentLevelRef = AccessTools.FieldRefAccess<LevelContent, Level>("_level");

		private static readonly FieldRef<LevelContent, List<GameObject>> LevelContentStartRoomsRef = AccessTools.FieldRefAccess<LevelContent, List<GameObject>>("_startRooms");

		private static readonly FieldRef<LevelContent, List<GameObject>> LevelContentModulesNormal1Ref = AccessTools.FieldRefAccess<LevelContent, List<GameObject>>("_modulesNormal1");

		private static readonly FieldRef<LevelContent, List<GameObject>> LevelContentModulesNormal2Ref = AccessTools.FieldRefAccess<LevelContent, List<GameObject>>("_modulesNormal2");

		private static readonly FieldRef<LevelContent, List<GameObject>> LevelContentModulesNormal3Ref = AccessTools.FieldRefAccess<LevelContent, List<GameObject>>("_modulesNormal3");

		private static readonly FieldRef<LevelContent, List<GameObject>> LevelContentModulesPassage1Ref = AccessTools.FieldRefAccess<LevelContent, List<GameObject>>("_modulesPassage1");

		private static readonly FieldRef<LevelContent, List<GameObject>> LevelContentModulesPassage2Ref = AccessTools.FieldRefAccess<LevelContent, List<GameObject>>("_modulesPassage2");

		private static readonly FieldRef<LevelContent, List<GameObject>> LevelContentModulesPassage3Ref = AccessTools.FieldRefAccess<LevelContent, List<GameObject>>("_modulesPassage3");

		private static readonly FieldRef<LevelContent, List<GameObject>> LevelContentModulesDeadEnd1Ref = AccessTools.FieldRefAccess<LevelContent, List<GameObject>>("_modulesDeadEnd1");

		private static readonly FieldRef<LevelContent, List<GameObject>> LevelContentModulesDeadEnd2Ref = AccessTools.FieldRefAccess<LevelContent, List<GameObject>>("_modulesDeadEnd2");

		private static readonly FieldRef<LevelContent, List<GameObject>> LevelContentModulesDeadEnd3Ref = AccessTools.FieldRefAccess<LevelContent, List<GameObject>>("_modulesDeadEnd3");

		private static readonly FieldRef<LevelContent, List<GameObject>> LevelContentModulesExtraction1Ref = AccessTools.FieldRefAccess<LevelContent, List<GameObject>>("_modulesExtraction1");

		private static readonly FieldRef<LevelContent, List<GameObject>> LevelContentModulesExtraction2Ref = AccessTools.FieldRefAccess<LevelContent, List<GameObject>>("_modulesExtraction2");

		private static readonly FieldRef<LevelContent, List<GameObject>> LevelContentModulesExtraction3Ref = AccessTools.FieldRefAccess<LevelContent, List<GameObject>>("_modulesExtraction3");

		private static readonly FieldRef<LevelContent, GameObject?> LevelContentConnectObjectRef = AccessTools.FieldRefAccess<LevelContent, GameObject>("_connectObject");

		private static readonly FieldRef<LevelContent, GameObject?> LevelContentBlockObjectRef = AccessTools.FieldRefAccess<LevelContent, GameObject>("_blockObject");

		internal static ManualLogSource Log => _log;

		internal static Level ElevatorLevel => _elevatorLevel;

		internal static IReadOnlyList<EmpressElevatorFloorDefinition> FloorDefinitions { get; } = EmpressElevatorFloorCatalog.Build();


		internal static string PluginFolderPath => Path.GetDirectoryName(typeof(EmpressTheElevatorPlugin).Assembly.Location) ?? Paths.PluginPath;

		private void Awake()
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Expected O, but got Unknown
			_log = ((BaseUnityPlugin)this).Logger;
			_forceElevatorLevel = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "ForceElevatorLevel", false, "Forces every real run level to load the Empress elevator level so you can test it without waiting for random selection.");
			EnsureElevatorLevelRegistered();
			_harmony = new Harmony("Empress.REPO.TheElevator");
			_harmony.PatchAll(typeof(EmpressTheElevatorPlugin).Assembly);
			EnsureRuntime();
		}

		private void OnDestroy()
		{
			RemovePhotonEventHook();
		}

		internal static bool IsElevatorLevel(Level? level)
		{
			return (Object)(object)level != (Object)null && ((Object)level).name == "Level - The Elevator";
		}

		internal static bool ShouldForceElevatorLevel()
		{
			return _forceElevatorLevel?.Value ?? false;
		}

		internal static EmpressTheElevatorRuntime EnsureRuntime()
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Expected O, but got Unknown
			if (Object.op_Implicit((Object)(object)_runtime))
			{
				return _runtime;
			}
			GameObject val = new GameObject("Empress The Elevator Runtime");
			Object.DontDestroyOnLoad((Object)(object)val);
			_runtime = val.AddComponent<EmpressTheElevatorRuntime>();
			return _runtime;
		}

		internal static bool TryGetCabinRecoveryPose(out Vector3 position, out Quaternion rotation)
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)_runtime != (Object)null && _runtime.TryGetCabinRecoveryPose(out position, out rotation))
			{
				return true;
			}
			position = default(Vector3);
			rotation = Quaternion.identity;
			return false;
		}

		private static void EnsureElevatorLevelRegistered()
		{
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: 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_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)_elevatorLevel))
			{
				Level val = ScriptableObject.CreateInstance<Level>();
				((Object)val).name = "Level - The Elevator";
				val.ResourcePath = "Empress/TheElevator";
				val.NarrativeName = "The Elevator";
				val.ModuleAmount = 0;
				val.PassageMaxAmount = 0;
				val.HasEnemies = false;
				LevelValuables val2 = ScriptableObject.CreateInstance<LevelValuables>();
				((Object)val2).name = "Valuables - Empress Elevator";
				val2.tiny = new List<PrefabRef>();
				val2.small = new List<PrefabRef>();
				val2.medium = new List<PrefabRef>();
				val2.big = new List<PrefabRef>();
				val2.wide = new List<PrefabRef>();
				val2.tall = new List<PrefabRef>();
				val2.veryTall = new List<PrefabRef>();
				val.ValuablePresets = new List<LevelValuables> { val2 };
				val.AmbiencePresets = new List<LevelAmbience>();
				val.LoadingGraphic01 = GetOrCreateLoadingSpriteOrange();
				val.LoadingGraphic02 = GetOrCreateLoadingSpritePink();
				val.LoadingGraphic03 = GetOrCreateLoadingSpriteDark();
				val.FogColor = new Color(0.03f, 0.03f, 0.05f);
				val.FogStartDistance = 0f;
				val.FogEndDistance = 40f;
				val.AmbientColor = new Color(0.23f, 0.22f, 0.28f);
				val.AmbientColorAdaptation = new Color(0.12f, 0.11f, 0.16f);
				val.ColorTemperature = -10f;
				val.ColorFilter = new Color(1f, 0.94f, 0.88f, 1f);
				val.BloomIntensity = 5.5f;
				val.BloomThreshold = 0.82f;
				val.VignetteColor = new Color(0.05f, 0.02f, 0.02f, 1f);
				val.VignetteIntensity = 0.28f;
				val.VignetteSmoothness = 0.76f;
				val.DiscordIcon = "level";
				LevelContent val3 = ScriptableObject.CreateInstance<LevelContent>();
				((Object)val3).name = "Empress Elevator Level Content";
				LevelContentLevelRef.Invoke(val3) = val;
				LevelContentStartRoomsRef.Invoke(val3) = new List<GameObject>();
				LevelContentModulesNormal1Ref.Invoke(val3) = new List<GameObject>();
				LevelContentModulesNormal2Ref.Invoke(val3) = new List<GameObject>();
				LevelContentModulesNormal3Ref.Invoke(val3) = new List<GameObject>();
				LevelContentModulesPassage1Ref.Invoke(val3) = new List<GameObject>();
				LevelContentModulesPassage2Ref.Invoke(val3) = new List<GameObject>();
				LevelContentModulesPassage3Ref.Invoke(val3) = new List<GameObject>();
				LevelContentModulesDeadEnd1Ref.Invoke(val3) = new List<GameObject>();
				LevelContentModulesDeadEnd2Ref.Invoke(val3) = new List<GameObject>();
				LevelContentModulesDeadEnd3Ref.Invoke(val3) = new List<GameObject>();
				LevelContentModulesExtraction1Ref.Invoke(val3) = new List<GameObject>();
				LevelContentModulesExtraction2Ref.Invoke(val3) = new List<GameObject>();
				LevelContentModulesExtraction3Ref.Invoke(val3) = new List<GameObject>();
				LevelContentConnectObjectRef.Invoke(val3) = null;
				LevelContentBlockObjectRef.Invoke(val3) = null;
				Levels.RegisterLevel(val3);
				_elevatorLevel = val;
			}
		}

		internal static void EnsurePhotonEventHooked()
		{
			if (!_photonEventsHooked)
			{
				LoadBalancingClient networkingClient = PhotonNetwork.NetworkingClient;
				if (networkingClient != null)
				{
					networkingClient.EventReceived -= OnPhotonEvent;
					networkingClient.EventReceived += OnPhotonEvent;
					_photonEventsHooked = true;
				}
			}
		}

		internal static void RemovePhotonEventHook()
		{
			if (_photonEventsHooked)
			{
				LoadBalancingClient networkingClient = PhotonNetwork.NetworkingClient;
				if (networkingClient != null)
				{
					networkingClient.EventReceived -= OnPhotonEvent;
				}
				_photonEventsHooked = false;
			}
		}

		private static void OnPhotonEvent(EventData photonEvent)
		{
			switch (photonEvent.Code)
			{
			case 180:
				OnSceneSyncEvent(photonEvent);
				break;
			case 181:
				OnFloorRevealEvent(photonEvent);
				break;
			case 182:
				OnFloorRewardEvent(photonEvent);
				break;
			case 183:
				OnFloorSkipEvent(photonEvent);
				break;
			}
		}

		private static void OnSceneSyncEvent(EventData photonEvent)
		{
			if (!(photonEvent.CustomData is object[] array) || array.Length < 2)
			{
				return;
			}
			object obj = array[0];
			if (obj is int)
			{
				int runToken = (int)obj;
				obj = array[1];
				int runSeed = default(int);
				int num;
				if (obj is int)
				{
					runSeed = (int)obj;
					num = 1;
				}
				else
				{
					num = 0;
				}
				if (num != 0)
				{
					EnsureRuntime().ReceiveSceneSync(runToken, runSeed);
				}
			}
		}

		private static void OnFloorRevealEvent(EventData photonEvent)
		{
			if (!(photonEvent.CustomData is object[] array) || array.Length < 3)
			{
				return;
			}
			object obj = array[0];
			if (!(obj is int))
			{
				return;
			}
			int runToken = (int)obj;
			obj = array[1];
			if (obj is int)
			{
				int floorNumber = (int)obj;
				obj = array[2];
				int definitionIndex = default(int);
				int num;
				if (obj is int)
				{
					definitionIndex = (int)obj;
					num = 1;
				}
				else
				{
					num = 0;
				}
				if (num != 0)
				{
					EnsureRuntime().ReceiveFloorReveal(runToken, floorNumber, definitionIndex);
				}
			}
		}

		private static void OnFloorRewardEvent(EventData photonEvent)
		{
			if (!(photonEvent.CustomData is object[] array) || array.Length < 2)
			{
				return;
			}
			object obj = array[0];
			if (obj is int)
			{
				int runToken = (int)obj;
				if (array[1] is string rewardText)
				{
					EnsureRuntime().ReceiveFloorReward(runToken, rewardText);
				}
			}
		}

		private static void OnFloorSkipEvent(EventData photonEvent)
		{
			if (!(photonEvent.CustomData is object[] array) || array.Length < 2)
			{
				return;
			}
			object obj = array[0];
			if (!(obj is int))
			{
				return;
			}
			int runToken = (int)obj;
			obj = array[1];
			bool flag = default(bool);
			int num;
			if (obj is bool)
			{
				flag = (bool)obj;
				num = 1;
			}
			else
			{
				num = 0;
			}
			if (num != 0)
			{
				if (flag)
				{
					EnsureRuntime().ReceiveEmergencySkip(runToken);
				}
				else if (SemiFunc.IsMasterClientOrSingleplayer())
				{
					BroadcastEmergencySkip(runToken);
				}
			}
		}

		internal static void RaiseSceneSync(int runToken, int runSeed)
		{
			EnsureRuntime().ReceiveSceneSync(runToken, runSeed);
			if (SemiFunc.IsMultiplayer() && PhotonNetwork.InRoom)
			{
				RaisePhotonEvent(180, new object[2] { runToken, runSeed }, (ReceiverGroup)0);
			}
		}

		internal static void RaiseFloorReveal(int runToken, int floorNumber, int definitionIndex)
		{
			EnsureRuntime().ReceiveFloorReveal(runToken, floorNumber, definitionIndex);
			if (SemiFunc.IsMultiplayer() && PhotonNetwork.InRoom)
			{
				RaisePhotonEvent(181, new object[3] { runToken, floorNumber, definitionIndex }, (ReceiverGroup)0);
			}
		}

		internal static void RaiseFloorReward(int runToken, string rewardText)
		{
			EnsureRuntime().ReceiveFloorReward(runToken, rewardText);
			if (SemiFunc.IsMultiplayer() && PhotonNetwork.InRoom)
			{
				RaisePhotonEvent(182, new object[2] { runToken, rewardText }, (ReceiverGroup)0);
			}
		}

		internal static void RequestEmergencySkip(int runToken)
		{
			if (SemiFunc.IsMasterClientOrSingleplayer())
			{
				BroadcastEmergencySkip(runToken);
			}
			else if (SemiFunc.IsMultiplayer() && PhotonNetwork.InRoom)
			{
				RaisePhotonEvent(183, new object[2] { runToken, false }, (ReceiverGroup)2);
			}
		}

		private static void BroadcastEmergencySkip(int runToken)
		{
			EnsureRuntime().ReceiveEmergencySkip(runToken);
			if (SemiFunc.IsMultiplayer() && PhotonNetwork.InRoom)
			{
				RaisePhotonEvent(183, new object[2] { runToken, true }, (ReceiverGroup)0);
			}
		}

		private static void RaisePhotonEvent(byte eventCode, object[] payload, ReceiverGroup receivers)
		{
			//IL_0007: 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_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Expected O, but got Unknown
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			EnsurePhotonEventHooked();
			RaiseEventOptions val = new RaiseEventOptions
			{
				Receivers = receivers
			};
			PhotonNetwork.RaiseEvent(eventCode, (object)payload, val, SendOptions.SendReliable);
		}

		private static Sprite GetOrCreateLoadingSpriteOrange()
		{
			//IL_0019: 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)
			return _loadingSpriteOrange ?? (_loadingSpriteOrange = CreateLoadingSprite(new Color(0.93f, 0.47f, 0.18f), new Color(0.18f, 0.07f, 0.03f)));
		}

		private static Sprite GetOrCreateLoadingSpritePink()
		{
			//IL_0019: 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)
			return _loadingSpritePink ?? (_loadingSpritePink = CreateLoadingSprite(new Color(1f, 0.5f, 0.73f), new Color(0.14f, 0.05f, 0.08f)));
		}

		private static Sprite GetOrCreateLoadingSpriteDark()
		{
			//IL_0019: 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)
			return _loadingSpriteDark ?? (_loadingSpriteDark = CreateLoadingSprite(new Color(0.22f, 0.24f, 0.32f), new Color(0.04f, 0.05f, 0.08f)));
		}

		private static Sprite CreateLoadingSprite(Color topColor, Color bottomColor)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			Texture2D val = new Texture2D(32, 32, (TextureFormat)4, false);
			((Texture)val).wrapMode = (TextureWrapMode)1;
			for (int i = 0; i < ((Texture)val).height; i++)
			{
				float num = (float)i / (float)(((Texture)val).height - 1);
				Color val2 = Color.Lerp(bottomColor, topColor, num);
				for (int j = 0; j < ((Texture)val).width; j++)
				{
					val.SetPixel(j, i, val2);
				}
			}
			val.Apply(false, false);
			return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f), 32f);
		}
	}
	[HarmonyPatch(typeof(LevelGenerator), "Generate")]
	internal static class EmpressTheElevatorPatchLevelGeneratorGenerate
	{
		private static bool Prefix(LevelGenerator __instance, ref IEnumerator __result)
		{
			if (!EmpressTheElevatorPlugin.IsElevatorLevel(RunManager.instance?.levelCurrent))
			{
				return true;
			}
			__result = EmpressTheElevatorPlugin.EnsureRuntime().GenerateElevatorLevel(__instance);
			return false;
		}
	}
	[HarmonyPatch(typeof(RunManager), "SetRunLevel")]
	internal static class EmpressTheElevatorPatchRunManagerSetRunLevel
	{
		private static void Postfix(RunManager __instance)
		{
			if (EmpressTheElevatorPlugin.ShouldForceElevatorLevel())
			{
				__instance.levelCurrent = EmpressTheElevatorPlugin.ElevatorLevel;
			}
		}
	}
	[HarmonyPatch(typeof(LevelPoint), "NavMeshCheck")]
	internal static class EmpressTheElevatorPatchLevelPointNavMeshCheck
	{
		private static bool Prefix(ref IEnumerator __result)
		{
			if (!EmpressTheElevatorPlugin.IsElevatorLevel(RunManager.instance?.levelCurrent))
			{
				return true;
			}
			__result = EmpressTheElevatorRuntime.EmptyCoroutine();
			return false;
		}
	}
	[HarmonyPatch(typeof(EnvironmentDirector), "Setup")]
	internal static class EmpressTheElevatorPatchEnvironmentDirectorSetup
	{
		private static bool Prefix(EnvironmentDirector __instance)
		{
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			if (!EmpressTheElevatorPlugin.IsElevatorLevel(Object.op_Implicit((Object)(object)LevelGenerator.Instance) ? LevelGenerator.Instance.Level : null))
			{
				return true;
			}
			RenderSettings.fogColor = LevelGenerator.Instance.Level.FogColor;
			RenderSettings.fogStartDistance = LevelGenerator.Instance.Level.FogStartDistance;
			RenderSettings.fogEndDistance = LevelGenerator.Instance.Level.FogEndDistance;
			if (!Object.op_Implicit((Object)(object)__instance.MainCamera))
			{
				__instance.MainCamera = Camera.main;
			}
			if (Object.op_Implicit((Object)(object)__instance.MainCamera))
			{
				__instance.MainCamera.backgroundColor = RenderSettings.fogColor;
				__instance.MainCamera.farClipPlane = RenderSettings.fogEndDistance + 1f;
			}
			__instance.DarkAdaptationLerp = 0.1f;
			__instance.SetupDone = true;
			return false;
		}
	}
	[HarmonyPatch(typeof(LoadingUI), "LevelAnimationStart")]
	internal static class EmpressTheElevatorPatchLoadingUiLevelAnimationStart
	{
		private static void Postfix(LoadingUI __instance)
		{
			if (EmpressTheElevatorPlugin.IsElevatorLevel(Object.op_Implicit((Object)(object)LevelGenerator.Instance) ? LevelGenerator.Instance.Level : null) && (Object)(object)__instance.levelNameText != (Object)null)
			{
				((TMP_Text)__instance.levelNameText).text = "THE ELEVATOR";
			}
		}
	}
	[HarmonyPatch(typeof(ItemManager), "TurnOffIconLights")]
	internal static class EmpressTheElevatorPatchItemManagerTurnOffIconLights
	{
		private static bool Prefix(ItemManager __instance, ref IEnumerator __result)
		{
			if (!EmpressTheElevatorPlugin.IsElevatorLevel(RunManager.instance?.levelCurrent))
			{
				return true;
			}
			__result = SafeTurnOffIconLights(__instance);
			return false;
		}

		private static IEnumerator SafeTurnOffIconLights(ItemManager itemManager)
		{
			if ((Object)(object)itemManager.itemIconLights == (Object)null)
			{
				yield break;
			}
			if (SemiFunc.RunIsShop() || SemiFunc.MenuLevel())
			{
				itemManager.itemIconLights.SetActive(false);
				yield break;
			}
			while ((Object)(object)LevelGenerator.Instance == (Object)null || !LevelGenerator.Instance.Generated)
			{
				yield return (object)new WaitForSeconds(0.2f);
			}
			if (SemiFunc.RunIsArena())
			{
				itemManager.itemIconLights.SetActive(false);
				yield break;
			}
			while (true)
			{
				itemManager.spawnedItems.RemoveAll((ItemAttributes item) => (Object)(object)item == (Object)null);
				bool waitingOnIcons = false;
				foreach (ItemAttributes item2 in itemManager.spawnedItems)
				{
					if ((Object)(object)item2 != (Object)null && !item2.hasIcon)
					{
						waitingOnIcons = true;
						break;
					}
				}
				if (!waitingOnIcons)
				{
					break;
				}
				yield return (object)new WaitForSeconds(0.2f);
			}
			itemManager.itemIconLights.SetActive(false);
		}
	}
	[HarmonyPatch(typeof(PlayerDeathHead), "Update")]
	internal static class EmpressTheElevatorPatchPlayerDeathHeadUpdate
	{
		private static bool Prefix(PlayerDeathHead __instance)
		{
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: 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)
			if (!EmpressTheElevatorPlugin.IsElevatorLevel(RunManager.instance?.levelCurrent))
			{
				return true;
			}
			if (!__instance.triggered)
			{
				return true;
			}
			if ((Object)(object)__instance.physGrabObject == (Object)null || (Object)(object)__instance.playerAvatar == (Object)null)
			{
				return false;
			}
			if (!SemiFunc.IsMasterClientOrSingleplayer())
			{
				return true;
			}
			if ((Object)(object)__instance.roomVolumeCheck == (Object)null)
			{
				if (EmpressTheElevatorPlugin.TryGetCabinRecoveryPose(out var position, out var rotation))
				{
					__instance.physGrabObject.Teleport(position, rotation);
				}
				return false;
			}
			if (__instance.roomVolumeCheck.CurrentRooms.Count > 0)
			{
				return true;
			}
			if (EmpressTheElevatorPlugin.TryGetCabinRecoveryPose(out var position2, out var rotation2))
			{
				__instance.outsideLevelTimer = 0f;
				__instance.physGrabObject.Teleport(position2, rotation2);
			}
			return true;
		}
	}
	internal sealed class EmpressTheElevatorRuntime : MonoBehaviour
	{
		private const float CabinWidth = 10f;

		private const float CabinDepth = 8f;

		private const float CabinHeight = 5f;

		private const float CabinHazardMinX = -4.35f;

		private const float CabinHazardMaxX = 4.35f;

		private const float CabinHazardMinZ = -3.45f;

		private const float CabinHazardMaxZ = 3.45f;

		private const float ChamberDepth = 13f;

		private const float ChamberWidth = 12f;

		private const float ChamberHeight = 6f;

		private const float BarrierZ = 4.2f;

		private const float FrontDoorZ = 3.92f;

		private const float FloorThickness = 1f;

		private const float DamageTickInterval = 0.16f;

		private const float HealTickInterval = 1.25f;

		private const float EmergencySkipHoldSeconds = 10f;

		private const float RuleGraceSeconds = 4.5f;

		private const byte AudioXorKey = 90;

		private AudioSource? _movementLoopSource;

		private AudioSource? _oneShotSource;

		private AudioClip? _movementLoopClip;

		private AudioClip? _doorOpenClip;

		private bool _audioLoadRequested;

		private int _sceneHandle = -1;

		private EmpressElevatorSceneState? _scene;

		private bool _hasPendingSceneSync;

		private int _pendingRunToken;

		private int _pendingRunSeed;

		private readonly Dictionary<string, float> _effectCooldowns = new Dictionary<string, float>(StringComparer.Ordinal);

		private readonly Dictionary<string, Vector3> _ruleAnchors = new Dictionary<string, Vector3>(StringComparer.Ordinal);

		private readonly Dictionary<string, float> _ruleStillTimers = new Dictionary<string, float>(StringComparer.Ordinal);

		private float _skipHoldElapsed;

		private Font? _uiFont;

		private void Awake()
		{
			EnsureAudioSources();
			RequestAudioLoad();
		}

		private void Update()
		{
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Invalid comparison between Unknown and I4
			if (!EmpressTheElevatorPlugin.IsElevatorLevel(RunManager.instance?.levelCurrent))
			{
				EmpressTheElevatorPlugin.RemovePhotonEventHook();
			}
			HandleSceneTransition();
			UpdateAudioState();
			if (_scene == null)
			{
				_skipHoldElapsed = 0f;
				ResetLocalPlayerEventEffects();
				return;
			}
			UpdateDoorsAndHud();
			UpdateEmergencyButtonPrompt();
			UpdateActiveEvent();
			if (!_scene.HostLoopStarted && Object.op_Implicit((Object)(object)_scene.Generator) && _scene.Generator.Generated && (Object)(object)GameDirector.instance != (Object)null && (int)GameDirector.instance.currentState == 2 && SemiFunc.IsMasterClientOrSingleplayer())
			{
				_scene.HostLoopStarted = true;
				((MonoBehaviour)this).StartCoroutine(HostFloorLoop());
			}
		}

		private void OnDisable()
		{
			StopAudio();
			ClearSceneState();
		}

		private void EnsureAudioSources()
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Expected O, but got Unknown
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Expected O, but got Unknown
			if ((Object)(object)_movementLoopSource == (Object)null)
			{
				GameObject val = new GameObject("Empress Elevator Move Audio");
				val.transform.SetParent(((Component)this).transform, false);
				_movementLoopSource = val.AddComponent<AudioSource>();
				_movementLoopSource.loop = true;
				_movementLoopSource.playOnAwake = false;
				_movementLoopSource.spatialBlend = 0f;
				_movementLoopSource.volume = 0.45f;
			}
			if ((Object)(object)_oneShotSource == (Object)null)
			{
				GameObject val2 = new GameObject("Empress Elevator Cue Audio");
				val2.transform.SetParent(((Component)this).transform, false);
				_oneShotSource = val2.AddComponent<AudioSource>();
				_oneShotSource.loop = false;
				_oneShotSource.playOnAwake = false;
				_oneShotSource.spatialBlend = 0f;
				_oneShotSource.volume = 0.75f;
			}
		}

		private void RequestAudioLoad()
		{
			if (!_audioLoadRequested)
			{
				_audioLoadRequested = true;
				((MonoBehaviour)this).StartCoroutine(LoadAudioClipCoroutine("move", delegate(AudioClip clip)
				{
					_movementLoopClip = clip;
				}));
				((MonoBehaviour)this).StartCoroutine(LoadAudioClipCoroutine("Open", delegate(AudioClip clip)
				{
					_doorOpenClip = clip;
				}));
			}
		}

		private static string? ResolveAudioAssetPath(string fileName)
		{
			string text = Path.Combine(EmpressTheElevatorPlugin.PluginFolderPath, "Audio", fileName);
			if (File.Exists(text))
			{
				return text;
			}
			string text2 = Path.Combine(EmpressTheElevatorPlugin.PluginFolderPath, fileName);
			if (File.Exists(text2))
			{
				return text2;
			}
			return null;
		}

		private IEnumerator LoadAudioClipCoroutine(string assetStem, Action<AudioClip> onLoaded)
		{
			string resolvedPath = null;
			string xorPath = ResolveAudioAssetPath(assetStem + ".xorbin");
			if (xorPath != null)
			{
				string cacheDirectory = Path.Combine(Paths.CachePath, "EmpressTheElevator");
				Directory.CreateDirectory(cacheDirectory);
				string decodedPath = Path.Combine(cacheDirectory, assetStem + ".mp3");
				try
				{
					byte[] encoded = File.ReadAllBytes(xorPath);
					for (int i = 0; i < encoded.Length; i++)
					{
						encoded[i] ^= 90;
					}
					File.WriteAllBytes(decodedPath, encoded);
					resolvedPath = decodedPath;
				}
				catch
				{
					resolvedPath = null;
				}
			}
			if (resolvedPath == null)
			{
				resolvedPath = ResolveAudioAssetPath(assetStem + ".mp3");
			}
			if (string.IsNullOrEmpty(resolvedPath))
			{
				yield break;
			}
			UnityWebRequest request = UnityWebRequestMultimedia.GetAudioClip("file:///" + resolvedPath.Replace("\\", "/"), (AudioType)13);
			try
			{
				yield return request.SendWebRequest();
				if ((int)request.result == 1)
				{
					AudioClip clip = DownloadHandlerAudioClip.GetContent(request);
					if ((Object)(object)clip != (Object)null)
					{
						((Object)clip).name = assetStem;
						onLoaded(clip);
					}
				}
			}
			finally
			{
				((IDisposable)request)?.Dispose();
			}
		}

		private void UpdateAudioState()
		{
			if (_scene == null || (Object)(object)_scene.Generator == (Object)null || !_scene.Generator.Generated)
			{
				StopAudio();
			}
			else if (_scene.Phase == EmpressElevatorPhase.Moving && (Object)(object)_movementLoopClip != (Object)null && (Object)(object)_movementLoopSource != (Object)null)
			{
				if ((Object)(object)_movementLoopSource.clip != (Object)(object)_movementLoopClip)
				{
					_movementLoopSource.clip = _movementLoopClip;
				}
				if (!_movementLoopSource.isPlaying)
				{
					_movementLoopSource.Play();
				}
			}
			else if ((Object)(object)_movementLoopSource != (Object)null && _movementLoopSource.isPlaying)
			{
				_movementLoopSource.Stop();
			}
		}

		private void StopAudio()
		{
			if ((Object)(object)_movementLoopSource != (Object)null && _movementLoopSource.isPlaying)
			{
				_movementLoopSource.Stop();
			}
		}

		private void PlayDoorOpenCue()
		{
			if (!((Object)(object)_doorOpenClip == (Object)null) && !((Object)(object)_oneShotSource == (Object)null))
			{
				_oneShotSource.PlayOneShot(_doorOpenClip, 0.8f);
			}
		}

		internal bool TryGetCabinRecoveryPose(out Vector3 position, out Quaternion rotation)
		{
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: 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_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			if (_scene != null && (Object)(object)_scene.CabinRoot != (Object)null)
			{
				position = _scene.CabinRoot.TransformPoint(new Vector3(0f, 0.9f, -1f));
				rotation = Quaternion.LookRotation(_scene.CabinRoot.forward, Vector3.up);
				return true;
			}
			position = default(Vector3);
			rotation = Quaternion.identity;
			return false;
		}

		internal void ScheduleDeathHeadRecovery(string steamId, float delaySeconds)
		{
			if (!string.IsNullOrWhiteSpace(steamId))
			{
				((MonoBehaviour)this).StartCoroutine(RecoverDeathHeadToCabin(steamId, delaySeconds));
			}
		}

		private IEnumerator RecoverDeathHeadToCabin(string steamId, float delaySeconds)
		{
			if (delaySeconds > 0f)
			{
				yield return (object)new WaitForSeconds(delaySeconds);
			}
			PlayerAvatar player = FindPlayerBySteamId(steamId);
			PlayerDeathHead deathHead = (((Object)(object)player != (Object)null) ? player.playerDeathHead : null);
			if (!((Object)(object)deathHead == (Object)null) && !((Object)(object)deathHead.physGrabObject == (Object)null) && TryGetCabinRecoveryPose(out var position, out var rotation))
			{
				deathHead.physGrabObject.Teleport(position, rotation);
				deathHead.triggeredPosition = position;
				deathHead.triggeredRotation = rotation;
				deathHead.outsideLevelTimer = 0f;
			}
		}

		internal static IEnumerator EmptyCoroutine()
		{
			yield break;
		}

		internal IEnumerator GenerateElevatorLevel(LevelGenerator generator)
		{
			EmpressTheElevatorPlugin.EnsurePhotonEventHooked();
			yield return (object)new WaitForSeconds(0.2f);
			if (!SemiFunc.IsMultiplayer())
			{
				generator.AllPlayersReady = true;
			}
			while (!generator.AllPlayersReady)
			{
				generator.State = (LevelState)1;
				yield return (object)new WaitForSeconds(0.1f);
			}
			yield return (object)new WaitForSeconds(0.2f);
			generator.Level = RunManager.instance.levelCurrent;
			RunManager.instance.levelPrevious = generator.Level;
			generator.Generated = false;
			generator.EnemyReady = true;
			generator.ModulesSpawned = 0;
			generator.playerSpawned = 0;
			generator.LevelPathPoints = new List<LevelPoint>();
			generator.LevelPathTruck = null;
			if (Object.op_Implicit((Object)(object)ValuableDirector.instance))
			{
				ValuableDirector.instance.setupComplete = true;
				ValuableDirector.instance.valuablesSpawned = true;
			}
			if (Object.op_Implicit((Object)(object)RoundDirector.instance))
			{
				RoundDirector.instance.extractionPoints = 0;
				RoundDirector.instance.extractionPointsCompleted = 0;
				RoundDirector.instance.extractionPointList.Clear();
			}
			generator.State = (LevelState)3;
			_scene = BuildElevatorScene(generator);
			EmpressTheElevatorRuntime empressTheElevatorRuntime = this;
			Scene activeScene = SceneManager.GetActiveScene();
			empressTheElevatorRuntime._sceneHandle = ((Scene)(ref activeScene)).handle;
			if (SemiFunc.IsMasterClientOrSingleplayer())
			{
				EmpressTheElevatorPlugin.RaiseSceneSync(_scene.RunToken, _scene.RunSeed);
			}
			yield return (object)new WaitForSeconds(0.2f);
			if (Object.op_Implicit((Object)(object)EnvironmentDirector.Instance))
			{
				EnvironmentDirector.Instance.Setup();
			}
			if (Object.op_Implicit((Object)(object)PostProcessing.Instance))
			{
				PostProcessing.Instance.Setup();
			}
			if (Object.op_Implicit((Object)(object)LevelMusic.instance))
			{
				LevelMusic.instance.Setup();
			}
			if (Object.op_Implicit((Object)(object)ConstantMusic.instance))
			{
				ConstantMusic.instance.Setup();
			}
			if (SemiFunc.IsMasterClientOrSingleplayer())
			{
				generator.NavMeshSetup();
				yield return null;
				while ((Object)(object)GameDirector.instance == (Object)null || GameDirector.instance.PlayerList.Count == 0)
				{
					generator.State = (LevelState)12;
					yield return (object)new WaitForSeconds(0.1f);
				}
				generator.PlayerSpawn();
				yield return null;
				while (generator.playerSpawned < GameDirector.instance.PlayerList.Count)
				{
					generator.State = (LevelState)13;
					yield return (object)new WaitForSeconds(0.1f);
				}
				if (SemiFunc.IsMultiplayer())
				{
					generator.PhotonView.RPC("GenerateDone", (RpcTarget)3, Array.Empty<object>());
				}
				else
				{
					generator.GenerateDone(default(PhotonMessageInfo));
				}
			}
			else
			{
				while (!generator.Generated)
				{
					yield return (object)new WaitForSeconds(0.1f);
				}
			}
			_scene.Phase = EmpressElevatorPhase.Moving;
			_scene.PhaseStartedAt = Time.time;
			_scene.PendingFloorNumber = 1;
			_scene.CurrentFloorNumber = 1;
			_scene.StatusText.text = "Ascending";
			_scene.FloorText.text = "FLOOR 001";
			_scene.EventNameText.text = "WAITING";
		}

		internal void ReceiveSceneSync(int runToken, int runSeed)
		{
			_hasPendingSceneSync = true;
			_pendingRunToken = runToken;
			_pendingRunSeed = runSeed;
			if (_scene != null)
			{
				_scene.RunToken = runToken;
				_scene.RunSeed = runSeed;
			}
		}

		internal void ReceiveFloorReveal(int runToken, int floorNumber, int definitionIndex)
		{
			if (_scene != null && _scene.RunToken == runToken && definitionIndex >= 0 && definitionIndex < EmpressTheElevatorPlugin.FloorDefinitions.Count)
			{
				BeginFloorReveal(floorNumber, EmpressTheElevatorPlugin.FloorDefinitions[definitionIndex]);
			}
		}

		internal void ReceiveFloorReward(int runToken, string rewardText)
		{
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			if (_scene != null && _scene.RunToken == runToken)
			{
				_scene.RewardText.text = rewardText;
				((Graphic)_scene.RewardText).color = new Color(1f, 0.93f, 0.54f);
				_scene.RewardTextUntil = Time.time + 2.6f;
			}
		}

		internal void ReceiveEmergencySkip(int runToken)
		{
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			if (_scene != null && _scene.RunToken == runToken && _scene.Phase != 0 && !_scene.LevelExitRequested)
			{
				_scene.LevelExitRequested = true;
				_scene.SkipRewardForFloor = true;
				_skipHoldElapsed = 0f;
				_scene.StatusText.text = "Emergency Exit";
				((Graphic)_scene.StatusText).color = new Color(1f, 0.38f, 0.32f);
				_scene.EventNameText.text = "Cashing out and heading to the next stop";
				_scene.RewardText.text = "Emergency button hit. Taking your winnings to the truck.";
				((Graphic)_scene.RewardText).color = new Color(1f, 0.88f, 0.58f);
				_scene.RewardTextUntil = Time.time + 2.6f;
				ClearActiveEventRoot();
				_scene.ActiveDefinition = null;
				_scene.EventVisualsBuilt = false;
				_scene.Phase = EmpressElevatorPhase.Moving;
				_scene.PhaseStartedAt = Time.time;
				if (SemiFunc.IsMasterClientOrSingleplayer())
				{
					((MonoBehaviour)this).StartCoroutine(ExitElevatorLevelEarly(runToken));
				}
			}
		}

		private void HandleSceneTransition()
		{
			//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)
			Scene activeScene = SceneManager.GetActiveScene();
			if (((Scene)(ref activeScene)).handle != _sceneHandle)
			{
				_sceneHandle = ((Scene)(ref activeScene)).handle;
				ClearSceneState();
			}
		}

		private void ClearSceneState()
		{
			_effectCooldowns.Clear();
			_ruleAnchors.Clear();
			_ruleStillTimers.Clear();
			_skipHoldElapsed = 0f;
			StopAudio();
			ResetLocalPlayerEventEffects();
			EmpressElevatorSceneState scene = _scene;
			if (scene != null)
			{
				Canvas hudCanvas = scene.HudCanvas;
				if (Object.op_Implicit((Object)(object)hudCanvas))
				{
					Object.Destroy((Object)(object)((Component)hudCanvas).gameObject);
				}
				Transform activeEventRoot = scene.ActiveEventRoot;
				if (Object.op_Implicit((Object)(object)activeEventRoot))
				{
					Object.Destroy((Object)(object)((Component)activeEventRoot).gameObject);
				}
				Transform activeCabinEventRoot = scene.ActiveCabinEventRoot;
				if (Object.op_Implicit((Object)(object)activeCabinEventRoot))
				{
					Object.Destroy((Object)(object)((Component)activeCabinEventRoot).gameObject);
				}
			}
			_scene = null;
		}

		private IEnumerator HostFloorLoop()
		{
			while (_scene != null && (!Object.op_Implicit((Object)(object)_scene.Generator) || !_scene.Generator.Generated || (Object)(object)GameDirector.instance == (Object)null || (int)GameDirector.instance.currentState != 2))
			{
				yield return (object)new WaitForSeconds(0.2f);
			}
			while (_scene != null && Object.op_Implicit((Object)(object)_scene.Generator) && _scene.Generator.Generated && !_scene.LevelExitRequested)
			{
				float moveStartedAt = Time.time;
				_scene.Phase = EmpressElevatorPhase.Moving;
				_scene.PhaseStartedAt = moveStartedAt;
				while (_scene != null && !_scene.LevelExitRequested && _scene.Phase == EmpressElevatorPhase.Moving && Time.time - moveStartedAt < 10f)
				{
					yield return null;
				}
				if (_scene == null || _scene.LevelExitRequested)
				{
					break;
				}
				bool hostile = Random.value >= 0.5f;
				EmpressTheElevatorPlugin.RaiseFloorReveal(definitionIndex: TakeNextDefinitionIndex(hostile), floorNumber: _scene.PendingFloorNumber, runToken: _scene.RunToken);
				while (_scene != null && _scene.Phase != 0)
				{
					yield return null;
				}
			}
		}

		private int TakeNextDefinitionIndex(bool hostile)
		{
			if (_scene == null)
			{
				return 0;
			}
			List<int> list = (hostile ? _scene.ShuffledBadDefinitions : _scene.ShuffledGoodDefinitions);
			if (list.Count == 0)
			{
				list = new List<int>();
				for (int i = 0; i < EmpressTheElevatorPlugin.FloorDefinitions.Count; i++)
				{
					if (EmpressTheElevatorPlugin.FloorDefinitions[i].Hostile == hostile)
					{
						list.Add(i);
					}
				}
				Random random = new Random(_scene.RunSeed);
				for (int num = list.Count - 1; num > 0; num--)
				{
					int num2 = random.Next(num + 1);
					List<int> list2 = list;
					int index = num;
					List<int> list3 = list;
					int index2 = num2;
					int value = list[num2];
					int value2 = list[num];
					list2[index] = value;
					list3[index2] = value2;
				}
				_scene.RunSeed = _scene.RunSeed * 1664525 + 1013904223;
				if (hostile)
				{
					_scene.ShuffledBadDefinitions = list;
				}
				else
				{
					_scene.ShuffledGoodDefinitions = list;
				}
			}
			int result = list[0];
			list.RemoveAt(0);
			return result;
		}

		private IEnumerator ExitElevatorLevelEarly(int runToken)
		{
			yield return (object)new WaitForSeconds(1.15f);
			if (_scene != null && _scene.RunToken == runToken && !((Object)(object)RunManager.instance == (Object)null))
			{
				RunManager.instance.ChangeLevel(true, false, (ChangeLevelType)0);
			}
		}

		private EmpressElevatorSceneState BuildElevatorScene(LevelGenerator generator)
		{
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: 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_00fb: Expected O, but got Unknown
			//IL_0124: Unknown result type (might be due to invalid IL or missing references)
			//IL_012a: Expected O, but got Unknown
			//IL_018b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0192: Expected O, but got Unknown
			//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ee: 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)
			//IL_020d: Expected O, but got Unknown
			//IL_0233: Unknown result type (might be due to invalid IL or missing references)
			//IL_023a: Expected O, but got Unknown
			//IL_0264: Unknown result type (might be due to invalid IL or missing references)
			//IL_0297: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ab: 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_02e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f9: 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_0333: Unknown result type (might be due to invalid IL or missing references)
			//IL_0347: Unknown result type (might be due to invalid IL or missing references)
			//IL_035b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0381: Unknown result type (might be due to invalid IL or missing references)
			//IL_0395: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_041d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0431: Unknown result type (might be due to invalid IL or missing references)
			//IL_0445: 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_047f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0493: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_04cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_051c: Unknown result type (might be due to invalid IL or missing references)
			//IL_052d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0541: Unknown result type (might be due to invalid IL or missing references)
			//IL_056e: Unknown result type (might be due to invalid IL or missing references)
			//IL_057f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0593: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_05bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_05e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_060b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0610: Unknown result type (might be due to invalid IL or missing references)
			//IL_0630: Unknown result type (might be due to invalid IL or missing references)
			//IL_0644: Unknown result type (might be due to invalid IL or missing references)
			//IL_0649: Unknown result type (might be due to invalid IL or missing references)
			//IL_0697: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_06bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_06e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_06f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_070d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0733: Unknown result type (might be due to invalid IL or missing references)
			//IL_0747: Unknown result type (might be due to invalid IL or missing references)
			//IL_075b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0781: Unknown result type (might be due to invalid IL or missing references)
			//IL_0795: Unknown result type (might be due to invalid IL or missing references)
			//IL_07a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_07cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_07e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_07f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_081d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0831: Unknown result type (might be due to invalid IL or missing references)
			//IL_0845: Unknown result type (might be due to invalid IL or missing references)
			//IL_0856: Unknown result type (might be due to invalid IL or missing references)
			//IL_088e: Unknown result type (might be due to invalid IL or missing references)
			//IL_08bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_08d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_08e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0955: Unknown result type (might be due to invalid IL or missing references)
			//IL_0969: Unknown result type (might be due to invalid IL or missing references)
			//IL_097d: Unknown result type (might be due to invalid IL or missing references)
			//IL_092d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a03: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a17: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a1c: Unknown result type (might be due to invalid IL or missing references)
			//IL_09d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_09dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a65: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a79: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aaa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0abe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b03: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b35: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b3a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b50: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b55: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b6b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b70: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b86: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b8b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ba1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ba6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bbc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bc1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bd6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bdb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0be3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bea: Expected O, but got Unknown
			//IL_0c06: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c15: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c1a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c1f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c59: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c83: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cad: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cd7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d01: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)generator.LevelParent))
			{
				for (int num = generator.LevelParent.transform.childCount - 1; num >= 0; num--)
				{
					Object.Destroy((Object)(object)((Component)generator.LevelParent.transform.GetChild(num)).gameObject);
				}
			}
			EmpressElevatorSceneState empressElevatorSceneState = new EmpressElevatorSceneState();
			int num2 = (int)DateTime.UtcNow.Ticks;
			Scene activeScene = SceneManager.GetActiveScene();
			empressElevatorSceneState.RunToken = num2 ^ ((Scene)(ref activeScene)).handle ^ Random.Range(1024, int.MaxValue);
			empressElevatorSceneState.RunSeed = (int)DateTime.UtcNow.Ticks ^ 0x5EED123;
			empressElevatorSceneState.Generator = generator;
			EmpressElevatorSceneState empressElevatorSceneState2 = empressElevatorSceneState;
			if (SemiFunc.IsMultiplayer() && !SemiFunc.IsMasterClientOrSingleplayer() && _hasPendingSceneSync)
			{
				empressElevatorSceneState2.RunToken = _pendingRunToken;
				empressElevatorSceneState2.RunSeed = _pendingRunSeed;
			}
			GameObject val = new GameObject("Empress Elevator Root");
			val.transform.SetParent(generator.LevelParent.transform, false);
			empressElevatorSceneState2.LevelRoot = val.transform;
			GameObject val2 = new GameObject("Empress Elevator Module");
			val2.transform.SetParent(val.transform, false);
			PhotonView val3 = val2.AddComponent<PhotonView>();
			val3.ObservedComponents = new List<Component>();
			Module val4 = val2.AddComponent<Module>();
			val4.SetAllChecklist();
			val4.SetupDone = true;
			val4.StartRoom = true;
			val4.GridX = 0;
			val4.GridY = 0;
			val2.AddComponent<StartRoom>();
			GameObject val5 = new GameObject("Elevator Room Volume");
			val5.transform.SetParent(val2.transform, false);
			RoomVolume val6 = val5.AddComponent<RoomVolume>();
			BoxCollider val7 = val5.AddComponent<BoxCollider>();
			((Collider)val7).isTrigger = true;
			val7.size = new Vector3(16f, 8f, 25f);
			val7.center = new Vector3(0f, 2.6999998f, 4.5499997f);
			empressElevatorSceneState2.RoomVolume = val6;
			GameObject val8 = new GameObject("Elevator Cabin");
			val8.transform.SetParent(val2.transform, false);
			empressElevatorSceneState2.CabinRoot = val8.transform;
			GameObject val9 = new GameObject("Event Chamber");
			val9.transform.SetParent(val2.transform, false);
			val9.transform.localPosition = new Vector3(0f, 0f, 11.5f);
			empressElevatorSceneState2.ChamberRoot = val9.transform;
			CreateBox(val8.transform, "Cabin Floor", new Vector3(0f, -0.5f, 0f), new Vector3(10f, 1f, 8f), new Color(0.12f, 0.12f, 0.13f));
			CreateBox(val8.transform, "Cabin Ceiling", new Vector3(0f, 5.5f, 0f), new Vector3(10f, 1f, 8f), new Color(0.18f, 0.15f, 0.12f));
			CreateBox(val8.transform, "Cabin Left Wall", new Vector3(-5.2f, 2.5f, 0f), new Vector3(0.4f, 5f, 8f), new Color(0.33f, 0.24f, 0.19f));
			CreateBox(val8.transform, "Cabin Right Wall", new Vector3(5.2f, 2.5f, 0f), new Vector3(0.4f, 5f, 8f), new Color(0.33f, 0.24f, 0.19f));
			CreateBox(val8.transform, "Cabin Back Wall", new Vector3(0f, 2.5f, -4.2f), new Vector3(10f, 5f, 0.4f), new Color(0.28f, 0.19f, 0.16f));
			CreateBox(val8.transform, "Cabin Door Header", new Vector3(0f, 4.5f, 3.92f), new Vector3(10f, 1f, 0.45f), new Color(0.36f, 0.18f, 0.08f));
			CreateBox(val8.transform, "Cabin Door Frame Left", new Vector3(-4.45f, 2.3f, 3.92f), new Vector3(1.1f, 4f, 0.45f), new Color(0.36f, 0.18f, 0.08f));
			CreateBox(val8.transform, "Cabin Door Frame Right", new Vector3(4.45f, 2.3f, 3.92f), new Vector3(1.1f, 4f, 0.45f), new Color(0.36f, 0.18f, 0.08f));
			float num3 = 4.58f;
			float num4 = num3 * 0.5f - 0.03f;
			empressElevatorSceneState2.DoorLeft = CreateBox(val8.transform, "Door Left", new Vector3(-1.95f, num4, 3.94f), new Vector3(3.9f, num3, 0.18f), new Color(0.9f, 0.47f, 0.19f)).transform;
			empressElevatorSceneState2.DoorRight = CreateBox(val8.transform, "Door Right", new Vector3(1.95f, num4, 3.94f), new Vector3(3.9f, num3, 0.18f), new Color(0.9f, 0.47f, 0.19f)).transform;
			empressElevatorSceneState2.DoorLeftClosedLocal = empressElevatorSceneState2.DoorLeft.localPosition;
			empressElevatorSceneState2.DoorRightClosedLocal = empressElevatorSceneState2.DoorRight.localPosition;
			empressElevatorSceneState2.DoorLeftOpenLocal = new Vector3(-5.85f, empressElevatorSceneState2.DoorLeftClosedLocal.y, empressElevatorSceneState2.DoorLeftClosedLocal.z);
			empressElevatorSceneState2.DoorRightOpenLocal = new Vector3(5.85f, empressElevatorSceneState2.DoorRightClosedLocal.y, empressElevatorSceneState2.DoorRightClosedLocal.z);
			GameObject val10 = CreateBox(val8.transform, "Empress Barrier", new Vector3(0f, 2.5f, 4.2f), new Vector3(8.8f, 4.4f, 0.12f), Color.clear);
			empressElevatorSceneState2.BarrierCollider = val10.GetComponent<BoxCollider>();
			MeshRenderer val11 = default(MeshRenderer);
			if (val10.TryGetComponent<MeshRenderer>(ref val11))
			{
				((Renderer)val11).enabled = false;
			}
			CreateBox(val9.transform, "Chamber Floor", new Vector3(0f, -0.5f, 0f), new Vector3(12f, 1f, 13f), new Color(0.09f, 0.09f, 0.12f));
			CreateBox(val9.transform, "Chamber Ceiling", new Vector3(0f, 6.5f, 0f), new Vector3(12f, 1f, 13f), new Color(0.09f, 0.06f, 0.09f));
			CreateBox(val9.transform, "Chamber Left Wall", new Vector3(-6.2f, 3f, 0f), new Vector3(0.4f, 6f, 13f), new Color(0.11f, 0.08f, 0.15f));
			CreateBox(val9.transform, "Chamber Right Wall", new Vector3(6.2f, 3f, 0f), new Vector3(0.4f, 6f, 13f), new Color(0.11f, 0.08f, 0.15f));
			CreateBox(val9.transform, "Chamber Back Wall", new Vector3(0f, 3f, 6.7f), new Vector3(12f, 6f, 0.4f), new Color(0.11f, 0.08f, 0.15f));
			CreateBox(val9.transform, "Chamber Accent Rail", new Vector3(0f, 0.12f, -3.25f), new Vector3(10f, 0.1f, 0.3f), new Color(0.88f, 0.46f, 0.19f));
			empressElevatorSceneState2.EventAnchor = new GameObject("Empress Event Anchor").transform;
			empressElevatorSceneState2.EventAnchor.SetParent(val9.transform, false);
			empressElevatorSceneState2.EventAnchor.localPosition = new Vector3(0f, 0f, 0.5f);
			BuildDecisionBoard(empressElevatorSceneState2);
			GameObject val12 = CreateBox(val8.transform, "Emergency Plate", new Vector3(4.84f, 1.6f, -0.9f), new Vector3(0.08f, 0.65f, 0.9f), new Color(0.14f, 0.04f, 0.04f));
			MeshRenderer val13 = default(MeshRenderer);
			if (val12.TryGetComponent<MeshRenderer>(ref val13))
			{
				((Renderer)val13).material.EnableKeyword("_EMISSION");
				((Renderer)val13).material.SetColor("_EmissionColor", new Color(0.25f, 0.03f, 0.03f));
			}
			empressElevatorSceneState2.SkipButton = CreateBox(val8.transform, "Emergency Skip Button", new Vector3(4.7f, 1.6f, -0.9f), new Vector3(0.22f, 0.22f, 0.36f), new Color(0.95f, 0.12f, 0.1f)).transform;
			MeshRenderer val14 = default(MeshRenderer);
			if (((Component)empressElevatorSceneState2.SkipButton).TryGetComponent<MeshRenderer>(ref val14))
			{
				((Renderer)val14).material.EnableKeyword("_EMISSION");
				((Renderer)val14).material.SetColor("_EmissionColor", new Color(1f, 0.1f, 0.08f) * 1.6f);
			}
			GameObject val15 = CreateBox(val8.transform, "Emergency Skip Trigger", new Vector3(4.2799997f, 1.6f, -0.9f), new Vector3(1.25f, 0.92f, 1.28f), Color.clear);
			Collider val16 = default(Collider);
			if (val15.TryGetComponent<Collider>(ref val16))
			{
				val16.isTrigger = true;
			}
			empressElevatorSceneState2.SkipButtonTrigger = val15.transform;
			CreateLight(val8.transform, new Vector3(-2.4f, 4.3f, -1.5f), new Color(1f, 0.67f, 0.36f), 2.1f, 12f, empressElevatorSceneState2.CabinLights);
			CreateLight(val8.transform, new Vector3(2.4f, 4.3f, -1.5f), new Color(1f, 0.67f, 0.36f), 2.1f, 12f, empressElevatorSceneState2.CabinLights);
			CreateLight(val9.transform, new Vector3(0f, 5.4f, 0f), new Color(0.95f, 0.4f, 0.65f), 1.4f, 18f, empressElevatorSceneState2.CabinLights);
			Vector3[] array = (Vector3[])(object)new Vector3[6]
			{
				new Vector3(-2.4f, 0.2f, -2.2f),
				new Vector3(0f, 0.2f, -2.2f),
				new Vector3(2.4f, 0.2f, -2.2f),
				new Vector3(-2.4f, 0.2f, 0.4f),
				new Vector3(0f, 0.2f, 0.4f),
				new Vector3(2.4f, 0.2f, 0.4f)
			};
			Vector3[] array2 = array;
			foreach (Vector3 localPosition in array2)
			{
				GameObject val17 = new GameObject("Elevator Spawn");
				val17.transform.SetParent(val8.transform, false);
				val17.transform.localPosition = localPosition;
				val17.transform.localRotation = Quaternion.LookRotation(Vector3.forward, Vector3.up);
				val17.AddComponent<SpawnPoint>();
			}
			CreateLevelPoint(val2.transform, val6, generator, new Vector3(0f, 0.15f, -2.6f), truck: true, empressElevatorSceneState2.LevelPoints);
			CreateLevelPoint(val2.transform, val6, generator, new Vector3(0f, 0.15f, -0.5f), truck: false, empressElevatorSceneState2.LevelPoints);
			CreateLevelPoint(val2.transform, val6, generator, new Vector3(0f, 0.15f, 2.6f), truck: false, empressElevatorSceneState2.LevelPoints);
			CreateLevelPoint(val2.transform, val6, generator, new Vector3(0f, 0.15f, 7.5f), truck: false, empressElevatorSceneState2.LevelPoints);
			CreateLevelPoint(val2.transform, val6, generator, new Vector3(0f, 0.15f, 11.8f), truck: false, empressElevatorSceneState2.LevelPoints);
			for (int j = 0; j < empressElevatorSceneState2.LevelPoints.Count; j++)
			{
				empressElevatorSceneState2.LevelPoints[j].ConnectedPoints = new List<LevelPoint>();
				if (j > 0)
				{
					empressElevatorSceneState2.LevelPoints[j].ConnectedPoints.Add(empressElevatorSceneState2.LevelPoints[j - 1]);
				}
				if (j + 1 < empressElevatorSceneState2.LevelPoints.Count)
				{
					empressElevatorSceneState2.LevelPoints[j].ConnectedPoints.Add(empressElevatorSceneState2.LevelPoints[j + 1]);
				}
				empressElevatorSceneState2.LevelPoints[j].Room = val6;
				empressElevatorSceneState2.LevelPoints[j].ModuleConnect = true;
			}
			empressElevatorSceneState2.HudCanvas = BuildHudCanvas(empressElevatorSceneState2);
			return empressElevatorSceneState2;
		}

		private static LevelPoint CreateLevelPoint(Transform parent, RoomVolume roomVolume, LevelGenerator generator, Vector3 localPosition, bool truck, List<LevelPoint> sink)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = new GameObject("Empress Level Point");
			val.layer = LayerMask.NameToLayer("Other");
			val.transform.SetParent(parent, false);
			val.transform.localPosition = localPosition;
			SphereCollider val2 = val.AddComponent<SphereCollider>();
			((Collider)val2).isTrigger = true;
			val2.radius = 0.35f;
			LevelPoint val3 = val.AddComponent<LevelPoint>();
			val3.ConnectedPoints = new List<LevelPoint>();
			val3.Room = roomVolume;
			val3.Truck = truck;
			val3.ModuleConnect = true;
			val3.inStartRoom = true;
			if (generator.LevelPathPoints == null)
			{
				generator.LevelPathPoints = new List<LevelPoint>();
			}
			sink.Add(val3);
			return val3;
		}

		private Canvas BuildHudCanvas(EmpressElevatorSceneState scene)
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Expected O, but got Unknown
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Expected O, but got Unknown
			//IL_00a4: 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_00da: 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_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Unknown result type (might be due to invalid IL or missing references)
			//IL_0154: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_018d: 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_01ab: 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_01e4: 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_021d: Unknown result type (might be due to invalid IL or missing references)
			//IL_022c: Unknown result type (might be due to invalid IL or missing references)
			//IL_023b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0263: Unknown result type (might be due to invalid IL or missing references)
			//IL_027a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0291: 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_02c6: Expected O, but got Unknown
			//IL_02f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0319: Unknown result type (might be due to invalid IL or missing references)
			//IL_0330: Unknown result type (might be due to invalid IL or missing references)
			//IL_0347: Unknown result type (might be due to invalid IL or missing references)
			//IL_035e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0375: Unknown result type (might be due to invalid IL or missing references)
			//IL_039c: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ba: Unknown result type (might be due to invalid IL or missing references)
			Font font = _uiFont ?? (_uiFont = Resources.GetBuiltinResource<Font>("Arial.ttf"));
			GameObject val = new GameObject("Empress Elevator HUD");
			val.transform.SetParent(((Component)this).transform, false);
			Canvas val2 = val.AddComponent<Canvas>();
			val2.renderMode = (RenderMode)0;
			val2.sortingOrder = 700;
			val.AddComponent<CanvasScaler>();
			val.AddComponent<GraphicRaycaster>();
			GameObject val3 = new GameObject("Header");
			val3.transform.SetParent(val.transform, false);
			Image val4 = val3.AddComponent<Image>();
			((Graphic)val4).color = new Color(0.04f, 0.04f, 0.06f, 0.78f);
			RectTransform component = val3.GetComponent<RectTransform>();
			component.anchorMin = new Vector2(0.5f, 1f);
			component.anchorMax = new Vector2(0.5f, 1f);
			component.pivot = new Vector2(0.5f, 1f);
			component.sizeDelta = new Vector2(560f, 92f);
			component.anchoredPosition = new Vector2(0f, -24f);
			scene.FloorText = CreateHudText(val3.transform, font, 34, (FontStyle)1, (TextAnchor)1, new Color(1f, 0.82f, 0.58f), new Vector2(520f, 36f), new Vector2(0f, -8f));
			scene.StatusText = CreateHudText(val3.transform, font, 18, (FontStyle)1, (TextAnchor)4, new Color(1f, 0.62f, 0.34f), new Vector2(520f, 24f), new Vector2(0f, -40f));
			scene.EventNameText = CreateHudText(val3.transform, font, 16, (FontStyle)0, (TextAnchor)4, new Color(0.92f, 0.92f, 0.92f), new Vector2(520f, 24f), new Vector2(0f, -64f));
			scene.RewardText = CreateHudText(val.transform, font, 20, (FontStyle)1, (TextAnchor)4, new Color(1f, 0.93f, 0.54f), new Vector2(700f, 28f), new Vector2(0f, -132f));
			RectTransform rectTransform = ((Graphic)scene.RewardText).rectTransform;
			rectTransform.anchorMin = new Vector2(0.5f, 1f);
			rectTransform.anchorMax = new Vector2(0.5f, 1f);
			rectTransform.pivot = new Vector2(0.5f, 1f);
			scene.RewardText.text = string.Empty;
			((Behaviour)scene.RewardText).enabled = false;
			GameObject val5 = new GameObject("Emergency Prompt");
			val5.transform.SetParent(val.transform, false);
			Image val6 = val5.AddComponent<Image>();
			((Graphic)val6).color = new Color(0.05f, 0.05f, 0.06f, 0.78f);
			RectTransform component2 = val5.GetComponent<RectTransform>();
			component2.anchorMin = new Vector2(0.5f, 0f);
			component2.anchorMax = new Vector2(0.5f, 0f);
			component2.pivot = new Vector2(0.5f, 0f);
			component2.sizeDelta = new Vector2(420f, 34f);
			component2.anchoredPosition = new Vector2(0f, 24f);
			scene.PromptText = CreateHudText(val5.transform, font, 16, (FontStyle)1, (TextAnchor)4, new Color(1f, 0.74f, 0.68f), new Vector2(388f, 28f), new Vector2(0f, -3f));
			scene.PromptText.text = string.Empty;
			((Behaviour)val6).enabled = false;
			scene.PromptBackground = val6;
			return val2;
		}

		private static Text CreateHudText(Transform parent, Font font, int fontSize, FontStyle fontStyle, TextAnchor anchor, Color color, Vector2 size, Vector2 position)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: 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_009e: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = new GameObject("Text");
			val.transform.SetParent(parent, false);
			Text val2 = val.AddComponent<Text>();
			val2.font = font;
			val2.fontSize = fontSize;
			val2.fontStyle = fontStyle;
			val2.alignment = anchor;
			((Graphic)val2).color = color;
			RectTransform component = val.GetComponent<RectTransform>();
			component.anchorMin = new Vector2(0.5f, 1f);
			component.anchorMax = new Vector2(0.5f, 1f);
			component.pivot = new Vector2(0.5f, 1f);
			component.sizeDelta = size;
			component.anchoredPosition = position;
			return val2;
		}

		private static GameObject CreateBox(Transform parent, string name, Vector3 localPosition, Vector3 localScale, Color color)
		{
			//IL_0024: 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_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = GameObject.CreatePrimitive((PrimitiveType)3);
			((Object)val).name = name;
			val.transform.SetParent(parent, false);
			val.transform.localPosition = localPosition;
			val.transform.localRotation = Quaternion.identity;
			val.transform.localScale = localScale;
			MeshRenderer val2 = default(MeshRenderer);
			if (val.TryGetComponent<MeshRenderer>(ref val2))
			{
				Material material = ((Renderer)val2).material;
				material.color = color;
				if (color.a <= 0f)
				{
					((Renderer)val2).enabled = false;
				}
			}
			return val;
		}

		private static void CreateLight(Transform parent, Vector3 localPosition, Color color, float intensity, float range, List<Light> sink)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = new GameObject("Empress Light");
			val