Decompiled source of Tyranitar v1.2.2

Tyranitar.dll

Decompiled a month 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 System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntityStates;
using EntityStates.BeetleGuardMonster;
using EntityStates.BrotherMonster;
using EntityStates.Croco;
using EntityStates.GrandParentBoss;
using EntityStates.ImpBossMonster;
using EntityStates.ParentMonster;
using EntityStates.TitanMonster;
using EntityStates.VagrantMonster;
using HG;
using HG.BlendableTypes;
using KinematicCharacterController;
using On.RoR2;
using R2API;
using R2API.Networking;
using R2API.Networking.Interfaces;
using R2API.Utils;
using Rewired.ComponentControls.Effects;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using Risky_Artifacts.Artifacts;
using RoR2;
using RoR2.Achievements;
using RoR2.Audio;
using RoR2.CharacterAI;
using RoR2.ContentManagement;
using RoR2.Navigation;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using ThreeEyedGames;
using Tyranitar.Modules;
using Tyranitar.Modules.Achievements;
using Tyranitar.Modules.Components;
using Tyranitar.Modules.Enemies;
using Tyranitar.SkillStates.BaseStates;
using Tyranitar.SkillStates.Tyranitar;
using Tyranitar.SkillStates.Tyranitar.HyperBeam;
using Tyranitar.SkillStates.Tyranitar.Sandstorm;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.Rendering;
using UnityEngine.Rendering.PostProcessing;

[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 = "")]
[assembly: AssemblyCompany("Tyranitar")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Tyranitar")]
[assembly: AssemblyTitle("Tyranitar")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: UnverifiableCode]
internal static class Log
{
	internal static ManualLogSource _logSource;

	internal static void Init(ManualLogSource logSource)
	{
		_logSource = logSource;
	}

	internal static void Debug(object data)
	{
		_logSource.LogDebug(data);
	}

	internal static void Error(object data)
	{
		_logSource.LogError(data);
	}

	internal static void Fatal(object data)
	{
		_logSource.LogFatal(data);
	}

	internal static void Info(object data)
	{
		_logSource.LogInfo(data);
	}

	internal static void Message(object data)
	{
		_logSource.LogMessage(data);
	}

	internal static void Warning(object data)
	{
		_logSource.LogWarning(data);
	}
}
internal class BodyInfo
{
	internal string bodyName = "";

	internal string bodyNameToken = "";

	internal string subtitleNameToken = "";

	internal Color bodyColor = Color.white;

	internal Texture characterPortrait = null;

	internal GameObject crosshair = null;

	internal GameObject podPrefab = null;

	internal float maxHealth = 100f;

	internal float healthGrowth = 2f;

	internal float healthRegen = 0f;

	internal float shield = 0f;

	internal float shieldGrowth = 0f;

	internal float moveSpeed = 7f;

	internal float moveSpeedGrowth = 0f;

	internal float acceleration = 80f;

	internal float jumpPower = 15f;

	internal float jumpPowerGrowth = 0f;

	internal float damage = 12f;

	internal float attackSpeed = 1f;

	internal float attackSpeedGrowth = 0f;

	internal float armor = 0f;

	internal float armorGrowth = 0f;

	internal float crit = 1f;

	internal float critGrowth = 0f;

	internal int jumpCount = 1;
}
internal class CustomRendererInfo
{
	internal string childName;

	internal Material material;

	internal bool ignoreOverlays;
}
internal class SkillDefInfo
{
	public string skillName;

	public string skillNameToken;

	public string skillDescriptionToken;

	public string[] keywordTokens = new string[0];

	public Sprite skillIcon;

	public SerializableEntityStateType activationState;

	public InterruptPriority interruptPriority;

	public string activationStateMachineName;

	public float baseRechargeInterval;

	public int baseMaxStock = 1;

	public int rechargeStock = 1;

	public int requiredStock = 1;

	public int stockToConsume = 1;

	public bool isCombatSkill = true;

	public bool canceledFromSprinting;

	public bool forceSprintDuringState;

	public bool cancelSprintingOnActivation = true;

	public bool beginSkillCooldownOnSkillEnd;

	public bool fullRestockOnAssign = true;

	public bool resetCooldownTimerOnUse;

	public bool mustKeyPress;

	public SkillDefInfo()
	{
	}

	public SkillDefInfo(string skillName, string skillNameToken, string skillDescriptionToken, Sprite skillIcon, SerializableEntityStateType activationState, string activationStateMachineName, InterruptPriority interruptPriority, bool isCombatSkill, float baseRechargeInterval)
	{
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0065: 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_0075: Unknown result type (might be due to invalid IL or missing references)
		this.skillName = skillName;
		this.skillNameToken = skillNameToken;
		this.skillDescriptionToken = skillDescriptionToken;
		this.skillIcon = skillIcon;
		this.activationState = activationState;
		this.activationStateMachineName = activationStateMachineName;
		this.interruptPriority = interruptPriority;
		this.isCombatSkill = isCombatSkill;
		this.baseRechargeInterval = baseRechargeInterval;
	}

	public SkillDefInfo(string skillName, string skillNameToken, string skillDescriptionToken, Sprite skillIcon, SerializableEntityStateType activationState, string activationStateMachineName = "Weapon", bool agile = false)
	{
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0065: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		this.skillName = skillName;
		this.skillNameToken = skillNameToken;
		this.skillDescriptionToken = skillDescriptionToken;
		this.skillIcon = skillIcon;
		this.activationState = activationState;
		this.activationStateMachineName = activationStateMachineName;
		interruptPriority = (InterruptPriority)0;
		isCombatSkill = true;
		baseRechargeInterval = 0f;
		requiredStock = 0;
		stockToConsume = 0;
		cancelSprintingOnActivation = !agile;
		if (agile)
		{
			keywordTokens = new string[1] { "KEYWORD_AGILE" };
		}
	}
}
namespace Tyranitar
{
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.rob.Tyranitar", "Tyranitar", "1.2.2")]
	[R2APISubmoduleDependency(new string[] { "PrefabAPI", "LanguageAPI", "SoundAPI", "DirectorAPI", "LoadoutAPI", "UnlockableAPI", "NetworkingAPI", "RecalculateStatsAPI" })]
	public class TyranitarPlugin : BaseUnityPlugin
	{
		public const string MODUID = "com.rob.Tyranitar";

		public const string MODNAME = "Tyranitar";

		public const string MODVERSION = "1.2.2";

		public const string developerPrefix = "ROB";

		public static TyranitarPlugin instance;

		public static bool riskyArtifactsInstalled => Chainloader.PluginInfos.ContainsKey("com.Moffein.RiskyArtifacts");

		public static bool rooInstalled => Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions");

		private void Awake()
		{
			instance = this;
			Config.myConfig = ((BaseUnityPlugin)this).Config;
			Log.Init(((BaseUnityPlugin)this).Logger);
			TtarAssets.PopulateAssets();
			Config.ReadConfig();
			CameraParams.InitializeParams();
			States.RegisterStates();
			Buffs.RegisterBuffs();
			Projectiles.RegisterProjectiles();
			Tokens.AddTokens();
			ItemDisplays.PopulateDisplays();
			NetMessages.RegisterNetworkMessages();
			new Tyranitar.Modules.Enemies.Tyranitar().CreateCharacter();
			Hook();
			new ContentPacks().Initialize();
			ContentManager.onContentPacksAssigned += LateSetup;
		}

		private void LateSetup(ReadOnlyArray<ReadOnlyContentPack> obj)
		{
			Tyranitar.Modules.Enemies.Tyranitar.SetItemDisplays();
			Buffs.armorBuff.iconSprite = Buffs.ArmorBoost.iconSprite;
		}

		private void Hook()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(RecalculateStatsAPI_GetStatCoefficients);
		}

		private void RecalculateStatsAPI_GetStatCoefficients(CharacterBody sender, StatHookEventArgs args)
		{
			if (sender.HasBuff(Buffs.armorBuff))
			{
				args.armorAdd += 500f;
			}
			if (sender.HasBuff(Buffs.slowStartBuff))
			{
				args.armorAdd += 20f;
				args.moveSpeedReductionMultAdd += 1f;
				args.attackSpeedMultAdd -= 0.5f;
				args.damageMultAdd -= 0.5f;
			}
		}

		private void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self)
		{
			orig.Invoke(self);
		}
	}
}
namespace Tyranitar.SkillStates.Tyranitar
{
	public class AncientPowerEnemy : ChargeAncientPower
	{
		public int maxRockCount = 8;

		public override void OnEnter()
		{
			base.OnEnter();
			healthCostFraction = 0f;
		}

		protected override void ChargeRock()
		{
			if (((EntityState)this).isAuthority && rockCount >= maxRockCount)
			{
				FireAncientPower nextState = new FireAncientPower
				{
					rockCount = rockCount
				};
				((EntityState)this).outer.SetNextState((EntityState)(object)nextState);
			}
			else
			{
				base.ChargeRock();
			}
		}

