Decompiled source of EclipseRevamped v1.0.1

EclipseRevamped.dll

Decompiled 4 months ago
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using HG.Reflection;
using IL.RoR2;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.RoR2;
using R2API;
using RoR2;
using RoR2.CharacterAI;
using UnityEngine;
using UnityEngine.AddressableAssets;

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

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
	[EditorBrowsable(EditorBrowsableState.Never)]
	public static class IsExternalInit
	{
	}
}
namespace EclipseRevamped
{
	[BepInPlugin("com.Nuxlar.EclipseRevamped", "EclipseRevamped", "1.0.1")]
	public class EclipseRevamped : BaseUnityPlugin
	{
		private GameObject vagrantMaster = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Vagrant/VagrantMaster.prefab").WaitForCompletion();

		private GameObject awuMaster = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/RoboBallBoss/SuperRoboBallBossMaster.prefab").WaitForCompletion();

		private GameObject grandparentMaster = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Grandparent/GrandparentMaster.prefab").WaitForCompletion();

		private static ConfigEntry<bool> enableE1Changes;

		private static ConfigEntry<bool> enableE2Changes;

		private static ConfigEntry<bool> enableE3Changes;

		private static ConfigEntry<bool> enableE5Changes;

		private static ConfigEntry<bool> enableE6Changes;

		private static ConfigFile ERConfig { get; set; }

		public void Awake()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Expected O, but got Unknown
			//IL_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Expected O, but got Unknown
			//IL_018d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0197: Expected O, but got Unknown
			//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c5: Expected O, but got Unknown
			//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b4: Expected O, but got Unknown
			//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e2: Expected O, but got Unknown
			//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: Expected O, but got Unknown
			//IL_0206: Unknown result type (might be due to invalid IL or missing references)
			//IL_0210: 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
			ERConfig = new ConfigFile(Paths.ConfigPath + "\\com.Nuxlar.EclipseRevamped.cfg", true);
			enableE1Changes = ERConfig.Bind<bool>("General", "Enable E1 Changes", true, "Replaces E1 with a new modifier.");
			enableE2Changes = ERConfig.Bind<bool>("General", "Enable E2 Changes", true, "Replaces E2 with a new modifier.");
			enableE3Changes = ERConfig.Bind<bool>("General", "Enable E3 Changes", true, "Replaces E3 with a new modifier.");
			enableE5Changes = ERConfig.Bind<bool>("General", "Enable E5 Tweak", true, "Reduces healing reduction to 25% instead of 50%.");
			enableE6Changes = ERConfig.Bind<bool>("General", "Enable E6 Changes", true, "Replaces E6 with a new modifier.");
			(from x in vagrantMaster.GetComponents<AISkillDriver>()
				where x.customName == "FireNova"
				select x).First().noRepeat = true;
			(from x in awuMaster.GetComponents<AISkillDriver>()
				where x.customName == "EnableEyebeam"
				select x).First().noRepeat = true;
			(from x in grandparentMaster.GetComponents<AISkillDriver>()
				where x.customName == "ChannelSun"
				select x).First().noRepeat = true;
			ChangeDescriptions();
			if (enableE1Changes.Value)
			{
				CharacterMaster.OnBodyStart += new Manipulator(RemoveVanillaE1);
				Run.RecalculateDifficultyCoefficentInternal += new hook_RecalculateDifficultyCoefficentInternal(AddNewE1);
			}
			if (enableE2Changes.Value)
			{
				HoldoutZoneController.FixedUpdate += new Manipulator(RemoveVanillaE2);
			}
			CombatDirector.Awake += new hook_Awake(AddNewE2E6);
			if (enableE3Changes.Value)
			{
				GlobalEventManager.OnCharacterHitGroundServer += new Manipulator(RemoveVanillaE3);
				RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(AddNewE3);
			}
			if (enableE5Changes.Value)
			{
				HealthComponent.Heal += new Manipulator(TweakVanillaE5);
			}
			if (enableE6Changes.Value)
			{
				DeathRewards.OnKilledServer += new Manipulator(RemoveVanillaE6);
			}
		}

		private void ChangeDescriptions()
		{
			string text = "Starts at baseline Monsoon difficulty.\n";
			string text2 = "\n<mspace=0.5em>(1)</mspace> Difficulty Scaling: <style=cIsHealth>+25%</style></style>";
			string text3 = "\n<mspace=0.5em>(2)</mspace> Director Credits: <style=cIsHealth>+20%</style></style>";
			string text4 = "\n<mspace=0.5em>(3)</mspace> Enemy Attack Speed: <style=cIsHealth>+25%</style></style>";
			string text5 = "\n<mspace=0.5em>(4)</mspace> Enemies: <style=cIsHealth>+40% Faster</style></style>";
			string text6 = "\n<mspace=0.5em>(5)</mspace> Ally Healing: <style=cIsHealth>-25%</style></style>";
			string text7 = "\n<mspace=0.5em>(6)</mspace> Director Credit Generation: <style=cIsHealth>+15% Faster</style></style>";
			string text8 = "\n<mspace=0.5em>(7)</mspace> Enemy Cooldowns: <style=cIsHealth>-50%</style></style>";
			string text9 = "\n<mspace=0.5em>(8)</mspace> Allies recieve <style=cIsHealth>permanent damage</style></style>";
			string text10 = "\"You only celebrate in the light... because I allow it.\" \n\n";
			LanguageAPI.Add("ECLIPSE_1_DESCRIPTION", text + text2);
			LanguageAPI.Add("ECLIPSE_2_DESCRIPTION", text + text2 + text3);
			LanguageAPI.Add("ECLIPSE_3_DESCRIPTION", text + text2 + text3 + text4);
			LanguageAPI.Add("ECLIPSE_4_DESCRIPTION", text + text2 + text3 + text4 + text5);
			LanguageAPI.Add("ECLIPSE_5_DESCRIPTION", text + text2 + text3 + text4 + text5 + text6);
			LanguageAPI.Add("ECLIPSE_6_DESCRIPTION", text + text2 + text3 + text4 + text5 + text6 + text7);
			LanguageAPI.Add("ECLIPSE_7_DESCRIPTION", text + text2 + text3 + text4 + text5 + text6 + text7 + text8);
			LanguageAPI.Add("ECLIPSE_8_DESCRIPTION", text10 + text + text2 + text3 + text4 + text5 + text6 + text7 + text8 + text9);
		}

