Decompiled source of Broly v2.0.1

Dragon Ball Z/Broly.dll

Decompiled 9 months 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 DBZUtils;
using EntityStates;
using On.RoR2;
using R2API;
using R2API.Utils;
using RoR2;
using RoR2.Projectile;
using RoR2.Skills;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("Dragonyck")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Broly")]
[assembly: AssemblyTitle("Broly")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace Broly;

internal class Assets
{
	public static AssetBundle MainAssetBundle;

	public static void PopulateAssets()
	{
		if ((Object)(object)MainAssetBundle == (Object)null)
		{
			using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Broly.brolyassets");
			MainAssetBundle = AssetBundle.LoadFromStream(stream);
		}
		using Stream stream2 = Assembly.GetExecutingAssembly().GetManifestResourceStream("Broly.Broly.bnk");
		byte[] array = new byte[stream2.Length];
		stream2.Read(array, 0, array.Length);
		SoundBanks.Add(array);
	}
}
internal class BrolyRevive : MonoBehaviour
{
}
internal class Hook
{
	internal static void Hooks()
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage);
	}

	private static void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo)
	{
		//IL_0088: Unknown result type (might be due to invalid IL or missing references)
		//IL_008e: Unknown result type (might be due to invalid IL or missing references)
		if (damageInfo.damage >= self.combinedHealth && Object.op_Implicit((Object)(object)self.body) && Object.op_Implicit((Object)(object)((Component)self.body).GetComponent<BrolyRevive>()) && !self.body.HasBuff(Prefabs.deathRegen) && NetworkServer.active)
		{
			self.body.AddBuff(Prefabs.deathRegen);
			self.body.AddTimedBuff(Buffs.Immune, 4f);
			float num = self.fullHealth * 0.5f;
			self.Heal(num, default(ProcChainMask), true);
			EntityStateMachine val = EntityStateMachine.FindByCustomName(((Component)self.body).gameObject, "Body");
			if (Object.op_Implicit((Object)(object)val) && !(val.state is Special))
			{
				Special special = new Special();
				special.consumeKi = false;
				val.SetInterruptState((EntityState)(object)special, (InterruptPriority)6);
			}
		}
		orig.Invoke(self, damageInfo);
	}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("com.Dragonyck.Broly", "Broly", "2.0.1")]
