Decompiled source of GodOfPharloom v1.0.1

BepInEx/plugins/GodsOfPharloom.dll

Decompiled 2 days ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using GlobalEnums;
using GlobalSettings;
using Gods_Of_Pharloom;
using HarmonyLib;
using HutongGames.PlayMaker;
using HutongGames.PlayMaker.Actions;
using InControl;
using Newtonsoft.Json;
using TMProOld;
using TeamCherry.NestedFadeGroup;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Events;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Controls;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.ResourceManagement.ResourceProviders;
using UnityEngine.SceneManagement;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyCompany("GodsOfPharloom")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+073048b694c6e2506a1392502eea824269c6bbc4")]
[assembly: AssemblyProduct("GodsOfPharloom")]
[assembly: AssemblyTitle("GodsOfPharloom")]
[assembly: AssemblyVersion("1.0.0.0")]
public class CustomScene
{
	public List<TransitionPointInfo> TransitionGates = new List<TransitionPointInfo>();

	public Action BeforeSceneLoaded;

	public Action<Scene> AfterSceneLoaded;

	public Action<Scene> AfterSceneActivated;

	public Action AfterHeroEnteredScene;

	public Vector2 tileMapVector = new Vector2(512f, 512f);

	public bool isSceneActive;

	public bool isPreloading;

	public bool isSkongScene = true;

	public bool isFastSuperJump;

	public static float customSuperJumpSpeed = 60f;

	public static float customWaitForSuperJump = 0.01f;

	public string sceneName { get; private set; }

	public CustomScene(string sceneName, bool isSkongScene = true, bool isFastSuperJump = false)
	{
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		this.sceneName = sceneName;
		this.isSkongScene = isSkongScene;
		this.isFastSuperJump = isFastSuperJump;
	}

	public void AddTransitionPoint(TransitionPointInfo TransitionPointInfo)
	{
		TransitionGates.Add(TransitionPointInfo);
		SceneTeleportMap.AddTransitionGate(sceneName, TransitionPointInfo.gateName);
	}

	public bool Remove(string entryPoint)
	{
		TransitionPointInfo item = TransitionGates.Find((TransitionPointInfo transitionPointInfo) => transitionPointInfo.entryPoint == entryPoint);
		if (TransitionGates.IndexOf(item) == -1)
		{
			return false;
		}
		TransitionGates.Remove(item);
		return true;
	}

	public IEnumerator PreloadScene()
	{
		isPreloading = true;
		yield return SceneManager.LoadSceneAsync(sceneName, (LoadSceneMode)1);
		Activate(GodsOfPharloomMod.lastLoadedScene.Value);
	}

	private void CreateGate(TransitionPointInfo item, Scene scene)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Expected O, but got Unknown
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_009a: Unknown result type (might be due to invalid IL or missing references)
		GameObject val = new GameObject(item.gateName);
		BoxCollider2D val2 = val.AddComponent<BoxCollider2D>();
		((Collider2D)val2).isTrigger = true;
		val.transform.position = item.position;
		if (item.gateName.Contains("top") || item.gateName.Contains("bot"))
		{
			val2.size = new Vector2(4f, 1f);
		}
		else
		{
			val2.size = new Vector2(1f, 4f);
		}
		if (item.isOneTimeTransition)
		{
			((Behaviour)val2).enabled = false;
		}
		CreateTransitionPoint(item, val, sceneName);
		SceneManager.MoveGameObjectToScene(val, scene);
	}

	public TransitionPoint CreateTransitionPoint(TransitionPointInfo item, GameObject go, string sceneName)
	{
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Expected O, but got Unknown
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0053: Expected O, but got Unknown
		//IL_0095: Unknown result type (might be due to invalid IL or missing references)
		//IL_009a: Unknown result type (might be due to invalid IL or missing references)
		//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Expected O, but got Unknown
		//IL_0113: Unknown result type (might be due to invalid IL or missing references)
		//IL_011a: Expected O, but got Unknown
		//IL_0128: Unknown result type (might be due to invalid IL or missing references)
		//IL_012f: Expected O, but got Unknown
		//IL_019c: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ba: Expected O, but got Unknown
		//IL_02a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c1: Unknown result type (might be due to invalid IL or missing references)
		//IL_02cb: Expected O, but got Unknown
		//IL_021d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0227: Expected O, but got Unknown
		TransitionPoint val = go.AddComponent<TransitionPoint>();
		PlayMakerFSM val2 = (val.customEntryFSM = go.AddComponent<PlayMakerFSM>());
		((Behaviour)val2).enabled = false;
		Fsm fsm = val2.Fsm;
		FsmState val3 = new FsmState(fsm);
		val3.Name = "Init";
		FsmState val4 = new FsmState(fsm);
		val4.Name = "After Entry";
		fsm.StartState = "Init";
		PatchedFsm.CustomLogicFsm customLogicFsm = new PatchedFsm.CustomLogicFsm(fsm);
		customLogicFsm.action = delegate
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			if (item.forceMemoryZone)
			{
				GameManager.instance.ForceCurrentSceneIsMemory(true);
			}
			if (item.noInputOnStart)
			{
				HeroController.instance.hero_state = (ActorStates)7;
			}
			if (item.doSendEventAfterTransition)
			{
				PlayMakerFSM.BroadcastEvent(TransitionPointInfo.eventName);
			}
			item.afterTransition?.Invoke();
			AfterHeroEnteredScene?.Invoke();
		};
		val3.Transitions = (FsmTransition[])(object)new FsmTransition[1]
		{
			new FsmTransition
			{
				FsmEvent = FsmEvent.GetFsmEvent("FINISH ENTRY"),
				ToFsmState = val4
			}
		};
		val4.Actions = (FsmStateAction[])(object)new FsmStateAction[1] { customLogicFsm };
		fsm.States = (FsmState[])(object)new FsmState[2] { val3, val4 };
		((Behaviour)fsm.FsmComponent).enabled = true;
		PlayMakerFSM val5 = go.AddComponent<PlayMakerFSM>();
		((Behaviour)val5).enabled = false;
		Fsm fsm2 = val5.Fsm;
		fsm2.StartState = "Idle";
		FsmState val6 = new FsmState(fsm2);
		val6.Name = "Idle";
		FsmState val7 = new FsmState(fsm2);
		val7.Name = "After Death";
		PatchedFsm.CustomLogicFsm customLogicFsm2 = new PatchedFsm.CustomLogicFsm(fsm2);
		customLogicFsm2.action = (Action<Fsm>)Delegate.Combine(customLogicFsm2.action, (Action<Fsm>)delegate
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			Color val8 = new Color(0f, 0f, 0f, 0f);
			Color val9 = default(Color);
			((Color)(ref val9))..ctor(0f, 0f, 0f, 0f);
			ScreenFaderUtils.Fade(val8, val9, 0.01f);
			GameCameras.instance.HUDIn();
		});
		val7.Actions = (FsmStateAction[])(object)new FsmStateAction[1] { customLogicFsm2 };
		val6.Transitions = (FsmTransition[])(object)new FsmTransition[1]
		{
			new FsmTransition
			{
				FsmEvent = FsmEvent.GetFsmEvent("HERO RESPAWNING HERE"),
				ToFsmState = val7
			}
		};
		fsm2.States = (FsmState[])(object)new FsmState[2] { val6, val7 };
		((Behaviour)val5).enabled = true;
		if (item.alwaysEnterRight)
		{
			val.alwaysEnterRight = true;
			val.alwaysEnterLeft = false;
		}
		else
		{
			val.alwaysEnterLeft = true;
			val.alwaysEnterRight = false;
		}
		if (item.doCreateRespawnMarker)
		{
			RespawnMarker obj = go.AddComponent<RespawnMarker>();
			obj.overrideMapZone = new OverrideMapZone();
			obj.customWakeUp = true;
			((Component)val).gameObject.tag = "RespawnPoint";
			AddRespawnMarkerToTeleportMap(sceneName, item.gateName);
		}
		val.respawnMarker = go.AddComponent<HazardRespawnMarker>();
		val.targetScene = item.targetScene;
		val.dontWalkOutOfDoor = item.dontWalkOutOfDoor;
		val.hardLandOnExit = item.hardLandOnExit;
		val.entryPoint = item.entryPoint;
		((InteractableBase)val).InteractLabel = item.InteractLabel;
		val.isADoor = item.isADoor;
		val.OnDoorEnter = new UnityEvent();
		((InteractableBase)val).Activate();
		return val;
	}

	public static TransitionPoint CreateTransitionPoint(TransitionPointInfo item, string sceneName)
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Expected O, but got Unknown
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_0040: Expected O, but got Unknown
		//IL_004e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0055: Expected O, but got Unknown
		//IL_0099: Unknown result type (might be due to invalid IL or missing references)
		//IL_009e: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b7: Expected O, but got Unknown
		//IL_0119: Unknown result type (might be due to invalid IL or missing references)
		//IL_0120: Expected O, but got Unknown
		//IL_012e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0135: Expected O, but got Unknown
		//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c0: Expected O, but got Unknown
		//IL_02ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d1: Expected O, but got Unknown
		//IL_0223: Unknown result type (might be due to invalid IL or missing references)
		//IL_022d: Expected O, but got Unknown
		GameObject val = new GameObject();
		TransitionPoint val2 = val.AddComponent<TransitionPoint>();
		PlayMakerFSM val3 = (val2.customEntryFSM = val.AddComponent<PlayMakerFSM>());
		((Behaviour)val3).enabled = false;
		Fsm fsm = val3.Fsm;
		FsmState val4 = new FsmState(fsm);
		val4.Name = "Init";
		FsmState val5 = new FsmState(fsm);
		val5.Name = "After Entry";
		fsm.StartState = "Init";
		PatchedFsm.CustomLogicFsm customLogicFsm = new PatchedFsm.CustomLogicFsm(fsm);
		customLogicFsm.action = delegate
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			if (item.forceMemoryZone)
			{
				GameManager.instance.ForceCurrentSceneIsMemory(true);
			}
			if (item.noInputOnStart)
			{
				HeroController.instance.hero_state = (ActorStates)7;
			}
			if (item.doSendEventAfterTransition)
			{
				PlayMakerFSM.BroadcastEvent(TransitionPointInfo.eventName);
			}
			item.afterTransition?.Invoke();
		};
		val4.Transitions = (FsmTransition[])(object)new FsmTransition[1]
		{
			new FsmTransition
			{
				FsmEvent = FsmEvent.GetFsmEvent("FINISH ENTRY"),
				ToFsmState = val5
			}
		};
		val5.Actions = (FsmStateAction[])(object)new FsmStateAction[1] { customLogicFsm };
		fsm.States = (FsmState[])(object)new FsmState[2] { val4, val5 };
		((Behaviour)fsm.FsmComponent).enabled = true;
		PlayMakerFSM val6 = val.AddComponent<PlayMakerFSM>();
		((Behaviour)val6).enabled = false;
		Fsm fsm2 = val6.Fsm;
		fsm2.StartState = "Idle";
		FsmState val7 = new FsmState(fsm2);
		val7.Name = "Idle";
		FsmState val8 = new FsmState(fsm2);
		val8.Name = "After Death";
		PatchedFsm.CustomLogicFsm customLogicFsm2 = new PatchedFsm.CustomLogicFsm(fsm2);
		customLogicFsm2.action = (Action<Fsm>)Delegate.Combine(customLogicFsm2.action, (Action<Fsm>)delegate
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			Color val9 = new Color(0f, 0f, 0f, 0f);
			Color val10 = default(Color);
			((Color)(ref val10))..ctor(0f, 0f, 0f, 0f);
			ScreenFaderUtils.Fade(val9, val10, 0.01f);
			GameCameras.instance.HUDIn();
		});
		val8.Actions = (FsmStateAction[])(object)new FsmStateAction[1] { customLogicFsm2 };
		val7.Transitions = (FsmTransition[])(object)new FsmTransition[1]
		{
			new FsmTransition
			{
				FsmEvent = FsmEvent.GetFsmEvent("HERO RESPAWNING HERE"),
				ToFsmState = val8
			}
		};
		fsm2.States = (FsmState[])(object)new FsmState[2] { val7, val8 };
		((Behaviour)val6).enabled = true;
		if (item.alwaysEnterRight)
		{
			val2.alwaysEnterRight = true;
			val2.alwaysEnterLeft = false;
		}
		else
		{
			val2.alwaysEnterLeft = true;
			val2.alwaysEnterRight = false;
		}
		if (item.doCreateRespawnMarker)
		{
			RespawnMarker obj = val.AddComponent<RespawnMarker>();
			obj.overrideMapZone = new OverrideMapZone();
			obj.customWakeUp = true;
			((Component)val2).gameObject.tag = "RespawnPoint";
			AddRespawnMarkerToTeleportMap(sceneName, item.gateName);
		}
		val2.respawnMarker = val.AddComponent<HazardRespawnMarker>();
		val2.targetScene = item.targetScene;
		val2.dontWalkOutOfDoor = item.dontWalkOutOfDoor;
		val2.hardLandOnExit = item.hardLandOnExit;
		val2.entryPoint = item.entryPoint;
		((InteractableBase)val2).InteractLabel = item.InteractLabel;
		val2.isADoor = item.isADoor;
		val2.OnDoorEnter = new UnityEvent();
		((InteractableBase)val2).Activate();
		return val2;
	}

	public static CameraLockArea CreateCameraLock(Scene scene)
	{
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Expected O, but got Unknown
		//IL_0011: 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)
		GameObject val = new GameObject("CameraLockArea");
		SceneManager.MoveGameObjectToScene(val, scene);
		BoxCollider2D obj = val.AddComponent<BoxCollider2D>();
		((Collider2D)obj).isTrigger = true;
		obj.size = new Vector2(10f, 10f);
		return val.AddComponent<CameraLockArea>();
	}

	public static void AddRespawnMarkerToTeleportMap(string sceneName, string respawnMarkerName)
	{
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Expected O, but got Unknown
		Dictionary<string, SceneInfo> teleportMap = SceneTeleportMap.GetTeleportMap();
		if (!teleportMap.TryGetValue(sceneName, out var _))
		{
			teleportMap.Add(sceneName, new SceneInfo());
		}
		teleportMap.TryGetValue(sceneName, out var value2);
		value2.RespawnPoints.Add(respawnMarkerName);
	}

	public static void InitModRespawnMarkers()
	{
		AddRespawnMarkerToTeleportMap("GG_Pharloom_Atrium", "Death Respawn Marker");
		AddRespawnMarkerToTeleportMap("GG_Pharloom_Atrium", "RestBench(Clone)");
		AddRespawnMarkerToTeleportMap("GG_Pharloom_Hall_Of_Gods", "RestBench(Clone)");
		AddRespawnMarkerToTeleportMap("Abyss_05", "Death Respawn Marker_Mod");
	}

	public void Activate(Scene scene)
	{
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0080: Unknown result type (might be due to invalid IL or missing references)
		//IL_0085: Unknown result type (might be due to invalid IL or missing references)
		//IL_0090: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bf: Expected O, but got Unknown
		GameObject[] rootGameObjects = ((Scene)(ref scene)).GetRootGameObjects();
		foreach (GameObject val in rootGameObjects)
		{
			if (((Object)val).name.StartsWith("CameraLock"))
			{
				val.AddComponent<CameraLockArea>();
				val.GetComponent<BoxCollider2D>();
			}
		}
		foreach (TransitionPointInfo transitionGate in TransitionGates)
		{
			CreateGate(transitionGate, scene);
		}
		if (!isSkongScene)
		{
			GameObject val2 = new GameObject("TileMap")
			{
				tag = "TileMap"
			};
			tk2dTileMap obj = val2.AddComponent<tk2dTileMap>();
			obj.width = (int)tileMapVector.x;
			obj.height = (int)tileMapVector.y;
			SceneManager.MoveGameObjectToScene(val2, scene);
		}
		isSceneActive = true;
	}
}
public class EnemyHp
{
	public class PhaseHp
	{
		public Dictionary<string, int> hpDict = new Dictionary<string, int>();

