Decompiled source of JJBA Pucci v1.2.1

plugins/JJBAPucci.dll

Decompiled 2 hours ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using EntityStates;
using HG;
using JJBAMod.Modules;
using JJBAMod.Modules.BaseStates;
using JJBAMod.Modules.Characters;
using JJBAMod.Modules.Stands;
using JJBAMod.Survivors.Pucci.Components;
using JJBAMod.Survivors.Pucci.SkillStates;
using R2API;
using R2API.Utils;
using RoR2;
using RoR2.CharacterAI;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.WwiseUtils;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.Rendering;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("JJBAPucci")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("JJBAPucci")]
[assembly: AssemblyTitle("JJBAPucci")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace JJBAMod.Survivors.Pucci
{
	public static class PucciAI
	{
		public static void Init(GameObject bodyPrefab, string masterName)
		{
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: 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_018c: Unknown result type (might be due to invalid IL or missing references)
			//IL_019e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0218: Unknown result type (might be due to invalid IL or missing references)
			//IL_022a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0230: Unknown result type (might be due to invalid IL or missing references)
			//IL_0248: Unknown result type (might be due to invalid IL or missing references)
			//IL_0288: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0313: Unknown result type (might be due to invalid IL or missing references)
			//IL_0325: Unknown result type (might be due to invalid IL or missing references)
			//IL_032b: Unknown result type (might be due to invalid IL or missing references)
			GameObject obj = Prefabs.CreateBlankMasterPrefab(bodyPrefab, masterName);
			BaseAI component = obj.GetComponent<BaseAI>();
			component.aimVectorDampTime = 0.1f;
			component.aimVectorMaxSpeed = 360f;
			AISkillDriver obj2 = obj.AddComponent<AISkillDriver>();
			obj2.customName = "Use Primary Swing";
			obj2.skillSlot = (SkillSlot)0;
			obj2.requiredSkill = null;
			obj2.requireSkillReady = false;
			obj2.requireEquipmentReady = false;
			obj2.minUserHealthFraction = float.NegativeInfinity;
			obj2.maxUserHealthFraction = float.PositiveInfinity;
			obj2.minTargetHealthFraction = float.NegativeInfinity;
			obj2.maxTargetHealthFraction = float.PositiveInfinity;
			obj2.minDistance = 0f;
			obj2.maxDistance = 8f;
			obj2.selectionRequiresTargetLoS = false;
			obj2.selectionRequiresOnGround = false;
			obj2.selectionRequiresAimTarget = false;
			obj2.maxTimesSelected = -1;
			obj2.moveTargetType = (TargetType)0;
			obj2.activationRequiresTargetLoS = false;
			obj2.activationRequiresAimTargetLoS = false;
			obj2.activationRequiresAimConfirmation = false;
			obj2.movementType = (MovementType)1;
			obj2.moveInputScale = 1f;
			obj2.aimType = (AimType)1;
			obj2.ignoreNodeGraph = false;
			obj2.shouldSprint = false;
			obj2.shouldFireEquipment = false;
			obj2.buttonPressType = (ButtonPressType)0;
			obj2.driverUpdateTimerOverride = -1f;
			obj2.resetCurrentEnemyOnNextDriverSelection = false;
			obj2.noRepeat = false;
			obj2.nextHighPriorityOverride = null;
			AISkillDriver obj3 = obj.AddComponent<AISkillDriver>();
			obj3.customName = "Use Secondary First Bomb";
			obj3.skillSlot = (SkillSlot)1;
			obj3.requireSkillReady = true;
			obj3.minDistance = 0f;
			obj3.maxDistance = 8f;
			obj3.selectionRequiresTargetLoS = false;
			obj3.selectionRequiresOnGround = false;
			obj3.selectionRequiresAimTarget = false;
			obj3.maxTimesSelected = -1;
			obj3.moveTargetType = (TargetType)0;
			obj3.activationRequiresTargetLoS = false;
			obj3.activationRequiresAimTargetLoS = false;
			obj3.activationRequiresAimConfirmation = true;
			obj3.movementType = (MovementType)1;
			obj3.moveInputScale = 1f;
			obj3.aimType = (AimType)1;
			obj3.buttonPressType = (ButtonPressType)0;
			AISkillDriver obj4 = obj.AddComponent<AISkillDriver>();
			obj4.customName = "Use Utility Bomb Dash";
			obj4.skillSlot = (SkillSlot)2;
			obj4.requireSkillReady = true;
			obj4.minDistance = 8f;
			obj4.maxDistance = 20f;
			obj4.selectionRequiresTargetLoS = true;
			obj4.selectionRequiresOnGround = false;
			obj4.selectionRequiresAimTarget = false;
			obj4.maxTimesSelected = -1;
			obj4.moveTargetType = (TargetType)0;
			obj4.activationRequiresTargetLoS = false;
			obj4.activationRequiresAimTargetLoS = false;
			obj4.activationRequiresAimConfirmation = false;
			obj4.movementType = (MovementType)2;
			obj4.moveInputScale = 1f;
			obj4.aimType = (AimType)1;
			obj4.buttonPressType = (ButtonPressType)0;
			AISkillDriver obj5 = obj.AddComponent<AISkillDriver>();
			obj5.customName = "Use Special Sheer Heart Attack";
			obj5.skillSlot = (SkillSlot)3;
			obj5.requireSkillReady = true;
			obj5.minDistance = 0f;
			obj5.maxDistance = 20f;
			obj5.selectionRequiresTargetLoS = false;
			obj5.selectionRequiresOnGround = false;
			obj5.selectionRequiresAimTarget = false;
			obj5.maxTimesSelected = -1;
			obj5.moveTargetType = (TargetType)0;
			obj5.activationRequiresTargetLoS = false;
			obj5.activationRequiresAimTargetLoS = false;
			obj5.activationRequiresAimConfirmation = false;
			obj5.movementType = (MovementType)1;
			obj5.moveInputScale = 1f;
			obj5.aimType = (AimType)1;
			obj5.buttonPressType = (ButtonPressType)0;
			AISkillDriver obj6 = obj.AddComponent<AISkillDriver>();
			obj6.customName = "Chase";
			obj6.skillSlot = (SkillSlot)(-1);
			obj6.requireSkillReady = false;
			obj6.minDistance = 0f;
			obj6.maxDistance = float.PositiveInfinity;
			obj6.moveTargetType = (TargetType)0;
			obj6.activationRequiresTargetLoS = false;
			obj6.activationRequiresAimTargetLoS = false;
			obj6.activationRequiresAimConfirmation = false;
			obj6.movementType = (MovementType)1;
			obj6.moveInputScale = 1f;
			obj6.aimType = (AimType)1;
			obj6.buttonPressType = (ButtonPressType)0;
		}
	}
	public static class PucciAssets
	{
		public class Spin : MonoBehaviour
		{
			private void Update()
			{
				if (((Component)this).transform.childCount > 0)
				{
					((Component)this).transform.GetChild(0).Rotate(0f, 1080f * Time.deltaTime, 0f, (Space)1);
				}
			}
		}

		public static GameObject[] standModels = (GameObject[])(object)new GameObject[3];

		public static GameObject discProjectilePrefab;

		public static NetworkSoundEventDef[] standPunchHitSoundEvents;

		public static NetworkSoundEventDef pucciPunchHitSoundEvent;

		public static NetworkSoundEventDef discHitSoundEvent;

		public static ModdedDamageType discDamageType;

		public static BuffDef stageBuff;

		public static BuffDef soulsBuff;

		public static BuffDef accelerationBuff;

		public static BuffDef resetUsedBuff;

		public static GameObject rockProjectilePrefab;

		private static AssetBundle _assetBundle;

		public static GameObject hallucinationEffect => PucciFX.hallucination;

		public static void Init(AssetBundle assetBundle)
		{
			//IL_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: 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_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: 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_00d1: 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_00d3: 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_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			_assetBundle = assetBundle;
			standPunchHitSoundEvents = (NetworkSoundEventDef[])(object)new NetworkSoundEventDef[PucciSounds.standPunchHits.Length];
			for (int i = 0; i < standPunchHitSoundEvents.Length; i++)
			{
				standPunchHitSoundEvents[i] = Content.CreateAndAddNetworkSoundEventDef(PucciSounds.standPunchHits[i]);
			}
			pucciPunchHitSoundEvent = Content.CreateAndAddNetworkSoundEventDef("Play_bandit2_m2_impact");
			discHitSoundEvent = Content.CreateAndAddNetworkSoundEventDef("Play_JJBA_KnifeHit");
			string[] array = new string[3] { "mdlWhiteSnake", "mdlCMoon", "mdlMadeInHeaven" };
			for (int j = 0; j < array.Length; j++)
			{
				standModels[j] = _assetBundle.LoadAsset<GameObject>(array[j]);
				if (!Object.op_Implicit((Object)(object)standModels[j]))
				{
					continue;
				}
				Asset.ConvertAllRenderersToHopooShader(standModels[j]);
				if (j != 2)
				{
					continue;
				}
				foreach (Transform item in standModels[j].transform)
				{
					item.localScale *= 1.35f;
					item.localPosition *= 1.35f;
				}
			}
			discDamageType = DamageAPI.ReserveDamageType();
			stageBuff = Content.CreateAndAddBuff("bdPucciStage", Icon("texPucciCMoon"), new Color(0.6f, 0.95f, 0.6f), true, false);
			soulsBuff = Content.CreateAndAddBuff("bdPucciSouls", Icon("texPucciPassive"), new Color(0.85f, 0.85f, 1f), true, false);
			accelerationBuff = Content.CreateAndAddBuff("bdPucciAcceleration", Icon("texPucciMadeInHeaven"), new Color(0.9f, 0.95f, 1f), true, false);
			resetUsedBuff = Content.CreateAndAddBuff("bdPucciResetUsed", Icon("texPucciMadeInHeaven"), Color.gray, false, false);
			resetUsedBuff.isHidden = true;
			PucciCutscene.track = StandCinematic.LoadTrack(_assetBundle.LoadAsset<TextAsset>("PucciUltimateCamera"));
			PucciFX.Init();
			CreateDisc();
			if (Object.op_Implicit((Object)(object)discProjectilePrefab))
			{
				Content.AddProjectilePrefab(discProjectilePrefab);
			}
			CreateRock();
		}

		private static Sprite Icon(string name)
		{
			Sprite val = _assetBundle.LoadAsset<Sprite>(name);
			if (!Object.op_Implicit((Object)(object)val))
			{
				return _assetBundle.LoadAsset<Sprite>("texPassiveIcon");
			}
			return val;
		}

		private static void CreateDisc()
		{
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0166: Unknown result type (might be due to invalid IL or missing references)
			discProjectilePrefab = Asset.CloneProjectilePrefab("CommandoGrenadeProjectile", "PucciDiscProjectile");
			Object.DestroyImmediate((Object)(object)discProjectilePrefab.GetComponent<ProjectileImpactExplosion>());
			ApplyTorqueOnStart component = discProjectilePrefab.GetComponent<ApplyTorqueOnStart>();
			if (Object.op_Implicit((Object)(object)component))
			{
				Object.DestroyImmediate((Object)(object)component);
			}
			ProjectileSingleTargetImpact obj = discProjectilePrefab.AddComponent<ProjectileSingleTargetImpact>();
			obj.destroyOnWorld = true;
			obj.destroyWhenNotAlive = true;
			obj.impactEffect = SharedEffects.punchHitImpactEffect;
			obj.enemyHitSound = discHitSoundEvent;
			Rigidbody component2 = discProjectilePrefab.GetComponent<Rigidbody>();
			if (Object.op_Implicit((Object)(object)component2))
			{
				component2.useGravity = false;
				component2.freezeRotation = true;
				component2.collisionDetectionMode = (CollisionDetectionMode)2;
			}
			SphereCollider component3 = discProjectilePrefab.GetComponent<SphereCollider>();
			if (Object.op_Implicit((Object)(object)component3))
			{
				component3.radius = 0.25f;
			}
			ProjectileSimple val = discProjectilePrefab.GetComponent<ProjectileSimple>();
			if (!Object.op_Implicit((Object)(object)val))
			{
				val = discProjectilePrefab.AddComponent<ProjectileSimple>();
			}
			val.desiredForwardSpeed = 90f;
			val.updateAfterFiring = true;
			val.lifetime = 1.5f;
			discProjectilePrefab.AddComponent<KnifeCollisionGuard>();
			discProjectilePrefab.AddComponent<ModdedDamageTypeHolderComponent>().Add(discDamageType);
			ProjectileController component4 = discProjectilePrefab.GetComponent<ProjectileController>();
			component4.startSound = "";
			component4.procCoefficient = 1f;
			if ((Object)(object)_assetBundle.LoadAsset<GameObject>("PucciDiscGhost") != (Object)null)
			{
				GameObject val2 = Asset.CreateProjectileGhostPrefab(_assetBundle, "PucciDiscGhost");
				val2.transform.localScale = Vector3.one * 2f;
				val2.AddComponent<Spin>();
				component4.ghostPrefab = val2;
			}
		}

		private static void CreateRock()
		{
			//IL_007e: 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_0128: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)discProjectilePrefab))
			{
				return;
			}
			rockProjectilePrefab = PrefabAPI.InstantiateClone(discProjectilePrefab, "PucciRockProjectile", true);
			Object.DestroyImmediate((Object)(object)rockProjectilePrefab.GetComponent<ProjectileSingleTargetImpact>());
			ProjectileImpactExplosion obj = rockProjectilePrefab.AddComponent<ProjectileImpactExplosion>();
			((ProjectileExplosion)obj).blastRadius = 6f;
			((ProjectileExplosion)obj).blastDamageCoefficient = 1f;
			((ProjectileExplosion)obj).blastProcCoefficient = 1f;
			obj.destroyOnEnemy = true;
			obj.destroyOnWorld = true;
			obj.lifetime = 5f;
			obj.timerAfterImpact = false;
			((ProjectileExplosion)obj).falloffModel = (FalloffModel)0;
			obj.impactEffect = PucciFX.cMoonRockImpact;
			SphereCollider component = rockProjectilePrefab.GetComponent<SphereCollider>();
			if (Object.op_Implicit((Object)(object)component))
			{
				component.radius = 0.8f;
			}
			ProjectileSimple component2 = rockProjectilePrefab.GetComponent<ProjectileSimple>();
			if (Object.op_Implicit((Object)(object)component2))
			{
				component2.desiredForwardSpeed = 70f;
			}
			ProjectileController component3 = rockProjectilePrefab.GetComponent<ProjectileController>();
			GameObject val = LegacyResourcesAPI.Load<GameObject>("Prefabs/ProjectileGhosts/GrandparentMiniBoulderGhost");
			if (!Object.op_Implicit((Object)(object)val))
			{
				try
				{
					val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Grandparent/GrandparentMiniBoulderGhost.prefab").WaitForCompletion();
				}
				catch (Exception)
				{
				}
			}
			if (Object.op_Implicit((Object)(object)val))
			{
				GameObject val2 = PrefabAPI.InstantiateClone(val, "PucciRockGhost", false);
				Transform transform = val2.transform;
				transform.localScale *= 1.6f;
				PucciFX.DecorateRock(val2);
				component3.ghostPrefab = val2;
			}
			Content.AddProjectilePrefab(rockProjectilePrefab);
		}
	}
	public static class PucciFX
	{
		public class Streak : MonoBehaviour
		{
			private const float life = 0.55f;

			private LineRenderer line;

			private ParticleSystem motes;

			private float age;

			private void Awake()
			{
				//IL_001c: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
				//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f0: 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)
				line = ((Component)this).gameObject.AddComponent<LineRenderer>();
				((Renderer)line).sharedMaterial = FX.Material((Texture)(object)FX.Streak, Color.white, 3100);
				line.textureMode = (LineTextureMode)0;
				line.alignment = (LineAlignment)0;
				line.positionCount = 2;
				line.useWorldSpace = true;
				((Renderer)line).shadowCastingMode = (ShadowCastingMode)0;
				((Renderer)line).receiveShadows = false;
				line.numCapVertices = 0;
				motes = FX.Particles(((Component)this).gameObject, "Motes", (Texture)(object)FX.Spark, (Facing)0);
				MainModule main = motes.main;
				((MainModule)(ref main)).playOnAwake = false;
				((MainModule)(ref main)).simulationSpace = (ParticleSystemSimulationSpace)1;
				FX.Life(motes, 0.3f, 0.8f, 0.05f, 0.14f, 0f, 0f);
				FX.Colors(motes, Color.white, A(heavenBlue, 0f), 0.001f);
			}

			private void OnEnable()
			{
				//IL_0035: 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_003a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0042: Unknown result type (might be due to invalid IL or missing references)
				//IL_003e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0047: Unknown result type (might be due to invalid IL or missing references)
				//IL_004f: 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_0085: Unknown result type (might be due to invalid IL or missing references)
				//IL_008b: Unknown result type (might be due to invalid IL or missing references)
				//IL_008c: 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_00af: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c4: 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_00d5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00df: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
				age = 0f;
				EffectComponent component = ((Component)this).GetComponent<EffectComponent>();
				EffectData val = (Object.op_Implicit((Object)(object)component) ? component.effectData : null);
				Vector3 val2 = ((val != null) ? val.origin : ((Component)this).transform.position);
				Vector3 val3 = val?.start ?? val2;
				line.SetPosition(0, val3);
				line.SetPosition(1, val2);
				Apply(0f);
				motes.Clear();
				motes.Play();
				EmitParams val4 = default(EmitParams);
				int num = Mathf.Clamp(Mathf.RoundToInt(Vector3.Distance(val3, val2) * 2.5f), 4, 80);
				for (int i = 0; i < num; i++)
				{
					((EmitParams)(ref val4)).position = Vector3.Lerp(val3, val2, Random.value) + Random.insideUnitSphere * 0.6f;
					((EmitParams)(ref val4)).velocity = Random.insideUnitSphere * 1.2f;
					motes.Emit(val4, 1);
				}
			}

			private void Start()
			{
				OnEnable();
			}

			private void Update()
			{
				age += Time.deltaTime;
				Apply(Mathf.Clamp01(age / 0.55f));
			}

			private void Apply(float t)
			{
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: 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_0039: 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_005c: Unknown result type (might be due to invalid IL or missing references)
				float num = Mathf.Lerp(1.8f, 0.1f, t);
				line.startWidth = num;
				line.endWidth = num;
				Color val = Color.Lerp(Color.white, heavenBlue, t);
				val.a = 1f - t * t;
				line.startColor = val;
				line.endColor = val;
			}
		}

		public static readonly Color whiteSnakePale = new Color(0.86f, 1f, 0.88f);

		public static readonly Color whiteSnakeGreen = new Color(0.5f, 0.92f, 0.58f);

		public static readonly Color cMoonGreen = new Color(0.35f, 1f, 0.3f);

		public static readonly Color cMoonDeep = new Color(0.06f, 0.45f, 0.12f);

		public static readonly Color heavenWhite = Color.white;

		public static readonly Color heavenBlue = new Color(0.78f, 0.88f, 1f);

		public static readonly Color[] standColors = (Color[])(object)new Color[3]
		{
			new Color(0.75f, 1f, 0.78f),
			new Color(0.4f, 1f, 0.35f),
			new Color(0.95f, 0.97f, 1f)
		};

		public static GameObject hallucination;

		public static GameObject heavenFlash;

		public static GameObject heavenStreak;

		public static GameObject cMoonBurst;

		public static GameObject cMoonPulse;

		public static GameObject cMoonInversion;

		public static GameObject cMoonRockImpact;

		public static void Init()
		{
			hallucination = Register(Hallucination());
			heavenFlash = Register(HeavenFlash());
			heavenStreak = Register(HeavenStreak());
			cMoonBurst = Register(CMoonBurst());
			cMoonPulse = Register(CMoonPulse());
			cMoonInversion = Register(CMoonInversion());
			cMoonRockImpact = Register(CMoonRockImpact());
		}

		private static GameObject Register(GameObject effect)
		{
			Content.CreateAndAddEffectDef(effect);
			return effect;
		}

		private static Color A(Color color, float alpha)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: 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_0013: Unknown result type (might be due to invalid IL or missing references)
			return new Color(color.r, color.g, color.b, alpha);
		}

		private static GameObject Hallucination()
		{
			//IL_0063: 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_007c: 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_00f1: 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_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0185: Unknown result type (might be due to invalid IL or missing references)
			//IL_018a: 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_01f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0204: Unknown result type (might be due to invalid IL or missing references)
			//IL_0214: Unknown result type (might be due to invalid IL or missing references)
			GameObject obj = FX.NewEffect("PucciHallucinationEffect", 3f, (string)null);
			ParticleSystem obj2 = FX.Particles(obj, "Mist", (Texture)(object)FX.SoftDot, (Facing)0);
			FX.Burst(obj2, 36, 0f);
			FX.Life(obj2, 1.4f, 2.4f, 0.35f, 0.65f, 0.15f, 0.45f);
			FX.Sphere(obj2, 0.55f, 1f);
			FX.Colors(obj2, A(whiteSnakePale, 0.45f), A(whiteSnakeGreen, 0.15f), 0.15f);
			FX.Grow(obj2, 0.6f, 1.4f);
			FX.Drag(obj2, 0.04f);
			ParticleSystem obj3 = FX.Particles(obj, "Ring", (Texture)(object)FX.Ring, (Facing)1);
			FX.Burst(obj3, 1, 0f);
			FX.Life(obj3, 0.9f, 0.9f, 2.3f, 2.3f, 0f, 0f);
			FX.Colors(obj3, A(Color.white, 0.8f), A(whiteSnakeGreen, 0f), 0.02f);
			FX.Blast(obj3, 0.1f, 1f);
			ParticleSystem obj4 = FX.Particles(obj, "Drips", (Texture)(object)FX.Spark, (Facing)2);
			FX.Burst(obj4, 70, 0f);
			FX.Life(obj4, 0.8f, 1.7f, 0.025f, 0.05f, 0f, 0.05f);
			FX.Sphere(obj4, 0.9f, 1f);
			FX.Gravity(obj4, 0.5f);
			FX.Colors(obj4, A(Color.white, 0.9f), A(whiteSnakeGreen, 0.3f), 0.05f);
			ParticleSystem obj5 = FX.Particles(obj, "Sparkles", (Texture)(object)FX.Spark, (Facing)0);
			FX.Burst(obj5, 40, 0f);
			FX.Life(obj5, 0.5f, 1.2f, 0.02f, 0.05f, 0.1f, 0.4f);
			FX.Sphere(obj5, 1f, 1f);
			FX.Colors(obj5, Color.white, A(whiteSnakePale, 0f), 0.05f);
			FX.AddLight(obj, whiteSnakeGreen, 18f, 3f, 1.2f);
			return obj;
		}

		private static GameObject HeavenFlash()
		{
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: 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_00d0: 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_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: 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_01d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
			GameObject obj = FX.NewEffect("PucciHeavenFlash", 1.2f, (string)null);
			ParticleSystem obj2 = FX.Particles(obj, "Flash", (Texture)(object)FX.SoftDot, (Facing)0);
			FX.Burst(obj2, 1, 0f);
			FX.Life(obj2, 0.3f, 0.3f, 3.2f, 3.2f, 0f, 0f);
			FX.Colors(obj2, Color.white, A(heavenBlue, 0f), 0.001f);
			FX.Grow(obj2, 0.5f, 1.4f);
			ParticleSystem obj3 = FX.Particles(obj, "Ring", (Texture)(object)FX.Ring, (Facing)0);
			FX.Burst(obj3, 1, 0f);
			FX.Life(obj3, 0.4f, 0.4f, 3.5f, 3.5f, 0f, 0f);
			FX.Colors(obj3, Color.white, A(heavenBlue, 0f), 0.001f);
			FX.Blast(obj3, 0.15f, 1f);
			ParticleSystem obj4 = FX.Particles(obj, "Sparks", (Texture)(object)FX.Spark, (Facing)2);
			FX.Burst(obj4, 32, 0f);
			FX.Life(obj4, 0.2f, 0.5f, 0.04f, 0.08f, 6f, 15f);
			FX.Sphere(obj4, 0.3f, 1f);
			FX.Drag(obj4, 0.12f);
			FX.Colors(obj4, Color.white, A(heavenBlue, 0.5f), 0.001f);
			ParticleSystem obj5 = FX.Particles(obj, "Motes", (Texture)(object)FX.SoftDot, (Facing)0);
			FX.Burst(obj5, 14, 0f);
			FX.Life(obj5, 0.5f, 1f, 0.2f, 0.45f, 0.3f, 1.2f);
			FX.Sphere(obj5, 0.6f, 1f);
			FX.Colors(obj5, A(Color.white, 0.6f), A(heavenBlue, 0f), 0.05f);
			FX.AddLight(obj, Color.white, 10f, 5f, 0.35f);
			return obj;
		}

		private static GameObject HeavenStreak()
		{
			GameObject obj = FX.NewEffect("PucciHeavenStreak", 1f, (string)null);
			obj.GetComponent<EffectComponent>().applyScale = false;
			obj.GetComponent<VFXAttributes>().DoNotPool = true;
			obj.AddComponent<Streak>();
			return obj;
		}

		private static GameObject CMoonBurst()
		{
			//IL_0052: 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_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: 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_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_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_016d: 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_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0202: 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_022b: Unknown result type (might be due to invalid IL or missing references)
			//IL_023c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0246: Unknown result type (might be due to invalid IL or missing references)
			//IL_0250: Unknown result type (might be due to invalid IL or missing references)
			//IL_0255: Unknown result type (might be due to invalid IL or missing references)
			//IL_025f: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e8: Unknown result type (might be due to invalid IL or missing references)
			GameObject obj = FX.NewEffect("PucciCMoonBurst", 2.5f, (string)null);
			ParticleSystem obj2 = FX.Particles(obj, "RingIn", (Texture)(object)FX.Ring, (Facing)1);
			FX.Burst(obj2, 1, 0f);
			FX.Life(obj2, 0.55f, 0.55f, 2.2f, 2.2f, 0f, 0f);
			FX.Colors(obj2, A(cMoonGreen, 0.9f), A(cMoonGreen, 0.4f), 0.05f);
			FX.Grow(obj2, 1f, 0.05f);
			ParticleSystem obj3 = FX.Particles(obj, "RingOut", (Texture)(object)FX.Ring, (Facing)1);
			FX.Burst(obj3, 1, 0.5f);
			FX.Life(obj3, 0.8f, 0.8f, 2.2f, 2.2f, 0f, 0f);
			FX.Colors(obj3, A(Color.white, 0.9f), A(cMoonDeep, 0f), 0.001f);
			FX.Blast(obj3, 0.05f, 1f);
			ParticleSystem obj4 = FX.Particles(obj, "Dust", (Texture)(object)FX.SoftDot, (Facing)0);
			FX.Burst(obj4, 50, 0f);
			FX.Life(obj4, 0.9f, 1.3f, 0.06f, 0.12f, -0.9f, -0.6f);
			FX.Circle(obj4, 1f, 0.2f);
			FX.Colors(obj4, A(new Color(0.55f, 0.75f, 0.5f), 0.55f), A(cMoonDeep, 0f), 0.1f);
			ParticleSystem obj5 = FX.Particles(obj, "Rain", (Texture)(object)FX.Spark, (Facing)2);
			FX.Burst(obj5, 60, 0f);
			FX.Life(obj5, 0.35f, 0.6f, 0.012f, 0.025f, 0f, 0f);
			FX.Circle(obj5, 1f, 1f);
			((Component)obj5).transform.localPosition = new Vector3(0f, 0.6f, 0f);
			VelocityOverLifetimeModule velocityOverLifetime = obj5.velocityOverLifetime;
			((VelocityOverLifetimeModule)(ref velocityOverLifetime)).enabled = true;
			((VelocityOverLifetimeModule)(ref velocityOverLifetime)).space = (ParticleSystemSimulationSpace)0;
			((VelocityOverLifetimeModule)(ref velocityOverLifetime)).x = MinMaxCurve.op_Implicit(0f);
			((VelocityOverLifetimeModule)(ref velocityOverLifetime)).y = MinMaxCurve.op_Implicit(-1.6f);
			((VelocityOverLifetimeModule)(ref velocityOverLifetime)).z = MinMaxCurve.op_Implicit(0f);
			FX.Colors(obj5, A(cMoonGreen, 1f), A(Color.white, 0.4f), 0.05f);
			ParticleSystem obj6 = FX.Particles(obj, "Flash", (Texture)(object)FX.SoftDot, (Facing)0);
			FX.Burst(obj6, 1, 0.5f);
			FX.Life(obj6, 0.4f, 0.4f, 0.6f, 0.6f, 0f, 0f);
			FX.Colors(obj6, A(Color.white, 0.8f), A(cMoonGreen, 0f), 0.001f);
			FX.Grow(obj6, 0.4f, 1.2f);
			FX.AddLight(obj, cMoonGreen, 30f, 4f, 1.5f);
			return obj;
		}

		private static GameObject CMoonPulse()
		{
			//IL_0052: 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_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: 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_0118: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: 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_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)
			//IL_015d: 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_01c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
			GameObject obj = FX.NewEffect("PucciCMoonPulse", 1.2f, (string)null);
			ParticleSystem obj2 = FX.Particles(obj, "RingIn", (Texture)(object)FX.Ring, (Facing)1);
			FX.Burst(obj2, 1, 0f);
			FX.Life(obj2, 0.7f, 0.7f, 2.1f, 2.1f, 0f, 0f);
			FX.Colors(obj2, A(cMoonGreen, 0.7f), A(cMoonDeep, 0.2f), 0.1f);
			FX.Grow(obj2, 1f, 0.1f);
			ParticleSystem obj3 = FX.Particles(obj, "Rain", (Texture)(object)FX.Spark, (Facing)2);
			FX.Burst(obj3, 45, 0f);
			FX.Life(obj3, 0.3f, 0.45f, 0.01f, 0.02f, 0f, 0f);
			FX.Circle(obj3, 1f, 1f);
			((Component)obj3).transform.localPosition = new Vector3(0f, 0.5f, 0f);
			VelocityOverLifetimeModule velocityOverLifetime = obj3.velocityOverLifetime;
			((VelocityOverLifetimeModule)(ref velocityOverLifetime)).enabled = true;
			((VelocityOverLifetimeModule)(ref velocityOverLifetime)).space = (ParticleSystemSimulationSpace)0;
			((VelocityOverLifetimeModule)(ref velocityOverLifetime)).x = MinMaxCurve.op_Implicit(0f);
			((VelocityOverLifetimeModule)(ref velocityOverLifetime)).y = MinMaxCurve.op_Implicit(-1.6f);
			((VelocityOverLifetimeModule)(ref velocityOverLifetime)).z = MinMaxCurve.op_Implicit(0f);
			FX.Colors(obj3, A(cMoonGreen, 0.9f), A(Color.white, 0.3f), 0.05f);
			ParticleSystem obj4 = FX.Particles(obj, "Dust", (Texture)(object)FX.SoftDot, (Facing)0);
			FX.Burst(obj4, 24, 0f);
			FX.Life(obj4, 0.6f, 0.9f, 0.05f, 0.09f, -0.9f, -0.5f);
			FX.Circle(obj4, 1f, 0.15f);
			FX.Colors(obj4, A(cMoonGreen, 0.35f), A(cMoonDeep, 0f), 0.1f);
			return obj;
		}

		private static GameObject CMoonInversion()
		{
			//IL_0052: 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_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: 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_00d0: 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_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0164: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_024e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0258: Unknown result type (might be due to invalid IL or missing references)
			//IL_025d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0267: Unknown result type (might be due to invalid IL or missing references)
			//IL_0286: Unknown result type (might be due to invalid IL or missing references)
			GameObject obj = FX.NewEffect("PucciCMoonInversion", 1.8f, (string)null);
			ParticleSystem obj2 = FX.Particles(obj, "Implode", (Texture)(object)FX.Ring, (Facing)0);
			FX.Burst(obj2, 1, 0f);
			FX.Life(obj2, 0.22f, 0.22f, 3f, 3f, 0f, 0f);
			FX.Colors(obj2, A(cMoonGreen, 0.9f), A(Color.white, 1f), 0.05f);
			FX.Grow(obj2, 1f, 0.05f);
			ParticleSystem obj3 = FX.Particles(obj, "Flash", (Texture)(object)FX.SoftDot, (Facing)0);
			FX.Burst(obj3, 1, 0.2f);
			FX.Life(obj3, 0.35f, 0.35f, 2.4f, 2.4f, 0f, 0f);
			FX.Colors(obj3, Color.white, A(cMoonGreen, 0f), 0.001f);
			FX.Grow(obj3, 0.3f, 1.3f);
			ParticleSystem obj4 = FX.Particles(obj, "Sparks", (Texture)(object)FX.Spark, (Facing)2);
			FX.Burst(obj4, 50, 0.2f);
			FX.Life(obj4, 0.25f, 0.55f, 0.03f, 0.06f, 3f, 6f);
			FX.Sphere(obj4, 0.1f, 1f);
			FX.Drag(obj4, 0.08f);
			FX.Colors(obj4, Color.white, A(cMoonGreen, 0.6f), 0.001f);
			ParticleSystem obj5 = FX.Particles(obj, "Inside", (Texture)(object)FX.SoftDot, (Facing)0);
			FX.Burst(obj5, 22, 0.2f);
			FX.Life(obj5, 0.5f, 0.9f, 0.06f, 0.13f, 1.5f, 3f);
			FX.Sphere(obj5, 0.1f, 1f);
			FX.Gravity(obj5, 1.2f);
			FX.Colors(obj5, new Color(0.7f, 0.06f, 0.12f, 0.95f), new Color(0.25f, 0.02f, 0.05f, 0.6f), 0.001f);
			ParticleSystem obj6 = FX.Particles(obj, "Ring", (Texture)(object)FX.Ring, (Facing)0);
			FX.Burst(obj6, 1, 0.2f);
			FX.Life(obj6, 0.45f, 0.45f, 3f, 3f, 0f, 0f);
			FX.Colors(obj6, A(cMoonGreen, 0.9f), A(cMoonDeep, 0f), 0.001f);
			FX.Blast(obj6, 0.1f, 1f);
			FX.AddLight(obj, cMoonGreen, 12f, 5f, 0.6f);
			return obj;
		}

		private static GameObject CMoonRockImpact()
		{
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: 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_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0118: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_022c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0231: Unknown result type (might be due to invalid IL or missing references)
			//IL_023b: Unknown result type (might be due to invalid IL or missing references)
			//IL_024b: Unknown result type (might be due to invalid IL or missing references)
			GameObject obj = FX.NewEffect("PucciCMoonRockImpact", 2f, "Play_engi_M2_explo");
			ParticleSystem obj2 = FX.Particles(obj, "Ring", (Texture)(object)FX.Ring, (Facing)1);
			FX.Burst(obj2, 1, 0f);
			FX.Life(obj2, 0.5f, 0.5f, 2.4f, 2.4f, 0f, 0f);
			FX.Colors(obj2, A(Color.white, 0.9f), A(cMoonGreen, 0f), 0.001f);
			FX.Blast(obj2, 0.1f, 1f);
			ParticleSystem obj3 = FX.Particles(obj, "Dust", (Texture)(object)FX.SoftDot, (Facing)0);
			FX.Burst(obj3, 28, 0f);
			FX.Life(obj3, 0.8f, 1.4f, 0.25f, 0.5f, 0.4f, 1.1f);
			FX.Sphere(obj3, 0.25f, 1f);
			FX.Drag(obj3, 0.06f);
			FX.Colors(obj3, new Color(0.5f, 0.47f, 0.4f, 0.7f), new Color(0.3f, 0.3f, 0.27f, 0f), 0.02f);
			FX.Grow(obj3, 0.6f, 1.3f);
			ParticleSystem obj4 = FX.Particles(obj, "Chips", (Texture)(object)FX.Spark, (Facing)2);
			FX.Burst(obj4, 30, 0f);
			FX.Life(obj4, 0.5f, 0.9f, 0.03f, 0.06f, 1.5f, 3f);
			FX.Sphere(obj4, 0.2f, 1f);
			FX.Gravity(obj4, 2f);
			FX.Colors(obj4, new Color(0.35f, 0.32f, 0.3f, 1f), new Color(0.2f, 0.2f, 0.2f, 0.8f), 0.001f);
			ParticleSystem obj5 = FX.Particles(obj, "Glow", (Texture)(object)FX.Spark, (Facing)2);
			FX.Burst(obj5, 36, 0f);
			FX.Life(obj5, 0.3f, 0.6f, 0.02f, 0.04f, 2f, 4f);
			FX.Sphere(obj5, 0.2f, 1f);
			FX.Drag(obj5, 0.1f);
			FX.Colors(obj5, Color.white, A(cMoonGreen, 0.6f), 0.001f);
			FX.AddLight(obj, cMoonGreen, 14f, 4f, 0.5f);
			return obj;
		}

		public static void DecorateRock(GameObject ghost)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: 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_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: 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_0077: 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_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: 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_00cd: Unknown result type (might be due to invalid IL or missing references)
			ParticleSystem obj = FX.Particles(ghost, "Trail", (Texture)(object)FX.SoftDot, (Facing)0);
			MainModule main = obj.main;
			((MainModule)(ref main)).loop = true;
			((MainModule)(ref main)).simulationSpace = (ParticleSystemSimulationSpace)1;
			((MainModule)(ref main)).scalingMode = (ParticleSystemScalingMode)1;
			FX.Life(obj, 0.3f, 0.5f, 0.8f, 1.4f, 0f, 0f);
			EmissionModule emission = obj.emission;
			((EmissionModule)(ref emission)).rateOverDistance = MinMaxCurve.op_Implicit(3f);
			FX.Colors(obj, A(cMoonGreen, 0.5f), A(cMoonDeep, 0f), 0.02f);
			FX.Grow(obj, 1f, 0.3f);
			GameObject val = new GameObject("Glow");
			val.transform.SetParent(ghost.transform, false);
			Light obj2 = val.AddComponent<Light>();
			obj2.type = (LightType)2;
			obj2.color = cMoonGreen;
			obj2.range = 8f;
			obj2.intensity = 3f;
			obj2.shadows = (LightShadows)0;
		}
	}
	public static class PucciSounds
	{
		public static readonly string[] standPunchSwings = new string[3] { "Play_JJBA_StandSwing1", "Play_JJBA_StandSwing2", "Play_JJBA_StandSwing3" };

		public static readonly string[] standPunchHits = new string[3] { "Play_JJBA_StandHit1", "Play_JJBA_StandHit2", "Play_JJBA_StandHit3" };

		public static readonly string[] pucciSwings = new string[3] { "Play_Kira_Swing1", "Play_Kira_Swing2", "Play_Kira_Swing3" };

		public const string pucciPunchHit = "Play_bandit2_m2_impact";

		private static readonly string[] punchShouts = new string[3] { "Play_Pucci_Shout1", "Play_Pucci_Shout2", "Play_Pucci_Shout3" };

		public const string discThrow = "Play_Pucci_Disc";

		public const string discHit = "Play_JJBA_KnifeHit";

		public const string dash = "Play_Pucci_Dash";

		public const string rushStart = "Play_Pucci_Rush";

		public const string rushFinish = "Play_Pucci_RushFinish";

		public const string universeReset = "Play_Pucci_UniverseReset";

		public const string madeInHeavenDash = "Play_Pucci_MiHDash";

		public const string acceleration = "Play_Pucci_Accelerate";

		public const string evolve = "Play_Pucci_Evolve";

		public static readonly string[] standSpecial = new string[3] { "Play_Pucci_Disc", "Play_Pucci_CMoon", "Play_Pucci_Accelerate" };

		public static readonly string[] ultimate = new string[3] { "Play_Pucci_WhiteSnake", "Play_Pucci_CMoon", "Play_Pucci_MadeInHeaven" };

		public static string PunchShout(int step)
		{
			return punchShouts[step % punchShouts.Length];
		}
	}
	public static class PucciStates
	{
		public static void Init()
		{
			Content.AddEntityState(typeof(PucciPunch));
			Content.AddEntityState(typeof(DiscThrow));
			Content.AddEntityState(typeof(PucciDash));
			Content.AddEntityState(typeof(PucciRush));
			Content.AddEntityState(typeof(PucciUltimate));
			Content.AddEntityState(typeof(PucciCutscene));
			Content.AddEntityState(typeof(PucciStandSpecial));
		}
	}
	public static class PucciStaticValues
	{
		public const float punchDamageCoefficient = 2.5f;

		public const float pucciPunchDamageCoefficient = 1.2f;

		public const float punchLockOnRange = 15f;

		public const float punchStandCost = 4f;

		public const float discDamageCoefficient = 3f;

		public const float discSpeed = 90f;

		public const float discStealDuration = 4f;

		public const int madeInHeavenDiscs = 3;

		public const float cMoonLaunchForce = 2500f;

		public const float dashDamageCoefficient = 3.5f;

		public const float dashStandCost = 18f;

		public const int rushHits = 12;

		public const float rushHitDamageCoefficient = 0.7f;

		public const float rushFinisherDamageCoefficient = 5f;

		public const float rushStandCost = 30f;

		public const int stagesPerEvolution = 3;

		public const float damagePerStage = 0.2f;

		public const float madeInHeavenMoveSpeed = 0.3f;

		public const float madeInHeavenAttackSpeed = 0.2f;

		public const float ultimateStandCost = 40f;

		public const float ultimateCooldown = 30f;

		public const float hallucinationRadius = 30f;

		public const float hallucinationDuration = 6f;

		public const float gravityRadius = 25f;

		public const float gravityDuration = 8f;

		public const float gravityDamageCoefficientPerSecond = 2.5f;

		public const float gravityPull = 45f;

		public const float rockDamageCoefficient = 5f;

		public const float rockBlastRadius = 6f;

		public const float rockSpeed = 70f;

		public const float resetDuration = 8f;

		public const float resetTimeScale = 3f;

		public const float resetDayCycles = 12f;

		public const int accelerationMaxLevel = 3;

		public const float accelerationRadius = 80f;

		public const float accelerationMoveSpeedPerLevel = 0.4f;

		public const float accelerationAttackSpeedPerLevel = 0.3f;

		public const float accelerationCooldownPerLevel = 0.15f;

		public const float accelerationDrainPerLevel = 5f;

		public const float accelerationRestorePerHit = 2.5f;

		public const float standSpecialCost = 25f;

		public const float standSpecialCooldown = 10f;

		public const float commandDiscDuration = 12f;

		public const float commandDiscBossDamageCoefficient = 10f;

		public const float inversionTouchDamageCoefficient = 5f;

		public const float inversionHealthShare = 0.25f;

		public const float inversionBossHealthShare = 0.06f;

		public const int inversionBleedStacks = 5;

		public const float slashDistance = 24f;

		public const float slashRadius = 3.5f;

		public const int slashHits = 4;

		public const float slashDamageCoefficient = 2.2f;
	}
	public static class PucciTokens
	{
		public static void Init()
		{
			string text = "KAVAHN_PUCCI_";
			string text2 = "Enrico Pucci and White Snake, the stand that evolves on his way to heaven.<color=#CCD3E0>\n\n" + $"< ! > Every {3} stages, White Snake evolves: first C-Moon, then Made in Heaven, each with its own cutscene from All-Star Battle R." + "\n\n" + $"< ! > Each new stand changes several of your skills and gives +{20f}% damage." + "\n\n< ! > Your stand stays evolved for the rest of the run.</color>";
			Language.Add(text + "NAME", "Enrico Pucci");
			Language.Add(text + "DESCRIPTION", text2);
			Language.Add(text + "SUBTITLE", "The Path to Heaven");
			Language.Add(text + "LORE", "\"Spiral staircase. Rhinoceros beetle. Desolation row. Fig tart...\"");
			Language.Add(text + "OUTRO_FLAVOR", "...and so he left, one step closer to heaven.");
			Language.Add(text + "OUTRO_FAILURE", "...and so he vanished, his heaven never reached.");
			Language.Add(text + "STAND_NAME", "WHITE SNAKE");
			Language.Add(text + "DEFAULT_SKIN_NAME", "Default");
			Language.Add(text + "PASSIVE_NAME", "Stand: White Snake");
			Language.Add(text + "PASSIVE_DESCRIPTION", $"Your stand uses the <style=cIsUtility>stand meter</style>. Every <style=cIsUtility>{3} stages</style> it evolves: White Snake becomes <style=cIsUtility>C-Moon</style>, then <style=cIsUtility>Made in Heaven</style>. Each stand adds <style=cIsDamage>+{20f}% damage</style>.");
			Language.Add(text + "PRIMARY_PUNCH_NAME", "Stand Strike");
			Language.Add(text + "PRIMARY_PUNCH_DESCRIPTION", "<style=cIsUtility>Agile.</style>" + $"<style=cIsUtility>Lock on</style> to an enemy within {15f}m. Your stand flies to it and strikes for <style=cIsDamage>{250f}% damage</style>.");
			Language.Add(text + "SECONDARY_DISC_NAME", "Stand Disc");
			Language.Add(text + "SECONDARY_DISC_DESCRIPTION", $"Throw a disc for <style=cIsDamage>{300f}% damage</style> that <style=cIsUtility>steals</style> the enemy's power, <style=cIsDamage>crippling</style> it for {4f}s. <style=cIsUtility>C-Moon:</style> hurls a boulder instead, bursting for <style=cIsDamage>{500f}% damage</style> around where it lands. <style=cIsUtility>Made in Heaven:</style> throw {3}.");
			Language.Add(text + "UTILITY_DASH_NAME", "Stand Charge");
			Language.Add(text + "UTILITY_DASH_DESCRIPTION", $"<style=cIsUtility>Dash</style> forward behind your stand, which strikes everything in your path for <style=cIsDamage>{350f}% damage</style>. <style=cIsUtility>Made in Heaven:</style> the dash is <style=cIsUtility>instant</style>, up to {24f}m, cutting everything along it <style=cIsDamage>{4} times for {220f}% damage</style>.");
			Language.Add(text + "SPECIAL_RUSH_NAME", "Stand Barrage");
			Language.Add(text + "SPECIAL_RUSH_DESCRIPTION", $"Your stand hits the locked-on enemy <style=cIsDamage>{12} times for {70f}% damage</style> each, then once more for <style=cIsDamage>{500f}% damage</style>.");
			Language.Add(text + "ULTIMATE_WHITESNAKE_NAME", "Melting Hallucination");
			Language.Add(text + "ULTIMATE_WHITESNAKE_DESCRIPTION", $"<style=cIsUtility>Ultimate.</style> Every enemy within {30f}m is <style=cIsUtility>slowed</style> and <style=cIsDamage>crippled</style> for {6f}s, and you turn <style=cIsUtility>invisible</style>. Changes as your stand evolves.");
			Language.Add(text + "ULTIMATE_CMOON_NAME", "Gravity");
			Language.Add(text + "ULTIMATE_CMOON_DESCRIPTION", $"<style=cIsUtility>Ultimate.</style> C-Moon bends gravity around you for {8f}s: everything within {25f}m is <style=cIsUtility>forced to the ground</style>, slowed, and takes <style=cIsDamage>{250f}% damage</style> every second.");
			Language.Add(text + "ULTIMATE_MIH_NAME", "Universe Reset");
			Language.Add(text + "ULTIMATE_MIH_DESCRIPTION", "<style=cIsUtility>Ultimate. Once per run.</style> Made in Heaven speeds time up to its end. For a few seconds the game runs faster, the sun spins through day and night and the sky turns to stars. Then the run <style=cIsUtility>loops back to a first stage</style>.");
			Language.Add(text + "UNIVERSE_RESET", "<color=#E6F0FF>Time has accelerated to its end. The universe begins again.</color>");
			Language.Add(text + "TITLE_WHITESNAKE", "MELTING HALLUCINATION");
			Language.Add(text + "TITLE_CMOON", "C-MOON");
			Language.Add(text + "TITLE_MIH", "MADE IN HEAVEN");
			Language.Add(text + "STANDSPECIAL_WHITESNAKE_NAME", "Command Disc");
			Language.Add(text + "STANDSPECIAL_WHITESNAKE_DESCRIPTION", $"<style=cIsUtility>Stand special.</style> White Snake pushes a command disc into the locked-on enemy: it <style=cIsUtility>fights for you</style> for {12f}s. Bosses resist, taking <style=cIsDamage>{1000f}% damage</style> and a <style=cIsDamage>stun</style> instead.");
			Language.Add(text + "STANDSPECIAL_CMOON_NAME", "Surface Inversion");
			Language.Add(text + "STANDSPECIAL_CMOON_DESCRIPTION", $"<style=cIsUtility>Stand special.</style> C-Moon's touch turns the enemy <style=cIsDamage>inside out</style>: <style=cIsDamage>{500f}% damage</style> plus <style=cIsDamage>{25f}% of its max health</style> ({6f}% for bosses), and heavy <style=cIsDamage>bleeding</style>.");
			Language.Add(text + "STANDSPECIAL_MIH_NAME", "Time Acceleration");
			Language.Add(text + "STANDSPECIAL_MIH_DESCRIPTION", $"<style=cIsUtility>Stand special.</style> Each press speeds time up one level, up to {3}. One more press turns it off. Each level: <style=cIsUtility>+{40f}% move speed</style>, <style=cIsDamage>+{30.000002f}% attack speed</style>, faster cooldowns, and enemies within {80f}m are slowed more. Drains <style=cIsUtility>{5f} meter per second per level</style>, and the meter doesn't refill on its own while it runs; every hit you land refunds {2.5f}.");
			Language.Add(text + "SOULS_NAME", "Stages toward evolution");
			Language.Add(text + "EVOLVE_CMOON", "<color=#9EF29E>White Snake has become C-MOON.</color>");
			Language.Add(text + "EVOLVE_MIH", "<color=#E6F0FF>C-Moon has become MADE IN HEAVEN.</color>");
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.kavahn.JJBAPucci", "JJBAPucci", "1.2.1")]
	public class PucciPlugin : BaseUnityPlugin
	{
		private void Awake()
		{
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			string? directoryName = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location);
			Asset.AddBundleFolder(directoryName);
			SoundBanks.Add(directoryName, "JJBAPucci.bnk");
			PucciEvolution.devSwitchEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Development", "Enable Stand Switching", false, "Lets the host switch Pucci's stand between White Snake, C-Moon and Made in Heaven with the key below, for testing. Also gives Universe Reset back.");
			PucciEvolution.devSwitchKey = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("Development", "Stand Switch Key", new KeyboardShortcut((KeyCode)289, Array.Empty<KeyCode>()), "Each press moves Pucci's stand to the next one (White Snake, C-Moon, Made in Heaven, then back).");
			JJBAPlugin.Safely((Action)delegate
			{
				((CharacterBase<PucciSurvivor>)(object)new PucciSurvivor()).Initialize();
			});
		}
	}
	public class PucciSurvivor : SurvivorBase<PucciSurvivor>
	{
		public class UniverseResetSkillDef : StandSkillDef
		{
			protected override bool StandAvailable(GenericSkill skillSlot)
			{
				PucciEvolution pucciEvolution = (Object.op_Implicit((Object)(object)skillSlot.characterBody) ? ((Component)skillSlot.characterBody).GetComponent<PucciEvolution>() : null);
				if (((StandSkillDef)this).StandAvailable(skillSlot))
				{
					if (Object.op_Implicit((Object)(object)pucciEvolution))
					{
						return !pucciEvolution.ResetUsed;
					}
					return true;
				}
				return false;
			}
		}

		public const string PUCCI_PREFIX = "KAVAHN_PUCCI_";

		public const float modelScale = 1.34f;

		public static readonly SkillDef[] standSpecialDefs = (SkillDef[])(object)new SkillDef[3];

		public static readonly SkillDef[] ultimateDefs = (SkillDef[])(object)new SkillDef[3];

		public override string assetBundleName => "jjbapucci";

		public override string bodyName => "KavahnPucciBody";

		public override string masterName => "KavahnPucciMonsterMaster";

		public override string modelPrefabName => "mdlPucci";

		public override string displayPrefabName => "PucciDisplay";

		public override string survivorTokenPrefix => "KAVAHN_PUCCI_";

		public bool Available
		{
			get
			{
				if (Object.op_Implicit((Object)(object)((CharacterBase<PucciSurvivor>)(object)this).assetBundle))
				{
					return ((CharacterBase<PucciSurvivor>)(object)this).assetBundle.Contains(((CharacterBase<PucciSurvivor>)(object)this).modelPrefabName);
				}
				return false;
			}
		}

		public override BodyInfo bodyInfo => new BodyInfo
		{
			bodyName = ((CharacterBase<PucciSurvivor>)(object)this).bodyName,
			bodyNameToken = "KAVAHN_PUCCI_NAME",
			subtitleNameToken = "KAVAHN_PUCCI_SUBTITLE",
			characterPortrait = Icon<Texture>("texPucciIcon", "texHenryIcon"),
			bodyColor = new Color(0.55f, 0.85f, 0.55f),
			sortPosition = 102f,
			crosshair = Asset.LoadCrosshair("Standard"),
			podPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/NetworkedObjects/SurvivorPod"),
			maxHealth = 120f,
			healthRegen = 1.5f,
			armor = 0f,
			moveSpeed = 7.5f,
			jumpCount = 1,
			cameraParamsVerticalOffset = 1.7f,
			cameraParamsDepth = -12f
		};

		public override CustomRendererInfo[] customRendererInfos
		{
			get
			{
				//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_0045: Unknown result type (might be due to invalid IL or missing references)
				//IL_0059: Unknown result type (might be due to invalid IL or missing references)
				//IL_005e: Unknown result type (might be due to invalid IL or missing references)
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0070: Expected O, but got Unknown
				ChildLocator val = (Object.op_Implicit((Object)(object)((CharacterBase<PucciSurvivor>)(object)this).characterModelObject) ? ((CharacterBase<PucciSurvivor>)(object)this).characterModelObject.GetComponent<ChildLocator>() : null);
				if (!Object.op_Implicit((Object)(object)val))
				{
					return (CustomRendererInfo[])(object)new CustomRendererInfo[0];
				}
				List<CustomRendererInfo> list = new List<CustomRendererInfo>();
				NameTransformPair[] transformPairs = val.transformPairs;
				foreach (NameTransformPair val2 in transformPairs)
				{
					if (val2.name.StartsWith("Mesh"))
					{
						list.Add(new CustomRendererInfo
						{
							childName = val2.name
						});
					}
				}
				return list.ToArray();
			}
		}

		public override UnlockableDef characterUnlockableDef => null;

		public override ItemDisplaysBase itemDisplays => null;

		public override AssetBundle assetBundle { get; protected set; }

		public override GameObject bodyPrefab { get; protected set; }

		public override CharacterBody prefabCharacterBody { get; protected set; }

		public override GameObject characterModelObject { get; protected set; }

		public override CharacterModel prefabCharacterModel { get; protected set; }

		public override GameObject displayPrefab { get; protected set; }

		private T Icon<T>(string name, string fallback) where T : Object
		{
			T val = ((CharacterBase<PucciSurvivor>)(object)this).assetBundle.LoadAsset<T>(name);
			if (!Object.op_Implicit((Object)(object)val))
			{
				return ((CharacterBase<PucciSurvivor>)(object)this).assetBundle.LoadAsset<T>(fallback);
			}
			return val;
		}

		public override void Initialize()
		{
			((CharacterBase<PucciSurvivor>)(object)this).assetBundle = Asset.LoadAssetBundle(((CharacterBase<PucciSurvivor>)(object)this).assetBundleName);
			if (!Available)
			{
				Log.Warning((object)"the asset bundle has no pucci in it yet, skipping him (rebuild it with Tools/build_bundle.sh)");
			}
			else
			{
				((CharacterBase<PucciSurvivor>)(object)this).Initialize();
			}
		}

		public override void InitializeCharacter()
		{
			base.InitializeCharacter();
			PucciStates.Init();
			PucciTokens.Init();
			PucciAssets.Init(((CharacterBase<PucciSurvivor>)(object)this).assetBundle);
			PucciEvolution.Init();
			((CharacterBase<PucciSurvivor>)(object)this).InitializeEntityStateMachines();
			((CharacterBase<PucciSurvivor>)(object)this).InitializeSkills();
			((CharacterBase<PucciSurvivor>)(object)this).InitializeSkins();
			((CharacterBase<PucciSurvivor>)(object)this).InitializeCharacterMaster();
			AdditionalBodySetup();
		}

		private void AdditionalBodySetup()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: 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_0067: 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_007c: 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_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ee: 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_00f8: 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_0110: 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_012b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_0140: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_016f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_0184: Expected O, but got Unknown
			Transform transform = ((CharacterBase<PucciSurvivor>)(object)this).characterModelObject.transform;
			transform.localScale *= 1.34f;
			if (Object.op_Implicit((Object)(object)((SurvivorBase<PucciSurvivor>)this).displayPrefab))
			{
				Transform transform2 = ((SurvivorBase<PucciSurvivor>)this).displayPrefab.transform;
				transform2.localScale *= 1.34f;
				((SurvivorBase<PucciSurvivor>)this).displayPrefab.transform.localRotation = Quaternion.Euler(0f, 70f, 0f) * ((SurvivorBase<PucciSurvivor>)this).displayPrefab.transform.localRotation;
			}
			Prefabs.SetupHitBoxGroup(((CharacterBase<PucciSurvivor>)(object)this).characterModelObject, "SwordGroup", new string[1] { "SwordHitbox" });
			if (!Object.op_Implicit((Object)(object)((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab.GetComponent<AkGameObj>()))
			{
				((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab.AddComponent<AkGameObj>();
			}
			Stands.AddStandUser(((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab, ((CharacterBase<PucciSurvivor>)(object)this).bodyName, new StandDefinition
			{
				standNameToken = "KAVAHN_PUCCI_STAND_NAME",
				color = new Color(0.65f, 0.95f, 0.65f),
				standModelPrefab = PucciAssets.standModels[0],
				modelScale = 1.29f,
				actionModelScale = 1.5f,
				standOffset = new Vector3(0.7f, 0f, -1f),
				standoffFromTarget = 1.3f,
				hitboxCenter = new Vector3(0f, 0f, 1.2f),
				hitboxSize = new Vector3(3.3f, 3.3f, 3.5f),
				maxGauge = 130f
			});
			((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab.AddComponent<PucciEvolution>();
			((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab.AddComponent<PucciAcceleration>();
			((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab.AddComponent<StandTracker>().maxTrackingDistance = 15f;
			GameObject[] array = (GameObject[])(object)new GameObject[2]
			{
				((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab,
				((SurvivorBase<PucciSurvivor>)this).displayPrefab
			};
			foreach (GameObject val in array)
			{
				if (Object.op_Implicit((Object)(object)val))
				{
					val.AddComponent<SoundbankLoader>().soundbankStrings = SharedEffects.vanillaSoundbanks;
				}
			}
		}

		public override void InitializeEntityStateMachines()
		{
			Prefabs.ClearEntityStateMachines(((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab);
			Prefabs.AddMainEntityStateMachine(((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab, "Body", typeof(GenericCharacterMain), typeof(SpawnTeleporterState));
			Prefabs.AddEntityStateMachine(((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab, "Weapon", (Type)null, (Type)null, true, true);
			Prefabs.AddEntityStateMachine(((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab, "Weapon2", (Type)null, (Type)null, true, true);
		}

		public override void InitializeSkills()
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: 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_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Expected O, but got Unknown
			//IL_00ea: 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_00fa: 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_0110: 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_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_013b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_0148: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0158: 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_0166: Unknown result type (might be due to invalid IL or missing references)
			//IL_016d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0182: Unknown result type (might be due to invalid IL or missing references)
			//IL_0189: Unknown result type (might be due to invalid IL or missing references)
			//IL_0195: Expected O, but got Unknown
			//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Expected O, but got Unknown
			//IL_021c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Unknown result type (might be due to invalid IL or missing references)
			//IL_0235: Unknown result type (might be due to invalid IL or missing references)
			//IL_029c: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a3: Expected O, but got Unknown
			//IL_02ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0304: Unknown result type (might be due to invalid IL or missing references)
			//IL_0318: Unknown result type (might be due to invalid IL or missing references)
			//IL_0399: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a0: Expected O, but got Unknown
			//IL_0432: Unknown result type (might be due to invalid IL or missing references)
			//IL_0437: Unknown result type (might be due to invalid IL or missing references)
			//IL_044b: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d5: Expected O, but got Unknown
			//IL_04d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_04df: Expected O, but got Unknown
			//IL_0672: Unknown result type (might be due to invalid IL or missing references)
			//IL_0677: Unknown result type (might be due to invalid IL or missing references)
			//IL_068b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0570: Unknown result type (might be due to invalid IL or missing references)
			//IL_0575: Unknown result type (might be due to invalid IL or missing references)
			//IL_0589: Unknown result type (might be due to invalid IL or missing references)
			Skills.ClearGenericSkills(((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab);
			((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab.GetComponent<SkillLocator>().passiveSkill = new PassiveSkill
			{
				enabled = true,
				skillNameToken = "KAVAHN_PUCCI_PASSIVE_NAME",
				skillDescriptionToken = "KAVAHN_PUCCI_PASSIVE_DESCRIPTION",
				keywordToken = "KEYWORD_JJBA_STAND",
				icon = Icon<Sprite>("texPucciPassive", "texPassiveIcon")
			};
			Skills.CreateGenericSkillWithSkillFamily(((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab, (SkillSlot)0, false);
			SteppedSkillDef val = Skills.CreateSkillDef<SteppedSkillDef>(new SkillDefInfo("PucciStandStrike", "KAVAHN_PUCCI_PRIMARY_PUNCH_NAME", "KAVAHN_PUCCI_PRIMARY_PUNCH_DESCRIPTION", Icon<Sprite>("texPucciPrimary", "texPrimaryIcon"), new SerializableEntityStateType(typeof(PucciPunch)), "Weapon", true));
			val.stepCount = 3;
			val.stepGraceDuration = 0.5f;
			Skills.AddPrimarySkills(((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab, (SkillDef[])(object)new SkillDef[1] { (SkillDef)val });
			Skills.CreateGenericSkillWithSkillFamily(((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab, (SkillSlot)1, false);
			SkillDef val2 = Skills.CreateSkillDef(new SkillDefInfo
			{
				skillName = "PucciDiscThrow",
				skillNameToken = "KAVAHN_PUCCI_SECONDARY_DISC_NAME",
				skillDescriptionToken = "KAVAHN_PUCCI_SECONDARY_DISC_DESCRIPTION",
				skillIcon = Icon<Sprite>("texPucciSecondary", "texSecondaryIcon"),
				activationState = new SerializableEntityStateType(typeof(DiscThrow)),
				activationStateMachineName = "Weapon2",
				interruptPriority = (InterruptPriority)1,
				baseRechargeInterval = 3.5f,
				baseMaxStock = 2,
				rechargeStock = 1,
				requiredStock = 1,
				stockToConsume = 1,
				fullRestockOnAssign = true,
				mustKeyPress = false,
				isCombatSkill = true,
				cancelSprintingOnActivation = true
			});
			Skills.AddSecondarySkills(((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab, (SkillDef[])(object)new SkillDef[1] { val2 });
			Skills.CreateGenericSkillWithSkillFamily(((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab, (SkillSlot)2, false);
			SkillDefInfo val3 = new SkillDefInfo();
			val3.skillName = "PucciStandCharge";
			val3.skillNameToken = "KAVAHN_PUCCI_UTILITY_DASH_NAME";
			val3.skillDescriptionToken = "KAVAHN_PUCCI_UTILITY_DASH_DESCRIPTION";
			val3.keywordTokens = new string[1] { "KEYWORD_JJBA_STAND" };
			val3.skillIcon = Icon<Sprite>("texPucciUtility", "texUtilityIcon");
			val3.activationState = new SerializableEntityStateType(typeof(PucciDash));
			val3.activationStateMachineName = "Body";
			val3.interruptPriority = (InterruptPriority)2;
			val3.baseRechargeInterval = 6f;
			val3.baseMaxStock = 1;
			val3.fullRestockOnAssign = true;
			val3.isCombatSkill = true;
			val3.forceSprintDuringState = true;
			StandSkillDef val4 = Skills.CreateSkillDef<StandSkillDef>(val3);
			val4.standCost = 18f;
			Skills.AddUtilitySkills(((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab, (SkillDef[])(object)new SkillDef[1] { (SkillDef)val4 });
			Skills.CreateGenericSkillWithSkillFamily(((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab, (SkillSlot)3, false);
			val3 = new SkillDefInfo();
			val3.skillName = "PucciStandBarrage";
			val3.skillNameToken = "KAVAHN_PUCCI_SPECIAL_RUSH_NAME";
			val3.skillDescriptionToken = "KAVAHN_PUCCI_SPECIAL_RUSH_DESCRIPTION";
			val3.keywordTokens = new string[1] { "KEYWORD_JJBA_STAND" };
			val3.skillIcon = Icon<Sprite>("texPucciSpecial", "texSpecialIcon");
			val3.activationState = new SerializableEntityStateType(typeof(PucciRush));
			val3.activationStateMachineName = "Weapon2";
			val3.interruptPriority = (InterruptPriority)1;
			val3.baseRechargeInterval = 9f;
			val3.baseMaxStock = 1;
			val3.fullRestockOnAssign = true;
			val3.isCombatSkill = true;
			val3.cancelSprintingOnActivation = true;
			StandSkillDef val5 = Skills.CreateSkillDef<StandSkillDef>(val3);
			val5.standCost = 30f;
			Skills.AddSpecialSkills(((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab, (SkillDef[])(object)new SkillDef[1] { (SkillDef)val5 });
			string[] array = new string[3] { "WHITESNAKE", "CMOON", "MIH" };
			for (int i = 0; i < array.Length; i++)
			{
				val3 = new SkillDefInfo();
				val3.skillName = "PucciStandSpecial" + i;
				val3.skillNameToken = "KAVAHN_PUCCI_STANDSPECIAL_" + array[i] + "_NAME";
				val3.skillDescriptionToken = "KAVAHN_PUCCI_STANDSPECIAL_" + array[i] + "_DESCRIPTION";
				val3.keywordTokens = new string[1] { "KEYWORD_JJBA_STAND" };
				val3.skillIcon = Icon<Sprite>("texPucciStandSpecial" + i, "texPucciSecondary");
				val3.activationState = new SerializableEntityStateType(typeof(PucciStandSpecial));
				val3.activationStateMachineName = "Weapon2";
				val3.interruptPriority = (InterruptPriority)1;
				val3.baseRechargeInterval = 10f;
				val3.baseMaxStock = 1;
				val3.fullRestockOnAssign = true;
				val3.mustKeyPress = true;
				val3.isCombatSkill = true;
				val3.cancelSprintingOnActivation = true;
				StandSkillDef val6 = Skills.CreateSkillDef<StandSkillDef>(val3);
				val6.standCost = 25f;
				if (i == 2)
				{
					val6.standCost = 1f;
					((SkillDef)val6).baseRechargeInterval = 0.3f;
					((SkillDef)val6).cancelSprintingOnActivation = false;
					((SkillDef)val6).isCombatSkill = false;
				}
				standSpecialDefs[i] = (SkillDef)(object)val6;
				object obj;
				if (i != 2)
				{
					val3 = new SkillDefInfo();
					val3.skillName = "PucciUltimate" + i;
					val3.skillNameToken = "KAVAHN_PUCCI_ULTIMATE_" + array[i] + "_NAME";
					val3.skillDescriptionToken = "KAVAHN_PUCCI_ULTIMATE_" + array[i] + "_DESCRIPTION";
					val3.keywordTokens = new string[1] { "KEYWORD_JJBA_STAND" };
					val3.skillIcon = Icon<Sprite>((i == 0) ? "texPucciUltimate" : "texPucciCMoon", "texSpecialIcon");
					val3.activationState = new SerializableEntityStateType(typeof(PucciUltimate));
					val3.activationStateMachineName = "Weapon2";
					val3.interruptPriority = (InterruptPriority)1;
					val3.baseRechargeInterval = 30f;
					val3.baseMaxStock = 1;
					val3.fullRestockOnAssign = true;
					val3.mustKeyPress = true;
					val3.isCombatSkill = true;
					val3.cancelSprintingOnActivation = true;
					obj = Skills.CreateSkillDef<StandSkillDef>(val3);
				}
				else
				{
					val3 = new SkillDefInfo();
					val3.skillName = "PucciUltimate" + i;
					val3.skillNameToken = "KAVAHN_PUCCI_ULTIMATE_" + array[i] + "_NAME";
					val3.skillDescriptionToken = "KAVAHN_PUCCI_ULTIMATE_" + array[i] + "_DESCRIPTION";
					val3.keywordTokens = new string[1] { "KEYWORD_JJBA_STAND" };
					val3.skillIcon = Icon<Sprite>(i switch
					{
						1 => "texPucciCMoon", 
						0 => "texPucciUltimate", 
						_ => "texPucciMadeInHeaven", 
					}, "texSpecialIcon");
					val3.activationState = new SerializableEntityStateType(typeof(PucciUltimate));
					val3.activationStateMachineName = "Weapon2";
					val3.interruptPriority = (InterruptPriority)1;
					val3.baseRechargeInterval = 30f;
					val3.baseMaxStock = 1;
					val3.fullRestockOnAssign = true;
					val3.mustKeyPress = true;
					val3.isCombatSkill = true;
					val3.cancelSprintingOnActivation = true;
					obj = Skills.CreateSkillDef<UniverseResetSkillDef>(val3);
				}
				StandSkillDef val7 = (StandSkillDef)obj;
				val7.standCost = 40f;
				ultimateDefs[i] = (SkillDef)(object)val7;
			}
			ExtraSkills.AddStandSpecial(((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab, standSpecialDefs[0]);
			GenericSkill val8 = Skills.CreateGenericSkillWithSkillFamily(((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab, "HeavensPlan", "Ultimate", false);
			Skills.AddSkillToFamily(val8.skillFamily, ultimateDefs[0], (UnlockableDef)null);
			ExtraSkills.Slots(((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab).skill = val8;
		}

		public override void InitializeSkins()
		{
			ModelSkinController obj = ((Component)((CharacterBase<PucciSurvivor>)(object)this).prefabCharacterModel).gameObject.AddComponent<ModelSkinController>();
			SkinDef val = Skins.CreateSkinDef("DEFAULT_SKIN", Icon<Sprite>("texPucciSkin", "texMainSkin"), ((CharacterBase<PucciSurvivor>)(object)this).prefabCharacterModel.baseRendererInfos, ((Component)((CharacterBase<PucciSurvivor>)(object)this).prefabCharacterModel).gameObject, (UnlockableDef)null);
			obj.skins = (SkinDef[])(object)new SkinDef[1] { val };
		}

		public override void InitializeCharacterMaster()
		{
			PucciAI.Init(((CharacterBase<PucciSurvivor>)(object)this).bodyPrefab, ((SurvivorBase<PucciSurvivor>)this).masterName);
		}
	}
}
namespace JJBAMod.Survivors.Pucci.SkillStates
{
	public class DiscThrow : BaseSkillState
	{
		public static float baseDuration = 0.5f;

		public static float throwPercentTime = 0.4f;

		private float duration;

		private bool thrown;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			((BaseState)this).StartAimMode(duration + 1f, false);
			((EntityState)this).PlayAnimation("Gesture, Override", "DiscThrow", "ThrowBomb.playbackRate", duration, 0f);
			StandUser component = ((EntityState)this).GetComponent<StandUser>();
			if (component != null)
			{
				component.PlayStandAnimation("Throw", 0.05f);
			}
			Util.PlaySound("Play_Pucci_Disc", ((EntityState)this).gameObject);
		}

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

		private void Throw()
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: 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_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: 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_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: 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_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: 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_00c8: 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_00d8: 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_00db: 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_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: 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_0148: Unknown result type (might be due to invalid IL or missing references)
			//IL_0188: Unknown result type (might be due to invalid IL or missing references)
			//IL_0197: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0205: Unknown result type (might be due to invalid IL or missing references)
			//IL_0207: Unknown result type (might be due to invalid IL or missing references)
			//IL_0210: Unknown result type (might be due to invalid IL or missing references)
			//IL_0215: 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_021c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Unknown result type (might be due to invalid IL or missing references)
			//IL_0226: Unknown result type (might be due to invalid IL or missing references)
			//IL_0266: Unknown result type (might be due to invalid IL or missing references)
			//IL_0275: Unknown result type (might be due to invalid IL or missing references)
			thrown = true;
			if (!((EntityState)this).isAuthority || !Object.op_Implicit((Object)(object)PucciAssets.discProjectilePrefab))
			{
				return;
			}
			Ray aimRay = ((BaseState)this).GetAimRay();
			Vector3 point = ((Ray)(ref aimRay)).GetPoint(100f);
			RaycastHit val = default(RaycastHit);
			if (Util.CharacterRaycast(((EntityState)this).gameObject, aimRay, ref val, 100f, LayerMask.op_Implicit(LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask)), (QueryTriggerInteraction)1))
			{
				point = ((RaycastHit)(ref val)).point;
			}
			Vector3 val2 = ((Ray)(ref aimRay)).direction;
			val2.y = 0f;
			val2 = ((((Vector3)(ref val2)).sqrMagnitude > 0.001f) ? ((Vector3)(ref val2)).normalized : ((EntityState)this).characterDirection.forward);
			Vector3 val3 = ((EntityState)this).transform.position + Vector3.up * 0.55f + val2 * 0.8f;
			Vector3 val4 = point - val3;
			Vector3 normalized = ((Vector3)(ref val4)).normalized;
			PucciEvolution component = ((EntityState)this).GetComponent<PucciEvolution>();
			if (Object.op_Implicit((Object)(object)component) && component.Stage == 1 && Object.op_Implicit((Object)(object)PucciAssets.rockProjectilePrefab))
			{
				ProjectileManager.instance.FireProjectile(new FireProjectileInfo
				{
					projectilePrefab = PucciAssets.rockProjectilePrefab,
					position = val3,
					rotation = Util.QuaternionSafeLookRotation(normalized),
					owner = ((EntityState)this).gameObject,
					damage = 5f * ((BaseState)this).damageStat,
					force = 1500f,
					crit = ((BaseState)this).RollCrit(),
					damageTypeOverride = DamageTypeCombo.GenericSecondary
				});
				return;
			}
			int num = ((!Object.op_Implicit((Object)(object)component) || component.Stage < 2) ? 1 : 3);
			for (int i = 0; i < num; i++)
			{
				float num2 = ((num > 1) ? Mathf.Lerp(-8f, 8f, (float)i / ((float)num - 1f)) : 0f);
				ProjectileManager.instance.FireProjectile(new FireProjectileInfo
				{
					projectilePrefab = PucciAssets.discProjectilePrefab,
					position = val3,
					rotation = Util.QuaternionSafeLookRotation(Quaternion.AngleAxis(num2, Vector3.up) * normalized),
					owner = ((EntityState)this).gameObject,
					damage = 3f * ((BaseState)this).damageStat,
					force = 200f,
					crit = ((BaseState)this).RollCrit(),
					damageTypeOverride = DamageTypeCombo.GenericSecondary
				});
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)1;
		}
	}
	public class PucciDash : BaseSkillState
	{
		public static float duration = 0.45f;

		public static float initialSpeedCoefficient = 6.5f;

		public static float finalSpeedCoefficient = 2.5f;

		private Vector3 forwardDirection;

		private bool instant;

		private Vector3 dashStart;

		private Vector3 dashEnd;

		private StandUser standUser;

		private OverlapAttack attack;

		public override void OnEnter()
		{
			//IL_003b: 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_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//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_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b2: 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_01c3: 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_01d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01db: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0203: Unknown result type (might be due to invalid IL or missing references)
			//IL_0205: Unknown result type (might be due to invalid IL or missing references)
			//IL_020f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0214: Unknown result type (might be due to invalid IL or missing references)
			//IL_021e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0223: Unknown result type (might be due to invalid IL or missing references)
			//IL_0228: Unknown result type (might be due to invalid IL or missing references)
			//IL_022d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0238: Unknown result type (might be due to invalid IL or missing references)
			//IL_0249: Unknown result type (might be due to invalid IL or missing references)
			//IL_0255: Unknown result type (might be due to invalid IL or missing references)
			//IL_0256: Unknown result type (might be due to invalid IL or missing references)
			//IL_025b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0260: 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_026d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0277: Expected O, but got Unknown
			((BaseState)this).OnEnter();
			standUser = ((EntityState)this).GetComponent<StandUser>();
			if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)((EntityState)this).inputBank) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
			{
				Vector3 val = ((((EntityState)this).inputBank.moveVector == Vector3.zero) ? ((EntityState)this).characterDirection.forward : ((EntityState)this).inputBank.moveVector);
				forwardDirection = ((Vector3)(ref val)).normalized;
			}
			PucciEvolution component = ((EntityState)this).GetComponent<PucciEvolution>();
			instant = Object.op_Implicit((Object)(object)component) && component.Stage >= 2;
			if (instant)
			{
				InstantDash();
				return;
			}
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
			{
				((EntityState)this).characterMotor.velocity.y = 0f;
				((EntityState)this).characterMotor.velocity = forwardDirection * DashSpeed();
			}
			((EntityState)this).PlayAnimation("FullBody, Override", "Roll", "Roll.playbackRate", duration, 0f);
			Util.PlaySound("Play_Pucci_Dash", ((EntityState)this).gameObject);
			if (Object.op_Implicit((Object)(object)standUser))
			{
				standUser.UseStand(18f);
				standUser.BeginAction(forwardDirection, 2.2f, duration);
				standUser.PlayStandAnimation("Dash", 0.05f);
			}
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddTimedBuff(Buffs.HiddenInvincibility, 0.6f * duration);
			}
			if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)standUser) && Object.op_Implicit((Object)(object)standUser.hitBoxGroup))
			{
				attack = new OverlapAttack
				{
					attacker = ((EntityState)this).gameObject,
					inflictor = ((EntityState)this).gameObject,
					teamIndex = ((BaseState)this).GetTeam(),
					damage = 3.5f * ((BaseState)this).damageStat,
					procCoefficient = 1f,
					hitEffectPrefab = SharedEffects.punchHitImpactEffect,
					forceVector = forwardDirection * 1200f + Vector3.up * 300f,
					pushAwayForce = 0f,
					hitBoxGroup = standUser.hitBoxGroup,
					isCrit = ((BaseState)this).RollCrit(),
					damageType = DamageTypeCombo.GenericUtility,
					impactSound = PucciAssets.standPunchHitSoundEvents[2].index
				};
			}
		}

		private void InstantDash()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: 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_0066: 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_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0157: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_015e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_0168: 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_0183: Expected O, but got Unknown
			//IL_0188: 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_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_0199: 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_01b4: Expected O, but got Unknown
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: 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_00d1: 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_00e0: 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_01cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fc: Expected O, but got Unknown
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			if (((EntityState)this).isAuthority)
			{
				if (forwardDirection == Vector3.zero)
				{
					forwardDirection = ((EntityState)this).characterDirection.forward;
				}
				forwardDirection.y = 0f;
				((Vector3)(ref forwardDirection)).Normalize();
				dashStart = ((EntityState)this).characterBody.footPosition;
				float num = 24f;
				RaycastHit val = default(RaycastHit);
				if (Physics.SphereCast(((EntityState)this).characterBody.corePosition, 0.5f, forwardDirection, ref val, num, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)1))
				{
					num = Mathf.Max(0f, ((RaycastHit)(ref val)).distance - 1f);
				}
				dashEnd = dashStart + forwardDirection * num;
				TeleportHelper.TeleportBody(((EntityState)this).characterBody, dashEnd + Vector3.up * 0.1f, false);
				if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
				{
					((EntityState)this).characterDirection.forward = forwardDirection;
				}
				PucciWhiteFlash.Show(0.45f, 0.85f);
			}
			if (Object.op_Implicit((Object)(object)standUser))
			{
				standUser.UseStand(18f);
			}
			Util.PlaySound("Play_Pucci_MiHDash", ((EntityState)this).gameObject);
			if (Object.op_Implicit((Object)(object)PucciFX.heavenFlash))
			{
				EffectManager.SpawnEffect(PucciFX.heavenFlash, new EffectData
				{
					origin = dashStart + Vector3.up,
					scale = 1.6f
				}, false);
				EffectManager.SpawnEffect(PucciFX.heavenFlash, new EffectData
				{
					origin = dashEnd + Vector3.up,
					scale = 1.6f
				}, false);
			}
			if (Object.op_Implicit((Object)(object)PucciFX.heavenStreak))
			{
				EffectManager.SpawnEffect(PucciFX.heavenStreak, new EffectData
				{
					origin = dashEnd + Vector3.up,
					start = dashStart + Vector3.up
				}, false);
			}
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddTimedBuff(Buffs.HiddenInvincibility, 0.3f);
				Slash();
			}
		}

		private void Slash()
		{
			//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_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: 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_00be: 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_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: 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_00fc: 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_0106: 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_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0117: 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_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Expected O, but got Unknown
			//IL_016e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			HashSet<HealthComponent> hashSet = new HashSet<HealthComponent>();
			TeamIndex team = ((BaseState)this).GetTeam();
			Collider[] array = Physics.OverlapCapsule(dashStart + Vector3.up, dashEnd + Vector3.up, 3.5f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask), (QueryTriggerInteraction)2);
			for (int i = 0; i < array.Length; i++)
			{
				HurtBox component = ((Component)array[i]).GetComponent<HurtBox>();
				HealthComponent val = (Object.op_Implicit((Object)(object)component) ? component.healthComponent : null);
				if (Object.op_Implicit((Object)(object)val) && val.alive && hashSet.Add(val) && Object.op_Implicit((Object)(object)val.body) && FriendlyFireManager.ShouldDirectHitProceed(val, team))
				{
					for (int j = 0; j < 4; j++)
					{
						DamageInfo val2 = new DamageInfo
						{
							attacker = ((EntityState)this).gameObject,
							inflictor = ((EntityState)this).gameObject,
							damage = 2.2f * ((BaseState)this).damageStat,
							crit = ((BaseState)this).RollCrit(),
							position = val.body.corePosition,
							procCoefficient = 1f,
							damageType = DamageTypeCombo.GenericUtility,
							damageColorIndex = (DamageColorIndex)0
						};
						val.TakeDamage(val2);
						GlobalEventManager.instance.OnHitEnemy(val2, ((Component)val).gameObject);
						GlobalEventManager.instance.OnHitAll(val2, ((Component)v