[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
public class MainPlugin : BaseUnityPlugin
{
	public const string MODUID = "com.Dragonyck.Broly";

	public const string MODNAME = "Broly";

	public const string VERSION = "2.0.1";

	public const string SURVIVORNAME = "Broly (LSSJ)";

	public const string SURVIVORNAMEKEY = "BROLY";

	public const string SURVIVORNAME0 = "Broly";

	public const string SURVIVORNAMEKEY0 = "BROLY0";

	public const string SURVIVORNAME1 = "Broly (Wrath)";

	public const string SURVIVORNAMEKEY1 = "BROLY1";

	public const string SURVIVORNAME2 = "Broly (SSJ)";

	public const string SURVIVORNAMEKEY2 = "BROLY2";

	private static List<string> powerupBodyList = new List<string> { "BrolyBody", "Broly (Wrath)Body", "Broly (SSJ)Body", "Broly (LSSJ)Body" };

	private static float desiredSortPosition = 16f;

	private void Awake()
	{
		Assets.PopulateAssets();
		Prefabs.CreatePrefabs();
		CreateSurvivor();
		CreatePowerupSurvivor("brolyFury", "Broly (Wrath)", "BROLY1", 2f);
		CreatePowerupSurvivor("brolySSJ", "Broly (SSJ)", "BROLY2", 3f);
		CreatePowerupSurvivor("broly", "Broly (LSSJ)", "BROLY", 4f);
		RegisterStates();
		Hook.Hooks();
	}

	internal static void CreateSurvivor()
	{
		//IL_0044: 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_0192: 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_0225: Unknown result type (might be due to invalid IL or missing references)
		//IL_0242: 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_026a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0274: Expected O, but got Unknown
		//IL_0274: Expected O, but got Unknown
		//IL_028b: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_02aa: Expected O, but got Unknown
		//IL_02aa: Expected O, but got Unknown
		//IL_02c1: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e0: Expected O, but got Unknown
		//IL_02e0: Expected O, but got Unknown
		//IL_02f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_030c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0316: Expected O, but got Unknown
		//IL_0316: Expected O, but got Unknown
		//IL_032d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0342: Unknown result type (might be due to invalid IL or missing references)
		//IL_034c: Expected O, but got Unknown
		//IL_034c: Expected O, but got Unknown
		//IL_0363: Unknown result type (might be due to invalid IL or missing references)
		//IL_0378: Unknown result type (might be due to invalid IL or missing references)
		//IL_0382: Expected O, but got Unknown
		//IL_0382: Expected O, but got Unknown
		//IL_0399: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b8: Expected O, but got Unknown
		//IL_03b8: Expected O, but got Unknown
		//IL_03cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_03e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ee: Expected O, but got Unknown
		//IL_03ee: Expected O, but got Unknown
		//IL_0405: Unknown result type (might be due to invalid IL or missing references)
		//IL_041a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0424: Expected O, but got Unknown
		//IL_0424: Expected O, but got Unknown
		//IL_043b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0450: Unknown result type (might be due to invalid IL or missing references)
		//IL_045a: Expected O, but got Unknown
		//IL_045a: Expected O, but got Unknown
		//IL_0471: Unknown result type (might be due to invalid IL or missing references)
		//IL_0486: Unknown result type (might be due to invalid IL or missing references)
		//IL_0490: Expected O, but got Unknown
		//IL_0490: Expected O, but got Unknown
		//IL_04a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_04bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_04c6: Expected O, but got Unknown
		//IL_04c6: Expected O, but got Unknown
		//IL_04dd: Unknown result type (might be due to invalid IL or missing references)
		//IL_04f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_04fc: Expected O, but got Unknown
		//IL_04fc: Expected O, but got Unknown
		//IL_0513: Unknown result type (might be due to invalid IL or missing references)
		//IL_0528: Unknown result type (might be due to invalid IL or missing references)
		//IL_0532: Expected O, but got Unknown
		//IL_0532: Expected O, but got Unknown
		//IL_0549: Unknown result type (might be due to invalid IL or missing references)
		//IL_055b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0565: Expected O, but got Unknown
		//IL_0565: Expected O, but got Unknown
		//IL_057c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0591: Unknown result type (might be due to invalid IL or missing references)
		//IL_059b: Expected O, but got Unknown
		//IL_059b: Expected O, but got Unknown
		//IL_05a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_05a7: 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_05d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0674: Unknown result type (might be due to invalid IL or missing references)
		//IL_0679: Unknown result type (might be due to invalid IL or missing references)
		//IL_06a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_06c5: Unknown result type (might be due to invalid IL or missing references)
		GameObject val = Assets.MainAssetBundle.LoadAsset<GameObject>("brolyBase");
		SurvivorDef val2 = default(SurvivorDef);
		CharacterBody val3 = DBZSurvivors.SetupNewDBZSurvivor(val, "Broly", ref val2);
		((Object)val3).name = "BrolyBody";
		val3.baseNameToken = "BROLY0_NAME";
		val3.subtitleNameToken = "BROLY0_SUBTITLE";
		val3.bodyFlags = (BodyFlags)16;
		val3.rootMotionInMainState = false;
		val3.mainRootSpeed = 0f;
		val3.baseMaxHealth = 110f;
		val3.levelMaxHealth = 33f;
		val3.baseRegen = 1.5f;
		val3.levelRegen = 0.2f;
		val3.baseMaxShield = 0f;
		val3.levelMaxShield = 0f;
		val3.baseMoveSpeed = 7f;
		val3.levelMoveSpeed = 0f;
		val3.baseAcceleration = 110f;
		val3.baseJumpPower = 15f;
		val3.levelJumpPower = 0f;
		val3.baseDamage = 12f;
		val3.levelDamage = 2.4f;
		val3.baseAttackSpeed = 1f;
		val3.levelAttackSpeed = 0f;
		val3.baseCrit = 1f;
		val3.levelCrit = 0f;
		val3.baseArmor = 20f;
		val3.levelArmor = 0f;
		val3.baseJumpCount = 2;
		val3.sprintingSpeedMultiplier = 1.45f;
		val3.wasLucky = false;
		val3.hideCrosshair = false;
		val3.hullClassification = (HullClassification)0;
		val3.portraitIcon = (Texture)(object)Assets.MainAssetBundle.LoadAsset<Sprite>("portraitBase").texture;
		val3.isChampion = false;
		val3.currentVehicle = null;
		val3.skinIndex = 0u;
		val3.bodyColor = new Color(0.63922f, 0.72157f, 0.09804f);
		ConfigFile val4 = Utils.CreateConfig(val3);
		KiBehaviour component = ((Component)val3).GetComponent<KiBehaviour>();
		component.passiveRegen = true;
		component.hasPowerup = true;
		DBZSurvivorDef val5 = ScriptableObject.CreateInstance<DBZSurvivorDef>();
		val5.attackVO = Sounds.Play_DBZ_Broly_ATKGrunt;
		val5.bossEncounterVO = Sounds.Play_DBZ_Broly_FinalBossEncounter;
		val5.bossKillVO = Sounds.Play_DBZ_Broly_BossKill;
		val5.heavyHitVO = Sounds.Play_DBZ_Broly_HeavyDMGGrunt;
		val5.killVO = Sounds.Play_DBZ_Broly_Kill;
		val5.lightHitVO = Sounds.Play_DBZ_Broly_LightDMGGrunt;
		val5.skillVO = Sounds.Play_DBZ_Broly_Skill;
		val5.deathVO = Sounds.Play_DBZ_Broly_Death;
		val5.vfxColor = (VFXColor)(-1);
		val5.config = val4;
		val5.powerupBodyList = powerupBodyList;
		val5.memory = new PowerupMemory
		{
			spentKiCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Ki Spent", "Coefficient"), 0.0025f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			baseKillCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Base Kill", "Coefficient"), 1f, new ConfigDescription("FinalValue = xKillCoeff * baseKillCoefficient * powerupCount", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			regularKillCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Regular Enemy Kill", "Coefficient"), 0.01f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			eliteKillCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Elite Kill", "Coefficient"), 0.02f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			bossKillCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Boss Kill", "Coefficient"), 0.035f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			baseItemCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Base Item", "Coefficient"), 1f, new ConfigDescription("FinalValue = xItemCoeff * baseItemCoefficient * powerupCount", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			whiteItemCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: White Item", "Coefficient"), 0.001f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			greenItemCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Green Item", "Coefficient"), 0.002f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			bossItemCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Boss Item", "Coefficient"), 0.003f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			redItemCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Red Item", "Coefficient"), 0.0035f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			lunarItemMaxCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Lunar Item Max Coefficient", "Coefficient"), 0.004f, new ConfigDescription("Random chance between 0 and this value.", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			moddedTierItemCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Ki Spent", "Coefficient"), 0.0025f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			baseDamageDealtCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Damage Dealt", "Coefficient"), 5E-07f, new ConfigDescription("FinalValue = xDamageDealt * baseDamageCoefficient * powerupCount. Item procs count towards powerup gains.", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			baseDamageTakenCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Damage Taken", "Coefficient"), 5E-06f, new ConfigDescription("FinalValue = xDamageTaken * baseDamageCoefficient * powerupCount", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			requiredKillsForBonus = val4.Bind<int>(new ConfigDefinition("Powerup: Required Kills For Bonus Gain", "Kills"), 100, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			bonusBasedOnRequiredKills = val4.Bind<float>(new ConfigDefinition("Powerup: Bonus Based On Required Kills", "Bonus"), 0.0025f, new ConfigDescription("FinalValue = bonusBasedOnRequiredKills * powerupCount", (AcceptableValueBase)null, Array.Empty<object>())).Value
		};
		DBZSurvivorCatalog.AddDBZSurvivorDef(val3.baseNameToken, val5);
		EntityStateMachine component2 = ((Component)val3).GetComponent<EntityStateMachine>();
		component2.mainStateType = new SerializableEntityStateType(typeof(DBZCharacterMain));
		string text = "<style=cSub>\r\n\r\n< ! > " + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > " + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > " + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > ";
		string text2 = "..and so he left.";
		string text3 = "..and so he vanished.";
		LanguageAPI.Add("BROLY0_NAME", "Broly");
		LanguageAPI.Add("BROLY0_DESCRIPTION", text);
		LanguageAPI.Add("BROLY0_SUBTITLE", "Legendary Super Saiyan");
		LanguageAPI.Add("BROLY0_OUTRO", text2);
		LanguageAPI.Add("BROLY0_FAIL", text3);
		val2.primaryColor = val3.bodyColor;
		val2.desiredSortPosition = desiredSortPosition;
		GameObject val6 = Utils.CreateHitbox("Punch", val.transform, new Vector3(5.1f, 5.1f, 5.4f));
		val6.transform.localPosition = new Vector3(0f, 1.15f, 1f);
		SkillLocator component3 = ((Component)val3).GetComponent<SkillLocator>();
		AddPrimary(component3);
		AddSecondary(component3, "DBZ_POWEREDSHELL_SKILL_NAME", "DBZ_POWEREDSHELL_SKILL_DESCRIPTION", Prefabs.poweredShellIcon, typeof(QuickEventProjectileState));
		AddUtility(component3);
		AddSpecial(component3, "DBZ_SUPEREXPLOSIVEWAVE_NAME", "DBZ_SUPEREXPLOSIVEWAVE_DESCRIPTION", Prefabs.superexplosivewaveGREEN, typeof(ExplosiveWave));
	}

	internal static void CreatePowerupSurvivor(string modelName, string survivorName, string survivorNameKey, float statMultValue)
	{
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Expected O, but got Unknown
		//IL_0050: Expected O, but got Unknown
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b8: 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_0201: 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_02d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_02db: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_0303: Unknown result type (might be due to invalid IL or missing references)
		//IL_030d: Expected O, but got Unknown
		//IL_030d: Expected O, but got Unknown
		//IL_0324: Unknown result type (might be due to invalid IL or missing references)
		//IL_0339: Unknown result type (might be due to invalid IL or missing references)
		//IL_0343: Expected O, but got Unknown
		//IL_0343: Expected O, but got Unknown
		//IL_035a: Unknown result type (might be due to invalid IL or missing references)
		//IL_036f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0379: Expected O, but got Unknown
		//IL_0379: Expected O, but got Unknown
		//IL_0390: Unknown result type (might be due to invalid IL or missing references)
		//IL_03a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_03af: Expected O, but got Unknown
		//IL_03af: Expected O, but got Unknown
		//IL_03c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_03db: Unknown result type (might be due to invalid IL or missing references)
		//IL_03e5: Expected O, but got Unknown
		//IL_03e5: Expected O, but got Unknown
		//IL_03fc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0411: Unknown result type (might be due to invalid IL or missing references)
		//IL_041b: Expected O, but got Unknown
		//IL_041b: Expected O, but got Unknown
		//IL_0432: Unknown result type (might be due to invalid IL or missing references)
		//IL_0447: Unknown result type (might be due to invalid IL or missing references)
		//IL_0451: Expected O, but got Unknown
		//IL_0451: Expected O, but got Unknown
		//IL_0468: Unknown result type (might be due to invalid IL or missing references)
		//IL_047d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0487: Expected O, but got Unknown
		//IL_0487: Expected O, but got Unknown
		//IL_049e: Unknown result type (might be due to invalid IL or missing references)
		//IL_04b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_04bd: Expected O, but got Unknown
		//IL_04bd: Expected O, but got Unknown
		//IL_04d4: Unknown result type (might be due to invalid IL or missing references)
		//IL_04e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_04f3: Expected O, but got Unknown
		//IL_04f3: Expected O, but got Unknown
		//IL_050a: Unknown result type (might be due to invalid IL or missing references)
		//IL_051f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0529: Expected O, but got Unknown
		//IL_0529: Expected O, but got Unknown
		//IL_0540: Unknown result type (might be due to invalid IL or missing references)
		//IL_0555: Unknown result type (might be due to invalid IL or missing references)
		//IL_055f: Expected O, but got Unknown
		//IL_055f: Expected O, but got Unknown
		//IL_0576: Unknown result type (might be due to invalid IL or missing references)
		//IL_058b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0595: Expected O, but got Unknown
		//IL_0595: Expected O, but got Unknown
		//IL_05ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_05c1: Unknown result type (might be due to invalid IL or missing references)
		//IL_05cb: Expected O, but got Unknown
		//IL_05cb: Expected O, but got Unknown
		//IL_05e2: Unknown result type (might be due to invalid IL or missing references)
		//IL_05f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_05fe: Expected O, but got Unknown
		//IL_05fe: Expected O, but got Unknown
		//IL_0615: Unknown result type (might be due to invalid IL or missing references)
		//IL_062a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0634: Expected O, but got Unknown
		//IL_0634: Expected O, but got Unknown
		//IL_063e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0640: Unknown result type (might be due to invalid IL or missing references)
		//IL_06ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_0754: Unknown result type (might be due to invalid IL or missing references)
		//IL_075e: Unknown result type (might be due to invalid IL or missing references)
		//IL_077c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a71: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a76: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a9e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0aaf: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ab9: Expected O, but got Unknown
		//IL_0ab9: Expected O, but got Unknown
		//IL_0add: Unknown result type (might be due to invalid IL or missing references)
		//IL_0aff: Unknown result type (might be due to invalid IL or missing references)
		//IL_07ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_088d: Unknown result type (might be due to invalid IL or missing references)
		//IL_08a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_08b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_08bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_08c1: Unknown result type (might be due to invalid IL or missing references)
		GameObject val = Assets.MainAssetBundle.LoadAsset<GameObject>(modelName);
		SurvivorDef val2 = default(SurvivorDef);
		CharacterBody val3 = DBZSurvivors.SetupNewDBZSurvivor(val, survivorName, ref val2);
		((Component)val3).gameObject.AddComponent<DBZAimIndicator>();
		ConfigFile val4 = Utils.CreateConfig(val3);
		float value = val4.Bind<float>(new ConfigDefinition("Powerup: Stat Multiplier", "Multiplier"), statMultValue, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value;
		SkillLocator component = ((Component)val3).GetComponent<SkillLocator>();
		((Object)val3).name = survivorName + "Body";
		val3.baseNameToken = survivorNameKey + "_NAME";
		val3.subtitleNameToken = survivorNameKey + "_SUBTITLE";
		val3.bodyFlags = (BodyFlags)16;
		val3.rootMotionInMainState = false;
		val3.mainRootSpeed = 0f;
		val3.baseMaxHealth = 110f * value;
		val3.levelMaxHealth = 33f * value;
		val3.baseRegen = 1.5f * value;
		val3.levelRegen = 0.2f * value;
		val3.baseMaxShield = 0f;
		val3.levelMaxShield = 0f;
		val3.baseMoveSpeed = 7f;
		val3.levelMoveSpeed = 0f;
		val3.baseAcceleration = 110f;
		val3.baseJumpPower = 15f;
		val3.levelJumpPower = 0f;
		val3.baseDamage = 12f * value;
		val3.levelDamage = 2.4f * value;
		val3.baseAttackSpeed = 1f;
		val3.levelAttackSpeed = 0f;
		val3.baseCrit = 1f * value;
		val3.levelCrit = 0f;
		val3.baseArmor = 20f * value;
		val3.levelArmor = 0f;
		val3.baseJumpCount = 1;
		val3.sprintingSpeedMultiplier = 1.45f;
		val3.wasLucky = false;
		val3.hideCrosshair = false;
		val3.hullClassification = (HullClassification)0;
		val3.isChampion = false;
		val3.currentVehicle = null;
		val3.skinIndex = 0u;
		val3.bodyColor = new Color(0.63922f, 0.72157f, 0.09804f);
		val3.aimOriginTransform.localPosition = new Vector3(0f, 1f, 0f);
		KiBehaviour component2 = ((Component)val3).GetComponent<KiBehaviour>();
		component2.hasPowerup = true;
		component2.maxKiValue = 1f * value;
		component2.passiveRegenValue = 0.02f * value;
		component2.passiveRegen = true;
		EntityStateMachine component3 = ((Component)val3).GetComponent<EntityStateMachine>();
		component3.initialStateType = new SerializableEntityStateType(typeof(BasePowerupSpawnState));
		DBZSurvivorDef val5 = ScriptableObject.CreateInstance<DBZSurvivorDef>();
		val5.config = val4;
		val5.attackVO = Sounds.Play_DBZ_Broly_ATKGrunt;
		val5.bossEncounterVO = Sounds.Play_DBZ_Broly_FinalBossEncounter;
		val5.bossKillVO = Sounds.Play_DBZ_Broly_BossKill;
		val5.heavyHitVO = Sounds.Play_DBZ_Broly_HeavyDMGGrunt;
		val5.killVO = Sounds.Play_DBZ_Broly_Kill;
		val5.lightHitVO = Sounds.Play_DBZ_Broly_LightDMGGrunt;
		val5.skillVO = Sounds.Play_DBZ_Broly_Skill;
		val5.deathVO = Sounds.Play_DBZ_Broly_Death;
		val5.vfxColor = (VFXColor)2;
		val5.memory = new PowerupMemory
		{
			spentKiCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Ki Spent", "Coefficient"), 0.0025f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			baseKillCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Base Kill", "Coefficient"), 1f, new ConfigDescription("FinalValue = xKillCoeff * baseKillCoefficient * powerupCount", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			regularKillCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Regular Enemy Kill", "Coefficient"), 0.01f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			eliteKillCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Elite Kill", "Coefficient"), 0.02f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			bossKillCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Boss Kill", "Coefficient"), 0.035f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			baseItemCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Base Item", "Coefficient"), 1f, new ConfigDescription("FinalValue = xItemCoeff * baseItemCoefficient * powerupCount", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			whiteItemCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: White Item", "Coefficient"), 0.001f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			greenItemCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Green Item", "Coefficient"), 0.002f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			bossItemCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Boss Item", "Coefficient"), 0.003f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			redItemCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Red Item", "Coefficient"), 0.0035f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			lunarItemMaxCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Lunar Item Max Coefficient", "Coefficient"), 0.004f, new ConfigDescription("Random chance between 0 and this value.", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			moddedTierItemCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Ki Spent", "Coefficient"), 0.0025f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			baseDamageDealtCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Damage Dealt", "Coefficient"), 5E-07f, new ConfigDescription("FinalValue = xDamageDealt * baseDamageCoefficient * powerupCount. Item procs count towards powerup gains.", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			baseDamageTakenCoefficient = val4.Bind<float>(new ConfigDefinition("Powerup: Damage Taken", "Coefficient"), 5E-06f, new ConfigDescription("FinalValue = xDamageTaken * baseDamageCoefficient * powerupCount", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			requiredKillsForBonus = val4.Bind<int>(new ConfigDefinition("Powerup: Required Kills For Bonus Gain", "Kills"), 100, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())).Value,
			bonusBasedOnRequiredKills = val4.Bind<float>(new ConfigDefinition("Powerup: Bonus Based On Required Kills", "Bonus"), 0.0025f, new ConfigDescription("FinalValue = bonusBasedOnRequiredKills * powerupCount", (AcceptableValueBase)null, Array.Empty<object>())).Value
		};
		val5.powerupBodyList = powerupBodyList;
		switch (survivorName)
		{
		case "Broly (Wrath)":
			((Component)val3).GetComponent<ModelLocator>().modelBaseTransform.GetChild(0).localPosition = new Vector3(0f, 2.4f, 0f);
			val2.desiredSortPosition = desiredSortPosition + 0.1f;
			val3.portraitIcon = (Texture)(object)Assets.MainAssetBundle.LoadAsset<Sprite>("portraitWrath").texture;
			AddPrimary(component);
			AddSecondary(component, "DBZ_SUPEREXPLOSIVEWAVE_NAME", "DBZ_SUPEREXPLOSIVEWAVE_DESCRIPTION", Prefabs.superexplosivewaveGREEN, typeof(ExplosiveWave));
			AddUtility(component);
			AddSpecial(component, "DBZ_GIGANTICRAGE_SKILL_NAME", "DBZ_GIGANTICRAGE_SKILL_DESCRIPTION", Assets.MainAssetBundle.LoadAsset<Sprite>("giganticRage"), typeof(GiganticRageState), "Idle1");
			Utils.CreateHitbox("GiganticRage", val.transform, Vector3.one * 8f).transform.localPosition = new Vector3(0f, 1.5f, 2f);
			break;
		case "Broly (SSJ)":
			((Component)val3).GetComponent<ModelLocator>().modelBaseTransform.GetChild(0).localPosition = new Vector3(0f, 2.4f, 0f);
			LanguageAPI.Add("BROLY_KIBLASTS_NAME", "Spread Shot");
			LanguageAPI.Add("BROLY_KIBLASTS_DESCRIPTION", "Quickly fire ki blasts for <style=cIsDamage>180% damage</style>.");
			AddPrimary(component);
			AddSecondary(component, "BROLY_KIBLASTS_NAME", "BROLY_KIBLASTS_DESCRIPTION", Prefabs.lightgrenadeGREEN, typeof(KiBlasts), "Idle1");
			AddUtility(component);
			AddSpecial(component, "BROLY_M2", "BROLY_M2_DESCRIPTION", Assets.MainAssetBundle.LoadAsset<Sprite>("secondary"), typeof(Secondary));
			val2.desiredSortPosition = desiredSortPosition + 0.1f;
			val3.portraitIcon = (Texture)(object)Assets.MainAssetBundle.LoadAsset<Sprite>("portraitSSJ").texture;
			break;
		case "Broly (LSSJ)":
			((Component)val3).GetComponent<ModelLocator>().modelBaseTransform.GetChild(0).localPosition = new Vector3(0f, 2.4f, 0f);
			DBZSurvivors.survivorSceneProps.Add(val, new TransformMemory
			{
				position = new Vector3(1.2f, 1.157f, 11f)
			});
			val3.portraitIcon = (Texture)(object)Assets.MainAssetBundle.LoadAsset<Sprite>("portrait").texture;
			val2.desiredSortPosition = desiredSortPosition + 0.1f;
			((Component)val3).gameObject.AddComponent<BrolyRevive>();
			component2.hasPowerup = false;
			val5.powerupBodyList = null;
			LanguageAPI.Add("BROLY_PASSIVE_NAME", "Saiyan Power");
			LanguageAPI.Add("BROLY_PASSIVE_DESCRIPTION", "Once a stage, revive yourself after taking lethal damage <style=cIsHealing>restoring</style> <style=cIsHealth>50% Health</style> and perform Blast Meteor for no cost.");
			component.passiveSkill.enabled = true;
			component.passiveSkill.skillNameToken = "BROLY_PASSIVE_NAME";
			component.passiveSkill.skillDescriptionToken = "BROLY_PASSIVE_DESCRIPTION";
			component.passiveSkill.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("passive");
			AddPrimary(component);
			AddSecondaryLSSJ(component);
			AddUtility(component);
			AddSpecialsLSSJ(component);
			break;
		}
		DBZSurvivorCatalog.AddDBZSurvivorDef(val3.baseNameToken, val5);
		string text = "<style=cSub>\r\n\r\n< ! > " + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > " + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > " + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > " + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > Fill up your transformation bar by beating enemies, using skills, and playing the game in general.";
		string text2 = "..and so he left.";
		string text3 = "..and so he vanished.";
		LanguageAPI.Add(survivorNameKey + "_NAME", survivorName);
		LanguageAPI.Add(survivorNameKey + "_DESCRIPTION", text);
		LanguageAPI.Add(survivorNameKey + "_SUBTITLE", "Legendary Super Saiyan");
		LanguageAPI.Add(survivorNameKey + "_OUTRO", text2);
		LanguageAPI.Add(survivorNameKey + "_FAIL", text3);
		val2.primaryColor = val3.bodyColor;
		val2.displayPrefab = Utils.RemoveDither(val, survivorName + "Display");
		val2.hidden = val4.Bind<bool>(new ConfigDefinition("Hidden Survivor", "Hidden"), true, new ConfigDescription("Hide in Character Select", (AcceptableValueBase)null, Array.Empty<object>())).Value;
		GameObject val6 = Utils.CreateHitbox("Punch", val.transform, new Vector3(5.5f, 5.5f, 5.8f));
		val6.transform.localPosition = new Vector3(0f, 1.3f, 1f);
	}

	private void RegisterStates()
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		bool flag = default(bool);
		ContentAddition.AddEntityState<Secondary>(ref flag);
		ContentAddition.AddEntityState<SecondaryFire>(ref flag);
		ContentAddition.AddEntityState<Special>(ref flag);
		ContentAddition.AddEntityState<BaseSpecialAlt>(ref flag);
		ContentAddition.AddEntityState<SpecialAltFire>(ref flag);
		ContentAddition.AddEntityState<KiBlasts>(ref flag);
		ContentAddition.AddEntityState<ExplosiveWave>(ref flag);
		ContentAddition.AddEntityState<ExplosiveWaveFire>(ref flag);
	}

	private static void AddSecondary(SkillLocator skillLocator, string nameToken, string descToken, Sprite sprite, Type type, string stateMachine = "NoMovement")
	{
		//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_0045: 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_0104: Unknown result type (might be due to invalid IL or missing references)
		//IL_010e: Expected O, but got Unknown
		//IL_010f: 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)
		DBZSkillDef val = ScriptableObject.CreateInstance<DBZSkillDef>();
		((SkillDef)val).activationStateMachineName = stateMachine;
		((SkillDef)val).activationState = new SerializableEntityStateType(type);
		((SkillDef)val).baseMaxStock = 1;
		((SkillDef)val).baseRechargeInterval = 6f;
		((SkillDef)val).beginSkillCooldownOnSkillEnd = true;
		((SkillDef)val).canceledFromSprinting = false;
		((SkillDef)val).fullRestockOnAssign = true;
		((SkillDef)val).interruptPriority = (InterruptPriority)0;
		((SkillDef)val).isCombatSkill = true;
		((SkillDef)val).mustKeyPress = false;
		((SkillDef)val).cancelSprintingOnActivation = true;
		((SkillDef)val).rechargeStock = 1;
		((SkillDef)val).requiredStock = 1;
		((SkillDef)val).stockToConsume = 1;
		((SkillDef)val).icon = sprite;
		((SkillDef)val).skillDescriptionToken = descToken;
		((SkillDef)val).skillName = nameToken;
		((SkillDef)val).skillNameToken = nameToken;
		val.kiCost = 0.2f;
		ContentAddition.AddSkillDef((SkillDef)(object)val);
		skillLocator.secondary = ((Component)skillLocator).gameObject.AddComponent<GenericSkill>();
		SkillFamily val2 = ScriptableObject.CreateInstance<SkillFamily>();
		val2.variants = (Variant[])(object)new Variant[1];
		Reflection.SetFieldValue<SkillFamily>((object)skillLocator.secondary, "_skillFamily", val2);
		SkillFamily skillFamily = skillLocator.secondary.skillFamily;
		Variant[] variants = skillFamily.variants;
		Variant val3 = new Variant
		{
			skillDef = (SkillDef)(object)val
		};
		((Variant)(ref val3)).viewableNode = new Node(((SkillDef)val).skillNameToken, false, (Node)null);
		variants[0] = val3;
		ContentAddition.AddSkillFamily(skillFamily);
	}

	private static void AddSpecial(SkillLocator skillLocator, string nameToken, string descToken, Sprite sprite, Type type, string stateMachine = "NoMovement")
	{
		//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_0045: 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_0104: Unknown result type (might be due to invalid IL or missing references)
		//IL_010e: Expected O, but got Unknown
		//IL_010f: 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)
		DBZSkillDef val = ScriptableObject.CreateInstance<DBZSkillDef>();
		((SkillDef)val).activationStateMachineName = stateMachine;
		((SkillDef)val).activationState = new SerializableEntityStateType(type);
		((SkillDef)val).baseMaxStock = 1;
		((SkillDef)val).baseRechargeInterval = 12f;
		((SkillDef)val).beginSkillCooldownOnSkillEnd = true;
		((SkillDef)val).canceledFromSprinting = false;
		((SkillDef)val).fullRestockOnAssign = true;
		((SkillDef)val).interruptPriority = (InterruptPriority)0;
		((SkillDef)val).isCombatSkill = true;
		((SkillDef)val).mustKeyPress = false;
		((SkillDef)val).cancelSprintingOnActivation = true;
		((SkillDef)val).rechargeStock = 1;
		((SkillDef)val).requiredStock = 1;
		((SkillDef)val).stockToConsume = 1;
		((SkillDef)val).icon = sprite;
		((SkillDef)val).skillDescriptionToken = descToken;
		((SkillDef)val).skillName = nameToken;
		((SkillDef)val).skillNameToken = nameToken;
		val.kiCost = 0.55f;
		ContentAddition.AddSkillDef((SkillDef)(object)val);
		skillLocator.special = ((Component)skillLocator).gameObject.AddComponent<GenericSkill>();
		SkillFamily val2 = ScriptableObject.CreateInstance<SkillFamily>();
		val2.variants = (Variant[])(object)new Variant[1];
		Reflection.SetFieldValue<SkillFamily>((object)skillLocator.special, "_skillFamily", val2);
		SkillFamily skillFamily = skillLocator.special.skillFamily;
		Variant[] variants = skillFamily.variants;
		Variant val3 = new Variant
		{
			skillDef = (SkillDef)(object)val
		};
		((Variant)(ref val3)).viewableNode = new Node(((SkillDef)val).skillNameToken, false, (Node)null);
		variants[0] = val3;
		ContentAddition.AddSkillFamily(skillFamily);
	}

	private static void AddPrimary(SkillLocator skillLocator)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_0116: Unknown result type (might be due to invalid IL or missing references)
		//IL_012e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0138: Expected O, but got Unknown
		//IL_0139: 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)
		DBZSkillDef val = ScriptableObject.CreateInstance<DBZSkillDef>();
		LanguageAPI.Add("BROLY_M1", "Gigantic Fury");
		((SkillDef)val).activationStateMachineName = "Weapon";
		((SkillDef)val).activationState = new SerializableEntityStateType(typeof(DBZMeleeSkillState));
		((SkillDef)val).baseMaxStock = 0;
		((SkillDef)val).baseRechargeInterval = 0f;
		((SkillDef)val).beginSkillCooldownOnSkillEnd = true;
		((SkillDef)val).canceledFromSprinting = false;
		((SkillDef)val).fullRestockOnAssign = true;
		((SkillDef)val).interruptPriority = (InterruptPriority)0;
		((SkillDef)val).isCombatSkill = true;
		((SkillDef)val).mustKeyPress = false;
		((SkillDef)val).cancelSprintingOnActivation = true;
		((SkillDef)val).rechargeStock = 0;
		((SkillDef)val).requiredStock = 0;
		((SkillDef)val).stockToConsume = 0;
		((SkillDef)val).icon = Assets.MainAssetBundle.LoadAsset<Sprite>("primary");
		((SkillDef)val).skillDescriptionToken = "DBZ_MELEE_SKILL_DESCRIPTION";
		((SkillDef)val).skillName = "BROLY_M1";
		((SkillDef)val).skillNameToken = "BROLY_M1";
		ContentAddition.AddSkillDef((SkillDef)(object)val);
		skillLocator.primary = ((Component)skillLocator).gameObject.AddComponent<GenericSkill>();
		SkillFamily val2 = ScriptableObject.CreateInstance<SkillFamily>();
		val2.variants = (Variant[])(object)new Variant[1];
		Reflection.SetFieldValue<SkillFamily>((object)skillLocator.primary, "_skillFamily", val2);
		SkillFamily skillFamily = skillLocator.primary.skillFamily;
		Variant[] variants = skillFamily.variants;
		Variant val3 = new Variant
		{
			skillDef = (SkillDef)(object)val
		};
		((Variant)(ref val3)).viewableNode = new Node(((SkillDef)val).skillNameToken, false, (Node)null);
		variants[0] = val3;
		ContentAddition.AddSkillFamily(skillFamily);
	}

	private static void AddSecondaryLSSJ(SkillLocator skillLocator)
	{
		//IL_003d: 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_0070: Unknown result type (might be due to invalid IL or missing references)
		//IL_013d: 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_015f: Expected O, but got Unknown
		//IL_0160: Unknown result type (might be due to invalid IL or missing references)
		//IL_0161: Unknown result type (might be due to invalid IL or missing references)
		DBZSkillDef val = ScriptableObject.CreateInstance<DBZSkillDef>();
		LanguageAPI.Add("BROLY_M2", "Gigantic Roar");
		LanguageAPI.Add("BROLY_M2_DESCRIPTION", "Charge a energy sphere to fire a powerful energy beam for <style=cIsDamage>120%</style> damage per hit.");
		((SkillDef)val).activationStateMachineName = "NoMovement";
		((SkillDef)val).activationState = new SerializableEntityStateType(typeof(Secondary));
		((SkillDef)val).baseMaxStock = 1;
		((SkillDef)val).baseRechargeInterval = 6f;
		((SkillDef)val).beginSkillCooldownOnSkillEnd = true;
		((SkillDef)val).canceledFromSprinting = false;
		((SkillDef)val).fullRestockOnAssign = true;
		((SkillDef)val).interruptPriority = (InterruptPriority)0;
		((SkillDef)val).isCombatSkill = true;
		((SkillDef)val).mustKeyPress = false;
		((SkillDef)val).cancelSprintingOnActivation = true;
		((SkillDef)val).rechargeStock = 1;
		((SkillDef)val).requiredStock = 1;
		((SkillDef)val).stockToConsume = 1;
		((SkillDef)val).icon = Assets.MainAssetBundle.LoadAsset<Sprite>("secondary");
		((SkillDef)val).skillDescriptionToken = "BROLY_M2_DESCRIPTION";
		((SkillDef)val).skillName = "BROLY_M2";
		((SkillDef)val).skillNameToken = "BROLY_M2";
		val.kiCost = 0.2f;
		((SkillDef)val).keywordTokens = val.newKeywordTokens;
		ContentAddition.AddSkillDef((SkillDef)(object)val);
		skillLocator.secondary = ((Component)skillLocator).gameObject.AddComponent<GenericSkill>();
		SkillFamily val2 = ScriptableObject.CreateInstance<SkillFamily>();
		val2.variants = (Variant[])(object)new Variant[1];
		Reflection.SetFieldValue<SkillFamily>((object)skillLocator.secondary, "_skillFamily", val2);
		SkillFamily skillFamily = skillLocator.secondary.skillFamily;
		Variant[] variants = skillFamily.variants;
		Variant val3 = new Variant
		{
			skillDef = (SkillDef)(object)val
		};
		((Variant)(ref val3)).viewableNode = new Node(((SkillDef)val).skillNameToken, false, (Node)null);
		variants[0] = val3;
		ContentAddition.AddSkillFamily(skillFamily);
	}

	private static void AddUtility(SkillLocator skillLocator)
	{
		//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_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_010d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0125: Unknown result type (might be due to invalid IL or missing references)
		//IL_012f: Expected O, but got Unknown
		//IL_0130: 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)
		DBZSkillDef val = ScriptableObject.CreateInstance<DBZSkillDef>();
		((SkillDef)val).activationStateMachineName = "NoMovement";
		((SkillDef)val).activationState = new SerializableEntityStateType(typeof(BaseKiState));
		((SkillDef)val).baseMaxStock = 0;
		((SkillDef)val).baseRechargeInterval = 0f;
		((SkillDef)val).beginSkillCooldownOnSkillEnd = true;
		((SkillDef)val).canceledFromSprinting = false;
		((SkillDef)val).fullRestockOnAssign = true;
		((SkillDef)val).interruptPriority = (InterruptPriority)0;
		((SkillDef)val).isCombatSkill = true;
		((SkillDef)val).mustKeyPress = false;
		((SkillDef)val).cancelSprintingOnActivation = true;
		((SkillDef)val).rechargeStock = 0;
		((SkillDef)val).requiredStock = 0;
		((SkillDef)val).stockToConsume = 0;
		((SkillDef)val).icon = Assets.MainAssetBundle.LoadAsset<Sprite>("utility");
		((SkillDef)val).skillDescriptionToken = "DBZ_KICHARGE_DESCRIPTION";
		((SkillDef)val).skillName = "DBZ_KICHARGE_NAME";
		((SkillDef)val).skillNameToken = "DBZ_KICHARGE_NAME";
		val.isKiCharge = true;
		ContentAddition.AddSkillDef((SkillDef)(object)val);
		skillLocator.utility = ((Component)skillLocator).gameObject.AddComponent<GenericSkill>();
		SkillFamily val2 = ScriptableObject.CreateInstance<SkillFamily>();
		val2.variants = (Variant[])(object)new Variant[1];
		Reflection.SetFieldValue<SkillFamily>((object)skillLocator.utility, "_skillFamily", val2);
		SkillFamily skillFamily = skillLocator.utility.skillFamily;
		Variant[] variants = skillFamily.variants;
		Variant val3 = new Variant
		{
			skillDef = (SkillDef)(object)val
		};
		((Variant)(ref val3)).viewableNode = new Node(((SkillDef)val).skillNameToken, false, (Node)null);
		variants[0] = val3;
		ContentAddition.AddSkillFamily(skillFamily);
	}

	private static void AddSpecialsLSSJ(SkillLocator skillLocator)
	{
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: 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_0145: 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_0167: Expected O, but got Unknown
		//IL_0168: 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_01b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_02cd: Expected O, but got Unknown
		//IL_02ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d0: Unknown result type (might be due to invalid IL or missing references)
		SkillDef val = null;
		SkillDef val2 = null;
		LanguageAPI.Add("BROLY_SPEC", "Blast Meteor");
		LanguageAPI.Add("BROLY_SPEC_DESCRIPTION", "Surround yourself in a powerful energy orb that blocks projectiles and shoots homing ki blasts in all directions for <style=cIsDamage>200%</style> damage each.");
		DBZSkillDef val3 = ScriptableObject.CreateInstance<DBZSkillDef>();
		((SkillDef)val3).activationStateMachineName = "NoMovement";
		((SkillDef)val3).activationState = new SerializableEntityStateType(typeof(Special));
		((SkillDef)val3).baseMaxStock = 1;
		((SkillDef)val3).baseRechargeInterval = 12f;
		((SkillDef)val3).beginSkillCooldownOnSkillEnd = true;
		((SkillDef)val3).canceledFromSprinting = false;
		((SkillDef)val3).fullRestockOnAssign = true;
		((SkillDef)val3).interruptPriority = (InterruptPriority)0;
		((SkillDef)val3).isCombatSkill = true;
		((SkillDef)val3).mustKeyPress = false;
		((SkillDef)val3).cancelSprintingOnActivation = true;
		((SkillDef)val3).rechargeStock = 1;
		((SkillDef)val3).requiredStock = 1;
		((SkillDef)val3).stockToConsume = 1;
		((SkillDef)val3).icon = Assets.MainAssetBundle.LoadAsset<Sprite>("special");
		((SkillDef)val3).skillDescriptionToken = "BROLY_SPEC_DESCRIPTION";
		((SkillDef)val3).skillName = "BROLY_SPEC";
		((SkillDef)val3).skillNameToken = "BROLY_SPEC";
		val3.kiCost = 0.55f;
		((SkillDef)val3).keywordTokens = val3.newKeywordTokens;
		val = (SkillDef)(object)val3;
		ContentAddition.AddSkillDef((SkillDef)(object)val3);
		skillLocator.special = ((Component)skillLocator).gameObject.AddComponent<GenericSkill>();
		SkillFamily val4 = ScriptableObject.CreateInstance<SkillFamily>();
		val4.variants = (Variant[])(object)new Variant[1];
		Reflection.SetFieldValue<SkillFamily>((object)skillLocator.special, "_skillFamily", val4);
		SkillFamily skillFamily = skillLocator.special.skillFamily;
		Variant[] variants = skillFamily.variants;
		Variant val5 = new Variant
		{
			skillDef = (SkillDef)(object)val3
		};
		((Variant)(ref val5)).viewableNode = new Node(((SkillDef)val3).skillNameToken, false, (Node)null);
		variants[0] = val5;
		ContentAddition.AddSkillFamily(skillFamily);
		LanguageAPI.Add("BROLY_ALTSPEC", "Gigantic Catastrophe");
		LanguageAPI.Add("BROLY_ALTSPEC_DESCRIPTION", "Fire a powerful energy beam for <style=cIsDamage>180%</style> damage per hit and homing ki blasts forward for <style=cIsDamage>200%</style> damage each.");
		val3 = ScriptableObject.CreateInstance<DBZSkillDef>();
		((SkillDef)val3).activationStateMachineName = "NoMovement";
		((SkillDef)val3).activationState = new SerializableEntityStateType(typeof(BaseSpecialAlt));
		((SkillDef)val3).baseMaxStock = 1;
		((SkillDef)val3).baseRechargeInterval = 12f;
		((SkillDef)val3).beginSkillCooldownOnSkillEnd = true;
		((SkillDef)val3).canceledFromSprinting = false;
		((SkillDef)val3).fullRestockOnAssign = true;
		((SkillDef)val3).interruptPriority = (InterruptPriority)0;
		((SkillDef)val3).isCombatSkill = true;
		((SkillDef)val3).mustKeyPress = false;
		((SkillDef)val3).cancelSprintingOnActivation = true;
		((SkillDef)val3).rechargeStock = 1;
		((SkillDef)val3).requiredStock = 1;
		((SkillDef)val3).stockToConsume = 1;
		((SkillDef)val3).icon = Assets.MainAssetBundle.LoadAsset<Sprite>("specialalt");
		((SkillDef)val3).skillDescriptionToken = "BROLY_ALTSPEC_DESCRIPTION";
		((SkillDef)val3).skillName = "BROLY_ALTSPEC";
		((SkillDef)val3).skillNameToken = "BROLY_ALTSPEC";
		val3.kiCost = 0.55f;
		((SkillDef)val3).keywordTokens = val3.newKeywordTokens;
		val2 = (SkillDef)(object)val3;
		ContentAddition.AddSkillDef((SkillDef)(object)val3);
		GenericSkill val6 = ((Component)skillLocator).gameObject.AddComponent<GenericSkill>();
		val4 = ScriptableObject.CreateInstance<SkillFamily>();
		val4.variants = (Variant[])(object)new Variant[1];
		Reflection.SetFieldValue<SkillFamily>((object)val6, "_skillFamily", val4);
		skillFamily = val6.skillFamily;
		Variant[] variants2 = skillFamily.variants;
		val5 = new Variant
		{
			skillDef = (SkillDef)(object)val3
		};
		((Variant)(ref val5)).viewableNode = new Node(((SkillDef)val3).skillNameToken, false, (Node)null);
		variants2[0] = val5;
		ContentAddition.AddSkillFamily(skillFamily);
		SkillSwitchBehaviour val7 = ((Component)skillLocator).gameObject.AddComponent<SkillSwitchBehaviour>();
		val7.specialSkillDefList = new List<SkillDef> { val, val2 };
	}
}
internal class Prefabs
{
	internal static GameObject meteorProjectile;