		public int hp => hpDict[BossSequence.currentDifficultMode];

		public PhaseHp(int attuned, int ascended, int radiant)
		{
			hpDict["Attuned"] = attuned;
			hpDict["Ascended"] = ascended;
			hpDict["Radiant"] = radiant;
		}
	}

	public static Dictionary<string, EnemyHp> enemies = new Dictionary<string, EnemyHp>
	{
		{
			"Moss Mother",
			new EnemyHp(new PhaseHp[4]
			{
				new PhaseHp(100, 100, 100),
				new PhaseHp(100, 100, 100),
				new PhaseHp(150, 150, 150),
				new PhaseHp(100, 100, 100)
			})
		},
		{
			"Moss Mother Double 1",
			new EnemyHp(new PhaseHp[4]
			{
				new PhaseHp(100, 100, 100),
				new PhaseHp(150, 150, 150),
				new PhaseHp(200, 200, 200),
				new PhaseHp(100, 100, 100)
			})
		},
		{
			"Moss Mother Double 2",
			new EnemyHp(new PhaseHp[4]
			{
				new PhaseHp(100, 100, 100),
				new PhaseHp(150, 150, 150),
				new PhaseHp(200, 200, 200),
				new PhaseHp(100, 100, 100)
			})
		},
		{
			"Bell Beast",
			new EnemyHp(new PhaseHp[3]
			{
				new PhaseHp(200, 200, 200),
				new PhaseHp(250, 250, 250),
				new PhaseHp(150, 150, 150)
			})
		},
		{
			"Fourth Chorus",
			new EnemyHp(new PhaseHp[4]
			{
				new PhaseHp(250, 250, 250),
				new PhaseHp(250, 250, 250),
				new PhaseHp(250, 250, 250),
				new PhaseHp(250, 250, 250)
			})
		},
		{
			"Great Conchflies",
			new EnemyHp(new PhaseHp[2]
			{
				new PhaseHp(500, 500, 500),
				new PhaseHp(300, 300, 300)
			})
		},
		{
			"Lace in Deep Docks",
			new EnemyHp(new PhaseHp[2]
			{
				new PhaseHp(600, 600, 600),
				new PhaseHp(300, 300, 300)
			})
		},
		{
			"The Last Judge",
			new EnemyHp(new PhaseHp[3]
			{
				new PhaseHp(500, 500, 500),
				new PhaseHp(500, 500, 500),
				new PhaseHp(400, 400, 400)
			})
		},
		{
			"Phantom",
			new EnemyHp(new PhaseHp[3]
			{
				new PhaseHp(300, 300, 300),
				new PhaseHp(400, 400, 400),
				new PhaseHp(300, 300, 300)
			})
		},
		{
			"Moorwing",
			new EnemyHp(new PhaseHp[2]
			{
				new PhaseHp(500, 500, 500),
				new PhaseHp(300, 300, 300)
			})
		},
		{
			"Savage Beastfly in Chapel of The Beast",
			new EnemyHp(new PhaseHp[3]
			{
				new PhaseHp(500, 500, 500),
				new PhaseHp(350, 350, 350),
				new PhaseHp(250, 250, 250)
			})
		},
		{
			"Beastfly",
			new EnemyHp(new PhaseHp[1]
			{
				new PhaseHp(18, 18, 18)
			})
		},
		{
			"Kilik",
			new EnemyHp(new PhaseHp[1]
			{
				new PhaseHp(26, 26, 26)
			})
		},
		{
			"Vicious Caranid",
			new EnemyHp(new PhaseHp[1]
			{
				new PhaseHp(50, 50, 50)
			})
		},
		{
			"Sister Splinter",
			new EnemyHp(new PhaseHp[3]
			{
				new PhaseHp(200, 200, 200),
				new PhaseHp(400, 400, 400),
				new PhaseHp(200, 200, 200)
			})
		},
		{
			"Splinterbark",
			new EnemyHp(new PhaseHp[1]
			{
				new PhaseHp(18, 18, 18)
			})
		},
		{
			"Skull Tyrant",
			new EnemyHp(new PhaseHp[1]
			{
				new PhaseHp(800, 800, 800)
			})
		},
		{
			"Widow",
			new EnemyHp(new PhaseHp[3]
			{
				new PhaseHp(300, 300, 300),
				new PhaseHp(400, 400, 400),
				new PhaseHp(550, 550, 550)
			})
		},
		{
			"Cogwork Dancers",
			new EnemyHp(new PhaseHp[4]
			{
				new PhaseHp(450, 450, 450),
				new PhaseHp(450, 450, 450),
				new PhaseHp(450, 450, 450),
				new PhaseHp(150, 150, 150)
			})
		},
		{
			"Disgraced Chef Lugoli",
			new EnemyHp(new PhaseHp[2]
			{
				new PhaseHp(400, 400, 400),
				new PhaseHp(350, 350, 350)
			})
		},
		{
			"Father of the Flame",
			new EnemyHp(new PhaseHp[6]
			{
				new PhaseHp(100, 100, 100),
				new PhaseHp(100, 100, 100),
				new PhaseHp(100, 100, 100),
				new PhaseHp(100, 100, 100),
				new PhaseHp(200, 200, 200),
				new PhaseHp(250, 250, 250)
			})
		},
		{
			"First Sinner",
			new EnemyHp(new PhaseHp[3]
			{
				new PhaseHp(300, 300, 300),
				new PhaseHp(500, 500, 500),
				new PhaseHp(500, 500, 500)
			})
		},
		{
			"Forebrothers_Sigins",
			new EnemyHp(new PhaseHp[4]
			{
				new PhaseHp(100, 100, 100),
				new PhaseHp(300, 300, 300),
				new PhaseHp(300, 300, 300),
				new PhaseHp(300, 300, 300)
			})
		},
		{
			"Forebrothers_Gron",
			new EnemyHp(new PhaseHp[1]
			{
				new PhaseHp(650, 650, 650)
			})
		},
		{
			"Flintstone Flyer",
			new EnemyHp(new PhaseHp[1]
			{
				new PhaseHp(36, 36, 36)
			})
		},
		{
			"Smokerock Sifter",
			new EnemyHp(new PhaseHp[1]
			{
				new PhaseHp(47, 47, 47)
			})
		},
		{
			"Garmond & Zaza",
			new EnemyHp(new PhaseHp[1]
			{
				new PhaseHp(500, 500, 500)
			})
		},
		{
			"Voltvyrm",
			new EnemyHp(new PhaseHp[3]
			{
				new PhaseHp(300, 300, 300),
				new PhaseHp(200, 200, 200),
				new PhaseHp(200, 200, 200)
			})
		},
		{
			"Groal the Great",
			new EnemyHp(new PhaseHp[2]
			{
				new PhaseHp(450, 450, 450),
				new PhaseHp(350, 350, 350)
			})
		},
		{
			"Lace in the Cradle",
			new EnemyHp(new PhaseHp[3]
			{
				new PhaseHp(500, 500, 500),
				new PhaseHp(400, 400, 400),
				new PhaseHp(200, 200, 200)
			})
		},
		{
			"Raging Conchfly",
			new EnemyHp(new PhaseHp[2]
			{
				new PhaseHp(700, 700, 700),
				new PhaseHp(400, 400, 400)
			})
		},
		{
			"Savage Beastfly in Far Fields",
			new EnemyHp(new PhaseHp[3]
			{
				new PhaseHp(500, 500, 500),
				new PhaseHp(500, 500, 500),
				new PhaseHp(300, 300, 300)
			})
		},
		{
			"Tarmite",
			new EnemyHp(new PhaseHp[1]
			{
				new PhaseHp(34, 34, 34)
			})
		},
		{
			"Second Sentiel",
			new EnemyHp(new PhaseHp[2]
			{
				new PhaseHp(700, 700, 700),
				new PhaseHp(600, 600, 600)
			})
		},
		{
			"Shakra",
			new EnemyHp(new PhaseHp[1]
			{
				new PhaseHp(700, 700, 700)
			})
		},
		{
			"The Unravelled",
			new EnemyHp(new PhaseHp[3]
			{
				new PhaseHp(400, 400, 400),
				new PhaseHp(400, 400, 400),
				new PhaseHp(200, 200, 200)
			})
		},
		{
			"Trobbio",
			new EnemyHp(new PhaseHp[2]
			{
				new PhaseHp(700, 700, 700),
				new PhaseHp(500, 500, 500)
			})
		},
		{
			"Palestag",
			new EnemyHp(new PhaseHp[2]
			{
				new PhaseHp(250, 250, 250),
				new PhaseHp(250, 250, 250)
			})
		},
		{
			"Bell Eater",
			new EnemyHp(new PhaseHp[4]
			{
				new PhaseHp(400, 400, 400),
				new PhaseHp(400, 400, 400),
				new PhaseHp(300, 300, 300),
				new PhaseHp(200, 200, 200)
			})
		},
		{
			"Crawfather",
			new EnemyHp(new PhaseHp[2]
			{
				new PhaseHp(900, 900, 900),
				new PhaseHp(700, 700, 700)
			})
		},
		{
			"Pin Wielder Craw",
			new EnemyHp(new PhaseHp[1]
			{
				new PhaseHp(66, 66, 66)
			})
		},
		{
			"Dagger Craw",
			new EnemyHp(new PhaseHp[1]
			{
				new PhaseHp(66, 66, 66)
			})
		},
		{
			"Tinie Craw",
			new EnemyHp(new PhaseHp[1]
			{
				new PhaseHp(55, 55, 55)
			})
		},
		{
			"Crust King Khann",
			new EnemyHp(new PhaseHp[3]
			{
				new PhaseHp(600, 600, 600),
				new PhaseHp(600, 600, 600),
				new PhaseHp(450, 450, 450)
			})
		},
		{
			"Gurr the Outcast",
			new EnemyHp(new PhaseHp[3]
			{
				new PhaseHp(400, 400, 400),
				new PhaseHp(350, 350, 350),
				new PhaseHp(250, 250, 250)
			})
		},
		{
			"Lost Garmond",
			new EnemyHp(new PhaseHp[1]
			{
				new PhaseHp(900, 900, 900)
			})
		},
		{
			"Nyleth",
			new EnemyHp(new PhaseHp[2]
			{
				new PhaseHp(625, 625, 625),
				new PhaseHp(625, 625, 625)
			})
		},
		{
			"Watcher at the Edge",
			new EnemyHp(new PhaseHp[2]
			{
				new PhaseHp(450, 450, 450),
				new PhaseHp(450, 450, 450)
			})
		},
		{
			"Pinstress",
			new EnemyHp(new PhaseHp[2]
			{
				new PhaseHp(500, 500, 500),
				new PhaseHp(500, 500, 500)
			})
		},
		{
			"Plasmified Zango",
			new EnemyHp(new PhaseHp[5]
			{
				new PhaseHp(200, 200, 200),
				new PhaseHp(200, 200, 200),
				new PhaseHp(200, 200, 200),
				new PhaseHp(200, 200, 200),
				new PhaseHp(200, 200, 200)
			})
		},
		{
			"Shrine Guardian Seth",
			new EnemyHp(new PhaseHp[3]
			{
				new PhaseHp(200, 200, 200),
				new PhaseHp(550, 550, 550),
				new PhaseHp(500, 500, 500)
			})
		},
		{
			"Skarrsinger Karmelita",
			new EnemyHp(new PhaseHp[3]
			{
				new PhaseHp(600, 600, 600),
				new PhaseHp(600, 600, 600),
				new PhaseHp(400, 400, 400)
			})
		},
		{
			"Clover Dancers",
			new EnemyHp(new PhaseHp[2]
			{
				new PhaseHp(600, 600, 600),
				new PhaseHp(600, 600, 600)
			})
		},
		{
			"Tormented Trobbio",
			new EnemyHp(new PhaseHp[3]
			{
				new PhaseHp(150, 150, 150),
				new PhaseHp(800, 800, 800),
				new PhaseHp(550, 550, 550)
			})
		},
		{
			"Grand Mother Silk",
			new EnemyHp(new PhaseHp[6]
			{
				new PhaseHp(150, 150, 150),
				new PhaseHp(250, 250, 250),
				new PhaseHp(300, 300, 300),
				new PhaseHp(200, 200, 200),
				new PhaseHp(300, 300, 300),
				new PhaseHp(400, 400, 400)
			})
		},
		{
			"Lost Lace",
			new EnemyHp(new PhaseHp[4]
			{
				new PhaseHp(400, 400, 400),
				new PhaseHp(500, 500, 500),
				new PhaseHp(700, 700, 700),
				new PhaseHp(600, 600, 600)
			})
		}
	};