		protected override void HandleStop()
		{
		}
	}
	public class BaseStompState : BaseTtarSkillState
	{
		public static float baseDuration = 2.2f;

		public static float damageCoefficient = 6f;

		private float stompTime;

		private bool hasStomped;

		protected float duration;

		private float flashTime;

		private bool hasFlashed;

		public override void OnEnter()
		{
			base.OnEnter();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			stompTime = 0.275f * duration;
			flashTime = 0.2f * duration;
			hasStomped = false;
			hasFlashed = false;
			((EntityState)this).PlayAnimation("FullBody, Override", "Stomp", "Action.playbackRate", duration, 0f);
		}

		public override void FixedUpdate()
		{
			base.FixedUpdate();
			if (((EntityState)this).fixedAge >= flashTime && !hasFlashed)
			{
				hasFlashed = true;
				Flash();
			}
			if (((EntityState)this).fixedAge >= stompTime && !hasStomped)
			{
				PerformStomp();
			}
			if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		protected virtual void Flash()
		{
		}

		private void PerformStomp()
		{
			hasStomped = true;
			Util.PlaySound("sfx_ttar_stomp", ((EntityState)this).gameObject);
			Util.PlaySound("Play_parent_attack1_slam", ((EntityState)this).gameObject);
			EffectManager.SimpleMuzzleFlash(Resources.Load<GameObject>("Prefabs/Effects/ImpactEffects/PodGroundImpact"), ((EntityState)this).gameObject, "FootR", false);
			PerformAttack();
		}

		protected virtual void PerformAttack()
		{
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}
	}
	public class BaseTtarSkillState : BaseSkillState
	{
		protected TyranitarController tyranitarController;

		protected Animator anim;

		public override void OnEnter()
		{
			tyranitarController = ((EntityState)this).GetComponent<TyranitarController>();
			anim = ((EntityState)this).GetModelAnimator();
			if (Object.op_Implicit((Object)(object)anim))
			{
				anim.SetBool("isSprinting", false);
			}
			((BaseState)this).OnEnter();
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (Object.op_Implicit((Object)(object)anim))
			{
				anim.SetBool("isGrounded", ((BaseState)this).isGrounded);
			}
		}
	}
	public class Beam : BaseSkillState
	{
		public GameObject muzzleflashEffectPrefab;

		public GameObject hitEffectPrefab;

		public GameObject beamVfxPrefab;

		public string enterSoundString = "";

		public string exitSoundString = "";

		public float tickRate = 10f;

		public static float damageCoefficientPerSecond = 8f;

		public float procCoefficientPerSecond = 1f;

		public float forcePerSecond = 700f;

		public float maxDistance = 250f;

		public float minDistance = 240f;

		public float bulletRadius = 1f;

		public float baseMinimumDuration = 1f;

		public float recoilAmplitude = 1f;

		public float spreadBloomValue = 0.3f;

		public float maxSpread = 0f;

		public string muzzle = "MouthMuzzle";

		public string animationLayerName = "Mouth, Override";

		public string animationEnterStateName = "StartBeam";

		public string animationExitStateName = "StopBeam";

		private GameObject blinkVfxInstance;

		private float minimumDuration;

		private float fireCountdown;