	internal static GameObject meteorProjectileGhost;

	internal static GameObject meteorProjectileImpactEffect;

	internal static BuffDef deathRegen { get; set; }

	internal static void CreatePrefabs()
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_0075: Unknown result type (might be due to invalid IL or missing references)
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_00e0: 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)
		deathRegen = ScriptableObject.CreateInstance<BuffDef>();
		((Object)deathRegen).name = "e";
		deathRegen.iconSprite = null;
		deathRegen.buffColor = Color.white;
		deathRegen.canStack = false;
		deathRegen.isDebuff = false;
		deathRegen.eliteDef = null;
		deathRegen.isHidden = true;
		ContentAddition.AddBuffDef(deathRegen);
		meteorProjectileImpactEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/GreaterWisp/OmniExplosionVFXGreaterWisp.prefab").WaitForCompletion(), "BrolyBlasterMeteorProjectileImpactEffect", false);
		meteorProjectileImpactEffect.AddComponent<ChanceSound>();
		Utils.RegisterEffect(meteorProjectileImpactEffect, 2f, "", true, true);
		meteorProjectileGhost = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ElectricWorm/ElectricWormSeekerGhost.prefab").WaitForCompletion(), "BrolyBlasterMeteorProjectileGhost", false);
		meteorProjectileGhost.GetComponentInChildren<TrailRenderer>().startColor = Color.green;
		GameObject val = LegacyResourcesAPI.Load<GameObject>("prefabs/projectileghosts/lunarneedleghost");
		meteorProjectile = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ElectricWorm/ElectricWormSeekerProjectile.prefab").WaitForCompletion(), "BrolyBlasterMeteorProjectile", true);
		meteorProjectile.GetComponent<ProjectileController>().ghostPrefab = meteorProjectileGhost;
		((ProjectileExplosion)meteorProjectile.GetComponent<ProjectileImpactExplosion>()).explosionEffect = meteorProjectileImpactEffect;
		meteorProjectile.GetComponent<ProjectileImpactExplosion>().impactEffect = meteorProjectileImpactEffect;
		((AkTriggerHandler)meteorProjectile.GetComponent<AkEvent>()).triggerList[0] = (int)Sounds.Play_DBZ_Broly_BM_PROJ_FIRE;
		ProjectileSteerTowardTarget component = meteorProjectile.GetComponent<ProjectileSteerTowardTarget>();
		((Behaviour)component).enabled = true;
		component.rotationSpeed = 90f;
		ProjectileDirectionalTargetFinder component2 = meteorProjectile.GetComponent<ProjectileDirectionalTargetFinder>();
		((Behaviour)component2).enabled = true;
		component2.lookRange = 30f;
		component2.lookCone = 60f;
		component2.targetSearchInterval = 0.1f;
		component2.searchTimer = 1f;
		meteorProjectile.AddComponent<MoveTowardsTarget>();
		ContentAddition.AddProjectile(meteorProjectile);
	}
}
internal class ChanceSound : MonoBehaviour
{
	private void Start()
	{
		int num = Random.Range(0, 101);
		if (num <= 10)
		{
			AkSoundEngine.PostEvent(Sounds.Play_DBZ_Broly_BM_PROJ_HIT, ((Component)this).gameObject);
		}
	}
}
internal class ExplosiveWave : AnimEventBeam
{
	public override void OnEnter()
	{
		((AnimEventBeam)this).OnEnter();
		base.chargeEffectPrefab = Prefabs.superExplosiveWaveChargeEffectGREEN;
	}