	public Dictionary<string, int> hpFullDict = new Dictionary<string, int>
	{
		{ "Attuned", 0 },
		{ "Ascended", 0 },
		{ "Radiant", 0 }
	};

	public PhaseHp[] phases;

	public EnemyHp(PhaseHp[] phases)
	{
		this.phases = phases;
		foreach (PhaseHp phaseHp in phases)
		{
			hpFullDict["Attuned"] += phaseHp.hpDict["Attuned"];
			hpFullDict["Ascended"] += phaseHp.hpDict["Ascended"];
			hpFullDict["Radiant"] += phaseHp.hpDict["Radiant"];
		}
	}
}
public class TransitionPointInfo
{
	public string gateName;

	public Vector3 position;

	public string targetScene;

	public string entryPoint;

	public PromptLabels InteractLabel;

	public bool isADoor;

	public bool isOneTimeTransition;

	public bool dontWalkOutOfDoor;

	public bool hardLandOnExit;

	public bool noInputOnStart;

	public bool alwaysEnterRight;

	public bool forceMemoryZone;

	public Action afterTransition;

	public bool doSendEventAfterTransition;

	public bool doCreateRespawnMarker;

	public static string eventName = "HORNET TRANSITION DONE MOD";

	public TransitionPointInfo(string gateName, Vector3 position, string targetScene, string entryPoint, PromptLabels InteractLabel = (PromptLabels)3, bool isADoor = false, bool isOneTimeTransition = false, bool dontWalkOutOfDoor = false, bool hardLandOnExit = false, bool noInputOnStart = false, bool alwaysEnterRight = true, bool forceMemoryZone = true, Action afterTransition = null, bool doSendEventAfterTransition = true, bool doCreateRespawnMarker = true, bool doCreateHazardRespawnMarker = true)
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		this.gateName = gateName;
		this.position = position;
		this.targetScene = targetScene;
		this.entryPoint = entryPoint;
		this.InteractLabel = InteractLabel;
		this.isADoor = isADoor;
		this.isOneTimeTransition = isOneTimeTransition;
		this.dontWalkOutOfDoor = dontWalkOutOfDoor;
		this.hardLandOnExit = hardLandOnExit;
		this.noInputOnStart = noInputOnStart;
		this.alwaysEnterRight = alwaysEnterRight;
		this.forceMemoryZone = forceMemoryZone;
		this.afterTransition = afterTransition;
		this.doSendEventAfterTransition = doSendEventAfterTransition;
		this.doCreateRespawnMarker = doCreateRespawnMarker;
	}
}
namespace Gods_Of_Pharloom;

public class ActiveCameraLockOnEnter : MonoBehaviour
{
	private void OnTriggerEnter2D(Collider2D collider)
	{
		BoxCollider2D component = ((Component)HeroController.instance).gameObject.GetComponent<BoxCollider2D>();
		if ((Object)(object)collider == (Object)(object)component)
		{
			_ = GameCameras.instance.cameraController;
			((Behaviour)((Component)this).GetComponent<CameraLockArea>()).enabled = true;
		}
	}

	private void OnTriggerStay2D(Collider2D collider)
	{
		BoxCollider2D component = ((Component)HeroController.instance).gameObject.GetComponent<BoxCollider2D>();
		if ((Object)(object)collider == (Object)(object)component)
		{
			_ = GameCameras.instance.cameraController;
			((Behaviour)((Component)this).GetComponent<CameraLockArea>()).enabled = true;
		}
	}

	private void OnTriggerExit2D(Collider2D collider)
	{
		BoxCollider2D component = ((Component)HeroController.instance).gameObject.GetComponent<BoxCollider2D>();
		if ((Object)(object)collider == (Object)(object)component)
		{
			_ = GameCameras.instance.cameraController;
			((Behaviour)((Component)this).GetComponent<CameraLockArea>()).enabled = false;
		}
	}
}
[BepInPlugin("bepinex.plugin.test", "GodsOfPharloom", "0.0.1.3")]
public class GodsOfPharloomMod : BaseUnityPlugin
{
	public static Action<Scene, Scene> afterSceneLoadedGetScenes;

	public static Action afterSceneLoaded;

	public static Action afterSceneActivated;

	public static string previousSceneName;

	public static Scene? lastLoadedScene = null;

	public static MethodInfo RecordBeginTime = AccessTools.Method(typeof(SceneLoad), "RecordBeginTime", (Type[])null, (Type[])null);

	public static MethodInfo RecordEndTime = AccessTools.Method(typeof(SceneLoad), "RecordEndTime", (Type[])null, (Type[])null);

	public static MethodInfo LocalTryClearMemory = AccessTools.Method(typeof(SceneLoad), "LocalTryClearMemory", (Type[])null, (Type[])null);

	public static GodsOfPharloomMod instance;

	public static string currentSceneName;

	public static Scene currentScene;

	private string pathToModData = Paths.ConfigPath + "/GodsOfPharloomData.dat";

	public static object obj;

	private static string[] assetBundleNames = new string[4] { "gg_pharloom_atrium", "gg_pharloom_hall_of_gods", "gg_rest_scene", "gg_resources" };

	public static List<AssetBundle> assetBundles = new List<AssetBundle>();

	public static List<CustomScene> customScenes = new List<CustomScene>();

	public static ManualLogSource Log;

	public static MethodInfo HeroController_SetState = AccessTools.Method(typeof(HeroController), "SetState", (Type[])null, (Type[])null);

	[HarmonyPrefix]
	[HarmonyPatch(typeof(SceneLoad), "Begin")]
	private static bool Prefix(SceneLoad __instance)
	{
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		currentSceneName = __instance.TargetSceneName;
		((MonoBehaviour)((object)__instance).GetType().GetField("runner", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).GetValue(__instance)).StartCoroutine(BeginRoutine_Patched(__instance));
		return false;
	}