		public override void OnEnter()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: 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)
			//IL_00b2: 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)
			beamVfxPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidSurvivor/VoidSurvivorBeamCorrupt.prefab").WaitForCompletion();
			((BaseState)this).OnEnter();
			minimumDuration = baseMinimumDuration / ((BaseState)this).attackSpeedStat;
			((EntityState)this).PlayAnimation(animationLayerName, animationEnterStateName);
			Util.PlaySound(enterSoundString, ((EntityState)this).gameObject);
			blinkVfxInstance = Object.Instantiate<GameObject>(beamVfxPrefab);
			blinkVfxInstance.transform.SetParent(((EntityState)this).characterBody.aimOriginTransform, false);
			blinkVfxInstance.transform.localPosition = Vector3.zero;
			Transform transform = blinkVfxInstance.transform;
			transform.localScale *= 3.5f;
			((EntityState)this).characterBody.aimOriginTransform.localPosition = new Vector3(0f, 9f, 2f);
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddBuff(Buffs.Slow50);
			}
		}

		public override void FixedUpdate()
		{
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: 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_00d2: 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_00b4: 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)
			((EntityState)this).FixedUpdate();
			((EntityState)this).characterBody.SetAimTimer(0.5f);
			fireCountdown -= Time.fixedDeltaTime;
			if (fireCountdown <= 0f)
			{
				fireCountdown = 1f / tickRate / ((BaseState)this).attackSpeedStat;
				FireBullet();
			}
			if (Object.op_Implicit((Object)(object)blinkVfxInstance))
			{
				Ray aimRay = ((BaseState)this).GetAimRay();
				Vector3 point = ((Ray)(ref aimRay)).GetPoint(maxDistance);
				RaycastHit val = default(RaycastHit);
				if (Util.CharacterRaycast(((EntityState)this).gameObject, ((BaseState)this).GetAimRay(), ref val, maxDistance, ((LayerIndex)(ref LayerIndex.world)).mask, (QueryTriggerInteraction)0))
				{
					point = ((RaycastHit)(ref val)).point;
				}
				blinkVfxInstance.transform.forward = point - blinkVfxInstance.transform.position;
			}
			if (((((EntityState)this).fixedAge >= minimumDuration && !((BaseSkillState)this).IsKeyDownAuthority()) || ((EntityState)this).characterBody.isSprinting) && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void OnExit()
		{
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)blinkVfxInstance))
			{
				VfxKillBehavior.KillVfxObject(blinkVfxInstance);
			}
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.RemoveBuff(Buffs.Slow50);
			}
			((EntityState)this).PlayAnimation(animationLayerName, animationExitStateName);
			Util.PlaySound(exitSoundString, ((EntityState)this).gameObject);
			((EntityState)this).characterBody.aimOriginTransform.localPosition = new Vector3(0f, 0.5f, 0f);
			((EntityState)this).OnExit();
		}

		private void FireBullet()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: 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)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: 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_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: 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_00ad: 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_00d6: 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_00ed: 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_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			//IL_013c: 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_0162: Unknown result type (might be due to invalid IL or missing references)
			//IL_016e: Unknown result type (might be due to invalid IL or missing references)
			Ray aimRay = ((BaseState)this).GetAimRay();
			((BaseState)this).AddRecoil(-1f * recoilAmplitude, -2f * recoilAmplitude, -0.5f * recoilAmplitude, 0.5f * recoilAmplitude);
			if (Object.op_Implicit((Object)(object)muzzleflashEffectPrefab))
			{
				EffectManager.SimpleMuzzleFlash(muzzleflashEffectPrefab, ((EntityState)this).gameObject, muzzle, false);
			}
			if (((EntityState)this).isAuthority)
			{
				new BulletAttack
				{
					owner = ((EntityState)this).gameObject,
					weapon = ((EntityState)this).gameObject,
					origin = ((Ray)(ref aimRay)).origin,
					aimVector = ((Ray)(ref aimRay)).direction,
					muzzleName = muzzle,
					maxDistance = Mathf.Lerp(minDistance, maxDistance, Random.value),
					minSpread = 0f,
					maxSpread = maxSpread,
					radius = bulletRadius,
					falloffModel = (FalloffModel)0,
					smartCollision = true,
					stopperMask = default(LayerMask),
					hitMask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask,
					damage = damageCoefficientPerSecond * ((BaseState)this).damageStat / tickRate,
					procCoefficient = procCoefficientPerSecond / tickRate,
					force = forcePerSecond / tickRate,
					isCrit = ((BaseState)this).RollCrit(),
					hitEffectPrefab = hitEffectPrefab
				}.Fire();
			}
			((EntityState)this).characterBody.AddSpreadBloom(spreadBloomValue);
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)1;
		}
	}
	public class Bounce : BaseSkillState
	{
		public static float damageCoefficient = 20f;

		public static float leapDuration = 0.6f;

		public static float dropVelocity = 24f;

		private float duration;

		private bool hasLanded;

		private float stopwatch;

		private Animator animator;

		private float previousAirControl;

		private GameObject chargeEffectInstanceL;

		private GameObject chargeEffectInstanceR;

		public override void OnEnter()
		{
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: 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_015f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: Unknown result type (might be due to invalid IL or missing references)
			//IL_016c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0172: Unknown result type (might be due to invalid IL or missing references)
			//IL_0173: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0194: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0209: 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_021f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0268: Unknown result type (might be due to invalid IL or missing references)
			//IL_027e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0294: Unknown result type (might be due to invalid IL or missing references)
			//IL_029f: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a5: Expected O, but got Unknown
			//IL_02ac: 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_02cc: 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_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0101: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_010c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_0120: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Unknown result type (might be due to invalid IL or missing references)
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_014c: Unknown result type (might be due to invalid IL or missing references)
			//IL_014e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			duration = leapDuration / (0.75f + 0.25f * ((BaseState)this).attackSpeedStat);
			hasLanded = false;
			animator = ((EntityState)this).GetModelAnimator();
			((EntityState)this).characterMotor.jumpCount = ((EntityState)this).characterBody.maxJumpCount;
			previousAirControl = ((EntityState)this).characterMotor.airControl;
			((EntityState)this).characterMotor.airControl = BaseLeap.airControl;
			Ray aimRay = ((BaseState)this).GetAimRay();
			Vector3 direction = ((Ray)(ref aimRay)).direction;
			if (((EntityState)this).isAuthority)
			{
				((EntityState)this).characterBody.isSprinting = true;
				direction.y = Mathf.Max(direction.y, 1.25f * BaseLeap.minimumY);
				Vector3 val = ((Vector3)(ref direction)).normalized * (1.15f * BaseLeap.aimVelocity) * ((BaseState)this).moveSpeedStat;
				Vector3 val2 = Vector3.up * 6f * BaseLeap.upwardVelocity;
				Vector3 val3 = new Vector3(direction.x, 0f, direction.z);
				Vector3 val4 = ((Vector3)(ref val3)).normalized * (0.75f * BaseLeap.forwardVelocity);
				((BaseCharacterController)((EntityState)this).characterMotor).Motor.ForceUnground(0.1f);
				((EntityState)this).characterMotor.velocity = val + val2 + val4;
			}
			((EntityState)this).characterDirection.moveVector = direction;
			CharacterBody characterBody = ((EntityState)this).characterBody;
			characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags | 1);
			Util.PlaySound("sfx_ttar_leap", ((EntityState)this).gameObject);
			chargeEffectInstanceL = Object.Instantiate<GameObject>(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Grandparent/ChargeGrandParentSunHands.prefab").WaitForCompletion());
			chargeEffectInstanceL.transform.parent = ((BaseState)this).FindModelChild("FootL");
			chargeEffectInstanceL.transform.localPosition = new Vector3(0f, 0f, 0f);
			chargeEffectInstanceL.transform.localRotation = Quaternion.identity;
			chargeEffectInstanceL.transform.localScale = Vector3.one;
			chargeEffectInstanceR = Object.Instantiate<GameObject>(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Grandparent/ChargeGrandParentSunHands.prefab").WaitForCompletion());
			chargeEffectInstanceR.transform.parent = ((BaseState)this).FindModelChild("FootR");
			chargeEffectInstanceR.transform.localPosition = new Vector3(0f, 0f, 0f);
			chargeEffectInstanceR.transform.localRotation = Quaternion.identity;
			chargeEffectInstanceR.transform.localScale = Vector3.one;
			EffectData val5 = new EffectData();
			val5.origin = ((EntityState)this).characterBody.footPosition;
			val5.scale = 5f;
			EffectManager.SpawnEffect(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Parent/ParentSlamEffect.prefab").WaitForCompletion(), val5, true);
		}

		public override void OnExit()
		{
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).OnExit();
			if (Object.op_Implicit((Object)(object)chargeEffectInstanceL))
			{
				EntityState.Destroy((Object)(object)chargeEffectInstanceL);
			}
			if (Object.op_Implicit((Object)(object)chargeEffectInstanceR))
			{
				EntityState.Destroy((Object)(object)chargeEffectInstanceR);
			}
			CharacterBody characterBody = ((EntityState)this).characterBody;
			characterBody.bodyFlags = (BodyFlags)(characterBody.bodyFlags & -2);
			((EntityState)this).characterMotor.airControl = previousAirControl;
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			((BaseState)this).StartAimMode(0.5f, false);
			stopwatch += Time.fixedDeltaTime;
			if (stopwatch >= duration && ((EntityState)this).isAuthority && ((EntityState)this).characterMotor.isGrounded)
			{
				GroundImpact();
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		private void GroundImpact()
		{
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Expected O, but got Unknown
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: 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_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_0097: 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_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: 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_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: 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_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: 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_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			//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_012f: Unknown result type (might be due to invalid IL or missing references)
			if (!hasLanded)
			{
				hasLanded = true;
				Util.PlaySound("sfx_ttar_slam", ((EntityState)this).gameObject);
				Util.PlaySound("Play_parent_attack1_slam", ((EntityState)this).gameObject);
				float num = 32f;
				EffectData val = new EffectData();
				val.origin = ((EntityState)this).characterBody.footPosition;
				val.scale = num;
				EffectManager.SpawnEffect(TtarAssets.slamImpactEffect, val, true);
				new BlastAttack
				{
					attacker = ((EntityState)this).gameObject,
					attackerFiltering = (AttackerFiltering)2,
					baseDamage = damageCoefficient * ((BaseState)this).damageStat,
					baseForce = 800f,
					bonusForce = Vector3.up * 2000f,
					crit = ((BaseState)this).RollCrit(),
					damageColorIndex = (DamageColorIndex)5,
					damageType = DamageTypeCombo.op_Implicit((DamageType)131072),
					falloffModel = (FalloffModel)0,
					inflictor = ((EntityState)this).gameObject,
					losType = (LoSType)0,
					position = ((EntityState)this).characterBody.footPosition,
					procChainMask = default(ProcChainMask),
					procCoefficient = 1f,
					radius = num,
					teamIndex = ((BaseState)this).GetTeam()
				}.Fire();
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}
	}
	public class BounceStart : BaseState
	{
		private float duration;

		private Animator animator;

		public override void OnEnter()
		{
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			animator = ((EntityState)this).GetModelAnimator();
			if (Object.op_Implicit((Object)(object)animator))
			{
				int layerIndex = animator.GetLayerIndex("Body");
				animator.CrossFadeInFixedTime("AnimatedJump", 0.1f);
				animator.Update(0f);
				AnimatorStateInfo nextAnimatorStateInfo = animator.GetNextAnimatorStateInfo(layerIndex);
				duration = ((AnimatorStateInfo)(ref nextAnimatorStateInfo)).length;
			}
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (Object.op_Implicit((Object)(object)animator))
			{
				animator.SetBool("isGrounded", false);
			}
			if (((EntityState)this).fixedAge >= duration / 2f && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextState((EntityState)(object)new Bounce());
			}
			else if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextState((EntityState)(object)new Bounce());
			}
		}
	}
	public class ChargeAncientPower : BaseTtarSkillState
	{
		public float baseStartDuration = 0.5f;

		public float baseRockTimer = 0.15f;

		public float healthCostFraction = 0.1f;

		protected int rockCount;

		private float rockTimer;

		private float rockStopwatch;

		private float startDuration;

		private uint playID;

		public override void OnEnter()
		{
			base.OnEnter();
			startDuration = baseStartDuration / ((BaseState)this).attackSpeedStat;
			rockTimer = baseRockTimer / ((BaseState)this).attackSpeedStat;
			rockCount = 0;
			rockStopwatch = startDuration + rockTimer;
			((EntityState)this).PlayCrossfade("Gesture, Override", "ChannelAncientPowerStart", "AncientPower.playbackRate", startDuration, 0.1f);
			((EntityState)this).cameraTargetParams.cameraParams = CameraParams.aimCameraParams;
			((EntityState)this).characterBody.hideCrosshair = false;
			playID = Util.PlaySound("sfx_ttar_rocks_loop", ((EntityState)this).gameObject);
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
			AkSoundEngine.StopPlayingID(playID);
		}

		public override void FixedUpdate()
		{
			base.FixedUpdate();
			((BaseState)this).StartAimMode(0.5f, false);
			rockStopwatch -= Time.fixedDeltaTime;
			tyranitarController.rockCount = rockCount;
			if (rockStopwatch <= 0f)
			{
				ChargeRock();
			}
			HandleStop();
		}

		protected virtual void HandleStop()
		{
			if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= startDuration && !((EntityState)this).inputBank.skill2.down)
			{
				if (rockCount > 0)
				{
					FireAncientPower nextState = new FireAncientPower
					{
						rockCount = rockCount
					};
					((EntityState)this).outer.SetNextState((EntityState)(object)nextState);
				}
				else
				{
					((EntityState)this).PlayAnimation("Gesture, Override", "BufferEmpty");
					((EntityState)this).cameraTargetParams.cameraParams = CameraParams.defaultCameraParams;
					((EntityState)this).outer.SetNextStateToMain();
				}
			}
		}

		private bool SpendStockOrHealth()
		{
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Expected O, but got Unknown
			//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_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			bool result = false;
			if (((EntityState)this).skillLocator.secondary.stock > 0)
			{
				((EntityState)this).skillLocator.secondary.DeductStock(1);
				result = true;
			}
			else if (Object.op_Implicit((Object)(object)((EntityState)this).healthComponent) && ((EntityState)this).healthComponent.combinedHealth >= healthCostFraction * ((EntityState)this).healthComponent.fullCombinedHealth)
			{
				if (NetworkServer.active && healthCostFraction > 0f)
				{
					DamageInfo val = new DamageInfo();
					val.damage = ((EntityState)this).healthComponent.fullCombinedHealth * healthCostFraction;
					val.position = ((EntityState)this).characterBody.corePosition;
					val.force = Vector3.zero;
					val.damageColorIndex = (DamageColorIndex)0;
					val.crit = false;
					val.attacker = null;
					val.inflictor = null;
					val.damageType = DamageTypeCombo.op_Implicit((DamageType)3);
					val.procCoefficient = 0f;
					val.procChainMask = default(ProcChainMask);
					((EntityState)this).healthComponent.TakeDamage(val);
				}
				result = true;
			}
			return result;
		}

		protected virtual void ChargeRock()
		{
			if (SpendStockOrHealth())
			{
				rockCount++;
				Util.PlaySound("sfx_regigigas_rock_spawn", ((EntityState)this).gameObject);
				((EntityState)this).PlayCrossfade("Gesture, Override", "ChannelAncientPower", "AncientPower.playbackRate", startDuration, 0.05f);
			}
			rockStopwatch = rockTimer;
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}
	}
	public class DeathState : GenericCharacterDeath
	{
		public override void OnEnter()
		{
			((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty");
			((GenericCharacterDeath)this).OnEnter();
			Util.PlaySound("sfx_ttar_death", ((EntityState)this).gameObject);
		}
	}
	public class DrainPunch : PunchCombo
	{
		internal new static float damageCoefficientOverride = 2.8f;

		private GameObject chargeEffectInstance;

		public override void OnEnter()
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			base.OnEnter();
			attack.damage = damageCoefficientOverride * ((BaseState)this).damageStat;
			string text = "HandL";
			if (swingIndex == 1)
			{
				text = "HandR";
			}
			chargeEffectInstance = Object.Instantiate<GameObject>(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Grandparent/ChargeGrandParentSunHands.prefab").WaitForCompletion());
			chargeEffectInstance.transform.parent = ((BaseState)this).FindModelChild(text);
			chargeEffectInstance.transform.localPosition = new Vector3(0f, 0f, 0f);
			chargeEffectInstance.transform.localRotation = Quaternion.identity;
			chargeEffectInstance.transform.localScale = Vector3.one;
			chargeEffectInstance.GetComponentInChildren<ObjectScaleCurve>().timeMax = 0.35f;
		}

		public override void OnExit()
		{
			base.OnExit();
			if (Object.op_Implicit((Object)(object)chargeEffectInstance))
			{
				EntityState.Destroy((Object)(object)chargeEffectInstance);
			}
		}

		protected override void SetNextState()
		{
			int num = swingIndex + 1;
			if (num == 3)
			{
				num = 1;
			}
			((EntityState)this).outer.SetNextState((EntityState)(object)new DrainPunch
			{
				swingIndex = num
			});
		}

		protected override void PlaySwingEffect()
		{
			if (Object.op_Implicit((Object)(object)chargeEffectInstance))
			{
				EntityState.Destroy((Object)(object)chargeEffectInstance);
			}
		}

		protected override void OnHitEnemyAuthority()
		{
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Expected O, but got Unknown
			//IL_007c: 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_0095: Unknown result type (might be due to invalid IL or missing references)
			base.OnHitEnemyAuthority();
			GameObject punchImpactEffect = TtarAssets.punchImpactEffect;
			HurtBox[] array = hitResults.ToArray();
			for (int i = 0; i < hitResults.Count; i++)
			{
				handleLifeSteal(((EntityState)this).healthComponent, damageCoefficientOverride * ((BaseState)this).damageStat * 0.5f);
				EffectData val = new EffectData();
				val.scale = 4f;
				if (Object.op_Implicit((Object)(object)array[i]) && Object.op_Implicit((Object)(object)array[i].healthComponent))
				{
					val.origin = ((Component)array[i]).transform.position;
					val.rotation = ((Component)array[i]).transform.rotation;
					EffectManager.SpawnEffect(punchImpactEffect, val, true);
				}
			}
		}

		private void handleLifeSteal(HealthComponent healthComponent, float healAmount)
		{
			//IL_002c: 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_0015: Unknown result type (might be due to invalid IL or missing references)
			if (NetworkServer.active)
			{
				healthComponent.Heal(healAmount, default(ProcChainMask), true);
			}
			else
			{
				NetMessageExtensions.Send((INetMessage)(object)new NetMessages.SyncLifeSteal(((EntityState)this).characterBody.networkIdentity.netId, healAmount), (NetworkDestination)1);
			}
		}
	}
	public class EarthPower : BaseStompState
	{
		protected override void PerformAttack()
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//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_0088: 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_008c: Unknown result type (might be due to invalid IL or missing references)
			base.PerformAttack();
			if (((EntityState)this).isAuthority)
			{
				float num = 1.5f * (float)UltChannelState.waveProjectileCount;
				num = 5f;
				float num2 = 360f / num;
				Vector3 val = Vector3.ProjectOnPlane(Random.onUnitSphere, Vector3.up);
				Vector3 normalized = ((Vector3)(ref val)).normalized;
				Vector3 position = ((BaseState)this).FindModelChild("FootR").position;
				GameObject earthPowerWave = Projectiles.earthPowerWave;
				for (int i = 0; (float)i < num; i++)
				{
					Vector3 val2 = Quaternion.AngleAxis(num2 * (float)i, Vector3.up) * normalized;
					ProjectileManager.instance.FireProjectile(earthPowerWave, position, Util.QuaternionSafeLookRotation(val2), ((EntityState)this).gameObject, ((EntityState)this).characterBody.damage * BaseStompState.damageCoefficient, UltChannelState.waveProjectileForce, ((BaseState)this).RollCrit(), (DamageColorIndex)0, (GameObject)null, -1f);
				}
			}
		}
	}
	public class FastSandstorm : BaseStompState
	{
		public new float damageCoefficient = 0.75f;

		public float procCoefficient = 0.1f;

		protected override void PerformAttack()
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			base.PerformAttack();
			ProjectileManager.instance.FireProjectile(Projectiles.pillarProjectile, ((EntityState)this).transform.position, Quaternion.identity, ((EntityState)this).gameObject, ((EntityState)this).characterBody.damage * damageCoefficient, 0f, ((BaseState)this).RollCrit(), (DamageColorIndex)0, (GameObject)null, -1f);
		}
	}
	public class FireAncientPower : BaseTtarSkillState
	{
		public int rockCount;

		public static float baseDuration = 0.6f;

		public static float baseTimeBetweenRocks = 0.3f;

		public static float damageCoefficient = 3f;

		public static float throwForce = 170f;

		public static float projectileForce = 5f;

		private float throwStopwatch;

		private float timeBetweenRocks;

		private float duration;

		private GameObject projectilePrefab;

		public override void OnEnter()
		{
			base.OnEnter();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			timeBetweenRocks = baseTimeBetweenRocks / ((BaseState)this).attackSpeedStat;
			throwStopwatch = timeBetweenRocks;
			projectilePrefab = Projectiles.rockProjectile;
			((EntityState)this).PlayCrossfade("Gesture, Override", "FireAncientPower", "AncientPower.playbackRate", baseDuration, 0.05f);
			Util.PlaySound("sfx_ttar_rocks_release", ((EntityState)this).gameObject);
		}

		public override void FixedUpdate()
		{
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			base.FixedUpdate();
			((BaseState)this).StartAimMode(0.5f, false);
			throwStopwatch -= Time.fixedDeltaTime;
			tyranitarController.rockCount = rockCount;
			((EntityState)this).characterBody.aimOriginTransform.localPosition = new Vector3(0f, 12f, 0f);
			if (throwStopwatch <= 0f)
			{
				ThrowRock();
			}
			if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration && rockCount <= 0)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void OnExit()
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).OnExit();
			if (((EntityState)this).characterBody.isPlayerControlled)
			{
				((EntityState)this).characterBody.aimOriginTransform.localPosition = new Vector3(0f, 0f, 0f);
			}
			((EntityState)this).cameraTargetParams.cameraParams = CameraParams.defaultCameraParams;
			tyranitarController.rockCount = 0;
		}

		private void ThrowRock()
		{
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: 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_00cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: 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_0073: Unknown result type (might be due to invalid IL or missing references)
			//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_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_010c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0116: 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_0121: Expected O, but got Unknown
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			if (rockCount > 0)
			{
				rockCount--;
				throwStopwatch = timeBetweenRocks;
				((EntityState)this).PlayCrossfade("Gesture, Override", "FireAncientPower", "AncientPower.playbackRate", baseDuration, 0.05f);
				Ray aimRay = ((BaseState)this).GetAimRay();
				if (((EntityState)this).isAuthority)
				{
					ProjectileManager.instance.FireProjectile(projectilePrefab, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)this).gameObject, ((BaseState)this).damageStat * damageCoefficient, projectileForce, ((BaseState)this).RollCrit(), (DamageColorIndex)0, (GameObject)null, throwForce);
				}
				Vector3 origin = ((Ray)(ref aimRay)).origin + ((Ray)(ref aimRay)).direction * 75f;
				RaycastHit val = default(RaycastHit);
				if (Physics.Raycast(((Ray)(ref aimRay)).origin, ((Ray)(ref aimRay)).direction, ref val, 75f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask)))
				{
					origin = ((RaycastHit)(ref val)).point;
				}
				EffectData val2 = new EffectData
				{
					origin = origin,
					start = ((Ray)(ref aimRay)).origin
				};
				EffectManager.SpawnEffect(TtarAssets.ancientPowerFireIndicator, val2, true);
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}
	}
	public class GigaImpact : BaseTtarSkillState
	{
		public static float baseDuration = 6f;

		public static float impactAttackRadius = 12f;

		public static float impactAttackForce = 500f;

		public static float impactAttackBonusForce = -1000f;

		public static float impactAttackDamageCoefficient = 32f;

		public static float blastAttackRadius = 64f;

		public static float blastAttackForce = 8000f;

		public static float blastAttackBonusForce = 1000f;

		public static float blastAttackDamageCoefficient = 4f;

		private float impactTime;

		private float duration;

		private bool hasFired;

		private bool hasFiredShockwave;

		public override void OnEnter()
		{
			base.OnEnter();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			impactTime = duration * 0.55f;
			hasFired = false;
			((EntityState)this).PlayAnimation("FullBody, Override", "GigaImpact", "GigaImpact.playbackRate", duration, 0f);
		}

		public override void FixedUpdate()
		{
			base.FixedUpdate();
			if (((EntityState)this).fixedAge >= impactTime)
			{
				Fire();
			}
			if (((EntityState)this).fixedAge >= 0.75f * duration)
			{
				FireShockwave();
			}
			if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
		}

		private void Fire()
		{
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Expected O, but got Unknown
			//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)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: 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_00d3: 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_00f3: 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)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			if (!hasFired)
			{
				hasFired = true;
				Util.PlaySound(GroundSlam.attackSoundString, ((EntityState)this).gameObject);
				if (Object.op_Implicit((Object)(object)GroundSlam.slamEffectPrefab))
				{
					EffectManager.SimpleMuzzleFlash(GroundSlam.slamEffectPrefab, ((EntityState)this).gameObject, "HandR", false);
				}
				if (((EntityState)this).isAuthority)
				{
					BlastAttack val = new BlastAttack();
					val.attacker = ((EntityState)this).gameObject;
					val.inflictor = ((EntityState)this).gameObject;
					val.teamIndex = TeamComponent.GetObjectTeam(val.attacker);
					val.position = ((BaseState)this).FindModelChild("HandR").position;
					val.procCoefficient = 0f;
					val.radius = impactAttackRadius;
					val.baseForce = impactAttackForce;
					val.bonusForce = Vector3.up * impactAttackBonusForce;
					val.baseDamage = impactAttackDamageCoefficient * ((BaseState)this).damageStat;
					val.falloffModel = (FalloffModel)2;
					val.damageColorIndex = (DamageColorIndex)3;
					val.attackerFiltering = (AttackerFiltering)2;
					val.Fire();
				}
			}
		}

		private void FireShockwave()
		{
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Expected O, but got Unknown
			//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_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			if (!hasFiredShockwave)
			{
				hasFiredShockwave = true;
				if (Object.op_Implicit((Object)(object)SpawnState.spawnEffect))
				{
					EffectManager.SimpleMuzzleFlash(Resources.Load<GameObject>("prefabs/effects/impacteffects/GrandparentDeathEffect"), ((EntityState)this).gameObject, "HandR", false);
				}
				if (((EntityState)this).isAuthority)
				{
					BlastAttack val = new BlastAttack();
					val.attacker = ((EntityState)this).gameObject;
					val.inflictor = ((EntityState)this).gameObject;
					val.teamIndex = TeamComponent.GetObjectTeam(val.attacker);
					val.position = ((EntityState)this).characterBody.corePosition;
					val.procCoefficient = 0f;
					val.radius = blastAttackRadius;
					val.baseForce = blastAttackForce;
					val.bonusForce = Vector3.up * blastAttackBonusForce;
					val.baseDamage = blastAttackDamageCoefficient * ((BaseState)this).damageStat;
					val.falloffModel = (FalloffModel)1;
					val.damageColorIndex = (DamageColorIndex)3;
					val.attackerFiltering = (AttackerFiltering)2;
					val.Fire();
				}
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)5;
		}
	}
	public class GrabAttempt : BaseTtarSkillState
	{
		public static float baseDuration = 2f;

		public static string grabTransformString = "HandR";

		public static float grabRadius = 10f;

		private float grabStartTime;

		private Transform grabTransform;

		private HurtBox grabTarget;

		private float duration;

		private TyranitarGrabController grabController;

		public override void OnEnter()
		{
			base.OnEnter();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			grabStartTime = 0.7f * duration;
			grabTransform = ((BaseState)this).FindModelChild(grabTransformString);
			((EntityState)this).PlayAnimation("FullBody, Override", "GrabAttempt", "Grab.playbackRate", duration, 0f);
		}

		public override void FixedUpdate()
		{
			base.FixedUpdate();
			if (((EntityState)this).fixedAge >= grabStartTime)
			{
				AttemptGrab(grabRadius);
			}
			if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration)
			{
				if (Object.op_Implicit((Object)(object)grabController))
				{
					((EntityState)this).outer.SetNextState((EntityState)(object)new GrabSuccess
					{
						target = grabTarget,
						grabController = grabController
					});
				}
				else
				{
					((EntityState)this).outer.SetNextState((EntityState)(object)new GrabFail());
				}
			}
		}

		private void AttemptGrab(float grabRadius)
		{
			//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)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//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_002d: 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_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: 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_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Expected O, but got Unknown
			if (!Object.op_Implicit((Object)(object)grabController))
			{
				Ray aimRay = ((BaseState)this).GetAimRay();
				BullseyeSearch val = new BullseyeSearch
				{
					teamMaskFilter = TeamMask.GetEnemyTeams(((BaseState)this).GetTeam()),
					filterByLoS = false,
					searchOrigin = grabTransform.position,
					searchDirection = Random.onUnitSphere,
					sortMode = (SortMode)1,
					maxDistanceFilter = grabRadius,
					maxAngleFilter = 360f
				};
				val.RefreshCandidates();
				val.FilterOutGameObject(((EntityState)this).gameObject);
				HurtBox val2 = val.GetResults().FirstOrDefault();
				if (Object.op_Implicit((Object)(object)val2) && Object.op_Implicit((Object)(object)val2.healthComponent) && Object.op_Implicit((Object)(object)val2.healthComponent.body) && BodyMeetsGrabConditions(val2.healthComponent.body))
				{
					grabController = ((Component)val2.healthComponent.body).gameObject.AddComponent<TyranitarGrabController>();
					grabController.pivotTransform = grabTransform;
					grabController.grabberHealthComponent = ((EntityState)this).healthComponent;
					grabTarget = val2;
					Util.PlaySound("sfx_regigigas_grab", ((EntityState)this).gameObject);
				}
			}
		}

		private bool BodyMeetsGrabConditions(CharacterBody targetBody)
		{
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Invalid comparison between Unknown and I4
			bool result = true;
			if ((int)targetBody.hullClassification == 2)
			{
				result = false;
			}
			return result;
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}
	}
	public class GrabFail : BaseSkillState
	{
		public static float baseDuration = 1.5f;

		private float duration;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			((EntityState)this).PlayAnimation("FullBody, Override", "GrabFail", "Grab.playbackRate", duration, 0f);
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}
	}
	public class GrabSuccess : BaseTtarSkillState
	{
		public HurtBox target;

		public TyranitarGrabController grabController;

		public static float baseDuration = 6f;

		public static string grabTransformString = "HandR";

		public static float throwForce = 120f;

		public static float damagePercentage = 0.55f;

		private bool hasSqueezed;

		private float grabSqueezeTime;

		private float grabThrowTime;

		private Transform grabTransform;

		private float duration;

		private GameObject crushEffectPrefab;

		public override void OnEnter()
		{
			base.OnEnter();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			grabThrowTime = 0.7f * duration;
			grabSqueezeTime = 0.3f * duration;
			hasSqueezed = false;
			grabTransform = ((BaseState)this).FindModelChild(grabTransformString);
			crushEffectPrefab = TtarAssets.punchImpactEffect;
			((EntityState)this).PlayAnimation("FullBody, Override", "GrabSuccess", "Grab.playbackRate", duration, 0f);
		}

		public override void FixedUpdate()
		{
			base.FixedUpdate();
			if (((EntityState)this).fixedAge >= grabSqueezeTime)
			{
				SqueezeTarget();
				((BaseState)this).StartAimMode(0.5f, false);
			}
			if (((EntityState)this).fixedAge >= grabThrowTime)
			{
				Throw();
			}
			if (((EntityState)this).fixedAge >= duration)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		private void SqueezeTarget()
		{
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//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_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: 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_00a3: 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)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Expected O, but got Unknown
			//IL_00d8: 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_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Expected O, but got Unknown
			if (!hasSqueezed)
			{
				hasSqueezed = true;
				if (NetworkServer.active && Object.op_Implicit((Object)(object)target))
				{
					DamageInfo val = new DamageInfo
					{
						attacker = ((EntityState)this).gameObject,
						crit = false,
						damage = damagePercentage * target.healthComponent.fullCombinedHealth,
						damageColorIndex = (DamageColorIndex)5,
						damageType = DamageTypeCombo.op_Implicit((DamageType)2),
						force = Vector3.zero,
						inflictor = ((EntityState)this).gameObject,
						position = ((Component)target).transform.position,
						procChainMask = default(ProcChainMask),
						procCoefficient = 1f
					};
					target.healthComponent.TakeDamage(val);
					EffectManager.SpawnEffect(crushEffectPrefab, new EffectData
					{
						origin = ((Component)target).transform.position,
						scale = 2f
					}, true);
				}
				if (Object.op_Implicit((Object)(object)target))
				{
					Util.PlaySound("sfx_regigigas_crush", ((EntityState)this).gameObject);
				}
			}
		}

		private void Throw()
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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)
			if (Object.op_Implicit((Object)(object)grabController))
			{
				TyranitarGrabController tyranitarGrabController = grabController;
				Ray aimRay = ((BaseState)this).GetAimRay();
				tyranitarGrabController.Throw(((Ray)(ref aimRay)).direction * throwForce);
				EntityState.Destroy((Object)(object)grabController);
				grabController = null;
				target = null;
				Util.PlaySound("sfx_regigigas_throw", ((EntityState)this).gameObject);
			}
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
			if (Object.op_Implicit((Object)(object)grabController))
			{
				grabController.Release();
				EntityState.Destroy((Object)(object)grabController);
				grabController = null;
				target = null;
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)5;
		}

		public override void OnSerialize(NetworkWriter writer)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			NetworkExtensions.Write(writer, HurtBoxReference.FromHurtBox(target));
			writer.Write(((Component)grabController).gameObject);
		}

		public override void OnDeserialize(NetworkReader reader)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			HurtBoxReference val = NetworkExtensions.ReadHurtBoxReference(reader);
			target = ((HurtBoxReference)(ref val)).ResolveHurtBox();
			grabController = reader.ReadGameObject().GetComponent<TyranitarGrabController>();
		}
	}
	public class JumpState : BaseState
	{
		private float duration;

		private bool hasInputJump;

		private Animator animator;

		public override void OnEnter()
		{
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			animator = ((EntityState)this).GetModelAnimator();
			if (Object.op_Implicit((Object)(object)animator))
			{
				int layerIndex = animator.GetLayerIndex("Body");
				animator.CrossFadeInFixedTime("AnimatedJump", 0.25f);
				animator.Update(0f);
				AnimatorStateInfo nextAnimatorStateInfo = animator.GetNextAnimatorStateInfo(layerIndex);
				duration = ((AnimatorStateInfo)(ref nextAnimatorStateInfo)).length;
			}
		}

		public override void FixedUpdate()
		{
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_014b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: Unknown result type (might be due to invalid IL or missing references)
			//IL_016d: Expected O, but got Unknown
			//IL_0197: Unknown result type (might be due to invalid IL or missing references)
			//IL_019c: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ca: Expected O, but got Unknown
			((EntityState)this).FixedUpdate();
			if (Object.op_Implicit((Object)(object)animator))
			{
				animator.SetBool("isGrounded", false);
			}
			if (((EntityState)this).fixedAge >= duration / 2f && ((EntityState)this).isAuthority && !hasInputJump)
			{
				hasInputJump = true;
				((EntityState)this).characterMotor.moveDirection = ((EntityState)this).inputBank.moveVector;
				int itemCount = ((EntityState)this).characterBody.inventory.GetItemCount(Items.JumpBoost);
				float num = 1f;
				float num2 = 1f;
				bool flag = false;
				if (itemCount > 0 && ((EntityState)this).characterBody.isSprinting)
				{
					float num3 = ((EntityState)this).characterBody.acceleration * ((EntityState)this).characterMotor.airControl;
					if (((EntityState)this).characterBody.moveSpeed > 0f && num3 > 0f)
					{
						flag = true;
						float num4 = Mathf.Sqrt(10f * (float)itemCount / num3);
						float num5 = ((EntityState)this).characterBody.moveSpeed / num3;
						num = (num4 + num5) / num5;
					}
				}
				Util.PlaySound("sfx_ttar_leap", ((EntityState)this).gameObject);
				EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/ImpactEffects/CharacterLandImpact"), new EffectData
				{
					origin = ((EntityState)this).characterBody.footPosition,
					scale = ((EntityState)this).characterBody.radius
				}, true);
				GenericCharacterMain.ApplyJumpVelocity(((EntityState)this).characterMotor, ((EntityState)this).characterBody, num, num2, false);
				if (flag)
				{
					EffectManager.SpawnEffect(Resources.Load<GameObject>("Prefabs/Effects/BoostJumpEffect"), new EffectData
					{
						origin = ((EntityState)this).characterBody.footPosition,
						rotation = Util.QuaternionSafeLookRotation(((EntityState)this).characterMotor.velocity)
					}, true);
				}
				if (!((EntityState)this).characterBody.HasBuff(Buffs.slowStartBuff))
				{
					animator.speed = 1f;
				}
			}
			else if (!hasInputJump)
			{
				((EntityState)this).characterMotor.velocity.y = 0f;
			}
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}
	}
	public class MainState : GenericCharacterMain
	{
		protected TyranitarController tyranitarController;

		protected Animator animator;

		private float fuck;

		public override void OnEnter()
		{
			((GenericCharacterMain)this).OnEnter();
			tyranitarController = ((EntityState)this).GetComponent<TyranitarController>();
			animator = ((EntityState)this).GetModelAnimator();
		}

		public override void FixedUpdate()
		{
			((GenericCharacterMain)this).FixedUpdate();
		}

		public override void ProcessJump()
		{
			if (base.jumpInputReceived && ((EntityState)this).characterMotor.jumpCount < ((EntityState)this).characterBody.maxJumpCount)
			{
				((EntityState)this).outer.SetNextState((EntityState)(object)new JumpState());
				CharacterMotor characterMotor = ((EntityState)this).characterMotor;
				characterMotor.jumpCount++;
			}
		}
	}
	public class PunchCombo : BaseMeleeAttack
	{
		internal static float damageCoefficientOverride = 4.2f;

		private bool sprintBuffered;

		public override void OnEnter()
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: 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)
			hitboxName = "Punch";
			damageType = (DamageType)32;
			damageCoefficient = damageCoefficientOverride;
			procCoefficient = 1f;
			pushForce = 3500f;
			bonusForce = Vector3.zero;
			baseDuration = 1.8f;
			attackStartTime = 0.37f;
			attackEndTime = 0.5f;
			baseEarlyExitTime = 0.58f;
			hitStopDuration = 0.035f;
			attackRecoil = 1.5f;
			hitHopVelocity = 8f;
			swingSoundString = "RegigigasPunchSwing";
			hitSoundString = "";
			muzzleString = ((swingIndex % 2 == 0) ? "SwingLeft" : "SwingRight");
			hitEffectPrefab = Resources.Load<GameObject>("Prefabs/Effects/ImpactEffects/PodGroundImpact");
			impactSound = TtarAssets.punchSoundDef.index;
			base.OnEnter();
			PrimarySkillShurikenBehavior component = ((EntityState)this).GetComponent<PrimarySkillShurikenBehavior>();
			if (Object.op_Implicit((Object)(object)component))
			{
				component.OnSkillActivated(((EntityState)this).skillLocator.primary);
			}
		}

		protected override void PlayAttackAnimation()
		{
			((EntityState)this).PlayAnimation("Gesture, Override", "Punch" + (1 + swingIndex), "Punch.playbackRate", duration, 0f);
		}

		protected override void PlaySwingEffect()
		{
		}

		protected override void SetNextState()
		{
			int num = swingIndex + 1;
			if (num == 3)
			{
				num = 1;
			}
			((EntityState)this).outer.SetNextState((EntityState)(object)new PunchCombo
			{
				swingIndex = num
			});
		}

		public override void FixedUpdate()
		{
			base.FixedUpdate();
			((EntityState)this).characterBody.isSprinting = false;
			if (Object.op_Implicit((Object)(object)((EntityState)this).inputBank) && ((EntityState)this).inputBank.sprint.down)
			{
				sprintBuffered = true;
			}
		}

		public override void OnExit()
		{
			base.OnExit();
			if ((Object.op_Implicit((Object)(object)((EntityState)this).inputBank) && ((EntityState)this).inputBank.sprint.down) || sprintBuffered)
			{
				((EntityState)this).characterBody.isSprinting = true;
			}
		}
	}
	public class Revenge : BaseTtarSkillState
	{
		public static float baseDuration = 8f;

		private float lastHealth;

		private float storedDamage;

		private float duration;

		private Animator modelAnimator;

		private GameObject chargeEffectInstance;

		private Transform areaIndicator;

		public override void OnEnter()
		{
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_013e: Unknown result type (might be due to invalid IL or missing references)
			base.OnEnter();
			duration = baseDuration;
			lastHealth = ((EntityState)this).healthComponent.combinedHealth;
			modelAnimator = ((EntityState)this).GetModelAnimator();
			((EntityState)this).PlayAnimation("FullBody, Override", "RevengeEntry", "Revenge.playbackRate", duration * 0.1f, 0f);
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddBuff(Buffs.armorBuff);
			}
			Transform modelTransform = ((EntityState)this).GetModelTransform();
			if (Object.op_Implicit((Object)(object)modelTransform))
			{
				TemporaryOverlay val = ((Component)modelTransform).gameObject.AddComponent<TemporaryOverlay>();
				val.duration = duration;
				val.animateShaderAlpha = true;
				val.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
				val.destroyComponentOnEnd = true;
				val.originalMaterial = Resources.Load<Material>("Materials/matDoppelganger");
				val.AddToCharacerModel(((Component)modelTransform).GetComponent<CharacterModel>());
			}
			if (Object.op_Implicit((Object)(object)modelAnimator))
			{
				modelAnimator.SetFloat(AnimationParameters.aimWeight, 0f);
			}
			chargeEffectInstance = Object.Instantiate<GameObject>(new BlinkState().blinkDestinationPrefab, ((EntityState)this).gameObject.transform);
			chargeEffectInstance.transform.position = ((EntityState)this).characterBody.corePosition;
			chargeEffectInstance.GetComponent<ScaleParticleSystemDuration>().newDuration = duration;
			areaIndicator = chargeEffectInstance.transform.Find("Particles").Find("AreaIndicator");
			((EntityState)this).cameraTargetParams.cameraParams = CameraParams.chargeCameraParams;
			chargeEffectInstance.GetComponentInChildren<PostProcessDuration>().maxDuration = duration;
		}

		private void UpdateRadius()
		{
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			float num = storedDamage / ((EntityState)this).healthComponent.fullCombinedHealth;
			float num2 = Util.Remap(num, 0f, 1f, RevengeEnd.minRadius, RevengeEnd.maxRadius);
			areaIndicator.localScale = Vector3.one * num2;
		}

		public override void FixedUpdate()
		{
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Invalid comparison between Unknown and I4
			base.FixedUpdate();
			float num = lastHealth - ((EntityState)this).healthComponent.combinedHealth;
			if (num > 0f)
			{
				storedDamage += num;
			}
			lastHealth = ((EntityState)this).healthComponent.combinedHealth;
			if (Object.op_Implicit((Object)(object)areaIndicator))
			{
				UpdateRadius();
			}
			if (((EntityState)this).isAuthority)
			{
				if (((EntityState)this).fixedAge >= duration)
				{
					NextState();
				}
				if ((int)((BaseState)this).GetTeam() == 1 && ((BaseSkillState)this).IsKeyDownAuthority() && ((EntityState)this).fixedAge >= 0.5f)
				{
					NextState();
				}
			}
		}

		private void NextState()
		{
			((EntityState)this).outer.SetNextState((EntityState)(object)new RevengeEnd
			{
				storedDamage = 3f * storedDamage
			});
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
			if (Object.op_Implicit((Object)(object)chargeEffectInstance))
			{
				EntityState.Destroy((Object)(object)chargeEffectInstance);
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)5;
		}
	}
	public class RevengeEnd : BaseTtarSkillState
	{
		public static float baseDuration = 5f;

		public float storedDamage;

		public static float maxDamagePercentage = 0.3f;

		public static float minDamagePercentage = 0f;

		public static float maxRadius = 120f;

		public static float minRadius = 32f;

		private float shockwaveRadius;

		private float shockwaveTime;

		private bool hasFired;

		private float duration;

		private GameObject chargeEffectInstance;

		private uint soundID;

		private Animator modelAnimator;

		public override void OnEnter()
		{
			//IL_00f3: 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_0125: Unknown result type (might be due to invalid IL or missing references)
			base.OnEnter();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			shockwaveTime = 0.3f * duration;
			hasFired = false;
			modelAnimator = ((EntityState)this).GetModelAnimator();
			float num = storedDamage / ((EntityState)this).healthComponent.fullCombinedHealth;
			shockwaveRadius = Util.Remap(num, 0f, 1f, minRadius, maxRadius);
			((EntityState)this).PlayAnimation("FullBody, Override", "RevengeEnd", "Revenge.playbackRate", duration, 0f);
			soundID = Util.PlayAttackSpeedSound("sfx_regigigas_burst_pre", ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat);
			ChildLocator modelChildLocator = ((EntityState)this).GetModelChildLocator();
			if (Object.op_Implicit((Object)(object)modelChildLocator))
			{
				Transform val = modelChildLocator.FindChild("Chest");
				if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)ChargeMegaNova.chargingEffectPrefab))
				{
					chargeEffectInstance = Object.Instantiate<GameObject>(ChargeMegaNova.chargingEffectPrefab, val.position, val.rotation);
					chargeEffectInstance.transform.localScale = new Vector3(shockwaveRadius, shockwaveRadius, shockwaveRadius);
					chargeEffectInstance.transform.parent = val;
					chargeEffectInstance.GetComponent<ScaleParticleSystemDuration>().newDuration = 0.3f * duration;
				}
			}
		}

		public override void FixedUpdate()
		{
			base.FixedUpdate();
			if (((EntityState)this).fixedAge >= shockwaveTime)
			{
				FireShockwave();
			}
			if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		private void FireShockwave()
		{
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0121: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: Unknown result type (might be due to invalid IL or missing references)
			//IL_0132: Unknown result type (might be due to invalid IL or missing references)
			//IL_013e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0149: Unknown result type (might be due to invalid IL or missing references)
			//IL_014a: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0154: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Unknown result type (might be due to invalid IL or missing references)
			//IL_0169: Unknown result type (might be due to invalid IL or missing references)
			//IL_016e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Unknown result type (might be due to invalid IL or missing references)
			//IL_0175: Unknown result type (might be due to invalid IL or missing references)
			//IL_017a: Unknown result type (might be due to invalid IL or missing references)
			//IL_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0181: Unknown result type (might be due to invalid IL or missing references)
			//IL_018d: Unknown result type (might be due to invalid IL or missing references)
			//IL_018e: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0194: Unknown result type (might be due to invalid IL or missing references)
			//IL_019a: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01be: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01da: Unknown result type (might be due to invalid IL or missing references)
			//IL_01df: Unknown result type (might be due to invalid IL or missing references)
			if (!hasFired)
			{
				hasFired = true;
				if (NetworkServer.active)
				{
					((EntityState)this).characterBody.RemoveBuff(Buffs.armorBuff);
				}
				AkSoundEngine.StopPlayingID(soundID);
				Vector3 position = ((EntityState)this).transform.position;
				Util.PlaySound("sfx_regigigas_burst", ((EntityState)this).gameObject);
				Util.PlaySound("UNUNUN", ((EntityState)this).gameObject);
				if (Object.op_Implicit((Object)(object)FireMegaNova.novaEffectPrefab))
				{
					EffectManager.SimpleMuzzleFlash(FireMegaNova.novaEffectPrefab, ((EntityState)this).gameObject, "Chest", false);
				}
				Transform modelTransform = ((EntityState)this).GetModelTransform();
				if (Object.op_Implicit((Object)(object)modelTransform))
				{
					TemporaryOverlay val = ((Component)modelTransform).gameObject.AddComponent<TemporaryOverlay>();
					val.duration = 3f;
					val.animateShaderAlpha = true;
					val.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
					val.destroyComponentOnEnd = true;
					val.originalMaterial = Resources.Load<Material>("Materials/matVagrantEnergized");
					val.AddToCharacerModel(((Component)modelTransform).GetComponent<CharacterModel>());
				}
				if (((EntityState)this).isAuthority)
				{
					new BlastAttack
					{
						attacker = ((EntityState)this).gameObject,
						baseDamage = storedDamage,
						baseForce = FireMegaNova.novaForce,
						bonusForce = Vector3.zero,
						attackerFiltering = (AttackerFiltering)2,
						crit = ((BaseState)this).RollCrit(),
						damageColorIndex = (DamageColorIndex)0,
						damageType = DamageTypeCombo.op_Implicit((DamageType)0),
						falloffModel = (FalloffModel)0,
						inflictor = ((EntityState)this).gameObject,
						position = position,
						procChainMask = default(ProcChainMask),
						procCoefficient = 1f,
						radius = shockwaveRadius,
						losType = (LoSType)1,
						teamIndex = ((EntityState)this).teamComponent.teamIndex,
						impactEffect = EffectCatalog.FindEffectIndexFromPrefab(FireMegaNova.novaImpactEffectPrefab)
					}.Fire();
				}
			}
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
			if (Object.op_Implicit((Object)(object)modelAnimator))
			{
				modelAnimator.SetFloat(AnimationParameters.aimWeight, 1f);
			}
			if (Object.op_Implicit((Object)(object)chargeEffectInstance))
			{
				EntityState.Destroy((Object)(object)chargeEffectInstance);
			}
			((EntityState)this).cameraTargetParams.cameraParams = CameraParams.defaultCameraParams;
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)5;
		}
	}
	public class SpawnState : GenericCharacterSpawnState
	{
		public override void OnEnter()
		{
			//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_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Expected O, but got Unknown
			((GenericCharacterSpawnState)this).OnEnter();
			((EntityState)this).PlayAnimation("Body", "Spawn", "Spawn.playbackRate", base.duration, 0f);
			Util.PlaySound("sfx_ttar_spawn_roar", ((EntityState)this).gameObject);
			EffectManager.SpawnEffect(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LemurianBruiser/LemurianBruiserSpawnEffect.prefab").WaitForCompletion(), new EffectData
			{
				origin = ((EntityState)this).transform.position,
				rotation = Quaternion.identity,
				scale = 3f
			}, false);
		}
	}
	public class StoneEdge : BaseStompState
	{
		public new float damageCoefficient = 6f;

		public float procCoefficient = 1f;

		private GameObject effectInstance;

		private bool hasFired;

		protected override void PerformAttack()
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			base.PerformAttack();
			effectInstance = Object.Instantiate<GameObject>(TtarAssets.stoneEdgeIndicator);
			effectInstance.transform.position = ((EntityState)this).transform.position;
			effectInstance.transform.rotation = Util.QuaternionSafeLookRotation(((EntityState)this).characterDirection.forward);
			effectInstance.transform.localScale = ((EntityState)this).GetModelTransform().localScale;
		}

		public override void OnExit()
		{
			base.OnExit();
			if (Object.op_Implicit((Object)(object)effectInstance))
			{
				EntityState.Destroy((Object)(object)effectInstance);
			}
		}

		public override void FixedUpdate()
		{
			base.FixedUpdate();
			if (((EntityState)this).fixedAge >= 0.75f * duration && !hasFired)
			{
				hasFired = true;
				FireAttack();
			}
		}

		private void FireAttack()
		{
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Expected O, but got Unknown
			//IL_0055: 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_0079: 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_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: 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_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: 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)
			if (Object.op_Implicit((Object)(object)effectInstance))
			{
				EntityState.Destroy((Object)(object)effectInstance);
			}
			EffectManager.SimpleMuzzleFlash(GroundSlam.slamEffectPrefab, ((EntityState)this).gameObject, "SlamZone", false);
			if (((EntityState)this).isAuthority)
			{
				HitBoxGroup hitBoxGroup = ((BaseState)this).FindHitBoxGroup("StoneEdge");
				OverlapAttack val = new OverlapAttack();
				val.damageType = DamageTypeCombo.op_Implicit((DamageType)0);
				val.attacker = ((EntityState)this).gameObject;
				val.inflictor = ((EntityState)this).gameObject;
				val.teamIndex = ((BaseState)this).GetTeam();
				val.damage = damageCoefficient * ((BaseState)this).damageStat;
				val.procCoefficient = procCoefficient;
				val.hitEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Merc/OmniImpactVFXSlashMerc.prefab").WaitForCompletion();
				val.forceVector = 3000f * Vector3.up;
				val.pushAwayForce = 0f;
				val.hitBoxGroup = hitBoxGroup;
				val.isCrit = ((BaseState)this).RollCrit();
				val.impactSound = TtarAssets.punchSoundDef.index;
				val.Fire((List<HurtBox>)null);
			}
		}
	}
	internal class WakeUp : BaseTtarSkillState
	{
		public static float duration = 8f;

		public static float delayBeforeAimAnimatorWeight = 6.5f;

		private float cryTime;

		private bool hasCried;

		private Animator modelAnimator;

		public override void OnEnter()
		{
			base.OnEnter();
			modelAnimator = ((EntityState)this).GetModelAnimator();
			cryTime = duration * 0.65f;
			hasCried = false;
			if (Object.op_Implicit((Object)(object)modelAnimator))
			{
				modelAnimator.SetFloat(AnimationParameters.aimWeight, 0f);
			}
			((EntityState)this).PlayAnimation("Body", "Spawn");
			Util.PlaySound("RegigigasSpawn", ((EntityState)this).gameObject);
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddTimedBuff(Buffs.armorBuff, duration);
			}
		}

		public override void Update()
		{
			((EntityState)this).Update();
			if (Object.op_Implicit((Object)(object)modelAnimator))
			{
				modelAnimator.SetFloat(AnimationParameters.aimWeight, Mathf.Clamp01((((EntityState)this).age - delayBeforeAimAnimatorWeight) / duration));
			}
		}

		public override void FixedUpdate()
		{
			base.FixedUpdate();
			if (((EntityState)this).fixedAge >= cryTime && !hasCried)
			{
				hasCried = true;
				string text = "RegigigasCry";
				if (Config.loreFriendly.Value)
				{
					text = "sfx_regigigas_altcry";
				}
				Util.PlaySound(text, ((EntityState)this).gameObject);
			}
			if (((EntityState)this).fixedAge >= duration)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void OnExit()
		{
			if (Object.op_Implicit((Object)(object)modelAnimator))
			{
				modelAnimator.SetFloat(AnimationParameters.aimWeight, 1f);
			}
			((EntityState)this).OnExit();
		}
	}
}
namespace Tyranitar.SkillStates.Tyranitar.Sandstorm
{
	public class Channel : BaseTtarSkillState
	{
		public float baseDuration = 2f;