	protected override void SetNextState()
	{
		((EntityState)this).outer.SetNextState((EntityState)(object)new ExplosiveWaveFire());
	}
}
internal class ExplosiveWaveFire : AnimEventBeamFire
{
	protected override void SetBeamVFX()
	{
		((BeamFire)this).beamVFX = Prefabs.superExplosiveBeamEffectGREEN;
	}
}
internal class KiBlasts : BaseSequencedKiBlastState
{
	public float speed = 0.4f;

	public override void OnEnter()
	{
		base.baseKiCost = 1f;
		base.baseDamageCoefficient = 1.8f;
		base.projectilePrefab = Prefabs.kiBlastProjectileGreenNoTarget;
		base.muzzleFlashPrefab = Prefabs.KiBlastMuzzleFlashGreen;
		base.maxAttacks = 8;
		((BaseSequencedKiBlastState)this).OnEnter();
		if (base.attackCount == 1 && NetworkServer.active)
		{
			((EntityState)this).characterBody.AddBuff(Prefabs.speedX2Buff);
		}
	}

	protected override void PlayVO()
	{
		((BaseSequencedKiBlastState)this).PlayVO();
		((EntityState)this).PlayAnimation("FullBody, Override", "KiBlast");
	}

	protected override void PlayAnimation()
	{
	}

