Decompiled source of ForgottenSkillsTweak v0.1.1

ForgottenSkillsTweaks/ForgottenSkillsTweaks.dll

Decompiled 13 hours ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security.Permissions;
using BepInEx;
using EntityStates;
using EntityStates.FalseSon;
using EntityStates.Huntress;
using EntityStates.Mage.Weapon;
using KinematicCharacterController;
using Microsoft.CodeAnalysis;
using On.EntityStates.FalseSon;
using On.EntityStates.Huntress;
using On.EntityStates.Mage.Weapon;
using On.RoR2;
using R2API;
using RoR2;
using RoR2.Projectile;
using RoR2.Skills;
using UnityEngine;
using UnityEngine.AddressableAssets;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("ForgottenSkillsTweaks")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+cc7dea8867df77fc6fba998680924e55cfee06ba")]
[assembly: AssemblyProduct("ForgottenSkillsTweaks")]
[assembly: AssemblyTitle("ForgottenSkillsTweaks")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[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]
	[Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

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

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace ForgottenSkillsTweaks
{
	public static class ArrowRainTweak
	{
		public static void init()
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Expected O, but got Unknown
			float newRadius = 13f;
			SkillDef val = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Huntress/HuntressBodyArrowRain.asset").WaitForCompletion();
			SkillDef val2 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Huntress/HuntressBodyBlink.asset").WaitForCompletion();
			val2.baseRechargeInterval = 4.5f;
			val.baseRechargeInterval = 11f;
			LanguageAPI.Add("HuntressArrowRainDescription", "<style=cIsUtility>Teleport</style> into the sky. Target an area to rain arrows, <style=cIsUtility>slowing</style> all enemies and dealing <style=cIsDamage>660% damage</style> per second.");
			val.skillDescriptionToken = "HuntressArrowRainDescription";
			ArrowRain.OnEnter += (hook_OnEnter)delegate(orig_OnEnter orig, ArrowRain self)
			{
				//IL_0025: 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_00a8: Unknown result type (might be due to invalid IL or missing references)
				orig.Invoke(self);
				self.areaIndicatorInstance.transform.localScale = new Vector3(newRadius, 150f, newRadius);
				ArrowRain.projectilePrefab.GetComponent<ProjectileDotZone>().lifetime = 7f;
				float num = (((EntityState)self).characterBody.attackSpeed - ((EntityState)self).characterBody.baseAttackSpeed) * 0.3f;
				ArrowRain.projectilePrefab.GetComponent<ProjectileDotZone>().resetFrequency = 4f * (1f + num);
				((Component)ArrowRain.projectilePrefab.GetComponent<ProjectileDotZone>()).transform.localScale = new Vector3(newRadius, 150f, newRadius) * 2f;
				ArrowRain.projectilePrefab.GetComponent<ProjectileDotZone>().overlapProcCoefficient = 0.7f;
				ArrowRain.projectilePrefab.GetComponent<ProjectileDotZone>().damageCoefficient = 0.75f;
			};
		}
	}
	public static class FlameThrowerTweak
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static hook_OnEnter <>9__5_0;

			public static hook_FixedUpdate <>9__5_1;

			internal void <init>b__5_0(orig_OnEnter orig, Flamethrower self)
			{
				orig.Invoke(self);
				self.entryDuration = 0.3f;
				self.tickDamageCoefficient *= 2.5f;
				Flamethrower.ignitePercentChance = 100f;
				self.maxDistance = newRange;
				float scaleRatio = newRange / 16f;
				if ((Object)(object)((EntityState)self).characterMotor != (Object)null)
				{
					((BaseCharacterController)((EntityState)self).characterMotor).Motor.ForceUnground(jumpDuration);
					((EntityState)self).characterMotor.velocity.y = 0f;
				}
				ScaleFlamethrowerVisual(self.leftFlamethrowerEffectInstance, scaleRatio);
				ScaleFlamethrowerVisual(self.rightFlamethrowerEffectInstance, scaleRatio);
			}

			internal void <init>b__5_1(orig_FixedUpdate orig, Flamethrower self)
			{
				//IL_006c: 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_007d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0082: Unknown result type (might be due to invalid IL or missing references)
				//IL_0087: Unknown result type (might be due to invalid IL or missing references)
				orig.Invoke(self);
				if (((EntityState)self).fixedAge <= jumpDuration && (Object)(object)((EntityState)self).characterMotor != (Object)null && (Object)(object)((EntityState)self).characterBody != (Object)null)
				{
					float num = ((EntityState)self).fixedAge / jumpDuration;
					float num2 = speedCurve.Evaluate(num);
					float num3 = ((EntityState)self).characterBody.moveSpeed * baseSpeedMultiplier * num2;
					CharacterMotor characterMotor = ((EntityState)self).characterMotor;
					characterMotor.rootMotion += Vector3.up * (num3 * Time.fixedDeltaTime);
					((EntityState)self).characterMotor.velocity.y = 0f;
				}
				else if (((EntityState)self).fixedAge <= gravityDelay + jumpDuration)
				{
					((EntityState)self).characterMotor.velocity.y = Mathf.Max(((EntityState)self).characterMotor.velocity.y, 0f);
				}
			}
		}

		private static float newRange = 45f;

		private static float jumpDuration = 0.5f;

		private static float baseSpeedMultiplier = 3.5f;

		private static float gravityDelay = 0.5f;

		private static readonly AnimationCurve speedCurve = new AnimationCurve((Keyframe[])(object)new Keyframe[3]
		{
			new Keyframe(0f, 1f),
			new Keyframe(0.7f, 0.5f),
			new Keyframe(1f, 0f)
		});

		public static void init()
		{
			//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)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Expected O, but got Unknown
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Expected O, but got Unknown
			SkillDef val = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Mage/MageBodyFlamethrower.asset").WaitForCompletion();
			LanguageAPI.Add("MageFlamethrowerNewDesc", "<style=cIsdamage>Ignite</style>. Burn all enemies in front of you for <style=cIsdamage>5000% damage</style>.");
			val.skillDescriptionToken = "MageFlamethrowerNewDesc";
			val.keywordTokens = new string[1] { "KEYWORD_IGNITE" };
			object obj = <>c.<>9__5_0;
			if (obj == null)
			{
				hook_OnEnter val2 = delegate(orig_OnEnter orig, Flamethrower self)
				{
					orig.Invoke(self);
					self.entryDuration = 0.3f;
					self.tickDamageCoefficient *= 2.5f;
					Flamethrower.ignitePercentChance = 100f;
					self.maxDistance = newRange;
					float scaleRatio = newRange / 16f;
					if ((Object)(object)((EntityState)self).characterMotor != (Object)null)
					{
						((BaseCharacterController)((EntityState)self).characterMotor).Motor.ForceUnground(jumpDuration);
						((EntityState)self).characterMotor.velocity.y = 0f;
					}
					ScaleFlamethrowerVisual(self.leftFlamethrowerEffectInstance, scaleRatio);
					ScaleFlamethrowerVisual(self.rightFlamethrowerEffectInstance, scaleRatio);
				};
				<>c.<>9__5_0 = val2;
				obj = (object)val2;
			}
			Flamethrower.OnEnter += (hook_OnEnter)obj;
			object obj2 = <>c.<>9__5_1;
			if (obj2 == null)
			{
				hook_FixedUpdate val3 = delegate(orig_FixedUpdate orig, Flamethrower self)
				{
					//IL_006c: 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_007d: Unknown result type (might be due to invalid IL or missing references)
					//IL_0082: Unknown result type (might be due to invalid IL or missing references)
					//IL_0087: Unknown result type (might be due to invalid IL or missing references)
					orig.Invoke(self);
					if (((EntityState)self).fixedAge <= jumpDuration && (Object)(object)((EntityState)self).characterMotor != (Object)null && (Object)(object)((EntityState)self).characterBody != (Object)null)
					{
						float num = ((EntityState)self).fixedAge / jumpDuration;
						float num2 = speedCurve.Evaluate(num);
						float num3 = ((EntityState)self).characterBody.moveSpeed * baseSpeedMultiplier * num2;
						CharacterMotor characterMotor = ((EntityState)self).characterMotor;
						characterMotor.rootMotion += Vector3.up * (num3 * Time.fixedDeltaTime);
						((EntityState)self).characterMotor.velocity.y = 0f;
					}
					else if (((EntityState)self).fixedAge <= gravityDelay + jumpDuration)
					{
						((EntityState)self).characterMotor.velocity.y = Mathf.Max(((EntityState)self).characterMotor.velocity.y, 0f);
					}
				};
				<>c.<>9__5_1 = val3;
				obj2 = (object)val3;
			}
			Flamethrower.FixedUpdate += (hook_FixedUpdate)obj2;
		}

		private static void ScaleFlamethrowerVisual(GameObject effectInstance, float scaleRatio)
		{
			//IL_004d: 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)
			if ((Object)(object)effectInstance == (Object)null)
			{
				return;
			}
			ParticleSystem[] componentsInChildren = effectInstance.GetComponentsInChildren<ParticleSystem>();
			ParticleSystem[] array = componentsInChildren;
			foreach (ParticleSystem val in array)
			{
				string name = ((Object)((Component)val).gameObject).name;
				if (!(name == "IcoCharge"))
				{
					MainModule main = val.main;
					((MainModule)(ref main)).startSpeedMultiplier = ((MainModule)(ref main)).startSpeedMultiplier * scaleRatio;
					if (name == "FireForward" || name == "Billboard")
					{
						((MainModule)(ref main)).startSizeMultiplier = ((MainModule)(ref main)).startSizeMultiplier * 1.5f;
					}
				}
			}
		}
	}
	[BepInPlugin("com.MiIsaarks.ForgottenSkillsTweaks", "ForgottenSkillsTweaks", "0.1.1")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class MainPlugin : BaseUnityPlugin
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static hook_FireBullet <>9__4_0;

			public static hook_OnEnter <>9__4_2;

			public static hook_GetGrowthLaserBonusDuration <>9__4_3;

			public static hook_Fire <>9__4_4;

			public static hook_OnEnter <>9__4_5;

			internal void <Awake>b__4_0(orig_FireBullet orig, LaserFatherCharged self, Transform a, Ray b, string c, float d)
			{
				//IL_000a: Unknown result type (might be due to invalid IL or missing references)
				light = true;
				orig.Invoke(self, a, b, c, d);
				light = false;
			}

			internal void <Awake>b__4_2(orig_OnEnter orig, LaserFather self)
			{
				self.baseChargeDuration = 0.5f;
				orig.Invoke(self);
			}

			internal float <Awake>b__4_3(orig_GetGrowthLaserBonusDuration orig, FalseSonController self)
			{
				return 0f;
			}

			internal void <Awake>b__4_4(orig_Fire orig, BulletAttack self)
			{
				//IL_0028: Unknown result type (might be due to invalid IL or missing references)
				//IL_0032: Unknown result type (might be due to invalid IL or missing references)
				//IL_0075: Unknown result type (might be due to invalid IL or missing references)
				if ((Object)(object)self.owner != (Object)null)
				{
					CharacterBody component = self.owner.GetComponent<CharacterBody>();
					if ((Object)(object)component != (Object)null && component.bodyIndex == BodyCatalog.FindBodyIndex("FalseSonBody"))
					{
						EntityStateMachine val = EntityStateMachine.FindByCustomName(self.owner, "Weapon");
						if ((Object)(object)val != (Object)null && val.state is LaserFatherCharged)
						{
							self.falloffModel = (FalloffModel)0;
						}
					}
				}
				orig.Invoke(self);
			}

			internal void <Awake>b__4_5(orig_OnEnter orig, LaserFatherCharged self)
			{
				orig.Invoke(self);
				float num = (((EntityState)self).characterBody.attackSpeed - ((EntityState)self).characterBody.baseAttackSpeed) * 0.3f;
				self.fireFrequency = LaserFatherCharged.baseFireFrequency * (1f + num);
				hitcount = 1;
				LaserFatherCharged.procCoefficientPerTick = 0.7f;
				SkillLocator skillLocator = ((EntityState)self).characterBody.skillLocator;
				self.spikeRefillAmountPerSecond = 0f;
				if ((Object)(object)skillLocator != (Object)null)
				{
					float num2 = skillLocator.GetSkill((SkillSlot)1).maxStock;
					float num3 = skillLocator.GetSkill((SkillSlot)1).stock;
					int num4 = (int)(num2 * 0.5f);
					((EntityState)self).skillLocator.GetSkill((SkillSlot)1).stock = (int)Mathf.Clamp(num3 + (float)num4, num3, num2);
				}
				if (!originalDamage.HasValue)
				{
					originalDamage = LaserFatherCharged.damageCoefficient * 1.35f;
				}
				FalseSonController component = ((Component)((EntityState)self).characterBody).GetComponent<FalseSonController>();
				if ((Object)(object)component != (Object)null)
				{
					int growthLevel = component.growthLevel;
					float num5 = 1f + (float)growthLevel * 0.05f;
					LaserFatherCharged.damageCoefficient = originalDamage.Value * num5;
				}
			}
		}

		private static int hitsToLightning = 10;

		private static int hitcount = 0;

		private static float? originalDamage = null;

		private static bool light = false;

		public void Awake()
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Expected O, but got Unknown
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Expected O, but got Unknown
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Expected O, but got Unknown
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Expected O, but got Unknown
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_012a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Expected O, but got Unknown
			//IL_014a: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0155: Expected O, but got Unknown
			FlameThrowerTweak.init();
			ArrowRainTweak.init();
			GameObject Lightning = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/FalseSon/LunarStakeLightningStrikeImpactEffect.prefab").WaitForCompletion();
			object obj = <>c.<>9__4_0;
			if (obj == null)
			{
				hook_FireBullet val = delegate(orig_FireBullet orig, LaserFatherCharged self, Transform a, Ray b, string c, float d)
				{
					//IL_000a: Unknown result type (might be due to invalid IL or missing references)
					light = true;
					orig.Invoke(self, a, b, c, d);
					light = false;
				};
				<>c.<>9__4_0 = val;
				obj = (object)val;
			}
			LaserFatherCharged.FireBullet += (hook_FireBullet)obj;
			BulletAttack.DefaultHitCallbackImplementation += (hook_DefaultHitCallbackImplementation)delegate(orig_DefaultHitCallbackImplementation orig, BulletAttack self, ref BulletHit bullethit)
			{
				//IL_006e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0073: Unknown result type (might be due to invalid IL or missing references)
				//IL_008b: 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_00a2: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a5: 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_00af: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
				//IL_00da: Unknown result type (might be due to invalid IL or missing references)
				//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
				//IL_0101: Expected O, but got Unknown
				bool result = orig.Invoke(self, ref bullethit);
				if (!light)
				{
					return result;
				}
				if ((Object)(object)bullethit.entityObject.GetComponent<HealthComponent>() != (Object)null)
				{
					hitcount++;
					if (hitcount % hitsToLightning == 0)
					{
						GameObject inflictor = Object.Instantiate<GameObject>(Lightning, bullethit.entityObject.transform.position, Quaternion.identity);
						bullethit.entityObject.GetComponent<HealthComponent>().TakeDamage(new DamageInfo
						{
							damage = self.damage * 3f,
							position = bullethit.point,
							force = Vector3.zero,
							attacker = self.owner,
							inflictor = inflictor,
							crit = self.isCrit,
							damageColorIndex = (DamageColorIndex)0,
							damageType = DamageTypeCombo.op_Implicit((DamageTypeExtended)8192),
							procCoefficient = 1f
						});
					}
				}
				return result;
			};
			object obj2 = <>c.<>9__4_2;
			if (obj2 == null)
			{
				hook_OnEnter val2 = delegate(orig_OnEnter orig, LaserFather self)
				{
					self.baseChargeDuration = 0.5f;
					orig.Invoke(self);
				};
				<>c.<>9__4_2 = val2;
				obj2 = (object)val2;
			}
			LaserFather.OnEnter += (hook_OnEnter)obj2;
			SkillDef val3 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC2/FalseSon/FalseSonBodyLaser.asset").WaitForCompletion();
			LanguageAPI.Add("FalseSonLaserDescriptionNew", "Charge a rapidly hitting laser dealing <style=cIsDamage>320%-1890% damage</style> for <style=cIsUtility>4s</style> and refill <style=cIsUtility>Lunar Spikes</style>. Increases in damage through <style=cIsHealing>Growth</style>. Summons <style=cIsDamage>Lightning</style> on repeated hits.");
			val3.skillDescriptionToken = "FalseSonLaserDescriptionNew";
			LanguageAPI.Add("KEYWORD_LASER_LIGHTNING", "<style=cKeywordName>Brother's Lightning</style><style=cSub>\nEvery <style=cIsUtility>10 hits</style> with the laser, call down a lightning strike dealing <style=cIsDamage>300% </style>of the laser's damage.</style>");
			val3.keywordTokens = new string[2] { "KEYWORD_GROWTH", "KEYWORD_LASER_LIGHTNING" };
			val3.baseRechargeInterval = 10f;
			object obj3 = <>c.<>9__4_3;
			if (obj3 == null)
			{
				hook_GetGrowthLaserBonusDuration val4 = (orig_GetGrowthLaserBonusDuration orig, FalseSonController self) => 0f;
				<>c.<>9__4_3 = val4;
				obj3 = (object)val4;
			}
			FalseSonController.GetGrowthLaserBonusDuration += (hook_GetGrowthLaserBonusDuration)obj3;
			object obj4 = <>c.<>9__4_4;
			if (obj4 == null)
			{
				hook_Fire val5 = delegate(orig_Fire orig, BulletAttack self)
				{
					//IL_0028: Unknown result type (might be due to invalid IL or missing references)
					//IL_0032: Unknown result type (might be due to invalid IL or missing references)
					//IL_0075: Unknown result type (might be due to invalid IL or missing references)
					if ((Object)(object)self.owner != (Object)null)
					{
						CharacterBody component = self.owner.GetComponent<CharacterBody>();
						if ((Object)(object)component != (Object)null && component.bodyIndex == BodyCatalog.FindBodyIndex("FalseSonBody"))
						{
							EntityStateMachine val7 = EntityStateMachine.FindByCustomName(self.owner, "Weapon");
							if ((Object)(object)val7 != (Object)null && val7.state is LaserFatherCharged)
							{
								self.falloffModel = (FalloffModel)0;
							}
						}
					}
					orig.Invoke(self);
				};
				<>c.<>9__4_4 = val5;
				obj4 = (object)val5;
			}
			BulletAttack.Fire += (hook_Fire)obj4;
			object obj5 = <>c.<>9__4_5;
			if (obj5 == null)
			{
				hook_OnEnter val6 = delegate(orig_OnEnter orig, LaserFatherCharged self)
				{
					orig.Invoke(self);
					float num = (((EntityState)self).characterBody.attackSpeed - ((EntityState)self).characterBody.baseAttackSpeed) * 0.3f;
					self.fireFrequency = LaserFatherCharged.baseFireFrequency * (1f + num);
					hitcount = 1;
					LaserFatherCharged.procCoefficientPerTick = 0.7f;
					SkillLocator skillLocator = ((EntityState)self).characterBody.skillLocator;
					self.spikeRefillAmountPerSecond = 0f;
					if ((Object)(object)skillLocator != (Object)null)
					{
						float num2 = skillLocator.GetSkill((SkillSlot)1).maxStock;
						float num3 = skillLocator.GetSkill((SkillSlot)1).stock;
						int num4 = (int)(num2 * 0.5f);
						((EntityState)self).skillLocator.GetSkill((SkillSlot)1).stock = (int)Mathf.Clamp(num3 + (float)num4, num3, num2);
					}
					if (!originalDamage.HasValue)
					{
						originalDamage = LaserFatherCharged.damageCoefficient * 1.35f;
					}
					FalseSonController component = ((Component)((EntityState)self).characterBody).GetComponent<FalseSonController>();
					if ((Object)(object)component != (Object)null)
					{
						int growthLevel = component.growthLevel;
						float num5 = 1f + (float)growthLevel * 0.05f;
						LaserFatherCharged.damageCoefficient = originalDamage.Value * num5;
					}
				};
				<>c.<>9__4_5 = val6;
				obj5 = (object)val6;
			}
			LaserFatherCharged.OnEnter += (hook_OnEnter)obj5;
		}
	}
}