		private float duration;

		private bool fired;

		private float predictionEffectStopwatch;

		protected Vector3 predictedTargetPosition;

		private Predictor predictor;

		public override void OnEnter()
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Expected O, but got Unknown
			//IL_002f: 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)
			//IL_0079: 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_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)
			//IL_008f: 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_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Expected O, but got Unknown
			base.OnEnter();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			if (NetworkServer.active)
			{
				BullseyeSearch val = new BullseyeSearch();
				val.teamMaskFilter = TeamMask.allButNeutral;
				if (Object.op_Implicit((Object)(object)((EntityState)this).teamComponent))
				{
					((TeamMask)(ref val.teamMaskFilter)).RemoveTeam(((EntityState)this).teamComponent.teamIndex);
				}
				val.maxDistanceFilter = FireFist.maxDistance;
				val.maxAngleFilter = 90f;
				Ray aimRay = ((BaseState)this).GetAimRay();
				val.searchOrigin = ((Ray)(ref aimRay)).origin;
				val.searchDirection = ((Ray)(ref aimRay)).direction;
				val.filterByLoS = false;
				val.sortMode = (SortMode)2;
				val.RefreshCandidates();
				HurtBox val2 = val.GetResults().FirstOrDefault();
				if (Object.op_Implicit((Object)(object)val2))
				{
					predictor = new Predictor(((EntityState)this).transform);
					predictor.SetTargetTransform(((Component)val2).transform);
				}
			}
		}