	protected override BaseDBZSkillState State()
	{
		KiBlasts kiBlasts = new KiBlasts();
		((BaseSequencedKiBlastState)kiBlasts).attackCount = base.attackCount + 1;
		return (BaseDBZSkillState)(object)kiBlasts;
	}

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

	public override void OnExit()
	{
		if (base.attackCount == base.maxAttacks && NetworkServer.active)
		{
			((EntityState)this).characterBody.RemoveBuff(Prefabs.speedX2Buff);
		}
		if (base.attackCount == base.maxAttacks)
		{
			((BaseDBZSkillState)this).animator.SetTrigger("trigger");
		}
		((BaseSequencedKiBlastState)this).OnExit();
	}
}
internal class Secondary : BeamBaseState
{
	public override void OnEnter()
	{
		base.duration = 99f;
		base.chargeSFX = Sounds.Play_DBZ_Broly_GR_START;
		((BeamBaseState)this).OnEnter();
	}

	public override void FixedUpdate()
	{
		((BeamBaseState)this).FixedUpdate();
		if (((EntityState)this).fixedAge >= 1.5f && ((EntityState)this).isAuthority)
		{
			((EntityState)this).outer.SetNextState((EntityState)(object)new SecondaryFire());
		}
	}

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

	public override InterruptPriority GetMinimumInterruptPriority()
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		return (InterruptPriority)1;
	}
}
internal class SecondaryFire : BeamFire
{
	public override void OnEnter()
	{
		base.beamSFX = Sounds.Play_DBZ_Broly_GR_FIRE;
		((BeamFire)this).OnEnter();
	}
}
internal class Special : BaseDBZSkillState
{
	private float duration = 4f;