	private static IEnumerator BeginRoutine_Patched(SceneLoad __instance)
	{
		Log.LogInfo((object)"PAAAAAAAAATTTTTCCCCHHHEEEDDD");
		FieldInfo operationHandle = ((object)__instance).GetType().GetField("operationHandle", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		FieldInfo _tempOps = typeof(SceneLoad).GetField("_tempOps", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
		FieldInfo runner = ((object)__instance).GetType().GetField("runner", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		Log.LogInfo((object)"PAAAAAAAAATTTTTCCCCHHHEEEDDD2");
		Func<MethodInfo, object[], object> InvokeMethod = (MethodInfo method, object[] obj) => method.Invoke(__instance, obj);
		string address = "Scenes/" + __instance.SceneLoadInfo.SceneName;
		CustomScene scene = customScenes.Find((CustomScene item) => item.sceneName == __instance.TargetSceneName);
		int sceneTypeTo = ((scene != null) ? (scene.isSkongScene ? 1 : 2) : 0);
		scene?.BeforeSceneLoaded?.Invoke();
		bool wasPreloaded = false;
		AsyncOperationHandle<SceneInstance>? preLoadOperation = null;
		SceneAdditiveLoadConditional.LoadInSequence = true;
		AsyncOperation op = null;
		lastLoadedScene = null;
		if (sceneTypeTo == 0 || sceneTypeTo == 1)
		{
			preLoadOperation = ScenePreloader.TakeSceneLoadOperation(address, (LoadSceneMode)1);
			wasPreloaded = preLoadOperation.HasValue;
		}
		else
		{
			op = SceneManager.LoadSceneAsync(scene.sceneName, (LoadSceneMode)1);
			op.allowSceneActivation = false;
		}
		InvokeMethod(RecordBeginTime, new object[1] { (object)(Phases)0 });
		while (!__instance.IsFetchAllowed)
		{
			yield return null;
		}
		Log.LogInfo((object)"PAAAAAAAAATTTTTCCCCHHHEEEDDD3");
		InvokeMethod(RecordEndTime, new object[1] { (object)(Phases)0 });
		bool hasClearedMemory = false;
		if (SceneLoad.IsClearMemoryRequired())
		{
			GameManager.IsCollectingGarbage = true;
			InvokeMethod(RecordBeginTime, new object[1] { (object)(Phases)1 });
			yield return InvokeMethod(LocalTryClearMemory, new object[2] { true, false });
			hasClearedMemory = true;
			InvokeMethod(RecordEndTime, new object[1] { (object)(Phases)1 });
		}
		InvokeMethod(RecordBeginTime, new object[1] { (object)(Phases)2 });
		int num = __instance.SceneLoadInfo.AsyncPriority;
		Scene activeScene = SceneManager.GetActiveScene();
		previousSceneName = ((Scene)(ref activeScene)).name;
		if (sceneTypeTo == 0 || sceneTypeTo == 1)
		{
			if (CheatManager.OverrideSceneLoadPriority)
			{
				num = CheatManager.SceneLoadPriority;
			}
			if (wasPreloaded)
			{
				operationHandle.SetValue(__instance, preLoadOperation.Value);
			}
			else if (__instance.SceneLoadInfo.SceneResourceLocation != null)
			{
				operationHandle.SetValue(__instance, Addressables.LoadSceneAsync(__instance.SceneLoadInfo.SceneResourceLocation, (LoadSceneMode)1, false, num));
			}
			else
			{
				operationHandle.SetValue(__instance, Addressables.LoadSceneAsync((object)address, (LoadSceneMode)1, false, num, (SceneReleaseMode)0));
			}
			yield return (AsyncOperationHandle<SceneInstance>)operationHandle.GetValue(__instance);
		}
		if (__instance.TargetSceneName != "Opening_Sequence")
		{
			while (!Preload.isInitialized)
			{
				yield return null;
			}
		}
		SceneInstance result;
		if (sceneTypeTo == 1 || sceneTypeTo == 2)
		{
			if (sceneTypeTo == 2)
			{
				op.allowSceneActivation = true;
				yield return op;
				currentScene = SceneManager.GetSceneAt(SceneManager.sceneCount - 1);
			}
			else
			{
				result = ((AsyncOperationHandle<SceneInstance>)operationHandle.GetValue(__instance)).Result;
				currentScene = ((SceneInstance)(ref result)).Scene;
			}
			scene.Activate(currentScene);
			scene.AfterSceneLoaded?.Invoke(currentScene);
			while (!scene.isSceneActive)
			{
				yield return null;
			}
			scene.isSceneActive = false;
			scene.isPreloading = false;
			Log.LogInfo((object)"Activated2");
		}
		afterSceneLoaded?.Invoke();
		Log.LogInfo((object)"Activated3");
		InvokeMethod(RecordEndTime, new object[1] { (object)(Phases)2 });
		Log.LogInfo((object)"PAAAAAAAAATTTTTCCCCHHHEEEDD4");
		FetchCompleteDelegate val = (FetchCompleteDelegate)AccessTools.Field(typeof(SceneLoad), "FetchComplete").GetValue(__instance);
		if (val != null)
		{
			try
			{
				val.Invoke();
			}
			catch (Exception ex)
			{
				Debug.LogError((object)"Exception in responders to SceneLoad.FetchComplete. Attempting to continue load regardless.");
				CheatManager.LastErrorText = ex.ToString();
				Debug.LogException(ex);
			}
		}
		Log.LogInfo((object)"PAAAAAAAAATTTTTCCCCHHHEEEDDD4.1");
		InvokeMethod(RecordBeginTime, new object[1] { (object)(Phases)3 });
		if (!wasPreloaded && ScenePreloader.HasPendingOperations)
		{
			yield return ((MonoBehaviour)runner.GetValue(__instance)).StartCoroutine(ScenePreloader.ForceEndPendingOperations());
		}
		while (!__instance.IsActivationAllowed)
		{
			yield return null;
		}
		Log.LogInfo((object)"PAAAAAAAAATTTTTCCCCHHHEEEDDD4.1.1");
		SceneAdditiveLoadConditional.Unload(SceneManager.GetActiveScene(), (List<AsyncOperationHandle<SceneInstance>>)_tempOps.GetValue(null));
		Log.LogInfo((object)"PAAAAAAAAATTTTTCCCCHHHEEEDDD4.1.2");
		InvokeMethod(RecordEndTime, new object[1] { (object)(Phases)3 });
		InvokeMethod(RecordBeginTime, new object[1] { (object)(Phases)4 });
		Log.LogInfo((object)"PAAAAAAAAATTTTTCCCCHHHEEEDDD4.2");
		WillActivateDelegate val2 = (WillActivateDelegate)AccessTools.Field(typeof(SceneLoad), "WillActivate").GetValue(__instance);
		if (val2 != null)
		{
			try
			{
				val2.Invoke();
			}
			catch (Exception ex2)
			{
				Debug.LogError((object)"Exception in responders to SceneLoad.WillActivate. Attempting to continue load regardless.");
				CheatManager.LastErrorText = ex2.ToString();
				Debug.LogException(ex2);
			}
		}
		Log.LogInfo((object)"PAAAAAAAAATTTTTCCCCHHHEEEDDD5");
		if (sceneTypeTo == 0 || sceneTypeTo == 1)
		{
			if (((AsyncOperationHandle<SceneInstance>)operationHandle.GetValue(__instance)).OperationException != null)
			{
				Debug.LogError((object)"Exception in scene load OperationHandle:");
				CheatManager.LastErrorText = ((AsyncOperationHandle<SceneInstance>)operationHandle.GetValue(__instance)).OperationException.ToString();
				Debug.LogException(((AsyncOperationHandle<SceneInstance>)operationHandle.GetValue(__instance)).OperationException);
			}
			result = ((AsyncOperationHandle<SceneInstance>)operationHandle.GetValue(__instance)).Result;
			yield return ((SceneInstance)(ref result)).ActivateAsync();
		}
		if (sceneTypeTo == 1 || sceneTypeTo == 2)
		{
			scene.AfterSceneActivated?.Invoke(currentScene);
		}
		afterSceneActivated?.Invoke();
		InvokeMethod(RecordEndTime, new object[1] { (object)(Phases)4 });
		ActivationCompleteDelegate val3 = (ActivationCompleteDelegate)AccessTools.Field(typeof(SceneLoad), "ActivationComplete").GetValue(__instance);
		if (val3 != null)
		{
			try
			{
				val3.Invoke();
			}
			catch (Exception ex3)
			{
				Debug.LogError((object)"Exception in responders to SceneLoad.ActivationComplete. Attempting to continue load regardless.");
				CheatManager.LastErrorText = ex3.ToString();
				Debug.LogException(ex3);
			}
		}
		Log.LogInfo((object)"PAAAAAAAAATTTTTCCCCHHHEEEDDD6");
		foreach (AsyncOperationHandle<SceneInstance> item in (List<AsyncOperationHandle<SceneInstance>>)_tempOps.GetValue(null))
		{
			yield return item;
		}
		((List<AsyncOperationHandle<SceneInstance>>)_tempOps.GetValue(null)).Clear();
		List<AsyncOperation> _assetUnloadOps = (List<AsyncOperation>)((object)__instance).GetType().GetField("_assetUnloadOps", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic).GetValue(__instance);
		Log.LogInfo((object)"PAAAAAAAAATTTTTCCCCHHHEEEDDD7");
		while (_assetUnloadOps.Count > 0)
		{
			int index = _assetUnloadOps.Count - 1;
			AsyncOperation assetUnloadOp = _assetUnloadOps[index];
			_assetUnloadOps.RemoveAt(index);
			if (assetUnloadOp != null && !assetUnloadOp.isDone)
			{
				float t = 5f;
				while (!assetUnloadOp.isDone && t > 0f)
				{
					t -= Time.deltaTime;
					yield return null;
				}
				if (!assetUnloadOp.isDone)
				{
					Debug.LogError((object)"Timed out while waiting for asset unload.");
				}
			}
		}
		Log.LogInfo((object)"PAAAAAAAAATTTTTCCCCHHHEEEDDD7.1");
		if (__instance.IsUnloadAssetsRequired || SceneLoad.IsClearMemoryRequired())
		{
			GameManager.IsCollectingGarbage = true;
			InvokeMethod(RecordBeginTime, new object[1] { (object)(Phases)5 });
			yield return SceneLoad.TryClearMemory(!hasClearedMemory, true);
			InvokeMethod(RecordEndTime, new object[1] { (object)(Phases)5 });
		}
		else if (__instance.IsGarbageCollectRequired)
		{
			GameManager.IsCollectingGarbage = true;
			InvokeMethod(RecordBeginTime, new object[1] { (object)(Phases)6 });
			GCManager.Collect();
			InvokeMethod(RecordEndTime, new object[1] { (object)(Phases)6 });
		}
		GameManager.IsCollectingGarbage = false;
		CompleteDelegate val4 = (CompleteDelegate)AccessTools.Field(typeof(SceneLoad), "Complete").GetValue(__instance);
		if (val4 != null)
		{
			try
			{
				val4.Invoke();
			}
			catch (Exception ex4)
			{
				Debug.LogError((object)"Exception in responders to SceneLoad.Complete. Attempting to continue load regardless.");
				CheatManager.LastErrorText = ex4.ToString();
				Debug.LogException(ex4);
			}
		}
		Log.LogInfo((object)"PAAAAAAAAATTTTTCCCCHHHEEEDDD8");
		InvokeMethod(RecordBeginTime, new object[1] { (object)(Phases)7 });
		yield return null;
		InvokeMethod(RecordEndTime, new object[1] { (object)(Phases)7 });
		StartCalledDelegate val5 = (StartCalledDelegate)AccessTools.Field(typeof(SceneLoad), "StartCalled").GetValue(__instance);
		if (val5 != null)
		{
			try
			{
				val5.Invoke();
			}
			catch (Exception ex5)
			{
				Debug.LogError((object)"Exception in responders to SceneLoad.StartCalled. Attempting to continue load regardless.");
				CheatManager.LastErrorText = ex5.ToString();
				Debug.LogException(ex5);
			}
		}
		if (SceneAdditiveLoadConditional.ShouldLoadBoss)
		{
			InvokeMethod(RecordBeginTime, new object[1] { (object)(Phases)8 });
			yield return ((MonoBehaviour)runner.GetValue(__instance)).StartCoroutine(SceneAdditiveLoadConditional.LoadAll());
			InvokeMethod(RecordEndTime, new object[1] { (object)(Phases)8 });
			try
			{
				BossLoadCompleteDelegate val6 = (BossLoadCompleteDelegate)AccessTools.Field(typeof(SceneLoad), "BossLoaded").GetValue(__instance);
				if (val6 != null)
				{
					val6.Invoke();
				}
				if (Object.op_Implicit((Object)(object)GameManager.instance))
				{
					GameManager.instance.LoadedBoss();
				}
			}
			catch (Exception ex6)
			{
				Debug.LogError((object)"Exception in responders to SceneLoad.BossLoaded. Attempting to continue load regardless.");
				CheatManager.LastErrorText = ex6.ToString();
				Debug.LogException(ex6);
			}
		}
		Log.LogInfo((object)"PAAAAAAAAATTTTTCCCCHHHEEEDDD9");
		try
		{
			ScenePreloader.Cleanup();
		}
		catch (Exception ex7)
		{
			Debug.LogError((object)"Exception in responders to ScenePreloader.Cleanup. Attempting to continue load regardless.");
			CheatManager.LastErrorText = ex7.ToString();
			Debug.LogException(ex7);
		}
		((object)__instance).GetType().GetProperty("IsFinished", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).SetValue(__instance, true);
		FinishDelegate val7 = (FinishDelegate)AccessTools.Field(typeof(SceneLoad), "Finish").GetValue(__instance);
		Log.LogInfo((object)"PAAAAAAAAATTTTTCCCCHHHEEEDDD10");
		if (val7 != null)
		{
			try
			{
				val7.Invoke();
			}
			catch (Exception ex8)
			{
				Debug.LogError((object)"Exception in responders to SceneLoad.Finish. Attempting to continue load regardless.");
				CheatManager.LastErrorText = ex8.ToString();
				Debug.LogException(ex8);
			}
		}
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(PlayMakerFSM), "Awake")]
	private static void PlayMakerPatch_Postfix(PlayMakerFSM __instance)
	{
		//IL_0023: 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_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)
		GameObject gameObject = ((Component)__instance).gameObject;
		int hashCode = ((Object)gameObject.gameObject).name.GetHashCode();
		int hashCode2 = __instance.FsmName.GetHashCode();
		Scene scene = gameObject.scene;
		int hashCode3 = ((Scene)(ref scene)).name.GetHashCode();
		ManualLogSource log = Log;
		string[] obj = new string[5]
		{
			((Object)((Component)__instance).gameObject).name,
			"     ",
			__instance.FsmName,
			"        ",
			null
		};
		scene = ((Component)__instance).gameObject.scene;
		obj[4] = ((Scene)(ref scene)).name;
		log.LogInfo((object)string.Concat(obj));
		int i;
		for (i = 0; i < PatchedFsm.patchedFsms.Length && hashCode3 != PatchedFsm.patchedFsms[i].sceneNameHash; i++)
		{
			if (i == PatchedFsm.patchedFsms.Length - 1)
			{
				return;
			}
		}
		PatchedFsm.FsmPatch[] fsms = PatchedFsm.patchedFsms[i].fsms;
		foreach (PatchedFsm.FsmPatch fsmPatch in fsms)
		{
			if (hashCode == fsmPatch.objNameHash && hashCode2 == fsmPatch.fsmNameHash)
			{
				Log.LogInfo((object)(__instance.FsmName + "YAAAAAAAAAAAAAAAAAY"));
				fsmPatch.method(__instance.Fsm);
				break;
			}
		}
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(SceneParticlesController), "OnPositionedAtHero")]
	private static bool Prefix(SceneParticlesController __instance)
	{
		if (customScenes.Find(delegate(CustomScene item)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			string sceneName = item.sceneName;
			Scene activeScene = SceneManager.GetActiveScene();
			return sceneName == ((Scene)(ref activeScene)).name;
		}) == null)
		{
			return true;
		}
		Log.LogInfo((object)"cleared OnPositionedAtHero");
		return false;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(GameManager), "PlayerDead")]
	public static bool PlayerDead_Prefix(ref float waitTime)
	{
		if (!BossSequence.isInSequence)
		{
			return true;
		}
		waitTime = 0f;
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(ScenePreloader), "SpawnPreloader")]
	public static bool ScenePreloader_Prefix(string sceneName, LoadSceneMode mode)
	{
		if (BossSequence.isInSequence)
		{
			return false;
		}
		return true;
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(HeroController), "Awake")]
	public static void HeroControllerAwake_Postfix()
	{
		if (!Preload.isInitialized)
		{
			Preload.Init();
		}
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(HeroController), "ResetAllCrestState", new Type[] { })]
	public static bool HeroControllerResetAllCrestState_Prefix()
	{
		Log.LogInfo((object)"ResetAllCrestState");
		if (BossSequence.isInSequence && !PlayerData.instance.atBench)
		{
			return false;
		}
		Log.LogInfo((object)"DoResetAllCrestState");
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(HeroController), "ClearEffects")]
	public static bool HeroControllerClearEffects_Prefix()
	{
		Log.LogInfo((object)"ClearEffects");
		if (BossSequence.isInSequence && !PlayerData.instance.atBench)
		{
			return false;
		}
		Log.LogInfo((object)"DoClearEffects");
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(HeroController), "ClearEffectsInstant")]
	public static bool HeroControllerClearEffectsInstant_Prefix()
	{
		Log.LogInfo((object)"ClearEffectsInstant");
		if (BossSequence.isInSequence && !PlayerData.instance.atBench)
		{
			return false;
		}
		Log.LogInfo((object)"DoClearEffectsInstant");
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(HeroController), "ClearEffectsLite")]
	public static bool HeroControllerClearEffectsLite_Prefix()
	{
		Log.LogInfo((object)"ClearEffectsLite");
		if (BossSequence.isInSequence && !PlayerData.instance.atBench)
		{
			return false;
		}
		Log.LogInfo((object)"DoClearEffectsLite");
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(HeroController), "MaxHealth")]
	public static bool HeroControllerMaxHealth_Prefix()
	{
		Log.LogInfo((object)"MaxHealth");
		if (BossSequence.isInSequence && !PlayerData.instance.atBench)
		{
			return false;
		}
		Log.LogInfo((object)"DoMaxHealth");
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(HeroController), "RefillHealthToMax")]
	public static bool HeroControllerRefillHealthToMax_Prefix()
	{
		Log.LogInfo((object)"RefillHealthToMax");
		if (BossSequence.isInSequence && !PlayerData.instance.atBench)
		{
			return false;
		}
		Log.LogInfo((object)"DoRefillHealthToMax");
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(PlayerData), "MaxHealth")]
	public static bool PlayerDataMaxHealth_Prefix()
	{
		Log.LogInfo((object)"MaxHealth");
		if (BossSequence.isInSequence && !PlayerData.instance.atBench)
		{
			return false;
		}
		Log.LogInfo((object)"DoMaxHealth");
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(HealthManager), "ApplyDamageScaling")]
	public static bool HealthManagerApplyDamageScaling_Prefix(HealthManager __instance, HitInstance hitInstance, ref HitInstance __result)
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		if (BossSequence.isInSequence)
		{
			__result = hitInstance;
			return false;
		}
		return true;
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(PlayerData), "get_nailDamage")]
	public static void PlayerDataNailDamage_Postfix(ref int __result)
	{
		if (PlayerDataMod.instance.bindings["Needle Binding"])
		{
			int num = __result;
			if (num > 13)
			{
				num = 13;
				__result = num;
			}
			else
			{
				num = ((num > 9 && num < 14) ? 10 : ((num > 5 && num < 10) ? 7 : ((num <= 3 || num >= 6) ? 1 : 4)));
				__result = num;
			}
		}
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(PlayerData), "TakeHealth")]
	private static bool TakeDamagePatch_Prefix(PlayerData __instance, ref int amount, ref bool hasBlueHealth, ref bool allowFracturedMaskBreak)
	{
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		if (!BossSequence.isInSequence)
		{
			return true;
		}
		BossSequence.hitCounter++;
		if (BossSequence.currentDifficultMode == "Ascended")
		{
			amount *= 2;
			return true;
		}
		if (BossSequence.currentDifficultMode == "Radiant")
		{
			amount = int.MaxValue;
			return true;
		}
		ToolItem fracturedMaskTool = Gameplay.FracturedMaskTool;
		if ((amount >= __instance.health + __instance.healthBlue && !((ToolBase)fracturedMaskTool).IsEquipped) || fracturedMaskTool.SavedData.AmountLeft < 1)
		{
			BossSequence.isHeroDead = true;
			Log.LogInfo((object)"HERO DEAD YOOOOO");
		}
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(SceneAdditiveLoadConditional), "OnEnable")]
	private static bool SceneAdditiveLoadPatch_Prefix(SceneAdditiveLoadConditional __instance)
	{
		//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00de: Expected O, but got Unknown
		//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cb: Expected O, but got Unknown
		//IL_02ef: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f6: Expected O, but got Unknown
		//IL_0445: Unknown result type (might be due to invalid IL or missing references)
		//IL_044c: Expected O, but got Unknown
		//IL_05d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_05e0: Expected O, but got Unknown
		//IL_0682: Unknown result type (might be due to invalid IL or missing references)
		//IL_0689: Expected O, but got Unknown
		//IL_0749: Unknown result type (might be due to invalid IL or missing references)
		//IL_0750: Expected O, but got Unknown
		//IL_07e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_07ec: Expected O, but got Unknown
		if ((BossSequence.isInSequence && ((Object)((Component)__instance).gameObject).name.Contains("Bellway Additive Loader")) || ((Object)((Component)__instance).gameObject).name.Contains("Bell Centipede Loader"))
		{
			Object.Destroy((Object)(object)((Component)__instance).gameObject);
			return false;
		}
		if (BossSequence.isInSequence && ((Object)((Component)__instance).gameObject).name.Contains("Boss Loader"))
		{
			FieldInfo? field = ((object)__instance).GetType().GetField("questTests", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field2 = ((object)__instance).GetType().GetField("tests", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field3 = ((object)__instance).GetType().GetField("doorBlackList", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field4 = ((object)__instance).GetType().GetField("otherLoaderBlacklist", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field5 = ((object)__instance).GetType().GetField("loadAlt", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			((object)__instance).GetType().GetField("_additiveSceneLoads", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
			PlayerDataTest value = new PlayerDataTest();
			field.SetValue(__instance, new QuestTest[0]);
			field2.SetValue(__instance, value);
			field3.SetValue(__instance, new string[0]);
			field4.SetValue(__instance, new SceneAdditiveLoadConditional[0]);
			field5.SetValue(__instance, false);
			return true;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Fourth Chorus"] && ((Object)((Component)__instance).gameObject).name.Contains("Boss Golem Loader"))
		{
			FieldInfo? field6 = ((object)__instance).GetType().GetField("questTests", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field7 = ((object)__instance).GetType().GetField("tests", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field8 = ((object)__instance).GetType().GetField("doorBlackList", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field9 = ((object)__instance).GetType().GetField("otherLoaderBlacklist", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field10 = ((object)__instance).GetType().GetField("loadAlt", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			((object)__instance).GetType().GetField("_additiveSceneLoads", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
			PlayerDataTest value2 = new PlayerDataTest();
			field6.SetValue(__instance, new QuestTest[0]);
			field7.SetValue(__instance, value2);
			field8.SetValue(__instance, new string[0]);
			field9.SetValue(__instance, new SceneAdditiveLoadConditional[0]);
			field10.SetValue(__instance, false);
			return true;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Fourth Chorus"] && ((Object)((Component)__instance).gameObject).name.Contains("Boss Beastfly Loader"))
		{
			Object.Destroy((Object)(object)((Component)__instance).gameObject);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Savage Beastfly in Far Fields"] && ((Object)((Component)__instance).gameObject).name.Contains("Boss Beastfly Loader"))
		{
			FieldInfo? field11 = ((object)__instance).GetType().GetField("questTests", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field12 = ((object)__instance).GetType().GetField("tests", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field13 = ((object)__instance).GetType().GetField("doorBlackList", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field14 = ((object)__instance).GetType().GetField("otherLoaderBlacklist", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field15 = ((object)__instance).GetType().GetField("loadAlt", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			((object)__instance).GetType().GetField("_additiveSceneLoads", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
			PlayerDataTest value3 = new PlayerDataTest();
			field11.SetValue(__instance, new QuestTest[0]);
			field12.SetValue(__instance, value3);
			field13.SetValue(__instance, new string[0]);
			field14.SetValue(__instance, new SceneAdditiveLoadConditional[0]);
			field15.SetValue(__instance, false);
			return true;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Savage Beastfly in Far Fields"] && ((Object)((Component)__instance).gameObject).name.Contains("Boss Golem Loader"))
		{
			Object.Destroy((Object)(object)((Component)__instance).gameObject);
			return false;
		}
		if (BossSequence.isInSequence && ((Object)((Component)__instance).gameObject).name.Contains("Rest Golem Loader"))
		{
			Object.Destroy((Object)(object)((Component)__instance).gameObject);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Shakra"] && ((Object)((Component)__instance).gameObject).name.Contains("Mapper Sparring"))
		{
			FieldInfo? field16 = ((object)__instance).GetType().GetField("questTests", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field17 = ((object)__instance).GetType().GetField("tests", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field18 = ((object)__instance).GetType().GetField("doorBlackList", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field19 = ((object)__instance).GetType().GetField("otherLoaderBlacklist", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field20 = ((object)__instance).GetType().GetField("loadAlt", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			((object)__instance).GetType().GetField("_additiveSceneLoads", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
			PlayerDataTest value4 = new PlayerDataTest();
			field16.SetValue(__instance, new QuestTest[0]);
			field17.SetValue(__instance, value4);
			field18.SetValue(__instance, new string[0]);
			field19.SetValue(__instance, new SceneAdditiveLoadConditional[0]);
			field20.SetValue(__instance, false);
			return true;
		}
		if ((BossSequence.currentSequenceScene == BossScene.bosses["Shakra"] && ((Object)((Component)__instance).gameObject).name.Contains("Boss Scene Loader")) || ((Object)((Component)__instance).gameObject).name.Contains("Caravan Scene Loader"))
		{
			Object.Destroy((Object)(object)((Component)__instance).gameObject);
			return false;
		}
		if ((BossSequence.currentSequenceScene == BossScene.bosses["Moorwing"] && ((Object)((Component)__instance).gameObject).name.Contains("Mapper Sparring")) || ((Object)((Component)__instance).gameObject).name.Contains("Caravan Scene Loader"))
		{
			Object.Destroy((Object)(object)((Component)__instance).gameObject);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Moorwing"] && ((Object)((Component)__instance).gameObject).name.Contains("Boss Scene Loader"))
		{
			FieldInfo? field21 = ((object)__instance).GetType().GetField("questTests", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field22 = ((object)__instance).GetType().GetField("tests", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field23 = ((object)__instance).GetType().GetField("doorBlackList", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field24 = ((object)__instance).GetType().GetField("otherLoaderBlacklist", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field25 = ((object)__instance).GetType().GetField("loadAlt", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field26 = ((object)__instance).GetType().GetField("_additiveSceneLoads", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
			PlayerDataTest value5 = new PlayerDataTest();
			field21.SetValue(__instance, new QuestTest[0]);
			field22.SetValue(__instance, value5);
			field23.SetValue(__instance, new string[0]);
			field24.SetValue(__instance, new SceneAdditiveLoadConditional[0]);
			field25.SetValue(__instance, false);
			field26.SetValue(__instance, new List<SceneAdditiveLoadConditional>());
			return true;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["The Unravelled"] && ((Object)((Component)__instance).gameObject).name.Contains("Boss Loader"))
		{
			FieldInfo? field27 = ((object)__instance).GetType().GetField("questTests", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field28 = ((object)__instance).GetType().GetField("tests", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			PlayerDataTest value6 = new PlayerDataTest();
			field27.SetValue(__instance, new QuestTest[0]);
			field28.SetValue(__instance, value6);
			return true;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Bell Beast"] && ((Object)((Component)__instance).gameObject).name.Contains("Boss Additive Loader"))
		{
			FieldInfo? field29 = ((object)__instance).GetType().GetField("questTests", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field30 = ((object)__instance).GetType().GetField("tests", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field31 = ((object)__instance).GetType().GetField("doorBlackList", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field32 = ((object)__instance).GetType().GetField("otherLoaderBlacklist", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field33 = ((object)__instance).GetType().GetField("loadAlt", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			((object)__instance).GetType().GetField("_additiveSceneLoads", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
			PlayerDataTest value7 = new PlayerDataTest();
			field29.SetValue(__instance, new QuestTest[0]);
			field30.SetValue(__instance, value7);
			field31.SetValue(__instance, new string[0]);
			field32.SetValue(__instance, new SceneAdditiveLoadConditional[0]);
			field33.SetValue(__instance, false);
			return true;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Cogwork Dancers"] && ((Object)((Component)__instance).gameObject).name.Contains("Boss Loader"))
		{
			FieldInfo? field34 = ((object)__instance).GetType().GetField("questTests", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field35 = ((object)__instance).GetType().GetField("tests", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			PlayerDataTest value8 = new PlayerDataTest();
			field34.SetValue(__instance, new QuestTest[0]);
			field35.SetValue(__instance, value8);
			return true;
		}
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(TestGameObjectActivator), "OnEnable")]
	private static bool TestGameObjectActivatorPatch_Prefix(TestGameObjectActivator __instance)
	{
		//IL_0052: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: Expected O, but got Unknown
		if (BossSequence.currentSequenceScene == BossScene.bosses["Lost Garmond"] && ((Object)((Component)__instance).gameObject).name == "Garmond Black Threaded Scene")
		{
			FieldInfo? field = ((object)__instance).GetType().GetField("questTests", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			FieldInfo field2 = ((object)__instance).GetType().GetField("playerDataTest", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			PlayerDataTest value = new PlayerDataTest();
			field.SetValue(__instance, new QuestTest[0]);
			field2.SetValue(__instance, value);
			return true;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Lost Garmond"] && ((Object)((Component)__instance).gameObject).name == "Pre Garmond")
		{
			((Component)__instance).gameObject.SetActive(false);
			return true;
		}
		if (BossSequence.isInSequence && ((Object)((Component)__instance).gameObject).name == "Gnat Corpse Ground")
		{
			Object.Destroy((Object)(object)((Component)__instance).gameObject);
			return true;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Broodmother"] && ((Object)((Component)__instance).gameObject).name == "Broodmother Scene Control")
		{
			Transform transform = ((Component)__instance).gameObject.transform;
			((Component)transform.GetChild(0)).gameObject.SetActive(false);
			((Component)transform.GetChild(1)).gameObject.SetActive(true);
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Savage Beastfly in Far Fields"] && ((Object)((Component)__instance).gameObject).name == "Beastfly States")
		{
			Transform transform2 = ((Component)__instance).gameObject.transform;
			((Component)transform2.GetChild(0)).gameObject.SetActive(true);
			((Component)transform2.GetChild(1)).gameObject.SetActive(false);
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Gurr the Outcast"] && ((Object)((Component)__instance).gameObject).name == "Boss Scene")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Plasmified Zango"] && ((Object)((Component)__instance).gameObject).name == "Area_States")
		{
			Transform transform3 = ((Component)__instance).gameObject.transform;
			((Component)transform3.GetChild(0)).gameObject.SetActive(false);
			((Component)transform3.GetChild(1)).gameObject.SetActive(true);
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(PersistentBoolItem), "Awake")]
	private static bool PersistentBoolItemPatch_Prefix(PersistentBoolItem __instance)
	{
		if ((BossSequence.currentSequenceScene == BossScene.bosses["Moss Mother"] && ((Object)((Component)__instance).gameObject).name == "Battle Scene") || ((Object)((Component)__instance).gameObject).name == "Boss Scene")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if ((BossSequence.currentSequenceScene == BossScene.bosses["Great Conchflies"] && ((Object)((Component)__instance).gameObject).name == "Driller A") || ((Object)((Component)__instance).gameObject).name == "Driller B")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["The Last Judge"] && ((Object)((Component)__instance).gameObject).name == "Last Judge")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Plasmified Zango"] && ((Object)((Component)__instance).gameObject).name == "Blue Assistant")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Clover Dancers"] && ((Object)((Component)__instance).gameObject).name == "Dancer A")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if ((BossSequence.currentSequenceScene == BossScene.bosses["Forum Battle"] && ((Object)((Component)__instance).gameObject).name == "Battle Scene") || ((Object)((Component)__instance).gameObject).name == "Start Range" || ((Object)((Component)__instance).gameObject).name.Contains("Song Handmaiden") || ((Object)((Component)__instance).gameObject).name.Contains("City Merchant Scavenge Generic"))
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(DeactivateIfPlayerdataTrue), "OnEnable")]
	private static bool DeactivateIfPlayerdataTrue_Prefix(DeactivateIfPlayerdataTrue __instance)
	{
		if (BossSequence.currentSequenceScene == BossScene.bosses["Moss Mother"] && ((Object)((Component)__instance).gameObject).name == "Battle Scene")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Bell Beast"] && ((Object)((Component)__instance).gameObject).name == "Boss Scene")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Fourth Chorus"] && ((Object)((Component)__instance).gameObject).name == "Lava Rocks")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.isInSequence && ((Object)((Component)__instance).gameObject).name == "Churchkeeper Basement")
		{
			Object.Destroy((Object)(object)((Component)__instance).gameObject);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Lace in Deep Docks"] && ((Object)((Component)__instance).gameObject).name == "Boss Scene")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Skull Tyrant"] && ((Object)((Component)__instance).gameObject).name == "Skull King")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["First Sinner"] && ((Object)((Component)__instance).gameObject).name == "Boss Scene")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Lace in the Cradle"] && ((Object)((Component)__instance).gameObject).name == "Lace Return Corpse")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Second Sentiel"] && ((Object)((Component)__instance).gameObject).name == "Boss Scene - To Additive Load")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["The Unravelled"] && ((Object)((Component)__instance).gameObject).name == "Boss Scene")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Voltvyrm"] && ((Object)((Component)__instance).gameObject).name == "boss_eggshell")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Voltvyrm"] && ((Object)((Component)__instance).gameObject).name == "Zap Core Enemy")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Voltvyrm"] && ((Object)((Component)__instance).gameObject).name == "Hunter Fan Outside")
		{
			Object.Destroy((Object)(object)((Component)__instance).gameObject);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Palestag"] && ((Object)((Component)__instance).gameObject).name == "Cloverstag White Boss")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if ((BossSequence.currentSequenceScene == BossScene.bosses["Shrine Guardian Seth"] && ((Object)((Component)__instance).gameObject).name == "Seth") || ((Object)((Component)__instance).gameObject).name == "Flower Gate")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Lace in the Cradle"] && ((Object)((Component)__instance).gameObject).name == "Lace Boss2 New")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(DeactivateIfPlayerdataFalse), "OnEnable")]
	private static bool DeactivateIfPlayerdataFalse_Prefix(DeactivateIfPlayerdataFalse __instance)
	{
		if (BossSequence.currentSequenceScene == BossScene.bosses["Great Conchflies"] && ((Object)((Component)__instance).gameObject).name == "Coral Driller Return Corpse")
		{
			((Component)__instance).gameObject.SetActive(false);
			return false;
		}
		if ((BossSequence.currentSequenceScene == BossScene.bosses["Skull Tyrant"] && ((Object)((Component)__instance).gameObject).name == "Corpse") || ((Object)((Component)__instance).gameObject).name == "Hunter Fan Outside Rummage (1)")
		{
			((Component)__instance).gameObject.SetActive(false);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Raging Conchfly"] && ((Object)((Component)__instance).gameObject).name == "Boss Corpse Scene")
		{
			((Component)__instance).gameObject.SetActive(false);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Watcher at the Edge"] && ((Object)((Component)__instance).gameObject).name == "Collectable Item Pickup")
		{
			Object.Destroy((Object)(object)((Component)__instance).gameObject);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Disgraced Chef Lugoli"] && ((Object)((Component)__instance).gameObject).name == "Chef Corpse Prepare Scene")
		{
			Object.Destroy((Object)(object)((Component)__instance).gameObject);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Voltvyrm"] && ((Object)((Component)__instance).gameObject).name == "Return Aftermath")
		{
			Object.Destroy((Object)(object)((Component)__instance).gameObject);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Phantom"] && ((Object)((Component)__instance).gameObject).name == "Return Mask")
		{
			Object.Destroy((Object)(object)((Component)__instance).gameObject);
			return false;
		}
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(ActivateIfPlayerdataFalse), "Start")]
	private static bool ActivateIfPlayerdataFalse_Prefix(ActivateIfPlayerdataFalse __instance)
	{
		if (BossSequence.currentSequenceScene == BossScene.bosses["Savage Beastfly in Chapel of The Beast"] && ((Object)((Component)__instance).gameObject).name == "Boss Control")
		{
			__instance.objectToActivate.SetActive(true);
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Disgraced Chef Lugoli"] && ((Object)((Component)__instance).gameObject).name == "Battle Scene")
		{
			__instance.objectToActivate.SetActive(true);
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(ActivateIfPlayerdataTrue), "OnEnable")]
	private static bool ActivateIfPlayerdataTrue_Prefix(ActivateIfPlayerdataTrue __instance)
	{
		if (BossSequence.currentSequenceScene == BossScene.bosses["Savage Beastfly in Chapel of The Beast"] && ((Object)((Component)__instance).gameObject).name == "Boss Control")
		{
			__instance.objectToActivate.SetActive(false);
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Father of the Flame"] && ((Object)((Component)__instance).gameObject).name == "Boss Scene")
		{
			__instance.objectToActivate.SetActive(false);
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(PlayerDataTestResponse), "OnEnable")]
	private static bool PlayerDataTestResponse_Prefix(PlayerDataTestResponse __instance)
	{
		if (BossSequence.currentSequenceScene == BossScene.bosses["Sister Splinter"] && ((Object)((Component)__instance).gameObject).name == "Boss Scene Parent")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Garmond & Zaza"] && ((Object)((Component)__instance).gameObject).name == "Scene Control")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Lace in the Cradle"] && ((Object)((Component)__instance).gameObject).name == "Boss Scene")
		{
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Lost Garmond"] && ((Object)((Component)__instance).gameObject).name == "Garmond Defeated Scene")
		{
			Object.Destroy((Object)(object)((Component)__instance).gameObject);
			return false;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Crawfather"] && ((Object)((Component)__instance).gameObject).name == "grey_lever_gate")
		{
			((Component)__instance).gameObject.GetComponent<Gate>().ForceClose();
			Object.Destroy((Object)(object)__instance);
			return false;
		}
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(StateChangeSequence), "CheckCompleteBool")]
	private static bool StateChangeSequenceCheckCompleteBool_Prefix(PlayerDataTestResponse __instance, ref bool __result)
	{
		if (BossSequence.currentSequenceScene == BossScene.bosses["Widow"] && ((Object)((Component)__instance).gameObject).name == "Bellshrine Sequence Bellhart")
		{
			__result = true;
			return false;
		}
		return true;
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(BattleScene), "Awake")]
	private static void BattleSceneAwake_Postfix(BattleScene __instance)
	{
		if (BossSequence.currentSequenceScene == BossScene.bosses["Broodmother"] && ((Object)((Component)__instance).gameObject).name == "Battle Scene Broodmother")
		{
			__instance.setPDBoolOnEnd = null;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Disgraced Chef Lugoli"] && ((Object)((Component)__instance).gameObject).name == "Battle Scene")
		{
			__instance.setPDBoolOnEnd = null;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Groal the Great"] && ((Object)((Component)__instance).gameObject).name == "Battle Scene")
		{
			__instance.setPDBoolOnEnd = null;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Raging Conchfly"] && ((Object)((Component)__instance).gameObject).name == "Battle Scene")
		{
			__instance.setPDBoolOnEnd = null;
		}
		if (BossSequence.currentSequenceScene == BossScene.bosses["Crawfather"] && ((Object)((Component)__instance).gameObject).name == "Battle Scene")
		{
			__instance.setPDBoolOnEnd = null;
			__instance.activeAfterBattle = null;
		}
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(HarpoonRingSlider), "Awake")]
	private static void HarpoonRingSliderAwake_Prefix(HarpoonRingSlider __instance)
	{
		if (BossSequence.currentSequenceScene == BossScene.bosses["Cogwork Dancers"])
		{
			Object.Destroy((Object)(object)((Component)__instance).gameObject);
		}
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(CustomSceneManager), "Awake")]
	private static bool SceneManagerAwake_Prefix(CustomSceneManager __instance)
	{
		CustomScene customScene = customScenes.Find((CustomScene item) => item.sceneName == currentSceneName);
		if (customScene != null && !customScene.isSkongScene)
		{
			__instance.scenePools = (SceneObjectPool[])(object)new SceneObjectPool[0];
		}
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(CustomSceneManager), "DrawBlackBorders")]
	private static bool SceneManagerDrawBlackBorders_Prefix(CustomSceneManager __instance)
	{
		CustomScene customScene = customScenes.Find((CustomScene item) => item.sceneName == currentSceneName);
		if (customScene != null && !customScene.isSkongScene)
		{
			return false;
		}
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(InventoryItemCollectable), "Submit")]
	private static bool InventoryItemCollectableSubmit_Prefix(InventoryItemCollectable __instance)
	{
		if (!((Component)__instance).transform.IsChildOf(BindingsMenu.menuBindings.transform))
		{
			return true;
		}
		if (BindingsMenu.TryShowSequenceMsg())
		{
			return false;
		}
		if (BindingsMenu.submitActions.TryGetValue(((Object)((Component)__instance).gameObject).name, out var value))
		{
			value?.Invoke(obj: false);
			return false;
		}
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(InventoryItemSelectable), "Submit")]
	private static bool InventoryItemSelectableSubmit_Prefix(InventoryItemSelectable __instance)
	{
		if (!((Component)__instance).transform.IsChildOf(BindingsMenu.menuBindings.transform))
		{
			return true;
		}
		if (BindingsMenu.TryShowSequenceMsg())
		{
			return false;
		}
		if (BindingsMenu.submitActions.TryGetValue(((Object)((Component)__instance).gameObject).name, out var value))
		{
			value?.Invoke(obj: false);
			return false;
		}
		return true;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(InventoryItemTool), "Submit")]
	private static bool InventoryItemToolSubmit_Prefix(InventoryItemTool __instance)
	{
		if (!PlayerDataMod.instance.bindings["Tools Binding"])
		{
			return true;
		}
		if (((Object)__instance).name != "Silk Spear" && ((Object)__instance).name != "Thread Sphere" && ((Object)__instance).name != "Parry" && ((Object)__instance).name != "Silk Charge" && ((Object)__instance).name != "Silk Bomb" && ((Object)__instance).name != "Silk Boss Needle" && BindingsMenu.submitActions.TryGetValue("Tools Buttons Msg", out var value))
		{
			value?.Invoke(obj: false);
			return false;
		}
		return true;
	}

	public AssetBundle LoadBundle(string bundleName)
	{
		Assembly executingAssembly = Assembly.GetExecutingAssembly();
		string[] manifestResourceNames = executingAssembly.GetManifestResourceNames();
		foreach (string text in manifestResourceNames)
		{
			string text2 = Path.GetExtension(text).Substring(1);
			((BaseUnityPlugin)this).Logger.LogInfo((object)text2);
			if (text2 != bundleName)
			{
				continue;
			}
			using Stream stream = executingAssembly.GetManifestResourceStream(text);
			if (stream == null)
			{
				continue;
			}
			byte[] array = new byte[stream.Length];
			stream.Read(array, 0, array.Length);
			stream.Dispose();
			((BaseUnityPlugin)this).Logger.LogInfo((object)("Loading bundle " + bundleName));
			return AssetBundle.LoadFromMemory(array);
		}
		return null;
	}

	public void LoadModData()
	{
		if (File.Exists(pathToModData))
		{
			PlayerDataMod.instance = JsonConvert.DeserializeObject<PlayerDataMod>(File.ReadAllText(pathToModData));
			return;
		}
		PlayerDataMod.instance = new PlayerDataMod();
		SaveModData();
	}

	public void SaveModData()
	{
		string contents = JsonConvert.SerializeObject((object)PlayerDataMod.instance, (Formatting)1);
		File.WriteAllText(pathToModData, contents);
	}

	private void Awake()
	{
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		instance = this;
		Log = ((BaseUnityPlugin)this).Logger;
		new Harmony("com.godsofpharloom");
		Harmony.CreateAndPatchAll(typeof(GodsOfPharloomMod), (string)null);
		try
		{
			BossScene.InitBossesInfo();
			BossStatueInfo.InitBossesStatue();
			LoadModData();
			BossStatueInfo.GetBadges();
		}
		catch (Exception ex)
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)ex.Message);
		}
		SceneManager.sceneLoaded += delegate(Scene scene, LoadSceneMode mode)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			lastLoadedScene = scene;
		};
		BossSequence.CreateSequenceController();
		CustomScene.InitModRespawnMarkers();
		afterSceneLoaded = (Action)Delegate.Combine(afterSceneLoaded, new Action(CustomMenu.Reset));
		InitCustomScenes();
		string[] array = assetBundleNames;
		foreach (string text in array)
		{
			AssetBundle val = LoadBundle(text);
			assetBundles.Add(val);
			if (text == "gg_resources")
			{
				Object[] array2 = val.LoadAllAssets();
				foreach (Object val2 in array2)
				{
					Preload.bundleResources[val2.name] = val2;
				}
			}
		}
		TransitionSequence.Init();
		afterSceneLoaded = (Action)Delegate.Combine(afterSceneLoaded, (Action)delegate
		{
			BossSequence.isHeroDead = false;
		});
		((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin is loaded!");
	}

	private void Update()
	{
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_008a: 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_009c: Unknown result type (might be due to invalid IL or missing references)
		//IL_009e: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a4: Expected O, but got Unknown
		if (((ButtonControl)Keyboard.current.bKey).wasPressedThisFrame)
		{
			if (BindingsMenu.menuBindingsFsm != null && BindingsMenu.menuBindingsFsm.ActiveStateName == "Opened")
			{
				BindingsMenu.menuBindingsFsm.FsmComponent.SendEvent("CLOSE");
			}
			else if (BindingsMenu.menuBindingsFsm.ActiveStateName == "Closed")
			{
				BindingsMenu.menuBindingsFsm.SetState("Can Open Inventory?");
			}
		}
		if (((ButtonControl)Keyboard.current.f6Key).wasPressedThisFrame)
		{
			SceneLoadInfo val = new SceneLoadInfo
			{
				SceneName = "GG_Pharloom_Atrium",
				EntryGateName = "door_wakeInMemory_AntQueen(Clone)",
				EntrySkip = true,
				Visualization = (SceneLoadVisualizations)0
			};
			GameManager.instance.BeginSceneTransition(val);
		}
	}

	public static void SetHeroState(ActorStates state)
	{
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		((Func<MethodInfo, object[], object>)((MethodInfo method, object[] obj) => method.Invoke(HeroController.instance, obj)))(HeroController_SetState, new object[1] { state });
	}

	private void InitCustomScenes()
	{
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0307: Unknown result type (might be due to invalid IL or missing references)
		//IL_039b: Unknown result type (might be due to invalid IL or missing references)
		//IL_042f: Unknown result type (might be due to invalid IL or missing references)
		//IL_04fd: 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_0643: Unknown result type (might be due to invalid IL or missing references)
		//IL_06d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_076b: Unknown result type (might be due to invalid IL or missing references)
		//IL_07ff: Unknown result type (might be due to invalid IL or missing references)
		//IL_0893: Unknown result type (might be due to invalid IL or missing references)
		//IL_0927: Unknown result type (might be due to invalid IL or missing references)
		//IL_09bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a4f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ae3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b77: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c0b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c9f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d33: Unknown result type (might be due to invalid IL or missing references)
		//IL_0dc7: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e5b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0eef: Unknown result type (might be due to invalid IL or missing references)
		//IL_0fa1: Unknown result type (might be due to invalid IL or missing references)
		//IL_1035: Unknown result type (might be due to invalid IL or missing references)
		//IL_10c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_115d: 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_1285: Unknown result type (might be due to invalid IL or missing references)
		//IL_1319: Unknown result type (might be due to invalid IL or missing references)
		//IL_13ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_1441: Unknown result type (might be due to invalid IL or missing references)
		//IL_14d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_1569: Unknown result type (might be due to invalid IL or missing references)
		//IL_15c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_1678: Unknown result type (might be due to invalid IL or missing references)
		//IL_170c: Unknown result type (might be due to invalid IL or missing references)
		//IL_17a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_1834: Unknown result type (might be due to invalid IL or missing references)
		//IL_18c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_195c: Unknown result type (might be due to invalid IL or missing references)
		//IL_19f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_1a84: Unknown result type (might be due to invalid IL or missing references)
		//IL_1b18: Unknown result type (might be due to invalid IL or missing references)
		//IL_1bac: Unknown result type (might be due to invalid IL or missing references)
		//IL_1c40: Unknown result type (might be due to invalid IL or missing references)
		CustomScene GG_Pharloom_Atrium = new CustomScene("GG_Pharloom_Atrium", isSkongScene: false, isFastSuperJump: true);
		GG_Pharloom_Atrium.AddTransitionPoint(new TransitionPointInfo("door2", new Vector3(156.4901f, 36.18f, 0f), BossStatueInfo.hog_sceneName, "door1", (PromptLabels)3, isADoor: true));
		CustomScene customScene = GG_Pharloom_Atrium;
		customScene.AfterSceneLoaded = (Action<Scene>)Delegate.Combine(customScene.AfterSceneLoaded, (Action<Scene>)delegate(Scene scene)
		{
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_0111: Unknown result type (might be due to invalid IL or missing references)
			//IL_011b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: Unknown result type (might be due to invalid IL or missing references)
			//IL_0195: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_021a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0224: Unknown result type (might be due to invalid IL or missing references)
			//IL_0248: Unknown result type (might be due to invalid IL or missing references)
			//IL_0296: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0319: Unknown result type (might be due to invalid IL or missing references)
			//IL_0331: Unknown result type (might be due to invalid IL or missing references)
			//IL_0355: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_04da: Unknown result type (might be due to invalid IL or missing references)
			//IL_04df: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_04fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0544: Unknown result type (might be due to invalid IL or missing references)
			//IL_054a: Expected O, but got Unknown
			//IL_054a: Unknown result type (might be due to invalid IL or missing references)
			//IL_054f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0564: 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_0583: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cdf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ce5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cec: Expected O, but got Unknown
			AudioManager audioManager = GameManager.instance.AudioManager;
			audioManager.StopAndClearAtmos();
			audioManager.StopAndClearMusic();
			GameObject[] rootGameObjects = ((Scene)(ref scene)).GetRootGameObjects();
			GameObject val = null;
			GameObject[] array = rootGameObjects;
			foreach (GameObject val2 in array)
			{
				if (((Object)val2).name == "GG_Bench")
				{
					val = val2;
				}
			}
			GameObject obj = Object.Instantiate<GameObject>(Preload.preloads["RestBench"], new InstantiateParameters
			{
				parent = val.transform,
				scene = scene
			});
			obj.transform.position = val.transform.position;
			Fsm fsm = FSMUtility.LocateMyFSM(obj, "Bench Control").Fsm;
			Vector3 value = fsm.GetFsmVector3("Adjust Vector").Value;
			fsm.GetFsmVector3("Adjust Vector").Value = new Vector3(value.x, 0.7f, value.z);
			((Renderer)obj.GetComponent<SpriteRenderer>()).enabled = false;
			Vector2 size = obj.GetComponent<BoxCollider2D>().size;
			obj.GetComponent<BoxCollider2D>().size = new Vector2(size.x, 1f);
			CameraLockArea val3 = CustomScene.CreateCameraLock(scene);
			GameObject gameObject = ((Component)val3).gameObject;
			gameObject.transform.position = new Vector3(105.2262f, 60.9892f, 0f);
			val3.cameraYMin = 50f;
			val3.cameraYMax = 65f;
			val3.cameraXMin = 0f;
			val3.cameraXMax = 1000f;
			val3.preventLookDown = true;
			gameObject.GetComponent<BoxCollider2D>().size = new Vector2(300f, 18f);
			gameObject.AddComponent<ActiveCameraLockOnEnter>();
			((Behaviour)val3).enabled = false;
			BoxCollider2D component = ((GameObject)Object.Instantiate((Object)(object)gameObject, scene)).GetComponent<BoxCollider2D>();
			((Component)component).transform.position = new Vector3(58.8772f, 42.7895f, 0f);
			component.size = new Vector2(80f, 18f);
			((Component)((GameObject)Object.Instantiate((Object)(object)gameObject, scene)).GetComponent<BoxCollider2D>()).transform.position = new Vector3(379.4977f, 42.5895f, 0f);
			CameraLockArea obj2 = CustomScene.CreateCameraLock(scene);
			GameObject gameObject2 = ((Component)obj2).gameObject;
			gameObject2.transform.position = new Vector3(156.5713f, 40.4745f, 0f);
			obj2.cameraYMin = 40f;
			obj2.cameraYMax = 50f;
			obj2.cameraXMin = 157f;
			obj2.cameraXMax = 157f;
			obj2.preventLookDown = true;
			gameObject2.GetComponent<BoxCollider2D>().size = new Vector2(12f, 20f);
			gameObject2.AddComponent<ActiveCameraLockOnEnter>();
			((Behaviour)obj2).enabled = false;
			CameraLockArea obj3 = CustomScene.CreateCameraLock(scene);
			GameObject gameObject3 = ((Component)obj3).gameObject;
			gameObject3.transform.position = new Vector3(156.7058f, 76.6994f, 0f);
			obj3.cameraYMin = 79f;
			obj3.cameraYMax = 500f;
			obj3.cameraXMin = 0f;
			obj3.cameraXMax = 1000f;
			gameObject3.GetComponent<BoxCollider2D>().size = new Vector2(300f, 8f);
			gameObject3.AddComponent<ActiveCameraLockOnEnter>();
			((Behaviour)obj3).enabled = false;
			CameraLockArea obj4 = CustomScene.CreateCameraLock(scene);
			GameObject gameObject4 = ((Component)obj4).gameObject;
			gameObject4.transform.position = new Vector3(156.7058f, 86.9f, 0f);
			obj4.cameraYMin = 88f;
			obj4.cameraYMax = 500f;
			obj4.cameraXMin = 156.4254f;
			obj4.cameraXMax = 156.4254f;
			obj4.preventLookDown = true;
			obj4.preventLookUp = true;
			obj4.lookYMax = 0f;
			gameObject4.GetComponent<BoxCollider2D>().size = new Vector2(11f, 12f);
			gameObject4.AddComponent<ActiveCameraLockOnEnter>();
			((Behaviour)obj4).enabled = false;
			GameObject val4 = (GameObject)Object.Instantiate((Object)(object)Preload.preloads["door_wakeInMemory_AntQueen"], scene);
			val4.transform.position = new Vector3(14f, 54f, 0f);
			Fsm fsm2 = val4.GetComponent<PlayMakerFSM>().Fsm;
			FsmState state = fsm2.GetState("Pause");
			fsm2.GetState("Set Respawn?");
			FsmState state2 = fsm2.GetState("Blank Screen");
			fsm2.GetState("Save?");
			fsm2.GetFsmBool("Save Game").Value = true;
			PatchedFsm.CustomLogicFsm customLogicFsm = new PatchedFsm.CustomLogicFsm(fsm2);
			customLogicFsm.action = (Action<Fsm>)Delegate.Combine(customLogicFsm.action, (Action<Fsm>)delegate
			{
				PlayerData.instance.respawnMarkerName = "Death Respawn Marker";
				PlayerData.instance.respawnScene = "GG_Pharloom_Atrium";
			});
			state2.Actions = PatchedFsm.InsertInArray(state2.Actions, (FsmStateAction)(object)customLogicFsm, 0);
			state.Transitions = (FsmTransition[])(object)new FsmTransition[1] { state.Transitions[1] };
			GameObject val5 = (GameObject)Object.Instantiate((Object)(object)Preload.preloads["Exit Edge Trigger_AntQueen"], scene);
			val5.transform.position = new Vector3(0f, 54f, 0f);
			SceneTransitionZone component2 = val5.GetComponent<SceneTransitionZone>();
			((object)component2).GetType().GetField("targetGate", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).SetValue(component2, "door_wakeOnGround_FlowerQueen(Clone)");
			((object)component2).GetType().GetField("targetScene", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).SetValue(component2, "Abyss_05");
			GameObject val6 = (GameObject)Object.Instantiate((Object)val5, scene);
			val6.transform.position = new Vector3(62f, 28f, 0f);
			val6.transform.Rotate(new Vector3(0f, 0f, 90f));
			val6.transform.localScale = new Vector3(1f, 7f, 1f);
			Preload.FindObjectByPath(rootGameObjects, "PantheonMenuCanvasHandler").AddComponent<PantheonMenu>();
			Pantheon.pantheonsCount = 0;
			Dictionary<string, BossScene> bosses = BossScene.bosses;
			Pantheon pantheon = Preload.FindObjectByPath(rootGameObjects, "Half1/Pantheon1").AddComponent<Pantheon>();
			pantheon.pantheonName = "Pantheon 1";
			pantheon.pantheonDisplayName = "Pantheon of the Devoted";
			pantheon.sequence = new BossScene[11]
			{
				bosses["Moss Mother"],
				bosses["Skull Tyrant"],
				bosses["Bell Beast"],
				bosses["Savage Beastfly in Chapel of The Beast"],
				bosses["Lace in Deep Docks"],
				bosses["RestScene"],
				bosses["Fourth Chorus"],
				bosses["Moorwing"],
				bosses["Great Conchflies"],
				bosses["Sister Splinter"],
				bosses["Widow"]
			};
			pantheon.Init();
			pantheon = Preload.FindObjectByPath(rootGameObjects, "Half1/Pantheon2").AddComponent<Pantheon>();
			pantheon.pantheonName = "Pantheon 2";
			pantheon.pantheonDisplayName = "Pantheon of the Shaman";
			pantheon.sequence = new BossScene[11]
			{
				bosses["The Last Judge"],
				bosses["Broodmother"],
				bosses["Nyleth"],
				bosses["Voltvyrm"],
				bosses["Trobbio"],
				bosses["RestScene"],
				bosses["Garmond & Zaza"],
				bosses["Cogwork Dancers"],
				bosses["Disgraced Chef Lugoli"],
				bosses["Raging Conchfly"],
				bosses["Groal the Great"]
			};
			pantheon.Init();
			pantheon = Preload.FindObjectByPath(rootGameObjects, "Half2/Pantheon3").AddComponent<Pantheon>();
			pantheon.pantheonName = "Pantheon 3";
			pantheon.pantheonDisplayName = "Pantheon of the First Sinner";
			pantheon.sequence = new BossScene[11]
			{
				bosses["Crust King Khann"],
				bosses["Phantom"],
				bosses["Crawfather"],
				bosses["Forebrothers Signis & Gron"],
				bosses["Second Sentiel"],
				bosses["RestScene"],
				bosses["Lace in the Cradle"],
				bosses["Plasmified Zango"],
				bosses["Watcher at the Edge"],
				bosses["The Unravelled"],
				bosses["First Sinner"]
			};
			pantheon.Init();
			pantheon = Preload.FindObjectByPath(rootGameObjects, "Half2/Pantheon4").AddComponent<Pantheon>();
			pantheon.pantheonName = "Pantheon 4";
			pantheon.pantheonDisplayName = "Pantheon of the Singer";
			pantheon.sequence = new BossScene[11]
			{
				bosses["Bell Eater"],
				bosses["Father of the Flame"],
				bosses["Clover Dancers"],
				bosses["Gurr the Outcast"],
				bosses["Tormented Trobbio"],
				bosses["RestScene"],
				bosses["Shrine Guardian Seth"],
				bosses["Savage Beastfly in Far Fields"],
				bosses["Shakra"],
				bosses["Pinstress"],
				bosses["Skarrsinger Karmelita"]
			};
			pantheon.Init();
			pantheon = Preload.FindObjectByPath(rootGameObjects, "Pantheon5").AddComponent<Pantheon>();
			pantheon.pantheonName = "Pantheon 5";
			pantheon.pantheonDisplayName = "Pantheon of Pharloom";
			pantheon.sequence = new BossScene[50]
			{
				bosses["Moss Mother"].ascendedVersion,
				bosses["Skull Tyrant"],
				bosses["Bell Beast"],
				bosses["Savage Beastfly in Chapel of The Beast"],
				bosses["Lace in Deep Docks"],
				bosses["RestScene"],
				bo