Decompiled source of Creature Activity Study v1.0.3

plugins/Simulacrum/Simulacrum.dll

Decompiled a month ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using AIGraph;
using AK;
using Agents;
using BepInEx;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using BepInEx.Unity.IL2CPP.Utils.Collections;
using Enemies;
using GTFO.API;
using GameData;
using Globals;
using HarmonyLib;
using Il2CppInterop.Runtime.Injection;
using Il2CppInterop.Runtime.InteropTypes;
using Il2CppSystem;
using Il2CppSystem.Collections.Generic;
using LevelGeneration;
using Localization;
using Microsoft.CodeAnalysis;
using Player;
using SNetwork;
using TMPro;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("Simulacrum")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Simulacrum")]
[assembly: AssemblyTitle("Simulacrum")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

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

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

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
namespace Simulacrum
{
	[BepInPlugin("com.Brandont.LongerCodes", "LongerCodes", "1.0.0")]
	public class Loader : BasePlugin
	{
		public const string MODNAME = "LongerCodes";

		public const string AUTHOR = "Brandont";

		public const string GUID = "com.Brandont.LongerCodes";

		public const string VERSION = "1.0.0";

		public static ManualLogSource Logger;

		public override void Load()
		{
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Expected O, but got Unknown
			Logger = ((BasePlugin)this).Log;
			((BasePlugin)this).Log.LogMessage((object)"Loading LongerCodes");
			ClassInjector.RegisterTypeInIl2Cpp<SimCore>();
			EventAPI.OnManagersSetup += delegate
			{
				SimCore @object = ((Component)Global.Current).gameObject.AddComponent<SimCore>();
				LevelAPI.OnEnterLevel += @object.LevelStarted;
				LevelAPI.OnLevelCleanup += @object.LevelCleanup;
			};
			NetworkAPI.RegisterEvent<int>("SetWave", (Action<ulong, int>)SimCore.SetWave);
			NetworkAPI.RegisterEvent<int>("SetSpawnScream", (Action<ulong, int>)SimCore.SetSpawnScream);
			Harmony val = new Harmony("LongerCodes");
			val.PatchAll();
			((BasePlugin)this).Log.LogMessage((object)"Loaded LongerCodes");
		}
	}
	internal class SimCore : MonoBehaviour
	{
		public static PUI_ObjectiveTimer waveInfo;

		public static PUI_InteractionPrompt intPrompt;

		public static int currentWave = 0;

		public static float timer = 60f;

		private static bool updateWave = false;

		private static int spawnPoint = 0;

		private static bool levelFinished = false;

		public static AIG_CourseNode? courseNode;

		public static List<Vector3> WaveSpawnPoints = new List<Vector3>
		{
			new Vector3(-86f, 0f, 0f),
			new Vector3(0f, 0f, 86f),
			new Vector3(0f, -1f, -80f),
			new Vector3(86f, 0f, 0f)
		};

		public void LevelStarted()
		{
			courseNode = ((Agent)PlayerManager.GetLocalPlayerAgent()).CourseNode;
			intPrompt.SetTimerFill(0f);
			intPrompt.m_timerAlpha = 0f;
			CreateAndPlaySound(1779631988u, 20f);
		}

		public void LevelCleanup()
		{
			((GuiLayerComp)waveInfo).SetVisible(false, false);
			currentWave = 0;
			timer = 60f;
		}

		public void Update()
		{
			//IL_0352: Unknown result type (might be due to invalid IL or missing references)
			//IL_0357: Unknown result type (might be due to invalid IL or missing references)
			//IL_0360: Unknown result type (might be due to invalid IL or missing references)
			//IL_0376: Expected O, but got Unknown
			if (!RundownManager.ExpeditionIsStarted)
			{
				return;
			}
			if (courseNode == null)
			{
				courseNode = ((Agent)PlayerManager.GetLocalPlayerAgent()).CourseNode;
			}
			if (timer < 0f)
			{
				timer = 0f;
			}
			if (SNet.IsMaster)
			{
				if (timer <= 0f)
				{
					NetworkAPI.InvokeEvent<int>("SetWave", currentWave, (SNet_ChannelType)2);
					IncrementWave();
				}
			}
			else if (!SNet.IsMaster && updateWave)
			{
				updateWave = false;
				IncrementWave();
			}
			((GuiLayerComp)waveInfo).SetVisible(true, false);
			((TMP_Text)waveInfo.m_titleText).text = $"<u>Current Wave</u><color=orange>\n{currentWave}</color>";
			List<EnemyAgent> reachableEnemiesInNodes = AIG_CourseGraph.GetReachableEnemiesInNodes(courseNode, 100);
			int num = 0;
			if (reachableEnemiesInNodes != null)
			{
				for (int i = 0; i < reachableEnemiesInNodes.Count; i++)
				{
					if (((Agent)reachableEnemiesInNodes[i]).Alive)
					{
						num++;
					}
				}
			}
			if (num > 0)
			{
				((TMP_Text)waveInfo.m_timerText).text = "";
				((RectTransformComp)intPrompt).SetVisible(true);
				intPrompt.SetMessage($"Enemies Remaining: <color=orange>{num}</color>");
			}
			else if (currentWave != 40)
			{
				if (SNet.IsMaster)
				{
					if (Input.GetKeyDown((KeyCode)120))
					{
						timer = 0f;
					}
					((TMP_Text)waveInfo.m_timerText).text = $"<size=100%>\nTime until next wave: <color=orange>{(int)timer}</color></size>\n<color=green><size=60%>[Press 'X' to skip to next wave]</size></color>";
				}
				else
				{
					((TMP_Text)waveInfo.m_timerText).text = $"<size=100%>\nTime until next wave: <color=orange>{(int)timer}</color></size>";
				}
				((RectTransformComp)intPrompt).SetVisible(false);
				timer -= 1f * Time.deltaTime;
			}
			else if (!levelFinished)
			{
				levelFinished = true;
				((RectTransformComp)intPrompt).SetVisible(false);
				((TMP_Text)waveInfo.m_titleText).text = "";
				((TMP_Text)waveInfo.m_timerText).text = "Thank you for participating in the Study";
				timer = 100000000f;
				CreateAndPlaySound(1762854275u, 15f);
				((MonoBehaviour)this).StartCoroutine(CollectionExtensions.WrapToIl2Cpp(CreateAndPlaySoundAfter(1762854272u, 15f, 8f)));
				if (SNet.IsMaster)
				{
					WorldEventManager.ExecuteEvent(new WardenObjectiveEventData
					{
						Type = (eWardenObjectiveEventType)27,
						Delay = 23f
					}, 0f);
				}
			}
		}

		public static void SetSpawnScream(ulong senderID, int payload)
		{
			spawnPoint = payload;
		}

		public static void SetWave(ulong senderID, int payload)
		{
			currentWave = payload;
			updateWave = true;
		}

		public void IncrementWave()
		{
			//IL_0132: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			currentWave++;
			switch (currentWave)
			{
			case 5:
				timer = 60f;
				((MonoBehaviour)this).StartCoroutine(CollectionExtensions.WrapToIl2Cpp(CreateAndPlaySoundAfter(1612641498u, 4.9f, 8f)));
				break;
			case 15:
			case 30:
				timer = 60f;
				((MonoBehaviour)this).StartCoroutine(CollectionExtensions.WrapToIl2Cpp(CreateAndPlaySoundAfter(1779631996u, 5.8f, 8f)));
				break;
			case 10:
			case 20:
			case 25:
			case 35:
				timer = 60f;
				break;
			default:
				timer = 30f;
				break;
			}
			if (SNet.IsMaster)
			{
				int num = Random.Range(0, WaveSpawnPoints.Count);
				SpawnWave(SimData.WaveDatas[currentWave - 1], WaveSpawnPoints[num]);
				NetworkAPI.InvokeEvent<int>("SetSpawnScream", num, (SNet_ChannelType)2);
			}
			else
			{
				SpawnWave(SimData.WaveDatas[currentWave - 1], WaveSpawnPoints[spawnPoint]);
			}
		}

		public void SpawnWave(WaveData waveData, Vector3 spawnPoint)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Expected O, but got Unknown
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			CellSoundPlayer val = new CellSoundPlayer();
			if (SNet.IsMaster)
			{
				((MonoBehaviour)this).StartCoroutine(CollectionExtensions.WrapToIl2Cpp(SpawnEnemies(waveData.EnemyList, spawnPoint)));
			}
			if (waveData.ScreamType.HasValue)
			{
				val.SetSwitch(ENEMY_TYPE.GROUP, waveData.ScreamType.Value);
				uint num = ((!waveData.ScreamSize.HasValue) ? 1u : waveData.ScreamSize.Value);
				val.SetSwitch(ROAR_SIZE.GROUP, num);
				val.SetSwitch(ENVIROMENT.GROUP, SWITCH.COMPLEX);
				val.Post(EVENTS.PLAY_WAVE_DISTANT_ROAR, spawnPoint);
			}
			else
			{
				Debug.Log(Object.op_Implicit("Scream type is null"));
				val.Post(EVENTS.PLAY_WAVE_DISTANT_ROAR_R8E1, true);
			}
			if (!string.IsNullOrWhiteSpace(waveData.WardenIntel))
			{
				WardenObjectiveManager.DisplayWardenIntel((LG_LayerType)0, new LocalizedText
				{
					UntranslatedText = waveData.WardenIntel
				});
			}
			((MonoBehaviour)this).StartCoroutine(CollectionExtensions.WrapToIl2Cpp(Cleanup(val, 10f)));
		}

		public void CreateAndPlaySound(uint soundID, float waitRecycle)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			CellSoundPlayer val = new CellSoundPlayer();
			val.Post(soundID, true);
			((MonoBehaviour)this).StartCoroutine(CollectionExtensions.WrapToIl2Cpp(Cleanup(val, waitRecycle)));
		}

		private IEnumerator CreateAndPlaySoundAfter(uint soundID, float waitRecycle, float waitPlay)
		{
			CellSoundPlayer csPlayer = new CellSoundPlayer();
			yield return (object)new WaitForSeconds(waitPlay);
			csPlayer.Post(soundID, true);
			yield return (object)new WaitForSeconds(waitRecycle);
			csPlayer.Stop();
			csPlayer.Recycle();
		}

		private IEnumerator Cleanup(CellSoundPlayer csPlayer, float waitTime)
		{
			yield return (object)new WaitForSeconds(waitTime);
			csPlayer.Stop();
			csPlayer.Recycle();
		}

		private IEnumerator SpawnEnemies(Dictionary<uint, int> enemyIDs, Vector3 spawnPos)
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			foreach (KeyValuePair<uint, int> val in enemyIDs)
			{
				for (int i = 0; i < val.Value; i++)
				{
					if (currentWave % 5 == 0)
					{
						if (currentWave == 40)
						{
							EnemyAllocator.Current.SpawnEnemy(val.Key, ((Agent)PlayerManager.GetLocalPlayerAgent()).CourseNode, (AgentMode)1, WaveSpawnPoints[Random.Range(0, WaveSpawnPoints.Count)], Quaternion.identity, (EnemyGroup)null, -1);
							yield return (object)new WaitForSeconds(0.01f);
						}
						else
						{
							EnemyAllocator.Current.SpawnEnemy(val.Key, ((Agent)PlayerManager.GetLocalPlayerAgent()).CourseNode, (AgentMode)1, WaveSpawnPoints[Random.Range(0, WaveSpawnPoints.Count)], Quaternion.identity, (EnemyGroup)null, -1);
							yield return (object)new WaitForSeconds(0.2f);
						}
					}
					else if (currentWave == 28 || currentWave == 36)
					{
						EnemyAllocator.Current.SpawnEnemy(val.Key, ((Agent)PlayerManager.GetLocalPlayerAgent()).CourseNode, (AgentMode)1, WaveSpawnPoints[Random.Range(0, WaveSpawnPoints.Count)], Quaternion.identity, (EnemyGroup)null, -1);
						yield return (object)new WaitForSeconds(Random.Range(0.03f, 0.08f));
					}
					else
					{
						EnemyAllocator.Current.SpawnEnemy(val.Key, ((Agent)PlayerManager.GetLocalPlayerAgent()).CourseNode, (AgentMode)1, spawnPos, Quaternion.identity, (EnemyGroup)null, -1);
						yield return (object)new WaitForSeconds(Random.Range(0.08f, 0.18f));
					}
				}
			}
		}
	}
	public class SimData
	{
		public static List<uint> Tier0Ids = new List<uint> { 38u, 63u };

		public static List<uint> Tier1Ids = new List<uint> { 13u, 11u, 42u, 21u };

		public static List<uint> Tier2Ids = new List<uint> { 30u, 53u, 52u };

		public static List<uint> Tier3Ids = new List<uint> { 33u, 16u, 18u, 45u };

		public static List<uint> Tier4Ids = new List<uint> { 39u, 46u, 35u, 56u, 62u };

		public static List<uint> Tier5Ids = new List<uint> { 36u, 37u, 29u };

		public static uint Tier6Id = 55u;

		public static List<WaveData> WaveDatas = new List<WaveData>
		{
			new WaveData(new Dictionary<uint, int> { [13u] = 16 }, 1u, SWITCH.STRIKER, "<color=orange>Strikers</color> Integrated into Simulation"),
			new WaveData(new Dictionary<uint, int> { [11u] = 12 }, 1u, SWITCH.SHOOTER, "<color=orange>Shooters</color> Integrated into Simulation"),
			new WaveData(new Dictionary<uint, int>
			{
				[13u] = 10,
				[11u] = 6,
				[16u] = 2
			}, 2u, SWITCH.STRIKER, ""),
			new WaveData(new Dictionary<uint, int>
			{
				[13u] = 12,
				[11u] = 8,
				[16u] = 2,
				[18u] = 2
			}, 2u, SWITCH.STRIKER, ""),
			new WaveData(new Dictionary<uint, int>
			{
				[13u] = 15,
				[11u] = 8,
				[16u] = 4,
				[18u] = 2
			}, "Big Wave Approaching!!"),
			new WaveData(new Dictionary<uint, int>
			{
				[21u] = 12,
				[13u] = 8
			}, 1u, SWITCH.SHADOW, "<color=orange>Shadows</color> Integrated into Simulation"),
			new WaveData(new Dictionary<uint, int>
			{
				[21u] = 12,
				[11u] = 6,
				[35u] = 2
			}, 2u, SWITCH.SHADOW, ""),
			new WaveData(new Dictionary<uint, int>
			{
				[21u] = 20,
				[35u] = 2
			}, 2u, SWITCH.SHADOW, ""),
			new WaveData(new Dictionary<uint, int>
			{
				[21u] = 12,
				[35u] = 4
			}, 3u, SWITCH.SHADOW, ""),
			new WaveData(new Dictionary<uint, int>
			{
				[13u] = 12,
				[11u] = 8,
				[16u] = 2,
				[21u] = 12,
				[35u] = 2
			}, "Big Wave Approaching!!"),
			new WaveData(new Dictionary<uint, int> { [46u] = 1 }, 1u, SWITCH.POUNCER, "<color=orange>Pouncers</color> integrated into simulation"),
			new WaveData(new Dictionary<uint, int>
			{
				[46u] = 2,
				[13u] = 8
			}, 2u, SWITCH.POUNCER, ""),
			new WaveData(new Dictionary<uint, int>
			{
				[46u] = 1,
				[42u] = 8
			}, 1u, SWITCH.FLYER, "<color=orange>Flyers</color> integrated into simulation"),
			new WaveData(new Dictionary<uint, int>
			{
				[46u] = 1,
				[42u] = 16
			}, 2u, SWITCH.FLYER, ""),
			new WaveData(new Dictionary<uint, int>
			{
				[13u] = 12,
				[11u] = 8,
				[16u] = 2,
				[21u] = 12,
				[35u] = 2,
				[42u] = 12
			}, "Big Wave Approaching!!"),
			new WaveData(new Dictionary<uint, int>
			{
				[13u] = 12,
				[30u] = 8
			}, 1u, SWITCH.BULLRUSHER, "<color=orange>Chargers</color> Integrated into simulation"),
			new WaveData(new Dictionary<uint, int>
			{
				[30u] = 12,
				[13u] = 8,
				[11u] = 6
			}, 1u, SWITCH.BULLRUSHER, ""),
			new WaveData(new Dictionary<uint, int>
			{
				[30u] = 16,
				[39u] = 2
			}, 2u, SWITCH.BULLRUSHER, ""),
			new WaveData(new Dictionary<uint, int>
			{
				[13u] = 8,
				[30u] = 16,
				[39u] = 3
			}, 3u, SWITCH.BULLRUSHER, ""),
			new WaveData(new Dictionary<uint, int>
			{
				[13u] = 16,
				[11u] = 8,
				[16u] = 2,
				[21u] = 12,
				[35u] = 2,
				[30u] = 8,
				[39u] = 2,
				[46u] = 1,
				[42u] = 8
			}, "Big Wave Approaching!!"),
			new WaveData(new Dictionary<uint, int>
			{
				[33u] = 4,
				[11u] = 10,
				[18u] = 2
			}, 3u, SWITCH.SHOOTER, "<color=orange>Hybrids</color> integrated into simulation"),
			new WaveData(new Dictionary<uint, int>
			{
				[53u] = 10,
				[52u] = 6
			}, 1u, SWITCH.STRIKER_BERSERK, "<color=orange>Nightmares</color> integrated into simulation"),
			new WaveData(new Dictionary<uint, int>
			{
				[53u] = 16,
				[52u] = 12
			}, 2u, SWITCH.SHOOTER_SPREAD, ""),
			new WaveData(new Dictionary<uint, int>
			{
				[53u] = 12,
				[52u] = 8,
				[62u] = 1
			}, 3u, SWITCH.STRIKER_BERSERK, ""),
			new WaveData(new Dictionary<uint, int>
			{
				[13u] = 16,
				[11u] = 8,
				[16u] = 2,
				[30u] = 8,
				[39u] = 4,
				[42u] = 8,
				[33u] = 2,
				[62u] = 1
			}, "Big Wave Approaching!!"),
			new WaveData(new Dictionary<uint, int> { [29u] = 1 }, 1u, SWITCH.TANK, "<color=orange>Tanks</color> integrated into simulation"),
			new WaveData(new Dictionary<uint, int>
			{
				[29u] = 1,
				[33u] = 2,
				[30u] = 6,
				[13u] = 10
			}, 2u, SWITCH.TANK, ""),
			new WaveData(new Dictionary<uint, int>
			{
				[38u] = 50,
				[63u] = 50
			}, 2u, SWITCH.BIRTHER, "!!!"),
			new WaveData(new Dictionary<uint, int>
			{
				[36u] = 1,
				[38u] = 25
			}, 3u, SWITCH.BIRTHER, "<color=orange>Birthers</color> integrated into simulation"),
			new WaveData(new Dictionary<uint, int>
			{
				[13u] = 20,
				[11u] = 12,
				[16u] = 4,
				[21u] = 12,
				[33u] = 2,
				[18u] = 4,
				[38u] = 20,
				[29u] = 1
			}, "Big Wave Approaching!!"),
			new WaveData(new Dictionary<uint, int>
			{
				[13u] = 16,
				[42u] = 8,
				[33u] = 2,
				[39u] = 2
			}, 2u, SWITCH.STRIKER, ""),
			new WaveData(new Dictionary<uint, int>
			{
				[53u] = 6,
				[52u] = 6,
				[36u] = 1,
				[21u] = 15
			}, 3u, SWITCH.STRIKER_BERSERK, ""),
			new WaveData(new Dictionary<uint, int>
			{
				[52u] = 12,
				[11u] = 20,
				[39u] = 2
			}, 3u, SWITCH.SHOOTER_SPREAD, ""),
			new WaveData(new Dictionary<uint, int>
			{
				[16u] = 10,
				[29u] = 1
			}, 3u, SWITCH.TANK, ""),
			new WaveData(new Dictionary<uint, int>
			{
				[52u] = 12,
				[11u] = 12,
				[18u] = 2,
				[35u] = 3,
				[46u] = 1,
				[62u] = 1,
				[29u] = 1,
				[36u] = 1
			}, "Big Wave Approaching!!"),
			new WaveData(new Dictionary<uint, int> { [56u] = 4 }, 2u, SWITCH.SHOOTER_SPREAD, ""),
			new WaveData(new Dictionary<uint, int>
			{
				[37u] = 1,
				[38u] = 35,
				[13u] = 10
			}, 3u, SWITCH.BIRTHER, "<color=orange>Queen Birthers</color> integrated into simulation"),
			new WaveData(new Dictionary<uint, int>
			{
				[13u] = 8,
				[30u] = 12,
				[39u] = 2,
				[56u] = 2,
				[36u] = 1
			}, 3u, SWITCH.BULLRUSHER, ""),
			new WaveData(new Dictionary<uint, int>
			{
				[13u] = 29,
				[100u] = 1
			}, 3u, SWITCH.STRIKER, "???"),
			new WaveData(new Dictionary<uint, int>
			{
				[38u] = 4,
				[63u] = 4,
				[13u] = 3,
				[11u] = 3,
				[42u] = 3,
				[21u] = 3,
				[30u] = 3,
				[53u] = 3,
				[52u] = 3,
				[33u] = 2,
				[16u] = 2,
				[18u] = 2,
				[39u] = 2,
				[46u] = 1,
				[35u] = 2,
				[56u] = 1,
				[62u] = 1,
				[36u] = 1,
				[37u] = 1,
				[29u] = 1
			}, "Final Wave Approaching!!")
		};

		public static Dictionary<uint, int> NewDict(List<uint> tier, int min, int max)
		{
			return new Dictionary<uint, int> { [RandomFromTier(tier)] = Random(min, max) };
		}

		public static uint RandomFromTier(List<uint> tier)
		{
			return tier[Random.Range(0, tier.Count)];
		}

		public static int Random(int min, int max)
		{
			return Random.Range(min, max + 1);
		}

		public static string NumberToNumeral(int num)
		{
			return num switch
			{
				1 => "I", 
				2 => "II", 
				3 => "III", 
				4 => "IV", 
				5 => "V", 
				6 => "VI", 
				7 => "VII", 
				8 => "VIII", 
				9 => "IX", 
				10 => "X", 
				_ => "", 
			};
		}
	}
	[HarmonyPatch]
	internal class SimPatches
	{
		[HarmonyPatch(typeof(PlayerGuiLayer), "Setup")]
		[HarmonyPostfix]
		private static void AddNewLayer(PlayerGuiLayer __instance)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			SimCore.waveInfo = ((Il2CppObjectBase)((GuiLayer)__instance).AddComp("Gui/Player/PUI_ObjectiveTimer", (GuiAnchor)3, new Vector2(0f, 400f), (Transform)null)).TryCast<PUI_ObjectiveTimer>();
		}

		[HarmonyPatch(typeof(InteractionGuiLayer), "Setup")]
		[HarmonyPostfix]
		private static void AddNewLayer(InteractionGuiLayer __instance)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			SimCore.intPrompt = ((Il2CppObjectBase)((GuiLayer)__instance).AddRectComp("Gui/Player/PUI_InteractionPrompt_CellUI", (GuiAnchor)3, new Vector2(0f, 350f), (Transform)null)).TryCast<PUI_InteractionPrompt>();
		}
	}
	public class WaveData
	{
		public Dictionary<uint, int> EnemyList { get; set; }

		public string? WardenIntel { get; set; }

		public uint? ScreamSize { get; set; }

		public uint? ScreamType { get; set; }

		public WaveData(Dictionary<uint, int> enemyList, uint screamSize, uint screamType, string? wardenIntel)
		{
			WardenIntel = wardenIntel;
			EnemyList = enemyList;
			ScreamSize = screamSize;
			ScreamType = screamType;
		}

		public WaveData(Dictionary<uint, int> enemyList, string? wardenIntel)
		{
			WardenIntel = wardenIntel;
			EnemyList = enemyList;
		}
	}
}