using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using Chaos.AnimatorExtensions; using LegendAPI; using SillySkills.States; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("SillySkills")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("SillySkills")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("d6a94779-cf08-4cfb-976b-ac9eb4f27402")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] internal static class Log { internal static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } internal class TestValueManager : MonoBehaviour { private float _tim; private float _holdTime = 0.4f; public static float value1 = 2f; public static float value2 = 5f; public static float value3 = 0.7f; public static float value4 = 0.1f; public static float value5 = 0.25f; public static float value6 = 0.15f; public static bool testingEnabled => false; private void Update() { if (testingEnabled && Input.GetKey((KeyCode)308)) { manageTestValue(ref value1, "funny", (KeyCode)263, (KeyCode)260, 0.01f); manageTestValue(ref value2, "max dist knockback", (KeyCode)264, (KeyCode)261, 0.01f); } } private void manageTestValue(ref float value, string valueName, KeyCode upKey, KeyCode downKey, float incrementAmount) { //IL_0001: 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_0036: 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_00a6: 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_00ae: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKeyDown(upKey)) { value = setTestValue(value + incrementAmount, valueName); } if (Input.GetKeyDown(downKey)) { value = setTestValue(value - incrementAmount, valueName); } if (Input.GetKey(upKey) || Input.GetKey(downKey)) { float num = incrementAmount * (float)(Input.GetKey(upKey) ? 1 : (-1)); _tim += Time.deltaTime; if (_tim > _holdTime) { _tim = _holdTime - 0.02f; value = setTestValue(value + num, valueName); } } if (Input.GetKeyUp(upKey) || Input.GetKeyUp(downKey)) { _tim = 0f; } } private float setTestValue(float value, string print) { Log.Warning(print + ": " + value.ToString("0.000")); return value; } } namespace SillySkills { public class Assets { public static PluginInfo pluginInfo; public static AssetBundle funnyBundle; public static AssetBundle unfunnyBundle; public static GameObject FloorSpikeSmall; public static GameObject FloorSpikeLarge; internal static string assemblyDir => Path.GetDirectoryName(pluginInfo.Location); internal static void Init(PluginInfo info) { pluginInfo = info; funnyBundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(pluginInfo.Location), Path.Combine("Assets", "skillsbundle"))); unfunnyBundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(pluginInfo.Location), Path.Combine("Assets", "skillsunfunny"))); } internal static void LateInit() { FloorSpikeSmall = funnyBundle.LoadAsset("FloorSpikeSmall"); SetupFloorSpikeIn2023(FloorSpikeSmall, "Small"); FloorSpikeLarge = funnyBundle.LoadAsset("FloorSpikeLarge"); SetupFloorSpikeIn2023(FloorSpikeLarge, "Large"); } private static void SetupFloorSpikeIn2023(GameObject spikeObject, string bigorsmall) { FloorSpike component = spikeObject.GetComponent(); component.spikeRendererRenderer = ((Component)spikeObject.transform.GetChild(0).GetChild(0)).gameObject.AddComponent(); ((Renderer)component.spikeRendererRenderer).sortingLayerName = "Actor"; Material material = ChaosBundle.Get("Assets/materials/basic/Sprite-Diffuse.mat"); ((Renderer)component.spikeRendererRenderer).material = material; component.TopSprite = unfunnyBundle.LoadAsset("Floorspike" + bigorsmall + "Top"); component.SideSprite = unfunnyBundle.LoadAsset("Floorspike" + bigorsmall + "Side"); component.BottomSprite = unfunnyBundle.LoadAsset("Floorspike" + bigorsmall + "Bottom"); } internal static string GetFilePathFromPlugin(string folderName, string fileName) { return Path.Combine(assemblyDir, Path.Combine(folderName, fileName)); } public static T LoadJsonFromFile(string json) { string filePathFromPlugin = GetFilePathFromPlugin("Assets", json); string text; using (StreamReader streamReader = new StreamReader(filePathFromPlugin)) { text = streamReader.ReadToEnd(); } return JsonUtility.FromJson(text); } public static T LoadJsonFromEmbedded(string json) { Assembly executingAssembly = Assembly.GetExecutingAssembly(); string name = "SkillsButEpic.Assets." + json; string text; using (Stream stream = executingAssembly.GetManifestResourceStream(name)) { using StreamReader streamReader = new StreamReader(stream); text = streamReader.ReadToEnd(); } return JsonUtility.FromJson(text); } public static Sprite LoadSprite(string path) { return unfunnyBundle.LoadAsset(path); } } [BepInPlugin("TheTimeSweeper.SillySkills", "SillySkills", "1.2.0")] public class SillySkillsPlugin : BaseUnityPlugin { private void Awake() { Log.Init(((BaseUnityPlugin)this).Logger); Assets.Init(((BaseUnityPlugin)this).Info); if (TestValueManager.testingEnabled) { ((Component)this).gameObject.AddComponent(); } InitSkills(); } private void Start() { Assets.LateInit(); } private static void InitSkills() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Expected O, but got Unknown //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Expected O, but got Unknown //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Expected O, but got Unknown //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Expected O, but got Unknown SkillInfo val = new SkillInfo(); val.ID = "AirChannelDashGood"; val.displayName = "Gust Burst"; val.description = "Dash forward with such force that enemies in the area are pulled into your wake!"; val.enhancedDescription = "Creates a secondary burst on landing!"; val.icon = Assets.LoadSprite("AirChannelDashGood"); val.tier = 1; val.stateType = typeof(AirChannelDashGoodState); val.skillStats = Assets.LoadJsonFromFile("AirChannelDashGoodSkillStats.json"); val.priceMultiplier = 4; SkillInfo val2 = val; Skills.Register(val2); val = new SkillInfo(); val.ID = GustBurstButBigState.staticID; val.displayName = "Gale Burst"; val.description = "Create large pulling wind bursts at your position!"; val.enhancedDescription = "Create a third, larger wind burst!"; val.icon = Assets.LoadSprite("GustBurstButBig"); val.tier = 3; val.stateType = typeof(GustBurstButBigState); SkillInfo obj = val; SkillStats val3 = new SkillStats(); val3.ID = new string[1] { GustBurstButBigState.staticID }; val3.elementType = new string[1] { "Air" }; val3.subElementType = new string[1] { "Air" }; val3.targetNames = new string[2] { "EnemyHurtBox", "DestructibleHurtBox" }; val3.damage = new int[1] { 17 }; val3.cooldown = new float[1] { 5f }; val3.knockbackMultiplier = new float[3] { -20f, -17f, -12f }; val3.hitStunDurationModifier = new float[1] { 1.2f }; val3.sameAttackImmunityTime = new float[1] { 0.25f }; obj.skillStats = val3; val.priceMultiplier = 6; SkillInfo val4 = val; Skills.Register(val4); val = new SkillInfo(); val.ID = GustBurstButEarthState.staticID; val.displayName = "Stone Outburst"; val.description = "Create an impassible ring of stones, pushing enemies towards you!"; val.enhancedDescription = "Stones are larger and deal more damage!"; val.icon = Assets.LoadSprite("GustBurstButEarth"); val.tier = 3; val.stateType = typeof(GustBurstButEarthState); SkillInfo obj2 = val; val3 = new SkillStats(); val3.ID = new string[1] { GustBurstButEarthState.staticID }; val3.elementType = new string[1] { "Earth" }; val3.subElementType = new string[1] { "Earth" }; val3.targetNames = new string[2] { "EnemyFloorContact", "DestructibleHurtBox" }; val3.damage = new int[3] { 40, 50, 0 }; val3.cooldown = new float[1] { 7f }; val3.knockbackMultiplier = new float[3] { 0f, 0f, 1f }; val3.knockbackOverwrite = new bool[1]; val3.hitStunDurationModifier = new float[3] { 3f, 3f, 1f }; val3.sameAttackImmunityTime = new float[1]; val3.sameTargetImmunityTime = new float[1] { 0.5f }; val3.showDamageNumber = new bool[3] { true, true, false }; obj2.skillStats = val3; val.priceMultiplier = 6; SkillInfo val5 = val; Skills.Register(val5); } } public class FloorSpike : MonoBehaviour { public Sprite TopSprite; public Sprite SideSprite; public Sprite BottomSprite; public SpriteRenderer spikeRendererRenderer; [SerializeField] private Transform spriteAnchor; [SerializeField] private Attack attackBox; [SerializeField] private GameObject floorContact; private Vector3 _summonerPosition; private bool _invisible; private AttackInfo _onHitInfo; private int _attackStopwatchID; private int _riseStopwatchID; private int _riseStage; private float[] _riseStageScales = new float[2] { 0.2f, 1f }; public Attack AttackBox => attackBox; public void Init(Vector3 summonerPosition, FacingDirection direction, bool invisible) { //IL_0039: 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_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown //IL_00b8: 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_00c4: 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_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Expected I4, but got Unknown _attackStopwatchID = ChaosStopwatch.Begin(0.2f, true, 3f, 2, 0); _riseStopwatchID = ChaosStopwatch.Begin(0f, true, 0.0417f, _riseStageScales.Length, 0); _summonerPosition = summonerPosition; _invisible = invisible; _onHitInfo = attackBox.atkInfo; Attack obj = attackBox; obj.entityCollisionEventHandlers = (EntityCollisionEventHandler)Delegate.Combine((Delegate?)(object)obj.entityCollisionEventHandlers, (Delegate?)new EntityCollisionEventHandler(onAttackHit)); toggleAttack(status: true); if (_invisible) { ((Renderer)spikeRendererRenderer).enabled = false; return; } spriteAnchor.localScale = new Vector3(1f, 0f, 1f); switch ((int)direction) { case 0: spikeRendererRenderer.sprite = BottomSprite; break; case 1: spikeRendererRenderer.sprite = SideSprite; break; case 2: spikeRendererRenderer.sprite = TopSprite; break; case 3: spikeRendererRenderer.sprite = SideSprite; spikeRendererRenderer.flipX = true; break; } PlayPlaySpawnParticles(); } private void PlayPlaySpawnParticles() { //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_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: 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_0098: Unknown result type (might be due to invalid IL or missing references) PoolManager.GetPoolItem().EmitSingle((int?)3, (Vector3?)(((Component)this).transform.position + Vector3.up * 0.7f), (ParticleSystemOverride)null, (Vector3?)null, 0f, (float?)null); PoolManager.GetPoolItem().EmitSingle((int?)2, (Vector3?)((Component)this).transform.position, (ParticleSystemOverride)null, (Vector3?)null, 0f, (float?)null); ((ParticleEffect)PoolManager.GetPoolItem()).Emit((int?)1, (Vector3?)((Component)this).transform.position, (ParticleSystemOverride)null, (Vector3?)null, 0f, (float?)null, (Transform)null); } private void OnDestroy() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown Attack obj = attackBox; obj.entityCollisionEventHandlers = (EntityCollisionEventHandler)Delegate.Remove((Delegate?)(object)obj.entityCollisionEventHandlers, (Delegate?)new EntityCollisionEventHandler(onAttackHit)); } private void Update() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: 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_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected I4, but got Unknown //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Invalid comparison between Unknown and I4 //IL_006c: Unknown result type (might be due to invalid IL or missing references) StopwatchState val = ChaosStopwatch.CheckInterval(_attackStopwatchID, true); StopwatchState val2 = val; switch (val2 - -1) { case 2: toggleAttack(status: false); break; case 0: BreakSelf(); break; } if ((int)ChaosStopwatch.CheckInterval(_riseStopwatchID, true) == 1) { spriteAnchor.localScale = new Vector3(1f, _riseStageScales[_riseStage], 1f); _riseStage++; } } private void onAttackHit(Entity givenEnt) { //IL_0026: 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_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_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0078: 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_0084: 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_008b: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)givenEnt == (Object)null) && !((Object)(object)givenEnt.hurtBoxTransform == (Object)null)) { Vector3 position = givenEnt.hurtBoxTransform.position; float num = Vector2.Distance(Vector2.op_Implicit(_summonerPosition), Vector2.op_Implicit(position)); float num2 = Mathf.Lerp(-25f, 70f, num / 10f); _onHitInfo.knockbackVector = attackBox.GetKnockbackVector(default(Vector2), default(Vector2), num2, true, default(Vector2)); givenEnt.ApplyKnockback(_onHitInfo); } } private void toggleAttack(bool status) { ((Component)AttackBox).gameObject.SetActive(status); floorContact.SetActive(!status && !_invisible); } private void BreakSelf() { //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_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: 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_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: 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_0137: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0146: 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_0187: 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_0196: Unknown result type (might be due to invalid IL or missing references) //IL_019b: 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) //IL_01dc: 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_01eb: Unknown result type (might be due to invalid IL or missing references) SoundManager.PlayAudioWithDistance("RockExplode", (Vector2?)Vector2.op_Implicit(((Component)this).transform.position), (Transform)null, 24f, -1f, SoundManager.StandardPitchRange, false); DustEmitter poolItem = PoolManager.GetPoolItem(); int num = 40; float num2 = 0.25f; Vector3? val = ((Component)this).transform.position + Vector3.down * 0.25f; poolItem.EmitCircle(num, num2, -1f, -1f, val, (Vector3?)null); PoolManager.GetPoolItem().EmitSingle((RockDebrisType)0, (int?)3, (Vector3?)(((Component)this).transform.position + Vector3.up * 1.125f), (ParticleSystemOverride)null, (Vector3?)null, 0f, (float?)null); PoolManager.GetPoolItem().EmitSingle((RockDebrisType)0, (int?)3, (Vector3?)(((Component)this).transform.position + Vector3.up * 1.75f), (ParticleSystemOverride)null, (Vector3?)null, 0f, (float?)null); PoolManager.GetPoolItem().EmitSingle((RockDebrisType)0, (int?)1, (Vector3?)(((Component)this).transform.position + Vector3.up * 2.5f), (ParticleSystemOverride)null, (Vector3?)null, 0f, (float?)null); PoolManager.GetPoolItem().EmitSingle((RockDebrisType)0, (int?)3, (Vector3?)(((Component)this).transform.position + Vector3.left * 0.33f), (ParticleSystemOverride)null, (Vector3?)null, 0f, (float?)null); PoolManager.GetPoolItem().EmitSingle((RockDebrisType)0, (int?)3, (Vector3?)(((Component)this).transform.position + Vector3.right * 0.33f), (ParticleSystemOverride)null, (Vector3?)null, 0f, (float?)null); if ((Object)(object)((Component)this).gameObject != (Object)null) { Object.Destroy((Object)(object)((Component)this).gameObject); } } } public static class Utils { public enum SkillEmpowerment { Normal, Empowered, Ultimate } private static int savedJsonCount; public static void SaveJson(T obj, string filename = "") { string contents = JsonUtility.ToJson((object)obj, true); string text = Application.persistentDataPath + $"/ALLTHETHINGS2/{filename}{obj}.json"; savedJsonCount++; File.WriteAllText(text, contents); Log.Warning("printedjson to " + text); } public static SkillEmpowerment GetSkillEmpowerment(this SkillState state) { return GetSkillEmpowerment(state.IsEmpowered, state.isUltimate); } public static SkillEmpowerment GetSkillEmpowerment(bool isEmpowered, bool isUltimate) { return isUltimate ? SkillEmpowerment.Ultimate : (isEmpowered ? SkillEmpowerment.Empowered : SkillEmpowerment.Normal); } public static void PrintMyCodePlease() { SkillStats val = Assets.LoadJsonFromFile("AirChannelDashGoodSkillStats.json"); string text = "printing " + ((object)val).GetType(); FieldInfo[] fields = ((object)val).GetType().GetFields(); int num = 0; foreach (FieldInfo fieldInfo in fields) { if (fieldInfo.Name.Length > num) { num = fieldInfo.Name.Length; } } foreach (FieldInfo fieldInfo2 in fields) { text = text + "\nskillStats." + fieldInfo2.Name + "[i] = attackInfo." + fieldInfo2.Name + ";"; } Log.Message(text); } private static object GetCodeTypeString(object infoValue) { string text = infoValue.GetType().ToString(); text = text.Replace("System.String", "string"); text = text.Replace("System.Boolean", "bool"); text = text.Replace("System.Int32", "int"); return text.Replace("System.Single", "float"); } public static void printAllFields(T obj, bool saveJson = false) { string text = "printing " + obj.GetType(); FieldInfo[] fields = obj.GetType().GetFields(); int num = 0; foreach (FieldInfo fieldInfo in fields) { if (fieldInfo.Name.Length > num) { num = fieldInfo.Name.Length; } } foreach (FieldInfo fieldInfo2 in fields) { text += $"\n{fieldInfo2.Name.PadLeft(num, '-')}| {fieldInfo2.GetValue(obj)}"; } Log.Message(text); if (saveJson) { SaveJson(obj); } } public static void PrintStatData(StatData self) { Log.Warning("Printing all stat data"); foreach (KeyValuePair item in self.statDict) { Log.Warning(item.Key + ":"); if (item.Value is List) { PrintList(item.Value as List); } if (item.Value is List) { PrintList(item.Value as List); } if (item.Value is List) { PrintList(item.Value as List); } if (item.Value is List) { PrintList(item.Value as List); } } } public static void PrintList(List list) { Log.Warning("Printing list. Count: " + list.Count); for (int i = 0; i < list.Count; i++) { Log.Warning(list[i]); } } public static List DistributePointsEvenlyAroundCircle(int points, float radius, Vector3 origin) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0044: 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) List list = new List(); double num = Math.PI * 2.0 / (double)points; Vector3 item = default(Vector3); for (int i = 0; i < points; i++) { double num2 = num * (double)i; ((Vector3)(ref item))..ctor((float)((double)radius * Math.Cos(num2) + (double)origin.x), (float)((double)radius * Math.Sin(num2) + (double)origin.y), origin.z); list.Add(item); } return list; } } } namespace SillySkills.States { public class AirChannelDashGoodState : BaseDashState { public static string staticID = "AirChannelDashGood"; private WindBurst currentWB; private AirChannel currentAC; private Vector2 spawnPosition; private float burstScale = 1.75f; private ParticleSystemOverride implosionOverride = new ParticleSystemOverride { startSize = 5.5f, startLifetime = 0.7f }; private ParticleSystemOverride implosionOverrideLarge = new ParticleSystemOverride { startSize = 6.5f, startLifetime = 0.6f }; public AirChannelDashGoodState(FSM fsm, Player parentPlayer) : base(staticID, fsm, parentPlayer) { //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_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown ((SkillState)this).applyStopElementStatus = true; ((SkillState)this).InitChargeSkillSettings(2, 0f, ((SkillState)this).skillData, (SkillState)(object)this); } public override void SetEmpowered(bool givenStatus, BoolVarStatMod givenMod) { ((SkillState)this).SetEmpowered(givenStatus, givenMod); burstScale = ((!((SkillState)this).IsEmpowered) ? 1.75f : 2f); } public override void OnEnter() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0085: 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_00d0: 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_00dc: 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) ((BaseDashState)this).OnEnter(); if (base.cooldownReady) { spawnPosition = Vector2.op_Implicit(((State)this).parent.attackOriginTrans.position); CreateImplosion(); SoundManager.PlayAudioWithDistance("StandardHeavySwing", (Vector2?)Vector2.op_Implicit(((Component)((State)this).parent).transform.position), (Transform)null, 24f, -1f, 1.4f, false); PoolManager.GetPoolItem("WindTrail").Emit(spawnPosition, spawnPosition + ((SkillState)this).inputVector * 5f, -1, false, -1f, true, 0.3f, 0.15f, (Color32?)null, true, (Vector3?)null, (string)null); PoolManager.GetPoolItem("WindTrail").Emit(spawnPosition, spawnPosition + ((SkillState)this).inputVector * 5f, -1, false, -1f, true, 0.4f, 0.15f, (Color32?)null, true, (Vector3?)null, (string)null); } } public override void OnExit() { //IL_005e: 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_0068: Unknown result type (might be due to invalid IL or missing references) if (base.cooldownReady && !((State)this).fsm.nextStateName.Contains("Hurt") && !((State)this).fsm.nextStateName.Contains("Dead")) { CreateAirChannel(); if (((SkillState)this).IsEmpowered) { spawnPosition = Vector2.op_Implicit(((State)this).parent.attackOriginTrans.position); CreateImplosion(); } } ((BaseDashState)this).OnExit(); } private void CreateImplosion() { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_011a: 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_0179: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0212: Unknown result type (might be due to invalid IL or missing references) currentWB = WindBurst.CreateBurst(Vector2.op_Implicit(spawnPosition), ((Entity)((State)this).parent).skillCategory, ((SkillState)this).skillID, 1, burstScale); currentWB.emitParticles = false; PoolManager.GetPoolItem("WindBurstEffect").Emit((int?)3, (Vector3?)Vector2.op_Implicit(spawnPosition), (ParticleSystemOverride)null, (Vector3?)null, 0f, (float?)null, (Transform)null); PoolManager.GetPoolItem("AirVortex").Emit((int?)1, (Vector3?)Vector2.op_Implicit(spawnPosition), implosionOverride, (Vector3?)new Vector3(0f, 0f, Random.Range(0f, 33f)), 0f, (float?)null, (Transform)null); PoolManager.GetPoolItem("AirVortex").Emit((int?)1, (Vector3?)Vector2.op_Implicit(spawnPosition), implosionOverride, (Vector3?)new Vector3(0f, 0f, Random.Range(180f, 213f)), 0f, (float?)null, (Transform)null); PoolManager.GetPoolItem("AirVortex").Emit((int?)1, (Vector3?)Vector2.op_Implicit(spawnPosition), implosionOverride, (Vector3?)new Vector3(0f, 0f, Random.Range(0f, 360f)), 0f, (float?)null, (Transform)null); PoolManager.GetPoolItem("AirVortex").Emit((int?)1, (Vector3?)Vector2.op_Implicit(spawnPosition), implosionOverrideLarge, (Vector3?)new Vector3(0f, 0f, Random.Range(0f, 360f)), 0f, (float?)null, (Transform)null); DustEmitter poolItem = PoolManager.GetPoolItem(); int num = 150; float num2 = 2f; Vector3? val = Vector2.op_Implicit(spawnPosition); poolItem.EmitCircle(num, num2, -8f, -1f, val, (Vector3?)null); } private void CreateAirChannel() { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: 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_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) currentAC = ((SkillState)this).ChaosInst(AirChannel.Prefab, (Vector2?)spawnPosition, (Quaternion?)Globals.GetRotationQuaternion(((SkillState)this).inputVector), (Transform)null); currentAC.attack.SetAttackInfo(((Entity)((State)this).parent).skillCategory, ((SkillState)this).skillID, 2, false); currentAC.attack.knockbackOverwriteVector = ((SkillState)this).inputVector; currentAC.targetVector = ((SkillState)this).inputVector; } } public class GustBurstButBigState : SkillState { public static string staticID = "GustBurstButBig"; private WindBurst currentWB; private float burstScale = 5f; private int stopwatchID; private bool switchDirection; private ParticleSystemOverride implosionOverrideNormal = new ParticleSystemOverride { startSize = 6f * scaleNormal, startLifetime = 0.7f }; private ParticleSystemOverride implosionOverrideNormalLarge = new ParticleSystemOverride { startSize = 12f * scaleNormal, startLifetime = 0.6f }; private ParticleSystemOverride implosionOverrideEmpowered = new ParticleSystemOverride { startSize = 6f * scaleEmpowered, startLifetime = 0.7f }; private ParticleSystemOverride implosionOverrideEmpoweredLarge = new ParticleSystemOverride { startSize = 13f * scaleEmpowered, startLifetime = 0.6f }; private ParticleSystemOverride implosionOverrideUltimate = new ParticleSystemOverride { startSize = 6f * scaleUltimate, startLifetime = 0.7f }; private ParticleSystemOverride implosionOverrideUltimateLarge = new ParticleSystemOverride { startSize = 13f * scaleUltimate, startLifetime = 0.6f }; private static float scaleNormal = 0.85f; private static float scaleEmpowered = 1.1f; private static float scaleUltimate = 1.7f; private ParticleSystemOverride implosionOverride; private ParticleSystemOverride implosionOverrideLarge; private float scaleMultiplier; private float stopwatchIntervalTime; private int stopwatchTotalIntervals; private int skillLevel; private void SetValues() { switch (((SkillState)(object)this).GetSkillEmpowerment()) { default: implosionOverride = implosionOverrideNormal; implosionOverrideLarge = implosionOverrideNormalLarge; scaleMultiplier = scaleNormal; stopwatchIntervalTime = 0.25f; stopwatchTotalIntervals = 2; skillLevel = 1; break; case Utils.SkillEmpowerment.Empowered: implosionOverride = implosionOverrideEmpowered; implosionOverrideLarge = implosionOverrideEmpoweredLarge; scaleMultiplier = scaleEmpowered; stopwatchIntervalTime = 0.15f; stopwatchTotalIntervals = 3; skillLevel = 2; break; case Utils.SkillEmpowerment.Ultimate: implosionOverride = implosionOverrideUltimate; implosionOverrideLarge = implosionOverrideUltimateLarge; scaleMultiplier = scaleUltimate; stopwatchIntervalTime = 0.12f; stopwatchTotalIntervals = 8; skillLevel = 3; break; } } public GustBurstButBigState(FSM newFSM, Player newEnt) : base(staticID, newFSM, newEnt) { //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_0027: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown //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_0058: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Expected O, but got Unknown //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Expected O, but got Unknown //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: 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_00cf: Expected O, but got Unknown //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_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Expected O, but got Unknown //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_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Expected O, but got Unknown base.applyStopElementStatus = true; base.hasSignatureVariant = true; ((SkillState)this).SetAnimTimes(0.15f, 0.2f, 0.1f, 0.5f, 0.6f, 0.7f); } public override void OnEnter() { ((SkillState)this).OnEnter(); SetValues(); stopwatchID = ChaosStopwatch.Begin(0.1f, true, stopwatchIntervalTime, stopwatchTotalIntervals, 0); ((State)this).parent.ToggleEnemyFloorCollisions(false); } public override void ExecuteSkill() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_001d: 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_0031: Expected I4, but got Unknown if (!((SkillState)this).CancelToDash(false)) { StopwatchState val = ChaosStopwatch.CheckInterval(stopwatchID, true); StopwatchState val2 = val; switch (val2 - -1) { case 0: ((SkillState)this).ExecuteSkill(); break; case 1: break; case 2: PlayAnim(base.animExecTime); AirChannelDash_CreateImplosion(); break; } } } private void AirChannelDash_CreateImplosion() { //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_0013: 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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_012d: 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) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) Vector3 position = ((State)this).parent.attackOriginTrans.position; currentWB = WindBurst.CreateBurst(position, ((Entity)((State)this).parent).skillCategory, base.skillID, skillLevel, burstScale * scaleMultiplier); currentWB.emitParticles = false; PoolManager.GetPoolItem("AirVortex").Emit((int?)1, (Vector3?)position, implosionOverride, (Vector3?)new Vector3(0f, 0f, Random.Range(0f, 33f)), 0f, (float?)null, (Transform)null); PoolManager.GetPoolItem("AirVortex").Emit((int?)1, (Vector3?)position, implosionOverride, (Vector3?)new Vector3(0f, 0f, Random.Range(180f, 213f)), 0f, (float?)null, (Transform)null); PoolManager.GetPoolItem("AirVortex").Emit((int?)1, (Vector3?)position, implosionOverrideLarge, (Vector3?)new Vector3(0f, 0f, Random.Range(0f, 360f)), 0f, (float?)null, (Transform)null); DustEmitter poolItem = PoolManager.GetPoolItem(); int num = 150; float num2 = 2f; Vector3? val = position; poolItem.EmitCircle(num, num2, -8f, -1f, val, (Vector3?)null); SoundManager.PlayAudioWithDistance("StandardHeavySwing", (Vector2?)Vector2.op_Implicit(((Component)((State)this).parent).transform.position), (Transform)null, 24f, -1f, 0.9f, false); } private void PlayAnim(float givenTime) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0026: 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_002b: 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) ((Entity)((State)this).parent).FaceTarget(((Component)((State)this).parent).transform.position + ((!switchDirection) ? Vector3.left : Vector3.right), 4, false); AnimationExtension.PlayDirectional(((Entity)((State)this).parent).anim, ((State)this).parent.GSlamAnimStr, -1, givenTime); switchDirection = !switchDirection; } public override void OnExit() { ((SkillState)this).OnExit(); ((State)this).parent.ToggleEnemyFloorCollisions(true); } } public class GustBurstButEarthState : SkillState { public static string staticID = "GustBurstButEarth"; private AudioSource holdAudioSource; private CastingCircle castCircle; public override string OnEnterAnimStr => ((State)this).parent.GSlamAnimStr; public GustBurstButEarthState(FSM newFSM, Player newEnt) : base(staticID, newFSM, newEnt) { base.disableStartCooldown = true; base.isHoldSkill = true; ((SkillState)this).SetAnimTimes(0.15f, 0.2f, 0.3f, 0.8f, 0.9f, 1f); } public override void OnEnter() { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) ((SkillState)this).OnEnter(); ((SkillState)this).SetSkillLevel((!((SkillState)this).IsEmpowered) ? 1 : 2); float num = (((SkillState)this).IsEmpowered ? 6f : 4.7f); castCircle = CastingCirclePool.Spawn("Draw", ((Component)((State)this).parent).transform.position, false, (GameObject)null, true, false, 0f, num, num, (Color?)CastingCircle.defaultColor, 0.2f); ModifyCircle(fuckery: true); } public void ModifyCircle(bool fuckery) { for (int i = 2; i <= 4; i++) { ((Component)castCircle.castingCircleImages[i]).gameObject.SetActive(!fuckery); } } public override void HandleHoldButton() { AnimationExtension.PlayDirectional(((Entity)((State)this).parent).anim, ((State)this).parent.GSlamAnimStr, -1, base.animHoldTime); base.holdReleased = !((State)this).parent.inputDevice.GetButton("Skill" + base.skillSlot); holdAudioSource = SoundManager.PlayIfNotPlaying("EarthLoop", holdAudioSource, ((Component)((State)this).parent).transform, false, -1f, -1f); } public override void OnExit() { if (!base.skillExecuted) { ((SkillState)this).StartCooldownTimer(-1f, true); } ((SkillState)this).OnExit(); StopCastingCircle(); StopAudio(); } private void StopAudio() { if ((Object)(object)holdAudioSource != (Object)null) { holdAudioSource.Stop(); holdAudioSource = null; } } public override void ExecuteSkill() { //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0098: 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_00ba: 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_00d9: 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_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Expected O, but got Unknown //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Expected O, but got Unknown ((SkillState)this).ExecuteSkill(); ((SkillState)this).StartCooldownTimer(-1f, true); StopCastingCircle(); AnimationExtension.PlayDirectional(((Entity)((State)this).parent).anim, ((State)this).parent.GSlamAnimStr, -1, base.animExecTime); StopAudio(); SoundManager.PlayAudioWithDistance("EarthExplosion", (Vector2?)Vector2.op_Implicit(((Component)((State)this).parent).transform.position), (Transform)null, 24f, -1f, 0.9f, false); int num = (((SkillState)this).IsEmpowered ? 5 : 4); List list = Utils.DistributePointsEvenlyAroundCircle(16, num, ((Component)((State)this).parent).transform.position); for (int i = 0; i < list.Count; i++) { bool invisible = CheckCircleExceptSpikes(list[i], 0.1f, LayerMask.op_Implicit(ChaosCollisions.layerAllWallAndObst)); CreateFloorSpike(list[i], ((Component)((State)this).parent).transform.position, invisible); } EarthBurst val = EarthBurst.CreateBurst(((Component)((State)this).parent).transform.position, ((Entity)((State)this).parent).skillCategory, staticID, 3, 2f); Attack attack = ((ElementalBurst)val).attack; attack.entityCollisionEventHandlers = (EntityCollisionEventHandler)Delegate.Combine((Delegate?)(object)attack.entityCollisionEventHandlers, (Delegate?)new EntityCollisionEventHandler(nip)); } private void nip(Entity entity) { } private void StopCastingCircle() { if ((Object)(object)castCircle != (Object)null) { ModifyCircle(fuckery: false); castCircle.Reset(false); castCircle = null; } } private bool CheckCircleExceptSpikes(Vector3 location, float radius, LayerMask layerMask) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) Collider2D[] array = Physics2D.OverlapCircleAll(Vector2.op_Implicit(location), radius, LayerMask.op_Implicit(layerMask)); for (int i = 0; i < array.Length; i++) { if (!Object.op_Implicit((Object)(object)((Component)array[i]).gameObject.GetComponentInParent())) { return true; } } return false; } private void CreateFloorSpike(Vector3 point, Vector3 playerPosition, bool invisible) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0009: 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_0020: 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_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_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) FacingDirection differenceDirection = GetDifferenceDirection(point, playerPosition); FloorSpike floorSpike = ((SkillState)this).ChaosInst(((SkillState)this).IsEmpowered ? Assets.FloorSpikeLarge : Assets.FloorSpikeSmall, (Vector2?)Vector2.op_Implicit(point), (Quaternion?)null, (Transform)null); floorSpike.AttackBox.SetAttackInfo(((Entity)((State)this).parent).skillCategory, base.skillID, (!((SkillState)this).IsEmpowered) ? 1 : 2, false); floorSpike.AttackBox.knockbackOverwriteVector = Vector2.op_Implicit(((Component)((State)this).parent).transform.position - point); floorSpike.Init(playerPosition, differenceDirection, invisible); } private FacingDirection GetDifferenceDirection(Vector3 point, Vector3 position) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: 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_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) Vector3 val = point - position; float num = Vector3.Angle(val, Vector3.up); if (num < 45f) { return (FacingDirection)2; } if (num < 135f) { return (FacingDirection)((!(val.x > 0f)) ? 1 : 3); } return (FacingDirection)0; } } }