		private void AddNewE1(orig_RecalculateDifficultyCoefficentInternal orig, Run self)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			float runStopwatch = self.GetRunStopwatch();
			DifficultyDef difficultyDef = DifficultyCatalog.GetDifficultyDef(self.selectedDifficulty);
			float num = difficultyDef.scalingValue;
			if (difficultyDef.nameToken.Contains("ECLIPSE"))
			{
				num *= 1.25f;
			}
			float num2 = Mathf.Floor(runStopwatch * (1f / 60f));
			float num3 = (float)self.participatingPlayerCount * 0.3f;
			float num4 = 0.7f + num3;
			float num5 = 0.7f + num3;
			float num6 = Mathf.Pow((float)self.participatingPlayerCount, 0.2f);
			float num7 = 0.0506f * num * num6;
			float num8 = 0.0506f * num * num6;
			float num9 = Mathf.Pow(1.15f, (float)self.stageClearCount);
			self.compensatedDifficultyCoefficient = (num5 + num8 * num2) * num9;
			self.difficultyCoefficient = (num4 + num7 * num2) * num9;
			self.ambientLevel = Mathf.Min((float)(((double)((num4 + num7 * (runStopwatch * (1f / 60f))) * Mathf.Pow(1.15f, (float)self.stageClearCount)) - (double)num4) / 0.33000001311302185 + 1.0), (float)Run.ambientLevelCap);
			int ambientLevelFloor = self.ambientLevelFloor;
			self.ambientLevelFloor = Mathf.FloorToInt(self.ambientLevel);
			if (ambientLevelFloor != self.ambientLevelFloor && ambientLevelFloor != 0 && self.ambientLevelFloor > ambientLevelFloor)
			{
				self.OnAmbientLevelUp();
			}
		}

		private void RemoveVanillaE1(ILContext il)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 0.5f)
			}))
			{
				val.Next.Operand = 1f;
			}
			else
			{
				Debug.LogError((object)"EclipseRevamped: Failed to remove vanilla E1");
			}
		}

		private void AddNewE2E6(orig_Awake orig, CombatDirector self)
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Invalid comparison between Unknown and I4
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Invalid comparison between Unknown and I4
			if (Object.op_Implicit((Object)(object)Run.instance))
			{
				if (enableE2Changes.Value && (int)Run.instance.selectedDifficulty >= 4)
				{
					self.creditMultiplier += 0.2f;
				}
				if (enableE6Changes.Value && (int)Run.instance.selectedDifficulty >= 8)
				{
					for (int i = 0; i < self.moneyWaveIntervals.Length; i++)
					{
						self.moneyWaveIntervals[i].min *= 0.85f;
						self.moneyWaveIntervals[i].max *= 0.85f;
					}
				}
			}
			orig.Invoke(self);
		}

		private void RemoveVanillaE2(ILContext il)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 0.5f)
			}))
			{
				val.Next.Operand = 1f;
			}
			else
			{
				Debug.LogError((object)"EclipseRevamped: Failed to remove vanilla E2");
			}
		}

		private void RemoveVanillaE3(ILContext il)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 5)
			}))
			{
				int index = val.Index;
				val.Index = index + 1;
				val.EmitDelegate<Func<int, int>>((Func<int, int>)((int useless) => int.MaxValue));
			}
			else
			{
				Debug.LogError((object)"EclipseRevamped: Failed to remove vanilla E3");
			}
		}

		private void AddNewE3(CharacterBody sender, StatHookEventArgs args)
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Invalid comparison between Unknown and I4
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Invalid comparison between Unknown and I4
			if (Object.op_Implicit((Object)(object)Run.instance) && (int)Run.instance.selectedDifficulty >= 5 && Object.op_Implicit((Object)(object)sender) && Object.op_Implicit((Object)(object)sender.teamComponent) && (int)sender.teamComponent.teamIndex != 1)
			{
				args.attackSpeedMultAdd += 0.25f;
			}
		}

		private void TweakVanillaE5(ILContext il)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[2]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 2f),
				(Instruction x) => ILPatternMatchingExt.MatchDiv(x)
			}))
			{
				val.Next.Operand = 1.33f;
			}
			else
			{
				Debug.LogError((object)"EclipseRevamped: Failed to tweak vanilla E5");
			}
		}

		private void RemoveVanillaE6(ILContext il)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 0.8f)
			}))
			{
				val.Next.Operand = 1f;
			}
			else
			{
				Debug.LogError((object)"EclipseRevamped: Failed to remove vanilla E6");
			}
		}
	}
}