	public GameObject shieldInstance;

	private float stopwatch;

	private int projectileCount = 3;

	private AimRequest request;

	public bool consumeKi = true;

	public override void OnEnter()
	{
		//IL_00ec: 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_0111: Unknown result type (might be due to invalid IL or missing references)
		//IL_0116: Unknown result type (might be due to invalid IL or missing references)
		//IL_0135: Unknown result type (might be due to invalid IL or missing references)
		((BaseDBZSkillState)this).OnEnter();
		if (Object.op_Implicit((Object)(object)base.skillBehaviour) && Object.op_Implicit((Object)(object)base.kiBehaviour))
		{
			base.skillBehaviour.SetExecutableSkills(3);
		}
		if (Object.op_Implicit((Object)(object)((EntityState)this).cameraTargetParams))
		{
			request = ((EntityState)this).cameraTargetParams.RequestAimType((AimType)2);
		}
		((EntityState)this).PlayAnimation("FullBody, Override", "Blaster_Meteor", "Special", duration);
		AkSoundEngine.PostEvent(Sounds.Play_DBZ_Broly_Skill, ((EntityState)this).gameObject);
		AkSoundEngine.PostEvent(Sounds.Play_DBZ_Broly_BM_START, ((EntityState)this).gameObject);
		AkSoundEngine.PostEvent(Sounds.Play_DBZ_Broly_BM_Fire, ((EntityState)this).gameObject);
		EffectManager.SimpleMuzzleFlash(Prefabs.orbFXGreen, ((EntityState)this).gameObject, "collider", false);
		shieldInstance = GameObject.CreatePrimitive((PrimitiveType)0);
		shieldInstance.layer = LayerIndex.projectile.intVal;
		shieldInstance.transform.localScale = Vector3.one * 12f;
		shieldInstance.GetComponent<Renderer>().material = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/GameModes/InfiniteTowerRun/InfiniteTowerAssets/matDistantPlanetShieldBackdrop.mat").WaitForCompletion();
		shieldInstance.transform.position = ((EntityState)this).transform.position;
	}