		public override void FixedUpdate()
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: 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_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_0096: Expected O, but got Unknown
			base.FixedUpdate();
			((EntityState)this).characterMotor.moveDirection = Vector3.zero;
			predictionEffectStopwatch -= Time.fixedDeltaTime;
			if (predictionEffectStopwatch <= 0f && ((EntityState)this).fixedAge < duration)
			{
				predictionEffectStopwatch = 0.4f;
				if (NetworkServer.active)
				{
					EffectManager.SpawnEffect(TtarAssets.sandstormIndicator, new EffectData
					{
						origin = predictedTargetPosition,
						rotation = Quaternion.identity,
						scale = 1f
					}, true);
				}
			}
			if (predictor != null)
			{
				predictor.Update();
				float num = 0.8f;
				predictor.GetPredictedTargetPosition(num, ref predictedTargetPosition);
			}
			if (((EntityState)this).isAuthority)
			{
				if (!fired && ((EntityState)this).fixedAge >= duration)
				{
					FireSandstorm();
				}
				if (((EntityState)this).fixedAge >= duration + 0.5f)
				{
					((EntityState)this).outer.SetNextStateToMain();
				}
			}
		}

		protected virtual void FireSandstorm()
		{
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			fired = true;
			((EntityState)this).PlayCrossfade("FullBody, Override", "FireSandstorm", "Action.playbackRate", 0.5f, 0.1f);
			ProjectileManager.instance.FireProjectile(Projectiles.pillarProjectile, predictedTargetPo