	public override void FixedUpdate()
	{
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		((EntityState)this).FixedUpdate();
		if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
		{
			((EntityState)this).characterMotor.velocity = Vector3.zero * -20f;
		}
		stopwatch += Time.fixedDeltaTime;
		if (stopwatch >= 0.05f)
		{
			stopwatch = 0f;
			int num = Random.Range(0, 101);
			if (num <= 10)
			{
				AkSoundEngine.PostEvent(Sounds.Play_DBZ_Broly_BM_PROJ_FIRE, ((EntityState)this).gameObject);
			}
			if (((EntityState)this).isAuthority)
			{
				Fire();
			}
		}
		if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
		{
			((EntityState)this).outer.SetNextStateToMain();
		}
	}

	private void Fire()
	{
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: 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_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: 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)
		for (int i = 0; i < projectileCount; i++)
		{
			Vector3 val = Quaternion.AngleAxis((float)RoR2Application.rng.RangeInt(0, 360), Vector3.up) * Vector3.one;
			if (((EntityState)this).isAuthority)
			{
				ProjectileManager.instance.FireProjectile(Prefabs.meteorProjectile, ((EntityState)this).characterBody.corePosition, Util.QuaternionSafeLookRotation(val), ((EntityState)this).gameObject, ((EntityState)this).characterBody.damage * 2f, 200f, Util.CheckRoll(((EntityState)this).characterBody.crit, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, -1f);
			}
		}
	}

	public override void OnExit()
	{
		((EntityState)this).OnExit();
		if (Object.op_Implicit((Object)(object)base.skillBehaviour))
		{
			base.skillBehaviour.SetExecutableSkills(-1);
		}
		if (Object.op_Implicit((Object)(object)shieldInstance))
		{
			EntityState.Destroy((Object)(object)shieldInstance);
		}
		if (Object.op_Implicit((Object)(object)((EntityState)this).cameraTargetParams))
		{
			request.Dispose();
		}
	}

	public override InterruptPriority GetMinimumInterruptPriority()
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		return (InterruptPriority)1;
	}
}
internal class BaseSpecialAlt : Secondary
{
	public override void OnEnter()
	{
		if (Object.op_Implicit((Object)(object)((BaseDBZSkillState)this).skillBehaviour))
		{
			((BeamBaseState)this).baseKiCost = ((BaseDBZSkillState)this).skillBehaviour.baseSpecialCost;
		}
		((BeamBaseState)this).chargeSFX = Sounds.Play_DBZ_Broly_GR_START;
		((BeamBaseState)this).skillIndex = 3;
		base.OnEnter();
	}

	public override void FixedUpdate()
	{
		base.FixedUpdate();
		if (((EntityState)this).fixedAge >= 1.4f && ((EntityState)this).isAuthority)
		{
			((EntityState)this).outer.SetNextState((EntityState)(object)new SpecialAltFire());
		}
	}
}
internal class SpecialAltFire : BeamFire
{
	private float stopwatch;

	private float bulletDelay = 0.4f;

	private int projectileCount = 1;

	public override void OnEnter()
	{
		base.beamSFX = Sounds.Play_DBZ_Broly_GR_FIRE;
		((BeamFire)this).OnEnter();
	}

	public override void FixedUpdate()
	{
		//IL_0035: 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_003a: 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_007b: Unknown result type (might be due to invalid IL or missing references)
		//IL_008f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0094: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_00af: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cc: 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_00d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00de: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e3: 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_00f8: Unknown result type (might be due to invalid IL or missing references)
		((BeamFire)this).FixedUpdate();
		stopwatch += Time.fixedDeltaTime;
		Ray val = (Object.op_Implicit((Object)(object)((BaseDBZSkillState)this).skillBehaviour) ? ((BaseDBZSkillState)this).skillBehaviour.aimRay : ((BaseState)this).GetAimRay());
		if (!(stopwatch >= bulletDelay) || !((EntityState)this).isAuthority)
		{
			return;
		}
		for (int i = 0; i < projectileCount; i++)
		{
			if (((EntityState)this).isAuthority)
			{
				Vector3 direction = ((Ray)(ref val)).direction;
				Vector3 val2 = Vector3.up * Random.Range(0f, 1.5f);
				Vector3 val3 = Vector3.left * Random.Range(0f, 1f);
				Vector3 val4 = Vector3.right * Random.Range(0f, 1f);
				direction = direction + val2 + val3 + val4;
				ProjectileManager.instance.FireProjectile(Prefabs.meteorProjectile, ((Ray)(ref val)).origin, Util.QuaternionSafeLookRotation(direction), ((EntityState)this).gameObject, ((EntityState)this).characterBody.damage * 2f, 200f, Util.CheckRoll(((EntityState)this).characterBody.crit, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, -1f);
			}
		}
		int num = RoR2Application.rng.RangeInt(0, 101);
		if (num <= 10)
		{
			AkSoundEngine.PostEvent(Sounds.Play_DBZ_Broly_BM_PROJ_FIRE, ((EntityState)this).gameObject);
		}
	}
}
internal class Sounds
{
	public static readonly uint Play_DBZ_Broly_BM_PROJ_FIRE = 138774938u;

	public static readonly uint Play_DBZ_Broly_Skill = 719813295u;

	public static readonly uint Play_DBZ_Broly_Kill = 849892544u;

	public static readonly uint Play_DBZ_Broly_HeavyDMGGrunt = 900023071u;

	public static readonly uint Play_DBZ_Broly_GR_START = 994274522u;

	public static readonly uint Play_DBZ_Broly_Death = 1131012950u;

	public static readonly uint Play_DBZ_Broly_LightDMGGrunt = 1316871422u;

	public static readonly uint Play_DBZ_Broly_BM_PROJ_HIT = 1628223241u;

	public static readonly uint Play_DBZ_Broly_BM_Fire = 1649943162u;

	public static readonly uint Play_DBZ_Broly_ATKGrunt = 1678111780u;

	public static readonly uint Play_DBZ_Broly_Powerup = 2410957748u;

	public static readonly uint Play_DBZ_Broly_GR_FIRE = 2582106326u;

	public static readonly uint Play_DBZ_Broly_BossKill = 2993290007u;

	public static readonly uint Play_DBZ_Broly_Intro = 3306289462u;

	public static readonly uint Play_DBZ_Broly_Passive = 3399426583u;

	public static readonly uint Play_DBZ_Broly_FinalBossEncounter = 3474272650u;

	public static readonly uint Play_DBZ_Broly_BM_START = 3940999334u;
}